From 7f49cd48e07d510b34ec33e3d86f93b2d3c2d904 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 19 Mar 2025 14:43:21 -0500 Subject: [PATCH 01/27] Remove IsAspireHost bits. Fixes #2847 --- .../AspireApp.AppHost/AspireApp.AppHost.csproj | 1 - .../AspireApp.ResourceAppHost.csproj | 1 - .../AspireApp.AppHost/AspireApp.AppHost.csproj | 1 - .../azure/snippets/AppHost.Bicep/AppHost.Bicep.csproj | 1 - .../AspireApp.AppHost/AspireApp.AppHost.csproj | 1 - .../AspireSql.AppHost/AspireSql.AppHost.csproj | 1 - .../AspireSql.AppHost/AspireSql.AppHost.csproj | 1 - .../AspireSQLEFCore.AppHost.csproj | 1 - .../MailDevResource.AppHost.csproj | 1 - .../MailDevResource.AppHost.csproj | 1 - .../MailDevResource.AppHost.csproj | 1 - .../snippets/Dapr/Dapr.AppHost/Dapr.AppHost.csproj | 1 - .../Orleans/OrleansAppHost/OrleansAppHost.csproj | 1 - docs/fundamentals/app-host-overview.md | 5 ++--- .../BrowserTelemetry.AppHost.csproj | 1 - docs/fundamentals/dotnet-aspire-sdk.md | 11 ++++++----- .../AspireApp.AppHost/AspireApp.AppHost.csproj | 1 - .../AspireApp.AppHost/AspireApp.AppHost.csproj | 1 - .../AspireApp.AppHost/AspireApp.AppHost.csproj | 1 - .../Networking.AppHost/Networking.AppHost.csproj | 1 - .../Parameters.AppHost/Parameters.AppHost.csproj | 1 - .../VolumeMounts.AppHost/VolumeMounts.AppHost.csproj | 1 - docs/get-started/build-your-first-aspire-app.md | 2 +- .../PythonSample.AppHost/PythonSample.AppHost.csproj | 1 - .../AspireSample.AppHost/AspireSample.AppHost.csproj | 1 - .../signalr/SignalR.AppHost/SignalR.AppHost.csproj | 1 - docs/snippets/azure/AppHost/AppHost.csproj | 1 - .../AspireStorage.AppHost.csproj | 1 - .../mstest/AspireApp.AppHost/AspireApp.AppHost.csproj | 1 - .../nunit/AspireApp.AppHost/AspireApp.AppHost.csproj | 1 - .../xunit/AspireApp.AppHost/AspireApp.AppHost.csproj | 1 - 31 files changed, 9 insertions(+), 37 deletions(-) diff --git a/docs/app-host/snippets/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/app-host/snippets/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj index e47acdcb24..8af87d78ac 100644 --- a/docs/app-host/snippets/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj +++ b/docs/app-host/snippets/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -7,7 +7,6 @@ net9.0 enable enable - true 7b352f08-305b-4032-9a21-90deb02efc04 diff --git a/docs/app-host/snippets/AspireApp/AspireApp.ResourceAppHost/AspireApp.ResourceAppHost.csproj b/docs/app-host/snippets/AspireApp/AspireApp.ResourceAppHost/AspireApp.ResourceAppHost.csproj index 5d2de61e73..581f0f49ef 100644 --- a/docs/app-host/snippets/AspireApp/AspireApp.ResourceAppHost/AspireApp.ResourceAppHost.csproj +++ b/docs/app-host/snippets/AspireApp/AspireApp.ResourceAppHost/AspireApp.ResourceAppHost.csproj @@ -7,7 +7,6 @@ net9.0 enable enable - true 7b352f08-305b-4032-9a21-90deb02efc04 diff --git a/docs/authentication/snippets/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/authentication/snippets/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj index 0e70c4f95d..31a1747138 100644 --- a/docs/authentication/snippets/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj +++ b/docs/authentication/snippets/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -7,7 +7,6 @@ net9.0 enable enable - true 10daccf5-26f1-4641-80b2-95f0357607cf diff --git a/docs/azure/snippets/AppHost.Bicep/AppHost.Bicep.csproj b/docs/azure/snippets/AppHost.Bicep/AppHost.Bicep.csproj index f6174aadd1..aec485cc05 100644 --- a/docs/azure/snippets/AppHost.Bicep/AppHost.Bicep.csproj +++ b/docs/azure/snippets/AppHost.Bicep/AppHost.Bicep.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 5e45e8bd-353b-48d8-ac57-a89e5ee3f8ec diff --git a/docs/database/snippets/cosmos-db/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/database/snippets/cosmos-db/AspireApp.AppHost/AspireApp.AppHost.csproj index 5c0ad205d8..04aa7fff03 100644 --- a/docs/database/snippets/cosmos-db/AspireApp.AppHost/AspireApp.AppHost.csproj +++ b/docs/database/snippets/cosmos-db/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 8cfd753f-f8ea-42ad-897b-8549f2f74848 diff --git a/docs/database/snippets/tutorial/aspiresqldeployazure/AspireSql.AppHost/AspireSql.AppHost.csproj b/docs/database/snippets/tutorial/aspiresqldeployazure/AspireSql.AppHost/AspireSql.AppHost.csproj index 39bea246f9..c31c771ef1 100644 --- a/docs/database/snippets/tutorial/aspiresqldeployazure/AspireSql.AppHost/AspireSql.AppHost.csproj +++ b/docs/database/snippets/tutorial/aspiresqldeployazure/AspireSql.AppHost/AspireSql.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 15db40fe-0cea-49e1-96c4-b86b7e4d3fd3 diff --git a/docs/database/snippets/tutorial/aspiresqldeploycontainer/AspireSql.AppHost/AspireSql.AppHost.csproj b/docs/database/snippets/tutorial/aspiresqldeploycontainer/AspireSql.AppHost/AspireSql.AppHost.csproj index fe7183e354..88cd7b3c00 100644 --- a/docs/database/snippets/tutorial/aspiresqldeploycontainer/AspireSql.AppHost/AspireSql.AppHost.csproj +++ b/docs/database/snippets/tutorial/aspiresqldeploycontainer/AspireSql.AppHost/AspireSql.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 15db40fe-0cea-49e1-96c4-b86b7e4d3fd3 diff --git a/docs/database/snippets/tutorial/aspiresqlefcore/AspireSQLEFCore.AppHost/AspireSQLEFCore.AppHost.csproj b/docs/database/snippets/tutorial/aspiresqlefcore/AspireSQLEFCore.AppHost/AspireSQLEFCore.AppHost.csproj index 96ea7ed21e..a32c13c61b 100644 --- a/docs/database/snippets/tutorial/aspiresqlefcore/AspireSQLEFCore.AppHost/AspireSQLEFCore.AppHost.csproj +++ b/docs/database/snippets/tutorial/aspiresqlefcore/AspireSQLEFCore.AppHost/AspireSQLEFCore.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 65600b1c-627d-4255-a706-bf7e21108831 diff --git a/docs/extensibility/snippets/MailDevResource/MailDevResource.AppHost/MailDevResource.AppHost.csproj b/docs/extensibility/snippets/MailDevResource/MailDevResource.AppHost/MailDevResource.AppHost.csproj index 0a9209d6b0..492e258921 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDevResource.AppHost/MailDevResource.AppHost.csproj +++ b/docs/extensibility/snippets/MailDevResource/MailDevResource.AppHost/MailDevResource.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 9c9bfb14-6706-4421-bc93-37cbaebe36d0 diff --git a/docs/extensibility/snippets/MailDevResourceAndComponent/MailDevResource.AppHost/MailDevResource.AppHost.csproj b/docs/extensibility/snippets/MailDevResourceAndComponent/MailDevResource.AppHost/MailDevResource.AppHost.csproj index 0a9209d6b0..492e258921 100644 --- a/docs/extensibility/snippets/MailDevResourceAndComponent/MailDevResource.AppHost/MailDevResource.AppHost.csproj +++ b/docs/extensibility/snippets/MailDevResourceAndComponent/MailDevResource.AppHost/MailDevResource.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 9c9bfb14-6706-4421-bc93-37cbaebe36d0 diff --git a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj index 0a9209d6b0..492e258921 100644 --- a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj +++ b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 9c9bfb14-6706-4421-bc93-37cbaebe36d0 diff --git a/docs/frameworks/snippets/Dapr/Dapr.AppHost/Dapr.AppHost.csproj b/docs/frameworks/snippets/Dapr/Dapr.AppHost/Dapr.AppHost.csproj index be6acb9ab9..512b104dad 100644 --- a/docs/frameworks/snippets/Dapr/Dapr.AppHost/Dapr.AppHost.csproj +++ b/docs/frameworks/snippets/Dapr/Dapr.AppHost/Dapr.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 0bd3d839-67a8-422d-aee2-bd9f1c0556a1 diff --git a/docs/frameworks/snippets/Orleans/OrleansAppHost/OrleansAppHost.csproj b/docs/frameworks/snippets/Orleans/OrleansAppHost/OrleansAppHost.csproj index 2b57db826e..be4c2b8ce9 100644 --- a/docs/frameworks/snippets/Orleans/OrleansAppHost/OrleansAppHost.csproj +++ b/docs/frameworks/snippets/Orleans/OrleansAppHost/OrleansAppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 88427062-d086-46c2-b35e-171d742a6fe0 diff --git a/docs/fundamentals/app-host-overview.md b/docs/fundamentals/app-host-overview.md index 1629d187b1..59a607cf50 100644 --- a/docs/fundamentals/app-host-overview.md +++ b/docs/fundamentals/app-host-overview.md @@ -1,7 +1,7 @@ --- title: .NET Aspire orchestration overview description: Learn the fundamental concepts of .NET Aspire orchestration and explore the various APIs for adding resources and expressing dependencies. -ms.date: 03/14/2025 +ms.date: 03/19/2025 ms.topic: overview uid: dotnet/aspire/app-host --- @@ -40,7 +40,7 @@ builder.Build().Run(); ## App host project -The app host project handles running all of the projects that are part of the .NET Aspire project. In other words, it's responsible for orchestrating all apps within the app model. The project itself is a .NET executable project that references the [📦 Aspire.Hosting.AppHost](https://www.nuget.org/packages/Aspire.Hosting.AppHost) NuGet package, sets the `IsAspireHost` property to `true`, and references the [.NET Aspire SDK](dotnet-aspire-sdk.md): +The app host project handles running all of the projects that are part of the .NET Aspire project. In other words, it's responsible for orchestrating all apps within the app model. The project itself is a .NET executable project that references the [📦 Aspire.Hosting.AppHost](https://www.nuget.org/packages/Aspire.Hosting.AppHost) NuGet package, and uses the [.NET Aspire SDK](dotnet-aspire-sdk.md): ```xml @@ -50,7 +50,6 @@ The app host project handles running all of the projects that are part of the .N Exe net9.0 - true diff --git a/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.AppHost/BrowserTelemetry.AppHost.csproj b/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.AppHost/BrowserTelemetry.AppHost.csproj index a011290822..4c60776cb5 100644 --- a/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.AppHost/BrowserTelemetry.AppHost.csproj +++ b/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.AppHost/BrowserTelemetry.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 7247ba20-5e3e-4299-afa7-4ca58ebe3488 diff --git a/docs/fundamentals/dotnet-aspire-sdk.md b/docs/fundamentals/dotnet-aspire-sdk.md index b7f49f1e7e..3149ec9694 100644 --- a/docs/fundamentals/dotnet-aspire-sdk.md +++ b/docs/fundamentals/dotnet-aspire-sdk.md @@ -1,13 +1,13 @@ --- title: .NET Aspire SDK description: Learn -ms.date: 02/25/2025 +ms.date: 03/19/2025 uid: dotnet/aspire/sdk --- # .NET Aspire SDK -The .NET Aspire SDK is intended for [_*.AppHost_ projects](app-host-overview.md#app-host-project), which serve as the .NET Aspire orchestrator. These projects are designated using the `true` property, as well as specifying the `Aspire.AppHost.Sdk` in the project file. The SDK provides a set of features that simplify the development of .NET Aspire apps. +The .NET Aspire SDK is intended for [_*.AppHost_ projects](app-host-overview.md#app-host-project), which serve as the .NET Aspire orchestrator. These projects are designated by their usage of the `Aspire.AppHost.Sdk` in the project file. The SDK provides a set of features that simplify the development of .NET Aspire apps. ## Overview @@ -21,7 +21,6 @@ The [📦 Aspire.AppHost.Sdk](https://www.nuget.org/packages/Aspire.AppHost.Sdk) Exe net9.0 - true @@ -33,7 +32,7 @@ The [📦 Aspire.AppHost.Sdk](https://www.nuget.org/packages/Aspire.AppHost.Sdk) ``` -The preceding example project defines the top-level SDK as `Microsoft.NET.Sdk` and the `Aspire.AppHost.Sdk` as an additive SDK. The `IsAspireHost` property is set to `true` to indicate that this project is an .NET Aspire app host. The project also references the `Aspire.Hosting.AppHost` package which brings in a number of Aspire-related dependencies. +The preceding example project defines the top-level SDK as `Microsoft.NET.Sdk` and the `Aspire.AppHost.Sdk` as an additive SDK. The project also references the `Aspire.Hosting.AppHost` package which brings in a number of Aspire-related dependencies. ## SDK Features @@ -44,11 +43,13 @@ The .NET Aspire SDK provides several key features. Each `ProjectReference` in the [.NET Aspire app host][app-host] project isn't treated as standard project references. Instead, they enable the _app host_ to execute these projects as part of its orchestration. Each project reference triggers a generator to create a `class` that represents the project as an . This metadata is used to populate the named projects in the generated `Projects` namespace. When you call the API, the `Projects` namespace is used to reference the project—passing the generated class as a generic-type parameter. > [!TIP] -> If you need to reference a project in the tranditional way within the app host, set the `IsAspireProjectResource` attribute on the `ProjectReference` element to `false`, as shown in the following example: +> If you need to reference a project in the traditional way within the app host, set the `IsAspireProjectResource` attribute on the `ProjectReference` element to `false`, as shown in the following example: > > ```xml > > ``` +> +> Otherwise, by default, the `ProjectReference` is treated as .NET Aspire project resource. ### Orchestrator dependencies diff --git a/docs/fundamentals/snippets/custom-commands/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/fundamentals/snippets/custom-commands/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj index 0ad7671a29..3511509130 100644 --- a/docs/fundamentals/snippets/custom-commands/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj +++ b/docs/fundamentals/snippets/custom-commands/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -7,7 +7,6 @@ net9.0 enable enable - true 96e09729-6560-4674-add2-deb02f156d36 diff --git a/docs/fundamentals/snippets/integrations/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/fundamentals/snippets/integrations/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj index 67902c7b7f..4d8cb366a9 100644 --- a/docs/fundamentals/snippets/integrations/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj +++ b/docs/fundamentals/snippets/integrations/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true diff --git a/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj index 9636ad26c0..8cb968aefe 100644 --- a/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj +++ b/docs/fundamentals/snippets/lifecycles/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true d1fafd31-bb63-479d-bc2b-a4067786068f diff --git a/docs/fundamentals/snippets/networking/Networking.AppHost/Networking.AppHost.csproj b/docs/fundamentals/snippets/networking/Networking.AppHost/Networking.AppHost.csproj index a31b483ce9..e1c471870c 100644 --- a/docs/fundamentals/snippets/networking/Networking.AppHost/Networking.AppHost.csproj +++ b/docs/fundamentals/snippets/networking/Networking.AppHost/Networking.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true diff --git a/docs/fundamentals/snippets/params/Parameters.AppHost/Parameters.AppHost.csproj b/docs/fundamentals/snippets/params/Parameters.AppHost/Parameters.AppHost.csproj index ab955daa23..5772e2667c 100644 --- a/docs/fundamentals/snippets/params/Parameters.AppHost/Parameters.AppHost.csproj +++ b/docs/fundamentals/snippets/params/Parameters.AppHost/Parameters.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true diff --git a/docs/fundamentals/snippets/volumes/VolumeMounts.AppHost/VolumeMounts.AppHost.csproj b/docs/fundamentals/snippets/volumes/VolumeMounts.AppHost/VolumeMounts.AppHost.csproj index 7d12ed6365..10cfbe8c73 100644 --- a/docs/fundamentals/snippets/volumes/VolumeMounts.AppHost/VolumeMounts.AppHost.csproj +++ b/docs/fundamentals/snippets/volumes/VolumeMounts.AppHost/VolumeMounts.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 46746d27-b91d-48f7-9c06-d13a0f2325a6 diff --git a/docs/get-started/build-your-first-aspire-app.md b/docs/get-started/build-your-first-aspire-app.md index eef4dc75f3..333e8973ef 100644 --- a/docs/get-started/build-your-first-aspire-app.md +++ b/docs/get-started/build-your-first-aspire-app.md @@ -171,7 +171,7 @@ The two projects of interest in this quickstart are the _*.AppHost_ and _*.Servi ### .NET Aspire host project -The _*.AppHost_ project is responsible for acting as the orchestrator, and sets the `IsAspireHost` property of the project file to `true`: +The _*.AppHost_ project is responsible for acting as a local dev-orchestrator: :::code language="xml" source="snippets/quickstart/AspireSample/AspireSample.AppHost/AspireSample.AppHost.csproj" highlight="10"::: diff --git a/docs/get-started/snippets/PythonSample/PythonSample.AppHost/PythonSample.AppHost.csproj b/docs/get-started/snippets/PythonSample/PythonSample.AppHost/PythonSample.AppHost.csproj index 458fed7d01..0415a8ada8 100644 --- a/docs/get-started/snippets/PythonSample/PythonSample.AppHost/PythonSample.AppHost.csproj +++ b/docs/get-started/snippets/PythonSample/PythonSample.AppHost/PythonSample.AppHost.csproj @@ -7,7 +7,6 @@ net9.0 enable enable - true 5fd92a87-fff8-4a09-9f6e-2c0d656e25ba diff --git a/docs/get-started/snippets/quickstart/AspireSample/AspireSample.AppHost/AspireSample.AppHost.csproj b/docs/get-started/snippets/quickstart/AspireSample/AspireSample.AppHost/AspireSample.AppHost.csproj index 27b6b87001..1935298803 100644 --- a/docs/get-started/snippets/quickstart/AspireSample/AspireSample.AppHost/AspireSample.AppHost.csproj +++ b/docs/get-started/snippets/quickstart/AspireSample/AspireSample.AppHost/AspireSample.AppHost.csproj @@ -7,7 +7,6 @@ net9.0 enable enable - true 2aa31fdb-0078-4b71-b953-d23432af8a36 diff --git a/docs/real-time/snippets/signalr/SignalR.AppHost/SignalR.AppHost.csproj b/docs/real-time/snippets/signalr/SignalR.AppHost/SignalR.AppHost.csproj index d1775e6905..cf522cfa45 100644 --- a/docs/real-time/snippets/signalr/SignalR.AppHost/SignalR.AppHost.csproj +++ b/docs/real-time/snippets/signalr/SignalR.AppHost/SignalR.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 8d495870-a988-4f2c-80fe-ebe614c94d35 diff --git a/docs/snippets/azure/AppHost/AppHost.csproj b/docs/snippets/azure/AppHost/AppHost.csproj index bd82bb7fe6..36aa7ab054 100644 --- a/docs/snippets/azure/AppHost/AppHost.csproj +++ b/docs/snippets/azure/AppHost/AppHost.csproj @@ -7,7 +7,6 @@ net9.0 enable enable - true 70839f09-c301-4bf9-aa1d-59b0a2bfb79e diff --git a/docs/storage/snippets/tutorial/AspireStorage/AspireStorage.AppHost/AspireStorage.AppHost.csproj b/docs/storage/snippets/tutorial/AspireStorage/AspireStorage.AppHost/AspireStorage.AppHost.csproj index 17b811dbb8..b6791640e0 100644 --- a/docs/storage/snippets/tutorial/AspireStorage/AspireStorage.AppHost/AspireStorage.AppHost.csproj +++ b/docs/storage/snippets/tutorial/AspireStorage/AspireStorage.AppHost/AspireStorage.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 90b8925f-9539-4074-b384-2172e0b8354a diff --git a/docs/testing/snippets/testing/mstest/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/testing/snippets/testing/mstest/AspireApp.AppHost/AspireApp.AppHost.csproj index 190abbaa17..baf0353a8d 100644 --- a/docs/testing/snippets/testing/mstest/AspireApp.AppHost/AspireApp.AppHost.csproj +++ b/docs/testing/snippets/testing/mstest/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 8832f6df-f7d3-4c65-8eab-22abf6e43ee8 diff --git a/docs/testing/snippets/testing/nunit/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/testing/snippets/testing/nunit/AspireApp.AppHost/AspireApp.AppHost.csproj index e297be95e3..a75b87142e 100644 --- a/docs/testing/snippets/testing/nunit/AspireApp.AppHost/AspireApp.AppHost.csproj +++ b/docs/testing/snippets/testing/nunit/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true 2eb28899-ee86-44a2-b637-287cfc49eeaf diff --git a/docs/testing/snippets/testing/xunit/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/testing/snippets/testing/xunit/AspireApp.AppHost/AspireApp.AppHost.csproj index f9736226ee..f617a62428 100644 --- a/docs/testing/snippets/testing/xunit/AspireApp.AppHost/AspireApp.AppHost.csproj +++ b/docs/testing/snippets/testing/xunit/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -5,7 +5,6 @@ net9.0 enable enable - true c5ce4aa4-0324-4023-9e36-94433cef32dc From d936908bb7287f8e227890ae834efa52a40ca347 Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 21 Mar 2025 07:24:29 -0500 Subject: [PATCH 02/27] New dashboard config to disable resource graph (#2874) * Fixes #2842 * Update configuration.md Co-authored-by: James Newton-King --------- Co-authored-by: James Newton-King --- docs/fundamentals/dashboard/configuration.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/fundamentals/dashboard/configuration.md b/docs/fundamentals/dashboard/configuration.md index f801e01e33..54c53639fc 100644 --- a/docs/fundamentals/dashboard/configuration.md +++ b/docs/fundamentals/dashboard/configuration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire dashboard configuration description: .NET Aspire dashboard configuration options -ms.date: 02/13/2025 +ms.date: 03/20/2025 ms.topic: reference --- @@ -182,6 +182,7 @@ Telemetry limits have different scopes depending upon the telemetry type: | Option | Default value | Description | |--|--|--| | `Dashboard:ApplicationName` | `Aspire` | The application name to be displayed in the UI. This applies only when no resource service URL is specified. When a resource service exists, the service specifies the application name. | +| `Dashboard:UI:DisableResourceGraph` | `false` | Disables displaying the resource graph UI in the dashboard. | ## Next steps From 6fa7cdb8a4816fef17d4078e43fda503518347c2 Mon Sep 17 00:00:00 2001 From: David Pine Date: Fri, 21 Mar 2025 09:39:21 -0500 Subject: [PATCH 03/27] Position VS Code first --- docs/zones/zone-pivot-groups.yml | 92 ++++++++++++++++---------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/docs/zones/zone-pivot-groups.yml b/docs/zones/zone-pivot-groups.yml index 51d0a6d626..c8a104736c 100644 --- a/docs/zones/zone-pivot-groups.yml +++ b/docs/zones/zone-pivot-groups.yml @@ -5,73 +5,73 @@ groups: title: Azure development tool prompt: Choose an Azure development tool pivots: - - id: azure-azd - title: Azure Developer CLI - - id: azure-vs - title: Visual Studio - - id: azure-cli - title: Azure CLI - - id: azure-bicep - title: Azure Bicep + - id: azure-azd + title: Azure Developer CLI + - id: azure-vs + title: Visual Studio + - id: azure-cli + title: Azure CLI + - id: azure-bicep + title: Azure Bicep - id: azure-storage-mechanism title: Azure storage mechanism prompt: Choose an Azure storage mechanism pivots: - - id: azurite - title: Azurite (Emulator) - - id: azure-portal - title: Azure Portal - - id: azure-cli - title: Azure CLI - - id: azure-developer-cli - title: Azure Developer CLI + - id: azurite + title: Azurite (Emulator) + - id: azure-portal + title: Azure Portal + - id: azure-cli + title: Azure CLI + - id: azure-developer-cli + title: Azure Developer CLI - id: deployment-platform title: Azure deployment platform prompt: Choose a deployment platform pivots: - - id: github-actions - title: GitHub Actions - - id: azure-pipelines - title: Azure Pipelines + - id: github-actions + title: GitHub Actions + - id: azure-pipelines + title: Azure Pipelines - id: dev-environment title: Development environment prompt: Choose a development environment pivots: - - id: visual-studio - title: Visual Studio - - id: vscode - title: Visual Studio Code - - id: dotnet-cli - title: .NET CLI + - id: vscode + title: Visual Studio Code + - id: visual-studio + title: Visual Studio + - id: dotnet-cli + title: .NET CLI - id: resp-host title: Hosting resource type prompt: Choose a hosting resource that supports the Redis protocol pivots: - - id: redis - title: Redis - - id: garnet - title: Garnet - - id: valkey - title: Valkey + - id: redis + title: Redis + - id: garnet + title: Garnet + - id: valkey + title: Valkey - id: unit-testing-framework title: Unit testing framework prompt: Choose a unit testing framework pivots: - - id: xunit - title: xUnit - - id: mstest - title: MSTest - - id: nunit - title: NUnit + - id: xunit + title: xUnit + - id: mstest + title: MSTest + - id: nunit + title: NUnit - id: entity-framework-client-integration title: .NET Aspire Entity Framework Core client integration prompt: Choose a .NET Aspire Entity Framework Core client integration pivots: - - id: sql-server-ef - title: SQL Server - - id: postgresql-ef - title: PostgreSQL - - id: oracle-ef - title: Oracle - - id: mysql-ef - title: Pomelo MySQL + - id: sql-server-ef + title: SQL Server + - id: postgresql-ef + title: PostgreSQL + - id: oracle-ef + title: Oracle + - id: mysql-ef + title: Pomelo MySQL From 7538dc69bb4cac6de660bc249538d66230ed292a Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 26 Mar 2025 09:37:28 -0500 Subject: [PATCH 04/27] Add clarifying details about updates to `AddDatabase` APIs (#2878) * Contributes to #2789 * Added PostgreSQL and links to eventing * Quick edit pass * Apply suggestions from code review Co-authored-by: Andy (Steve) De George <67293991+adegeo@users.noreply.github.com> --------- Co-authored-by: Andy (Steve) De George <67293991+adegeo@users.noreply.github.com> --- docs/database/includes/postgresql-app-host.md | 60 ++++++++++++++- docs/database/includes/sql-app-host.md | 73 ++++++++++++++++++- 2 files changed, 131 insertions(+), 2 deletions(-) diff --git a/docs/database/includes/postgresql-app-host.md b/docs/database/includes/postgresql-app-host.md index 0e7c08d23f..a75b9e707b 100644 --- a/docs/database/includes/postgresql-app-host.md +++ b/docs/database/includes/postgresql-app-host.md @@ -44,13 +44,71 @@ var exampleProject = builder.AddProject() // After adding all resources, run the app... ``` -When .NET Aspire adds a container image to the app host, as shown in the preceding example with the `docker.io/library/postgres` image, it creates a new PostgreSQL server instance on your local machine. A reference to your PostgreSQL server and your PostgreSQL database instance (the `postgresdb` variable) are used to add a dependency to the `ExampleProject`. The PostgreSQL server resource includes default credentials with a `username` of `"postgres"` and randomly generated `password` using the method. +When .NET Aspire adds a container image to the app host, as shown in the preceding example with the `docker.io/library/postgres` image, it creates a new PostgreSQL server instance on your local machine. A reference to your PostgreSQL server and database instance (the `postgresdb` variable) are used to add a dependency to the `ExampleProject`. + +When adding a database resource to the app model, the database is created if it doesn't already exist. The creation of the database relies on the [app host eventing APIs](../../app-host/eventing.md), specifically . In other words, when the `postgres` resource is _ready_, the event is raised and the database resource is created. + +The PostgreSQL server resource includes default credentials with a `username` of `"postgres"` and randomly generated `password` using the method. The method configures a connection in the `ExampleProject` named `"messaging"`. For more information, see [Container resource lifecycle](../../fundamentals/app-host-overview.md#container-resource-lifecycle). > [!TIP] > If you'd rather connect to an existing PostgreSQL server, call instead. For more information, see [Reference existing resources](../../fundamentals/app-host-overview.md#reference-existing-resources). +### Add PostgreSQL resource with database scripts + +By default, when you add a , it relies on the following script to create the database: + +```sql +CREATE DATABASE "" +``` + + + +To alter the default script, chain a call to the `WithCreationScript` method on the database resource builder: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var postgres = builder.AddPostgres("postgres"); + +var databaseName = "app_db"; +var creationScript = $$""" + -- Create the database + CREATE DATABASE {{databaseName}}; + + -- Connect to the database + \c {{databaseName}} + + -- Create the todos table + CREATE TABLE todos ( + id SERIAL PRIMARY KEY, -- Auto-incrementing unique ID + title VARCHAR(255) NOT NULL, -- Short description of the task + description TEXT, -- Optional detailed description + is_completed BOOLEAN DEFAULT FALSE, -- Completion status + due_date DATE, -- Optional due date + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Creation timestamp + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- Last update timestamp + ); + + """; + +var db = postgres.AddDatabase(databaseName) + .WithCreationScript(creationScript); + +builder.AddProject() + .WithReference(db) + .WaitFor(db); + +// After adding all resources, run the app... +``` + +The preceding example creates a database named `app_db` with a single `todos` table. The script is executed when the database resource is created. The script is passed as a string to the `WithCreationScript` method, which is then executed in the context of the SQL Server resource. + ### Add PostgreSQL pgAdmin resource When adding PostgreSQL resources to the `builder` with the `AddPostgres` method, you can chain calls to to add the [**dpage/pgadmin4**](https://www.pgadmin.org/) container. This container is a cross-platform client for PostgreSQL databases, that serves a web-based admin dashboard. Consider the following example: diff --git a/docs/database/includes/sql-app-host.md b/docs/database/includes/sql-app-host.md index 29942842bf..2dbe8dc9dc 100644 --- a/docs/database/includes/sql-app-host.md +++ b/docs/database/includes/sql-app-host.md @@ -43,7 +43,11 @@ builder.AddProject() > [!NOTE] > The SQL Server container is slow to start, so it's best to use a _persistent_ lifetime to avoid unnecessary restarts. For more information, see [Container resource lifetime](../../fundamentals/app-host-overview.md#container-resource-lifetime). -When .NET Aspire adds a container image to the app host, as shown in the preceding example with the `mcr.microsoft.com/mssql/server` image, it creates a new SQL Server instance on your local machine. A reference to your SQL Server resource builder (the `sql` variable) is used to add a database. The database is named `database` and then added to the `ExampleProject`. The SQL Server resource includes default credentials with a `username` of `sa` and a random `password` generated using the method. +When .NET Aspire adds a container image to the app host, as shown in the preceding example with the `mcr.microsoft.com/mssql/server` image, it creates a new SQL Server instance on your local machine. A reference to your SQL Server resource builder (the `sql` variable) is used to add a database. The database is named `database` and then added to the `ExampleProject`. + +When adding a database resource to the app model, the database is created if it doesn't already exist. The creation of the database relies on the [app host eventing APIs](../../app-host/eventing.md), specifically . In other words, when the `sql` resource is _ready_, the event is raised and the database resource is created. + +The SQL Server resource includes default credentials with a `username` of `sa` and a random `password` generated using the method. When the app host runs, the password is stored in the app host's secret store. It's added to the `Parameters` section, for example: @@ -60,6 +64,73 @@ The method conf > [!TIP] > If you'd rather connect to an existing SQL Server, call instead. For more information, see [Reference existing resources](../../fundamentals/app-host-overview.md#reference-existing-resources). +### Add SQL Server resource with database scripts + +By default, when you add a , it relies on the following SQL script to create the database: + +```sql +IF +( + NOT EXISTS + ( + SELECT 1 + FROM sys.databases + WHERE name = @DatabaseName + ) +) +CREATE DATABASE []; +``` + + + +To alter the default script, chain a call to the `WithCreationScript` method on the database resource builder: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var sql = builder.AddSqlServer("sql") + .WithLifetime(ContainerLifetime.Persistent); + +var databaseName = "app_db"; +var creationScript = $$""" + IF DB_ID('{{databaseName}}') IS NULL + CREATE DATABASE [{{databaseName}}]; + GO + + -- Use the database + USE [{{databaseName}}]; + GO + + -- Create the todos table + CREATE TABLE todos ( + id INT PRIMARY KEY AUTO_INCREMENT, -- Unique ID for each todo + title VARCHAR(255) NOT NULL, -- Short description of the task + description TEXT, -- Optional detailed description + is_completed BOOLEAN DEFAULT FALSE, -- Completion status + due_date DATE, -- Optional due date + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + ); + GO + + """; + +var db = sql.AddDatabase(databaseName) + .WithCreationScript(creationScript); + +builder.AddProject() + .WithReference(db) + .WaitFor(db); + +// After adding all resources, run the app... +``` + +The preceding example creates a database named `app_db` with a single `todos` table. The SQL script is executed when the database resource is created. The script is passed as a string to the `WithCreationScript` method, which is then executed in the context of the SQL Server resource. + ### Add SQL Server resource with data volume To add a data volume to the SQL Server resource, call the method on the SQL Server resource: From fb20c4aca8238925b18581b76d27a3397e8f80ad Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 26 Mar 2025 12:25:39 -0500 Subject: [PATCH 05/27] Adding GitHub Copilot prompts (#2896) * Initial prompts * Update prompts --- .../prompts/adhere-to-writing-style.prompt.md | 31 +++++++++++++++++++ .../prompts/rephrase-selected-text.prompt.md | 3 ++ docs/get-started/aspire-overview.md | 4 +-- 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 .github/prompts/adhere-to-writing-style.prompt.md create mode 100644 .github/prompts/rephrase-selected-text.prompt.md diff --git a/.github/prompts/adhere-to-writing-style.prompt.md b/.github/prompts/adhere-to-writing-style.prompt.md new file mode 100644 index 0000000000..5b4394d5bb --- /dev/null +++ b/.github/prompts/adhere-to-writing-style.prompt.md @@ -0,0 +1,31 @@ +The following is a set of guidelines to follow when writing documentation for .NET Aspire. Please ensure that all documentation adheres to these guidelines: + +## Voice and tone + +Write for readers who may have a limited vocabulary or are not native English speakers. Use simple, clear language and avoid jargon whenever possible. If you must use technical terms, provide a brief explanation of what they mean. + +- Use active voice +- Use the second person (you, your) to address the reader directly + +## Headings + +Headings use sentence-style capitalization. Always capitalize the first word of a heading. Do not use gerunds (e.g., "Using" or "Creating") in heading. + +## Text styling + +Use _italics_ for files, folders, paths (for long items, split onto their own line), new terms. + +Use **bold** for UI elements. + +Use `code` for inline code, language keywords, NuGet package names, command-line commands, database table and column names, and URLs that you don't want to be clickable. + +## Links + +Strive to use relative links whenever possible. Use absolute links only when necessary. For example, if you are linking to a page on a different site, use an absolute link. When using absolute links, use the full URL (including the protocol) and remove the locale from the URL. For example, use `https://learn.microsoft.com` instead of `https://learn.microsoft.com/en-us`. Avoid HTTP links. Whenever providing additional resources, use the following format: + +"For more information, see [link text](../relative/link/to/content.md)." + +## Things to avoid + +- Avoid future tense: In some non-English languages the concept of future tense is not the same as English. Using future tense can make your documents harder to read. +- Avoid passive voice: Passive voice can make your writing less clear and harder to read. Use active voice whenever possible. diff --git a/.github/prompts/rephrase-selected-text.prompt.md b/.github/prompts/rephrase-selected-text.prompt.md new file mode 100644 index 0000000000..bf609e6146 --- /dev/null +++ b/.github/prompts/rephrase-selected-text.prompt.md @@ -0,0 +1,3 @@ +Please rephrase the selected text to make it more concise and clear, while maintaining the original meaning. The rephrased text should strive to improve readability. Please ensure that the rephrased text is grammatically correct and flows well. Take obvious opportunities to improve structure, and emphasis of domain specific intent. + +Please also always [adhere to our writing style](adhere-to-writing-style.prompt.md). diff --git a/docs/get-started/aspire-overview.md b/docs/get-started/aspire-overview.md index fd8d97732e..b328326109 100644 --- a/docs/get-started/aspire-overview.md +++ b/docs/get-started/aspire-overview.md @@ -1,7 +1,7 @@ --- title: .NET Aspire overview description: Learn about .NET Aspire, an application stack designed to improve the experience of building distributed applications. -ms.date: 11/12/2024 +ms.date: 03/26/2025 --- # .NET Aspire overview @@ -14,7 +14,7 @@ ms.date: 11/12/2024 :::column-end::: :::column span="3"::: -.NET Aspire is a set of tools, templates, and packages for building observable, production ready apps.​​ .NET Aspire is delivered through a collection of NuGet packages that bootstrap or improve specific challenges with modern app development. Today's apps generally consume a large number of services, such as databases, messaging, and caching, many of which are supported via [.NET Aspire Integrations](../fundamentals/integrations-overview.md). For information on support, see the [.NET Aspire Support Policy](https://dotnet.microsoft.com/platform/support/policy/aspire). +.NET Aspire provides tools, templates, and packages to help you build observable, production-ready apps. Delivered through NuGet packages, .NET Aspire simplifies common challenges in modern app development. Today's apps often rely on multiple services like databases, messaging, and caching, many supported by [.NET Aspire Integrations](../fundamentals/integrations-overview.md). For the official support information, see the [.NET Aspire Support Policy](https://dotnet.microsoft.com/platform/support/policy/aspire). :::column-end::: :::row-end::: From 19072434fad78e310a8e15f86a98e859e3f0cce5 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 26 Mar 2025 13:12:17 -0500 Subject: [PATCH 06/27] Adding content for `WithHttpCommand` (#2875) * Initial setup * Rework HTTP command content with an example * Add images and more details. * Edit pass * Added playground sample * Update HTTP command content with updated source * Remove duplicated code snippet * Correct member over parameter * Fix name --- docs/fundamentals/custom-resource-commands.md | 3 +- docs/fundamentals/http-commands.md | 103 ++++++++++++++++++ .../media/custom-http-command-highlighted.png | Bin 0 -> 59234 bytes .../media/custom-http-command-starting.png | Bin 0 -> 63549 bytes .../media/custom-http-command-succeeded.png | Bin 0 -> 63404 bytes .../media/custom-http-command.png | Bin 0 -> 68923 bytes .../AspireApp/AspireApp.Api/AppJsonContext.cs | 8 ++ .../AspireApp.Api/AspireApp.Api.csproj | 22 ++++ .../AspireApp.Api/AspireApp.Api.http | 6 + .../AspireApp/AspireApp.Api/ICacheService.cs | 13 +++ .../AspireApp/AspireApp.Api/Product.cs | 3 + .../AspireApp/AspireApp.Api/Products.cs | 11 ++ .../AspireApp/AspireApp.Api/Program.cs | 81 ++++++++++++++ .../Properties/launchSettings.json | 31 ++++++ .../AspireApp.Api/RedisCacheService.cs | 52 +++++++++ .../appsettings.Development.json | 8 ++ .../AspireApp/AspireApp.Api/appsettings.json | 9 ++ .../AspireApp.AppHost.csproj | 24 ++++ .../AspireApp/AspireApp.AppHost/Program.cs | 31 ++++++ .../Properties/launchSettings.json | 29 +++++ .../appsettings.Development.json | 8 ++ .../AspireApp.AppHost/appsettings.json | 9 ++ .../http-commands/AspireApp/AspireApp.sln | 30 +++++ docs/toc.yml | 8 +- 24 files changed, 486 insertions(+), 3 deletions(-) create mode 100644 docs/fundamentals/http-commands.md create mode 100644 docs/fundamentals/media/custom-http-command-highlighted.png create mode 100644 docs/fundamentals/media/custom-http-command-starting.png create mode 100644 docs/fundamentals/media/custom-http-command-succeeded.png create mode 100644 docs/fundamentals/media/custom-http-command.png create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/AppJsonContext.cs create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/AspireApp.Api.csproj create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/AspireApp.Api.http create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/ICacheService.cs create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Product.cs create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Products.cs create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Program.cs create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Properties/launchSettings.json create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/RedisCacheService.cs create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/appsettings.Development.json create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/appsettings.json create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/Program.cs create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/Properties/launchSettings.json create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/appsettings.Development.json create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/appsettings.json create mode 100644 docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.sln diff --git a/docs/fundamentals/custom-resource-commands.md b/docs/fundamentals/custom-resource-commands.md index d6ee2ea78f..81bf51c2a7 100644 --- a/docs/fundamentals/custom-resource-commands.md +++ b/docs/fundamentals/custom-resource-commands.md @@ -124,5 +124,6 @@ Select the **Clear cache** command to clear the cache of the Redis resource. The ## See also -- [.NET Aspire orchestration overview](app-host-overview.md) +- [Custom HTTP commands in .NET Aspire](http-commands.md) - [.NET Aspire dashboard: Resource submenu actions](dashboard/explore.md#resource-submenu-actions) +- [.NET Aspire orchestration overview](app-host-overview.md) diff --git a/docs/fundamentals/http-commands.md b/docs/fundamentals/http-commands.md new file mode 100644 index 0000000000..347bd34fea --- /dev/null +++ b/docs/fundamentals/http-commands.md @@ -0,0 +1,103 @@ +--- +title: Custom HTTP commands in .NET Aspire +description: Learn how to create custom HTTP commands in .NET Aspire. +ms.date: 03/25/2025 +ms.topic: how-to +--- + +# Custom HTTP commands in .NET Aspire + +In .NET Aspire, you can add custom HTTP commands to resources using the `WithHttpCommand` API. This API extends existing functionality, where you provide [custom commands on resources](custom-resource-commands.md). This feature enables a command on a resource that sends an HTTP request to a specified endpoint and path. This is useful for scenarios such as triggering database migrations, clearing caches, or performing custom actions on resources through HTTP requests. + +To implement custom HTTP commands, you define a command on a resource and a corresponding HTTP endpoint that handles the request. This article provides an overview of how to create and configure custom HTTP commands in .NET Aspire. + +## HTTP command APIs + +The available APIs provide extensive capabilities with numerous parameters to customize the HTTP command. To add an HTTP command to a resource, use the `WithHttpCommand` extension method on the resource builder. There are two overloads available: + + + +The `WithHttpCommand` API provides two overloads to add custom HTTP commands to resources in .NET Aspire. These APIs are designed to offer flexibility and cater to different use cases when defining HTTP commands. + +1. **Overload with `endpointName`:** + + This version is ideal when you have a predefined endpoint name that the HTTP command should target. It simplifies the configuration by directly associating the command with a specific endpoint. This is useful in scenarios where the endpoint is static and well-known during development. + +1. **Overload with `endpointSelector`:** + + This version provides more dynamic behavior by allowing you to specify a callback (`endpointSelector`) to determine the endpoint at runtime. This is useful when the endpoint might vary based on the resource's state or other contextual factors. It offers greater flexibility for advanced scenarios where the endpoint can't be hardcoded. + +Both overloads allow you to customize the HTTP command extensively, providing an `HttpCommandOptions` subclass of the `CommandOptions` type, including specifying the HTTP method, configure the request, handling the response, and define UI-related properties like display name, description, and icons. The choice between the two depends on whether the endpoint is static or dynamic in your use case. + +These APIs are designed to integrate seamlessly with the .NET Aspire ecosystem, enabling developers to extend resource functionality with minimal effort while maintaining control over the behavior and presentation of the commands. + +## Considerations when registering HTTP commands + +Since HTTP commands are exposed via HTTP endpoints, consider potential security risks. Limit these endpoints to development or staging environments when possible. Always validate incoming requests to ensure they originate from trusted sources. For more information, see [ASP.NET Core security](/aspnet/core/security). + +Use the `HttpCommandOptions.PrepareRequest` callback to enhance security by adding authentication headers or other measures. A common approach is to use a shared secret, [external parameter](external-parameters.md), or token known only to the app host and resource. This shared value can be used to validate requests and prevent unauthorized access. + +## Add a custom HTTP command + +In your app host _Program.cs_ file, you add a custom HTTP command using the `WithHttpCommand` API on an where `T` is an . Here's an example of how to do this: + +:::code source="snippets/http-commands/AspireApp/AspireApp.AppHost/Program.cs"::: + +The preceding code: + +- Creates a new distributed application builder. +- Adds a [Redis cache](../caching/stackexchange-redis-integration.md) named `cache` to the application. +- Adds a parameter named `ApiCacheInvalidationKey` to the application. This parameter is marked as a secret, meaning its value is treated securely. +- Adds a project named `AspireApp_Api` to the application. +- Adds a reference to the Redis cache and [waits for it to be ready before proceeding](app-host-overview.md#waiting-for-resources). +- Configures an HTTP command for the project with the following: + - `path`: Specifies the URL path for the HTTP command (`/cache/invalidate`). + - `displayName`: Sets the name of the command as it appears in the UI (`Invalidate cache`). + - `commandOptions`: An optional instance of `HttpCommandOptions` that configures the command's behavior and appearance in the UI: + - `Description`: Provides a description of the command that's shown in the UI. + - `PrepareRequest`: A callback function that configures the HTTP request before sending it. In this case, it adds a custom (`X-CacheInvalidation-Key`) header with the value of the `ApiCacheInvalidationKey` parameter. + - `IconName`: Specifies the icon to be used for the command in the UI (`DocumentLightningFilled`). + - `IsHighlighted`: Indicates whether the command should be highlighted in the UI. +- Finally, the application is built and run. + +The HTTP endpoint is responsible for invalidating the cache. When the command is executed, it sends an HTTP request to the specified path (`/cache/invalidate`) with the configured parameters. Since there's an added security measure, the request includes the `X-CacheInvalidation-Key` header with the value of the `ApiCacheInvalidationKey` parameter. This ensures that only authorized requests can trigger the cache invalidation process. + +### Example HTTP endpoint + +The preceding app host code snippet defined a custom HTTP command that sends a request to the `/cache/invalidate` endpoint. The ASP.NET Core minimal API project defines an HTTP endpoint that handles the cache invalidation request. Consider the following code snippet from the project's _Program.cs_ file: + +:::code source="snippets/http-commands/AspireApp/AspireApp.Api/Program.cs" id="post"::: + +The preceding code: + +- Assumes that the `app` variable is an instance of and is set up to handle HTTP requests. +- Maps an HTTP POST endpoint at the path `/cache/invalidate`. +- The endpoint expects a header named `X-CacheInvalidation-Key` to be present in the request. +- It retrieves the value of the `ApiCacheInvalidationKey` parameter from the configuration. +- If the header value doesn't match the expected key, it returns an unauthorized response. +- If the header is valid, it calls the `ClearAllAsync` method on the `ICacheService` to clear all cached items. +- Finally, it returns an HTTP OK response. + +### Example dashboard experiences + +The sample app host and corresponding ASP.NET Core minimal API projects demonstrate both sides of the HTTP command implementation. When you run the app host, the dashboard's **Resources** page displays the custom HTTP command as a button. When you specify that the command should be highlighted (`isHighlighted: true`), the button appears on the **Actions** column of the **Resources** page. This allows users to easily trigger the command from the dashboard, as shown in the following screenshot: + +:::image type="content" source="media/custom-http-command-highlighted.png" lightbox="media/custom-http-command-highlighted.png" alt-text=".NET Aspire dashboard: Resources page showing a highlighted custom HTTP command."::: + +If you're to omit the `isHighlighted` parameter, or set it to `false`, the command appears nested under the horizontal ellipsis menu (three dots) in the **Actions** column of the **Resources** page. This allows users to access the command without cluttering the UI with too many buttons. The following screenshot shows the same command appearing in the ellipsis menu: + +:::image type="content" source="media/custom-http-command.png" lightbox="media/custom-http-command.png" alt-text=".NET Aspire dashboard: Resources page showing a custom HTTP command in the ellipsis menu."::: + +When the user selects the button, the command is executed, and the HTTP request is sent to the specified endpoint. The dashboard provides feedback on the command's execution status, allowing users to monitor the results. When it's starting, a toast notification appears: + +:::image type="content" source="media/custom-http-command-starting.png" lightbox="media/custom-http-command-starting.png" alt-text=".NET Aspire dashboard: Toast notification showing the custom HTTP command is starting."::: + +When the command completes, the dashboard updates the status and provides feedback on whether it was successful or failed. The following screenshot shows a successful execution of the command: + +:::image type="content" source="media/custom-http-command-succeeded.png" lightbox="media/custom-http-command-succeeded.png" alt-text=".NET Aspire dashboard: Toast notification showing the custom HTTP command succeeded."::: + +## See also + +- [.NET Aspire orchestration overview](app-host-overview.md) +- [Custom resource commands in .NET Aspire](custom-resource-commands.md) +- [.NET Aspire GitHub repository: Playground sample](https://github.com/dotnet/aspire/tree/4fdfdbf57d35265913a3bbac38b92d98ed255a5d/playground/TestShop) diff --git a/docs/fundamentals/media/custom-http-command-highlighted.png b/docs/fundamentals/media/custom-http-command-highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..e6bd6d4dace70011c95d27a00b42aa45c63e6775 GIT binary patch literal 59234 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

C5 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 literal 0 HcmV?d00001 diff --git a/docs/fundamentals/media/custom-http-command-starting.png b/docs/fundamentals/media/custom-http-command-starting.png new file mode 100644 index 0000000000000000000000000000000000000000..965f0b3f8fb93f36fc1ab88267a41abcdba05d77 GIT binary patch literal 63549 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 B2+{xm literal 0 HcmV?d00001 diff --git a/docs/fundamentals/media/custom-http-command-succeeded.png b/docs/fundamentals/media/custom-http-command-succeeded.png new file mode 100644 index 0000000000000000000000000000000000000000..4c72a7acdfb490601ffb0258f30c2181781514f2 GIT binary patch literal 63404 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 M4;QR!&idW{4^{!lyZ`_I literal 0 HcmV?d00001 diff --git a/docs/fundamentals/media/custom-http-command.png b/docs/fundamentals/media/custom-http-command.png new file mode 100644 index 0000000000000000000000000000000000000000..318c54a57ffdb934ef53b2b90d42696f55461194 GIT binary patch literal 68923 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­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

b}@ypI8pjBfzJcq?QCJ-NpCtV-|>VD|s0Z5es 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 + + + net9.0 + enable + enable + True + mcr.microsoft.com/dotnet/aspnet:9.0 + e0e06cf4-582d-4892-a64f-05ee5544080c + + + + + + + + + + + + + diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/AspireApp.Api.http b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/AspireApp.Api.http new file mode 100644 index 0000000000..7727715d4b --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/AspireApp.Api.http @@ -0,0 +1,6 @@ +@AspireApp.Api_HostAddress = http://localhost:5290 + +GET {{AspireApp.Api_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/ICacheService.cs b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/ICacheService.cs new file mode 100644 index 0000000000..60fa970afa --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/ICacheService.cs @@ -0,0 +1,13 @@ +using System.Text.Json.Serialization.Metadata; + +namespace AspireApp.Api; + +public interface ICacheService +{ + Task GetAsync(string key, JsonTypeInfo jsonTypeInfo); + Task SetAsync(string key, T value, JsonTypeInfo jsonTypeInfo, TimeSpan? absoluteExpiration = null); + Task RemoveAsync(string key); + IAsyncEnumerable GetRegisteredKeysAsync(); + Task ClearAllAsync(); +} + diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Product.cs b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Product.cs new file mode 100644 index 0000000000..9266d7aaf1 --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Product.cs @@ -0,0 +1,3 @@ +namespace AspireApp.Api; + +public sealed record Product(int Id, string Name, decimal Price); diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Products.cs b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Products.cs new file mode 100644 index 0000000000..627fb0ff14 --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Products.cs @@ -0,0 +1,11 @@ +namespace AspireApp.Api; + +internal static class Products +{ + public static readonly Product[] DefaultProducts = + [ + new (1, "Laptop", 999.99m), + new (2, "Keyboard", 49.99m), + new (3, "Mouse", 24.99m), + ]; +} diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Program.cs b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Program.cs new file mode 100644 index 0000000000..4e10c51e23 --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Program.cs @@ -0,0 +1,81 @@ +using AspireApp.Api; +using Microsoft.AspNetCore.Mvc; +using Scalar.AspNetCore; + +var builder = WebApplication.CreateBuilder(args); + +builder.AddRedisDistributedCache(connectionName: "cache"); + +builder.Services.AddScoped(); + +if (builder.Environment.IsDevelopment()) +{ + builder.Services.AddCors(options => + { + options.AddPolicy("AllowAll", policy => + { + policy.AllowAnyOrigin() // Allow requests from any origin + .AllowAnyHeader() // Allow any headers in requests + .AllowAnyMethod(); // Allow any HTTP methods (GET, POST, etc.) + }); + }); +} + +// Add services to the container. +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseCors("AllowAll"); + + app.MapOpenApi(); + app.MapScalarApiReference(); + + // + app.MapPost("/cache/invalidate", static async ( + [FromHeader(Name = "X-CacheInvalidation-Key")] string? header, + ICacheService registry, + IConfiguration config) => + { + var hasValidHeader = config.GetValue("ApiCacheInvalidationKey") is { } key + && header == $"Key: {key}"; + + if (hasValidHeader is false) + { + return Results.Unauthorized(); + } + + await registry.ClearAllAsync(); + + return Results.Ok(); + }); + // +} + +app.UseHttpsRedirection(); + +app.MapGet("/api/products/{id:int}", async (string id, ICacheService cache) => +{ + var product = await cache.GetAsync($"product:{id}", AppJsonContext.Default.Product); + + IResult result = product is null ? Results.NotFound() : Results.Ok(product); + + return result; +}); + +app.Lifetime.ApplicationStarted.Register(async () => +{ + using var scope = app.Services.CreateScope(); + var cache = scope.ServiceProvider.GetRequiredService(); + + foreach (var product in Products.DefaultProducts) + { + await cache.SetAsync($"product:{product.Id}", product, AppJsonContext.Default.Product); + } +}); + +app.Run(); diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Properties/launchSettings.json b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Properties/launchSettings.json new file mode 100644 index 0000000000..169efa4d5b --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/Properties/launchSettings.json @@ -0,0 +1,31 @@ +{ + "profiles": { + "http": { + "commandName": "Project", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "dotnetRunMessages": true, + "applicationUrl": "http://localhost:5290" + }, + "https": { + "commandName": "Project", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "dotnetRunMessages": true, + "applicationUrl": "https://localhost:7056;http://localhost:5290" + }, + "Container (.NET SDK)": { + "commandName": "SdkContainer", + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "environmentVariables": { + "ASPNETCORE_HTTPS_PORTS": "8081", + "ASPNETCORE_HTTP_PORTS": "8080" + }, + "publishAllPorts": true, + "useSSL": true + } + }, + "$schema": "https://json.schemastore.org/launchsettings.json" +} \ No newline at end of file diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/RedisCacheService.cs b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/RedisCacheService.cs new file mode 100644 index 0000000000..477515fe2d --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/RedisCacheService.cs @@ -0,0 +1,52 @@ +using StackExchange.Redis; +using System.Text.Json; +using System.Text.Json.Serialization.Metadata; + +namespace AspireApp.Api; + +public sealed class RedisCacheService(IConnectionMultiplexer connection) : ICacheService +{ + private readonly IDatabase _db = connection.GetDatabase(); + private const string RegistryKey = "cache:registry"; + + public async Task GetAsync(string key, JsonTypeInfo jsonTypeInfo) + { + var value = await _db.StringGetAsync(key); + + return value.IsNullOrEmpty ? default : JsonSerializer.Deserialize(value!, jsonTypeInfo); + } + + public async Task SetAsync(string key, T value, JsonTypeInfo jsonTypeInfo, TimeSpan? absoluteExpiration = null) + { + var json = JsonSerializer.Serialize(value, jsonTypeInfo); + + await _db.StringSetAsync(key, json, absoluteExpiration ?? TimeSpan.FromMinutes(5)); + await _db.SetAddAsync(RegistryKey, key); + } + + public async Task RemoveAsync(string key) + { + await _db.KeyDeleteAsync(key); + await _db.SetRemoveAsync(RegistryKey, key); + } + + public async IAsyncEnumerable GetRegisteredKeysAsync() + { + var keys = await _db.SetMembersAsync(RegistryKey); + + foreach (var key in keys) + { + yield return key.ToString(); + } + } + + public async Task ClearAllAsync() + { + await foreach (var key in GetRegisteredKeysAsync()) + { + await _db.KeyDeleteAsync(key); + } + + await _db.KeyDeleteAsync(RegistryKey); + } +} diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/appsettings.Development.json b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/appsettings.Development.json new file mode 100644 index 0000000000..0c208ae918 --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/appsettings.json b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/appsettings.json new file mode 100644 index 0000000000..10f68b8c8b --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.Api/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj new file mode 100644 index 0000000000..f0854f06e8 --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -0,0 +1,24 @@ + + + + + + Exe + net9.0 + enable + enable + true + da41f190-8f5d-494c-a2e8-05e2d09bba4b + + + + + + + + + + + + + diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/Program.cs b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/Program.cs new file mode 100644 index 0000000000..51317faaf6 --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/Program.cs @@ -0,0 +1,31 @@ +var builder = DistributedApplication.CreateBuilder(args); + +var cache = builder.AddRedis("cache"); + +var apiCacheInvalidationKey = builder.AddParameter("ApiCacheInvalidationKey", secret: true); + +var api = builder.AddProject("api") + .WithReference(cache) + .WaitFor(cache) + .WithEnvironment("ApiCacheInvalidationKey", apiCacheInvalidationKey) + .WithHttpCommand( + path: "/cache/invalidate", + displayName: "Invalidate cache", + commandOptions: new HttpCommandOptions() + { + Description = """ + Invalidates the API cache. All cached values are cleared! + """, + PrepareRequest = (context) => + { + var key = apiCacheInvalidationKey.Resource.Value; + + context.Request.Headers.Add("X-CacheInvalidation-Key", $"Key: {key}"); + + return Task.CompletedTask; + }, + IconName = "DocumentLightning", + IsHighlighted = true + }); + +builder.Build().Run(); diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/Properties/launchSettings.json b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/Properties/launchSettings.json new file mode 100644 index 0000000000..4e05a211e8 --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/Properties/launchSettings.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:17028;http://localhost:15219", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21270", + "DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22132" + } + }, + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:15219", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19122", + "DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20186" + } + } + } +} diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/appsettings.Development.json b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/appsettings.Development.json new file mode 100644 index 0000000000..0c208ae918 --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/appsettings.json b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/appsettings.json new file mode 100644 index 0000000000..31c092aa45 --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.AppHost/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "Aspire.Hosting.Dcp": "Warning" + } + } +} diff --git a/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.sln b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.sln new file mode 100644 index 0000000000..545ab0154e --- /dev/null +++ b/docs/fundamentals/snippets/http-commands/AspireApp/AspireApp.sln @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.35806.103 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AspireApp.AppHost", "AspireApp.AppHost\AspireApp.AppHost.csproj", "{3E85BCA2-E8A4-4545-B335-45D4FB37A9D4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AspireApp.Api", "AspireApp.Api\AspireApp.Api.csproj", "{C90FC13B-ECF7-2893-B9BD-49165768EE28}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3E85BCA2-E8A4-4545-B335-45D4FB37A9D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E85BCA2-E8A4-4545-B335-45D4FB37A9D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E85BCA2-E8A4-4545-B335-45D4FB37A9D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E85BCA2-E8A4-4545-B335-45D4FB37A9D4}.Release|Any CPU.Build.0 = Release|Any CPU + {C90FC13B-ECF7-2893-B9BD-49165768EE28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C90FC13B-ECF7-2893-B9BD-49165768EE28}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C90FC13B-ECF7-2893-B9BD-49165768EE28}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C90FC13B-ECF7-2893-B9BD-49165768EE28}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {71BDF2AB-F354-4B61-AF34-E68BB6B32F1C} + EndGlobalSection +EndGlobal diff --git a/docs/toc.yml b/docs/toc.yml index ce9a2dbf84..c0cffb3475 100644 --- a/docs/toc.yml +++ b/docs/toc.yml @@ -44,8 +44,12 @@ items: href: get-started/build-aspire-apps-with-python.md - name: Configuration href: app-host/configuration.md - - name: Custom resource commands - href: fundamentals/custom-resource-commands.md + - name: Custom commands + items: + - name: Custom resource commands + href: fundamentals/custom-resource-commands.md + - name: Custom HTTP commands + href: fundamentals/http-commands.md - name: Add Dockerfiles to the app model href: app-host/withdockerfile.md displayName: dockerfile,docker From 2853080320ec84326c64026151333fa8d316c0b5 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 26 Mar 2025 13:57:20 -0500 Subject: [PATCH 07/27] Correct postgres connection command --- docs/database/includes/postgresql-app-host.md | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/docs/database/includes/postgresql-app-host.md b/docs/database/includes/postgresql-app-host.md index a75b9e707b..3144875bc3 100644 --- a/docs/database/includes/postgresql-app-host.md +++ b/docs/database/includes/postgresql-app-host.md @@ -81,20 +81,6 @@ var creationScript = $$""" -- Create the database CREATE DATABASE {{databaseName}}; - -- Connect to the database - \c {{databaseName}} - - -- Create the todos table - CREATE TABLE todos ( - id SERIAL PRIMARY KEY, -- Auto-incrementing unique ID - title VARCHAR(255) NOT NULL, -- Short description of the task - description TEXT, -- Optional detailed description - is_completed BOOLEAN DEFAULT FALSE, -- Completion status - due_date DATE, -- Optional due date - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Creation timestamp - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- Last update timestamp - ); - """; var db = postgres.AddDatabase(databaseName) @@ -107,7 +93,10 @@ builder.AddProject() // After adding all resources, run the app... ``` -The preceding example creates a database named `app_db` with a single `todos` table. The script is executed when the database resource is created. The script is passed as a string to the `WithCreationScript` method, which is then executed in the context of the SQL Server resource. +The preceding example creates a database named `app_db`. The script is executed when the database resource is created. The script is passed as a string to the `WithCreationScript` method, which is then executed in the context of the SQL Server resource. + +> [!NOTE] +> The connect to a database command (`\c`) isn't supported when using the creation script. ### Add PostgreSQL pgAdmin resource From 51623ebd97af794997a226f37b1f6fc1e5a20b53 Mon Sep 17 00:00:00 2001 From: Stefan Nikolei Date: Thu, 27 Mar 2025 18:46:24 +0100 Subject: [PATCH 08/27] Update kafka-integration.md (#2712) Change links von provectuslabs to Kafbat --- docs/messaging/kafka-integration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/messaging/kafka-integration.md b/docs/messaging/kafka-integration.md index e55450e486..0109d93d3b 100644 --- a/docs/messaging/kafka-integration.md +++ b/docs/messaging/kafka-integration.md @@ -56,7 +56,7 @@ The method conf ### Add Kafka UI -To add the [Kafka UI](https://hub.docker.com/r/provectuslabs/kafka-ui) to the Kafka server resource, call the method: +To add the [Kafka UI](https://hub.docker.com/r/kafbat/kafka-ui) to the Kafka server resource, call the method: ```csharp var builder = DistributedApplication.CreateBuilder(args); @@ -70,7 +70,7 @@ builder.AddProject() // After adding all resources, run the app... ``` -The Kafka UI is a free, open-source web UI to monitor and manage Apache Kafka clusters. .NET Aspire adds another container image [`docker.io/provectuslabs/kafka-ui`](https://hub.docker.com/r/provectuslabs/kafka-ui) to the app host that runs the Kafka UI. +The Kafka UI is a free, open-source web UI to monitor and manage Apache Kafka clusters. .NET Aspire adds another container image [`docker.io/kafbat/kafka-ui`](https://hub.docker.com/r/kafbat/kafka-ui) to the app host that runs the Kafka UI. ### Change the Kafka UI host port From aea3d8dd751c420decf675c8aadfc325043b9e9f Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 31 Mar 2025 07:57:13 -0500 Subject: [PATCH 09/27] Add role assignments with .NET Aspire (#2891) * Getting closer on adding roles details * Apply suggestions from code review Co-authored-by: Andy (Steve) De George <67293991+adegeo@users.noreply.github.com> * Address feedback and update content * Add to TOC * Edit pass * Add link * Fix a few issues * Remove absolute URL --------- Co-authored-by: Andy (Steve) De George <67293991+adegeo@users.noreply.github.com> --- docs/azure/integrations-overview.md | 4 +- docs/azure/role-assignments.md | 261 +++++++++++++++++++++ docs/snippets/azure/AppHost/AppHost.csproj | 2 + docs/toc.yml | 8 +- 4 files changed, 270 insertions(+), 5 deletions(-) create mode 100644 docs/azure/role-assignments.md diff --git a/docs/azure/integrations-overview.md b/docs/azure/integrations-overview.md index d5499b51e3..3cf913074a 100644 --- a/docs/azure/integrations-overview.md +++ b/docs/azure/integrations-overview.md @@ -1,7 +1,7 @@ --- title: Azure integrations overview description: Overview of the Azure integrations available in the .NET Aspire. -ms.date: 03/07/2025 +ms.date: 03/24/2025 uid: dotnet/aspire/integrations/azure-overview --- @@ -107,7 +107,7 @@ You can query whether a resource is marked as an existing resource, by calling t .NET Aspire provides support for referencing existing Azure resources. You mark an existing resource through the `PublishAsExisting`, `RunAsExisting`, and `AsExisting` APIs. These APIs allow developers to reference already-deployed Azure resources, configure them, and generate appropriate deployment manifests using Bicep templates. -Existing resources referenced with these APIs can be enhanced with role assignments and other customizations that are available with .NET Aspire's [infrastructure as code capabilities](#infrastructure-as-code). These APIs are limited to Azure resources that can be deployed with Bicep templates. +Existing resources referenced with these APIs can be enhanced with [role assignments](role-assignments.md) and other customizations that are available with .NET Aspire's [infrastructure as code capabilities](#infrastructure-as-code). These APIs are limited to Azure resources that can be deployed with Bicep templates. ### Configure existing Azure resources for run mode diff --git a/docs/azure/role-assignments.md b/docs/azure/role-assignments.md new file mode 100644 index 0000000000..e336ab448e --- /dev/null +++ b/docs/azure/role-assignments.md @@ -0,0 +1,261 @@ +--- +title: Manage Azure role assignments +description: Learn how to override Azure role assignments on .NET Aspire resources. +ms.date: 03/31/2025 +--- + +# Manage Azure role assignments + +All .NET Aspire Azure hosting integrations define Azure resources. [These resources](integrations-overview.md#add-azure-resources) come with default role assignments. You can replace these default role assignments with built-in role [or custom role assignments](integrations-overview.md#infrastructure-as-code). In this article, you learn how to manage Azure role assignments on .NET Aspire resources. + +## Default built-in role assignments + +When you add an Azure resource to the [app model](xref:dotnet/aspire/app-host#terminology), it's assigned default roles. If a resource depends on another resource, it inherits the same role assignments as the referenced resource unless explicitly overridden. + +Consider a scenario where an API project resource references an [Azure Search](../azureai/azureai-search-document-integration.md) resource. The API project is given the default role assignments, as shown in the following example: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var search = builder.AddAzureSearch("search"); + +var api = builder.AddProject("api") + .WithReference(search); +``` + +In the example code, the `api` project resource depends on the Azure `search` resource, meaning it references the `search` resource. By default, the `search` resource is assigned the following built-in roles: + +- +- + +These role assignments allow the API project to read and write data to the Azure Search resource, and manage it. However, this behavior might not always be desirable. For instance, you might want to restrict the API project to only read data from the Azure Search resource. + +## Override default role assignments + + + +To override the default role assignment, use the `WithRoleAssignments` API and assign built-in roles as shown in the following example: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var search = builder.AddAzureSearch("search"); + +var api = builder.AddProject("api") + .WithRoleAssignments(search, SearchBuiltInRole.SearchIndexDataReader) + .WithReference(search); +``` + +When you use the `WithRoleAssignments` method, it replaces the default role assignments with the specified ones. This method requires two parameters: the resource to which the role assignment applies and the built-in role to assign. In the preceding example, the `search` resource is assigned the role. + +When you replace the default role assignments with the `SearchIndexDataReader` role, the API project is restricted to only reading data from the Azure Search resource. This ensures the API project can't write data to the Azure Search resource. + +For more information, see [Azure built-in roles](/azure/role-based-access-control/built-in-roles). + +## Built-in role assignment reference + +All built-in roles are defined within the namespaces and are included in the corresponding [📦 Azure.Provisioning.*](https://www.nuget.org/packages?q=Azure.Provisioning) NuGet packages. Each .NET Aspire Azure hosting integration automatically depends on the appropriate provisioning package. For more information, see [Infrastructure as code](integrations-overview.md#infrastructure-as-code). + +The following sections list the built-in roles for each Azure provisioning type that can be used as a parameter to the `WithRoleAssignments` API. + +### Azure App Configuration + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- + + + +### Azure App Container + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- + + + +### Azure Application Insights + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- +- +- +- +- + +For more information, see [Use Application Insights for .NET Aspire telemetry](../deployment/azure/application-insights.md). + +### Azure AI (formerly Cognitive Services) + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- + +For more information, see [.NET Aspire Azure OpenAI integration (Preview)](../azureai/azureai-openai-integration.md). + +### Azure Cosmos DB + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- + +For more information, see: + +- [.NET Aspire Azure Cosmos DB integration](../database/azure-cosmos-db-integration.md). +- [.NET Aspire Cosmos DB Entity Framework Core integration](../database/azure-cosmos-db-entity-framework-integration.md). + +### Azure Event Hubs + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- +- +- + +For more information, see [.NET Aspire Azure Event Hubs integration](../messaging/azure-event-hubs-integration.md). + +### Azure Key Vault + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- +- +- +- +- +- +- +- +- +- +- +- + +For more information, see [.NET Aspire Azure Key Vault integration](../security/azure-security-key-vault-integration.md). + +### Azure AI Search + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- + +For more information, see [.NET Aspire Azure AI Search integration](../azureai/azureai-search-document-integration.md). + +### Azure Service Bus + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- + +For more information, see [.NET Aspire Azure Service Bus integration](../messaging/azure-service-bus-integration.md). + +### Azure SignalR Service + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- +- +- +- + +For more information, see [.NET Aspire support for Azure SignalR Service](../real-time/azure-signalr-scenario.md). + +### Azure SQL + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- +- +- + + + +### Azure Storage + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- + +For more information, see: + +- [.NET Aspire Azure Blob Storage integration](../storage/azure-storage-blobs-integration.md) +- [.NET Aspire Azure Data Tables integration](../storage/azure-storage-tables-integration.md) +- [.NET Aspire Azure Queue Storage integration](../storage/azure-storage-queues-integration.md) + +### Azure Web PubSub + +The provisioning resource type is , and the built-in roles are defined in the struct. The built-in roles are: + +- +- +- + +For more information, see [.NET Aspire Azure Web PubSub integration](../messaging/azure-web-pubsub-integration.md). + +## See also + +- [.NET Aspire Azure integrations overview](integrations-overview.md) +- [Azure role-based access control (RBAC)](/azure/role-based-access-control/overview) diff --git a/docs/snippets/azure/AppHost/AppHost.csproj b/docs/snippets/azure/AppHost/AppHost.csproj index 36aa7ab054..6ac9064224 100644 --- a/docs/snippets/azure/AppHost/AppHost.csproj +++ b/docs/snippets/azure/AppHost/AppHost.csproj @@ -14,10 +14,12 @@ + + diff --git a/docs/toc.yml b/docs/toc.yml index c0cffb3475..f232fe6767 100644 --- a/docs/toc.yml +++ b/docs/toc.yml @@ -29,12 +29,12 @@ items: - name: Upgrade to .NET Aspire 9.0 href: get-started/upgrade-to-aspire-9.md -- name: App Host (Orchestration) +- name: App Host (Dev-time orchestration) items: - name: Overview - displayName: orchestration,aspire apphost,aspire app + displayName: orchestration,aspire apphost,aspire app,dev-time,inner-loop href: fundamentals/app-host-overview.md - - name: Orchestrate + - name: Locally orchestrate items: - name: Node.js apps in .NET Aspire href: get-started/build-aspire-apps-with-nodejs.md @@ -140,6 +140,8 @@ items: href: azure/integrations-overview.md - name: Local Azure provisioning href: azure/local-provisioning.md + - name: Manage role assignments + href: azure/role-assignments.md - name: Azure AI Search displayName: azure search,search,azure ai,cognitive search,cognitive services href: azureai/azureai-search-document-integration.md From 857447a936366d06f5732351eb25c152577878d4 Mon Sep 17 00:00:00 2001 From: David Pine Date: Thu, 3 Apr 2025 10:52:03 -0500 Subject: [PATCH 10/27] Breaking changes for .NET Aspire 9.2 (#2892) * Added breaking changes for 9.2, fixes #2888 and fixes #2889 * Correct TOC * Add clarifying type name * Fixes #2899 * Added new breaking changes docs * Remove link * Correct MD lint error/warnings --- .../9.2/generated-bicep-updates.md | 62 ++++++++++++ docs/compatibility/9.2/index.md | 25 +++++ .../9.2/keyvault-role-assignment-changes.md | 59 ++++++++++++ .../9.2/managed-identity-per-app.md | 54 +++++++++++ .../9.2/withauthentication-changes.md | 47 +++++++++ .../compatibility/9.2/withcommand-obsolete.md | 96 +++++++++++++++++++ docs/compatibility/api-removal.md | 4 + docs/compatibility/breaking-changes.md | 1 + docs/compatibility/categories.md | 4 + docs/compatibility/toc.yml | 23 ++++- 10 files changed, 374 insertions(+), 1 deletion(-) create mode 100644 docs/compatibility/9.2/generated-bicep-updates.md create mode 100644 docs/compatibility/9.2/index.md create mode 100644 docs/compatibility/9.2/keyvault-role-assignment-changes.md create mode 100644 docs/compatibility/9.2/managed-identity-per-app.md create mode 100644 docs/compatibility/9.2/withauthentication-changes.md create mode 100644 docs/compatibility/9.2/withcommand-obsolete.md diff --git a/docs/compatibility/9.2/generated-bicep-updates.md b/docs/compatibility/9.2/generated-bicep-updates.md new file mode 100644 index 0000000000..e6c3d771b4 --- /dev/null +++ b/docs/compatibility/9.2/generated-bicep-updates.md @@ -0,0 +1,62 @@ +--- +title: "Breaking change - Role Assignments separated from Azure resource bicep" +description: "Learn about the breaking change in .NET Aspire 9.2 where role assignments are moved to separate bicep modules." +ms.date: 4/2/2025 +ai-usage: ai-assisted +ms.custom: https://github.com/dotnet/docs-aspire/issues/2911 +--- + +# Role Assignments separated from Azure resource bicep + +In .NET Aspire 9.2, role assignments for Azure resources are no longer included in the same bicep file as the resource. Instead, they're moved to separate bicep modules. This change affects how role assignments are customized during infrastructure configuration. + +## Version introduced + +.NET Aspire 9.2 + +## Previous behavior + +Previously, when an Azure resource's bicep file was generated, default role assignments were included in the same bicep module as the resource. This allowed customization of role assignments in the `ConfigureInfrastructure` callback. For example: + +```csharp +var storage = builder.AddAzureStorage("storage") + .ConfigureInfrastructure(infra => + { + var roles = infra.GetProvisionableResources().OfType().ToList(); + + foreach (var role in roles) + { + infra.Remove(role); + } + + var storageAccount = infra.GetProvisionableResources().OfType().Single(); + infra.Add(storageAccount.CreateRoleAssignment(StorageBuiltInRole.StorageBlobDataContributor, ...)); + }); +``` + +## New behavior + +Role assignments are now moved to their own bicep modules. The `ConfigureInfrastructure` callback no longer contains any `RoleAssignment` instances. Instead, role assignments are configured using the `WithRoleAssignments` API. For example: + +```csharp +var storage = builder.AddAzureStorage("storage"); + +builder.AddProject("api") + .WithRoleAssignments(storage, StorageBuiltInRole.StorageBlobDataContributor); +``` + +## Type of breaking change + +This is a [behavioral change](../categories.md#behavioral-change). + +## Reason for change + +This change was necessary to implement the `WithRoleAssignments` APIs, which provide a more structured and flexible way to configure role assignments per application. + +## Recommended action + +To customize role assignments in .NET Aspire 9.2, use the `WithRoleAssignments` API instead of relying on the `ConfigureInfrastructure` callback. Update your code as shown in the [preceding example](#new-behavior). + +## Affected APIs + +- diff --git a/docs/compatibility/9.2/index.md b/docs/compatibility/9.2/index.md new file mode 100644 index 0000000000..e44e6b7397 --- /dev/null +++ b/docs/compatibility/9.2/index.md @@ -0,0 +1,25 @@ +--- +title: Breaking changes in .NET Aspire 9.2 +titleSuffix: "" +description: Navigate to the breaking changes in .NET Aspire 9.2. +ms.date: 04/02/2025 +--- + +# Breaking changes in .NET Aspire 9.2 + +If you're migrating an app to .NET Aspire 9.2, the breaking changes listed here might affect you. + +[!INCLUDE [binary-source-behavioral](../includes/binary-source-behavioral.md)] + +> [!NOTE] +> This article is a work in progress. It's not a complete list of breaking changes in .NET Aspire 9.2. + +## Breaking changes + +| Title | Type of change | Introduced version | +|--|--|--| +| [AzureContainerApps infrastructure creates managed identity per container app](managed-identity-per-app.md) | Behavioral change | 9.2 | +| [KeyVault default role assignment changing from KeyVaultAdministrator to KeyVaultSecretsUser](keyvault-role-assignment-changes.md) | Behavioral change | 9.2 | +| [Role Assignments separated from Azure resource bicep](generated-bicep-updates.md) | Behavioral change | 9.2 | +| [With authentication API creates keyvault resource in the app model](withauthentication-changes.md) | Behavioral change | 9.2 | +| [WithCommand obsolete and new overload with CommandOptions](withcommand-obsolete.md) | Source incompatible | 9.2 | diff --git a/docs/compatibility/9.2/keyvault-role-assignment-changes.md b/docs/compatibility/9.2/keyvault-role-assignment-changes.md new file mode 100644 index 0000000000..cb6c1c1c24 --- /dev/null +++ b/docs/compatibility/9.2/keyvault-role-assignment-changes.md @@ -0,0 +1,59 @@ +--- +title: "Breaking change - KeyVault default role assignment changing from KeyVaultAdministrator to KeyVaultSecretsUser" +description: "Learn about the breaking change in .NET Aspire 9.2 where the default role for Azure KeyVault applications changes to KeyVaultSecretsUser." +ms.date: 03/27/2025 +ai-usage: ai-assisted +ms.custom: https://github.com/dotnet/docs-aspire/issues/2899 +--- + +# KeyVault default role assignment changing from KeyVaultAdministrator to KeyVaultSecretsUser + +In .NET Aspire 9.2, the default role assigned to applications referencing Azure KeyVault has changed from to . This change enhances security by limiting default privileges to only reading secrets. Applications requiring higher privileges must explicitly configure them. + +## Version introduced + +.NET Aspire 9.2 + +## Previous behavior + +Previously, applications referencing Azure KeyVault were automatically granted the `KeyVaultAdministrator` role, which allowed full management of KeyVault settings. + +## New behavior + +Applications referencing Azure KeyVault are now granted the `KeyVaultSecretsUser` role by default, which restricts access to reading secrets. If higher privileges are required, they can be configured using the `WithRoleAssignments` API. + +Example: + +```csharp +using Azure.Provisioning.KeyVault; + +var kv = builder.AddAzureKeyVault("kv"); + +builder.AddProject("api") + .WithRoleAssignments(kv, KeyVaultBuiltInRole.KeyVaultContributor); +``` + +## Type of breaking change + +This is a [behavioral change](../categories.md#behavioral-change). + +## Reason for change + +The `KeyVaultAdministrator` role provides excessive privileges for most applications, as they typically only need to read secrets. Assigning the `KeyVaultSecretsUser` role by default improves security by adhering to the principle of least privilege. + +## Recommended action + +If your application requires higher privileges than the `KeyVaultSecretsUser` role, explicitly configure the necessary roles using the `WithRoleAssignments` API. For example: + +```csharp +using Azure.Provisioning.KeyVault; + +var kv = builder.AddAzureKeyVault("kv"); + +builder.AddProject("api") + .WithRoleAssignments(kv, KeyVaultBuiltInRole.KeyVaultContributor); +``` + +## Affected APIs + +- diff --git a/docs/compatibility/9.2/managed-identity-per-app.md b/docs/compatibility/9.2/managed-identity-per-app.md new file mode 100644 index 0000000000..9044b5290e --- /dev/null +++ b/docs/compatibility/9.2/managed-identity-per-app.md @@ -0,0 +1,54 @@ +--- +title: "Breaking change - AzureContainerApps infrastructure creates managed identity per container app" +description: "Learn about the breaking change in .NET Aspire 9.2 where each ContainerApp now has its own managed identity." +ms.date: 4/2/2025 +ai-usage: ai-assisted +ms.custom: https://github.com/dotnet/docs-aspire/issues/2914 +--- + +# Azure Container Apps managed identity changes + +Starting with .NET Aspire 9.2, each Azure Container App created using [📦 Aspire.Hosting.Azure.AppContainers](https://www.nuget.org/packages/Aspire.Hosting.Azure.AppContainers) NuGet package now has its own Azure Managed Identity. This change enables more granular role assignments for Azure resources but might require updates to applications that rely on shared managed identities. + +## Version introduced + +.NET Aspire 9.2 + +## Previous behavior + +All ContainerApps shared a single Azure Managed Identity. This allowed applications to interact with Azure resources using a common identity. + +## New behavior + +Each ContainerApp now has its own unique Azure Managed Identity. This enables applications to have distinct role assignments for different Azure resources. + +## Type of breaking change + +This is a [behavioral change](../categories.md#behavioral-change). + +## Reason for change + +This change was introduced to support scenarios where applications require different role assignments for different Azure resources. By assigning a unique managed identity to each ContainerApp, applications can now operate with more granular access control. + +## Recommended action + +The recommended action is to update your Azure resources to use the new managed identities. This may include: + +### Azure SQL Server + +Grant access to all Azure Managed Identities that need to interact with the database. Follow the guidance in [Configure and manage Azure AD authentication with Azure SQL](/azure/azure-sql/database/authentication-aad-configure). + +### Azure PostgreSQL + +Grant necessary privileges to all Azure Managed Identities that need to interact with the database. Use the PostgreSQL documentation on [granting privileges](https://www.postgresql.org/docs/current/ddl-priv.html) as a reference. For example: + +```sql +GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO ; +``` + +## Affected APIs + +- `Aspire.Hosting.AzureContainerAppExtensions.AddAzureContainerAppsInfrastructure` +- `Aspire.Hosting.AzureContainerAppProjectExtensions.PublishAsAzureContainerApp` +- `Aspire.Hosting.AzureContainerAppExecutableExtensions.PublishAsAzureContainerApp` +- `Aspire.Hosting.AzureContainerAppContainerExtensions.PublishAsAzureContainerApp` diff --git a/docs/compatibility/9.2/withauthentication-changes.md b/docs/compatibility/9.2/withauthentication-changes.md new file mode 100644 index 0000000000..ffd9e332d4 --- /dev/null +++ b/docs/compatibility/9.2/withauthentication-changes.md @@ -0,0 +1,47 @@ +--- +title: "Breaking change - WithAccessKeyAuthentication and WithPasswordAuthentication create a keyvault resource in the app model" +description: "Learn about the breaking change in .NET Aspire 9.2 where key vault resources are now created or referenced directly in the app model." +ms.date: 3/25/2025 +ai-usage: ai-assisted +ms.custom: https://github.com/dotnet/docs-aspire/issues/2889 +--- + +# With authentication API creates keyvault resource in the app model + +Starting in .NET Aspire 9.2, calling any of the following methods: + +- +- +- + +Will now create (or add references to) a key vault resource directly in the app model. This change allows better customization and management of connection strings and secrets. + +## Version introduced + +.NET Aspire 9.2 + +## Previous behavior + +Previously, calling `WithAccessKeyAuthentication` on CosmosDB or AzureRedis, or `WithPasswordAuthentication` on AzurePostgres, automatically created and managed Bicep resources. These resources were invisible to the app model and could not be managed or customized in C#. + +## New behavior + +In .NET Aspire 9.2, calling `WithAccessKeyAuthentication` or `WithPasswordAuthentication` adds an empty `keyVaultName` parameter as a known parameter in the Bicep file. The app model now directly creates the key vault resource or allows you to pass a reference to an existing AzureKeyVault resource where secrets will be stored. Key vault secret names for connection strings are now formatted as `connectionstrings--{resourcename}` to avoid conflicts with other connection strings. + +## Type of breaking change + +This is a [behavioral change](../categories.md#behavioral-change). + +## Reason for change + +This change moves resource management to the app host, making it easier to customize and manage resources. It allows sharing a key vault across multiple resources or using an existing key vault to manage connection strings and secrets. + +## Recommended action + +There is currently no workaround for this change. Ensure that your app model is updated to handle the new behavior for key vault resources and connection string management. + +## Affected APIs + +- +- +- diff --git a/docs/compatibility/9.2/withcommand-obsolete.md b/docs/compatibility/9.2/withcommand-obsolete.md new file mode 100644 index 0000000000..efbab0e30e --- /dev/null +++ b/docs/compatibility/9.2/withcommand-obsolete.md @@ -0,0 +1,96 @@ +--- +title: "Breaking change - WithCommand obsolete and new overload with CommandOptions" +description: "Learn about the breaking change in .NET Aspire 9.2 where the WithCommand method overload with optional parameters is marked obsolete." +ms.date: 3/25/2025 +ai-usage: ai-assisted +ms.custom: https://github.com/dotnet/docs-aspire/issues/2888 +--- + +# WithCommand obsolete and new overload with CommandOptions + +The method overload that accepted multiple optional parameters is now marked obsolete. A new overload that accepts an instance of `CommandOptions` has been introduced. This change requires updates to existing code to use the new overload. + +## Version introduced + +.NET Aspire 9.2 + +## Previous behavior + +The `WithCommand` method overload that accepted multiple optional parameters was available and not marked as obsolete. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +builder.AddProject("apiservice") + .WithCommand( + name: "command-name", + displayName: "Command display name", + executeCommand: async (ExecuteCommandContext context) => + { + // Command execution logic here + await Task.CompletedTask; + return CommandResults.Success(); + }, + updateState: (UpdateCommandStateContext context) => + { + // State update logic here + return ResourceCommandState.Enabled; + }, + displayDescription: "Command Description", + parameter: new[] { "", "" }, + confirmationMessage: "Are you sure?", + iconName: "Icons", + iconVariant: "Red", + isHighlighted: false); +``` + +## New behavior + +The existing method overload is now marked obsolete. A new overload that accepts an instance of `CommandOptions` should be used instead. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +builder.AddProject("apiservice") + .WithCommand( + name: "command-name", + displayName: "Command display name", + executeCommand: async (ExecuteCommandContext context) => + { + // Command execution logic here + await Task.CompletedTask; + return CommandResults.Success(); + }, + commandOptions: new CommandOptions + { + UpdateState = (UpdateCommandStateContext context) => + { + // State update logic here + return ResourceCommandState.Enabled; + }, + Description = "Command Description", + Parameter = new[] { "", "" }, + ConfirmationMessage = "Are you sure?", + IconName = "Icons", + IconVariant = "Red", + IsHighlighted = false + }); +``` + +The only required parameters are the `name`, `displayName`, and `executeCommand`. The rest of the parameters are now encapsulated within the `CommandOptions` object, which provides a cleaner and more maintainable API. + +## Type of breaking change + +This is a [source incompatible](../categories.md#source-compatibility) change. + +## Reason for change + +This change was made following an API review to improve clarity and maintainability by consolidating optional parameters into a single `CommandOptions` object. + +## Recommended action + +Update your code to use the new `WithCommand` overload that accepts an instance of `CommandOptions`. Replace calls to the obsolete overload with the new overload. + +## Affected APIs + +- diff --git a/docs/compatibility/api-removal.md b/docs/compatibility/api-removal.md index 0a777b74f2..cc99a34d82 100644 --- a/docs/compatibility/api-removal.md +++ b/docs/compatibility/api-removal.md @@ -14,3 +14,7 @@ ms.date: 10/24/2024 - By documenting it under [Breaking changes in .NET](breaking-changes.md). In most cases, an API that shipped in a long-term support (LTS) release is obsoleted in the subsequent LTS release before it's removed. In rare cases, based on business needs, exceptions are made to obsolete an API before the subsequent LTS release. All obsoletions are documented and communicated to customers. + +## See also + +- [.NET Aspire Support Policy](https://dotnet.microsoft.com/platform/support/policy/aspire) diff --git a/docs/compatibility/breaking-changes.md b/docs/compatibility/breaking-changes.md index 6a94a19066..a23b208b74 100644 --- a/docs/compatibility/breaking-changes.md +++ b/docs/compatibility/breaking-changes.md @@ -20,4 +20,5 @@ You can also view individual issues that detail the breaking changes introduced ## See also - [API removal in .NET](api-removal.md) +- [.NET Aspire Support Policy](https://dotnet.microsoft.com/platform/support/policy/aspire) - [.NET runtime compatibility](/dotnet/core/versions/#net-runtime-compatibility) diff --git a/docs/compatibility/categories.md b/docs/compatibility/categories.md index 6ddbac207d..7d1b1470b2 100644 --- a/docs/compatibility/categories.md +++ b/docs/compatibility/categories.md @@ -56,3 +56,7 @@ Forward compatibility refers to the ability of an existing consumer of an API to Maintaining forward compatibility virtually precludes any changes or additions from version to version, since those changes prevent a consumer that targets a later version from running under an earlier version. Developers expect that a consumer that relies on a newer API may not function correctly against the older API. Maintaining forward compatibility is not a goal of .NET Aspire. + +## See also + +- [.NET Aspire Support Policy](https://dotnet.microsoft.com/platform/support/policy/aspire) diff --git a/docs/compatibility/toc.yml b/docs/compatibility/toc.yml index 74236c499a..e60fb712ea 100644 --- a/docs/compatibility/toc.yml +++ b/docs/compatibility/toc.yml @@ -5,9 +5,28 @@ items: href: ../get-started/aspire-overview.md - name: Breaking changes href: breaking-changes.md -- name: .NET Aspire 9.1 +- name: .NET Aspire 9.2 expanded: true items: + - name: Overview + href: 9.2/index.md + - name: Breaking changes in 9.2 + expanded: true + items: + - name: Azure Container Apps managed identity changes + href: 9.2/managed-identity-per-app.md + - name: KeyVault default role assignment changes + href: 9.2/keyvault-role-assignment-changes.md + - name: Role Assignments is separate bicep + href: 9.2/generated-bicep-updates.md + - name: With authentication APIs include semantic changes + href: 9.2/withauthentication-changes.md + - name: WithCommand obsolete, use new overload + href: 9.2/withcommand-obsolete.md + +- name: .NET Aspire 9.1 + expanded: false + items: - name: Overview href: 9.1/index.md - name: Breaking changes in 9.1 @@ -50,3 +69,5 @@ items: href: 9.0/azure-resource-name-scheme.md - name: Ollama integration updates href: 9.0/ollama-integration-updates.md +- name: .NET Aspire Support Policy + href: https://dotnet.microsoft.com/platform/support/policy/aspire From fc77a73828f666a245eb851c1045a9fd1d3663a3 Mon Sep 17 00:00:00 2001 From: David Pine Date: Thu, 3 Apr 2025 19:42:33 -0500 Subject: [PATCH 11/27] Bump bicep bits (#2930) --- docs/azureai/azureai-openai-integration.md | 24 +-- .../azureai-search-document-integration.md | 20 +- docs/caching/includes/azure-redis-app-host.md | 16 +- docs/database/includes/cosmos-app-host.md | 8 +- .../includes/postgresql-flexible-server.md | 13 +- .../messaging/azure-event-hubs-integration.md | 13 +- .../azure-service-bus-integration.md | 5 +- .../messaging/azure-web-pubsub-integration.md | 16 +- .../azure-security-key-vault-integration.md | 25 +-- docs/snippets/azure/AppHost/AppHost.csproj | 38 ++-- docs/snippets/azure/AppHost/Program.cs | 9 +- .../azure/AppHost/aspire-manifest.json | 184 ++++++++++++------ .../azure/AppHost/config-roles.module.bicep | 22 +++ .../azure/AppHost/config.module.bicep | 16 +- .../azure/AppHost/cosmos-roles.module.bicep | 25 +++ .../azure/AppHost/cosmos.module.bicep | 21 +- .../AppHost/event-hubs-roles.module.bicep | 22 +++ .../azure/AppHost/event-hubs.module.bicep | 18 +- .../AppHost/key-vault-roles.module.bicep | 22 +++ .../azure/AppHost/key-vault.module.bicep | 16 +- .../azure/AppHost/openai-roles.module.bicep | 22 +++ .../azure/AppHost/openai.module.bicep | 18 +- .../postgres-flexible-roles.module.bicep | 23 +++ .../AppHost/postgres-flexible.module.bicep | 21 +- .../azure/AppHost/redis-roles.module.bicep | 22 +++ .../snippets/azure/AppHost/redis.module.bicep | 16 +- .../azure/AppHost/search-roles.module.bicep | 32 +++ .../azure/AppHost/search.module.bicep | 26 +-- .../AppHost/service-bus-roles.module.bicep | 22 +++ .../azure/AppHost/service-bus.module.bicep | 16 +- .../azure/AppHost/signalr-roles.module.bicep | 22 +++ .../azure/AppHost/signalr.module.bicep | 16 +- .../azure/AppHost/sql-roles.module.bicep | 21 ++ docs/snippets/azure/AppHost/sql.module.bicep | 4 +- .../azure/AppHost/storage-roles.module.bicep | 42 ++++ .../azure/AppHost/storage.module.bicep | 38 +--- .../AppHost/web-pubsub-roles.module.bicep | 22 +++ .../azure/AppHost/web-pubsub.module.bicep | 18 +- docs/storage/includes/storage-app-host.md | 12 +- 39 files changed, 534 insertions(+), 412 deletions(-) create mode 100644 docs/snippets/azure/AppHost/config-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/cosmos-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/event-hubs-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/key-vault-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/openai-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/postgres-flexible-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/redis-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/search-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/service-bus-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/signalr-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/sql-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/storage-roles.module.bicep create mode 100644 docs/snippets/azure/AppHost/web-pubsub-roles.module.bicep diff --git a/docs/azureai/azureai-openai-integration.md b/docs/azureai/azureai-openai-integration.md index c092a3884b..b25e6fd8b3 100644 --- a/docs/azureai/azureai-openai-integration.md +++ b/docs/azureai/azureai-openai-integration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire Azure OpenAI integration (Preview) description: Learn how to use the .NET Aspire Azure OpenAI integration. -ms.date: 03/06/2025 +ms.date: 04/03/2025 --- # .NET Aspire Azure OpenAI integration (Preview) @@ -83,25 +83,9 @@ If you're new to [Bicep](/azure/azure-resource-manager/bicep/overview), it's a d :::code language="bicep" source="../snippets/azure/AppHost/openai.module.bicep"::: -The preceding Bicep is a module that provisions an Azure Cognitive Services resource with the following defaults: - -- `location`: The location of the resource group. -- `principalType`: The principal type of the Cognitive Services resource. -- `principalId`: The principal ID of the Cognitive Services resource. -- `openai`: The Cognitive Services account resource. - - `kind`: The kind of the resource, set to `OpenAI`. - - `properties`: The properties of the resource. - - `customSubDomainName`: The custom subdomain name for the resource, based on the unique string of the resource group ID. - - `publicNetworkAccess`: Set to `Enabled`. - - `disableLocalAuth`: Set to `true`. - - `sku`: The SKU of the resource, set to `S0`. -- `openai_CognitiveServicesOpenAIContributor`: The Cognitive Services resource owner, based on the build-in `Azure Cognitive Services OpenAI Contributor` role. For more information, see [Azure Cognitive Services OpenAI Contributor](/azure/role-based-access-control/built-in-roles/ai-machine-learning#cognitive-services-openai-contributor). -- `preview`: The deployment resource, based on the `preview` name. - - `properties`: The properties of the deployment resource. - - `format`: The format of the deployment resource, set to `OpenAI`. - - `modelName`: The model name of the deployment resource, set to `gpt-4.5-preview`. - - `modelVersion`: The model version of the deployment resource, set to `2025-02-27`. -- `connectionString`: The connection string, containing the endpoint of the Cognitive Services resource. +The preceding Bicep is a module that provisions an Azure Cognitive Services resource. Additionally, role assignments are created for the Azure resource in a separate module: + +:::code language="bicep" source="../snippets/azure/AppHost/openai-roles.module.bicep"::: The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Customizations to the Bicep file directly will be overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated files. diff --git a/docs/azureai/azureai-search-document-integration.md b/docs/azureai/azureai-search-document-integration.md index cc2b3ec146..5d46781821 100644 --- a/docs/azureai/azureai-search-document-integration.md +++ b/docs/azureai/azureai-search-document-integration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire Azure AI Search integration description: Learn how to integrate Azure AI Search with .NET Aspire. -ms.date: 03/07/2025 +ms.date: 04/03/2025 --- # .NET Aspire Azure AI Search integration @@ -57,21 +57,9 @@ If you're new to [Bicep](/azure/azure-resource-manager/bicep/overview), it's a d :::code language="bicep" source="../snippets/azure/AppHost/search.module.bicep"::: -The preceding Bicep is a module that provisions an Azure AI Search service resource with the following defaults: - -- `location`: The location parameter of the resource group, defaults to `resourceGroup().location`. -- `principalType`: The principal type parameter of the Azure AI Search resource. -- `principalId`: The principal ID parameter of the Azure AI Search resource. -- `search`: The resource representing the Azure AI Search service. - - `properties`: The properties of the Azure AI Search service: - - `hostingMode`: Is set to `default`. - - `disableLocalAuth`: Is set to `true`. - - `partitionCount`: Is set to `1`. - - `replicaCount`: Is set to `1`. - - `sku`: Defaults to `basic`. -- `search_SearchIndexDataContributor`: The role assignment for the Azure AI Search index data contributor role. For more information, see [Search Index Data Contributor](/azure/role-based-access-control/built-in-roles/ai-machine-learning#search-index-data-contributor). -- `search_SearchServiceContributor`: The role assignment for the Azure AI Search service contributor role. For more information, see [Search Service Contributor](/azure/role-based-access-control/built-in-roles/ai-machine-learning#search-service-contributor). -- `connectionString`: The connection string for the Azure AI Search service, which is used to connect to the service. The connection string is generated using the `Endpoint` property of the Azure AI Search service. +The preceding Bicep is a module that provisions an Azure AI Search service resource. Additionally, role assignments are created for the Azure resource in a separate module: + +:::code language="bicep" source="../snippets/azure/AppHost/search-roles.module.bicep"::: The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Customizations to the Bicep file directly will be overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated files. diff --git a/docs/caching/includes/azure-redis-app-host.md b/docs/caching/includes/azure-redis-app-host.md index 597be5dc4e..9837bf8818 100644 --- a/docs/caching/includes/azure-redis-app-host.md +++ b/docs/caching/includes/azure-redis-app-host.md @@ -50,19 +50,9 @@ If you're new to [Bicep](/azure/azure-resource-manager/bicep/overview), it's a d :::code language="bicep" source="../../snippets/azure/AppHost/redis.module.bicep"::: -The preceding Bicep is a module that provisions an Azure Cache for Redis with the following defaults: - -- `location`: The location of the Azure Cache for Redis resource. The default is the location of the resource group. -- `principalId`: The principal ID of the Azure Cache for Redis resource. -- `principalName`: The principal name of the Azure Cache for Redis resource. -- `sku`: The SKU of the Azure Cache for Redis resource. The default is `Basic` with a capacity of `1`. -- `enableNonSslPort`: The non-SSL port of the Azure Cache for Redis resource. The default is `false`. -- `disableAccessKeyAuthentication`: The access key authentication of the Azure Cache for Redis resource. The default is `true`. -- `minimumTlsVersion`: The minimum TLS version of the Azure Cache for Redis resource. The default is `1.2`. -- `redisConfiguration`: The Redis configuration of the Azure Cache for Redis resource. The default is `aad-enabled` set to `true`. -- `tags`: The tags of the Azure Cache for Redis resource. The default is `aspire-resource-name` set to the name of the Aspire resource, in this case `redis`. -- `redis_contributor`: The contributor of the Azure Cache for Redis resource, with an access policy name of `Data Contributor`. -- `connectionString`: The connection string of the Azure Cache for Redis resource. +The preceding Bicep is a module that provisions an Azure Cache for Redis resource. Additionally, role assignments are created for the Azure resource in a separate module: + +:::code language="bicep" source="../../snippets/azure/AppHost/redis-roles.module.bicep"::: In addition to the Azure Cache for Redis, it also provisions an access policy assignment to the application access to the cache. The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Customizations to the Bicep file directly will be overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated files. diff --git a/docs/database/includes/cosmos-app-host.md b/docs/database/includes/cosmos-app-host.md index 89d7635890..add1c9db68 100644 --- a/docs/database/includes/cosmos-app-host.md +++ b/docs/database/includes/cosmos-app-host.md @@ -49,13 +49,11 @@ If you're new to [Bicep](/azure/azure-resource-manager/bicep/overview), it's a d :::code language="bicep" source="../../snippets/azure/AppHost/cosmos.module.bicep"::: -The preceding Bicep is a module that provisions an Azure Cosmos DB account with the following defaults: +The preceding Bicep is a module that provisions an Azure Cosmos DB account resource. Additionally, role assignments are created for the Azure resource in a separate module: -- `kind`: The kind of Cosmos DB account. The default is `GlobalDocumentDB`. -- `consistencyPolicy`: The consistency policy of the Cosmos DB account. The default is `Session`. -- `locations`: The locations for the Cosmos DB account. The default is the resource group's location. +:::code language="bicep" source="../../snippets/azure/AppHost/cosmos-roles.module.bicep"::: -In addition to the Cosmos DB account, it also adds the current application to the `Data Contributor` role for the Cosmos DB account. The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Customizations to the Bicep file directly will be overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated files. +The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Customizations to the Bicep file directly will be overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated files. #### Customize provisioning infrastructure diff --git a/docs/database/includes/postgresql-flexible-server.md b/docs/database/includes/postgresql-flexible-server.md index 09e09e08ce..3f570bde06 100644 --- a/docs/database/includes/postgresql-flexible-server.md +++ b/docs/database/includes/postgresql-flexible-server.md @@ -62,16 +62,9 @@ If you're new to [Bicep](/azure/azure-resource-manager/bicep/overview), it's a d :::code language="bicep" source="../../snippets/azure/AppHost/postgres-flexible.module.bicep"::: -The preceding Bicep is a module that provisions an Azure PostgreSQL flexible server with the following defaults: - -- `authConfig`: The authentication configuration of the PostgreSQL server. The default is `ActiveDirectoryAuth` enabled and `PasswordAuth` disabled. -- `availabilityZone`: The availability zone of the PostgreSQL server. The default is `1`. -- `backup`: The backup configuration of the PostgreSQL server. The default is `BackupRetentionDays` set to `7` and `GeoRedundantBackup` set to `Disabled`. -- `highAvailability`: The high availability configuration of the PostgreSQL server. The default is `Disabled`. -- `storage`: The storage configuration of the PostgreSQL server. The default is `StorageSizeGB` set to `32`. -- `version`: The version of the PostgreSQL server. The default is `16`. -- `sku`: The SKU of the PostgreSQL server. The default is `Standard_B1ms`. -- `tags`: The tags of the PostgreSQL server. The default is `aspire-resource-name` set to the name of the Aspire resource, in this case `postgres-flexible`. +The preceding Bicep is a module that provisions an Azure PostgreSQL flexible server resource. Additionally, role assignments are created for the Azure resource in a separate module: + +:::code language="bicep" source="../../snippets/azure/AppHost/postgres-flexible-roles.module.bicep"::: In addition to the PostgreSQL flexible server, it also provisions an Azure Firewall rule to allow all Azure IP addresses. Finally, an administrator is created for the PostgreSQL server, and the connection string is outputted as an output variable. The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Customizations to the Bicep file directly will be overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated files. diff --git a/docs/messaging/azure-event-hubs-integration.md b/docs/messaging/azure-event-hubs-integration.md index 4bff5bb1f2..d5dcb45d93 100644 --- a/docs/messaging/azure-event-hubs-integration.md +++ b/docs/messaging/azure-event-hubs-integration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire Azure Event Hubs integration description: This article describes the .NET Aspire Azure Event Hubs integration features and capabilities. -ms.date: 03/10/2025 +ms.date: 04/03/2025 --- # .NET Aspire Azure Event Hubs integration @@ -65,16 +65,9 @@ If you're new to [Bicep](/azure/azure-resource-manager/bicep/overview), it's a d :::code language="bicep" source="../snippets/azure/AppHost/event-hubs.module.bicep"::: -The preceding Bicep is a module that provisions an Azure Event Hubs resource with the following defaults: +The preceding Bicep is a module that provisions an Azure Event Hubs resource. Additionally, role assignments are created for the Azure resource in a separate module: -- `location`: The location of the resource group. -- `sku`: The SKU of the Event Hubs resource, defaults to `Standard`. -- `principalId`: The principal ID of the Event Hubs resource. -- `principalType`: The principal type of the Event Hubs resource. -- `event_hubs`: The Event Hubs namespace resource. -- `event_hubs_AzureEventHubsDataOwner`: The Event Hubs resource owner, based on the build-in `Azure Event Hubs Data Owner` role. For more information, see [Azure Event Hubs Data Owner](/azure/role-based-access-control/built-in-roles/analytics#azure-event-hubs-data-owner). -- `messages`: The Event Hub resource. -- `eventHubsEndpoint`: The endpoint of the Event Hubs resource. +:::code language="bicep" source="../snippets/azure/AppHost/event-hubs-roles.module.bicep"::: The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Customizations to the Bicep file directly will be overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated files. diff --git a/docs/messaging/azure-service-bus-integration.md b/docs/messaging/azure-service-bus-integration.md index 33727e0a9c..b1b4106eb1 100644 --- a/docs/messaging/azure-service-bus-integration.md +++ b/docs/messaging/azure-service-bus-integration.md @@ -59,10 +59,9 @@ If you're new to Bicep, it's a domain-specific language for defining Azure resou :::code language="bicep" source="../snippets/azure/AppHost/service-bus.module.bicep"::: -The preceding Bicep is a module that provisions an Azure Service Bus namespace with the following defaults: +The preceding Bicep is a module that provisions an Azure Service Bus namespace resource. Additionally, role assignments are created for the Azure resource in a separate module: -- `sku`: The SKU of the Service Bus namespace. The default is Standard. -- `location`: The location for the Service Bus namespace. The default is the resource group's location. +:::code language="bicep" source="../snippets/azure/AppHost/service-bus-roles.module.bicep"::: In addition to the Service Bus namespace, it also provisions an Azure role-based access control (Azure RBAC) built-in role of Azure Service Bus Data Owner. The role is assigned to the Service Bus namespace's resource group. For more information, see [Azure Service Bus Data Owner](/azure/role-based-access-control/built-in-roles/integration#azure-service-bus-data-owner). diff --git a/docs/messaging/azure-web-pubsub-integration.md b/docs/messaging/azure-web-pubsub-integration.md index 0e7a2dcb88..bb44cec37c 100644 --- a/docs/messaging/azure-web-pubsub-integration.md +++ b/docs/messaging/azure-web-pubsub-integration.md @@ -2,7 +2,7 @@ title: .NET Aspire Azure Web PubSub integration description: This article describes the .NET Aspire Azure Web PubSub integration features and capabilities. ms.topic: how-to -ms.date: 03/17/2025 +ms.date: 04/03/2025 --- # .NET Aspire Azure Web PubSub integration @@ -101,17 +101,9 @@ When you add an Azure Web PubSub resource, the following Bicep is generated: :::code language="bicep" source="../snippets/azure/AppHost/web-pubsub.module.bicep"::: -The preceding Bicep is a module that provisions an Azure Web PubSub resource with the following defaults: - -- `location`: The location of the resource group. -- `sku`: The SKU of the Web PubSub resource, defaults to `Free_F1`. -- `principalId`: The principal ID of the Web PubSub resource. -- `principalType`: The principal type of the Web PubSub resource. -- `messages_url_0`: The URL of the event handler for the `messages` hub. -- `messages`: The name of the hub resource. -- `web_pubsub`: The name of the Web PubSub resource. -- `web_pubsub_WebPubSubServiceOwner`: The role assignment for the Web PubSub resource owner. For more information, see [Azure Web PubSub Service Owner](/azure/role-based-access-control/built-in-roles/web-and-mobile#web-pubsub-service-owner). -- `endpoint`: The endpoint of the Web PubSub resource. +The preceding Bicep is a module that provisions an Azure Web PubSub resource. Additionally, role assignments are created for the Azure resource in a separate module: + +:::code language="bicep" source="../snippets/azure/AppHost/web-pubsub-roles.module.bicep"::: The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Customizations to the Bicep file directly will be overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated files. diff --git a/docs/security/azure-security-key-vault-integration.md b/docs/security/azure-security-key-vault-integration.md index 95e56d7691..ccdd0c1db7 100644 --- a/docs/security/azure-security-key-vault-integration.md +++ b/docs/security/azure-security-key-vault-integration.md @@ -61,28 +61,9 @@ If you're new to [Bicep](/azure/azure-resource-manager/bicep/overview), it's a d :::code language="bicep" source="../snippets/azure/AppHost/key-vault.module.bicep"::: -The preceding Bicep is a module that provisions an Azure Key Vault resource with the following defaults: - -- `location`: The location of the resource group. -- `principalId`: The principal ID of the user or service principal. -- `principalType`: The principal type of the user or service principal. -- `key_vault`: The Azure Key Vault resource: - - `name`: A unique name for the Azure Key Vault. - - `properties`: The Azure Key Vault properties: - - `tenantId`: The tenant ID of the Azure Key Vault. - - `sku`: The Azure Key Vault SKU: - - `family`: The SKU family. - - `name`: The SKU name. - - `enableRbacAuthorization`: A boolean value that indicates whether the Azure Key Vault has role-based access control (RBAC) authorization enabled. - - `tags`: The Azure Key Vault tags. -- `key_vault_KeyVaultAdministrator`: The Azure Key Vault administrator role assignment: - - `name`: A unique name for the role assignment. - - `properties`: The role assignment properties: - - `principalId`: The principal ID of the user or service principal. - - `roleDefinitionId`: The role definition ID of the Azure Key Vault administrator role. - - `principalType`: The principal type of the user or service principal. - - `scope`: The scope of the role assignment. -- `output`: The Azure Key Vault URI. +The preceding Bicep is a module that provisions an Azure Key Vault resource. Additionally, role assignments are created for the Azure resource in a separate module: + +:::code language="bicep" source="../snippets/azure/AppHost/key-vault-roles.module.bicep"::: The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Customizations to the Bicep file directly will be overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated files. diff --git a/docs/snippets/azure/AppHost/AppHost.csproj b/docs/snippets/azure/AppHost/AppHost.csproj index 6ac9064224..1adfa9e321 100644 --- a/docs/snippets/azure/AppHost/AppHost.csproj +++ b/docs/snippets/azure/AppHost/AppHost.csproj @@ -1,6 +1,6 @@  - + Exe @@ -12,24 +12,24 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/docs/snippets/azure/AppHost/Program.cs b/docs/snippets/azure/AppHost/Program.cs index 83c7f95204..c832d15af8 100644 --- a/docs/snippets/azure/AppHost/Program.cs +++ b/docs/snippets/azure/AppHost/Program.cs @@ -16,11 +16,10 @@ builder.AddAzureLogAnalyticsWorkspace("log-analytics-workspace"); var openai = builder.AddAzureOpenAI("openai"); -openai.AddDeployment( - new AzureOpenAIDeployment( - name: "preview", - modelName: "gpt-4.5-preview", - modelVersion: "2025-02-27")); +var deployment = openai.AddDeployment( + name: "preview", + modelName: "gpt-4.5-preview", + modelVersion: "2025-02-27"); builder.AddAzurePostgresFlexibleServer("postgres-flexible"); diff --git a/docs/snippets/azure/AppHost/aspire-manifest.json b/docs/snippets/azure/AppHost/aspire-manifest.json index 94c9d4bf4d..7309549ca3 100644 --- a/docs/snippets/azure/AppHost/aspire-manifest.json +++ b/docs/snippets/azure/AppHost/aspire-manifest.json @@ -18,11 +18,7 @@ "config": { "type": "azure.bicep.v0", "connectionString": "{config.outputs.appConfigEndpoint}", - "path": "config.module.bicep", - "params": { - "principalType": "", - "principalId": "" - } + "path": "config.module.bicep" }, "app-insights": { "type": "azure.bicep.v0", @@ -35,20 +31,12 @@ "cosmos": { "type": "azure.bicep.v0", "connectionString": "{cosmos.outputs.connectionString}", - "path": "cosmos.module.bicep", - "params": { - "principalType": "", - "principalId": "" - } + "path": "cosmos.module.bicep" }, "event-hubs": { "type": "azure.bicep.v0", "connectionString": "{event-hubs.outputs.eventHubsEndpoint}", - "path": "event-hubs.module.bicep", - "params": { - "principalType": "", - "principalId": "" - } + "path": "event-hubs.module.bicep" }, "messages": { "type": "value.v0", @@ -57,11 +45,7 @@ "key-vault": { "type": "azure.bicep.v0", "connectionString": "{key-vault.outputs.vaultUri}", - "path": "key-vault.module.bicep", - "params": { - "principalType": "", - "principalId": "" - } + "path": "key-vault.module.bicep" }, "log-analytics-workspace": { "type": "azure.bicep.v0", @@ -70,90 +54,180 @@ "openai": { "type": "azure.bicep.v0", "connectionString": "{openai.outputs.connectionString}", - "path": "openai.module.bicep", + "path": "openai.module.bicep" + }, + "preview": { + "type": "value.v0", + "connectionString": "{openai.outputs.connectionString};Deployment=preview" + }, + "postgres-flexible": { + "type": "azure.bicep.v0", + "connectionString": "{postgres-flexible.outputs.connectionString}", + "path": "postgres-flexible.module.bicep" + }, + "redis": { + "type": "azure.bicep.v0", + "connectionString": "{redis.outputs.connectionString}", + "path": "redis.module.bicep" + }, + "search": { + "type": "azure.bicep.v0", + "connectionString": "{search.outputs.connectionString}", + "path": "search.module.bicep" + }, + "service-bus": { + "type": "azure.bicep.v0", + "connectionString": "{service-bus.outputs.serviceBusEndpoint}", + "path": "service-bus.module.bicep" + }, + "signalr": { + "type": "azure.bicep.v0", + "connectionString": "Endpoint=https://{signalr.outputs.hostName};AuthType=azure", + "path": "signalr.module.bicep" + }, + "sql": { + "type": "azure.bicep.v0", + "connectionString": "Server=tcp:{sql.outputs.sqlServerFqdn},1433;Encrypt=True;Authentication=\u0022Active Directory Default\u0022", + "path": "sql.module.bicep", "params": { + "principalId": "", + "principalName": "" + } + }, + "storage": { + "type": "azure.bicep.v0", + "path": "storage.module.bicep" + }, + "wrkr": { + "type": "project.v0", + "path": "../WorkerService/WorkerService.csproj", + "env": { + "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true", + "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true", + "OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY": "in_memory" + } + }, + "web-pubsub": { + "type": "azure.bicep.v0", + "connectionString": "{web-pubsub.outputs.endpoint}", + "path": "web-pubsub.module.bicep", + "params": { + "messages_url_0": "{wrkr.bindings.https.url}/eventhandler/" + } + }, + "config-roles": { + "type": "azure.bicep.v0", + "path": "config-roles.module.bicep", + "params": { + "config_outputs_name": "{config.outputs.name}", "principalType": "", "principalId": "" } }, - "postgres-flexible": { + "cosmos-roles": { "type": "azure.bicep.v0", - "connectionString": "{postgres-flexible.outputs.connectionString}", - "path": "postgres-flexible.module.bicep", + "path": "cosmos-roles.module.bicep", "params": { - "principalId": "", + "cosmos_outputs_name": "{cosmos.outputs.name}", + "principalId": "" + } + }, + "event-hubs-roles": { + "type": "azure.bicep.v0", + "path": "event-hubs-roles.module.bicep", + "params": { + "event_hubs_outputs_name": "{event-hubs.outputs.name}", + "principalType": "", + "principalId": "" + } + }, + "key-vault-roles": { + "type": "azure.bicep.v0", + "path": "key-vault-roles.module.bicep", + "params": { + "key_vault_outputs_name": "{key-vault.outputs.name}", "principalType": "", + "principalId": "" + } + }, + "openai-roles": { + "type": "azure.bicep.v0", + "path": "openai-roles.module.bicep", + "params": { + "openai_outputs_name": "{openai.outputs.name}", + "principalType": "", + "principalId": "" + } + }, + "postgres-flexible-roles": { + "type": "azure.bicep.v0", + "path": "postgres-flexible-roles.module.bicep", + "params": { + "postgres_flexible_outputs_name": "{postgres-flexible.outputs.name}", + "principalType": "", + "principalId": "", "principalName": "" } }, - "redis": { + "redis-roles": { "type": "azure.bicep.v0", - "connectionString": "{redis.outputs.connectionString}", - "path": "redis.module.bicep", + "path": "redis-roles.module.bicep", "params": { + "redis_outputs_name": "{redis.outputs.name}", "principalId": "", "principalName": "" } }, - "search": { + "search-roles": { "type": "azure.bicep.v0", - "connectionString": "{search.outputs.connectionString}", - "path": "search.module.bicep", + "path": "search-roles.module.bicep", "params": { + "search_outputs_name": "{search.outputs.name}", "principalType": "", "principalId": "" } }, - "service-bus": { + "service-bus-roles": { "type": "azure.bicep.v0", - "connectionString": "{service-bus.outputs.serviceBusEndpoint}", - "path": "service-bus.module.bicep", + "path": "service-bus-roles.module.bicep", "params": { + "service_bus_outputs_name": "{service-bus.outputs.name}", "principalType": "", "principalId": "" } }, - "signalr": { + "signalr-roles": { "type": "azure.bicep.v0", - "connectionString": "Endpoint=https://{signalr.outputs.hostName};AuthType=azure", - "path": "signalr.module.bicep", + "path": "signalr-roles.module.bicep", "params": { + "signalr_outputs_name": "{signalr.outputs.name}", "principalType": "", "principalId": "" } }, - "sql": { + "sql-roles": { "type": "azure.bicep.v0", - "connectionString": "Server=tcp:{sql.outputs.sqlServerFqdn},1433;Encrypt=True;Authentication=\u0022Active Directory Default\u0022", - "path": "sql.module.bicep", + "path": "sql-roles.module.bicep", "params": { + "sql_outputs_name": "{sql.outputs.name}", "principalId": "", "principalName": "" } }, - "storage": { + "storage-roles": { "type": "azure.bicep.v0", - "path": "storage.module.bicep", + "path": "storage-roles.module.bicep", "params": { + "storage_outputs_name": "{storage.outputs.name}", "principalType": "", "principalId": "" } }, - "wrkr": { - "type": "project.v0", - "path": "../WorkerService/WorkerService.csproj", - "env": { - "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true", - "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true", - "OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY": "in_memory" - } - }, - "web-pubsub": { + "web-pubsub-roles": { "type": "azure.bicep.v0", - "connectionString": "{web-pubsub.outputs.endpoint}", - "path": "web-pubsub.module.bicep", + "path": "web-pubsub-roles.module.bicep", "params": { - "messages_url_0": "{wrkr.bindings.https.url}/eventhandler/", + "web_pubsub_outputs_name": "{web-pubsub.outputs.name}", "principalType": "", "principalId": "" } diff --git a/docs/snippets/azure/AppHost/config-roles.module.bicep b/docs/snippets/azure/AppHost/config-roles.module.bicep new file mode 100644 index 0000000000..cef7fe4efb --- /dev/null +++ b/docs/snippets/azure/AppHost/config-roles.module.bicep @@ -0,0 +1,22 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param config_outputs_name string + +param principalType string + +param principalId string + +resource config 'Microsoft.AppConfiguration/configurationStores@2024-05-01' existing = { + name: config_outputs_name +} + +resource config_AppConfigurationDataOwner 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(config.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '5ae67dd6-50cb-40e7-96ff-dc2bfa4b606b')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '5ae67dd6-50cb-40e7-96ff-dc2bfa4b606b') + principalType: principalType + } + scope: config +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/config.module.bicep b/docs/snippets/azure/AppHost/config.module.bicep index 84a148f49a..e02b677d3f 100644 --- a/docs/snippets/azure/AppHost/config.module.bicep +++ b/docs/snippets/azure/AppHost/config.module.bicep @@ -1,10 +1,6 @@ @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location -param principalType string - -param principalId string - resource config 'Microsoft.AppConfiguration/configurationStores@2024-05-01' = { name: take('config-${uniqueString(resourceGroup().id)}', 50) location: location @@ -19,14 +15,6 @@ resource config 'Microsoft.AppConfiguration/configurationStores@2024-05-01' = { } } -resource config_AppConfigurationDataOwner 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(config.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '5ae67dd6-50cb-40e7-96ff-dc2bfa4b606b')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '5ae67dd6-50cb-40e7-96ff-dc2bfa4b606b') - principalType: principalType - } - scope: config -} +output appConfigEndpoint string = config.properties.endpoint -output appConfigEndpoint string = config.properties.endpoint \ No newline at end of file +output name string = config.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/cosmos-roles.module.bicep b/docs/snippets/azure/AppHost/cosmos-roles.module.bicep new file mode 100644 index 0000000000..0ddb3813e6 --- /dev/null +++ b/docs/snippets/azure/AppHost/cosmos-roles.module.bicep @@ -0,0 +1,25 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param cosmos_outputs_name string + +param principalId string + +resource cosmos 'Microsoft.DocumentDB/databaseAccounts@2024-08-15' existing = { + name: cosmos_outputs_name +} + +resource cosmos_roleDefinition 'Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions@2024-08-15' existing = { + name: '00000000-0000-0000-0000-000000000002' + parent: cosmos +} + +resource cosmos_roleAssignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2024-08-15' = { + name: guid(principalId, cosmos_roleDefinition.id, cosmos.id) + properties: { + principalId: principalId + roleDefinitionId: cosmos_roleDefinition.id + scope: cosmos.id + } + parent: cosmos +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/cosmos.module.bicep b/docs/snippets/azure/AppHost/cosmos.module.bicep index 4456657066..cee38e635e 100644 --- a/docs/snippets/azure/AppHost/cosmos.module.bicep +++ b/docs/snippets/azure/AppHost/cosmos.module.bicep @@ -1,10 +1,6 @@ @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location -param principalType string - -param principalId string - resource cosmos 'Microsoft.DocumentDB/databaseAccounts@2024-08-15' = { name: take('cosmos-${uniqueString(resourceGroup().id)}', 44) location: location @@ -27,19 +23,6 @@ resource cosmos 'Microsoft.DocumentDB/databaseAccounts@2024-08-15' = { } } -resource cosmos_roleDefinition 'Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions@2024-08-15' existing = { - name: '00000000-0000-0000-0000-000000000002' - parent: cosmos -} - -resource cosmos_roleAssignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2024-08-15' = { - name: guid(principalId, cosmos_roleDefinition.id, cosmos.id) - properties: { - principalId: principalId - roleDefinitionId: cosmos_roleDefinition.id - scope: cosmos.id - } - parent: cosmos -} +output connectionString string = cosmos.properties.documentEndpoint -output connectionString string = cosmos.properties.documentEndpoint \ No newline at end of file +output name string = cosmos.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/event-hubs-roles.module.bicep b/docs/snippets/azure/AppHost/event-hubs-roles.module.bicep new file mode 100644 index 0000000000..dab8ba65fe --- /dev/null +++ b/docs/snippets/azure/AppHost/event-hubs-roles.module.bicep @@ -0,0 +1,22 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param event_hubs_outputs_name string + +param principalType string + +param principalId string + +resource event_hubs 'Microsoft.EventHub/namespaces@2024-01-01' existing = { + name: event_hubs_outputs_name +} + +resource event_hubs_AzureEventHubsDataOwner 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(event_hubs.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'f526a384-b230-433a-b45c-95f59c4a2dec')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'f526a384-b230-433a-b45c-95f59c4a2dec') + principalType: principalType + } + scope: event_hubs +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/event-hubs.module.bicep b/docs/snippets/azure/AppHost/event-hubs.module.bicep index 605bce42eb..d1f6892896 100644 --- a/docs/snippets/azure/AppHost/event-hubs.module.bicep +++ b/docs/snippets/azure/AppHost/event-hubs.module.bicep @@ -3,10 +3,6 @@ param location string = resourceGroup().location param sku string = 'Standard' -param principalType string - -param principalId string - resource event_hubs 'Microsoft.EventHub/namespaces@2024-01-01' = { name: take('event_hubs-${uniqueString(resourceGroup().id)}', 256) location: location @@ -18,19 +14,11 @@ resource event_hubs 'Microsoft.EventHub/namespaces@2024-01-01' = { } } -resource event_hubs_AzureEventHubsDataOwner 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(event_hubs.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'f526a384-b230-433a-b45c-95f59c4a2dec')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'f526a384-b230-433a-b45c-95f59c4a2dec') - principalType: principalType - } - scope: event_hubs -} - resource messages 'Microsoft.EventHub/namespaces/eventhubs@2024-01-01' = { name: 'messages' parent: event_hubs } -output eventHubsEndpoint string = event_hubs.properties.serviceBusEndpoint \ No newline at end of file +output eventHubsEndpoint string = event_hubs.properties.serviceBusEndpoint + +output name string = event_hubs.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/key-vault-roles.module.bicep b/docs/snippets/azure/AppHost/key-vault-roles.module.bicep new file mode 100644 index 0000000000..13f5f6c1a1 --- /dev/null +++ b/docs/snippets/azure/AppHost/key-vault-roles.module.bicep @@ -0,0 +1,22 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param key_vault_outputs_name string + +param principalType string + +param principalId string + +resource key_vault 'Microsoft.KeyVault/vaults@2023-07-01' existing = { + name: key_vault_outputs_name +} + +resource key_vault_KeyVaultSecretsUser 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(key_vault.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '4633458b-17de-408a-b874-0445c86b69e6')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '4633458b-17de-408a-b874-0445c86b69e6') + principalType: principalType + } + scope: key_vault +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/key-vault.module.bicep b/docs/snippets/azure/AppHost/key-vault.module.bicep index 83518a8786..bf7a3a5ec4 100644 --- a/docs/snippets/azure/AppHost/key-vault.module.bicep +++ b/docs/snippets/azure/AppHost/key-vault.module.bicep @@ -1,10 +1,6 @@ @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location -param principalType string - -param principalId string - resource key_vault 'Microsoft.KeyVault/vaults@2023-07-01' = { name: take('keyvault-${uniqueString(resourceGroup().id)}', 24) location: location @@ -21,14 +17,6 @@ resource key_vault 'Microsoft.KeyVault/vaults@2023-07-01' = { } } -resource key_vault_KeyVaultAdministrator 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(key_vault.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '00482a5a-887f-4fb3-b363-3b7fe8e74483')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '00482a5a-887f-4fb3-b363-3b7fe8e74483') - principalType: principalType - } - scope: key_vault -} +output vaultUri string = key_vault.properties.vaultUri -output vaultUri string = key_vault.properties.vaultUri \ No newline at end of file +output name string = key_vault.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/openai-roles.module.bicep b/docs/snippets/azure/AppHost/openai-roles.module.bicep new file mode 100644 index 0000000000..1200e172dd --- /dev/null +++ b/docs/snippets/azure/AppHost/openai-roles.module.bicep @@ -0,0 +1,22 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param openai_outputs_name string + +param principalType string + +param principalId string + +resource openai 'Microsoft.CognitiveServices/accounts@2024-10-01' existing = { + name: openai_outputs_name +} + +resource openai_CognitiveServicesOpenAIContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(openai.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'a001fd3d-188f-4b5d-821b-7da978bf7442')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'a001fd3d-188f-4b5d-821b-7da978bf7442') + principalType: principalType + } + scope: openai +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/openai.module.bicep b/docs/snippets/azure/AppHost/openai.module.bicep index cf28dc7cab..3ba552da1c 100644 --- a/docs/snippets/azure/AppHost/openai.module.bicep +++ b/docs/snippets/azure/AppHost/openai.module.bicep @@ -1,10 +1,6 @@ @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location -param principalType string - -param principalId string - resource openai 'Microsoft.CognitiveServices/accounts@2024-10-01' = { name: take('openai-${uniqueString(resourceGroup().id)}', 64) location: location @@ -22,16 +18,6 @@ resource openai 'Microsoft.CognitiveServices/accounts@2024-10-01' = { } } -resource openai_CognitiveServicesOpenAIContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(openai.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'a001fd3d-188f-4b5d-821b-7da978bf7442')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'a001fd3d-188f-4b5d-821b-7da978bf7442') - principalType: principalType - } - scope: openai -} - resource preview 'Microsoft.CognitiveServices/accounts/deployments@2024-10-01' = { name: 'preview' properties: { @@ -48,4 +34,6 @@ resource preview 'Microsoft.CognitiveServices/accounts/deployments@2024-10-01' = parent: openai } -output connectionString string = 'Endpoint=${openai.properties.endpoint}' \ No newline at end of file +output connectionString string = 'Endpoint=${openai.properties.endpoint}' + +output name string = openai.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/postgres-flexible-roles.module.bicep b/docs/snippets/azure/AppHost/postgres-flexible-roles.module.bicep new file mode 100644 index 0000000000..739b47434b --- /dev/null +++ b/docs/snippets/azure/AppHost/postgres-flexible-roles.module.bicep @@ -0,0 +1,23 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param postgres_flexible_outputs_name string + +param principalType string + +param principalId string + +param principalName string + +resource postgres_flexible 'Microsoft.DBforPostgreSQL/flexibleServers@2024-08-01' existing = { + name: postgres_flexible_outputs_name +} + +resource postgres_flexible_admin 'Microsoft.DBforPostgreSQL/flexibleServers/administrators@2024-08-01' = { + name: principalId + properties: { + principalName: principalName + principalType: principalType + } + parent: postgres_flexible +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/postgres-flexible.module.bicep b/docs/snippets/azure/AppHost/postgres-flexible.module.bicep index 4e879a5de0..a431b1b563 100644 --- a/docs/snippets/azure/AppHost/postgres-flexible.module.bicep +++ b/docs/snippets/azure/AppHost/postgres-flexible.module.bicep @@ -1,12 +1,6 @@ @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location -param principalId string - -param principalType string - -param principalName string - resource postgres_flexible 'Microsoft.DBforPostgreSQL/flexibleServers@2024-08-01' = { name: take('postgresflexible-${uniqueString(resourceGroup().id)}', 63) location: location @@ -46,17 +40,6 @@ resource postgreSqlFirewallRule_AllowAllAzureIps 'Microsoft.DBforPostgreSQL/flex parent: postgres_flexible } -resource postgres_flexible_admin 'Microsoft.DBforPostgreSQL/flexibleServers/administrators@2024-08-01' = { - name: principalId - properties: { - principalName: principalName - principalType: principalType - } - parent: postgres_flexible - dependsOn: [ - postgres_flexible - postgreSqlFirewallRule_AllowAllAzureIps - ] -} +output connectionString string = 'Host=${postgres_flexible.properties.fullyQualifiedDomainName}' -output connectionString string = 'Host=${postgres_flexible.properties.fullyQualifiedDomainName};Username=${principalName}' \ No newline at end of file +output name string = postgres_flexible.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/redis-roles.module.bicep b/docs/snippets/azure/AppHost/redis-roles.module.bicep new file mode 100644 index 0000000000..64ec0c1d91 --- /dev/null +++ b/docs/snippets/azure/AppHost/redis-roles.module.bicep @@ -0,0 +1,22 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param redis_outputs_name string + +param principalId string + +param principalName string + +resource redis 'Microsoft.Cache/redis@2024-03-01' existing = { + name: redis_outputs_name +} + +resource redis_contributor 'Microsoft.Cache/redis/accessPolicyAssignments@2024-03-01' = { + name: guid(redis.id, principalId, 'Data Contributor') + properties: { + accessPolicyName: 'Data Contributor' + objectId: principalId + objectIdAlias: principalName + } + parent: redis +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/redis.module.bicep b/docs/snippets/azure/AppHost/redis.module.bicep index e4b434c67a..cb8039d262 100644 --- a/docs/snippets/azure/AppHost/redis.module.bicep +++ b/docs/snippets/azure/AppHost/redis.module.bicep @@ -1,10 +1,6 @@ @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location -param principalId string - -param principalName string - resource redis 'Microsoft.Cache/redis@2024-03-01' = { name: take('redis-${uniqueString(resourceGroup().id)}', 63) location: location @@ -26,14 +22,6 @@ resource redis 'Microsoft.Cache/redis@2024-03-01' = { } } -resource redis_contributor 'Microsoft.Cache/redis/accessPolicyAssignments@2024-03-01' = { - name: take('rediscontributor${uniqueString(resourceGroup().id)}', 24) - properties: { - accessPolicyName: 'Data Contributor' - objectId: principalId - objectIdAlias: principalName - } - parent: redis -} +output connectionString string = '${redis.properties.hostName},ssl=true' -output connectionString string = '${redis.properties.hostName},ssl=true' \ No newline at end of file +output name string = redis.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/search-roles.module.bicep b/docs/snippets/azure/AppHost/search-roles.module.bicep new file mode 100644 index 0000000000..5bd53074a2 --- /dev/null +++ b/docs/snippets/azure/AppHost/search-roles.module.bicep @@ -0,0 +1,32 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param search_outputs_name string + +param principalType string + +param principalId string + +resource search 'Microsoft.Search/searchServices@2023-11-01' existing = { + name: search_outputs_name +} + +resource search_SearchIndexDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(search.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8ebe5a00-799e-43f5-93ac-243d3dce84a7')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8ebe5a00-799e-43f5-93ac-243d3dce84a7') + principalType: principalType + } + scope: search +} + +resource search_SearchServiceContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(search.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7ca78c08-252a-4471-8644-bb5ff32d4ba0')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7ca78c08-252a-4471-8644-bb5ff32d4ba0') + principalType: principalType + } + scope: search +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/search.module.bicep b/docs/snippets/azure/AppHost/search.module.bicep index 70acf5ac98..43372861e2 100644 --- a/docs/snippets/azure/AppHost/search.module.bicep +++ b/docs/snippets/azure/AppHost/search.module.bicep @@ -1,10 +1,6 @@ @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location -param principalType string - -param principalId string - resource search 'Microsoft.Search/searchServices@2023-11-01' = { name: take('search-${uniqueString(resourceGroup().id)}', 60) location: location @@ -22,24 +18,6 @@ resource search 'Microsoft.Search/searchServices@2023-11-01' = { } } -resource search_SearchIndexDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(search.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8ebe5a00-799e-43f5-93ac-243d3dce84a7')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8ebe5a00-799e-43f5-93ac-243d3dce84a7') - principalType: principalType - } - scope: search -} - -resource search_SearchServiceContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(search.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7ca78c08-252a-4471-8644-bb5ff32d4ba0')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7ca78c08-252a-4471-8644-bb5ff32d4ba0') - principalType: principalType - } - scope: search -} +output connectionString string = 'Endpoint=https://${search.name}.search.windows.net' -output connectionString string = 'Endpoint=https://${search.name}.search.windows.net' \ No newline at end of file +output name string = search.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/service-bus-roles.module.bicep b/docs/snippets/azure/AppHost/service-bus-roles.module.bicep new file mode 100644 index 0000000000..6f7f25ea73 --- /dev/null +++ b/docs/snippets/azure/AppHost/service-bus-roles.module.bicep @@ -0,0 +1,22 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param service_bus_outputs_name string + +param principalType string + +param principalId string + +resource service_bus 'Microsoft.ServiceBus/namespaces@2024-01-01' existing = { + name: service_bus_outputs_name +} + +resource service_bus_AzureServiceBusDataOwner 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(service_bus.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '090c5cfd-751d-490a-894a-3ce6f1109419')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '090c5cfd-751d-490a-894a-3ce6f1109419') + principalType: principalType + } + scope: service_bus +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/service-bus.module.bicep b/docs/snippets/azure/AppHost/service-bus.module.bicep index 87fb26b15e..35207a77b3 100644 --- a/docs/snippets/azure/AppHost/service-bus.module.bicep +++ b/docs/snippets/azure/AppHost/service-bus.module.bicep @@ -3,10 +3,6 @@ param location string = resourceGroup().location param sku string = 'Standard' -param principalType string - -param principalId string - resource service_bus 'Microsoft.ServiceBus/namespaces@2024-01-01' = { name: take('servicebus-${uniqueString(resourceGroup().id)}', 50) location: location @@ -21,14 +17,6 @@ resource service_bus 'Microsoft.ServiceBus/namespaces@2024-01-01' = { } } -resource service_bus_AzureServiceBusDataOwner 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(service_bus.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '090c5cfd-751d-490a-894a-3ce6f1109419')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '090c5cfd-751d-490a-894a-3ce6f1109419') - principalType: principalType - } - scope: service_bus -} +output serviceBusEndpoint string = service_bus.properties.serviceBusEndpoint -output serviceBusEndpoint string = service_bus.properties.serviceBusEndpoint \ No newline at end of file +output name string = service_bus.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/signalr-roles.module.bicep b/docs/snippets/azure/AppHost/signalr-roles.module.bicep new file mode 100644 index 0000000000..3ea244404d --- /dev/null +++ b/docs/snippets/azure/AppHost/signalr-roles.module.bicep @@ -0,0 +1,22 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param signalr_outputs_name string + +param principalType string + +param principalId string + +resource signalr 'Microsoft.SignalRService/signalR@2024-03-01' existing = { + name: signalr_outputs_name +} + +resource signalr_SignalRAppServer 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(signalr.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '420fcaa2-552c-430f-98ca-3264be4806c7')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '420fcaa2-552c-430f-98ca-3264be4806c7') + principalType: principalType + } + scope: signalr +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/signalr.module.bicep b/docs/snippets/azure/AppHost/signalr.module.bicep index d6d6382803..e55d9ec39c 100644 --- a/docs/snippets/azure/AppHost/signalr.module.bicep +++ b/docs/snippets/azure/AppHost/signalr.module.bicep @@ -1,10 +1,6 @@ @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location -param principalType string - -param principalId string - resource signalr 'Microsoft.SignalRService/signalR@2024-03-01' = { name: take('signalr-${uniqueString(resourceGroup().id)}', 63) location: location @@ -31,14 +27,6 @@ resource signalr 'Microsoft.SignalRService/signalR@2024-03-01' = { } } -resource signalr_SignalRAppServer 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(signalr.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '420fcaa2-552c-430f-98ca-3264be4806c7')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '420fcaa2-552c-430f-98ca-3264be4806c7') - principalType: principalType - } - scope: signalr -} +output hostName string = signalr.properties.hostName -output hostName string = signalr.properties.hostName \ No newline at end of file +output name string = signalr.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/sql-roles.module.bicep b/docs/snippets/azure/AppHost/sql-roles.module.bicep new file mode 100644 index 0000000000..b51780ea7c --- /dev/null +++ b/docs/snippets/azure/AppHost/sql-roles.module.bicep @@ -0,0 +1,21 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param sql_outputs_name string + +param principalId string + +param principalName string + +resource sql 'Microsoft.Sql/servers@2021-11-01' existing = { + name: sql_outputs_name +} + +resource sql_admin 'Microsoft.Sql/servers/administrators@2021-11-01' = { + name: 'ActiveDirectory' + properties: { + login: principalName + sid: principalId + } + parent: sql +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/sql.module.bicep b/docs/snippets/azure/AppHost/sql.module.bicep index 82a2c546e9..705533e475 100644 --- a/docs/snippets/azure/AppHost/sql.module.bicep +++ b/docs/snippets/azure/AppHost/sql.module.bicep @@ -34,4 +34,6 @@ resource sqlFirewallRule_AllowAllAzureIps 'Microsoft.Sql/servers/firewallRules@2 parent: sql } -output sqlServerFqdn string = sql.properties.fullyQualifiedDomainName \ No newline at end of file +output sqlServerFqdn string = sql.properties.fullyQualifiedDomainName + +output name string = sql.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/storage-roles.module.bicep b/docs/snippets/azure/AppHost/storage-roles.module.bicep new file mode 100644 index 0000000000..e0b9cb6247 --- /dev/null +++ b/docs/snippets/azure/AppHost/storage-roles.module.bicep @@ -0,0 +1,42 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param storage_outputs_name string + +param principalType string + +param principalId string + +resource storage 'Microsoft.Storage/storageAccounts@2024-01-01' existing = { + name: storage_outputs_name +} + +resource storage_StorageBlobDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(storage.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe') + principalType: principalType + } + scope: storage +} + +resource storage_StorageTableDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(storage.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3') + principalType: principalType + } + scope: storage +} + +resource storage_StorageQueueDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(storage.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '974c5e8b-45b9-4653-ba55-5f855dd0fb88')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '974c5e8b-45b9-4653-ba55-5f855dd0fb88') + principalType: principalType + } + scope: storage +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/storage.module.bicep b/docs/snippets/azure/AppHost/storage.module.bicep index c98e7649b4..5a375968ca 100644 --- a/docs/snippets/azure/AppHost/storage.module.bicep +++ b/docs/snippets/azure/AppHost/storage.module.bicep @@ -1,10 +1,6 @@ @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location -param principalType string - -param principalId string - resource storage 'Microsoft.Storage/storageAccounts@2024-01-01' = { name: take('storage${uniqueString(resourceGroup().id)}', 24) kind: 'StorageV2' @@ -30,38 +26,10 @@ resource blobs 'Microsoft.Storage/storageAccounts/blobServices@2024-01-01' = { parent: storage } -resource storage_StorageBlobDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(storage.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe') - principalType: principalType - } - scope: storage -} - -resource storage_StorageTableDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(storage.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3') - principalType: principalType - } - scope: storage -} - -resource storage_StorageQueueDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(storage.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '974c5e8b-45b9-4653-ba55-5f855dd0fb88')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '974c5e8b-45b9-4653-ba55-5f855dd0fb88') - principalType: principalType - } - scope: storage -} - output blobEndpoint string = storage.properties.primaryEndpoints.blob output queueEndpoint string = storage.properties.primaryEndpoints.queue -output tableEndpoint string = storage.properties.primaryEndpoints.table \ No newline at end of file +output tableEndpoint string = storage.properties.primaryEndpoints.table + +output name string = storage.name \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/web-pubsub-roles.module.bicep b/docs/snippets/azure/AppHost/web-pubsub-roles.module.bicep new file mode 100644 index 0000000000..bb480ed67d --- /dev/null +++ b/docs/snippets/azure/AppHost/web-pubsub-roles.module.bicep @@ -0,0 +1,22 @@ +@description('The location for the resource(s) to be deployed.') +param location string = resourceGroup().location + +param web_pubsub_outputs_name string + +param principalType string + +param principalId string + +resource web_pubsub 'Microsoft.SignalRService/webPubSub@2024-03-01' existing = { + name: web_pubsub_outputs_name +} + +resource web_pubsub_WebPubSubServiceOwner 'Microsoft.Authorization/roleAssignments@2022-04-01' = { + name: guid(web_pubsub.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '12cf5a90-567b-43ae-8102-96cf46c7d9b4')) + properties: { + principalId: principalId + roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '12cf5a90-567b-43ae-8102-96cf46c7d9b4') + principalType: principalType + } + scope: web_pubsub +} \ No newline at end of file diff --git a/docs/snippets/azure/AppHost/web-pubsub.module.bicep b/docs/snippets/azure/AppHost/web-pubsub.module.bicep index f5867c2f67..b3caad1f72 100644 --- a/docs/snippets/azure/AppHost/web-pubsub.module.bicep +++ b/docs/snippets/azure/AppHost/web-pubsub.module.bicep @@ -5,10 +5,6 @@ param sku string = 'Free_F1' param capacity int = 1 -param principalType string - -param principalId string - param messages_url_0 string resource web_pubsub 'Microsoft.SignalRService/webPubSub@2024-03-01' = { @@ -23,16 +19,6 @@ resource web_pubsub 'Microsoft.SignalRService/webPubSub@2024-03-01' = { } } -resource web_pubsub_WebPubSubServiceOwner 'Microsoft.Authorization/roleAssignments@2022-04-01' = { - name: guid(web_pubsub.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '12cf5a90-567b-43ae-8102-96cf46c7d9b4')) - properties: { - principalId: principalId - roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '12cf5a90-567b-43ae-8102-96cf46c7d9b4') - principalType: principalType - } - scope: web_pubsub -} - resource messages 'Microsoft.SignalRService/webPubSub/hubs@2024-03-01' = { name: 'messages' properties: { @@ -49,4 +35,6 @@ resource messages 'Microsoft.SignalRService/webPubSub/hubs@2024-03-01' = { parent: web_pubsub } -output endpoint string = 'https://${web_pubsub.properties.hostName}' \ No newline at end of file +output endpoint string = 'https://${web_pubsub.properties.hostName}' + +output name string = web_pubsub.name \ No newline at end of file diff --git a/docs/storage/includes/storage-app-host.md b/docs/storage/includes/storage-app-host.md index 4df77a53b7..e40eb219e9 100644 --- a/docs/storage/includes/storage-app-host.md +++ b/docs/storage/includes/storage-app-host.md @@ -58,15 +58,9 @@ If you're new to [Bicep](/azure/azure-resource-manager/bicep/overview), it's a d :::code language="bicep" source="../../snippets/azure/AppHost/storage.module.bicep"::: -The preceding Bicep is a module that provisions an Azure Storage account with the following defaults: - -- `kind`: The kind of storage account. The default is `StorageV2`. -- `sku`: The SKU of the storage account. The default is `Standard_GRS`. -- `properties`: The properties of the storage account: - - `accessTier`: The access tier of the storage account. The default is `Hot`. - - `allowSharedKeyAccess`: A boolean value that indicates whether the storage account permits requests to be authorized with the account access key. The default is `false`. - - `minimumTlsVersion`: The minimum supported TLS version for the storage account. The default is `TLS1_2`. - - `networkAcls`: The network ACLs for the storage account. The default is `{ defaultAction: 'Allow' }`. +The preceding Bicep is a module that provisions an Azure Storage account resource. Additionally, role assignments are created for the Azure resource in a separate module: + +:::code language="bicep" source="../../snippets/azure/AppHost/storage-roles.module.bicep"::: In addition to the storage account, it also provisions a blob container. From 1104b480ddc9a527104c372c78849ef21b16cea6 Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Mon, 7 Apr 2025 14:27:10 +0100 Subject: [PATCH 12/27] Update docs to use `EndpointProperty.HostAndPort` where appropriate (#2934) Fixes #2646 --- docs/extensibility/custom-hosting-integration.md | 2 +- .../snippets/MailDevResource/MailDev.Hosting/MailDevResource.cs | 2 +- .../MailDev.Hosting/MailDevResource.cs | 2 +- .../MailDev.Hosting/MailDevResource.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/extensibility/custom-hosting-integration.md b/docs/extensibility/custom-hosting-integration.md index 8b9a2a2b0b..60ffe37daa 100644 --- a/docs/extensibility/custom-hosting-integration.md +++ b/docs/extensibility/custom-hosting-integration.md @@ -357,7 +357,7 @@ For example, the `MailDevResource` exposes a property called `ConnectionStringEx ```csharp public ReferenceExpression ConnectionStringExpression => ReferenceExpression.Create( - $"smtp://{SmtpEndpoint.Property(EndpointProperty.Host)}:{SmtpEndpoint.Property(EndpointProperty.Port)}" + $"smtp://{SmtpEndpoint.Property(EndpointProperty.HostAndPort)}" ); ``` diff --git a/docs/extensibility/snippets/MailDevResource/MailDev.Hosting/MailDevResource.cs b/docs/extensibility/snippets/MailDevResource/MailDev.Hosting/MailDevResource.cs index 2e76605b94..920ff9cdc7 100644 --- a/docs/extensibility/snippets/MailDevResource/MailDev.Hosting/MailDevResource.cs +++ b/docs/extensibility/snippets/MailDevResource/MailDev.Hosting/MailDevResource.cs @@ -25,6 +25,6 @@ public sealed class MailDevResource(string name) : ContainerResource(name), IRes // the connection string is composed of the SmtpEndpoint endpoint reference. public ReferenceExpression ConnectionStringExpression => ReferenceExpression.Create( - $"smtp://{SmtpEndpoint.Property(EndpointProperty.Host)}:{SmtpEndpoint.Property(EndpointProperty.Port)}" + $"smtp://{SmtpEndpoint.Property(EndpointProperty.HostAndPort)}" ); } diff --git a/docs/extensibility/snippets/MailDevResourceAndComponent/MailDev.Hosting/MailDevResource.cs b/docs/extensibility/snippets/MailDevResourceAndComponent/MailDev.Hosting/MailDevResource.cs index 2e76605b94..920ff9cdc7 100644 --- a/docs/extensibility/snippets/MailDevResourceAndComponent/MailDev.Hosting/MailDevResource.cs +++ b/docs/extensibility/snippets/MailDevResourceAndComponent/MailDev.Hosting/MailDevResource.cs @@ -25,6 +25,6 @@ public sealed class MailDevResource(string name) : ContainerResource(name), IRes // the connection string is composed of the SmtpEndpoint endpoint reference. public ReferenceExpression ConnectionStringExpression => ReferenceExpression.Create( - $"smtp://{SmtpEndpoint.Property(EndpointProperty.Host)}:{SmtpEndpoint.Property(EndpointProperty.Port)}" + $"smtp://{SmtpEndpoint.Property(EndpointProperty.HostAndPort)}" ); } diff --git a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDevResource.cs b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDevResource.cs index 0ea11f37ce..a0c7a5f7b9 100644 --- a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDevResource.cs +++ b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDevResource.cs @@ -45,6 +45,6 @@ UsernameParameter is not null ? // the connection string is composed of the SmtpEndpoint endpoint reference. public ReferenceExpression ConnectionStringExpression => ReferenceExpression.Create( - $"Endpoint=smtp://{SmtpEndpoint.Property(EndpointProperty.Host)}:{SmtpEndpoint.Property(EndpointProperty.Port)};Username={UserNameReference};Password={PasswordParameter}" + $"Endpoint=smtp://{SmtpEndpoint.Property(EndpointProperty.HostAndPort))};Username={UserNameReference};Password={PasswordParameter}" ); } From 9278dda6e8686961e0c4a46d592bb7add0ad8bac Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 8 Apr 2025 15:25:50 -0500 Subject: [PATCH 13/27] Reorganize the order of the Azure storage content (#2937) * Fixes #2935 * Tweak table style * Apply suggestions from code review Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --------- Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> --- .../azure-storage-blobs-integration.md | 8 +- .../azure-storage-queues-integration.md | 8 +- .../azure-storage-tables-integration.md | 8 +- docs/storage/includes/storage-app-host.md | 201 ------------------ docs/storage/includes/storage-bicep.md | 45 ++++ docs/storage/includes/storage-connections.md | 53 +++++ docs/storage/includes/storage-emulator.md | 112 ++++++++++ 7 files changed, 231 insertions(+), 204 deletions(-) create mode 100644 docs/storage/includes/storage-bicep.md create mode 100644 docs/storage/includes/storage-connections.md create mode 100644 docs/storage/includes/storage-emulator.md diff --git a/docs/storage/azure-storage-blobs-integration.md b/docs/storage/azure-storage-blobs-integration.md index 4c243d782e..af8a78e283 100644 --- a/docs/storage/azure-storage-blobs-integration.md +++ b/docs/storage/azure-storage-blobs-integration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire Azure Blob Storage integration description: Learn how to use the .NET Aspire Azure Blob Storage integration, which includes both hosting and client integrations. -ms.date: 12/09/2024 +ms.date: 04/08/2025 uid: storage/azure-blob-storage-integration --- @@ -40,6 +40,12 @@ The preceding code: - Adds a blob container named `blobs` to the storage resource. - Adds the `blobs` resource to the `ExampleProject` and waits for it to be ready before starting the project. +[!INCLUDE [storage-bicep](includes/storage-bicep.md)] + +[!INCLUDE [storage-emulator](includes/storage-emulator.md)] + +[!INCLUDE [storage-connections](includes/storage-connections.md)] + [!INCLUDE [storage-hosting-health-checks](includes/storage-hosting-health-checks.md)] ## Client integration diff --git a/docs/storage/azure-storage-queues-integration.md b/docs/storage/azure-storage-queues-integration.md index 9ad341173c..fb26e72df6 100644 --- a/docs/storage/azure-storage-queues-integration.md +++ b/docs/storage/azure-storage-queues-integration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire Azure Queue Storage integration description: This article describes the .NET Aspire Azure Queue Storage integration features and capabilities. -ms.date: 12/09/2024 +ms.date: 04/08/2025 uid: storage/azure-queue-storage-integration --- @@ -37,6 +37,12 @@ The preceding code: - Adds a queue named `queues` to the storage resource. - Adds the `storage` resource to the `ExampleProject` and waits for it to be ready before starting the project. +[!INCLUDE [storage-bicep](includes/storage-bicep.md)] + +[!INCLUDE [storage-emulator](includes/storage-emulator.md)] + +[!INCLUDE [storage-connections](includes/storage-connections.md)] + [!INCLUDE [storage-hosting-health-checks](includes/storage-hosting-health-checks.md)] ## Client integration diff --git a/docs/storage/azure-storage-tables-integration.md b/docs/storage/azure-storage-tables-integration.md index 4758d6ac7b..913b556e21 100644 --- a/docs/storage/azure-storage-tables-integration.md +++ b/docs/storage/azure-storage-tables-integration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire Azure Data Tables integration description: Learn how to use the .NET Aspire Azure Data Tables integration, which includes both hosting and client integrations. -ms.date: 12/09/2024 +ms.date: 04/08/2025 uid: storage/azure-data-tables-integration --- @@ -38,6 +38,12 @@ The preceding code: - Adds a table storage resource named `tables` to the storage resource. - Adds the `storage` resource to the `ExampleProject` and waits for it to be ready before starting the project. +[!INCLUDE [storage-bicep](includes/storage-bicep.md)] + +[!INCLUDE [storage-emulator](includes/storage-emulator.md)] + +[!INCLUDE [storage-connections](includes/storage-connections.md)] + [!INCLUDE [storage-hosting-health-checks](includes/storage-hosting-health-checks.md)] ## Client integration diff --git a/docs/storage/includes/storage-app-host.md b/docs/storage/includes/storage-app-host.md index e40eb219e9..51867f03bc 100644 --- a/docs/storage/includes/storage-app-host.md +++ b/docs/storage/includes/storage-app-host.md @@ -51,204 +51,3 @@ When you add an `AzureStorageResource` to the app host, it exposes other useful > [!IMPORTANT] > When you call , it implicitly calls —which adds support for generating Azure resources dynamically during app startup. The app must configure the appropriate subscription and location. For more information, see [Local provisioning: Configuration](../../azure/local-provisioning.md#configuration). - -#### Generated provisioning Bicep - -If you're new to [Bicep](/azure/azure-resource-manager/bicep/overview), it's a domain-specific language for defining Azure resources. With .NET Aspire, you don't need to write Bicep by-hand, instead the provisioning APIs generate Bicep for you. When you publish your app, the generated Bicep is output alongside the manifest file. When you add an Azure Storage resource, the following Bicep is generated: - -:::code language="bicep" source="../../snippets/azure/AppHost/storage.module.bicep"::: - -The preceding Bicep is a module that provisions an Azure Storage account resource. Additionally, role assignments are created for the Azure resource in a separate module: - -:::code language="bicep" source="../../snippets/azure/AppHost/storage-roles.module.bicep"::: - -In addition to the storage account, it also provisions a blob container. - -The following role assignments are added to the storage account to grant your application access. See the [built-in Azure role-based access control (Azure RBAC) roles](/azure/role-based-access-control/built-in-roles#storage) for more information: - -| Role / ID | Description | -|------|-------------| -| Storage Blob Data Contributor
`ba92f5b4-2d11-453d-a403-e96b0029c9fe` | Read, write, and delete Azure Storage containers and blobs. | -| Storage Table Data Contributor
`0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3` | Read, write, and delete Azure Storage tables and entities. | -| Storage Queue Data Contributor
`974c5e8b-45b9-4653-ba55-5f855dd0fb88` | Read, write, and delete Azure Storage queues and queue messages. | - -The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. Customizations to the Bicep file directly will be overwritten, so make changes through the C# provisioning APIs to ensure they are reflected in the generated files. - -#### Customize provisioning infrastructure - -All .NET Aspire Azure resources are subclasses of the type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources—using the API. For example, you can configure the `kind`, `sku`, `properties`, and more. The following example demonstrates how to customize the Azure Storage resource: - -:::code language="csharp" source="../../snippets/azure/AppHost/Program.ConfigureStorageInfra.cs" id="configure"::: - -The preceding code: - -- Chains a call to the API: - - The `infra` parameter is an instance of the type. - - The provisionable resources are retrieved by calling the method. - - The single is retrieved. - - The is assigned to . - - The is assigned to a new with a `Name` of . - - A tag is added to the storage account with a key of `ExampleKey` and a value of `Example value`. - -There are many more configuration options available to customize the Azure Storage resource. For more information, see . - - - -### Connect to an existing Azure Storage account - -You might have an existing Azure Storage account that you want to connect to. Instead of representing a new Azure Storage resource, you can add a connection string to the app host. To add a connection to an existing Azure Storage account, call the method: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var blobs = builder.AddConnectionString("blobs"); - -builder.AddProject("web") - .WithReference(blobs); - -// After adding all resources, run the app... -``` - -[!INCLUDE [connection-strings-alert](../../includes/connection-strings-alert.md)] - -The connection string is configured in the app host's configuration, typically under [User Secrets](/aspnet/core/security/app-secrets), under the `ConnectionStrings` section. The app host injects this connection string as an environment variable into all dependent resources, for example: - -```json -{ - "ConnectionStrings": { - "blobs": "https://{account_name}.blob.core.windows.net/" - } -} -``` - -The dependent resource can access the injected connection string by calling the method, and passing the connection name as the parameter, in this case `"blobs"`. The `GetConnectionString` API is shorthand for `IConfiguration.GetSection("ConnectionStrings")[name]`. - -### Add Azure Storage emulator resource - -To add an Azure Storage emulator resource, chain a call on an `IResourceBuilder` to the API: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var storage = builder.AddAzureStorage("storage") - .RunAsEmulator(); - -// After adding all resources, run the app... -``` - -When you call `RunAsEmulator`, it configures your storage resources to run locally using an emulator. The emulator in this case is [Azurite](/azure/storage/common/storage-use-azurite). The Azurite open-source emulator provides a free local environment for testing your Azure Blob, Queue Storage, and Table Storage apps and it's a perfect companion to the .NET Aspire Azure hosting integration. Azurite isn't installed, instead, it's accessible to .NET Aspire as a container. When you add a container to the app host, as shown in the preceding example with the `mcr.microsoft.com/azure-storage/azurite` image, it creates and starts the container when the app host starts. For more information, see [Container resource lifecycle](../../fundamentals/app-host-overview.md#container-resource-lifecycle). - -#### Configure Azurite container - -There are various configurations available to container resources, for example, you can configure the container's ports, environment variables, it's [lifetime](../../fundamentals/app-host-overview.md#container-resource-lifetime), and more. - -##### Configure Azurite container ports - -By default, the Azurite container when configured by .NET Aspire, exposes the following endpoints: - -| Endpoint | Container port | Host port | -|----------|----------------|-----------| -| `blob` | 10000 | dynamic | -| `queue` | 10001 | dynamic | -| `table` | 10002 | dynamic | - -The port that they're listening on is dynamic by default. When the container starts, the ports are mapped to a random port on the host machine. To configure the endpoint ports, chain calls on the container resource builder provided by the `RunAsEmulator` method as shown in the following example: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var storage = builder.AddAzureStorage("storage").RunAsEmulator( - azurite => - { - azurite.WithBlobPort(27000) - .WithQueuePort(27001) - .WithTablePort(27002); - }); - -// After adding all resources, run the app... -``` - -The preceding code configures the Azurite container's existing `blob`, `queue`, and `table` endpoints to listen on ports `27000`, `27001`, and `27002`, respectively. The Azurite container's ports are mapped to the host ports as shown in the following table: - -| Endpoint name | Port mapping (`container:host`) | -|--------------:|---------------------------------| -| `blob` | `10000:27000` | -| `queue` | `10001:27001` | -| `table` | `10002:27002` | - -##### Configure Azurite container with persistent lifetime - -To configure the Azurite container with a persistent lifetime, call the method on the Azurite container resource and pass : - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var storage = builder.AddAzureStorage("storage").RunAsEmulator( - azurite => - { - azurite.WithLifetime(ContainerLifetime.Persistent); - }); - -// After adding all resources, run the app... -``` - -For more information, see [Container resource lifetime](../../fundamentals/app-host-overview.md#container-resource-lifetime). - -##### Configure Azurite container with data volume - -To add a data volume to the Azure Storage emulator resource, call the method on the Azure Storage emulator resource: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var storage = builder.AddAzureStorage("storage").RunAsEmulator( - azurite => - { - azurite.WithDataVolume(); - }); - -// After adding all resources, run the app... -``` - -The data volume is used to persist the Azurite data outside the lifecycle of its container. The data volume is mounted at the `/data` path in the Azurite container and when a `name` parameter isn't provided, the name is formatted as `.azurite/{resource name}`. For more information on data volumes and details on why they're preferred over [bind mounts](#configure-azurite-container-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes). - -##### Configure Azurite container with data bind mount - -To add a data bind mount to the Azure Storage emulator resource, call the method: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var storage = builder.AddAzureStorage("storage").RunAsEmulator( - azurite => - { - azurite.WithDataBindMount("../Azurite/Data"); - }); - -// After adding all resources, run the app... -``` - -[!INCLUDE [data-bind-mount-vs-volumes](../../includes/data-bind-mount-vs-volumes.md)] - -Data bind mounts rely on the host machine's filesystem to persist the Azurite data across container restarts. The data bind mount is mounted at the `../Azurite/Data` path on the host machine relative to the app host directory () in the Azurite container. For more information on data bind mounts, see [Docker docs: Bind mounts](https://docs.docker.com/engine/storage/bind-mounts). - -### Connect to storage resources - -When the .NET Aspire app host runs, the storage resources can be accessed by external tools, such as the [Azure Storage Explorer](https://azure.microsoft.com/features/storage-explorer/). If your storage resource is running locally using Azurite, it will automatically be picked up by the Azure Storage Explorer. - -> [!NOTE] -> The Azure Storage Explorer discovers Azurite storage resources assuming the default ports are used. If you've [configured the Azurite container to use different ports](#configure-azurite-container-ports), you'll need to configure the Azure Storage Explorer to connect to the correct ports. - -To connect to the storage resource from Azure Storage Explorer, follow these steps: - -1. Run the .NET Aspire app host. -1. Open the Azure Storage Explorer. -1. View the **Explorer** pane. -1. Select the **Refresh all** link to refresh the list of storage accounts. -1. Expand the **Emulator & Attached** node. -1. Expand the **Storage Accounts** node. -1. You should see a storage account with your resource's name as a prefix: - - :::image type="content" source="../media/azure-storage-explorer.png" lightbox="../media/azure-storage-explorer.png" alt-text="Azure Storage Explorer: Azurite storage resource discovered."::: - -You're free to explore the storage account and its contents using the Azure Storage Explorer. For more information on using the Azure Storage Explorer, see [Get started with Storage Explorer](/azure/storage/storage-explorer/vs-azure-tools-storage-manage-with-storage-explorer). diff --git a/docs/storage/includes/storage-bicep.md b/docs/storage/includes/storage-bicep.md new file mode 100644 index 0000000000..f428a4f382 --- /dev/null +++ b/docs/storage/includes/storage-bicep.md @@ -0,0 +1,45 @@ +--- +ms.topic: include +--- + +#### Provisioning-generated Bicep + +If you're new to [Bicep](/azure/azure-resource-manager/bicep/overview), it's a domain-specific language for defining Azure resources. With .NET Aspire, you don't need to write Bicep by hand; instead, the provisioning APIs generate Bicep for you. When you publish your app, the generated Bicep is output alongside the manifest file. When you add an Azure Storage resource, the following Bicep is generated: + +:::code language="bicep" source="../../snippets/azure/AppHost/storage.module.bicep"::: + +The preceding Bicep is a module that provisions an Azure Storage account resource. Additionally, role assignments are created for the Azure resource in a separate module: + +:::code language="bicep" source="../../snippets/azure/AppHost/storage-roles.module.bicep"::: + +In addition to the storage account, it also provisions a blob container. + +The following role assignments are added to the storage account to grant your application access. For more information, see the [built-in Azure role-based access control (Azure RBAC) roles](/azure/role-based-access-control/built-in-roles#storage). + +| Role / ID | Description | +|------|-------------| +| Storage Blob Data Contributor
`ba92f5b4-2d11-453d-a403-e96b0029c9fe` | Read, write, and delete Azure Storage containers and blobs. | +| Storage Table Data Contributor
`0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3` | Read, write, and delete Azure Storage tables and entities. | +| Storage Queue Data Contributor
`974c5e8b-45b9-4653-ba55-5f855dd0fb88` | Read, write, and delete Azure Storage queues and queue messages. | + +The generated Bicep is a starting point and is influenced by changes to the provisioning infrastructure in C#. If you make customizations directly to the Bicep file, they'll be overwritten, so make changes through the C# provisioning APIs to ensure they're reflected in the generated files. + +#### Customize provisioning infrastructure + +All .NET Aspire Azure resources are subclasses of the type. This type enables the customization of the generated Bicep by providing a fluent API to configure the Azure resources—using the API. For example, you can configure the `kind`, `sku`, `properties`, and more. The following example demonstrates how to customize the Azure Storage resource: + +:::code language="csharp" source="../../snippets/azure/AppHost/Program.ConfigureStorageInfra.cs" id="configure"::: + +The preceding code: + +- Chains a call to the API: + - The `infra` parameter is an instance of the type. + - The provisionable resources are retrieved by calling the method. + - The single is retrieved. + - The is assigned to . + - The is assigned to a new with a `Name` of . + - A tag is added to the storage account with a key of `ExampleKey` and a value of `Example value`. + +There are many more configuration options available to customize the Azure Storage resource. For more information, see . + + diff --git a/docs/storage/includes/storage-connections.md b/docs/storage/includes/storage-connections.md new file mode 100644 index 0000000000..28f1d8db80 --- /dev/null +++ b/docs/storage/includes/storage-connections.md @@ -0,0 +1,53 @@ +--- +ms.topic: include +--- + +### Connect to an existing Azure Storage account + +You might have an existing Azure Storage account that you want to connect to. Instead of representing a new Azure Storage resource, you can add a connection string to the app host. To add a connection to an existing Azure Storage account, call the method: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var blobs = builder.AddConnectionString("blobs"); + +builder.AddProject("web") + .WithReference(blobs); + +// After adding all resources, run the app... +``` + +[!INCLUDE [connection-strings-alert](../../includes/connection-strings-alert.md)] + +The connection string is configured in the app host's configuration, typically under [User Secrets](/aspnet/core/security/app-secrets), under the `ConnectionStrings` section. The app host injects this connection string as an environment variable into all dependent resources, for example: + +```json +{ + "ConnectionStrings": { + "blobs": "https://{account_name}.blob.core.windows.net/" + } +} +``` + +The dependent resource can access the injected connection string by calling the method, and passing the connection name as the parameter, in this case `"blobs"`. The `GetConnectionString` API is shorthand for `IConfiguration.GetSection("ConnectionStrings")[name]`. + +### Connect to storage resources + +When the .NET Aspire app host runs, the storage resources can be accessed by external tools, such as the [Azure Storage Explorer](https://azure.microsoft.com/features/storage-explorer/). If your storage resource is running locally using Azurite, it will automatically be picked up by the Azure Storage Explorer. + +> [!NOTE] +> The Azure Storage Explorer discovers Azurite storage resources assuming the default ports are used. If you've [configured the Azurite container to use different ports](#configure-azurite-container-ports), you'll need to configure the Azure Storage Explorer to connect to the correct ports. + +To connect to the storage resource from Azure Storage Explorer, follow these steps: + +1. Run the .NET Aspire app host. +1. Open the Azure Storage Explorer. +1. View the **Explorer** pane. +1. Select the **Refresh all** link to refresh the list of storage accounts. +1. Expand the **Emulator & Attached** node. +1. Expand the **Storage Accounts** node. +1. You should see a storage account with your resource's name as a prefix: + + :::image type="content" source="../media/azure-storage-explorer.png" lightbox="../media/azure-storage-explorer.png" alt-text="Azure Storage Explorer: Azurite storage resource discovered."::: + +You're free to explore the storage account and its contents using the Azure Storage Explorer. For more information on using the Azure Storage Explorer, see [Get started with Storage Explorer](/azure/storage/storage-explorer/vs-azure-tools-storage-manage-with-storage-explorer). diff --git a/docs/storage/includes/storage-emulator.md b/docs/storage/includes/storage-emulator.md new file mode 100644 index 0000000000..3feb0dda0f --- /dev/null +++ b/docs/storage/includes/storage-emulator.md @@ -0,0 +1,112 @@ +--- +ms.topic: include +--- + +### Add Azure Storage emulator resource + +To add an Azure Storage emulator resource, chain a call on an `IResourceBuilder` to the API: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var storage = builder.AddAzureStorage("storage") + .RunAsEmulator(); + +// After adding all resources, run the app... +``` + +When you call `RunAsEmulator`, it configures your storage resources to run locally using an emulator. The emulator in this case is [Azurite](/azure/storage/common/storage-use-azurite). The Azurite open-source emulator provides a free local environment for testing your Azure Blob, Queue Storage, and Table Storage apps and it's a perfect companion to the .NET Aspire Azure hosting integration. Azurite isn't installed; instead, it's accessible to .NET Aspire as a container. When you add a container to the app host, as shown in the preceding example with the `mcr.microsoft.com/azure-storage/azurite` image, it creates and starts the container when the app host starts. For more information, see [Container resource lifecycle](../../fundamentals/app-host-overview.md#container-resource-lifecycle). + +#### Configure Azurite container + +There are various configurations available to container resources, for example, you can configure the container's ports, environment variables, [lifetime](../../fundamentals/app-host-overview.md#container-resource-lifetime), and more. + +##### Configure Azurite container ports + +By default, the Azurite container, when configured by .NET Aspire, exposes the following endpoints: + +| Endpoint | Container port | Host port | +|----------|----------------|-----------| +| `blob` | 10000 | dynamic | +| `queue` | 10001 | dynamic | +| `table` | 10002 | dynamic | + +The port that they're listening on is dynamic by default. When the container starts, the ports are mapped to a random port on the host machine. To configure the endpoint ports, chain calls on the container resource builder provided by the `RunAsEmulator` method as shown in the following example: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var storage = builder.AddAzureStorage("storage").RunAsEmulator( + azurite => + { + azurite.WithBlobPort(27000) + .WithQueuePort(27001) + .WithTablePort(27002); + }); + +// After adding all resources, run the app... +``` + +The preceding code configures the Azurite container's existing `blob`, `queue`, and `table` endpoints to listen on ports `27000`, `27001`, and `27002`, respectively. The Azurite container's ports are mapped to the host ports as shown in the following table: + +| Endpoint name | Port mapping (`container:host`) | +|---------------|---------------------------------| +| `blob` | `10000:27000` | +| `queue` | `10001:27001` | +| `table` | `10002:27002` | + +##### Configure Azurite container with persistent lifetime + +To configure the Azurite container with a persistent lifetime, call the method on the Azurite container resource and pass : + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var storage = builder.AddAzureStorage("storage").RunAsEmulator( + azurite => + { + azurite.WithLifetime(ContainerLifetime.Persistent); + }); + +// After adding all resources, run the app... +``` + +For more information, see [Container resource lifetime](../../fundamentals/app-host-overview.md#container-resource-lifetime). + +##### Configure Azurite container with data volume + +To add a data volume to the Azure Storage emulator resource, call the method on the Azure Storage emulator resource: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var storage = builder.AddAzureStorage("storage").RunAsEmulator( + azurite => + { + azurite.WithDataVolume(); + }); + +// After adding all resources, run the app... +``` + +The data volume is used to persist the Azurite data outside the lifecycle of its container. The data volume is mounted at the `/data` path in the Azurite container and when a `name` parameter isn't provided, the name is formatted as `.azurite/{resource name}`. For more information on data volumes and details on why they're preferred over [bind mounts](#configure-azurite-container-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes). + +##### Configure Azurite container with data bind mount + +To add a data bind mount to the Azure Storage emulator resource, call the method: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var storage = builder.AddAzureStorage("storage").RunAsEmulator( + azurite => + { + azurite.WithDataBindMount("../Azurite/Data"); + }); + +// After adding all resources, run the app... +``` + +[!INCLUDE [data-bind-mount-vs-volumes](../../includes/data-bind-mount-vs-volumes.md)] + +Data bind mounts rely on the host machine's filesystem to persist the Azurite data across container restarts. The data bind mount is mounted at the `../Azurite/Data` path on the host machine relative to the app host directory () in the Azurite container. For more information on data bind mounts, see [Docker docs: Bind mounts](https://docs.docker.com/engine/storage/bind-mounts). From 3cbbfb34ddcd7ae4e74b7b3cbf3cd1b530a29fa3 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 9 Apr 2025 10:15:13 -0500 Subject: [PATCH 14/27] Add content on customizing resource URLs (#2940) * Fixes #2936 * Correct TOC * Minor tweaks * Apply suggestions from code review Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Damian Edwards * Apply suggestions from code review * Apply suggestions from code review * Apply suggestions from code review * Apply suggestions from code review --------- Co-authored-by: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Co-authored-by: Damian Edwards --- docs/fundamentals/custom-resource-urls.md | 83 ++++++++++++ .../custom-urls/custom-url-admin-portal.png | Bin 0 -> 39118 bytes .../media/custom-urls/custom-url-ordered.png | Bin 0 -> 35690 bytes .../custom-urls/custom-url-scalar-https.png | Bin 0 -> 37019 bytes .../AspireApp.Api/AspireApp.Api.csproj | 14 ++ .../AspireApp.Api/AspireApp.Api.http | 6 + .../AspireApp.Api/AspireApp.Api.sln | 30 +++++ .../custom-urls/AspireApp.Api/Program.cs | 120 ++++++++++++++++++ .../Properties/launchSettings.json | 23 ++++ .../appsettings.Development.json | 8 ++ .../AspireApp.Api/appsettings.json | 9 ++ .../AspireApp.AppHost.csproj | 21 +++ .../AspireApp.AppHost/Program.WithUrl.cs | 15 +++ .../Program.WithUrlForEndpoint.cs | 18 +++ .../AspireApp.AppHost/Program.WithUrls.cs | 29 +++++ .../custom-urls/AspireApp.AppHost/Program.cs | 10 ++ .../Properties/launchSettings.json | 29 +++++ .../appsettings.Development.json | 8 ++ .../AspireApp.AppHost/appsettings.json | 9 ++ docs/toc.yml | 11 +- 20 files changed, 440 insertions(+), 3 deletions(-) create mode 100644 docs/fundamentals/custom-resource-urls.md create mode 100644 docs/fundamentals/dashboard/media/custom-urls/custom-url-admin-portal.png create mode 100644 docs/fundamentals/dashboard/media/custom-urls/custom-url-ordered.png create mode 100644 docs/fundamentals/dashboard/media/custom-urls/custom-url-scalar-https.png create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.Api/AspireApp.Api.csproj create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.Api/AspireApp.Api.http create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.Api/AspireApp.Api.sln create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.Api/Program.cs create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.Api/Properties/launchSettings.json create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.Api/appsettings.Development.json create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.Api/appsettings.json create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/AspireApp.AppHost.csproj create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrl.cs create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrlForEndpoint.cs create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrls.cs create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.cs create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Properties/launchSettings.json create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/appsettings.Development.json create mode 100644 docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/appsettings.json diff --git a/docs/fundamentals/custom-resource-urls.md b/docs/fundamentals/custom-resource-urls.md new file mode 100644 index 0000000000..7cb6d58d0c --- /dev/null +++ b/docs/fundamentals/custom-resource-urls.md @@ -0,0 +1,83 @@ +--- +title: Define custom resource URLs +description: Learn how to create custom URLs for .NET Aspire resources. +ms.date: 04/08/2025 +ms.topic: how-to +--- + +# Define custom resource URLs + +In .NET Aspire, resources that expose endpoints only configure host and port, which aren't known until run time. If you need to access a specific path on one of these endpoints—especially from the [dashboard](dashboard/overview.md)—you can define custom resource URLs. You can also add custom URLs that aren't tied to any endpoint. All custom URLs are only available in "run" mode, since they're meant for dashboard use. This article demonstrates how to define custom URLs. + +## Default endpoint behavior + +By default, .NET Aspire project resources rely on existing configurations such as Kestrel or launch profiles to determine the host and port of a resource for a configured endpoint. + +Likewise, you can explicitly expose endpoints using the API. This API allows you to specify the host and port for a resource, which is then used to create the default URL for that resource. The default URL is typically in the format `http://:` or `https://:`, depending on the protocol used. To omit the host port, use one of the following methods: + +- +- + +For more information, see [Endpoint extension methods](networking-overview.md#endpoint-extension-methods). + +## Supported resource types + +Currently, custom resource URLs are supported for the following resource types: + +- +- +- + +## Customize resource URLs + +Use the appropriate `WithUrl` overload, `WithUrls`, or `WithUrlForEndpoint` APIs on any supported resource builder to define custom URLs for a resource. The following example demonstrates how to set a custom URL for a project resource: + +:::code source="snippets/custom-urls/AspireApp.AppHost/Program.WithUrl.cs" id="withurl"::: + +> [!TIP] +> There's an overload that accepts a `string` allowing you to pass any URL. This is useful for defining custom URLs that aren't directly related to the resource's endpoint. + +The preceding code assigns a project reference to the `api` variable, which is then used to create a custom URL for the `Admin Portal` route. The `WithUrl` method takes a and a display name as parameters. The resulting URL is available in the dashboard as shown in the following screenshot: + +:::image type="content" source="dashboard/media/custom-urls/custom-url-admin-portal.png" alt-text=".NET Aspire dashboard custom Admin Portal URL." lightbox="dashboard/media/custom-urls/custom-url-admin-portal.png"::: + +### Customize endpoint URL + + + +Both [Scalar](https://scalar.com/) and [Swagger](https://swagger.io/tools/swagger-ui/) are common API services that enhance the usability of endpoints. These services are accessed via URLs tied to declared endpoints. + +To customize the URL for the first associated resource endpoint, use the `WithUrlForEndpoint` method. + +If you want to add a separate URL (even for the same endpoint) you need to call the `WithUrl` overload that takes a `ReferenceExpression` or interpolated string, or call `WithUrls` and add the URL to the `Urls` list on the context. + +:::code source="snippets/custom-urls/AspireApp.AppHost/Program.WithUrlForEndpoint.cs" id="withurlforendpoint"::: + + + +The preceding example assumes that the `api` project resource has an `https` endpoint configured. The `WithUrlForEndpoint` method updates the `ResourceUrlAnnotation` associated with the endpoint. In this case, it assigns the display text to `Scalar (HTTPS)` and appends the `/scalar` path to the URL. + +When the resource is started, the URL is available in the dashboard as shown in the following screenshot: + +:::image type="content" source="dashboard/media/custom-urls/custom-url-scalar-https.png" alt-text=".NET Aspire dashboard with custom Scalar URL." lightbox="dashboard/media/custom-urls/custom-url-scalar-https.png"::: + +### Customize multiple resource URLs + + + +To customize multiple URLs for a resource, use the `WithUrls` method. This method allows you to specify multiple URLs for a resource, each with its own display text. The following example demonstrates how to set multiple URLs for a project resource: + +:::code source="snippets/custom-urls/AspireApp.AppHost/Program.WithUrls.cs" id="withurls"::: + +The preceding code iterates through the URLs defined for the `api` project resource and assigns a display text and order to each URL. The resulting URLs are available in the dashboard as shown in the following screenshot: + +:::image type="content" source="dashboard/media/custom-urls/custom-url-ordered.png" alt-text=".NET Aspire dashboard custom ordered and named URLs."::: + +## URL customization lifecycle + +URL customization callbacks run during the application model lifecycle, specifically during the event processing. URLs associated with endpoints become active and appear on the dashboard once the endpoint itself becomes active. URLs not associated with endpoints become active only when the resource enters the "Running" state. This ensures that all custom URLs are accurately represented and available when the application resources are fully operational. + +## See also + +- [.NET Aspire dashboard overview](./overview.md) +- [.NET Aspire app host](../app-host.md) diff --git a/docs/fundamentals/dashboard/media/custom-urls/custom-url-admin-portal.png b/docs/fundamentals/dashboard/media/custom-urls/custom-url-admin-portal.png new file mode 100644 index 0000000000000000000000000000000000000000..82b095a149c7bd8ed5453ec6da355cf45c19adf3 GIT binary patch literal 39118 zcmb@tcT`hN*9VG^1w{~1=}qY!0qIRdz<_i@FG}yd1_GiYN|n%*E*(OMv`_;o0@9_| zfb*C>&9dl6nqvAC1x|dgjo7b>zVhZ^iUGKEeh0SwE#{ zl{}6_)1L|qSS%CGS-MqKLj3=>Vi+;j|K~%qoRX3kCV zy`Qh&Y}5sV6Y1#af*SPBJHKf3*q#T0`eTD}tbnBUZ-*Sgy1KXTT|4hUb4MdXrf9SA zPy-NK5s)im{_VSL;N#;%=Sf&IGUB7MKwdt-AC6ciTm->df8+W$_;75T@KkgYj^g@=et7>b~iKGqvsA{nB@gP z7agHj;@jEUQK%ivi&8FHA?F5uwm7!^qIGIBnV<;equ-v;o#SLVQ^qq9eg!=f{+N)G zQoOe29P1Tze>PrIPFq1iLB6!q4r@~Dnb-U6T6}x%_V)ITrEc2_+pZ5DQ*Ssf)@9EV z;GNbk*HuhU5pIQphv9C|uM3=w`9fuEY%KlC%?;d0WQgX4cUG6*X+NKpN{Wl?D{%5^ z+YlYKa_jb6AD?m@dW0Bw z&`c!SSX+<2O8fr(@%m)#PFmwq=r?&TuI1AzL%v4y@Y|>NLhGJC`ox!{Z&acmC}HV> z)wX0fT@H`e^H}6JD&jd;ex=Z(x4g)P?X*oH%kNhYJ44)diG@&~>3|7j8(t3}BN%JKa2dd~3r#RaI3y z+}wRzb8U$*m?gPa@NWHdfQyUHA(aUrqN=+3P>E4RB?RvX(os+d1U9*n!YLvORko1C0?uvOJoHs7qIKRyu7iClq#1mUnUgaa6<|T3H42h0j znBr^+LZ+7uMnft189dLymDnJVxV-(N|MS zn2+6yk;&7X{mc;tmANS$bf8ZWnL8h14cHtE@@K!jq?GwaeeYdvefb?Xn4VD%aM{D_ z0Z}96ne=jtrRB4xsp<65on%vm5l__Bt4=qHKn+{8o}Qj-V7iQAVFtKr6wmvqCu(XH z#DdB-)_T(t!l*@HEms@7r}1KJPJzL0B_<6Y@7)b~wTXlQT0zPWfvrtXEKbeK5z$kmlf_CnN_e47I1Ha<5c|8L!dt z7cG8~T1Un`kTLfPq8L4sl}4*!UwEpD^PRXkfqsPg&Yc>>$^A#+FJJx>sAc(@eM92P z?b5G3wR`)$Ap-4QniM(L&=d(Yl&lL23$7!}H02U+9$)N!aZQ!wTPZ9`_0|Y;q;-`s zC0?`7(bYvu&8dPoLV{vu71@W@MzC!ll%Sh4ZjIz{Gv^W zrDZl0ni;hHZbDM|a%)E-@A^^{(RW=#%LgxamET**jQAW1Dh3BP0yY7i_?+t2IL0); zHd>a`e3UNj$HULx-3T3hD0=thEqVD6Ox#hqu}#^ryc4`cKXSdTpMV@HzLrm~=d>Sb zjEF8bOtGmNU!*@Zr))Gn2@Y*Mkua}VYi%ci>1{cbPHB}5uOr^GsW*Cjgh|!AuRcOI z92W9uR*Qxrkp{;rs*IBoW-zb^Z;mfg7xeXn)<<d;hz87;T@4#mzlmsAD*OKv((Dn4=&E*X6dae1Rp3)C&`tLzOXfgwRlhE z)t#HUKR-<1jt*@)QfF2=+!xl5pY%=(8RcAb0&m$wJJRQ7{j_KIsk1#>X^s68$vdSJ zZUI(-yneerZPvnL^i9%lIMXqm^jMLXWbL&tTSt>R&1~NGxwUNVw;s`o*rs`9emI%k z$zo&kPbgK-C~;^HKG;g&fimwkW^lY7QArvu*u`voX>v3rxXdB zTuUU~r_q|YlsmhuEvRGD%st+)8@oNHWd}OAS6e9zcUMNu5fekco+G+ECpxg~!~~Dj zdU!%Li`m?(+;NQNO3LT^O5ZhfzAxXutl2wwz(}mOzQ{Ac-+@Ch6e$gg=keaX z%&~?IqKeEzXuhjL z7`*cy8-;u0=7}9$9rWONRfw{B#Mk;E$DwEs&BFsLybdf0V-G(r zq42uhy4(OJ;c8}EA}=jn-z>VZNT0~5Y!M&YRiMyLDReF6j+GPX^G>NFHqh<1w!+!( zr(iX&cz&)j!}QX6|HrRej|R9ztAhk1DH4A4o`@{YN<@=2p+e-N#LfJg@}m=TS$Tr% zMjZ-g$1EA`;~q$X{QL@^73wR#VheNZNNbyPt5{HOZWQ;{Y?G6QP3iiYRN(q`>32~gFT?kKYZAAMwt z*6+u}`ji)6Sr3?F634<*|VZc^f5SW~hz$GN4 zE$z3V2W)5qn;VPLVvt?J?uxqHb=5bdTO&KCCrKq#?UoM6D`mzdbfP>u2*pNyt2v{p z%E}*(Wj`#-z=?)@D9N~)WbF5k7)J+}gci%VJj6`>R=j_U<$n9L0W;D72xzLqZdoL) zj#&x3YV)jGx(*`gpU0XhhKl1-(vHTIm+Q5=zluqbYusyvPuQ_ze#D{-s49UeRgr6qAT5E$|U=%x-7xk ziCa88JgaFIKkMOX%j#bKZFdW#ojTgvJxG{jJl0tIC(Q4*qDe?dymz|ArK3M~+X9)* z4`;E7i?>+Wgi^a1c`Sf^isbrru$I;@y*%NY`+QurTjLXKfuG)HTI1tOTnbA1OHv1L zA&vej{QS}7G#8#s$iQ=%!<3iHGoR|IdA;IGN-@FQzQYlq3pp3Q1!7@V?RZi}4dpE$S=Isv~2c&9PRjLE7KBdFT z60WGUDPs0T#9}KhFiEWQ(q~15@b}xu)52TxuK+n$=Q!$eGGg_+n4pwpL~$dxwwjY};0H@l)K>ZG zo1#;J(|d~0Es9>uoF8uyKj#YHllN?wpX&E}^)b47+&yJ#`N-k0*ssoWQm#*ORR@RT zJ9bsea9v%2u&9jk$k5SEioKK1#zdp=H*9m{|Nze zT)vUcus(8$E!>>pM6;T*vK8fh)rX!1F<&?t;B-;R`^tu}%uHlu<%8;DVIbZE{>m#V zz!nxjQ{@dWz+NC`WivI2`gZr;mL;vNt!W$vN=!A=E4(g4Cv63_;c5O@4GBp?T-zmd%GUD%!cC0cS zhs6DGm>Pt`oWY!k?w&c9-TL5;{h?9lSaduk8z^(ZmyS&aZ-M%3y&c_|Fi+5+%_@r%(=Id^kD3pKP9V-@-3d|_O zCl$DJ0O@8?%6Aim*Azjy`T66oa)6EkO_@hWL5a!9PD?%MJc5GN;kq%q421`>T(vA5 z3T3y0R|n(2j}M1@FXR*AQ3uk1TgX}sO3vM)q9O$Z0#ROxe^3U_G8Em;7Amets4_^D z0B0EDU zdiyqJ4oJW%yD%tIt7Hd_G(^YjkEwz>^N{3W_+BUKh25|dro{E#pU94qt?2o5;403< z2%m8y$gbXY+-zeuN2{gRd{ON8TXQLutxquH82erl@!P<2dPx1q(ICkImvoS0$Mn`@ z+oiwSd)Rc}yn`N05f&Ck@KT;8HHew8texw=Yq`*oNci1+m30!q$;sJfCF0lizGazl zmOn;)w4$OS{aZSaga_`;{3smuNORHy7UewYvg56GVukkJ{Nsvs>b49vVUow=koSh{ zIV{#d!~q^+C?meNPQ5o4(zMp*;i8T)8Atlmw7m{V86eLr+0AB-8kr{oO*3kh)hFX) z^wHU~bf5_Re#I3RPG;RHr_KbqA)AdT8TQ8@ooJp(Q4wY)WQm{oz@xU$)aLSkxLLa@QCi}iIRP8of? zAw_X)N}9bob*Z!p1LbEVr=aeP99$3Lu zUP~H>W#S{YTzq_$26NwATX|Sn6-8{jv_PPD6DRD-T(c4*m|@e4;D;gdzqiZcT`1Yg zJ4U%X?Y~b2^R?4dt3Ic;C`nqhJ-(X-)^8$O@))D5-;_PB3zm^GQhc+gw(XS3>Y!)u z+!WmE6`yM(K28S{PoRcl52Dq_AaSQylY8_$rCla-5_yGdlLlTR0`PaS-a z-WYT<=hvMvo1>KCR}=~^ zKyY`u8`Z|=aRIz~4cKtix`hBnne?3T6i048(@)JV)0)lHskmP*8}bh8jh5gxHg0S* zgueu#?E`)PO{H42z^zDoD?-nPS$ah93=V!FPAj+s*kzSf+YJD0Sl-*3)3Cy5>*!?v zNt3Zyk<{*p=;$E;SX_G!a&#=##Yg@Dk_HF$@&Ffb7)F!G2GvG97fY4Cq|z#x6WU;9 z1!=GS*ierpE)Pa>NqXX5j0=;}!<~oj#mK6zExDWy4vAKp&Dp`Fv;zxSKo%qVj^2M@ z-Xzo(DzNIXKrBbTx-+N)Pl38E$I;Iv z)HbVSmURb`e_vTu!h(-%5OjBPvm$duLVnSRm$V zEF1cujxf=9haGeLq4QY|kF5nVFt|xYG#ZdViPzizJ)NVI_pjL4cox2Hv)A*Fy{8@&^b1nedQfPbsARbrgnS*?E>y@_AY#sPR zANlv?t>?HScjq-%JqT_$Nnd%?8pkRGfl0)q#~vw1(L8r?b={~YzCk;S9O^vD9lf@N zl4H>c6a|^ww{+^*-~^bCUAcq!H)OR>?=`D%yDuw|{5}nJ(J`Ug_HoH0Btf%&zkht0 zjIoG$j~D=)rkQf}plD5{K7W*i3L&IfM)06e;v z7eS@r0R9UQ1Pz_GJI5_Rga~(Ls3wx0#s_M#jPWQNo0#A*V^S6}OlJe$|KU9(o&$KG zrRT598h7pmNiYwOnjKH&oOymCqGwrmxz3SrqE}Q3=d(#fQ+Yl+1pHYN01SG-NXdRS zHqo=6EdSfBR{=Wj@8?UFlGZtxP4vGrE|FRPNHq8zmnE2-A?1d!ghrWm&d6FV zHcrk%$iJ_cMW6N(_Myz9(YWpM($7zdjpqMKy8Mrc+qqg^DE!|^haj>L{L=S9o5PHb z%BN=}nUQB}*709mg}FYw#D0Cr7Tai29th1W*0psx&DFwAcWiwt{%@xqAd4^g{vhy) zj!#EW5BQ#y^2a;kLVdx4-~Oeueo|%R86&oLcIG}<#YhtN%UUe8ot)qR`#Lx{m^=@zITg}Iy}im7D=4RKch3cyWB{k4G?J*4zv zPZh&&fPs;YiHWYT0K^U%&~)L#1*t%SGje0jX{qkb1$p%qIiI9o4`#_h8<*YCja60|9rj#JO>0%lku6H zGaPcLDAq{rT^UypysveSLN_6S@Onz>_b2lj*8UORzYDYGS*_U3#Xs{ZXAw&r3Fte4 zQNSaxakWS#Px8DLAi>BcT-AFU=aI;`Dp9bSU^JmhasUaSe)HuCyI_bK{U$r#UyUqZ zFAY5M>Jn;W$V9fi3e&8fk_s5tzbtHcZpEJy{;5-i6b8oz^R;*f2Kx;ko`d z;N$woe>H|PH#JTBL%A0h^H>0ZPfws6nQF1dNBrOcDZj}Fq|NmmykIq-M}3vPUlgrP zc{rOOI(?vJO<~bLj>&B6x_W@5QVhMTl7{JBZQZ{D{zR7OI~7b!_|sX`xPQ{o(RpCo zMN_bY9YGpsYsbkxkQ_M_>5-U=BG;Ega*gThWT~krtpE;6)Hb2L(Py|8va-%lfT;Po zIKVHZ_c8m&TY~ProYs9;*}oFM(lZd`Hfw8(qRm<8Oy(63(9o3I&+X{w&;x_>YHB1v z{o4zj0Be~Iuw!5_7{7NC_2+S~(tBUsY9F@BEzH$|c{>>DQCG-Hk2ofL{iIhFEl@z$ zw2q7TP#cN+g5ZwGyi;^D+^n7stASn4;D@+i=v*X6_jOtA1p2clV2SsIbe_kEJGkgs zVYnHO%MFov@(BKn&8*jfA_*Q|FD+YRbbj1#3wuz!(RB@478to5(xi~bG||uZvlShg zc(XrvaoObd1Cfbl+&+EP?$)KTf{{c={Db6R0j8zzTt4`UgOLy>yTcwj&E;1%;>$CB z(sCTO8!Q-+HUh@pMod9~7adA(_zaLZQ zql55WLc@EZXc{6pzxE$jWo6uKkefRPDo#GXN6iIG3NbIPs^$_hSYDM^KWQ?|`f-0r zqyXND(TrB@yWK0OyPA8mx;gaT^9WGS&j{?I!&K`j!b09;%~l^qMSW6F^*yYXHh!MD z@Jn1=#5>KOciPt@_kMhgteTCJPP|F6Y^$g9EbGy?Htrczi|U8?;#nV~x>LUl%dnH1 zMVC{>96cJEcd2NyBbDo(Myd{Z1)LTqbWVmeZHvo|G_96dg{3t0`8ZV2;#^zn0-O2D+Rrlv;V;(N}_ARP}64}i1o zJHTTPpRpU*Yb<&fxM0XQBX)2b3M&y7wvGo%nb>XvKX@IvKGCnEU5~Mex_K1}GtITv z)rz+qh%U1)Tai!Y!qcWYM^>74@A#xqS3Sg<8|CJ@lh3?nJ-x49yKCff1SwrS{kjDX zda3W+In>Zu=Rr=+vT0V(Z3H60Zt(xZnwWrBaf$8f?{fD0sxI#@V-Ptj`jIi=+9dM(>;K4neYZmagZ`i$D@S9YU1g^eEG~Z&qf&ri>=P5>IP-oQ<9@A zcm}Vovdx&o4g))$Ds0yT)c16XW)^!ni`lf^Fm*F!))eZ#23>ITPNykqY4W)ST8$}Q z9^0>b{_T?bhx-cRxk&xK=~af(Yub+%y^QB;tj1qOKImLw56aP4>lx_}Km|Spy4_yH zAPYvQ9YPkWJuwtdKWwHpx&r@uh3BelC8E zcigV`tBDv&4F=eQ3@wMRI^9(v zNHuWHQf0FrU7?3p=FjUf(;&A~x&PQgmTsvmQ4fC9e!S6by3w^;9FlAb#ScNtGfHFR zLpU`9kQ@5y)H``6M&xY_UXzD&UtdPRu7e&H>MZ6~GQM8r^e}KpbI6`WG8Nnm2@i-? zsahDzh1jxvaTd4%=}uZdpqCH}o?rIc|oo2kfM zp0C_&4ujYHOsvo*xkr>j9fnPh%3_v62x-ElKBGMFtwI!EN>LuObeCj}l4e2j>i7I= z1{6`G-qF$J{x*~VFZ%HCKT3OX;<=KStm?R_)Xx}`$VT*H;~rP-`^W6q+M)Jz4TloG zAt&BNCwyBeYaE1StZX$``_RJY256iT+n0T;8vGf0Qo}3E#-GSWhWGPR7gyr{i39Zv z-LN<+vwC7FQFg422^lhkexS0Fr}htM&|ybxv<40F)a|;S>%*hzX+LaE=X5|5hz>?t5u4&+6nvjk~z7-^m>Kn zC(!@A#lt3g5!` zZ{7y!?0I9LPL(`UK^CfwV1w7As0)F4A6&V<>@U|9RWFa%nAFKO9c>0y?Kf9JQA{sk z3fX0lCf_D-)=;eylX+LcYH=syjb0|5l})MI8EH=M)vw&^f*UF-j-k0^FtHDslA;gD z)4U7B8hKK5t1~RRPacG!WXnDgg9W)&V?0QWHI{#-GCIB-ht_FwuEHoCj%bx* z`oE(r0`a?lqZst!`0XzPHD!tVrlzI^vZ|!5`eqX-mz|ECKoNnFtyh~on^}iU>^e31 z(?0OhpGy!Cw`vU_K(3!n?s(cU$RPQe9hM#Mrq^=llxQ$ejkQbL`YJVL(Rh%rvk<@s&WE4Vno!P764MI)v}8&1xfQ%`=CHqWDVv+4BVp>Asx zF*S*v^|qx;gKL}yGtW?Pl#TjLxj_5=F+8wa8UR5=@`M|He!o;8#T(9)GVkA7%abd;>$k3*4ce+>nKyx+ zf_(%O85RJLf-sUhL-X#IaB~yU~NQp zWfF%*;8R<678!o}Z!)A&EmKi}8yB6@QcDlR9Ximxjyp~4wN1mRabsJe5ZpT!MxXV6 zHkb=PgFvds)zJsPn^4%Wk~>OuPdzYH#buvRCb2Tdh@EETumXZ}H`-T~Qw+kyDC%4| z;9-U_fYvkkMKyT{o}78R5K2l)5DW;<)+kvwzPGe+|Ba-qGfS5yUbz8qb?;1@B%36) z!4aEI@e$m&el6Q)wX0g^$CGGJ34=p&)c8NYplDK6wiN*QAm#EyZ$;sJ#c>(pMc|eqx zmz!(9zrEnv4D-PbI{+aJ%sI4upWT#I5Ozn%?BmCe8uHZ|bw6x2s-?Wfshuvlf7;m| zHmQYdezD{iqa|b6*3-`{-Gb#BQ_3@a`slQ(h+ZITcNk~=okvR zP-P8Jyz1!fk{V*?rql8|!=Zur2aPDhF$$5yL(7k=n{?A+hi}EI%u@dY5!Fvk@9ghP zTyuGHDz1KPpAK7({tVb2POAHG|9HHAEYBy;Si~h*9ED!}zQuwtH_RQQQ~hU{TJvm`{EZ zVUg;1@9!dhcE9X=_h0d_vB?t_7Oo81_jJM3fnj?3`uS>t=)tMwW1ynf00{qq5Qqyv z#gfe-?M}VbjJs<)h4EJHTZcu%Bh#t}zSY}P`;$Azj7UPq(hQI*$ujO1s3|Ki&jj$w z#x$MujR%iqcV4GtkJ(O;GaGMWHPA^y8RV-WQQ%aWMhjj2MDAXE&}T*eavsnS5@k@Z zmYFuNzMAlJWrm0BhW=+DrA7C%*CSj7omBGrtBRVB(|d_6?%sR%$&h@BvXk4HT&+Kw zdP!1q!pAtKijxHJ4BF<#-?nsI0#2THAGcUzey5U+Z^DjLPMkxjDvuk#26Z^_S)0Bz z)n9F8IsRV62};+1&iI?=>iVoU{=OOJEeltXEA%yg`0V?4*B}8E6*IYJE~TDLe7Q5^ z_n8wk^IE^~E82>cR45q8EO7m5f)0eWu@u=r6!5b$_!xq)XfofO4ru~(H(G#Q=`M4M zg$>v>CbG1yMqDVDi;-Nc34xjtP#vd@BkP(Wc%iLFTEgZl1Sa-tJfbgSsRt5sEnOg4 zF5~07l}%!%edG(p*~%p1Hj)^2r#3;+lTP&rkwsnuk!q&Cy}b>*Oc4fMgdS%LZis0Z zH;2Nct@4E@9;MADuiN3LLXE>x%M+YRlay6>JG-HRSKTm3`8AJVZDwDWH#=0OZKowU z8iGICR;bk=1fC{o4QC4=BHs%2a-SQ$dLmCQDNaGI_Oqd+N80AGK>Ehd52pQNRy_Rf zALq-_dh<0(85{YWvsO~jsalDx7478DJPOw{RF}UpiY;s9&3U{nO{o~g%08|;`nxQN zGI@A;E5ccTJ)=V0U!3N7I}m=Re}je2Ca7_-fQDK^hOQ|&9+(X*;F`kHAEN+v9kK46%>DJ z%xf|a-hu)Zm>V0vt(dN+L_=m`G|XqjRmn11<;-$s6=OL65nY(_fw<;}ADY!a!Uiui zvhHM!7+}!y^(w(v#u(Gs
)zVsQf3o9$%}`I89?y5~3#9 z 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 dB9Nj0tPl=U-bmfE=a + + + net9.0 + enable + enable + + + + + + + + diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.Api/AspireApp.Api.http b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/AspireApp.Api.http new file mode 100644 index 0000000000..0a7f89562e --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/AspireApp.Api.http @@ -0,0 +1,6 @@ +@AspireApp.Api_HostAddress = http://localhost:5020 + +GET {{AspireApp.Api_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.Api/AspireApp.Api.sln b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/AspireApp.Api.sln new file mode 100644 index 0000000000..0ad43994ec --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/AspireApp.Api.sln @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.35906.104 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AspireApp.Api", "AspireApp.Api.csproj", "{BB5FD48A-DA3C-4E2C-B01B-FF8FB922F4F5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AspireApp.AppHost", "..\AspireApp.AppHost\AspireApp.AppHost.csproj", "{DC5D0ECC-8CBC-4436-B1DC-3D2681DD4B50}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BB5FD48A-DA3C-4E2C-B01B-FF8FB922F4F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB5FD48A-DA3C-4E2C-B01B-FF8FB922F4F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB5FD48A-DA3C-4E2C-B01B-FF8FB922F4F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB5FD48A-DA3C-4E2C-B01B-FF8FB922F4F5}.Release|Any CPU.Build.0 = Release|Any CPU + {DC5D0ECC-8CBC-4436-B1DC-3D2681DD4B50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC5D0ECC-8CBC-4436-B1DC-3D2681DD4B50}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC5D0ECC-8CBC-4436-B1DC-3D2681DD4B50}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC5D0ECC-8CBC-4436-B1DC-3D2681DD4B50}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6D149486-7C78-4537-B183-314816378E9C} + EndGlobalSection +EndGlobal diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.Api/Program.cs b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/Program.cs new file mode 100644 index 0000000000..eeaf9e8127 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/Program.cs @@ -0,0 +1,120 @@ +using Scalar.AspNetCore; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.MapOpenApi(); + app.MapScalarApiReference(); +} + +app.UseHttpsRedirection(); + +var summaries = new[] +{ + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" +}; + +app.MapGet("/weatherforecast", () => +{ + var forecast = Enumerable.Range(1, 5).Select(index => + new WeatherForecast + ( + DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + Random.Shared.Next(-20, 55), + summaries[Random.Shared.Next(summaries.Length)] + )) + .ToArray(); + return forecast; +}) +.WithName("GetWeatherForecast"); + +app.MapGet("/admin", () => +{ + return Results.Content(""" + + + + + Admin Portal Login + + + + +

+ + + + """, "text/html"); +}); + +app.Run(); + +internal record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) +{ + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); +} diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.Api/Properties/launchSettings.json b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/Properties/launchSettings.json new file mode 100644 index 0000000000..c95429b944 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:5020", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "https://localhost:7233;http://localhost:5020", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.Api/appsettings.Development.json b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/appsettings.Development.json new file mode 100644 index 0000000000..0c208ae918 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.Api/appsettings.json b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/appsettings.json new file mode 100644 index 0000000000..10f68b8c8b --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.Api/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/AspireApp.AppHost.csproj new file mode 100644 index 0000000000..48cab46c70 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/AspireApp.AppHost.csproj @@ -0,0 +1,21 @@ + + + + + + Exe + net9.0 + enable + enable + 31d1f6cf-dfb5-4923-b92a-6c0e9e032f15 + + + + + + + + + + + diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrl.cs b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrl.cs new file mode 100644 index 0000000000..c059e8b7f0 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrl.cs @@ -0,0 +1,15 @@ +internal static partial class Program +{ + internal static void WithUrlExample(string[] args) + { + // + var builder = DistributedApplication.CreateBuilder(args); + + var api = builder.AddProject("api"); + + api.WithUrl($"{api.GetEndpoint("https")}/admin"), "Admin Portal"); + + builder.Build().Run(); + // + } +} diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrlForEndpoint.cs b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrlForEndpoint.cs new file mode 100644 index 0000000000..2653b40261 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrlForEndpoint.cs @@ -0,0 +1,18 @@ +internal static partial class Program +{ + internal static void WithUrlForEndpointExample(string[] args) + { + // + var builder = DistributedApplication.CreateBuilder(args); + + builder.AddProject("api") + .WithUrlForEndpoint("https", url => + { + url.DisplayText = "Scalar (HTTPS)"; + url.Url += "/scalar"; + }); + + builder.Build().Run(); + // + } +} diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrls.cs b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrls.cs new file mode 100644 index 0000000000..96ba21ae66 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.WithUrls.cs @@ -0,0 +1,29 @@ +internal static partial class Program +{ + internal static void WithUrlsExample(string[] args) + { + // + var builder = DistributedApplication.CreateBuilder(args); + + builder.AddProject("api") + .WithUrls(context => + { + foreach (var tuple in context.Urls + .Select(url => (Url: url, Uri: new Uri(url.Url))) + .OrderByDescending(_ => _.Uri.Scheme is "https") + .Select((pair, index) => (pair.Url, pair.Uri.Scheme, Index: index))) + { + var (url, scheme, index) = tuple; + + // Order HTTPS first. + var order = context.Urls.Count - 1 - index; + + url.DisplayText = $"{index + 1}. {scheme.ToUpper()}"; + url.DisplayOrder = order; + } + }); + + builder.Build().Run(); + // + } +} diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.cs b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.cs new file mode 100644 index 0000000000..f1ba2e6a61 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Program.cs @@ -0,0 +1,10 @@ +// Uncomment a single line to run the example + +// Admin Portal +WithUrlExample(args); + +// Ordered / Schemes +//WithUrlsExample(args); + +// Scalar (HTTPS) +//WithUrlForEndpointExample(args); diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Properties/launchSettings.json b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Properties/launchSettings.json new file mode 100644 index 0000000000..a3eefc2782 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/Properties/launchSettings.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:17101;http://localhost:15035", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21040", + "DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22015" + } + }, + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:15035", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19142", + "DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20239" + } + } + } +} diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/appsettings.Development.json b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/appsettings.Development.json new file mode 100644 index 0000000000..0c208ae918 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/appsettings.json b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/appsettings.json new file mode 100644 index 0000000000..31c092aa45 --- /dev/null +++ b/docs/fundamentals/snippets/custom-urls/AspireApp.AppHost/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "Aspire.Hosting.Dcp": "Warning" + } + } +} diff --git a/docs/toc.yml b/docs/toc.yml index f232fe6767..abac1406f2 100644 --- a/docs/toc.yml +++ b/docs/toc.yml @@ -53,9 +53,14 @@ items: - name: Add Dockerfiles to the app model href: app-host/withdockerfile.md displayName: dockerfile,docker - - name: Networking overview - displayName: inner loop,local networking - href: fundamentals/networking-overview.md + - name: Networking + items: + - name: Overview + displayName: inner loop,local networking,networking + href: fundamentals/networking-overview.md + - name: Define custom resource URLs + displayName: withurl,withurlforendpoint,withurls + href: fundamentals/custom-resource-urls.md - name: Eventing in .NET Aspire href: app-host/eventing.md - name: Use external parameters From bfc80b73c9c12772e83b9acd33a64b9d35ec4980 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 9 Apr 2025 21:24:30 -0500 Subject: [PATCH 15/27] Add CosmosDB parent-child relationship bits. (#2912) * Add CosmosDB parent-child relationship bits. Part of #2907 * A few fixes * Update docs/database/azure-cosmos-db-integration.md Co-authored-by: Safia Abdalla * Update docs/database/azure-cosmos-db-integration.md Co-authored-by: Safia Abdalla * A few updates based on feedback * Add a few more bits * Add more details about the web pubsub. * Apply suggestions from code review Co-authored-by: Safia Abdalla --------- Co-authored-by: Safia Abdalla --- ...-cosmos-db-entity-framework-integration.md | 10 +- docs/database/azure-cosmos-db-integration.md | 143 ++- docs/database/includes/cosmos-app-host.md | 42 +- .../cosmos-resource-relationships-thumb.png | Bin 0 -> 80532 bytes .../cosmos-resource-relationships.excalidraw | 1017 +++++++++++++++++ .../media/cosmos-resource-relationships.png | Bin 0 -> 386770 bytes .../azure-service-bus-integration.md | 11 +- .../messaging/azure-web-pubsub-integration.md | 16 +- 8 files changed, 1222 insertions(+), 17 deletions(-) create mode 100644 docs/database/includes/media/cosmos-resource-relationships-thumb.png create mode 100644 docs/database/includes/media/cosmos-resource-relationships.excalidraw create mode 100644 docs/database/includes/media/cosmos-resource-relationships.png diff --git a/docs/database/azure-cosmos-db-entity-framework-integration.md b/docs/database/azure-cosmos-db-entity-framework-integration.md index d6b18de7b7..d05181f287 100644 --- a/docs/database/azure-cosmos-db-entity-framework-integration.md +++ b/docs/database/azure-cosmos-db-entity-framework-integration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire Cosmos DB Entity Framework Core integration description: Learn how to install and configure the .NET Aspire Cosmos DB Entity Framework Core integration to connect to existing Cosmos DB instances or create new instances from .NET with the Azure Cosmos DB emulator. -ms.date: 02/26/2025 +ms.date: 04/01/2025 uid: dotnet/aspire/azure-cosmos-db-entity-framework-integration --- @@ -42,12 +42,18 @@ dotnet add package Aspire.Microsoft.EntityFrameworkCore.Cosmos ### Add Cosmos DB context -In the :::no-loc text="Program.cs"::: file of your client-consuming project, call the extension method to register a for use via the dependency injection container. The method takes a connection name parameter. +In the :::no-loc text="Program.cs"::: file of your client-consuming project, call the extension method to register a for use via the dependency injection container. The method takes a connection name parameter and a database name parameter. ```csharp builder.AddCosmosDbContext("cosmosdb", "databaseName"); ``` +Alternatively, the database name can be inferred from the connection when there's a single database in the connection string. In this case, you can omit the database name parameter: + +```csharp +builder.AddCosmosDbContext("cosmosdb"); +``` + > [!TIP] > The `connectionName` parameter must match the name used when adding the Cosmos DB resource in the app host project. In other words, when you call `AddAzureCosmosDB` and provide a name of `cosmosdb` that same name should be used when calling `AddCosmosDbContext`. For more information, see [Add Azure Cosmos DB resource](#add-azure-cosmos-db-resource). diff --git a/docs/database/azure-cosmos-db-integration.md b/docs/database/azure-cosmos-db-integration.md index db311bbdbf..743daf007b 100644 --- a/docs/database/azure-cosmos-db-integration.md +++ b/docs/database/azure-cosmos-db-integration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire Azure Cosmos DB integration description: Learn how to install and configure the .NET Aspire Azure Cosmos DB integration to connect to existing Cosmos DB instances or create new instances from .NET with the Azure Cosmos DB emulator. -ms.date: 02/26/2025 +ms.date: 04/01/2025 uid: dotnet/aspire/azure-cosmos-db-integration --- @@ -11,6 +11,8 @@ uid: dotnet/aspire/azure-cosmos-db-integration [Azure Cosmos DB](https://azure.microsoft.com/services/cosmos-db/) is a fully managed NoSQL database service for modern app development. The .NET Aspire Azure Cosmos DB integration enables you to connect to existing Cosmos DB instances or create new instances from .NET with the Azure Cosmos DB emulator. +If you're looking for the Entity Framework Core integration, see [.NET Aspire Cosmos DB Entity Framework Core integration](azure-cosmos-db-entity-framework-integration.md). + ## Hosting integration [!INCLUDE [cosmos-app-host](includes/cosmos-app-host.md)] @@ -51,7 +53,7 @@ builder.AddAzureCosmosClient(connectionName: "cosmos-db"); > [!TIP] > The `connectionName` parameter must match the name used when adding the Cosmos DB resource in the app host project. In other words, when you call `AddAzureCosmosDB` and provide a name of `cosmos-db` that same name should be used when calling `AddAzureCosmosClient`. For more information, see [Add Azure Cosmos DB resource](#add-azure-cosmos-db-resource). -You can then retrieve the instance using dependency injection. For example, to retrieve the connection from an example service: +You can then retrieve the instance using dependency injection. For example, to retrieve the client from an example service: ```csharp public class ExampleService(CosmosClient client) @@ -87,6 +89,142 @@ public class ExampleService( For more information on keyed services, see [.NET dependency injection: Keyed services](/dotnet/core/extensions/dependency-injection#keyed-services). +### Add Azure Cosmos DB database + + + +In the app host, the database resource () can be added as a child resource to the parent . In your client-consuming project, you can deep-link to the database resource by name, registering a instance for use with dependency injection. For example, consider the following code that calls `AddAzureCosmosDatabase` on an instance: + +```csharp +builder.AddAzureCosmosDatabase(connectionName: "customers"); +``` + + + +The `AddAzureCosmosDatabase` API returns a `CosmosDatabaseBuilder` instance that you can use to attach multiple containers under the same database connection. All child containers share the same and database connection and `CosmosClient` instance. This strategy is useful when associating the same with multiple containers. + +After calling `AddAzureCosmosDatabase`, you can then retrieve the `Database` instance using dependency injection. For example, to retrieve the database from a delegate in a call consider the following code: + +```csharp +app.MapGet("/api/customers", async (Database database) => +{ + // Query data from database... +}); +``` + +### Add keyed Azure Cosmos DB database + + + +There's also an `AddKeyedAzureCosmosDatabase` API that returns a `CosmosDatabaseBuilder` instance that you can use to attach multiple containers under the same database connection. method that allows you to register multiple databases with different connection names. For example, consider the following code that calls `AddKeyedAzureCosmosDatabase` on an instance: + +```csharp +var builder = WebApplication.CreateBuilder(args); + +builder.AddKeyedAzureCosmosDatabase("customers"); +builder.AddKeyedAzureCosmosDatabase("orders"); + +var app = builder.Build(); + +app.MapGet("/api/customers", async ( + [FromKeyedServices("customers")] Database database) => +{ + // Get container from database and query data +}); + +app.MapPost("/api/orders", async ( + [FromKeyedServices("orders")] Database database, + [FromBody] OrderRequest order) => +{ + // Get container from database and query data +}); + +app.Run(); +``` + +The preceding example code demonstrates how to register two databases, `details` and `customers`. Each named database can be used to get their corresponding containers to query data. + +### Add Azure Cosmos DB container + + + +When you add a Cosmos DB resource in the app host project, you can also add an Azure Cosmos DB container resource as well. The container resource is considered a child resource to the parent . In your client-consuming project, you can deep-link to the container resource by name, registering a instance for use with dependency injection. For example, consider the following code that calls `AddAzureCosmosContainer` on an instance: + +```csharp +builder.AddAzureCosmosContainer(connectionName: "details"); +``` + +You can then retrieve the `Container` instance using dependency injection. For example, to retrieve the container from a delegate in a call consider the following code: + +```csharp +app.MapGet("/api/orders/{id:guid}", async ( + Container container, + [FromRoute] Guid id) => +{ + // Query data from container... +}); +``` + +### Add keyed Azure Cosmos DB container + + + +There's also an `AddKeyedAzureCosmosContainer` method that allows you to register multiple containers with different connection names. For example, consider the following code that calls `AddKeyedAzureCosmosContainer` on an instance: + +```csharp +var builder = WebApplication.CreateBuilder(args); + +builder.AddKeyedAzureCosmosContainer("customers"); + +var app = builder.Build(); + +app.MapGet("/api/customers", async ( + [FromKeyedServices("customers")] Container container) => +{ + // Query data from container... +}); + +app.Run(); +``` + +If you have multiple containers under the same database connection, you can use the `AddAzureCosmosDatabase` API to attach multiple containers under the same database connection. All child containers share the same and database connection. This strategy is useful when associating the same with multiple containers. Consider the following alternative code, to register multiple containers under the same database connection: + +```csharp +var builder = WebApplication.CreateBuilder(args); + +builder.AddAzureCosmosDatabase("customers", configureClientOptions: options => + { + options.SerializerOptions = new CosmosSerializationOptions() + { + PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase + }; + }) + .AddKeyedContainer(name: "profiles"); + +builder.AddAzureCosmosDatabase(connectionName: "orders") + .AddKeyedContainer(name: "details") + .AddKeyedContainer(name: "history"); + +var app = builder.Build(); + +app.MapGet("/api/customers", async ( + [FromKeyedServices("profiles")] Container container) => +{ + // Query data from container +}); + +app.MapGet("/api/orders", async ( + [FromKeyedServices("details")] Container container, + [FromKeyedServices("history")] Container container) => +{ + // Query data from container +}); + +app.Run(); +``` + +The preceding example code demonstrates how to register two databases, `customers` and `orders`, each with their own containers. The `customers` database has a single container named `profiles`, while the `orders` database has two containers named `details` and `history`. Each container can be queried individually using its respective key. + ### Configuration The .NET Aspire Azure Cosmos DB integration provides multiple options to configure the connection based on the requirements and conventions of your project. @@ -201,6 +339,7 @@ The .NET Aspire Azure Cosmos DB integration currently doesn't support metrics by ## See also - [Azure Cosmos DB](https://azure.microsoft.com/services/cosmos-db) +- [Sample repository showing parent-child relationships](https://github.com/captainsafia/aspire-child-resources) - [.NET Aspire Cosmos DB Entity Framework Core integration](azure-cosmos-db-entity-framework-integration.md) - [.NET Aspire integrations overview](../fundamentals/integrations-overview.md) - [.NET Aspire Azure integrations overview](../azure/integrations-overview.md) diff --git a/docs/database/includes/cosmos-app-host.md b/docs/database/includes/cosmos-app-host.md index add1c9db68..268ffff328 100644 --- a/docs/database/includes/cosmos-app-host.md +++ b/docs/database/includes/cosmos-app-host.md @@ -5,6 +5,8 @@ ms.topic: include The .NET Aspire [Azure Cosmos DB](https://azure.microsoft.com/services/cosmos-db/) hosting integration models the various Cosmos DB resources as the following types: - : Represents an Azure Cosmos DB resource. +- : Represents an Azure Cosmos DB container resource. +- : Represents an Azure Cosmos DB database resource. - : Represents an Azure Cosmos DB emulator resource. To access these types and APIs for expressing them, add the [📦 Aspire.Hosting.Azure.CosmosDB](https://www.nuget.org/packages/Aspire.Hosting.Azure.CosmosDB) NuGet package in the [app host](xref:dotnet/aspire/app-host) project. @@ -103,13 +105,15 @@ The dependent resource can access the injected connection string by calling the ### Add Azure Cosmos DB database and container resources +.NET Aspire models parent child relationships between Azure Cosmos DB resources. For example, an Azure Cosmos DB account () can have multiple databases (), and each database can have multiple containers (). When you add a database or container resource, you do so on a parent resource. + To add an Azure Cosmos DB database resource, call the method on an `IResourceBuilder` instance: ```csharp var builder = DistributedApplication.CreateBuilder(args); var cosmos = builder.AddAzureCosmosDB("cosmos-db"); -cosmos.AddCosmosDatabase("db"); +var db = cosmos.AddCosmosDatabase("db"); // After adding all resources, run the app... ``` @@ -125,14 +129,44 @@ var builder = DistributedApplication.CreateBuilder(args); var cosmos = builder.AddAzureCosmosDB("cosmos-db"); var db = cosmos.AddCosmosDatabase("db"); -db.AddContainer("entries", "/id"); +var container = db.AddContainer("entries", "/id"); // After adding all resources, run the app... ``` -The container is created in the database that's represented by the `AzureCosmosDBDatabaseResource` that you added earlier. +The container is created in the database that's represented by the `AzureCosmosDBDatabaseResource` that you added earlier. For more information, see [Databases, containers, and items in Azure Cosmos DB](/azure/cosmos-db/resource-model). + +#### Parent child resource relationship example + +To better understand the parent-child relationship between Azure Cosmos DB resources, consider the following example, which demonstrates adding an Azure Cosmos DB resource along with a database and container: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var cosmos = builder.AddAzureCosmosDB("cosmos"); + +var customers = cosmos.AddCosmosDatabase("customers"); +var profiles = customers.AddContainer("profiles", "/id"); + +var orders = cosmos.AddCosmosDatabase("orders"); +var details = orders.AddContainer("details", "/id"); +var history = orders.AddContainer("history", "/id"); + +builder.AddProject("api") + .WithReference(profiles) + .WithReference(details) + .WithReference(history); + +builder.Build().Run(); +``` + +The preceding code adds an Azure Cosmos DB resource named `cosmos` with two databases: `customers` and `orders`. The `customers` database has a single container named `profiles`, while the `orders` database has two containers: `details` and `history`. The partition key for each container is `/id`. + +The following diagram illustrates the parent child relationship between the Azure Cosmos DB resources: + +:::image type="content" source="media/cosmos-resource-relationships-thumb.png" alt-text="A diagram depicting Azure Cosmos DB resource parent child relationships." lightbox="media/cosmos-resource-relationships.png"::: -For more information, see [Databases, containers, and items in Azure Cosmos DB](/azure/cosmos-db/resource-model). +When your app host code expresses parent-child relationships, the client can deep-link to these resources by name. For example, the `customers` database can be referenced by name in the client project, registering a instance that connects to the `customers` database. The same applies to named containers, for example, the `details` container can be referenced by name in the client project, registering a instance that connects to the `details` container. ### Add Azure Cosmos DB emulator resource diff --git a/docs/database/includes/media/cosmos-resource-relationships-thumb.png b/docs/database/includes/media/cosmos-resource-relationships-thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3a547fa1fa623654be0f1d22899386086bb279e8 GIT binary patch literal 80532 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

gX{kjIR_qu@>4J_j zZ`GHW+j(&u4MPddj*9PZlyj`0d}||>94a}~5YsRc<;QyaF@tvpUtecSX9m&oE8r`- zyP-aWvzZfIe>`eAiPdapK50${L=}7Wn1TXVv)u+a3dG(q!pF==^up0R(cIjzwy@ub zA-|G=4zS&CckRN4|2YHUIUxG%LKEHqKI)%>++m2kqp(I@J5%9n|m;%~xq#<|m3c7J+hPt%3`VeFvr+WyZ2^ zWM$t6({ec-WpXqqZoG0{ys1{s7@p6llI-QJ5ZbAFVlS@r3JiRs=}rAOnm8+RQ8M^) z*y_P-yU1X=_-mu4cMu`@#ir$w(;=zTSOJz%iZNL?u~)w^Bq={&cVaa(Oz53&;f|U$ zmw&hb|8clq2rUr361Tnl!~7qCf0hs*OVKdAn!-R3cr5I7bwD{wJ}NU~WPcN<G>htK0in5`qz#96bCbfjqN7#rpf3e>IstKj1+vKGWk-dOv!X;=H zvu51)KRN2HT=aU4&Hp>N@=2h~6+9ae6Wb-y(&zk)?bp@x;idKfiS!FF106R2wh{-@ z^TPpl7<$ujPDlqqm&&rHJsZk?xDYlk##L(YJfWp&IZRph&70cno3iF8VKAW=;u_}O zRgi~P59_kaSsqQa+R2@_=g**5@LCvQb`@AHJJ;@tgn~24G9IXx<*QJ?HVle*G zF2mz_LxWD6>sV1b$j$WKua3Z^J6p9Q($`gbQs|iwM2|&Pg`UXyd!Xk&^=ZfkgPuc` zw&NZmvgk$%E7EBo+Qo5VKOM(FIAb)9pf=$uRDD{Jib9QpaBNAOOpY>X`;2?#hR5(# z5S^^Bk;d1r(#$UnMpf{Q0>6iKyoC74oi=#BhfwBkH`~>B*nPqhrC=_$Xps_=?f|%= z?U}yEGdH+7KY}AgHfb(4UI4chfqtK`O8HX}rN51iUM)8YFIzY%Ip7IK6(di8nNe8j z$GOyWg|C^kryp1vkH>7Vbd6KS#H1+Fc&ciL_F)+uzIGe-r8aUy(qu~I z!`hl`|7cCW>fXqEB0=BmHEzqe?^Z=*ttQv_apFeSzF=oZT(qK)CAPuybpSB~;Bg~bvb;hN-#xQGFcT|bd_N^aE@yJhE53%fq-ry*x2_QH_6>SNm=i>IKM+vqW07FI>ZXS(&Jz10+6v{oQV>B?i%i!{2IPu$A}Ohnj#CY8uxI(?c# zi)jWi6!m#;8@!Z4`~cUE#$Yg`{UAnr#?f7|#bHH6rpGgSdV;(J(icrbly%Pej`y&yzgF*R=Sdo;@hcbk5CG7g#FX~8+Up{Q zeFXR#t)Ukg>_3)qX%J+FUO)9yi@NtnhLHkTZp8n}`bK8%eFRIW%$tSJ58X}Wljwoj zrid>s*bTa5jkzC!@cp zJ#|QXu^M=I01o@!k89{~#xmM>qg?QK4*S~05RWYk&?dw|O`Y&^D!#}}|Gx7Go!l-R4o_ZGXuP#-0ymu0vW-& z-94^6V@U)Z9Ba(vB359AY-gSYZZr3Vuw)ClEg36I`3@W#_pa~u@??-<}Nnj7W@u#5fpyA&5KfImQ9&Sn2X-usL3eOZ^dz!eJ650f{E zFQ~u&s5q<|cnqJ_O96WG9TI7)C=qCha;9Q%5eUp^DkZ>#bfHI@U?bDV?JKR~DEAXh zp?Y;&Va?m3y3zUTr@3=>J=;Rh5;-kX`%v%Mv&ylv=x%q*(sHpUB9@9P5A;lF^A6cY zf-y=8u^%hrRR4`bRFuSGiFDTu!W2p~2p{IW-eJ1PKm-Qaq3tL;hMmXEh`Kysxi$)eT6e}Ko%Ffr(ZT5Gl-ph^5uy{aL z_9^>&Ko1wJIsYbP_f4d8o9?ODnJeWJ3#l>M%tS)OS8NM;S?Ov4$=DL!4=>FIqIbzt zQ-{n_byYto;#;{p;Pv1q#OXsUdf8fWhvL}T-|uR2X1iuJy#rHGtpDh)=S^C#WmvHx z>W_`$yaFZkh>l@!OkPa^ud$Be+8pWy`iFZ;Kq&j!g2!SOe9Wx})dkWN>^|qtPzLe^ z7zD7NzJYzW>LZVEiVw`1Doz>(hAHx68$GuWtFw%sB!4E~DKxc+XNoN*^dBYut5z>9 zLid)|H;letPSpG8xZboMI`T77W5>}#^nY%N71@vMs+_tsfRvz z`YmJ;lj8?Tw_S5NaNm z@!*gE&*vG4ub10^N(9)LWZ{yz98t63g_n(Eu#IV{m)g_2OO<=^x<( z(J`Ck9|!*B%9moc_`HW!ea<66rRZ-g{c+VNX&qS(NMYGY!dO@7gm4+MJ-QnT4p{-2 z;u4;&dFeujsDS6ucjbCBx!9A3KUphIbY*_Y6KR*6yvF+=%(8XAjqC`B%BjqjCdHYS z4zH4}n1*v*ET4&yi!8Tky;wZ*oToY|K79!m>?gp}4@_;Mg-Whw_|A^B4@othPFkF9 zyM2SVP6QfeUpILftg)QV7=72mOja7tmG4@VzU5C({@-@5sjuw7c1qMT<%zO}!k3&q zQc6vX{In;nj_}9@77-B?{tHC3udF87> zr2zTZOHNSAZfNy+ODv{DJuUrA()OIeuf8w}eYc1nqW5yt`epDhp8?k(=Bn*fq8e{;rNa5b`IZNT^lkr(DOWDp$GMR*TTn1Ok+3A6KjjTHL zy}}2kN9*iYZttXO6kwaVr@m^DvjWe4pWiCfa z?8Nu01ngt`)h>s91Z$}sKRtYbqxVd8jI=j5_>pQ5Z{xep>sRnNZEwxL)@@J?h15MJ zdy5mpv6AkWe(?^uAx5BoRu2=Fzzdp{f8 zYK@YJv+n?l1a6jOw@@eShka2LKiZ-B+8-U2$jBh1r&?wGg&x|eDSnfjjN7lJ-T)S= zd??{m0p9LgV+&ro&P}F^MeS(kBn+eEj00{q+#cx5Ui92iQ9{i#x+1f$k!2CW-UqPx ze-P@Gc{}0j{`v6yQ>L?t;Z$_x?m?F6&mBhpV)T%of$r6xnmqSQfn`5D-CO_3&p+M! z(vaVWMBNo&ocJ0E+kP~FHVd8Hr*qCS1i*xcP!cd&Il?g^iY=f$9juDxuCa*or;Z5I ztZft8qTHL9nN$Qd4Ca>R&QQrnoL?gv-s{40e_&QbT zyrf>CB!0~GxkC0^FP}cwWajHmX0)^@UJXJ|pu1UBmXwn<-%I-NsfIcwYFTrI5j0Ux zW)eVO1wIHJu>nEl$l!6E^?;Qj`I$kSd9}L0KxP&gPTMvaN()ptXo!(|t2<}m7fH&C zcgr>ViK40lqwcot*=}yk|0MYNZ=icJ4I8BEmwPf7A$7bT@TcmX%`)_|^nbnI%a2^c|=^;xls6-2|w$qC|DOuUHIMsns?XcqqM`8vf| zpZmE^l|a$(Ej6XPHCgy1nJd&H&;!%Vv79U>)+ZP6&IipAdPKe7bA@pBT2WeFtuCrk`D_@lnR4#li6zs%bMKn zy$bRm4jvqMZIDPMm7}9d0WiEHz&49}0aluag&GWBB?UGTfcjJ;r*6bWr!UjUbK|R$ z=K)>?s$Yh#(u;~ciW#IZ1#FW6iFhbt39%lDNG7x3sh-f8=f8N-YP4Rge5Wrv_pjLZ zZx-Hv)$*4=Gg>dVDS6QtcuG1Axc6!jaY}>C%fCZ^dt7yZ{dIfH50w&jqb@G9B-XsR zg4|kd6+XS__1g0E@3;l@g>b`GfK>?l1STzfeRHZ@C4)ZBptwY5?CvKvW-=hMpWy*w zt#U7WbC@Dgr(`7}i~H0=^^R(a$WQx{d?#X3sLsgBJFN{&ET_V%ljM}2v^tW0+W#WD z#dp^&+3fO#Jr_nr8U;WzkuJ{PZe4`{w%1`lwqSK5BmS zG)`F5pf3HZlQ?qDcY?D2*7Zm zED9jo>sbeGEx84(lC59IZG2QP;Vi4#Bx;;{?xyOBHnx(} z^KUaZq6oj9oqr!7Rv*uLV|YctRh(&zWq%guK0^7KFnz%5^zCcnFP`1Pz!6s?DsDYKSYX%+x!=Sxb#`v2e?Z&t-Z)Z@cB0p-|NCEw@i~ntQstdH-pf}0S@#Lu9N1r7Wz^99BbHTf@3bVp1u!BQj1-ew0es?}dHb z6H(#0S`sZaHQF=MC%7p-Jm ztj3cf{{}Dqlt>CFJtMd@L4Ps~;j|DS1K9q3*>$fB0PQGuu$%<&dErUy@q2r7GMPt- znRV@vLA)oqSw zo_qK3Mc-oVFR1)3G<#P#dK&y9j;eNj{=P(}Jw%7__TYF@XYT8l<5t8h6Zy8);Zsd1 z&*uvKZ`!J=32=Q@DN2YL9KX7&`C-@dLuK~^45JaQ`q5~Rk|Io=@x)uN>RVx)IMGY3L5xg!u)ECdt# zUiFMD=VMKo$@DR$MN}NkVMhL_$f}QYEYD1j4uPSR&lKk83~3nO0MY! ztao$>yKg=3Xw+k}Shv`cOdap3b-kTkq%Lz*j70AJ3i)DZkLKZ0Q~8?fC3nQoZKV@n zN(d9O>XZFbEvg7i7OD5FK4M)KdJb^x?LI|L1wh9iqhAIQj!J53Qu(Mc`DiemYEp@h z4{hep7^fN^BX?-HyJocMsb8>DtL4+tv&wYWtdSAVzApVfyWH&UQ+B4VlgWBEo>t?h zn{(i&TM|uPxEWyc-R-8$_;f%b-c4I&-=cCcCcc;Eb@B5rAbW&ZI)Td5hk9((yDNzW zX5$Jk1hme_>Gg6pHS~hH3dnO);E#nQ>L$v9wG$i$n;9F|lH|k0Ch%8?u z%?=_SC5g6dhul6bH+(;PWRa|U>w5|=Jm+fC z)=@V&{ttU^85L#QwE^FvfQpEUfYOSBw9*YqgOo6Ih?I192}mg^0!l00-6bL2FvJXv zbPV0`og;WZ;_JKCyT0%H`P@J5B?H%7*Lj{hkA3WYxhE^Th}r)We^~e~)-*LrlNW4f zIcrDnydzX0ePmHT*{iU?`f0!dv_l4ZmDK!AQu9NCRu+XGJHwCy9_0nWo}!^12?T**a;Ud3Qe`c_Qf`QaCSSWqIeQu9}V!+2emTGr!z{f#! zC`GX&R1$*?+n68ZKZ?Cys=hTJ_)1^tb3ya>q#eas*`SBe{F6M^lc7hBmN(+fw`ZzV z60c$C^o_3TWj=y3yjre4Je=%d$fTr!zT5h)Tv8#jft%Tj{=R>)m6tW8>1E!tMI*Tm z4K`Gww2LJd()=tZM?S6i-HX=kYPyvs!RWHo zK`Ep>B@~pyT3TW2u?b~ED(c0H`3Xz3vx8%nt*&7x5*WG})KpMd?Te$*G7(F>%-#du z?19GW%z-iqT+~5TO0A8U$U zd@K?}=F;_p{6pS@V$UZAwJy6KdKio!(e>_2B*LWS(#GWR^p6n)o9!Q-Ij_y4(W(}S z>eM`>do~lAa#tQx`;(^qYpsL*QVuh3r)Bs9DcZ>X?kYGG;*v=-J-|@!3554nO`h6YhNuW+@IbQ_D9#XY=L+K&mE^KyLikRP6>J`J&lgJ}2RC-sk}l z=Za4vL;7#GYq*c-XnT_;8E`_w^tH@CAFC^5n1WZc5khEcXr?l|QcG*|)x-H> zEzRZ`G5j$c@$VBY!6kgDWb<#i=7%{VscXzmPax_ycH13h$l3OOhJAGgOyPs)61 zgMUlRkh#DrXxH?z?cY2)Nn#r4x1Mg`iPnqez>z9JETDv zu#`cgqeCg}OSY;Pc6)ay%+-<2vjAZLN!=VJpC7s3e5@Yv?dGfq?4C+lLRNvW2?{|H z<a1H!So+{0-8m(6v%4ZNMm1rD|IRV5cNIBjAeRB!Zj%eBM!G(T?|=WZe-dZZqv zU9NxN5QZC&8v2k(U7Ukj3P#1*&E56$g&J>SLHxI?U-+5&ytw_u1o_f{&q;7VojaXl z^ULC_f*C!SB(yBDr&%uPMO2oLq8RU36uNe+>?~0+XUiV=MpvM+EQoM?EwXwZQ$XhC zUyss@5AHCI9DBy2^g8Kp)-4DZX~kdNy>sc@vy3At8^?-zx~JFhN#H)p|Ka(Ntmy6I zesJISiP`THP#^Y)iR&e-HU$@G1@z^G6(|H0SO$D7*QuEH=(u`pd$mz);OExN0~Cy` zvfrco4@dg*M{Oj8-=?mid*0|IAOZgZjNAjo zxZM+Ug3)2%8lO_Ne`skbI;2dkKaLqcz6DhcOIV_zgdY#D#}RuBBo?|C_c%Ai0J~8Mmj-kLF`Q&g@5{xi5RV;iUYi8J`;HzxRA#(AP>W z$a=1yS-;K&QP9VplO15slC>g>A_fuEL>ej_ObRXc;({;fL?BP?|7%JBzQXCAv>ds!3Qc9H=zgjIOggMY zpS30IdRu5mO9;L$MV6ZKPe$2lHrSGrEN;g0BS%lqa209ucV;$ye(mc|ao?2(pPGip z_?{L@gK|;A+IQpS9P*_jG#+G9honUgy#7EIt*pY4R3soore#V*j(n++9e7PaouviG zd8s_R5tvJeNkY#fd;TdZ06IER$aZvQ5#A`ExQ2_F;)#*qil(Or_YLxhb0lY3iO^EE zrq}dhA&=<|J<_zl`uzF9-?TphskI@VFV9nL-;f}$(G2}ec6!Y*j-oo%kzUB=1i8L3 zp{BpFWy1T71YGbI4M*%JmPqyU1t#W$k9hB2Wls)x{2JQx3_Q|tkj7(nrp*6jLV?qH z@nBUUbyMuirhc&89ezb1aaJ;F^CX1{QMdi0O@4|Pg9;ES-E8{&zhT27^gx5=3yJ;C zgEvjD!N+$iE1v)Al`6V?C{4p%Eu*YRg;Rdnu&?EVWEO4oX9{SC`&p~Q59FQ%P-mX^ zt!FD62OX>)2dB*Je^u!lk~SJ6(~F#7j5M$b(s2Sk!xBBMo;_oU-ROB5S$(NleUDY{ zC*K@-&-n9zCxL0d8B3sW-n5_HGW+dfMsL{zQXi_xDYPVi6hf)j|G5*Sps^Wq<&W0Ev)%bW`7o!4 zIaSXcbmN(_MPNUqA@QW*Wodi{F|^aS`c|QpHQGo_Tn>3Go*d49JC~*0h=lq#j5N~!Q4JxZ5w$|Dfft$GLyqEtS~`*Q4I5neu9<%9I{V;^*vZcbq3SM z-}F%g9VuQpSN+Zpa9#BU*Tm8=_5QlWRky^%o+*L^)AxzvU-84*=RVRCMNmV@Q)-BQ z#tq}hVL(_x^M6PXPyiqnZnVf46z9|e{Odh_M{~eI@kM~#E~4^jgvtXPw1>?2+M<2ETtHX(rI^1gOR1^Y20+%?Gley}i%CdFDXP zaP1sJfIb#fY`SJ6BB`x2$e25xo)Ohe!FSkAJ*Ph>H@{5cC!{d^Q5*OjU_}01kPr&S zyToKxk!o~QX335a5V0)CNRs)>zx#sJpwGy(FMl9>=x^$gfE>ENsf;D`D-b(<3T@=j zeLr<|@?T+_=A~n*&?Ms^7n)n`c#eEgRr$ysG9}F=7Mwn1i_T!CT#*M;ll0m=6VLm-BPAC>dKbw%!I}VNY z=lI0`A09vMd5_0p;-27()C5A&0ceO#YjBf(LMzqj0+5D5`xu{*|8EP}ya^VtpMgsD z#{z(B6l$PV4NqLH{fR6Sk^n8fML%JP>Iot8*MG|LuWv@K#%=Q!Fbe96 zHLriy3IG)V&l=p_+WO<{W72ng=AY%#+Am--;1ARNd>(a>(5@;+9iO}KOdt+vfG_V% z?;JiK3+PCeWZ&N(PYa?Eupzq^L!Zyjrw_sht4K9ZRyg;d;2QzhiS<9e1gXM*7ok91pm441qdX_1Xr#8Mmictwm(&=+K`{GR3;!}c!S~j|1lKzFB)^YcstP0SI24S zaM~*I>q(sef?l^%{PSIEzl=6=lPQs!ao?`&Z)NLMqyf~R;|w`pRC)oBdNSsf&HoWz z02gq6n}6N>{}d1W+9tQ#$n5kc*T`R;{tMvr>BFN%&pZ88pjyHBwhn);0-$L-zpwT` z;xP(tvf2?5^Xsms4?c#}_9NPV{fockr80df@$(dy?O6f7K=r9XY&sSf|wEd6Gi{%e+glcxWgrE?}?_rGT8G>G`G zS^7;$NdG|i{x#wMjh2276VKOF{^Jw>8!i2AWB#ZB{Mx4f_tDbM^SQ#362!DM+$h!SRQXBM;hnMx_Q#8 zB@@5?Y?b7##eq_G=1KOUp&_@z+|K7e(QLN`5PhXo-J|_`@Q=h>RVX`trOIcXIR#m` zF~Hu>yMUqZhtHze+2K<0>bS^!V>@?evA(xsGx17@q|^lrJ+7TTY=>7cIa;-Kg*K02 z`+*VbiHFP9+o+k)oNoCi8l9+@cO|}6ku><-NlOM%SX1BP%viQe1+ws)OV=P&OE>UfextA5ia)TXbldiAbsIpBcoK>@USD zgnkhwlrSTc$teKHMHRBPQ~pq|_ID%kD_x=lL0j-Mr?T_G_92qyVM-nIY0qV~BXVKj z$Rac})RU>Cm#%!F%9~`shLcI+xp09yUlfWs?n$cXRO8&9o^IpNvpF4HfwI*P*B30T zNsN27;cp8>$&gI8@C{x_V23e8Rqo@*d1I)Zq4ivk#H^Z=Xl<=*GjaaY!JSvJ7d%ij zg|aUaP%F?V1WFoj_0}Rn^2qyNt4DJz^dE2(>bok9BTma6DvgiKBwzX{dDBN`Jeu`5b1}P=p&|Vh@5t!;aI1x{ z)Q;-u?(Pn`tT(JY6|{=z0y*d9Fe|pM1Njay@MjNuf1+L{phm~8;d- zc_77+!f;?@$7j)j4w*L{0-j}EV0uT?pP@3+%e_Dr5+UoG=d-w7X|O0PyvhjKfbAb^ zM_61UQzQ{t4qFQf`4n`*q%3Zjivxz6tM{&?f4!NyV@YR3hVc;E-Wg~d6y?w7g<*Hs z;jvh{oOx?gF2|2mvZ=5whqiJ=Zg_*Fg8&db+?`KarCqIYUjFIoM`-vb<63!R=%+7J z`(H}#ry}-145W`=AL#!qnEmU2_(;=$)}#nT-FP4^FONHTnOAS7z=y8bKPIlXg9nQf zkjWIwZT!);7E?w>?=Y>hoU`mIL zh?{VHCZ~@b<-4~!XGDZA_g%V>+~rY;DANEe&SCxV6j{ZpB~#~}Wt2?Ss^=O`+rIKN z8n{~#OG`#-wi~o=VysF^N-~|~CHRCp||!B9`4@+x%J0nvW) zy1SFttI}##&9?Wgx2_$okU1y%Pealp1Ga}F>#ElIWcgHro8&-7{<$o#?H2%e`mqQ< z_*lQ>kv>-fugd{sgrlgxry5t7a5}h=I9mproH|=Fnkfd8zxB4;#t}<)GbXCj#Jv_s?rgF8y@1mD?1;0^lN++AB zNjMl4Z4Xrowq3)0v#ULd9>HvE&_^nty=eNPk#0omy5WQSDHBXj4zAs0U1zD>U6Kvh zs4}0s3@o`;8+oq!4Z4)>{1ZOw6$k5#c1V*2214@LV*yT)56b+NkECQaLVj> z3rfs2BY#wE{x5l8{iVm#qqz>NRp$2wqQ=UiXI$5Vmqg*y!X}x@5p2t%g=}*{pJ21v zmtNuIP|^1$OZHU8Bg`ra;^Jbw{E4%*0(dEB+Tqif$|6&4x$#Vn4e|G!rDe$ap_5L$ zmmhGX+%ziEUW>)&e)W3r<(p^%DMd1+rhCPN#G>*?tUvR^Iddl4SmaFdVJ10=!PU9T8${$jD*3cwx&Z;RLe zb58Hw+K})9yW!`h&omm_#ST^m1h<+}6sq0GJ3qyrRII-W{io3$Pva|rX=yZtK82&E z)9A56tZPz?f@+#S0gGJlAn-O;JN3c^z-p5V%=g+`S`QeX;Mrjf${v(&&37I}-{4S( zIQ-%QDB(9haMK3eq0R0W`WsKw#^7ttreoq$Bu+Ha+>Oh@ZNLnCF`E(^8Ajk&9?UG> zUp#S{Tf1TOhs^us^^J5Vay~4@U;s$1uQ_}|O;&t@Y?Of-U zc!t~bJVok528z~sNYDv+4FyK@8~v*NT1z+o+?qyxz1ZY0WQ}MnS+*)X#=Bh-VV~!L&*FnMYA<_Kra^o;;u6V4(^54&^`06i+Y~qD5IFd7*-yPL zCigz(h7bosSSNozsTlxrYoh;O$ZiRWVzo*1zDBR0yiD9-Q%lQLqbja6=oL5rMdUe$^;9Ko}QlJ@JD@)$vOF4mgc?7q|y=>vfc4n+C*@y zO^BE!^`acVqz~EM>{HC!m9o~ibpwSoHtpvMR)|DmXY>+$y$TBZn|(RC{&%0qNlCgs z(Eg-i+AAQd%aaMLDh41*finUA}Ttnv^gsfxfxDsNu{mz!yo997Px=I zMH;ISj-1$x9`WgTwOP6aPBR~x=k;JuN3Yu5?aK)okC$B;xTqxz`K&#SND;ZJeu+5> zC6Fa4zoS}_UwAaSPjH6%;VtV_;`z zH|WX`Q8g;fN%h zX^6$Zk)S_&z*36)p2~Zoh~*Tdu0MTRNi`7q@#EZphRX-zu%q>Ssm*2g?7q0C{9D9k z`2lP*B`HUjVso5^#`c%uv6xRn?DzNI@8$Vd*(~LcU4ZF_k66{`HqOWKUzc63sQ3hv z=xgredcsd;T3RY*nH=pL;}t-dK0G`uU>%xcW8{2%c*N?wSyO(Y*R=Zh1@P2Y&5s&` zh10*+c+1PBi7L*1$k_ij$?GzZOwyh?SM8*>%rmToa4tj~(^?J6G@`BKiy$zQ&6N&V zvK3-Z^v0)qJ4^YtkF!;W>PHn=c39P&MNiaLLvfGRWnWfqbB}-fwnq`;kW^#}Yl8^h zE|;3EJPF`Au#2fWKFoiUJhE|6%mrp~O_>ov7cMay6+rIay=a^X(ijkNh{hpeU3PgM zqjR=(Q=t!XU1whs8QAc#ep7?!96vT*=|7<>XB~Lb7<+rSVtv0d=w17Mz8+Uvcb&JK zW;R62g{YvGIIqf+%>DieVIqQo z+e;gh2c~#)Q&?kIP9{zpP`td@(6PmBb>L`M+E&vX`=09}iB9kCtgBMezv600 zF|1bv_ssvc5}957Rf@;&$d+7X058^AY@6GD;q&Z5oGanVE>Vuna>O?Tx%~X{dnw-Q zPBSEqwasNSWdvILqfAq#Rmb-q_iMN)E1GLePeZ#e&|+QBFsvB!46Sspc3gIhKP*o> zbnJ9VHnEbW=;AV2kXM67N7%W^nc`Yr_A*Q{GniDy8QNR zOI=BfyRHK<&eo7@7s!luq_;6ynz2LrE(wv65t#J z3A5qOft4s)`4SV7jUOEw7ita~AQjqBd}2GRux*&_$)`q5f;*-ww*I5e8(Z%TjV(tj zW%XXemu)Y@V|uNH2}i`p8l_&iJbgOO!8tp`p3k)9w&s@Hs=#AoSd~o9vz>r%3}u@v zG4@FCM^rr_@-GWlPhEh?>Tdr534bRh&xm7%xBw8RFU&U)Ao9|3cv%7AoV2n)e)J7}AJ4{C;tv5E*)Ua0) z6vtxw12Svw&Z?(SJ8Y)OH_?Q-CErh3+X&>HOWVdnuXU>N_H-rZVp7{8VDe)_rFX~2 zWtbaH^=B~|yulD=9zv4YzY`x>D5@hJFF8^cu{pTJ_vTSpU4zk>K5mO8cGs}^teTbe z7=hKKzMlLdBV)gdv1I>F=zwZ^h!n5N_R!r<8DgvaF-|H4a*TnPEof2Q^g>^uu&QQo z%LJ??b||;4u7TI&$K&=0mcmJf;%Y|0gOwb#Wk%QGCU`CETE(=Dnw_Y(4?i7i%;SBV z_7l69^m$0*VAaN}y%k!-;=6Q5PA_vc%ugW(86d^MFSok(^K}gWNqv6)D-I1*NmJb3 zHw2xFg4`mgkfgz^DAuXtsbURirj{Y?k)gSuchQ>3x*xki)$C}1M+%`yPRNpeV{u?5 z?+T`$WaMk?hc{My7q<(hj|Z%}lQ(9(tZ)#$ovtU=!C3~b!C^<0ObL~*BdwxYNYPE5 z3I|N*ptP@YYWt0PHiuwZ+0M0jL*z}GtXsB~7r0CAIZ|205}>79A9O%rq>DBZv^V;; zdN6d7YP^l>V;MH|nc@0+#S#yi13(!=;C2Q=1(_FNNKNg2!IUkMvB?ZPE9wI zbc+r6SB=S1E;Ij1;jDREt-iP#pBmOnRMnSAK)UaXhDm}`g7CgxB2Uup+_}ZJRE2N8 zqNb^VuHA*wS5j{;+F6;56 zE|f|sn#D9iME(we^S{=>&M|xFOAG;UPYUXAKF!Wm=f8k#k~_;H9t$K zw1^ucpy_=FEdg#Vw`&>;S+B_-P-ndx9Q|~Yf9uDlFk$1wHsjbceBA!awsJd+eSX<1 zwjMC+Dh2~62F6>(hee!T*ZdaCi_6CFp3oEHB>)1Ye}N(z+TQ}s|AptAfSe3vrRcdy zRJU|D5RJ;<63Lk>C9sKy)gn&PO^B2Y0dj^DKHZ;|=-V6f(Kya;b{9Y#&|a!m?WP4WADC&dfD25-ubfiI4@(G<=#SBpF&ywU@C(_uiEe!N9Ceso*0STnj>Ty z7-!*T{QCKf=7a}vG#rh}_Y#RWk-cBWS0QU^ya%tASc-DVyisG&G)C(B;qH<}&Aee# zXGoU3qgrMs_s*z-t&|hntLcwskuKRQoP4aCEAl!Qvm;9tn_eG!1nQq$#Jbw1)t6J_ zV6#1CLYHaL(NVsVbOo#ZvdYuOR2fIt!`VaTLSV*(MUkjLnB?$}K09u*pzm!W~T%oShf zj!E#V0a0-@|%dM@{SMQHg%IWe*tmEaZ@d5&u^R;W_Y* zpG&jauAYnGMUb_A{ZbnJCy&yVyW(ZxL1LKO5A5J(_HyaiwE^8MsmMrN-Fc!k$kJ$P za?8W}d*MVIOC_AVMQ^rEEX5yHWF?YA7X4^ym1>#1?5ogM4}3Dj=ajX0p}9tqs`sz+ z4u~D~znzRE@n7f7Yq2l7a^&gSapf(On7DX)Mb%VC`CQa{*urXj0H)l7oT+TylOSV< zf`8nPD%UloI#w88N~XyYQ4~h4&0@jO zc3*x6#0A8t6Yush@mt)nK^!ZOQMLc9HH^-@0zH$l+}1e1()eqY?IsaqznF!lNt3`c z^J>?->DJnS+_S`F@nFMWL8GVrDC-I*i%K|ft#2btQYZ6Fmhqj}C(v&;-Vl$|Un8kb z-w7oun467FYioW+(-`X%5x|xdY5+}BTiZue(|+)WqYz6X7OBg2UIbQM{9t{+=|$|G z{?Eg7Eevuch<}TBB$Y_>H3P*QqwzxSG$-|yJQd3kPHUn1RoSl@Y5BgR%Xicr*EHPH z=(j6xIhA0>D~i;O8gB5$C?vKnEiHZ1>laOq#<9zW+uEAT$dKM%M})^>y-lSek=L9* z7S_{8B93gR1c=Sl5JFy+rDqt9QBDm*21QdRRLnRy#y#GMO6-*J$xZvIqB7ZpPW?sr zjPVg7cc;pY{kAbIL5eqm`at!vEusC=8vc`Q9tBN*D=Y)WlAR6}bU{_#gKH)u6AW8( zmX%r}8~xi=ddB$lR9jQIS@**Z|mTI ziT0MM*LjvMBV*|CC=eN@V2!#kt{xScjKHV{M!1X;I!rB7;l=l6p)Y|rGuy4*;rP9* za~AdS`2)~fW-83@!uh0+Spn!xyIQ$+;IKPx(LBR$4(11dm=arGjDvie8#r1I!i+5X z>@ca7Ux-9a9Oob~tm2{4fi2clt?-qA$f92ElGZf09Qfeuq&gnF)NU$-ey`csmzw`C9+LpxXpO9Teri!(EoJbxSJlLUYuOd z`*`_^(k^+AW(_&~(>{p4y`yvqo|{%JOGaBXu(vcfUxC-Bg;F!=%`izgzjXQzQx<6* zJ+LwL9gr-m)yHYVdL#2tcc#x)kq`jzKHPj!| zF}9O*k7KLNGTo@7a4nF)UL~%wMcBj3pGjv%R)*CSZXL`b1IOPaaWW)Ln9$aD3pTeM zO)5Sxr3W` zfvqQG7JKbj1S06)$-5^qpgNk>ax_K$Ep!efHsP+yyOl}2Oq9~ODeE^?Daminbi)9o zLpJRAeTMxs(?U4)0s}jtFL`!L{YFyevt7Z-5{ej7MlrzxOcmPbWt&XiY zE>V_O-zNgqt9*dmVP9T@@U(4xkW}kiYgsX<*kS=Exsx+8fHle~52A0$?~7+aiWcN+ z_{o-^*JxL!sW^u`46>*mehr60BAtcC={)O;fEKIwtpwTZ0V7u%3wJe_3%MG1g zPGzEE-6txlarr^Z+REZA&lA8s@#EY6pcmB4TXqW*-d_p;IxR6D^!CAt}kO( z?h#nE&RR@7BlGjR%j`(n;NV(}n193$!RgCsUpjG_-{bq%l8XNZ{_PC}J4KbfhKCUZ!io9xuZgx8 zdy`03%8&bHrmPxD@w{*>_IYwUKY=)=Yg;0+R2juFTV-|4&2gpYoldLONIQSLJaImi zCJUma@n$1o@`M(7(=(m!>**%ey@d)2dsR=$&1I9C-Kl~Dtgahe3WQhj(nj@zbVr8Q zwl(|x?PK3*?$?Hf5Oyz+$)&{H%DVre%-<;9K)|I$oFxWdu%ZIH$RTYxS?GI;}KqoO# zr7G5G2$U?jmD8dOyA{vRyWSgD@M^{`iEzX5FCUrFbD-XIw(6 zDw0tVs7Q5_=J2?Bq5q3@s6<}imZR7{s3fF38!B_2 z{pQH3YSzf2xl@{_C8Bdbo0nfp>15qf7M%M_nQ$Atw_I*x4OW}x6bl_|A#$Ab^h;Jz z4TPP;WNNas;Ojx*_AP*QA{uy4c4?)bPVObgT4fw-Im0R)5Pf%HHU~ua zC7aVatriE%TFOd~+Afo*)F3j*q# zcN+6!`umCa(H1~OSHa5gOD@O?6_5IoD0=MpEAw&e| z^wPtQ+v70yD{P;{&0^ciu+&mVNiHmE!K`Z>j{Hc$=Z$eG0TgKH?%Y81=C~eB>ut^T zk>@mX?B@K_))lN(2jk$rHyR`4BDkaeB-@w<@2yHWh)7>(t;D7sx}zwxSFRuOGHZV; z44B49E;mX*YRj9H}8jAmy=72k|{%?1?Z*NA_aD2M`I$>Sf^(> zJkc`qdOx8jHQZKwWNNzYC(P`y8}u$!iErjuShsm}Clo6gVUNKLOR`J97V1}5>(5ff z&Y0}UWE#1K00B44j^cGg)1KWY4tA4osg?!d!?7!%Y3Esh*9}T0``Ne694iU3TK57R zvSe4206bELm}s=-YxRg%*Vwz1Joa$u0AAI|&VY=3X0m7*|DZDbtYnDrf>>(4nB4DI zkJMQ$QW1Q7x4ghys!iWRu|jIY8usSy{CvMT7Hp!{EOI!z(mV&I;R5N)>fuhgiAa)+ zEa?^6UC3%Z%W$bwjj{LplurEinYL0eCd{6dp#k*%)>@UV5p05GoaObP2q-_`46ZI) zvH91%mx!6@*BMmXncK9aGpp0(*?-mq>mqR4kQcdQ*&~`%bM~Wp^zniZEEf z?rd?#lWZ*3a7|r_hP|Hh!n{XsyF8?zu(dE-h8V}5b>))cE-%PlzjWkQJe-9=KR-U0 zBx^_d`9eww`Hb1kr~XYJaR0eu(RgRM->Fj|SlGA`0QSc2BzB8Lc{_#$TI~yv1!o;$ zX8@(%OO{W*-`mN19G4E$$N*5fe8FA1l$lL#63W4w#ylqK8v6sUtc_iRaZlD9o94Sw z?1Ev}cMc@s0paNF`(L^be)ZiXI6apj&SZi6X z)Xuwbqv%FnCN*yoYopqMA${2d>klpO@F&t(>&qplU&n$HY*uN7+W3`;8sUW1x;F3R zxfq!`{*L1Ii79g4G%x=mv0aCctaAnPtja0%`rz?~h@FRh%PbEcKs#D3xxMvbK79!W z(2|8q!8h+-=54D@(ZKe8o`Yhu5!+SY36=!mtLjcjMhbj6FX(tObK&Md+*HLQ$WzQ@ z%zYMAR)|O~r0+2zYIyk51F?7S)8%SXhu?T!KssB-&T`QCgAV{8o1x6oCC49tDkBd{ z;?#`EoyDM3*z3U<8|Ha5$=;u-lI}7>A6}^D^7de9Fvq15ZF5O^+SU_5m-0J2Mp=z~gWqgblMB{q442^-1Cv6C53SaIgF&fdK(>^aXjp2-8{()O&mdmjB-LVwR0`L zTL4Qd&r5sAqkSj1pI5b{j_TPUnzjl;n@}>+CDY(rePfJVd?tSR3d3;Hy4}j2BLBth zy(d=R3LU0B_4peIjO+3vn;}^oS_1;>SMU_sr-m^u?l_DbIi#X{GyV4RXgc?>2cXuO1Iotdz{UC0xRcPCFF92rMn-jY84w zX4y%$1p6^a_L=RjLUN^uGm*qrJJPw8u#Kc|w782XFQPvdehgfBt+| z-l-z~<7NR2#)131JwgLo^E|IvkEOgmdnYQsWuV-RM4*Rkt3X7@l`?f!ItDETe;_%-e*1-+}IQ| zxLlybJ6vh#F$k(DR-pEgx440Eb&@!|cc6_=_!k$z6CCGM>Z4mGvi4j%vKe38%xp~3 z7zFC9%1k#lFqrfk2$u^xT_AMDad3bHXUxVpd~Gqry+4PfX>qK5Opq7#WuZtO&|(fu z#!5Dg*+CYjT5qVe<8UcCNS8sJgauUzjwasxehd^ z#Pm6x73cu0W5%KQvt{BmheD2lgpwzm1Jb~u7lSxxSWM^GzUXd#XDHFu7TyLwx#Q8e zra|vSUde^pLO7s|DZ#ftjtdZtId2qZRb{9(>Gs&gD#sul0PB*HS(0gS+F~gn8->dH zi(x$c{yne#Ta9-l#ZY7Z_QXt(Py6PYUt^XzzU+OfP(}FKCDJA5;bcRKMt|tEWyVLOVI*4lwCesnbNTOFlX%-qbO9DRzwRTwL;`9Tu)~^Y>#&|)ue?2VWH73D|FVI z`BBf*W@afVfD>%y79vtjodEPRCMcFxsAOzp(wH8G!U^%r9phX+&f%Tnrb#G$wU-yv zI(3D*0nR&Mk8Cz_v~>7eQ|vLJ%?Vz-jDv>b(p3^NG@# zS7vA0dJ@*Op22dcu7@Od${;ZrdH6J*3aR!>#0rGPIc99;#mHlAySB)ejLaz$1^3wR zVT^Z)l>Oxj9?|MZh`&aMuyP`mK06sRZ zd)3Xd$e_Y{{K^4fcM8qiZ58@qhw@PJqPUJUS+KK0416}$DZ!A=lp_7(O(y{iHRqFM zl&$I+v7@b7lB|JlmU3iam1E~?5yz%ayw>rdujWZSxm-(|M>7vmj-=sDt<#robDaX>yY>6MvM094aLetO6nyv~PK5~1F zkc&^EZd0acwhub4gW@FfMlj`*0)VUg=hKxaCP!PxEHSdfZklxX?q(ex4G5N{9SJIL z@AL#|3c!XD$#FvW{i6GeEw;j5@94fcRc=;?#R=_a-z59ni8T=d&HJ1m)^_Qf z?uj7BSLjy@#9Yfka*?{qBWJ1(!YGbHZ9k+)=oK|voK*zwP4O-@X)#&UK7ghx@Xi3@ zi_hnb7F1|v!!46bhVt1j5Y(Itk=a$3*}uCBf*>?e&2}t)-y<;BQ`7ej;ajbP#$+uYkRv813f(*4=G_J*mtMYu_aa*~=AYDzn|8S;|EpEC7pKCIUPcYI< zm;pG2j3?klaN(sbsDMC1W5ojUT@FAef|4-NCV*}_{{mH9w7*U_`vS}ugO%oI+;b3W zPyqP2#~e~Y()%CY?hpN06BenmyIlm?Rku?JrInSH%^fnNcCv;8W8Lxniwp?u_FW`R zvItBRW(fiA$pK2lA?puZ;nJK=UH@>Ov@KC--L-37MzVvm8a_3Jd?;miZu9x#V6jhj zudcBDThZEJe@D9}^iGVuMUuM1iazb}lr3wxT$C0L3)+ZHGRzZY@N zB7bfq&1bgk@y{{9|0)P68TeTHM_vOHWxA00EG_FI;ClMZmkC5W!RM}UECXhUNe7GE z_B>1!$(?&$$081st(4+gZYzPe_r-bj>Y5ir?@l&6uk}R6kmJ59p;+)HHiKGi1t}}3 zA33*juka4r-NJeE$aHLU!}V}Gy(;R&*T`eP(Q+&tLg{N&k}4UJVoq)$YmbZ>2j zuqDvR2;-wE0crA$_Rs8@EvY8y`*t{eA~QlqB9gvNQlUGHCsXzdLy69zZ)RO+l?{e} z2qXFQH^WV2HNTiF^{OGNkA#}+o3CdIl*dw4n;7cWL?G)H7@o(rH41s1T_VC~T-J1> zG%VIxfwz|@QwKwQpJJ*+)*Lya_EYV$0X{VI%yBB<`TA_(`q&*aO0{)0shDghWWT*0 z)zAY5bqT>}uU!0V0S;N3xLZ;3{5*3@1o?9I`J(%yfqD}=Cy?Unnf&h8)dRkA5G)R4 zsl^{F*ajQl!Q{!B>sA>#*v#$^@dhqsZKN2Zuae&|Q=>Y|orbrXFGRPkTm4{ZcDhF) zJv-5rR(@a`50ZLaQ!0{}bN(jaAH6jwBw73}nbqHrQ@+wYKdXAf&=O}B-aCxGxs(<- zQ-#;#w7{)bzE)lImRsC-((|(Nx`Coja5|^PeT<BP#r8o861_)zZ_2uVZnh@%-*M@rMS@A=#`?>x94akYZ)$ zw6NfsIokD9?jOTZAr3`i!dTB8p8;;VLg+x$j1ko27hA*;m!x7NY2T)t=7&Riz1ay_ ze&2dm9U;8E9+2+(Qm;ZnmWu`e2GLgpN8BjR?e&yg*|t9(pXy9OvJeaC@mr0Mj;6Az z4M~4Ii|7CS7ilFjK^t&*jDPNTr13~a+gvY;7(U|xc}5vVV$dVH#S1MAOAYFlMYrV) z7CU3!sJqmc=Z>=Y2Anan6C7Ekj%^u7&7S%LQs&&dmC9kJn-&4Rx;&hkXE5elWBQn6 zZDIUjBuKWHh_|q#f#(@zGvJK1P!b~PZ?B$O_HE^hIhnV9e?cn5D=33PPdLIbkLn4s z*ilwc&WHQ_3eOU8f#Z|AjYyuIZ4J+7>a+M8kq;Jt7$eChaav|av zSFT*I&A%5;@yf%dWR2#)G1X+nRw9%%64GmDHq)Eu-`dPpam_&BD#oDK37{K~Kt466 z$29={I5hiUdjBva@Y!4lk)()_AZ8?A2_jj|#*o;qS^%E1a$Eh~HhYMlBg-huvhxuz z(oMB^iHV8#+TW&Mo0N0=0@`#U7&a)E%MOUwu0Oni|CwziD`+tuwI+%uUyAp@X~bcG z`w4n!ttZZioQP7<&P}v z=Z}=292m^tz;Pa#JVZ9FyBZR6X~7G|;$>Bi)_ZGj_?&ixe38 zd0Vn7R3{@XTeFhp%OOM=<_orGD3?JbIh-Tw)mIic(!g?kaRbD~WUp%_EZPCkkskyr z`7A>S&g31DJl30yTEv}=?v)ftQqc*H!ecVi>x#2;5a~J;3x&dJ5!|m=c!rI10~=Eg zBLu3F-5YOGKAzQ;#8oVvS+}_ts_{y#e4*sQq%z|jZYQ4^P#5V@Eg8cBT8Af}y#L~N zBJ2|ZjLHWKjBpO?{o#Vx@=~l@?AI3=Ro|o-c2zw%=?ng|4y2#k#IaD>catGBOrd3{;QUj9(2qM3Mu0p+BT6R1B(vf$N6x#-Fb5XwSVK5X4t0 zNj``@%f_CEN(|#aSgbJH@z~PS^aoC5ehEWaxH9{ze`ky$&th(BUdtn3hztrKS`wc) z_#Kz?HNGcKtSoyRo0l|jJ%#{^PGG-8(;{G1B!im1!jMzs(oPCyEjY!q0yxZihnsLV znDVK=*@e3pX@lfrCyk@g-f-sFqp4~SmIqJXEBT}*eQLx_OlDF|g^A~VD=N%!eL!)gBFp- z1diqJI${T&`YSQ&HKd5s`N2&pzG!nx*jE<{NKb_X^1h1^CML|TTz?@mvcW;9v~m>X zqTbBE8G6lmaxi_WWrBYpO1XJ#%VMHESj*IBi*>l9@eztdYLi)ulh%^h%(`*Rme0SU7k#)j=?mq5;HS1u`7dQ?$40Pt619P(z#z`sLlPXEI4Qe~+ zV71PcTNuU(a{-1_+3W#AG7vkECt=k#e!F{c2Nt!Jc#u?Tvrqy0#im(u$K5f)jP5PB zZH?HD;qcH$=BY@Q>8Fl=k8&k3pjS7+`*1t!^>e<5N9~`PT%N0%Hw#)jh;wdTyJMkL z>3T87VRCKGzOTk}B+`JyaoJWn%6`-n=jiCsPI20dOX#6vDpGD%z6>v>rIs5fcEMeb zHzb+|MAr!%Mu*nma1%NUqXlJVR?#m71?lh%B}R<$?}esgUu0qpB|E}Ev|comsQiai zz4^z@2m?fNjxK2w|B#f{1~f6%~;r0+J*c2!enjl7oQc(B#~- z=pafI6+yD(oHI17AfO^3vB^!&IW?*2y$^M!nVH?%s@<*HAO5lMy@r1G+;hJ3ophg6 z@*xlx3uc>eUY$E`>l_=i^!*@~s^6iP$%~mr&-p>2uIrGAc1C;PSNQg#IgX_EfG?A# z{hU3;xu&_As5QZ@I?J3-dA{@Nt{Ua*ArkNO5O=OLF^@L4S}xrSL`Ucbi7?)~EG|D(rmq&0In8Mz@uI>;UiK zV`YVt^=osB_tIu67Al!cqwQ~0F3z?&ZFOS@vwdvk%KngMvUf2&n%QRA80`==H^rI3!!U@JAfyq7)WMvYPAt|VCFbv+cKtJPs*94 zv!EadZ_*Pt)aVm7u!>%3wV_uJh-GZxLEZS`k?8wmdu{$C$DeOZ`se-}uv-l2XIP7~ zDSP=jS=)xGCWjs~`>{AeCW1dTL_+Mo*<=%@j~&}0YB?e(m>4q82ZDCFZFdk36riKI&%>A)xt`Y~;^AtGz5CRr_z%)u_qO&0@*YFq}pJ?Yy z{=M33{3f1s>iW)hiA+=$LHs1gf>yglCYHh^aePg)PC5qc&kJR?tQ0F;1uo>?;|UO% z{hF7DYj)<*#=bdsDv9r`K`LfXF zptkH=+@==B;tbe~Qu^03(Zgd1*D0)z4l1gA<>ujzVL8{W`UnYG_>wp z@CtaM?@qA9d-XGYFP-bcS3Y*EvJT0zc%4AtR$}F!(OufSuy%nw>zj1wpMn-ViVn&Y zGAShUG~pxKohc|m?il!1Y)I9Y@+!7|qsdfDd5Pzd%omlfr>-t8M9I1{MY&p_y1*d7 z%~-x?ESd8}dgvQbQs#7b1t-w()T_71HQ=al^EvFpev?bE3EB ztN63&oXibM9*YET>4^zWyzRN2a>1$)bH=w`bjBqO+dH3v!l~&eDZQYk4R4g^$*foyBNf|`c!D^2fkm*I^I zGutJ18b!v4>;zHDA4?P5qbSp2dJu@Va&y_jLXWnnifbJ@9?S1=Bi|E(vL?@~*tldl zF4=g@X>SB%FxlKeY~Rl{YAxlnL&Ff_9)YV8w`2Vs=AHQ^pVEJs?rZa?ha*Z05^J?) zGHL2#+S!Y{w%DaV7Oj?CMw+%-nlEoy`njjWWaFRhuCt(L+PiG(qvdxQggPQ5O4=|% zk?cV^BjLMqmv_g-w5(F{{q(LWS*QVRHW_o|->2h0D8m{lIMm9UfGJ2lmhwM(#G;Va zse|hcvsA_C6Niybj??}Y@|d&YfH6&eH)x?w6BIY=N~ymWGMxrb9IWMC@5-1oo${_5 z=&zuDLfi;Xgw?XR&5^gHtxTVX;abU>Ymdq@>nvo`l6Sme-Vn!DD;RG0Omw)}dUzcc zROt^E-?Y1CJ6YuKDhHqE5a;&~$Zs&4I^cC>c7vyPunzY7b9y5i! zGO?XL9wAWUn6v5y)1N^O+?7gtAAPMAw?f@6C!VCMs3bD~Sq^hee_oD)Jq0T(+InzA z-*Z>9+u=1n%`{ehLv4MlstDC*BT)p4B2qOEQs63Don=96Ey*qg*RybI-*g{@fBww3 zVkH!)DpwXKV>DnCD1!ZvEi2tDVOn<EXvw6PV`6B`-o>74BFbuKl;x$&K-`Hk+eR!fVq z2Ws4h5-e`OF$k>gki$@sy51$ax{Pzr9~3+!eVT+IN%9C4v%urBMqw~gvqallWx8SG zIw@7UahKr8B>H9vgxSt+Q138Hu(*n2_s%hk#2fUapV}$4S40Nx%4Lq&H`EKhwh5$C z*GoFCyj2nDjHm0v2fWG&6hWtNEesw)ZSk!_>&$2;{Kg^<>(?ogg^v>+%w?OH>M4Th@pvwc%((=B z31&*TrE?lA4Ayi*St0?!=8`IB_7i}SJJCqC@0R2+-~ai@oH`2YlJ&?ySCksVoA1=p3nIMUdVkaUBB!?AT@_J9v;JGM6=$wJ8~ zx!>=w?v*QE%WbiO8=~R8RTkN>w75F7KKwzK;^cdhdCp77R;IVDYvw7>zo2#7bh7G~ z*kh@ESsZSB8LXDY?_NF};leMZoIOj#XGcXNasooK=dV|+c1JtYi(v}~oSe1Hr+dungS~5H zKD9PDT1|87gdG5AaqQUb7ysVRvXfvx8!rmpAl%Ps8nBBEyvPmDRbeZ9xQIjD ztTq};{;?71HMgAvYht#oE=(Oq-k<(v2>)gE(W(*5suG}73 zzzZG5PY1}%wda0%rBFNAkR8xivSl~KFz?~CptW&fK7vg=GuoN28w70)+0jIT^^E1P zMA$$!T*s?%Ew2%rwL)`!$h*2FjDmBva2bci2u)Q@9T){OPvYwX_`$<0)38>ez|zTz zg(`oY8(t7YIVPF`J9Dht456K+{ z(hKcX7w7csc7{k~rr)oJ5b21`R$3-(aTL{jUgpfEG)mbKZJp3dl66Puz`JYh8b)V0 zk%^O)Yvopy2YvPQoF`)Jg%mN)vCKO7{<#tX^Zp3`<6>K-lPwi6|4QDr`9Ihh?d~Eg zUJ4YwJ0GSc>g6{0KCju^m)iN6dA5;Wr_Oz&bX+PkJCy{>gb6k{c~xg#yknt~jEy)i zV#RfNA-MKM|M5T=ekHcM1i*!E&q1UWH-D0Gf;!Z8cq=2u4eDt0O^ zOP0{ex(h)_(QHPE#L03>C0ggPE)$QO#I1Scj0@jtWkDomoScI=HhzeTq^8vrJ9e`< zczf5@^uDahM!*bwOC)cE*EwSnX8W4P-r&KJBNnQ)w3OEgH1S6u{9PVIBwAnMif$9! z^0qhul=K-#p%uA<*N9VN5XIE>+_w^~2Vc-oOtZN3*^kU7QAosVN3|~W#gkODJ&ia z6sF5_Tr^&Lh@sUI<;8I6oX>~Wr_ZL|FFGcotBuh*`mhseec}_IIhn}$Ek65M@(^Zc z*f&0hx`1k-9m$=+g9W?_nB9RQ?cfWI{P4qxuxJ`YeL^UKhq(>?v~R3hy9qnqzw-6gp5^6M}{r)+NDn&V3wennf#~9$ljF!;18h z7qUx7eH*xzIarMz*U(|-y@wl&c8D`;z1=*6L|%*DzuTzP^Z2s z#I_c5L#KCsaYZKI&Sk#YPy77Xjv`+IveY zIfnA3>v*j4CkXjxGBHV-sCSilOo_g1Z9ydF=m6l>&$l)aE4tBU=gl-VZl;Z|N)2W3 zB5CpNLuGOlFy8V>Lm%Ji)`Mf5nT7UWm@RG`%&A;89P(b_iL_F?m-{{q-KZEm)wBB2 zqo;#a+$`Ke37+h`K$i1vO#R|&gfqFh#bX1T8OyJ07*Cv2C3b$*6&D&dT+l2LNE7Rk zym;5Vx7eCZd=)S@Upb1)yaluNRE^1bf{8_~mf~5GbB*YcEFsLrD~iQ|ZsBEoGhs90 z;${`&Ju{RNB%(QaYArTb1IrMiLgI(ES0(Yx7|#{OA>3slip~_YZbY-8KkvOIk0e!O zk))AIY({3MTeg0|l=wR$4qoJ^RNOBo$l2h z0k5v&xoZd0-S9k>pU>tEU5IS%XgV?_zSH8%Lb*HOwY(%-fPo3d>SknD$z-;g7n#hl z6Xy+h;)<#njP#iCRxflP&N_O?o+Xg1E?(i!R?7Ir(CF8V+4+*9_U70>hsHn%mMSEdY?vsRH zDs=%$CjEYt-%|OlD+G4&+k$@M%5Sv&?Sly7@!y{LH(&Yxi#o;q`JuOMAOM_i`^hq= zlCol<2sT@cu4-`}@|lU+#Nc;@nB69u?dr3HsJvY6q7#fp8cPDMTKCwVmx_CL$fPlf z4)sp-{H`k+Undi3ebSe)Mf|OczJLGB!EnLQP=~% zpTMz8C&;)9@7}w8|AGz!+cUkps|5ulya*4?J%-|W=zh+Z?n@Ax-M`s?*q)R8qy=sMbL z)!`fJ?mSE_{SZqJ1$BVJ){mBv|03`Yt3a;h8;!F+VSo_l1bx1#Y$oCl@6Pj=b1`X4 z+hR7H7VbmR)Gzpi`c8qM(|ElZj~gOsnTtb?fOG^+bjAE(hPqU{*M=>%)G%G!^7EG| z4l#ppOgPIFE9xSV2SW)DhoAQI(wjy`I)5y)s8$RiQr#=eeXaugxo(ao0+Qd@Mo`xUz5K3yCA!{H~RJR8IBRSm3RCmw=gmNKQi(2 z!6g_zaDLxuNvq!CVZms*$5Q6rAY{Ja&gdoODQKzIaujscJl9>{F>Yy=N4n5xd%h@j z{%W1qGi`bH0;F+_KpvwHpKB3l)z3uO=Kvr?6PcvDghG6z4`RG+{`Lc4ee|bFapPb3 zMk@>am9%YqsEl?RT|Ql53X8_Atdiq#+cA_-mAR#?VgacSS`o}|Hf)F=Afh@_xzxjH zH~W6O7GxW=9M{jQ2l|6_P1>ZX3w~b6ZhnegXk#Gjp=QdS(L#!*I`!}kVNKwNZ-1!( z1`JrvrI^k0PQNK)|9p3p`r5#XuS$pvu64D{oXqT9Tz}p?w3# zR6>Qb%E2A?bKog06;ZI~CCXA8#DJ=4|M4EN0fftz)l&dDpFRT>Y_Klow&z$IP^=gX zKrXFoSWFpfWxcNh`}dL^eB(96``{go&;t|NLkABy4`S}L3JW0_u|Eg2BEi7I2Yk}_ z5VO~!xA0ggo4;4Z)LZTP#f&=HiuE~vFNv*X1H1lkPCqYaLyVW*CqDK?fP8d^Bz7k; zcHhoye-eW!M#4*cXf)5&_1P+97I=llQ~hf62yw1R6ZwjCiF_|mvIi@hAPDDU`OZz4 zdfu)X2&4RE2!&V5G834Pw@Ci=<&qAaDj_L_lT zdd1}53yWdA*(6pmIdM}q=mlsXD(WaR5C2ek;v!YM27zXBYb^(&^8vAS9^)h z9Uy8vci9xYJ{iTsz<;KvWZ`aMbv+ACEJ);0tSjiJC_uyvluY4f_LRpHLI|Uv@_#5d zQ1{Qz076_HPn0J_h|wDWA!v-iap6RVrm6OP;9NKN?ot<9L9^IT%%0Z44m&j83a+7e zo@3H@X~%}Z4J3W}it*aE27Oya)mu}$Q;1l^uI7-}OlHaT%uSHIWtYThWtI#I$O~DPpfPm~zV#mb zphogYzSI25SeX8&1Pa`FW`*O*xPn1sm!W_C7K8OEZJPpXtD?Desu~fGnzv;(;ISxtAT}9w8t=Lj(w&n)>6)%7i8Mj$q7te5F5;I;$UQF{N(jz)9|?CBG;hm+N<~PR4g0m+Pju$Dr$*qa#Basr;)v& zY-SYu^mt^3gzgv}Txf2jVqkq?q*0@O!K*I@Ba{5zZbH%2} zp*O*jTP}(Kyy|pi!PZ~%rZ~t*xE^pIlU=gn#rkReA+avZ6}rRW+YBQhT7TG{OfTB4%+36 zHuqW(9$2Yjij*aCXYREWG`}N1EW^Ap!ZQ4AK-@&Xe0yNK_VJmpw>mBlQTIo%E`6PY z9wlF-EA|?;#xowr)p?GU2>)BkoTq^kF+PaqA-pvXS`zAZ+Dop2i&{#9J)At8vnnrx ze7qK)(u&(zBtEW=0+lPTlgJ8}z=;^I{KX8=v@0wV6sfvYgPl5qFW6oUV8`!v=?H~A zIn9=XJR|C)ha5$!u#V=Rc}iNL@og?|@vQ$RpD^7AuAfn@Y;&iscrHG!R$^|nn?+2X zY?;VBVC<3<&VTDZ*vo#d+z&*=Sb&QbjvU%nxYx9xC}>c(pon01car2vMlQK0EWGCF z+J1aLs7Gf?rxAgrgB*}Xl_Ct8JC%j~_MhulY~DKby9Q-4Nw zrYt+SWi;sV4iLCwu_ahdP8Q zZ~mo`zkYb>09a2Hg@y+q>q)%;E?Pu9149U`mlqDH{4p}T()5C40VSj)I+xi6S|W{I zm|Qn&Cq|;~EBoc3b}xB>m$u|>s!3+2=28rJ2sKSQ=|KIH#?8tU%`SRISsJD|p1coF z$m%%p?q~Eo#*)GX9ZbGhwjRXFGCJId#w5M`R11dWm`eIIoU@=}_SIgCNHdH`+9Nzc6~-xBp~6>3Yz&>(dI^sgEKKMxL-ZLW=7s7P7t;dVOqt5Jfyb%veT6Z|u0Nq8fsf`e7A%j-Bzecxz^-4)(0bZi7Y{4(k9 z+wbwD=5-A#K;=!X(nR?7al5aY6Ln1$IAsXcTdXCvS6}ZncYvTY!(sb@Sk6gpSOvV# zv&N|aQKAP&_gsj{_Y(Yv z8*&NlmKS`Kd05=Nb~Xnp6tW%0AAj^&ybYJ_2|e#~i`jj!D!#4tIHzf>q=0jeQ}ZiJ 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

X5Yo=5% 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%0AF;SgOCPkk&r8%KDLS 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 e6)IFn2!DWQ*cP$: Represents an Azure Service Bus resource. +- : Represents an Azure Service Bus queue resource. +- : Represents an Azure Service Bus subscription resource. +- : Represents an Azure Service Bus topic resource. - : Represents an Azure Service Bus emulator resource. To access these types and APIs for expressing them, add the [📦 Aspire.Hosting.Azure.ServiceBus](https://www.nuget.org/packages/Aspire.Hosting.Azure.ServiceBus) NuGet package in the [app host](xref:dotnet/aspire/app-host) project. @@ -119,12 +122,12 @@ To add an Azure Service Bus queue, call the , it configures your Service Bus resources to have a queue named `queue`. The queue is created in the Service Bus namespace that's represented by the `AzureServiceBusResource` that you added earlier. For more information, see [Queues, topics, and subscriptions in Azure Service Bus](/azure/service-bus-messaging/service-bus-queues-topics-subscriptions). +When you call , it configures your Service Bus resources to have a queue named `queue`. The expresses an explicit parent-child relationship, between the `messaging` Service Bus resource and its child `queue`. The queue is created in the Service Bus namespace that's represented by the `AzureServiceBusResource` that you added earlier. For more information, see [Queues, topics, and subscriptions in Azure Service Bus](/azure/service-bus-messaging/service-bus-queues-topics-subscriptions). ### Add Azure Service Bus topic and subscription @@ -134,7 +137,7 @@ To add an Azure Service Bus topic, call the method providing a name: +When you add an Azure Web PubSub resource, you can also add a child hub resource. The hub resource is a logical grouping of connections and event handlers. To add an Azure Web PubSub hub resource to your app host project, chain a call to the method providing a resource and hub name: ```csharp var builder = DistributedApplication.CreateBuilder(args); @@ -68,12 +68,12 @@ var worker = builder.AddProject("worker") .WithExternalHttpEndpoints(); var webPubSub = builder.AddAzureWebPubSub("web-pubsub"); -var messagesHub = webPubSub.AddHub("messages"); +var messagesHub = webPubSub.AddHub(name: "messages", hubName: "messageHub"); // After adding all resources, run the app... ``` -The preceding code adds an Azure Web PubSub hub resource named `messages`, which enables the addition of event handlers. To add an event handler, call the : +The preceding code adds an Azure Web PubSub hub resource named `messages` and a hub name of `messageHub` , which enables the addition of event handlers. To add an event handler, call the : ```csharp var builder = DistributedApplication.CreateBuilder(args); @@ -82,7 +82,7 @@ var worker = builder.AddProject("worker") .WithExternalHttpEndpoints(); var webPubSub = builder.AddAzureWebPubSub("web-pubsub"); -var messagesHub = webPubSub.AddHub("messages"); +var messagesHub = webPubSub.AddHub(name: "messages", hubName: "messageHub"); messagesHub.AddEventHandler( $"{worker.GetEndpoint("https")}/eventhandler/", @@ -250,6 +250,12 @@ public class ExampleService( } ``` +If you want to register a single `WebPubSubServiceClient` instance with a specific connection name, there's an overload that uses the connection name as the service key. Call the `AddKeyedAzureWebPubSubServiceClient` method. This method registers the client as a singleton service in the dependency injection container. + +```csharp +builder.AddKeyedAzureWebPubSubServiceClient(connectionName: "web-pubsub"); +``` + For more information, see [Keyed services in .NET](/dotnet/core/extensions/dependency-injection#keyed-services). ### Configuration From 25c5b69b4caed3490084a15007a35c82965c78fd Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 9 Apr 2025 22:03:41 -0500 Subject: [PATCH 16/27] Add new Azure PostgreSQL client integrations. (#2905) * Replace manual identity code with new package. Fixes #2883 * Add xref reminders. * Replace standard clients * Correct leading para * Apply suggestions from code review * Adjustment from peer reviews * Correct terminology --- ...postgresql-entity-framework-integration.md | 4 +- docs/database/azure-postgresql-integration.md | 4 +- .../includes/azure-postgresql-client.md | 161 +++++++++-- .../includes/azure-postgresql-ef-client.md | 265 +++++++++++++++--- docs/database/includes/postgresql-app-host.md | 2 +- 5 files changed, 376 insertions(+), 60 deletions(-) diff --git a/docs/database/azure-postgresql-entity-framework-integration.md b/docs/database/azure-postgresql-entity-framework-integration.md index d6095fd6ca..eca0f14f38 100644 --- a/docs/database/azure-postgresql-entity-framework-integration.md +++ b/docs/database/azure-postgresql-entity-framework-integration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire Azure PostgreSQL Entity Framework Core integration description: Learn how to integrate Azure PostgreSQL with .NET Aspire applications, using both hosting and Entity Framework Core client integrations. -ms.date: 01/21/2025 +ms.date: 03/31/2025 uid: dotnet/aspire/azure-postgresql-entity-framework-integration --- @@ -17,8 +17,6 @@ uid: dotnet/aspire/azure-postgresql-entity-framework-integration ## Client integration -[!INCLUDE [postgresql-ef-client](includes/postgresql-ef-client.md)] - [!INCLUDE [azure-postgresql-ef-client](includes/azure-postgresql-ef-client.md)] ## See also diff --git a/docs/database/azure-postgresql-integration.md b/docs/database/azure-postgresql-integration.md index ce3733a0fe..79f4ba482b 100644 --- a/docs/database/azure-postgresql-integration.md +++ b/docs/database/azure-postgresql-integration.md @@ -1,7 +1,7 @@ --- title: .NET Aspire Azure PostgreSQL integration description: Learn how to integrate Azure PostgreSQL with .NET Aspire applications, using both hosting and client integrations. -ms.date: 01/21/2025 +ms.date: 03/31/2025 uid: dotnet/aspire/azure-postgresql-integration --- @@ -17,8 +17,6 @@ uid: dotnet/aspire/azure-postgresql-integration ## Client integration -[!INCLUDE [postgresql-client](includes/postgresql-client.md)] - [!INCLUDE [azure-postgresql-client](includes/azure-postgresql-client.md)] ## See also diff --git a/docs/database/includes/azure-postgresql-client.md b/docs/database/includes/azure-postgresql-client.md index c0c26f0027..e130f50753 100644 --- a/docs/database/includes/azure-postgresql-client.md +++ b/docs/database/includes/azure-postgresql-client.md @@ -2,42 +2,165 @@ ms.topic: include --- -### Add Azure authenticated Npgsql client - -By default, when you call `AddAzurePostgresFlexibleServer` in your PostgreSQL hosting integration, it configures [📦 Azure.Identity](https://www.nuget.org/packages/Azure.Identity) NuGet package to enable authentication: +To get started with the .NET Aspire Azure PostgreSQL client integration, install the [📦 Aspire.Azure.Npgsql](https://www.nuget.org/packages/Aspire.Azure.Npgsql) NuGet package in the client-consuming project, that is, the project for the application that uses the PostgreSQL client. The PostgreSQL client integration registers an [NpgsqlDataSource](https://www.npgsql.org/doc/api/Npgsql.NpgsqlDataSource.html) instance that you can use to interact with PostgreSQL. ### [.NET CLI](#tab/dotnet-cli) ```dotnetcli -dotnet add package Azure.Identity +dotnet add package Aspire.Azure.Npgsql ``` ### [PackageReference](#tab/package-reference) ```xml - ``` --- -The PostgreSQL connection can be consumed using the client integration and : + + +The PostgreSQL connection can be consumed using the client integration by calling the `AddAzureNpgsqlDataSource`: + +```csharp +builder.AddAzureNpgsqlDataSource(connectionName: "postgresdb"); +``` + +> [!TIP] +> The `connectionName` parameter must match the name used when adding the PostgreSQL server resource in the app host project. + +The preceding code snippet demonstrates how to use the `AddAzureNpgsqlDataSource` method to register an `NpgsqlDataSource` instance that uses Azure authentication ([Microsoft Entra ID](/azure/postgresql/flexible-server/concepts-azure-ad-authentication)). This `"postgresdb"` connection name corresponds to a connection string configuration value. + +After adding `NpgsqlDataSource` to the builder, you can get the `NpgsqlDataSource` instance using dependency injection. For example, to retrieve your data source object from an example service define it as a constructor parameter and ensure the `ExampleService` class is registered with the dependency injection container: + +```csharp +public class ExampleService(NpgsqlDataSource dataSource) +{ + // Use dataSource... +} +``` + +For more information on dependency injection, see [.NET dependency injection](/dotnet/core/extensions/dependency-injection). + +### Add keyed Azure Npgsql client + + + +There might be situations where you want to register multiple `NpgsqlDataSource` instances with different connection names. To register keyed Npgsql clients, call the `AddKeyedAzureNpgsqlDataSource` method: + +```csharp +builder.AddKeyedAzureNpgsqlDataSource(name: "sales_db"); +builder.AddKeyedAzureNpgsqlDataSource(name: "inventory_db"); +``` + +Then you can retrieve the `NpgsqlDataSource` instances using dependency injection. For example, to retrieve the connection from an example service: + +```csharp +public class ExampleService( + [FromKeyedServices("sales_db")] NpgsqlDataSource salesDataSource, + [FromKeyedServices("inventory_db")] NpgsqlDataSource inventoryDataSource) +{ + // Use data sources... +} +``` + +For more information on keyed services, see [.NET dependency injection: Keyed services](/dotnet/core/extensions/dependency-injection#keyed-services). + +#### Configuration + +The .NET Aspire Azure Npgsql integration provides multiple options to configure the database connection based on the requirements and conventions of your project. + +##### Use a connection string + +When using a connection string defined in the `ConnectionStrings` configuration section, you provide the name of the connection string when calling `AddAzureNpgsqlDataSource`: ```csharp -builder.AddNpgsqlDataSource( - "postgresdb", - configureDataSourceBuilder: (dataSourceBuilder) => +builder.AddAzureNpgsqlDataSource("postgresdb"); +``` + +The connection string is retrieved from the `ConnectionStrings` configuration section, for example, consider the following JSON configuration: + +```json { - if (string.IsNullOrEmpty(dataSourceBuilder.ConnectionStringBuilder.Password)) - { - var credentials = new DefaultAzureCredential(); - var tokenRequest = new TokenRequestContext(["https://ossrdbms-aad.database.windows.net/.default"]); - - dataSourceBuilder.UsePasswordProvider( - passwordProvider: _ => credentials.GetToken(tokenRequest).Token, - passwordProviderAsync: async (_, ct) => (await credentials.GetTokenAsync(tokenRequest, ct)).Token); + "ConnectionStrings": { + "postgresdb": "Host=myserver;Database=test" + } +} +``` + +For more information on how to configure the connection string, see the [Npgsql connection string documentation](https://www.npgsql.org/doc/connection-string-parameters.html). + +> [!NOTE] +> The username and password are automatically inferred from the credential provided in the settings. + +##### Use configuration providers + + + +The .NET Aspire Azure Npgsql integration supports . It loads the `AzureNpgsqlSettings` from configuration using the `Aspire:Azure:Npgsql` key. For example, consider the following _appsettings.json_ file that configures some of the available options: + +```json +{ + "Aspire": { + "Npgsql": { + "DisableHealthChecks": true, + "DisableTracing": true } -}); + } +} ``` -The preceding code snippet demonstrates how to use the class from the package to authenticate with [Microsoft Entra ID](/azure/postgresql/flexible-server/concepts-azure-ad-authentication) and retrieve a token to connect to the PostgreSQL database. The [UsePasswordProvider](https://www.npgsql.org/doc/api/Npgsql.NpgsqlDataSourceBuilder.html#Npgsql_NpgsqlDataSourceBuilder_UsePasswordProvider_System_Func_Npgsql_NpgsqlConnectionStringBuilder_System_String__System_Func_Npgsql_NpgsqlConnectionStringBuilder_System_Threading_CancellationToken_System_Threading_Tasks_ValueTask_System_String___) method is used to provide the token to the data source builder. +##### Use inline delegates + +You can configure settings in code, by passing the `Action configureSettings` delegate to set up some or all the options inline, for example to disable health checks from code: + +```csharp +builder.AddAzureNpgsqlDataSource( + "postgresdb", + settings => settings.DisableHealthChecks = true); +``` + + + +Use the `AzureNpgsqlSettings.Credential` property to establish a connection. If no credential is configured, the is used. When the connection string contains a username and password, the credential is ignored. + +[!INCLUDE [client-integration-health-checks](../../includes/client-integration-health-checks.md)] + +- Adds the [`NpgSqlHealthCheck`](https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks/blob/master/src/HealthChecks.NpgSql/NpgSqlHealthCheck.cs), which verifies that commands can be successfully executed against the underlying Postgres database. +- Integrates with the `/health` HTTP endpoint, which specifies all registered health checks must pass for app to be considered ready to accept traffic + +[!INCLUDE [integration-observability-and-telemetry](../../includes/integration-observability-and-telemetry.md)] + +#### Logging + +The .NET Aspire PostgreSQL integration uses the following log categories: + +- `Npgsql.Connection` +- `Npgsql.Command` +- `Npgsql.Transaction` +- `Npgsql.Copy` +- `Npgsql.Replication` +- `Npgsql.Exception` + +#### Tracing + +The .NET Aspire PostgreSQL integration will emit the following tracing activities using OpenTelemetry: + +- `Npgsql` + +#### Metrics + +The .NET Aspire PostgreSQL integration will emit the following metrics using OpenTelemetry: + +- Npgsql: + - `ec_Npgsql_bytes_written_per_second` + - `ec_Npgsql_bytes_read_per_second` + - `ec_Npgsql_commands_per_second` + - `ec_Npgsql_total_commands` + - `ec_Npgsql_current_commands` + - `ec_Npgsql_failed_commands` + - `ec_Npgsql_prepared_commands_ratio` + - `ec_Npgsql_connection_pools` + - `ec_Npgsql_multiplexing_average_commands_per_batch` + - `ec_Npgsql_multiplexing_average_write_time_per_batch` diff --git a/docs/database/includes/azure-postgresql-ef-client.md b/docs/database/includes/azure-postgresql-ef-client.md index 6cedb1b170..a97ca201c6 100644 --- a/docs/database/includes/azure-postgresql-ef-client.md +++ b/docs/database/includes/azure-postgresql-ef-client.md @@ -2,66 +2,263 @@ ms.topic: include --- -### Add Azure authenticated Npgsql client - -By default, when you call `AddAzurePostgresFlexibleServer` in your PostgreSQL hosting integration, it requires [📦 Azure.Identity](https://www.nuget.org/packages/Azure.Identity) NuGet package to enable authentication: +To get started with the .NET Aspire PostgreSQL Entity Framework Core client integration, install the [📦 Aspire.Azure.Npgsql.EntityFrameworkCore.PostgreSQL](https://www.nuget.org/packages/) NuGet package in the client-consuming project, that is, the project for the application that uses the PostgreSQL client. The .NET Aspire PostgreSQL Entity Framework Core client integration registers your desired `DbContext` subclass instances that you can use to interact with PostgreSQL. ### [.NET CLI](#tab/dotnet-cli) ```dotnetcli -dotnet add package Azure.Identity +dotnet add package Aspire.Azure.Npgsql.EntityFrameworkCore.PostgreSQL ``` ### [PackageReference](#tab/package-reference) ```xml - ``` --- -The PostgreSQL connection can be consumed using the client integration and . + + +The PostgreSQL connection can be consumed using the client integration by calling the `AddAzureNpgsqlDataSource`: + +```csharp +builder.AddAzureNpgsqlDbContext(connectionName: "postgresdb"); +``` + +> [!TIP] +> The `connectionName` parameter must match the name used when adding the PostgreSQL server resource in the app host project. -The following code snippets demonstrate how to use the class from the package to authenticate with [Microsoft Entra ID](/azure/postgresql/flexible-server/concepts-azure-ad-authentication) and retrieve a token to connect to the PostgreSQL database. The [UsePasswordProvider](https://www.npgsql.org/doc/api/Npgsql.NpgsqlDataSourceBuilder.html#Npgsql_NpgsqlDataSourceBuilder_UsePasswordProvider_System_Func_Npgsql_NpgsqlConnectionStringBuilder_System_String__System_Func_Npgsql_NpgsqlConnectionStringBuilder_System_Threading_CancellationToken_System_Threading_Tasks_ValueTask_System_String___) method is used to provide the token to the data source builder. +The preceding code snippet demonstrates how to use the `AddAzureNpgsqlDbContext` method to register an `YourDbContext` (that's [pooled for performance](/ef/core/performance/advanced-performance-topics)) instance that uses Azure authentication ([Microsoft Entra ID](/azure/postgresql/flexible-server/concepts-azure-ad-authentication)). This `"postgresdb"` connection name corresponds to a connection string configuration value. -### EF Core version 8 +After adding `YourDbContext` to the builder, you can get the `YourDbContext` instance using dependency injection. For example, to retrieve your data source object from an example service define it as a constructor parameter and ensure the `ExampleService` class is registered with the dependency injection container: ```csharp -var dsBuilder = new NpgsqlDataSourceBuilder(builder.Configuration.GetConnectionString("postgresdb")); -if (string.IsNullOrEmpty(dsBuilder.ConnectionStringBuilder.Password)) +public class ExampleService(YourDbContext context) { - var credentials = new DefaultAzureCredential(); - var tokenRequest = new TokenRequestContext(["https://ossrdbms-aad.database.windows.net/.default"]); + // Use context... +} +``` + +For more information on dependency injection, see [.NET dependency injection](/dotnet/core/extensions/dependency-injection). + +### Enrich an Npgsql database context + +You may prefer to use the standard Entity Framework method to obtain a database context and add it to the dependency injection container: + +```csharp +builder.Services.AddDbContext(options => + options.UseNpgsql(builder.Configuration.GetConnectionString("postgresdb") + ?? throw new InvalidOperationException("Connection string 'postgresdb' not found."))); +``` + +> [!NOTE] +> The connection string name that you pass to the method must match the name used when adding the PostgreSQL server resource in the app host project. For more information, see [Add PostgreSQL server resource](#add-postgresql-server-resource). + +You have more flexibility when you create the database context in this way, for example: + +- You can reuse existing configuration code for the database context without rewriting it for .NET Aspire. +- You can use Entity Framework Core interceptors to modify database operations. +- You can choose not to use Entity Framework Core context pooling, which may perform better in some circumstances. + +If you use this method, you can enhance the database context with .NET Aspire-style retries, health checks, logging, and telemetry features by calling the `EnrichAzureNpgsqlDbContext` method: + +```csharp +builder.EnrichAzureNpgsqlDbContext( + configureSettings: settings => + { + settings.DisableRetry = false; + settings.CommandTimeout = 30; + }); +``` + +The `settings` parameter is an instance of the `AzureNpgsqlEntityFrameworkCorePostgreSQLSettings` class. - dsBuilder.UsePasswordProvider( - passwordProvider: _ => credentials.GetToken(tokenRequest).Token, - passwordProviderAsync: async (_, ct) => (await credentials.GetTokenAsync(tokenRequest, ct)).Token); + + +You might also need to configure specific options of Npgsql, or register a in other ways. In this case, you do so by calling the `EnrichAzureNpgsqlDbContext` extension method, as shown in the following example: + +```csharp +var connectionString = builder.Configuration.GetConnectionString("postgresdb"); + +builder.Services.AddDbContextPool( + dbContextOptionsBuilder => dbContextOptionsBuilder.UseNpgsql(connectionString)); + +builder.EnrichAzureNpgsqlDbContext(); +``` + +#### Configuration + +The .NET Aspire Azure PostgreSQL EntityFrameworkCore Npgsql integration provides multiple options to configure the database connection based on the requirements and conventions of your project. + +##### Use a connection string + +When using a connection string defined in the `ConnectionStrings` configuration section, you provide the name of the connection string when calling `AddAzureNpgsqlDataSource`: + +```csharp +builder.AddAzureNpgsqlDbContext("postgresdb"); +``` + +The connection string is retrieved from the `ConnectionStrings` configuration section, for example, consider the following JSON configuration: + +```json +{ + "ConnectionStrings": { + "postgresdb": "Host=myserver;Database=test" + } } +``` -builder.AddNpgsqlDbContext( - "postgresdb", - configureDbContextOptions: (options) => options.UseNpgsql(dsBuilder.Build())); +For more information on how to configure the connection string, see the [Npgsql connection string documentation](https://www.npgsql.org/doc/connection-string-parameters.html). + +> [!NOTE] +> The username and password are automatically inferred from the credential provided in the settings. + +##### Use configuration providers + + + +The .NET Aspire Azure PostgreSQL EntityFrameworkCore Npgsql integration supports . It loads the `AzureNpgsqlEntityFrameworkCorePostgreSQLSettings` from configuration using the `Aspire:Npgsql:EntityFrameworkCore:PostgreSQL` key. For example, consider the following _appsettings.json_ file that configures some of the available options: + +```json +{ + "Aspire": { + "Npgsql": { + "EntityFrameworkCore": { + "PostgreSQL": { + "DisableHealthChecks": true, + "DisableTracing": true + } + } + } + } +} ``` -### EF Core version 9+ +##### Use inline delegates -With EF Core version 9, you can use the `ConfigureDataSource` method to configure the `NpgsqlDataSourceBuilder` that's used by the integration instead of building one outside of the integration and passing it in. +You can configure settings in code, by passing the `Action configureSettings` delegate to set up some or all the options inline, for example to disable health checks from code: ```csharp -builder.AddNpgsqlDbContext( +builder.AddAzureNpgsqlDbContext( "postgresdb", - configureDbContextOptions: (options) => options.UseNpgsql(npgsqlOptions => - npgsqlOptions.ConfigureDataSource(dsBuilder => - { - if (string.IsNullOrEmpty(dsBuilder.ConnectionStringBuilder.Password)) - { - var credentials = new DefaultAzureCredential(); - var tokenRequest = new TokenRequestContext(["https://ossrdbms-aad.database.windows.net/.default"]); - - dsBuilder.UsePasswordProvider( - passwordProvider: _ => credentials.GetToken(tokenRequest).Token, - passwordProviderAsync: async (_, ct) => (await credentials.GetTokenAsync(tokenRequest, ct)).Token); - } - }))); + settings => settings.DisableHealthChecks = true); +``` + +Alternatively, you can use the `EnrichAzureNpgsqlDbContext` extension method to configure the settings: + +```csharp +builder.EnrichAzureNpgsqlDbContext( + settings => settings.DisableHealthChecks = true); +``` + + + +Use the `AzureNpgsqlEntityFrameworkCorePostgreSQLSettings.Credential` property to establish a connection. If no credential is configured, the is used. + +When the connection string contains a username and password, the credential is ignored. + +##### Troubleshooting + +In the rare case that the `Username` property isn't provided and the integration can't detect it using the application's Managed Identity, Npgsql throws an exception with a message similar to the following: + +> Npgsql.PostgresException (0x80004005): 28P01: password authentication failed for user ... + +In this case you can configure the `Username` property in the connection string and use `EnrichAzureNpgsqlDbContext`, passing the connection string in `UseNpgsql`: + +```csharp +builder.Services.AddDbContextPool( + options => options.UseNpgsql(newConnectionString)); + +builder.EnrichAzureNpgsqlDbContext(); ``` + +#### Configure multiple DbContext classes + +If you want to register more than one with different configuration, you can use `$"Aspire:Npgsql:EntityFrameworkCore:PostgreSQL:{typeof(TContext).Name}"` configuration section name. The json configuration would look like: + +```json +{ + "Aspire": { + "Npgsql": { + "EntityFrameworkCore": { + "PostgreSQL": { + "ConnectionString": "", + "DisableHealthChecks": true, + "DisableTracing": true, + "AnotherDbContext": { + "ConnectionString": "", + "DisableTracing": false + } + } + } + } + } +} +``` + +Then calling the method with `AnotherDbContext` type parameter would load the settings from `Aspire:Npgsql:EntityFrameworkCore:PostgreSQL:AnotherDbContext` section. + +```csharp +builder.AddAzureNpgsqlDbContext(); +``` + +[!INCLUDE [client-integration-health-checks](../../includes/client-integration-health-checks.md)] + +By default, the .NET Aspire PostgreSQL Entity Framework Core integrations handles the following: + +- Adds the [`DbContextHealthCheck`](https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks/blob/master/src/HealthChecks.NpgSql/NpgSqlHealthCheck.cs), which calls EF Core's method. The name of the health check is the name of the `TContext` type. +- Integrates with the `/health` HTTP endpoint, which specifies all registered health checks must pass for app to be considered ready to accept traffic + +[!INCLUDE [integration-observability-and-telemetry](../../includes/integration-observability-and-telemetry.md)] + +#### Logging + +The .NET Aspire PostgreSQL Entity Framework Core integration uses the following Log categories: + +- `Microsoft.EntityFrameworkCore.ChangeTracking` +- `Microsoft.EntityFrameworkCore.Database.Command` +- `Microsoft.EntityFrameworkCore.Database.Connection` +- `Microsoft.EntityFrameworkCore.Database.Transaction` +- `Microsoft.EntityFrameworkCore.Migrations` +- `Microsoft.EntityFrameworkCore.Infrastructure` +- `Microsoft.EntityFrameworkCore.Migrations` +- `Microsoft.EntityFrameworkCore.Model` +- `Microsoft.EntityFrameworkCore.Model.Validation` +- `Microsoft.EntityFrameworkCore.Query` +- `Microsoft.EntityFrameworkCore.Update` + +#### Tracing + +The .NET Aspire PostgreSQL Entity Framework Core integration will emit the following tracing activities using OpenTelemetry: + +- `Npgsql` + +#### Metrics + +The .NET Aspire PostgreSQL Entity Framework Core integration will emit the following metrics using OpenTelemetry: + +- Microsoft.EntityFrameworkCore: + - `ec_Microsoft_EntityFrameworkCore_active_db_contexts` + - `ec_Microsoft_EntityFrameworkCore_total_queries` + - `ec_Microsoft_EntityFrameworkCore_queries_per_second` + - `ec_Microsoft_EntityFrameworkCore_total_save_changes` + - `ec_Microsoft_EntityFrameworkCore_save_changes_per_second` + - `ec_Microsoft_EntityFrameworkCore_compiled_query_cache_hit_rate` + - `ec_Microsoft_Entity_total_execution_strategy_operation_failures` + - `ec_Microsoft_E_execution_strategy_operation_failures_per_second` + - `ec_Microsoft_EntityFramew_total_optimistic_concurrency_failures` + - `ec_Microsoft_EntityF_optimistic_concurrency_failures_per_second` + +- Npgsql: + - `ec_Npgsql_bytes_written_per_second` + - `ec_Npgsql_bytes_read_per_second` + - `ec_Npgsql_commands_per_second` + - `ec_Npgsql_total_commands` + - `ec_Npgsql_current_commands` + - `ec_Npgsql_failed_commands` + - `ec_Npgsql_prepared_commands_ratio` + - `ec_Npgsql_connection_pools` + - `ec_Npgsql_multiplexing_average_commands_per_batch` + - `ec_Npgsql_multiplexing_average_write_time_per_batch` diff --git a/docs/database/includes/postgresql-app-host.md b/docs/database/includes/postgresql-app-host.md index 3144875bc3..d00aceb504 100644 --- a/docs/database/includes/postgresql-app-host.md +++ b/docs/database/includes/postgresql-app-host.md @@ -93,7 +93,7 @@ builder.AddProject() // After adding all resources, run the app... ``` -The preceding example creates a database named `app_db`. The script is executed when the database resource is created. The script is passed as a string to the `WithCreationScript` method, which is then executed in the context of the SQL Server resource. +The preceding example creates a database named `app_db`. The script is run when the database resource is created. The script is passed as a string to the `WithCreationScript` method, which is then run in the context of the PostgreSQL resource. > [!NOTE] > The connect to a database command (`\c`) isn't supported when using the creation script. From e32cb38ae4506939ec7b0f5d603be75da5d29f87 Mon Sep 17 00:00:00 2001 From: David Pine Date: Wed, 9 Apr 2025 22:09:41 -0500 Subject: [PATCH 17/27] =?UTF-8?q?.NET=20Aspire=20=F0=9F=92=9C=20Playwright?= =?UTF-8?q?=20(#2904)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * WIP * Initial bits in place * Yeah, now we're cookin'! * OMG, I'm having too much fun! * Add a few more bits * Encapsulate selector. * Even more images automated, and better coverage. * More coverage... * Added more coverage. * More images and coverage. * A bit more clean up * Added a few more bits and updated. * Fixed link issue * Fix last issue * Tracing and structured log pages * Apply suggestions from code review * Update docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/README.md --- .gitignore | 3 + .../AppHostTestFixture.cs | 42 + .../Aspire.Dashboard.ScreenCapture.csproj | 49 + .../CaptureImages.cs | 470 + .../DashboardSelectors.cs | 69 + .../Extensions/PageExtensions.cs | 204 + .../FluentDataGridSelector.cs | 49 + .../GlobalUsings.cs | 13 + .../PlaywrightFixture.cs | 32 + .../PlaywrightTestsBase.cs | 64 + .../Aspire.Dashboard.ScreenCapture/README.md | 43 + .../capture.ps1 | 18 + .../Aspire.Dashboard.ScreenCapture/capture.sh | 20 + .../AspireSample.ApiService.csproj | 17 + .../AspireSample.ApiService/Program.cs | 50 + .../Properties/launchSettings.json | 23 + .../appsettings.Development.json | 8 + .../AspireSample.ApiService/appsettings.json | 9 + .../AspireSample.AppHost.csproj | 23 + .../AspireSample.AppHost/Program.cs | 15 + .../Properties/launchSettings.json | 29 + .../appsettings.Development.json | 8 + .../AspireSample.AppHost/appsettings.json | 9 + .../AspireSample.ServiceDefaults.csproj | 22 + .../Extensions.cs | 118 + .../AspireSample.Web/AspireSample.Web.csproj | 17 + .../AspireSample.Web/Components/App.razor | 21 + .../Components/Layout/MainLayout.razor | 23 + .../Components/Layout/MainLayout.razor.css | 96 + .../Components/Layout/NavMenu.razor | 29 + .../Components/Layout/NavMenu.razor.css | 102 + .../Components/Pages/Counter.razor | 19 + .../Components/Pages/Error.razor | 38 + .../Components/Pages/Home.razor | 7 + .../Components/Pages/Weather.razor | 49 + .../AspireSample.Web/Components/Routes.razor | 6 + .../Components/_Imports.razor | 11 + .../AspireSample/AspireSample.Web/Program.cs | 43 + .../Properties/launchSettings.json | 23 + .../AspireSample.Web/WeatherApiClient.cs | 29 + .../appsettings.Development.json | 8 + .../AspireSample.Web/appsettings.json | 9 + .../AspireSample.Web/wwwroot/app.css | 56 + .../AspireSample.Web/wwwroot/favicon.png | Bin 0 -> 1148 bytes .../lib/bootstrap/dist/css/bootstrap-grid.css | 4085 ++++++ .../bootstrap/dist/css/bootstrap-grid.css.map | 1 + .../bootstrap/dist/css/bootstrap-grid.min.css | 6 + .../dist/css/bootstrap-grid.min.css.map | 1 + .../bootstrap/dist/css/bootstrap-grid.rtl.css | 4084 ++++++ .../dist/css/bootstrap-grid.rtl.css.map | 1 + .../dist/css/bootstrap-grid.rtl.min.css | 6 + .../dist/css/bootstrap-grid.rtl.min.css.map | 1 + .../bootstrap/dist/css/bootstrap-reboot.css | 597 + .../dist/css/bootstrap-reboot.css.map | 1 + .../dist/css/bootstrap-reboot.min.css | 6 + .../dist/css/bootstrap-reboot.min.css.map | 1 + .../dist/css/bootstrap-reboot.rtl.css | 594 + .../dist/css/bootstrap-reboot.rtl.css.map | 1 + .../dist/css/bootstrap-reboot.rtl.min.css | 6 + .../dist/css/bootstrap-reboot.rtl.min.css.map | 1 + .../dist/css/bootstrap-utilities.css | 5402 +++++++ .../dist/css/bootstrap-utilities.css.map | 1 + .../dist/css/bootstrap-utilities.min.css | 6 + .../dist/css/bootstrap-utilities.min.css.map | 1 + .../dist/css/bootstrap-utilities.rtl.css | 5393 +++++++ .../dist/css/bootstrap-utilities.rtl.css.map | 1 + .../dist/css/bootstrap-utilities.rtl.min.css | 6 + .../css/bootstrap-utilities.rtl.min.css.map | 1 + .../lib/bootstrap/dist/css/bootstrap.css | 12057 ++++++++++++++++ .../lib/bootstrap/dist/css/bootstrap.css.map | 1 + .../lib/bootstrap/dist/css/bootstrap.min.css | 6 + .../bootstrap/dist/css/bootstrap.min.css.map | 1 + .../lib/bootstrap/dist/css/bootstrap.rtl.css | 12030 +++++++++++++++ .../bootstrap/dist/css/bootstrap.rtl.css.map | 1 + .../bootstrap/dist/css/bootstrap.rtl.min.css | 6 + .../dist/css/bootstrap.rtl.min.css.map | 1 + .../lib/bootstrap/dist/js/bootstrap.bundle.js | 6629 +++++++++ .../bootstrap/dist/js/bootstrap.bundle.js.map | 1 + .../bootstrap/dist/js/bootstrap.bundle.min.js | 321 + .../dist/js/bootstrap.bundle.min.js.map | 1 + .../lib/bootstrap/dist/js/bootstrap.esm.js | 4762 ++++++ .../bootstrap/dist/js/bootstrap.esm.js.map | 1 + .../bootstrap/dist/js/bootstrap.esm.min.js | 321 + .../dist/js/bootstrap.esm.min.js.map | 1 + .../lib/bootstrap/dist/js/bootstrap.js | 4810 ++++++ .../lib/bootstrap/dist/js/bootstrap.js.map | 1 + .../lib/bootstrap/dist/js/bootstrap.min.js | 321 + .../bootstrap/dist/js/bootstrap.min.js.map | 1 + .../aspire-dashboard/aspire-dashboard.sln | 48 + docs/fundamentals/dashboard/explore.md | 20 +- .../media/explore/container-logs.png | Bin 108703 -> 51671 bytes .../media/explore/dashboard-help.png | Bin 129696 -> 59415 bytes .../media/explore/project-graphs.png | Bin 0 -> 43185 bytes .../media/explore/project-logs-error.png | Bin 253428 -> 168081 bytes .../dashboard/media/explore/project-logs.png | Bin 82262 -> 44812 bytes .../media/explore/projects-errors.png | Bin 88205 -> 37317 bytes .../dashboard/media/explore/projects.png | Bin 89043 -> 35487 bytes .../media/explore/resource-actions.png | Bin 104826 -> 45606 bytes .../media/explore/resource-details.png | Bin 155013 -> 52376 bytes .../media/explore/resource-started-action.png | Bin 86857 -> 38286 bytes .../media/explore/resource-stop-action.png | Bin 88415 -> 35740 bytes .../media/explore/resource-stopped-action.png | Bin 92212 -> 35434 bytes .../explore/resources-filtered-containers.png | Bin 51078 -> 34989 bytes .../media/explore/select-resource-type.png | Bin 93131 -> 48554 bytes .../explore/structured-logs-errors-view.png | Bin 109679 -> 59298 bytes .../media/explore/structured-logs-errors.png | Bin 124707 -> 47171 bytes .../explore/structured-logs-filtered.png | Bin 55678 -> 70998 bytes .../media/explore/structured-logs.png | Bin 90406 -> 64939 bytes .../explore/text-visualizer-resources.png | Bin 74283 -> 43925 bytes .../text-visualizer-selection-menu.png | Bin 102309 -> 35849 bytes .../media/explore/theme-selection-light.png | Bin 91931 -> 51448 bytes .../media/explore/theme-selection.png | Bin 88247 -> 49515 bytes .../media/explore/trace-view-filter.png | Bin 143622 -> 65794 bytes .../dashboard/media/explore/traces.png | Bin 132996 -> 65130 bytes docs/fundamentals/dashboard/overview.md | 4 +- 115 files changed, 63534 insertions(+), 7 deletions(-) create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/AppHostTestFixture.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/Aspire.Dashboard.ScreenCapture.csproj create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/CaptureImages.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/DashboardSelectors.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/Extensions/PageExtensions.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/FluentDataGridSelector.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/GlobalUsings.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/PlaywrightFixture.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/PlaywrightTestsBase.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/README.md create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/capture.ps1 create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/capture.sh create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/AspireSample.ApiService.csproj create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/Program.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/Properties/launchSettings.json create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/appsettings.Development.json create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/appsettings.json create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/AspireSample.AppHost.csproj create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/Program.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/Properties/launchSettings.json create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/appsettings.Development.json create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/appsettings.json create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ServiceDefaults/AspireSample.ServiceDefaults.csproj create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ServiceDefaults/Extensions.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/AspireSample.Web.csproj create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/App.razor create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/MainLayout.razor create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/MainLayout.razor.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/NavMenu.razor create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/NavMenu.razor.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Counter.razor create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Error.razor create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Home.razor create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Weather.razor create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Routes.razor create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/_Imports.razor create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Program.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Properties/launchSettings.json create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/WeatherApiClient.cs create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/appsettings.Development.json create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/appsettings.json create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/app.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/favicon.png create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.js create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map create mode 100644 docs/fundamentals/dashboard/automation/aspire-dashboard/aspire-dashboard.sln create mode 100644 docs/fundamentals/dashboard/media/explore/project-graphs.png diff --git a/.gitignore b/.gitignore index 0b3c331187..acae18877d 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,9 @@ _dependentPackages/ !/xml/System.IO.Log/ !/xml/System.Net.Cache/ +# Playwright dependencies +**/*/playwright-deps + # Visual Studio Code .vscode/* !.vscode/extensions.json diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/AppHostTestFixture.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/AppHostTestFixture.cs new file mode 100644 index 0000000000..c98f0ddf56 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/AppHostTestFixture.cs @@ -0,0 +1,42 @@ +namespace Aspire.Dashboard.ScreenCapture; + +public class AppHostTestFixture : IAsyncLifetime +{ + public PlaywrightFixture PlaywrightFixture { get; } = new(); + + public DistributedApplication? App { get; private set; } + + public async Task ConfigureAsync( + string[]? args = null, + Action? configureBuilder = null) where TEntryPoint : class + { + var builder = await DistributedApplicationTestingBuilder.CreateAsync( + args: args ?? [], + configureBuilder: static (options, _) => + { + options.DisableDashboard = false; + }); + + builder.Configuration["ASPIRE_ALLOW_UNSECURED_TRANSPORT"] = "true"; + + configureBuilder?.Invoke(builder); + + App = await builder.BuildAsync(); + + await App.StartAsync(); + + return App; + } + + public async Task InitializeAsync() + { + await PlaywrightFixture.InitializeAsync(); + } + + public async Task DisposeAsync() + { + await PlaywrightFixture.DisposeAsync(); + + await (App?.DisposeAsync() ?? ValueTask.CompletedTask); + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/Aspire.Dashboard.ScreenCapture.csproj b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/Aspire.Dashboard.ScreenCapture.csproj new file mode 100644 index 0000000000..05ae2016df --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/Aspire.Dashboard.ScreenCapture.csproj @@ -0,0 +1,49 @@ + + + + net9.0 + enable + enable + true + true + $(OutputPath)/playwright-deps + true + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + + + + + + <_MicrosoftPlaywrightDllPath>$(OutputPath)/Microsoft.Playwright.dll + <_MicrosoftPlaywrightScriptPath>$(OutputPath)/playwright.ps1 + + + + + + <_EnvVarsForPlaywrightInstall Include="PLAYWRIGHT_BROWSERS_PATH=$(PlaywrightDependenciesDirectory)" /> + <_EnvVarsForPlaywrightInstall Condition="'$(ContinuousIntegrationBuild)' == 'true'" Include="PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS=true" /> + + + + + + diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/CaptureImages.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/CaptureImages.cs new file mode 100644 index 0000000000..013a0bee57 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/CaptureImages.cs @@ -0,0 +1,470 @@ +namespace Aspire.Dashboard.ScreenCapture; + +[Trait("Category", "Automation")] +public class CaptureImages(AppHostTestFixture appHostTestFixture) : PlaywrightTestsBase(appHostTestFixture) +{ + [Fact, Trait("Capture", "help-images")] + public async Task CaptureHelpImages() + { + await ConfigureAsync(); + + await InteractWithPageAsync(async page => + { + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + // Click the settings cog. + await page.ClickAsync(DashboardSelectors.Header.HelpButton); + + // Draw a red border (highlight) around element. + await page.HighlightElementAsync(DashboardSelectors.Header.HelpButton); + + await page.SaveExploreScreenshotAsync("dashboard-help.png"); + }); + } + + [Fact, Trait("Capture", "project-resources")] + public async Task CaptureProjectsAndResourceImages() + { + await ConfigureAsync(); + + await InteractWithPageAsync(async page => + { + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + // Take screen capture of the projects. + await page.SaveExploreScreenshotAsync("projects.png"); + + // Hover over cache row + await page.HoverAsync(FluentDataGridSelector.Grid.Body.Row(2)); + + // Highlight stop "cache" button + await page.HighlightElementAsync(DashboardSelectors.ResourcePage.StopResource); + + // Take screen capture of the projects. + await page.SaveExploreScreenshotAsync("resource-stop-action.png"); + }, + new() { Width = 1280, Height = 400 }); + + await InteractWithPageAsync(async page => + { + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + // Click the "graph" tab + await page.ClickAsync(DashboardSelectors.ResourcePage.TabGraph); + + // Wait for animation to finish + await Task.Delay(1_000); + + // Wait for the graph to be displayed + await page.SaveExploreScreenshotAsync("project-graphs.png"); + }); + } + + [Fact, Trait("Capture", "themes")] + public async Task CaptureLightAndDarkThemeImages() + { + await ConfigureAsync(); + + await InteractWithPageAsync(async page => + { + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + // Click the settings cog. + await page.ClickAsync(DashboardSelectors.Header.SettingsButton); + + // Wait for the settings dialog to be displayed. + await page.WaitForSettingsFlyoutAsync(); + + // Take a dark-theme screen capture. + await page.SaveExploreScreenshotAsync("theme-selection.png"); + + // Change the theme to light theme. + await page.ClickAsync(DashboardSelectors.SettingsDialog.LightThemeRadio); + + // Take a light-theme screen capture. + await page.SaveExploreScreenshotAsync("theme-selection-light.png"); + + // Change theme back to dark theme. + await page.ClickAsync(DashboardSelectors.SettingsDialog.DarkThemeRadio); + }, + new() { Width = 1280, Height = 500 }); + } + + [Fact, Trait("Capture", "stop-start-resources")] + public async Task CaptureResourceStopAndStartImages() + { + await ConfigureAsync(); + + await InteractWithPageAsync(async page => + { + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + // Select the stop "cache" button + await page.ClickAsync(DashboardSelectors.ResourcePage.StopResource); + + // Wait for the notification to be displayed + await page.WaitForSelectorAsync(DashboardSelectors.Toast); + + // Wait for the start button to be displayed + await page.WaitForSelectorAsync(DashboardSelectors.ResourcePage.StartResource); + + // // Highlight 'cache "Stop" succeeded' toast and 'Exited' state cell + // await page.HighlightElementsAsync( + // DashboardSelectors.Toast, FluentDataGridSelector.Grid.Body.Row(2).Cell(2)); + + await page.SaveExploreScreenshotAsync("resource-stopped-action.png"); + }, + new() { Width = 1280, Height = 400 }); + + await InteractWithPageAsync(async page => + { + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken, false); + + // Wait for the start button to be displayed + await page.WaitForSelectorAsync(DashboardSelectors.ResourcePage.StartResource); + + // Select the start "cache" button + await page.ClickAsync(DashboardSelectors.ResourcePage.StartResource); + + // Wait for the notification to be displayed + await page.WaitForSelectorAsync(DashboardSelectors.Toast); + + var cacheStopButton = FluentDataGridSelector.Grid.Body.Row(2) + .Descendant(DashboardSelectors.ResourcePage.StopResource); + + // Wait for the stop button to be displayed. + await page.WaitForSelectorAsync(cacheStopButton); + + // // Highlight 'cache "Start" succeeded' toast and 'Running' state cell. + // await page.HighlightElementsAsync( + // DashboardSelectors.Toast, FluentDataGridSelector.Grid.Body.Row(2).Cell(2)); + + await page.SaveExploreScreenshotAsync("resource-started-action.png"); + }, + new() { Width = 1280, Height = 400 }); + } + + [Fact, Trait("Capture", "resource-text-visualizer")] + public async Task CaptureResourceTextVisualizerImages() + { + await ConfigureAsync(); + + await InteractWithPageAsync(async page => + { + // Login to the dashboard + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + var openInTextVisualizerButton = FluentDataGridSelector.Grid.Body.Row(2).Cell(4) + .Descendant("fluent-button"); + + // Hover over "open in text visualizer" + await page.HoverAsync(openInTextVisualizerButton); + + // Highlight the button + await page.HighlightElementAsync(openInTextVisualizerButton); + + await page.SaveExploreScreenshotAsync("text-visualizer-selection-menu.png"); + + // Click "open in text visualizer" + await page.ClickAsync(openInTextVisualizerButton); + + // Wait for dialog to be attached. + await page.WaitForSelectorAsync(DashboardSelectors.Dialog, new() { State = WaitForSelectorState.Attached }); + + await page.SaveExploreScreenshotAsync("text-visualizer-resources.png"); + }, + new() { Width = 1280, Height = 400 }); + } + + [Fact, Trait("Capture", "resource-details")] + public async Task CaptureResourceDetailImages() + { + await ConfigureAsync(); + + await InteractWithPageAsync(async page => + { + // Login to the dashboard + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + var apiEllipsisButton = FluentDataGridSelector.Grid.Body.Row(3).Cell(6) + .Descendant("fluent-button:nth-of-type(3)"); + await page.ClickAsync(apiEllipsisButton); + + await page.HighlightElementAsync("fluent-anchored-region"); + + await page.SaveExploreScreenshotAsync("resource-actions.png"); + + await page.ClickAsync(DashboardSelectors.ResourcePage.ViewDetailsOption); + await page.ClickAsync(DashboardSelectors.ResourcePage.SplitPanel); + + await page.AdjustSplitPanelsGridTemplateAsync(); + await page.ClickAndDragShadowRootElementAsync( + DashboardSelectors.SplitPanels, DashboardSelectors.MedianId, (0, 20)); + await page.RedactElementTextAsync(DashboardSelectors.ResourcePage.ResourceDetailsProjectPath); + + await page.ClickAsync(apiEllipsisButton); + await page.HoverAsync(DashboardSelectors.ResourcePage.ViewDetailsOption); + await page.HighlightElementAsync(DashboardSelectors.ResourcePage.ViewDetailsOption); + + await page.SaveExploreScreenshotAsync("resource-details.png"); + }, + new() { Width = 1280, Height = 800 }); + } + + [Fact, Trait("Capture", "resource-filtering")] + public async Task CaptureResourceFilteringImages() + { + await ConfigureAsync(); + + await InteractWithPageAsync(async page => + { + // Login to the dashboard + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + await page.ClickAsync(DashboardSelectors.ResourcePage.FilterButton); + + await page.HighlightElementAsync(DashboardSelectors.ResourcePage.FilterDiv); + + await page.SaveExploreScreenshotAsync("select-resource-type.png"); + }, + new() { Width = 1280, Height = 550 }); + + await InteractWithPageAsync(async page => + { + // Login to the dashboard + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + await page.ClickAsync(DashboardSelectors.ResourcePage.FilterButton); + await page.ClickAsync("#resource-types > fluent-checkbox:nth-of-type(1)"); + await page.ClickAsync("#resource-types > fluent-checkbox:nth-of-type(2)"); + await page.ClickAsync(DashboardSelectors.TopHeader, new() { Force = true }); + + var cacheEllipsisButton = FluentDataGridSelector.Grid.Body.Row(2).Cell(6) + .Descendant("fluent-button:nth-of-type(3)"); + await page.ClickAsync(cacheEllipsisButton); + + await page.ClickAsync(DashboardSelectors.ResourcePage.ViewDetailsOption); + await page.ClickAsync(DashboardSelectors.ResourcePage.SplitPanel); + + await page.AdjustSplitPanelsGridTemplateAsync(); + + await page.ClickAsync(DashboardSelectors.ResourcePage.FilterButton); + + await page.SaveExploreScreenshotAsync("resources-filtered-containers.png"); + }, + new() { Width = 1280, Height = 630 }); + } + + [Fact, Trait("Capture", "resource-errors")] + public async Task CaptureResourcesWithErrorsImages() + { + await ConfigureAsync([ "API_THROWS_EXCEPTION=true" ]); + + await InteractWithPageAsync(async page => + { + // Login to the dashboard + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + // Get the weather web frontend URL + var url = await page.GetResourceEndpointAsync(); + var webPage = await page.Context.NewPageAsync(); + + await webPage.GotoAsync($"{url}/weather", new() + { + WaitUntil = WaitUntilState.NetworkIdle + }); + + await Task.Delay(7_500); + + await page.BringToFrontAsync(); + await page.SaveExploreScreenshotAsync("projects-errors.png"); + + // Click the api "errors" button + var apiErrorButton = FluentDataGridSelector.Grid.Body.Row(4).Cell(2) + .Descendant("> div > fluent-anchor a"); + await page.ClickAsync(apiErrorButton); + + // Click the first action button + var firstActionButton = FluentDataGridSelector.Grid.Body.Row(3).Cell(6) + .Descendant("fluent-button"); + await page.ClickAsync(firstActionButton); + + await Task.Delay(1_500); + + await page.HighlightElementAsync("fluent-anchored-region"); + + await page.SaveExploreScreenshotAsync("structured-logs-errors.png"); + }, + new() { Width = 1280, Height = 460 }); + } + + [Fact, Trait("Capture", "structured-logs-errors")] + public async Task CaptureStructuredLogsErrorsImages() + { + await ConfigureAsync(["API_THROWS_EXCEPTION=true"]); + + await InteractWithPageAsync(async page => + { + // Login to the dashboard + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + // Get the weather web frontend URL + var url = await page.GetResourceEndpointAsync(); + var webPage = await page.Context.NewPageAsync(); + + await webPage.GotoAsync($"{url}/weather", new() + { + WaitUntil = WaitUntilState.NetworkIdle + }); + + await Task.Delay(1_500); + + await page.BringToFrontAsync(); + + var apiConsoleLogs = FluentDataGridSelector.Grid.Body.Row(3)//.Cell(7) + .Descendant("""fluent-button[title="Console logs"]"""); + await page.ClickAsync(apiConsoleLogs); + + await Task.Delay(1000); + + await page.SaveExploreScreenshotAsync("project-logs-error.png"); + + await page.ClickAsync(DashboardSelectors.Nav.Resources); + + // Click the api "errors" button + var apiErrorButton = FluentDataGridSelector.Grid.Body.Row(4).Cell(2) + .Descendant("> div > fluent-anchor a"); + await page.ClickAsync(apiErrorButton); + + // Click the first actions button + var firstActionButton = FluentDataGridSelector.Grid.Body.Row(2).Cell(6) + .Descendant("fluent-button"); + await page.ClickAsync(firstActionButton); + + await page.ClickAsync(DashboardSelectors.ResourcePage.ViewDetailsOption); + await page.ClickAsync(DashboardSelectors.ResourcePage.SplitPanel); + + await page.AdjustSplitPanelsGridTemplateAsync(); + + await page.SaveExploreScreenshotAsync("structured-logs-errors-view.png"); + }, + new() { Width = 1280, Height = 960 }); + } + + [Fact, Trait("Capture", "console-logs")] + public async Task CaptureConsoleLogsOutputImages() + { + await ConfigureAsync(); + + await InteractWithPageAsync(async page => + { + // Login to the dashboard + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + var apiConsoleLogs = FluentDataGridSelector.Grid.Body.Row(3)//.Cell(7) + .Descendant("""fluent-button[title="Console logs"]"""); + await page.ClickAsync(apiConsoleLogs); + + await Task.Delay(1_000); + + await page.RedactElementTextAsync("#logContainer > div:nth-child(11) > div > span > span.log-content"); + + await page.SaveExploreScreenshotAsync("project-logs.png"); + + // Select "cache" dropdown + await page.ClickAsync("fluent-select.resource-list"); + + await page.ClickAsync("""fluent-option[value="cache"]"""); + + await Task.Delay(1_000); + + await page.SaveExploreScreenshotAsync("container-logs.png"); + }, + new() { Width = 1280, Height = 400 }); + } + + [Fact, Trait("Capture", "structured-logs")] + public async Task CaptureStructuredLogsImages() + { + await ConfigureAsync(); + + await InteractWithPageAsync(async page => + { + // Login to the dashboard + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + // Get the weather web frontend URL + var url = await page.GetResourceEndpointAsync(); + var webPage = await page.Context.NewPageAsync(); + + await webPage.GotoAsync($"{url}/weather", new() + { + WaitUntil = WaitUntilState.NetworkIdle + }); + + await Task.Delay(1_500); + + await page.BringToFrontAsync(); + + await page.ClickAsync(DashboardSelectors.Nav.Structured); + + await Task.Delay(1000); + + await page.SaveExploreScreenshotAsync("structured-logs.png"); + + // Click the add filters button + await page.ClickAsync("""fluent-button[aria-label="Add filter"]"""); + + await page.ApplyInlineStyleAsync("form", + ("border", "3px solid red"), ("padding", "0.2rem 1rem")); + + await page.SaveExploreScreenshotAsync("structured-logs-filtered.png"); + }); + } + + [Fact, Trait("Capture", "trace-logs")] + public async Task CaptureTraceLogsImages() + { + await ConfigureAsync(); + + await InteractWithPageAsync(async page => + { + // Login to the dashboard + await page.LoginAndWaitForRunningResourcesAsync(DashboardLoginToken); + + // Get the weather web frontend URL + var url = await page.GetResourceEndpointAsync(); + var webPage = await page.Context.NewPageAsync(); + + await webPage.GotoAsync($"{url}/weather", new() + { + WaitUntil = WaitUntilState.NetworkIdle + }); + + // Reload to force output cache + await webPage.ReloadAsync(); + await webPage.ReloadAsync(); + + // Delay beyond output cache, and invalidate then reload. + await Task.Delay(2_250); + await webPage.ReloadAsync(); + + await page.BringToFrontAsync(); + + await page.ClickAsync(DashboardSelectors.Nav.Traces); + + await Task.Delay(1000); + + await page.SaveExploreScreenshotAsync("traces.png"); + + var filterInput = """[placeholder="Filter..."]"""; + var filter = page.Locator($"{filterInput} #control"); + await filter.FillAsync("weather"); + await page.HighlightElementAsync(filterInput); + + await Task.Delay(250); + + await page.SaveExploreScreenshotAsync("trace-view-filter.png"); + }); + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/DashboardSelectors.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/DashboardSelectors.cs new file mode 100644 index 0000000000..3ca209b51e --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/DashboardSelectors.cs @@ -0,0 +1,69 @@ +namespace Aspire.Dashboard.ScreenCapture; + +internal static class DashboardSelectors +{ + public const string Toast = ".fluent-toast"; + + public const string Dialog = "fluent-dialog"; + + public const string TopHeader = ".header"; + + public const string SplitPanels = "split-panels"; + + public const string MedianId = "#median"; + + internal static class Nav + { + public const string Resources = $"""div.fluent-appbar-item[title="{nameof(Resources)}"] a"""; + + public const string Console = $"""div.fluent-appbar-item[title="{nameof(Console)}"] a"""; + + public const string Structured = $"""div.fluent-appbar-item[title="{nameof(Structured)}"] a"""; + + public const string Traces = $"""div.fluent-appbar-item[title="{nameof(Traces)}"] a"""; + + public const string Metrics = $"""div.fluent-appbar-item[title="{nameof(Metrics)}"] a"""; + } + + internal static class Header + { + public const string SettingsButton = """fluent-button[title="Settings"]"""; + + public const string HelpButton = """fluent-button[title="Help"]"""; + } + + internal static class HelpDialog + { + public const string HelpDialogId = "#HelpDialog"; + } + + internal static class SettingsDialog + { + public const string SettingsDialogHeading = """#SettingsDialog h4"""; + + public const string LightThemeRadio = """fluent-radio[current-value="Light"]"""; + + public const string DarkThemeRadio = """fluent-radio[current-value="Dark"]"""; + } + + internal static class ResourcePage + { + public const string CacheResource = "cache"; + public const string ApiResource = "apiservice"; + public const string WebResource = "webfrontend"; + + public const string TabTable = "#tab-Table"; + public const string TabGraph = "#tab-Graph"; + + public const string FilterButton = "#resourceFilterButton"; + public const string FilterDiv = """fluent-anchored-region[anchor="resourceFilterButton"]"""; + + public const string ViewDetailsOption = """fluent-anchored-region fluent-menu-item:nth-child(1)"""; + + public const string StopResource = """fluent-button[title="Stop resource"]"""; + public const string StartResource = """fluent-button[title="Start resource"]"""; + public const string SplitPanel = """fluent-button[title="Split horizontal"]"""; + + public const string ResourceDetailsProjectPath = """fluent-accordion-item [title^="C:"]:last-of-type"""; + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/Extensions/PageExtensions.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/Extensions/PageExtensions.cs new file mode 100644 index 0000000000..d55bb44824 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/Extensions/PageExtensions.cs @@ -0,0 +1,204 @@ +global using InlineStyle = (string PropertyName, string Style); + +namespace Aspire.Dashboard.ScreenCapture.Extensions; + +internal static class PageExtensions +{ + private static readonly JsonSerializerOptions s_options = new(JsonSerializerDefaults.Web); + private static readonly string s_relativeMediaPath = "../../../../../../media"; + + public static async Task SaveExploreScreenshotAsync( + this IPage page, string fileName, Clip? clip = null) + { + await page.ScreenshotAsync(new() + { + Clip = clip, + Path = $"{s_relativeMediaPath}/explore/{fileName}" + }); + } + + public static async Task GetResourceEndpointAsync(this IPage page, int row = 4) + { + var endpoint = FluentDataGridSelector.Grid.Body.Row(row).Cell(5).Descendant("> div > div:nth-child(1) > a"); + var url = await page.Locator(endpoint).TextContentAsync(); + + Assert.NotNull(url); + + return url; + } + + public static async Task RedactElementTextAsync(this IPage page, string selector) + { + await page.WaitForSelectorAsync(selector); + + await page.EvaluateAsync($$""" + const el = document.querySelector('{{selector}}'); + if (el) { + const text = el.textContent; + el.textContent = text.replace(/(^\S+)|(\S+$)/g, '█'); + } else { + console.error('Element not found: {{selector}}'); + } + """); + } + + public static async Task BlurElementTextAsync(this IPage page, string selector) + { + await page.WaitForSelectorAsync(selector); + + await page.EvaluateAsync($$""" + const el = document.querySelector('{{selector}}'); + if (el) { + el.style.textDecoration = 'line-through'; + el.style.filter = 'blur(.2rem)'; + } else { + console.error('Element not found: {{selector}}'); + } + """); + } + + public static async Task AdjustSplitPanelsGridTemplateAsync( + this IPage page, string selector = "split-panels", string gridTemplateRows = "0.25fr 5px 0.75fr") + { + await page.EvaluateAsync($$""" + const el = document.querySelector('{{selector}}'); + if (el) { + el.style.gridTemplateRows="{{gridTemplateRows}}"; + } else { + console.error('Element not found: {{selector}}'); + } + """); + } + + public static async Task ClickAndDragShadowRootElementAsync( + this IPage page, string hostSelector, string shadowSelector, MouseMovement mouseMovement) + { + var shadowHost = page.Locator(hostSelector); + + var source = await shadowHost.EvaluateHandleAsync( + $"el => el.shadowRoot.querySelector('{shadowSelector}')"); + + var element = source.AsElement(); + if (element is null) + { + return; + } + + // Hover, click, and drag + await element.HoverAsync(); + await page.Mouse.DownAsync(); + + var (x, y) = mouseMovement; + + await page.Mouse.MoveAsync(x, y); + await page.Mouse.UpAsync(); + } + + public static async Task ApplyInlineStyleAsync(this IPage page, string selector, params IEnumerable styles) + { + await page.WaitForSelectorAsync(selector); + + await page.EvaluateAsync($$""" + const el = document.querySelector('{{selector}}'); + if (el) { + {{string.Join("", styles.Select(s => $"el.style.{s.PropertyName} = '{s.Style}';"))}} + } else { + console.error('Element not found: {{selector}}'); + } + """); + } + + public static async Task HighlightElementAsync(this IPage page, string selector) + { + await page.WaitForSelectorAsync(selector); + + await page.EvaluateAsync($$""" + const el = document.querySelector('{{selector}}'); + if (el) { + el.style.borderRadius = 0; + el.style.border = '3px solid red'; + } else { + console.error('Element not found: {{selector}}'); + } + """); + } + + public static async Task HighlightElementsAsync(this IPage page, params string[] selectors) + { + var array = JsonSerializer.Serialize(selectors, s_options); + + foreach (var selector in selectors) + { + await page.WaitForSelectorAsync(selector); + } + + await page.EvaluateAsync($$""" + for (const selector of {{array}}) { + const el = document.querySelector(selector); + if (el) { + el.style.borderRadius = 0; + el.style.border = '3px solid red'; + } else { + console.error('Element not found: ' + selector); + } + } + """); + } + + public static async Task LoginAsync(this IPage page, string token) + { + var response = await page.GotoAsync($"/login?t={token}"); + + Assert.NotNull(response); + Assert.True(response.Ok, $"Failed to navigate to login page: {response.Status}"); + + await Assertions.Expect(page).ToHaveURLAsync("/"); + } + + public static async Task LoginAndWaitForRunningResourcesAsync(this IPage page, string token, bool waitForRunning = true) + { + await page.LoginAsync(token); + + if (waitForRunning) + { + var cacheStateSpan = FluentDataGridSelector.Grid.Body.Row(2).Cell(2).Descendant("> div > span"); + var apiStateSpan = FluentDataGridSelector.Grid.Body.Row(3).Cell(2).Descendant("> div > span"); + var webStateSpan = FluentDataGridSelector.Grid.Body.Row(4).Cell(2).Descendant("> div > span"); + + var cache = page.Locator(cacheStateSpan); + var api = page.Locator(apiStateSpan); + var web = page.Locator(webStateSpan); + + var options = new LocatorAssertionsToHaveTextOptions + { + Timeout = 17_500 + }; + + await Assertions.Expect(api).ToHaveTextAsync("Running", options); + await Assertions.Expect(web).ToHaveTextAsync("Running", options); + await Assertions.Expect(cache).ToHaveTextAsync("Running", options); + } + } + + public static async Task WaitForSettingsFlyoutAsync(this IPage page, bool trimVersionToStable = true) + { + await page.WaitForSelectorAsync(DashboardSelectors.SettingsDialog.SettingsDialogHeading); + + if (trimVersionToStable) + { + await page.EvaluateAsync(""" + const el = document.querySelector('#SettingsDialog .version'); + if (el) { + el.innerText = el.innerText.substring(0, el.innerText.indexOf('-')); + } else { + console.error('Element not found: #SettingsDialog .version'); + } + """); + } + } +} + +internal readonly record struct MouseMovement(int X, int Y) +{ + public static implicit operator MouseMovement((int x, int y) tuple) => new(tuple.x, tuple.y); +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/FluentDataGridSelector.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/FluentDataGridSelector.cs new file mode 100644 index 0000000000..0832a70f64 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/FluentDataGridSelector.cs @@ -0,0 +1,49 @@ +namespace Aspire.Dashboard.ScreenCapture; + +public class FluentDataGridSelector(string initialSelector) +{ + private readonly StringBuilder _selector = new(initialSelector); + + public static FluentDataGridSelector Grid => new(".fluent-data-grid"); + + public FluentDataGridSelector Head + { + get + { + _selector.Append(" thead"); + return this; + } + } + + public FluentDataGridSelector Body + { + get + { + _selector.Append(" tbody"); + return this; + } + } + + public FluentDataGridSelector Row(int index) + { + _selector.AppendFormat(" tr:nth-child({0})", index); + return this; + } + + public FluentDataGridSelector Cell(int index) + { + _selector.AppendFormat(" td:nth-child({0})", index); + return this; + } + + public FluentDataGridSelector Descendant(string selector) + { + _selector.AppendFormat(" {0}", selector); + return this; + } + + public override string ToString() => _selector.ToString(); + + public static implicit operator string(FluentDataGridSelector fluentDataGridSelector) => + fluentDataGridSelector.ToString(); +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/GlobalUsings.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/GlobalUsings.cs new file mode 100644 index 0000000000..7d15ec9e82 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/GlobalUsings.cs @@ -0,0 +1,13 @@ +global using System.Diagnostics; +global using System.Text; +global using System.Text.Json; + +global using Aspire.Dashboard.ScreenCapture.Extensions; +global using Aspire.Hosting; +global using Aspire.Hosting.Testing; + +global using Microsoft.Playwright; + +global using Xunit; + +global using SampleAppHost = Projects.AspireSample_AppHost; diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/PlaywrightFixture.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/PlaywrightFixture.cs new file mode 100644 index 0000000000..7d17db62cb --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/PlaywrightFixture.cs @@ -0,0 +1,32 @@ +namespace Aspire.Dashboard.ScreenCapture; + +public class PlaywrightFixture : IAsyncLifetime +{ + private static bool IsDebugging => Debugger.IsAttached; + private static bool IsHeadless => IsDebugging is false; + + private IPlaywright? _playwright; + + public IBrowser Browser { get; set; } = null!; + + public async Task InitializeAsync() + { + Assertions.SetDefaultExpectTimeout(10_000); + + _playwright = await Playwright.CreateAsync(); + + var options = new BrowserTypeLaunchOptions + { + Headless = IsHeadless + }; + + Browser = await _playwright.Chromium.LaunchAsync(options).ConfigureAwait(false); + } + + public async Task DisposeAsync() + { + await Browser.CloseAsync(); + + _playwright?.Dispose(); + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/PlaywrightTestsBase.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/PlaywrightTestsBase.cs new file mode 100644 index 0000000000..e598998daf --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/PlaywrightTestsBase.cs @@ -0,0 +1,64 @@ +namespace Aspire.Dashboard.ScreenCapture; + +public class PlaywrightTestsBase(AppHostTestFixture appHostTestFixture) + : IClassFixture, IAsyncDisposable + where TDashboardServerFixture : AppHostTestFixture +{ + public AppHostTestFixture AppHostTestFixture { get; } = appHostTestFixture; + public PlaywrightFixture PlaywrightFixture { get; } = appHostTestFixture.PlaywrightFixture; + public string? DashboardUrl { get; private set; } + public string DashboardLoginToken { get; private set; } = ""; + + private IBrowserContext? _context; + + public Task ConfigureAsync( + string[]? args = null, + Action? configureBuilder = null) where TEntryPoint : class => + AppHostTestFixture.ConfigureAsync(args, builder => + { + var aspNetCoreUrls = builder.Configuration["ASPNETCORE_URLS"]; + var urls = aspNetCoreUrls is not null ? aspNetCoreUrls.Split(";") : []; + + DashboardUrl = urls.FirstOrDefault(); + DashboardLoginToken = builder.Configuration["AppHost:BrowserToken"] ?? ""; + + configureBuilder?.Invoke(builder); + }); + + public async Task InteractWithPageAsync(Func test, ViewportSize? size = null) + { + var page = await CreateNewPageAsync(size); + + try + { + await test(page); + } + finally + { + await page.CloseAsync(); + } + } + + private async Task CreateNewPageAsync(ViewportSize? size = null) + { + _context = await PlaywrightFixture.Browser.NewContextAsync(new BrowserNewContextOptions + { + IgnoreHTTPSErrors = true, + ColorScheme = ColorScheme.Dark, + ViewportSize = size, + BaseURL = DashboardUrl + }); + + return await _context.NewPageAsync(); + } + + async ValueTask IAsyncDisposable.DisposeAsync() + { + GC.SuppressFinalize(this); + + if (_context is not null) + { + await _context.DisposeAsync(); + } + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/README.md b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/README.md new file mode 100644 index 0000000000..254386d639 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/README.md @@ -0,0 +1,43 @@ +--- +title: Screen capture automation +description: Details pertaining to the capturing of dashboard screens. +--- + +# .NET Aspire Dashboard: Screen Capture Automation + +This solution contains the following projects: + +- **Aspire.Dashboard.ScreenCapture**: This project contains the screen capture tests for the .NET Aspire Dashboard. It uses Playwright to automate the browser and capture images of the dashboard. +- **AspireSample.AppHost**: This project contains the .NET Aspire app host, which orchestrates the an API and Web frontend. +- **AspireSample.ApiService**: This is an ASP.NET Core Minimal API service that provides a REST API for weather forecasts. +- **AspireSample.Web**: This is a Blazor app that provides a web frontend. +- **AspireSample.ServiceDefaults**: This project contains the default service settings for the API and Web apps. + +The _ScreenCapture_ project defines xUnit tests are simply a harness for leveraging Playwright and .NET Aspire together to automate the maintenance of images. Run the following tests individually to generate the corresponding images: + +``` +dotnet test --filter Capture=help-images +dotnet test --filter Capture=project-resources +dotnet test --filter Capture=themes +dotnet test --filter Capture=stop-start-resources +dotnet test --filter Capture=resource-text-visualizer +dotnet test --filter Capture=resource-details +dotnet test --filter Capture=resource-filtering +dotnet test --filter Capture=resource-errors +dotnet test --filter Capture=structured-logs-errors +dotnet test --filter Capture=structured-logs +dotnet test --filter Capture=trace-logs +``` + +Each `Fact` (test) has a "Capture" trait with a specific value to help indicate what area of the dashboard is being captured. + +> [!TIP] +> There's a script to capture all of these images at the root of the _Aspire.Dashboard.ScreenCapture_ directory: +> +> - **Bash**: `./capture.sh` +> - **PowerShell**: `./capture.ps1` + +Running this script took about 2 minutes and 20 seconds on my machine. I haven't considered running these as part of a build system. + +> [!NOTE] +> These tests are not written to be run in parallel. While it's not ideal and an opportunity for future improvement, it's easier for now to just run them individually. diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/capture.ps1 b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/capture.ps1 new file mode 100644 index 0000000000..fee515bd32 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/capture.ps1 @@ -0,0 +1,18 @@ +$filters = @( + "help-images", + "project-resources", + "themes", + "stop-start-resources", + "resource-text-visualizer", + "resource-details", + "resource-filtering", + "resource-errors", + "structured-logs-errors", + "structured-logs", + "trace-logs" +) + +foreach ($filter in $filters) { + Write-Host "Running tests for Capture=$filter..." + dotnet test --filter "Capture=$filter" +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/capture.sh b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/capture.sh new file mode 100644 index 0000000000..781613712b --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture/capture.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +filters=( + "help-images" + "project-resources" + "themes" + "stop-start-resources" + "resource-text-visualizer" + "resource-details" + "resource-filtering" + "resource-errors" + "structured-logs-errors", + "structured-logs", + "trace-logs" +) + +for filter in "${filters[@]}"; do + echo "Running tests for Capture=$filter..." + dotnet test --filter "Capture=$filter" +done diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/AspireSample.ApiService.csproj b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/AspireSample.ApiService.csproj new file mode 100644 index 0000000000..68e46ed8b5 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/AspireSample.ApiService.csproj @@ -0,0 +1,17 @@ + + + + net9.0 + enable + enable + + + + + + + + + + + diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/Program.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/Program.cs new file mode 100644 index 0000000000..1b1c2c80d4 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/Program.cs @@ -0,0 +1,50 @@ +var builder = WebApplication.CreateBuilder(args); + +// Add service defaults & Aspire client integrations. +builder.AddServiceDefaults(); + +// Add services to the container. +builder.Services.AddProblemDetails(); + +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +app.UseExceptionHandler(); + +if (app.Environment.IsDevelopment()) +{ + app.MapOpenApi(); +} + +string[] summaries = ["Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"]; + +app.MapGet("/weatherforecast", () => +{ + if (builder.Configuration.GetValue("THROW_EXCEPTION")) + { + throw new ApplicationException("Error processing request"); + } + + var forecast = Enumerable.Range(1, 5).Select(index => + new WeatherForecast + ( + DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + Random.Shared.Next(-20, 55), + summaries[Random.Shared.Next(summaries.Length)] + )) + .ToArray(); + return forecast; +}) +.WithName("GetWeatherForecast"); + +app.MapDefaultEndpoints(); + +app.Run(); + +record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) +{ + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/Properties/launchSettings.json b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/Properties/launchSettings.json new file mode 100644 index 0000000000..11b046054c --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:5474", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "https://localhost:7395;http://localhost:5474", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/appsettings.Development.json b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/appsettings.Development.json new file mode 100644 index 0000000000..0c208ae918 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/appsettings.json b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/appsettings.json new file mode 100644 index 0000000000..10f68b8c8b --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/AspireSample.AppHost.csproj b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/AspireSample.AppHost.csproj new file mode 100644 index 0000000000..3e78e649bc --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/AspireSample.AppHost.csproj @@ -0,0 +1,23 @@ + + + + + + Exe + net9.0 + enable + enable + b43b41f1-2fc1-4e84-94d2-1eb3dd0f3c10 + + + + + + + + + + + + + diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/Program.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/Program.cs new file mode 100644 index 0000000000..2a9215986e --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/Program.cs @@ -0,0 +1,15 @@ +var builder = DistributedApplication.CreateBuilder(args); + +var cache = builder.AddRedis("cache"); + +var apiService = builder.AddProject("apiservice") + .WithEnvironment("THROW_EXCEPTION", builder.Configuration["API_THROWS_EXCEPTION"]); + +builder.AddProject("webfrontend") + .WithExternalHttpEndpoints() + .WithReference(cache) + .WaitFor(cache) + .WithReference(apiService) + .WaitFor(apiService); + +builder.Build().Run(); diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/Properties/launchSettings.json b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/Properties/launchSettings.json new file mode 100644 index 0000000000..5e5449da0f --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/Properties/launchSettings.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:17009;http://localhost:15010", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21053", + "DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22079" + } + }, + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:15010", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development", + "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19276", + "DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20169" + } + } + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/appsettings.Development.json b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/appsettings.Development.json new file mode 100644 index 0000000000..0c208ae918 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/appsettings.json b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/appsettings.json new file mode 100644 index 0000000000..31c092aa45 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "Aspire.Hosting.Dcp": "Warning" + } + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ServiceDefaults/AspireSample.ServiceDefaults.csproj b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ServiceDefaults/AspireSample.ServiceDefaults.csproj new file mode 100644 index 0000000000..5b2a1b5947 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ServiceDefaults/AspireSample.ServiceDefaults.csproj @@ -0,0 +1,22 @@ + + + + net9.0 + enable + enable + true + + + + + + + + + + + + + + + diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ServiceDefaults/Extensions.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ServiceDefaults/Extensions.cs new file mode 100644 index 0000000000..68acbcdc77 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ServiceDefaults/Extensions.cs @@ -0,0 +1,118 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Diagnostics.HealthChecks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.HealthChecks; +using Microsoft.Extensions.Logging; +using OpenTelemetry; +using OpenTelemetry.Metrics; +using OpenTelemetry.Trace; + +namespace Microsoft.Extensions.Hosting; + +// Adds common .NET Aspire services: service discovery, resilience, health checks, and OpenTelemetry. +// This project should be referenced by each service project in your solution. +// To learn more about using this project, see https://aka.ms/dotnet/aspire/service-defaults +public static class Extensions +{ + public static TBuilder AddServiceDefaults(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.ConfigureOpenTelemetry(); + + builder.AddDefaultHealthChecks(); + + builder.Services.AddServiceDiscovery(); + + builder.Services.ConfigureHttpClientDefaults(http => + { + // Turn on resilience by default + http.AddStandardResilienceHandler(); + + // Turn on service discovery by default + http.AddServiceDiscovery(); + }); + + // Uncomment the following to restrict the allowed schemes for service discovery. + // builder.Services.Configure(options => + // { + // options.AllowedSchemes = ["https"]; + // }); + + return builder; + } + + public static TBuilder ConfigureOpenTelemetry(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.Logging.AddOpenTelemetry(logging => + { + logging.IncludeFormattedMessage = true; + logging.IncludeScopes = true; + }); + + builder.Services.AddOpenTelemetry() + .WithMetrics(metrics => + { + metrics.AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddRuntimeInstrumentation(); + }) + .WithTracing(tracing => + { + tracing.AddSource(builder.Environment.ApplicationName) + .AddAspNetCoreInstrumentation() + // Uncomment the following line to enable gRPC instrumentation (requires the OpenTelemetry.Instrumentation.GrpcNetClient package) + //.AddGrpcClientInstrumentation() + .AddHttpClientInstrumentation(); + }); + + builder.AddOpenTelemetryExporters(); + + return builder; + } + + private static TBuilder AddOpenTelemetryExporters(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + var useOtlpExporter = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]); + + if (useOtlpExporter) + { + builder.Services.AddOpenTelemetry().UseOtlpExporter(); + } + + // Uncomment the following lines to enable the Azure Monitor exporter (requires the Azure.Monitor.OpenTelemetry.AspNetCore package) + //if (!string.IsNullOrEmpty(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"])) + //{ + // builder.Services.AddOpenTelemetry() + // .UseAzureMonitor(); + //} + + return builder; + } + + public static TBuilder AddDefaultHealthChecks(this TBuilder builder) where TBuilder : IHostApplicationBuilder + { + builder.Services.AddHealthChecks() + // Add a default liveness check to ensure app is responsive + .AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]); + + return builder; + } + + public static WebApplication MapDefaultEndpoints(this WebApplication app) + { + // Adding health checks endpoints to applications in non-development environments has security implications. + // See https://aka.ms/dotnet/aspire/healthchecks for details before enabling these endpoints in non-development environments. + if (app.Environment.IsDevelopment()) + { + // All health checks must pass for app to be considered ready to accept traffic after starting + app.MapHealthChecks("/health"); + + // Only health checks tagged with the "live" tag must pass for app to be considered alive + app.MapHealthChecks("/alive", new HealthCheckOptions + { + Predicate = r => r.Tags.Contains("live") + }); + } + + return app; + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/AspireSample.Web.csproj b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/AspireSample.Web.csproj new file mode 100644 index 0000000000..e59ef63ab9 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/AspireSample.Web.csproj @@ -0,0 +1,17 @@ + + + + net9.0 + enable + enable + + + + + + + + + + + diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/App.razor b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/App.razor new file mode 100644 index 0000000000..34f01ab099 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/App.razor @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/MainLayout.razor b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/MainLayout.razor new file mode 100644 index 0000000000..5a24bb1371 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/MainLayout.razor @@ -0,0 +1,23 @@ +@inherits LayoutComponentBase + +

+ + +
+ + +
+ @Body +
+
+
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/MainLayout.razor.css b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/MainLayout.razor.css new file mode 100644 index 0000000000..038baf178b --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/MainLayout.razor.css @@ -0,0 +1,96 @@ +.page { + position: relative; + display: flex; + flex-direction: column; +} + +main { + flex: 1; +} + +.sidebar { + background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); +} + +.top-row { + background-color: #f7f7f7; + border-bottom: 1px solid #d6d5d5; + justify-content: flex-end; + height: 3.5rem; + display: flex; + align-items: center; +} + + .top-row ::deep a, .top-row ::deep .btn-link { + white-space: nowrap; + margin-left: 1.5rem; + text-decoration: none; + } + + .top-row ::deep a:hover, .top-row ::deep .btn-link:hover { + text-decoration: underline; + } + + .top-row ::deep a:first-child { + overflow: hidden; + text-overflow: ellipsis; + } + +@media (max-width: 640.98px) { + .top-row { + justify-content: space-between; + } + + .top-row ::deep a, .top-row ::deep .btn-link { + margin-left: 0; + } +} + +@media (min-width: 641px) { + .page { + flex-direction: row; + } + + .sidebar { + width: 250px; + height: 100vh; + position: sticky; + top: 0; + } + + .top-row { + position: sticky; + top: 0; + z-index: 1; + } + + .top-row.auth ::deep a:first-child { + flex: 1; + text-align: right; + width: 0; + } + + .top-row, article { + padding-left: 2rem !important; + padding-right: 1.5rem !important; + } +} + +#blazor-error-ui { + background: lightyellow; + bottom: 0; + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); + display: none; + left: 0; + padding: 0.6rem 1.25rem 0.7rem 1.25rem; + position: fixed; + width: 100%; + z-index: 1000; +} + + #blazor-error-ui .dismiss { + cursor: pointer; + position: absolute; + right: 0.75rem; + top: 0.5rem; + } diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/NavMenu.razor b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/NavMenu.razor new file mode 100644 index 0000000000..e405b7a7c0 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/NavMenu.razor @@ -0,0 +1,29 @@ + + + + + diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/NavMenu.razor.css b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/NavMenu.razor.css new file mode 100644 index 0000000000..1338edb61e --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Layout/NavMenu.razor.css @@ -0,0 +1,102 @@ +.navbar-toggler { + appearance: none; + cursor: pointer; + width: 3.5rem; + height: 2.5rem; + color: white; + position: absolute; + top: 0.5rem; + right: 1rem; + border: 1px solid rgba(255, 255, 255, 0.1); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1); +} + +.navbar-toggler:checked { + background-color: rgba(255, 255, 255, 0.5); +} + +.top-row { + min-height: 3.5rem; + background-color: rgba(0,0,0,0.4); +} + +.navbar-brand { + font-size: 1.1rem; +} + +.bi { + display: inline-block; + position: relative; + width: 1.25rem; + height: 1.25rem; + margin-right: 0.75rem; + top: -1px; + background-size: cover; +} + +.bi-house-door-fill { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); +} + +.bi-plus-square-fill { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); +} + +.bi-list-nested { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); +} + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item ::deep a { + color: #d7d7d7; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + } + +.nav-item ::deep a.active { + background-color: rgba(255,255,255,0.37); + color: white; +} + +.nav-item ::deep a:hover { + background-color: rgba(255,255,255,0.1); + color: white; +} + +.nav-scrollable { + display: none; +} + +.navbar-toggler:checked ~ .nav-scrollable { + display: block; +} + +@media (min-width: 641px) { + .navbar-toggler { + display: none; + } + + .nav-scrollable { + /* Never collapse the sidebar for wide screens */ + display: block; + + /* Allow sidebar to scroll for tall menus */ + height: calc(100vh - 3.5rem); + overflow-y: auto; + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Counter.razor b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Counter.razor new file mode 100644 index 0000000000..1a4f8e7553 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Counter.razor @@ -0,0 +1,19 @@ +@page "/counter" +@rendermode InteractiveServer + +Counter + +

Counter

+ +

Current count: @currentCount

+ + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Error.razor b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Error.razor new file mode 100644 index 0000000000..fcaa7c6ef6 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Error.razor @@ -0,0 +1,38 @@ +@page "/Error" +@using System.Diagnostics + +Error + +

Error.

+

An error occurred while processing your request.

+ +@if (ShowRequestId) +{ +

+ Request ID: @requestId +

+} + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

+ +@code{ + [CascadingParameter] + public HttpContext? HttpContext { get; set; } + + private string? requestId; + private bool ShowRequestId => !string.IsNullOrEmpty(requestId); + + protected override void OnInitialized() + { + requestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Home.razor b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Home.razor new file mode 100644 index 0000000000..9001e0bd27 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Home.razor @@ -0,0 +1,7 @@ +@page "/" + +Home + +

Hello, world!

+ +Welcome to your new app. diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Weather.razor b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Weather.razor new file mode 100644 index 0000000000..ff167153ef --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Pages/Weather.razor @@ -0,0 +1,49 @@ +@page "/weather" +@attribute [StreamRendering(true)] +@attribute [OutputCache(Duration = 2)] + +@inject WeatherApiClient WeatherApi + +Weather + +

Weather

+ +

This component demonstrates showing data loaded from a backend API service.

+ +@if (forecasts == null) +{ +

Loading...

+} +else +{ + + + + + + + + + + + @foreach (var forecast in forecasts) + { + + + + + + + } + +
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
+} + +@code { + private WeatherForecast[]? forecasts; + + protected override async Task OnInitializedAsync() + { + forecasts = await WeatherApi.GetWeatherAsync(); + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Routes.razor b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Routes.razor new file mode 100644 index 0000000000..f756e19dfb --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/Routes.razor @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/_Imports.razor b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/_Imports.razor new file mode 100644 index 0000000000..75c63fe518 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Components/_Imports.razor @@ -0,0 +1,11 @@ +@using System.Net.Http +@using System.Net.Http.Json +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using static Microsoft.AspNetCore.Components.Web.RenderMode +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.AspNetCore.OutputCaching +@using Microsoft.JSInterop +@using AspireSample.Web +@using AspireSample.Web.Components diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Program.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Program.cs new file mode 100644 index 0000000000..8cdf58d455 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Program.cs @@ -0,0 +1,43 @@ +using AspireSample.Web; +using AspireSample.Web.Components; + +var builder = WebApplication.CreateBuilder(args); + +// Add service defaults & Aspire client integrations. +builder.AddServiceDefaults(); +builder.AddRedisOutputCache("cache"); + +// Add services to the container. +builder.Services.AddRazorComponents() + .AddInteractiveServerComponents(); + +builder.Services.AddHttpClient(client => + { + // This URL uses "https+http://" to indicate HTTPS is preferred over HTTP. + // Learn more about service discovery scheme resolution at https://aka.ms/dotnet/sdschemes. + client.BaseAddress = new("https+http://apiservice"); + }); + +var app = builder.Build(); + +if (!app.Environment.IsDevelopment()) +{ + app.UseExceptionHandler("/Error", createScopeForErrors: true); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); +} + +app.UseHttpsRedirection(); + +app.UseAntiforgery(); + +app.UseOutputCache(); + +app.MapStaticAssets(); + +app.MapRazorComponents() + .AddInteractiveServerRenderMode(); + +app.MapDefaultEndpoints(); + +app.Run(); diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Properties/launchSettings.json b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Properties/launchSettings.json new file mode 100644 index 0000000000..f84796648a --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5130", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7229;http://localhost:5130", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/WeatherApiClient.cs b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/WeatherApiClient.cs new file mode 100644 index 0000000000..17990952e6 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/WeatherApiClient.cs @@ -0,0 +1,29 @@ +namespace AspireSample.Web; + +public class WeatherApiClient(HttpClient httpClient) +{ + public async Task GetWeatherAsync(int maxItems = 10, CancellationToken cancellationToken = default) + { + List? forecasts = null; + + await foreach (var forecast in httpClient.GetFromJsonAsAsyncEnumerable("/weatherforecast", cancellationToken)) + { + if (forecasts?.Count >= maxItems) + { + break; + } + if (forecast is not null) + { + forecasts ??= []; + forecasts.Add(forecast); + } + } + + return forecasts?.ToArray() ?? []; + } +} + +public record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) +{ + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/appsettings.Development.json b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/appsettings.Development.json new file mode 100644 index 0000000000..0c208ae918 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/appsettings.json b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/appsettings.json new file mode 100644 index 0000000000..10f68b8c8b --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/app.css b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/app.css new file mode 100644 index 0000000000..5fdddddcb2 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/app.css @@ -0,0 +1,56 @@ +html, body { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +a, .btn-link { + color: #006bb7; +} + +.btn-primary { + color: #fff; + background-color: #1b6ec2; + border-color: #1861ac; +} + +.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { + box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; +} + +.content { + padding-top: 1.1rem; +} + +h1:focus { + outline: none; +} + +.valid.modified:not([type=checkbox]) { + outline: 1px solid #26b050; +} + +.invalid { + outline: 1px solid #e51300; +} + +.validation-message { + color: #e51300; +} + +.blazor-error-boundary { + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; + padding: 1rem 1rem 1rem 3.7rem; + color: white; +} + + .blazor-error-boundary::after { + content: "An error has occurred." + } + +.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder { + color: var(--bs-secondary-color); + text-align: end; +} + +.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder { + text-align: start; +} diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/favicon.png b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8422b59695935d180d11d5dbe99653e711097819 GIT binary patch literal 1148 zcmV-?1cUpDP)9h26h2-Cs%i*@Moc3?#6qJID|D#|3|2Hn7gTIYEkr|%Xjp);YgvFmB&0#2E2b=| zkVr)lMv9=KqwN&%obTp-$<51T%rx*NCwceh-E+=&e(oLO`@Z~7gybJ#U|^tB2Pai} zRN@5%1qsZ1e@R(XC8n~)nU1S0QdzEYlWPdUpH{wJ2Pd4V8kI3BM=)sG^IkUXF2-j{ zrPTYA6sxpQ`Q1c6mtar~gG~#;lt=s^6_OccmRd>o{*=>)KS=lM zZ!)iG|8G0-9s3VLm`bsa6e ze*TlRxAjXtm^F8V`M1%s5d@tYS>&+_ga#xKGb|!oUBx3uc@mj1%=MaH4GR0tPBG_& z9OZE;->dO@`Q)nr<%dHAsEZRKl zedN6+3+uGHejJp;Q==pskSAcRcyh@6mjm2z-uG;s%dM-u0*u##7OxI7wwyCGpS?4U zBFAr(%GBv5j$jS@@t@iI8?ZqE36I^4t+P^J9D^ELbS5KMtZ z{Qn#JnSd$15nJ$ggkF%I4yUQC+BjDF^}AtB7w348EL>7#sAsLWs}ndp8^DsAcOIL9 zTOO!!0!k2`9BLk25)NeZp7ev>I1Mn={cWI3Yhx2Q#DnAo4IphoV~R^c0x&nw*MoIV zPthX?{6{u}sMS(MxD*dmd5rU(YazQE59b|TsB5Tm)I4a!VaN@HYOR)DwH1U5y(E)z zQqQU*B%MwtRQ$%x&;1p%ANmc|PkoFJZ%<-uq%PX&C!c-7ypis=eP+FCeuv+B@h#{4 zGx1m0PjS~FJt}3mdt4c!lel`1;4W|03kcZRG+DzkTy|7-F~eDsV2Tx!73dM0H0CTh zl)F-YUkE1zEzEW(;JXc|KR5{ox%YTh{$%F$a36JP6Nb<0%#NbSh$dMYF-{ z1_x(Vx)}fs?5_|!5xBTWiiIQHG<%)*e=45Fhjw_tlnmlixq;mUdC$R8v#j( zhQ$9YR-o%i5Uc`S?6EC51!bTRK=Xkyb<18FkCKnS2;o*qlij1YA@-nRpq#OMTX&RbL<^2q@0qja!uIvI;j$6>~k@IMwD42=8$$!+R^@5o6HX(*n~ * { + 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.33333333%; +} + +.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.66666667%; +} + +.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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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-inline-grid { + display: inline-grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.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-inline-grid { + display: inline-grid !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } + .d-sm-none { + display: none !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } + .order-sm-first { + order: -1 !important; + } + .order-sm-0 { + order: 0 !important; + } + .order-sm-1 { + order: 1 !important; + } + .order-sm-2 { + order: 2 !important; + } + .order-sm-3 { + order: 3 !important; + } + .order-sm-4 { + order: 4 !important; + } + .order-sm-5 { + order: 5 !important; + } + .order-sm-last { + order: 6 !important; + } + .m-sm-0 { + margin: 0 !important; + } + .m-sm-1 { + margin: 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-inline-grid { + display: inline-grid !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } + .d-md-none { + display: none !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } + .order-md-first { + order: -1 !important; + } + .order-md-0 { + order: 0 !important; + } + .order-md-1 { + order: 1 !important; + } + .order-md-2 { + order: 2 !important; + } + .order-md-3 { + order: 3 !important; + } + .order-md-4 { + order: 4 !important; + } + .order-md-5 { + order: 5 !important; + } + .order-md-last { + order: 6 !important; + } + .m-md-0 { + margin: 0 !important; + } + .m-md-1 { + margin: 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-inline-grid { + display: inline-grid !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } + .d-lg-none { + display: none !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } + .order-lg-first { + order: -1 !important; + } + .order-lg-0 { + order: 0 !important; + } + .order-lg-1 { + order: 1 !important; + } + .order-lg-2 { + order: 2 !important; + } + .order-lg-3 { + order: 3 !important; + } + .order-lg-4 { + order: 4 !important; + } + .order-lg-5 { + order: 5 !important; + } + .order-lg-last { + order: 6 !important; + } + .m-lg-0 { + margin: 0 !important; + } + .m-lg-1 { + margin: 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-inline-grid { + display: inline-grid !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } + .d-xl-none { + display: none !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } + .order-xl-first { + order: -1 !important; + } + .order-xl-0 { + order: 0 !important; + } + .order-xl-1 { + order: 1 !important; + } + .order-xl-2 { + order: 2 !important; + } + .order-xl-3 { + order: 3 !important; + } + .order-xl-4 { + order: 4 !important; + } + .order-xl-5 { + order: 5 !important; + } + .order-xl-last { + order: 6 !important; + } + .m-xl-0 { + margin: 0 !important; + } + .m-xl-1 { + margin: 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-inline-grid { + display: inline-grid !important; + } + .d-xxl-table { + display: table !important; + } + .d-xxl-table-row { + display: table-row !important; + } + .d-xxl-table-cell { + display: table-cell !important; + } + .d-xxl-flex { + display: flex !important; + } + .d-xxl-inline-flex { + display: inline-flex !important; + } + .d-xxl-none { + display: none !important; + } + .flex-xxl-fill { + flex: 1 1 auto !important; + } + .flex-xxl-row { + flex-direction: row !important; + } + .flex-xxl-column { + flex-direction: column !important; + } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xxl-start { + justify-content: flex-start !important; + } + .justify-content-xxl-end { + justify-content: flex-end !important; + } + .justify-content-xxl-center { + justify-content: center !important; + } + .justify-content-xxl-between { + justify-content: space-between !important; + } + .justify-content-xxl-around { + justify-content: space-around !important; + } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + .align-items-xxl-start { + align-items: flex-start !important; + } + .align-items-xxl-end { + align-items: flex-end !important; + } + .align-items-xxl-center { + align-items: center !important; + } + .align-items-xxl-baseline { + align-items: baseline !important; + } + .align-items-xxl-stretch { + align-items: stretch !important; + } + .align-content-xxl-start { + align-content: flex-start !important; + } + .align-content-xxl-end { + align-content: flex-end !important; + } + .align-content-xxl-center { + align-content: center !important; + } + .align-content-xxl-between { + align-content: space-between !important; + } + .align-content-xxl-around { + align-content: space-around !important; + } + .align-content-xxl-stretch { + align-content: stretch !important; + } + .align-self-xxl-auto { + align-self: auto !important; + } + .align-self-xxl-start { + align-self: flex-start !important; + } + .align-self-xxl-end { + align-self: flex-end !important; + } + .align-self-xxl-center { + align-self: center !important; + } + .align-self-xxl-baseline { + align-self: baseline !important; + } + .align-self-xxl-stretch { + align-self: stretch !important; + } + .order-xxl-first { + order: -1 !important; + } + .order-xxl-0 { + order: 0 !important; + } + .order-xxl-1 { + order: 1 !important; + } + .order-xxl-2 { + order: 2 !important; + } + .order-xxl-3 { + order: 3 !important; + } + .order-xxl-4 { + order: 4 !important; + } + .order-xxl-5 { + order: 5 !important; + } + .order-xxl-last { + order: 6 !important; + } + .m-xxl-0 { + margin: 0 !important; + } + .m-xxl-1 { + margin: 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-inline-grid { + display: inline-grid !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: flex !important; + } + .d-print-inline-flex { + display: inline-flex !important; + } + .d-print-none { + display: none !important; + } +} + +/*# sourceMappingURL=bootstrap-grid.css.map */ \ No newline at end of file diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map new file mode 100644 index 0000000000..ce99ec1966 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","bootstrap-grid.css","../../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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EE,mBAAA;EJ6+BR;EI1+BM;;IAEE,mBAAA;EJ4+BR;AACF;AKpiCQ;EAOI,0BAAA;ALgiCZ;;AKviCQ;EAOI,gCAAA;ALoiCZ;;AK3iCQ;EAOI,yBAAA;ALwiCZ;;AK/iCQ;EAOI,wBAAA;AL4iCZ;;AKnjCQ;EAOI,+BAAA;ALgjCZ;;AKvjCQ;EAOI,yBAAA;ALojCZ;;AK3jCQ;EAOI,6BAAA;ALwjCZ;;AK/jCQ;EAOI,8BAAA;AL4jCZ;;AKnkCQ;EAOI,wBAAA;ALgkCZ;;AKvkCQ;EAOI,+BAAA;ALokCZ;;AK3kCQ;EAOI,wBAAA;ALwkCZ;;AK/kCQ;EAOI,yBAAA;AL4kCZ;;AKnlCQ;EAOI,8BAAA;ALglCZ;;AKvlCQ;EAOI,iCAAA;ALolCZ;;AK3lCQ;EAOI,sCAAA;ALwlCZ;;AK/lCQ;EAOI,yCAAA;AL4lCZ;;AKnmCQ;EAOI,uBAAA;ALgmCZ;;AKvmCQ;EAOI,uBAAA;ALomCZ;;AK3mCQ;EAOI,yBAAA;ALwmCZ;;AK/mCQ;EAOI,yBAAA;AL4mCZ;;AKnnCQ;EAOI,0BAAA;ALgnCZ;;AKvnCQ;EAOI,4BAAA;ALonCZ;;AK3nCQ;EAOI,kCAAA;ALwnCZ;;AK/nCQ;EAOI,sCAAA;AL4nCZ;;AKnoCQ;EAOI,oCAAA;ALgoCZ;;AKvoCQ;EAOI,kCAAA;ALooCZ;;AK3oCQ;EAOI,yCAAA;ALwoCZ;;AK/oCQ;EAOI,wCAAA;AL4oCZ;;AKnpCQ;EAOI,wCAAA;ALgpCZ;;AKvpCQ;EAOI,kCAAA;ALopCZ;;AK3pCQ;EAOI,gCAAA;ALwpCZ;;AK/pCQ;EAOI,8BAAA;AL4pCZ;;AKnqCQ;EAOI,gCAAA;ALgqCZ;;AKvqCQ;EAOI,+BAAA;ALoqCZ;;AK3qCQ;EAOI,oCAAA;ALwqCZ;;AK/qCQ;EAOI,kCAAA;AL4qCZ;;AKnrCQ;EAOI,gCAAA;ALgrCZ;;AKvrCQ;EAOI,uCAAA;ALorCZ;;AK3rCQ;EAOI,sCAAA;ALwrCZ;;AK/rCQ;EAOI,iCAAA;AL4rCZ;;AKnsCQ;EAOI,2BAAA;ALgsCZ;;AKvsCQ;EAOI,iCAAA;ALosCZ;;AK3sCQ;EAOI,+BAAA;ALwsCZ;;AK/sCQ;EAOI,6BAAA;AL4sCZ;;AKntCQ;EA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;AL8iDZ;;AKrjDQ;EAOI,4BAAA;ALkjDZ;;AKzjDQ;EAOI,2BAAA;ALsjDZ;;AK7jDQ;EAOI,iCAAA;AL0jDZ;;AKjkDQ;EAOI,gCAAA;AL8jDZ;;AKrkDQ;EAOI,8BAAA;ALkkDZ;;AKzkDQ;EAOI,gCAAA;ALskDZ;;AK7kDQ;EAOI,8BAAA;AL0kDZ;;AKjlDQ;EAOI,4BAAA;AL8kDZ;;AKrlDQ;EAOI,kCAAA;ALklDZ;;AKzlDQ;EAOI,iCAAA;ALslDZ;;AK7lDQ;EAOI,+BAAA;AL0lDZ;;AKjmDQ;EAOI,iCAAA;AL8lDZ;;AKrmDQ;EAOI,+BAAA;ALkmDZ;;AKzmDQ;EAOI,0BAAA;ALsmDZ;;AK7mDQ;EAOI,gCAAA;AL0mDZ;;AKjnDQ;EAOI,+BAAA;AL8mDZ;;AKrnDQ;EAOI,6BAAA;ALknDZ;;AKznDQ;EAOI,+BAAA;ALsnDZ;;AK7nDQ;EAOI,6BAAA;AL0nDZ;;ACpoDI;EIGI;IAOI,0BAAA;EL+nDV;EKtoDM;IAOI,gCAAA;ELkoDV;EKzoDM;IAOI,yBAAA;ELqoDV;EK5oDM;IAOI,wBAAA;ELwoDV;EK/oDM;IAOI,+BAAA;EL2oDV;EKlpDM;IAOI,yBAAA;EL8oDV;EKrpDM;IAOI,6BAAA;ELipDV;EKxpDM;IAOI,8BAAA;ELopDV;EK3pDM;IAOI,wBAAA;ELupDV;EK9pDM;IAOI,+BAAA;EL0pDV;EKjqDM;IAOI,wBAAA;EL6pDV;EKpqDM;IAOI,yBAAA;ELgqDV;EKvqDM;IAOI,8BAAA;ELmqDV;EK1qDM;IAOI,iCAAA;ELsqDV;EK7qDM;IAOI,sCAAA;ELyqDV;EKhrDM;IAOI,yCAAA;EL4qDV;EKnrDM;IAOI,uBAAA;EL+qDV;EKtrDM;IAOI,uBAAA;ELkrDV;EKzrDM;IAOI,yBAAA;ELqrDV;EK5rDM;IAOI,yBAAA;ELwrDV;EK/rDM;IAOI,0BAAA;EL2rDV;EKlsDM;IAOI,4BAAA;EL8rDV;EKrsDM;IAOI,kCAAA;ELisDV;EKxsDM;IAOI,sCAAA;ELosDV;EK3sDM;IAOI,oCAAA;ELusDV;EK9sDM;IAOI,kCAAA;EL0sDV;EKjtDM;IAOI,yCAAA;EL6sDV;EKptDM;IAOI,wCAAA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nEV;EK/nEM;IAOI,yCAAA;EL2nEV;EKloEM;IAOI,uBAAA;EL8nEV;EKroEM;IAOI,uBAAA;ELioEV;EKxoEM;IAOI,yBAAA;ELooEV;EK3oEM;IAOI,yBAAA;ELuoEV;EK9oEM;IAOI,0BAAA;EL0oEV;EKjpEM;IAOI,4BAAA;EL6oEV;EKppEM;IAOI,kCAAA;ELgpEV;EKvpEM;IAOI,sCAAA;ELmpEV;EK1pEM;IAOI,oCAAA;ELspEV;EK7pEM;IAOI,kCAAA;ELypEV;EKhqEM;IAOI,yCAAA;EL4pEV;EKnqEM;IAOI,wCAAA;EL+pEV;EKtqEM;IAOI,wCAAA;ELkqEV;EKzqEM;IAOI,kCAAA;ELqqEV;EK5qEM;IAOI,gCAAA;ELwqEV;EK/qEM;IAOI,8BAAA;EL2qEV;EKlrEM;IAOI,gCAAA;EL8qEV;EKrrEM;IAOI,+BAAA;ELirEV;EKxrEM;IAOI,oCAAA;ELorEV;EK3rEM;IAOI,kCAAA;ELurEV;EK9rEM;IAOI,gCAAA;EL0rEV;EKjsEM;IAOI,uCAAA;EL6rEV;EKpsEM;IAOI,sCAAA;ELgsEV;EKvsEM;IAOI,iCAAA;ELmsEV;EK1sEM;IAOI,2BAAA;ELssEV;EK7sEM;IAOI,iCAAA;ELysEV;EKhtEM;IAOI,+BAAA;EL4sEV;EKntEM;IAOI,6BAAA;EL+sEV;EKttEM;IAOI,+BAAA;ELktEV;EKztEM;IAOI,8BAAA;ELqtEV;EK5tEM;IAOI,oBAAA;ELwtEV;EK/tEM;IAOI,mBAAA;EL2tEV;EKluEM;IAOI,mBAAA;EL8tEV;EKruEM;IAOI,mBAAA;ELiuEV;EKxuEM;IAOI,mBAAA;ELouEV;EK3uEM;IAOI,mBAAA;ELuuEV;EK9uEM;IAOI,mBAAA;EL0uEV;EKjvEM;IAOI,mBAAA;EL6uEV;EKpvEM;IAOI,oBAAA;ELgvEV;EKvvEM;IAOI,0BAAA;ELmvEV;EK1vEM;IAOI,yBAAA;ELsvEV;EK7vEM;IAOI,uBAAA;ELyvEV;EKhwEM;IAOI,yBAAA;EL4vEV;EKnwEM;IAOI,uBAAA;EL+vEV;EKtwEM;IAOI,uBAAA;ELkwEV;EKzwEM;IAOI,0BAAA;IAAA,yBAAA;ELswEV;EK7wEM;IAO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EKviFM;IAOI,yBAAA;ELmiFV;EK1iFM;IAOI,wBAAA;ELsiFV;EK7iFM;IAOI,+BAAA;ELyiFV;EKhjFM;IAOI,yBAAA;EL4iFV;EKnjFM;IAOI,6BAAA;EL+iFV;EKtjFM;IAOI,8BAAA;ELkjFV;EKzjFM;IAOI,wBAAA;ELqjFV;EK5jFM;IAOI,+BAAA;ELwjFV;EK/jFM;IAOI,wBAAA;EL2jFV;EKlkFM;IAOI,yBAAA;EL8jFV;EKrkFM;IAOI,8BAAA;ELikFV;EKxkFM;IAOI,iCAAA;ELokFV;EK3kFM;IAOI,sCAAA;ELukFV;EK9kFM;IAOI,yCAAA;EL0kFV;EKjlFM;IAOI,uBAAA;EL6kFV;EKplFM;IAOI,uBAAA;ELglFV;EKvlFM;IAOI,yBAAA;ELmlFV;EK1lFM;IAOI,yBAAA;ELslFV;EK7lFM;IAOI,0BAAA;ELylFV;EKhmFM;IAOI,4BAAA;EL4lFV;EKnmFM;IAOI,kCAAA;EL+lFV;EKtmFM;IAOI,sCAAA;ELkmFV;EKzmFM;IAOI,oCAAA;ELqmFV;EK5mFM;IAOI,kCAAA;ELwmFV;EK/mFM;IAOI,yCAAA;EL2mFV;EKlnFM;IAOI,wCAAA;EL8mFV;EKrnFM;IAOI,wCAAA;ELinFV;EKxnFM;IAOI,kCAAA;ELonFV;EK3nFM;IAOI,gCAAA;ELunFV;EK9nFM;IAOI,8BAAA;EL0nFV;EKjoFM;IAOI,gCAAA;EL6nFV;EKpoFM;IAOI,+BAAA;ELgoFV;EKvoFM;IAOI,oCAAA;ELmoFV;EK1oFM;IAOI,kCAAA;ELsoFV;EK7oFM;IAOI,gCAAA;ELyoFV;EKhpFM;IAOI,uCAAA;EL4oFV;EKnpFM;IAOI,sCAAA;EL+oFV;EKtpFM;IAOI,iCAAA;ELkpFV;EKzpFM;IAOI,2BAAA;ELqpFV;EK5pFM;IAOI,iCAAA;ELwpFV;EK/pFM;IAOI,+BAAA;EL2pFV;EKlqFM;IAOI,6BAAA;EL8pFV;EKrqFM;IAOI,+BAAA;ELiqFV;EKxqFM;IAOI,8BAAA;ELoqFV;EK3qFM;IAOI,oBAAA;ELuqFV;EK9qFM;IAOI,mBAAA;EL0qFV;EKjrFM;IAOI,mBAAA;EL6qFV;EKprFM;IAOI,mBAAA;ELgrFV;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AAA;ELy8FV;EKh9FM;IAOI,iCAAA;EL48FV;EKn9FM;IAOI,+BAAA;EL+8FV;EKt9FM;IAOI,iCAAA;ELk9FV;EKz9FM;IAOI,+BAAA;ELq9FV;EK59FM;IAOI,0BAAA;ELw9FV;EK/9FM;IAOI,gCAAA;EL29FV;EKl+FM;IAOI,+BAAA;EL89FV;EKr+FM;IAOI,6BAAA;ELi+FV;EKx+FM;IAOI,+BAAA;ELo+FV;EK3+FM;IAOI,6BAAA;ELu+FV;AACF;ACl/FI;EIGI;IAOI,0BAAA;EL4+FV;EKn/FM;IAOI,gCAAA;EL++FV;EKt/FM;IAOI,yBAAA;ELk/FV;EKz/FM;IAOI,wBAAA;ELq/FV;EK5/FM;IAOI,+BAAA;ELw/FV;EK//FM;IAOI,yBAAA;EL2/FV;EKlgGM;IAOI,6BAAA;EL8/FV;EKrgGM;IAOI,8BAAA;ELigGV;EKxgGM;IAOI,wBAAA;ELogGV;EK3gGM;IAOI,+BAAA;ELugGV;EK9gGM;IAOI,wBAAA;EL0gGV;EKjhGM;IAOI,yBAAA;EL6gGV;EKphGM;IAOI,8BAAA;ELghGV;EKvhGM;IAOI,iCAAA;ELmhGV;EK1hGM;IAOI,sCAAA;ELshGV;EK7hGM;IAOI,yCAAA;ELyhGV;EKhiGM;IAOI,uBAAA;EL4hGV;EKniGM;IAOI,uBAAA;EL+hGV;EKtiGM;IAOI,yBAAA;ELkiGV;EKziGM;IAOI,yBAAA;ELqiGV;EK5iGM;IAOI,0BAAA;ELwiGV;EK/iGM;IAOI,4BAAA;EL2iGV;EKljGM;IAOI,kCAAA;EL8iGV;EKrjGM;IAOI,sCAAA;ELijGV;EKxjGM;IAOI,oCAAA;ELojGV;EK3jGM;IAOI,kCAAA;ELujGV;EK9jGM;IAOI,yCAAA;EL0jGV;EKjkGM;IAOI,wCAAA;EL6jGV;EKpkGM;IAOI,wCAAA;ELgkGV;EKvkGM;IAOI,kCAAA;ELmkGV;EK1kGM;IAOI,gCAAA;ELskGV;EK7kGM;IAOI,8BAAA;ELykGV;EKhlGM;IAOI,gCAAA;EL4kGV;EKnlGM;IAOI,+BAAA;EL+kGV;EKtlGM;IAOI,oCAAA;ELklGV;EKzlGM;IAOI,kCAAA;ELqlGV;EK5lGM;IAOI,gCAAA;ELwlGV;EK/l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ELi3GV;EKx3GM;IAOI,+BAAA;ELo3GV;EK33GM;IAOI,8BAAA;ELu3GV;EK93GM;IAOI,4BAAA;EL03GV;EKj4GM;IAOI,8BAAA;EL63GV;EKp4GM;IAOI,4BAAA;ELg4GV;EKv4GM;IAOI,2BAAA;ELm4GV;EK14GM;IAOI,iCAAA;ELs4GV;EK74GM;IAOI,gCAAA;ELy4GV;EKh5GM;IAOI,8BAAA;EL44GV;EKn5GM;IAOI,gCAAA;EL+4GV;EKt5GM;IAOI,8BAAA;ELk5GV;EKz5GM;IAOI,4BAAA;ELq5GV;EK55GM;IAOI,kCAAA;ELw5GV;EK/5GM;IAOI,iCAAA;EL25GV;EKl6GM;IAOI,+BAAA;EL85GV;EKr6GM;IAOI,iCAAA;ELi6GV;EKx6GM;IAOI,+BAAA;ELo6GV;EK36GM;IAOI,0BAAA;ELu6GV;EK96GM;IAOI,gCAAA;EL06GV;EKj7GM;IAOI,+BAAA;EL66GV;EKp7GM;IAOI,6BAAA;ELg7GV;EKv7GM;IAOI,+BAAA;ELm7GV;EK17GM;IAOI,6BAAA;ELs7GV;AACF;ACj8GI;EIGI;IAOI,0BAAA;EL27GV;EKl8GM;IAOI,gCAAA;EL87GV;EKr8GM;IAOI,yBAAA;ELi8GV;EKx8GM;IAOI,wBAAA;ELo8GV;EK38GM;IAOI,+BAAA;ELu8GV;EK98GM;IAOI,yBAAA;EL08GV;EKj9GM;IAOI,6BAAA;EL68GV;EKp9GM;IAOI,8BAAA;ELg9GV;EKv9GM;IAOI,wBAAA;ELm9GV;EK19GM;IAOI,+BAAA;ELs9GV;EK79GM;IAOI,wBAAA;ELy9GV;EKh+GM;IAOI,yBAAA;EL49GV;EKn+GM;IAOI,8BAAA;EL+9GV;EKt+GM;IAOI,iCAAA;ELk+GV;EKz+GM;IAOI,sCAAA;ELq+GV;EK5+GM;IAOI,yCAAA;ELw+GV;EK/+GM;IAOI,uBAAA;EL2+GV;EKl/GM;IAOI,uBAAA;EL8+GV;EKr/GM;IAOI,yBAAA;ELi/GV;EKx/GM;IAOI,yBAAA;ELo/GV;EK3/GM;IAOI,0BAAA;ELu/GV;EK9/GM;IAOI,4BAAA;EL0/GV;EKjgHM;IAOI,kCAAA;EL6/GV;EKpgHM;IAOI,sCAAA;ELggHV;EKvgHM;I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","file":"bootstrap-grid.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-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 --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","/*!\n * Bootstrap Grid v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@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:root {\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\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.33333333%;\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.66666667%;\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 .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\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-inline-grid {\n display: inline-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 .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-inline-grid {\n display: inline-grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\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 .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-inline-grid {\n display: inline-grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\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 .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-inline-grid {\n display: inline-grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\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 .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-inline-grid {\n display: inline-grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\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 .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-inline-grid {\n display: inline-grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\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 .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-inline-grid {\n display: inline-grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\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, xxl: 1400px)\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, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\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, xxl: 1400px))\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, xxl: 1400px))\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, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\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, $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($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 \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\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-100,\n \"purple-200\": $purple-200,\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// 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-text-variables\n$primary-text-emphasis: shade-color($primary, 60%) !default;\n$secondary-text-emphasis: shade-color($secondary, 60%) !default;\n$success-text-emphasis: shade-color($success, 60%) !default;\n$info-text-emphasis: shade-color($info, 60%) !default;\n$warning-text-emphasis: shade-color($warning, 60%) !default;\n$danger-text-emphasis: shade-color($danger, 60%) !default;\n$light-text-emphasis: $gray-700 !default;\n$dark-text-emphasis: $gray-700 !default;\n// scss-docs-end theme-text-variables\n\n// scss-docs-start theme-bg-subtle-variables\n$primary-bg-subtle: tint-color($primary, 80%) !default;\n$secondary-bg-subtle: tint-color($secondary, 80%) !default;\n$success-bg-subtle: tint-color($success, 80%) !default;\n$info-bg-subtle: tint-color($info, 80%) !default;\n$warning-bg-subtle: tint-color($warning, 80%) !default;\n$danger-bg-subtle: tint-color($danger, 80%) !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n// scss-docs-end theme-bg-subtle-variables\n\n// scss-docs-start theme-border-subtle-variables\n$primary-border-subtle: tint-color($primary, 60%) !default;\n$secondary-border-subtle: tint-color($secondary, 60%) !default;\n$success-border-subtle: tint-color($success, 60%) !default;\n$info-border-subtle: tint-color($info, 60%) !default;\n$warning-border-subtle: tint-color($warning, 60%) !default;\n$danger-border-subtle: tint-color($danger, 60%) !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n// scss-docs-end theme-border-subtle-variables\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-container-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$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !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// 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-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$body-emphasis-color: $black !default;\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// Icon links\n// scss-docs-start icon-link-variables\n$icon-link-gap: .375rem !default;\n$icon-link-underline-offset: .25em !default;\n$icon-link-icon-size: 1em !default;\n$icon-link-icon-transition: .2s ease-in-out transform !default;\n$icon-link-icon-transform: translate3d(.25em, 0, 0) !default;\n// scss-docs-end icon-link-variables\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// Container padding\n\n$container-padding-x: $grid-gutter-width !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$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-xxl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n// fusv-disable\n$border-radius-2xl: $border-radius-xxl !default; // Deprecated in v5.3.0\n// fusv-enable\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 focus-ring-variables\n$focus-ring-width: .25rem !default;\n$focus-ring-opacity: .25 !default;\n$focus-ring-color: rgba($primary, $focus-ring-opacity) !default;\n$focus-ring-blur: 0 !default;\n$focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color !default;\n// scss-docs-end focus-ring-variables\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\", \"Noto Sans\", \"Liberation Sans\", Arial, 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(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$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-medium: 500 !default;\n$font-weight-semibold: 600 !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: inherit !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-family: null !default;\n$display-font-style: null !default;\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// fusv-disable\n$text-muted: var(--#{$prefix}secondary-color) !default; // Deprecated in 5.3.0\n// fusv-enable\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\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n// scss-docs-start vr-variables\n$vr-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end vr-variables\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-color: $body-color !default;\n$mark-bg: $yellow-100 !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: var(--#{$prefix}emphasis-color) !default;\n$table-bg: var(--#{$prefix}body-bg) !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(var(--#{$prefix}emphasis-color-rgb), $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(var(--#{$prefix}emphasis-color-rgb), $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(var(--#{$prefix}emphasis-color-rgb), $table-hover-bg-factor) !default;\n\n$table-border-factor: .2 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: var(--#{$prefix}secondary-color) !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: $focus-ring-width !default;\n$input-btn-focus-color-opacity: $focus-ring-opacity !default;\n$input-btn-focus-color: $focus-ring-color !default;\n$input-btn-focus-blur: $focus-ring-blur !default;\n$input-btn-focus-box-shadow: $focus-ring-box-shadow !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: var(--#{$prefix}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-color: var(--#{$prefix}body-color) !default;\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: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: var(--#{$prefix}border-radius) !default;\n$btn-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$btn-border-radius-lg: var(--#{$prefix}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: var(--#{$prefix}secondary-color) !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: var(--#{$prefix}body-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$input-border-radius: var(--#{$prefix}border-radius) !default;\n$input-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$input-border-radius-lg: var(--#{$prefix}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: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc(#{$input-border-width} * 2) !default; // stylelint-disable-line function-disallowed-list\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: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !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: $focus-ring-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: var(--#{$prefix}tertiary-bg) !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: $input-disabled-bg !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: var(--#{$prefix}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: var(--#{$prefix}secondary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: var(--#{$prefix}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: var(--#{$prefix}secondary-color) !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: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !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-height: 1.5em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !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-colors\n$form-valid-color: $form-feedback-valid-color !default;\n$form-valid-border-color: $form-feedback-valid-color !default;\n$form-invalid-color: $form-feedback-invalid-color !default;\n$form-invalid-border-color: $form-feedback-invalid-color !default;\n// scss-docs-end form-validation-colors\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}form-valid-color),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}form-valid-border-color),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}form-invalid-color),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}form-invalid-border-color),\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$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\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: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}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: var(--#{$prefix}secondary-color) !default;\n$nav-link-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-underline-gap: 1rem !default;\n$nav-underline-border-width: .125rem !default;\n$nav-underline-link-active-color: var(--#{$prefix}emphasis-color) !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\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-icon-color: rgba($body-color, .75) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-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-icon-color: $navbar-dark-color !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !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-dark-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: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: var(--#{$prefix}border-radius) !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !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: var(--#{$prefix}tertiary-color) !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-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\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-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc(#{$pagination-border-width} * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $focus-ring-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !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: var(--#{$prefix}border-radius-sm) !default;\n$pagination-border-radius-lg: var(--#{$prefix}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-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}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(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !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: var(--#{$prefix}body-color) !default;\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}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: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;\n\n// fusv-disable\n$accordion-button-focus-border-color: $input-focus-border-color !default; // Deprecated in v5.3.3\n// fusv-enable\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text-emphasis !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: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}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: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\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: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc(#{$popover-border-radius} - #{$popover-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !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: var(--#{$prefix}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// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\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(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !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: var(--#{$prefix}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: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}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: var(--#{$prefix}box-shadow-sm) !default;\n$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-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-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\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: var(--#{$prefix}border-radius) !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !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// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\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: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}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: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !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: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !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: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}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: var(--#{$prefix}secondary-color) !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: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !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// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\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-dark-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: $focus-ring-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: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-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: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n\n@import \"variables-dark\"; // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3\n","// Row\n//\n// Rows contain your columns.\n\n:root {\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\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(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$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 --#{$prefix}gutter-x: #{$gutter};\n --#{$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(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\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(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$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// number of 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: percentage(divide(1, $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 --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$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 an 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 // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, 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 (e.g. 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 --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$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, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\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 @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\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/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css new file mode 100644 index 0000000000..49b843b194 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap Grid v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.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-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin: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-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin: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-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin: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-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin: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-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin: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-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map new file mode 100644 index 0000000000..a0db8b57a8 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/mixins/_banner.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":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-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.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@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:root {\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\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.33333333%;\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.66666667%;\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 .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\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-inline-grid {\n display: inline-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 .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-inline-grid {\n display: inline-grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\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 .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-inline-grid {\n display: inline-grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\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 .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-inline-grid {\n display: inline-grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\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 .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-inline-grid {\n display: inline-grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\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 .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-inline-grid {\n display: inline-grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\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 .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-inline-grid {\n display: inline-grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\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 --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\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, xxl: 1400px)\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, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\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, xxl: 1400px))\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, xxl: 1400px))\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, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\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, $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($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:root {\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\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(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$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 --#{$prefix}gutter-x: #{$gutter};\n --#{$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(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\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(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$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// number of 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: percentage(divide(1, $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 --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$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 an 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 // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, 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 (e.g. 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 --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$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, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\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 @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\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/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css new file mode 100644 index 0000000000..1a5d65630b --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css @@ -0,0 +1,4084 @@ +/*! + * Bootstrap Grid v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-left: calc(var(--bs-gutter-x) * 0.5); + padding-right: calc(var(--bs-gutter-x) * 0.5); + 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; + } +} +:root { + --bs-breakpoint-xs: 0; + --bs-breakpoint-sm: 576px; + --bs-breakpoint-md: 768px; + --bs-breakpoint-lg: 992px; + --bs-breakpoint-xl: 1200px; + --bs-breakpoint-xxl: 1400px; +} + +.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.33333333%; +} + +.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.66666667%; +} + +.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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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-inline-grid { + display: inline-grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.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-inline-grid { + display: inline-grid !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } + .d-sm-none { + display: none !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } + .order-sm-first { + order: -1 !important; + } + .order-sm-0 { + order: 0 !important; + } + .order-sm-1 { + order: 1 !important; + } + .order-sm-2 { + order: 2 !important; + } + .order-sm-3 { + order: 3 !important; + } + .order-sm-4 { + order: 4 !important; + } + .order-sm-5 { + order: 5 !important; + } + .order-sm-last { + order: 6 !important; + } + .m-sm-0 { + margin: 0 !important; + } + .m-sm-1 { + margin: 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-inline-grid { + display: inline-grid !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } + .d-md-none { + display: none !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } + .order-md-first { + order: -1 !important; + } + .order-md-0 { + order: 0 !important; + } + .order-md-1 { + order: 1 !important; + } + .order-md-2 { + order: 2 !important; + } + .order-md-3 { + order: 3 !important; + } + .order-md-4 { + order: 4 !important; + } + .order-md-5 { + order: 5 !important; + } + .order-md-last { + order: 6 !important; + } + .m-md-0 { + margin: 0 !important; + } + .m-md-1 { + margin: 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-inline-grid { + display: inline-grid !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } + .d-lg-none { + display: none !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } + .order-lg-first { + order: -1 !important; + } + .order-lg-0 { + order: 0 !important; + } + .order-lg-1 { + order: 1 !important; + } + .order-lg-2 { + order: 2 !important; + } + .order-lg-3 { + order: 3 !important; + } + .order-lg-4 { + order: 4 !important; + } + .order-lg-5 { + order: 5 !important; + } + .order-lg-last { + order: 6 !important; + } + .m-lg-0 { + margin: 0 !important; + } + .m-lg-1 { + margin: 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-inline-grid { + display: inline-grid !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } + .d-xl-none { + display: none !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } + .order-xl-first { + order: -1 !important; + } + .order-xl-0 { + order: 0 !important; + } + .order-xl-1 { + order: 1 !important; + } + .order-xl-2 { + order: 2 !important; + } + .order-xl-3 { + order: 3 !important; + } + .order-xl-4 { + order: 4 !important; + } + .order-xl-5 { + order: 5 !important; + } + .order-xl-last { + order: 6 !important; + } + .m-xl-0 { + margin: 0 !important; + } + .m-xl-1 { + margin: 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-inline-grid { + display: inline-grid !important; + } + .d-xxl-table { + display: table !important; + } + .d-xxl-table-row { + display: table-row !important; + } + .d-xxl-table-cell { + display: table-cell !important; + } + .d-xxl-flex { + display: flex !important; + } + .d-xxl-inline-flex { + display: inline-flex !important; + } + .d-xxl-none { + display: none !important; + } + .flex-xxl-fill { + flex: 1 1 auto !important; + } + .flex-xxl-row { + flex-direction: row !important; + } + .flex-xxl-column { + flex-direction: column !important; + } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xxl-start { + justify-content: flex-start !important; + } + .justify-content-xxl-end { + justify-content: flex-end !important; + } + .justify-content-xxl-center { + justify-content: center !important; + } + .justify-content-xxl-between { + justify-content: space-between !important; + } + .justify-content-xxl-around { + justify-content: space-around !important; + } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + .align-items-xxl-start { + align-items: flex-start !important; + } + .align-items-xxl-end { + align-items: flex-end !important; + } + .align-items-xxl-center { + align-items: center !important; + } + .align-items-xxl-baseline { + align-items: baseline !important; + } + .align-items-xxl-stretch { + align-items: stretch !important; + } + .align-content-xxl-start { + align-content: flex-start !important; + } + .align-content-xxl-end { + align-content: flex-end !important; + } + .align-content-xxl-center { + align-content: center !important; + } + .align-content-xxl-between { + align-content: space-between !important; + } + .align-content-xxl-around { + align-content: space-around !important; + } + .align-content-xxl-stretch { + align-content: stretch !important; + } + .align-self-xxl-auto { + align-self: auto !important; + } + .align-self-xxl-start { + align-self: flex-start !important; + } + .align-self-xxl-end { + align-self: flex-end !important; + } + .align-self-xxl-center { + align-self: center !important; + } + .align-self-xxl-baseline { + align-self: baseline !important; + } + .align-self-xxl-stretch { + align-self: stretch !important; + } + .order-xxl-first { + order: -1 !important; + } + .order-xxl-0 { + order: 0 !important; + } + .order-xxl-1 { + order: 1 !important; + } + .order-xxl-2 { + order: 2 !important; + } + .order-xxl-3 { + order: 3 !important; + } + .order-xxl-4 { + order: 4 !important; + } + .order-xxl-5 { + order: 5 !important; + } + .order-xxl-last { + order: 6 !important; + } + .m-xxl-0 { + margin: 0 !important; + } + .m-xxl-1 { + margin: 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-inline-grid { + display: inline-grid !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: flex !important; + } + .d-print-inline-flex { + display: inline-flex !important; + } + .d-print-none { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap-grid.rtl.css.map */ \ No newline at end of file diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map new file mode 100644 index 0000000000..8df43cfcc3 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","bootstrap-grid.css","../../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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EE,mBAAA;EJ6+BR;EI1+BM;;IAEE,mBAAA;EJ4+BR;AACF;AKpiCQ;EAOI,0BAAA;ALgiCZ;;AKviCQ;EAOI,gCAAA;ALoiCZ;;AK3iCQ;EAOI,yBAAA;ALwiCZ;;AK/iCQ;EAOI,wBAAA;AL4iCZ;;AKnjCQ;EAOI,+BAAA;ALgjCZ;;AKvjCQ;EAOI,yBAAA;ALojCZ;;AK3jCQ;EAOI,6BAAA;ALwjCZ;;AK/jCQ;EAOI,8BAAA;AL4jCZ;;AKnkCQ;EAOI,wBAAA;ALgkCZ;;AKvkCQ;EAOI,+BAAA;ALokCZ;;AK3kCQ;EAOI,wBAAA;ALwkCZ;;AK/kCQ;EAOI,yBAAA;AL4kCZ;;AKnlCQ;EAOI,8BAAA;ALglCZ;;AKvlCQ;EAOI,iCAAA;ALolCZ;;AK3lCQ;EAOI,sCAAA;ALwlCZ;;AK/lCQ;EAOI,yCAAA;AL4lCZ;;AKnmCQ;EAOI,uBAAA;ALgmCZ;;AKvmCQ;EAOI,uBAAA;ALomCZ;;AK3mCQ;EAOI,yBAAA;ALwmCZ;;AK/mCQ;EAOI,yBAAA;AL4mCZ;;AKnnCQ;EAOI,0BAAA;ALgnCZ;;AKvnCQ;EAOI,4BAAA;ALonCZ;;AK3nCQ;EAOI,kCAAA;ALwnCZ;;AK/nCQ;EAOI,sCAAA;AL4nCZ;;AKnoCQ;EAOI,oCAAA;ALgoCZ;;AKvoCQ;EAOI,kCAAA;ALooCZ;;AK3oCQ;EAOI,yCAAA;ALwoCZ;;AK/oCQ;EAOI,wCAAA;AL4oCZ;;AKnpCQ;EAOI,wCAAA;ALgpCZ;;AKvpCQ;EAOI,kCAAA;ALopCZ;;AK3pCQ;EAOI,gCAAA;ALwpCZ;;AK/pCQ;EAOI,8BAAA;AL4pCZ;;AKnqCQ;EAOI,gCAAA;ALgqCZ;;AKvqCQ;EAOI,+BAAA;ALoqCZ;;AK3qCQ;EAOI,oCAAA;ALwqCZ;;AK/qCQ;EAOI,kCAAA;AL4qCZ;;AKnrCQ;EAOI,gCAAA;ALgrCZ;;AKvrCQ;EAOI,uCAAA;ALorCZ;;AK3rCQ;EAOI,sCAAA;ALwrCZ;;AK/rCQ;EAOI,iCAAA;AL4rCZ;;AKnsCQ;EAOI,2BAAA;ALgsCZ;;AKvsCQ;EAOI,iCAAA;ALosCZ;;AK3sCQ;EAOI,+BAAA;ALwsCZ;;AK/sCQ;EAOI,6BAAA;AL4sCZ;;AKntCQ;EA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;AL8iDZ;;AKrjDQ;EAOI,4BAAA;ALkjDZ;;AKzjDQ;EAOI,0BAAA;ALsjDZ;;AK7jDQ;EAOI,gCAAA;AL0jDZ;;AKjkDQ;EAOI,+BAAA;AL8jDZ;;AKrkDQ;EAOI,6BAAA;ALkkDZ;;AKzkDQ;EAOI,+BAAA;ALskDZ;;AK7kDQ;EAOI,6BAAA;AL0kDZ;;AKjlDQ;EAOI,4BAAA;AL8kDZ;;AKrlDQ;EAOI,kCAAA;ALklDZ;;AKzlDQ;EAOI,iCAAA;ALslDZ;;AK7lDQ;EAOI,+BAAA;AL0lDZ;;AKjmDQ;EAOI,iCAAA;AL8lDZ;;AKrmDQ;EAOI,+BAAA;ALkmDZ;;AKzmDQ;EAOI,2BAAA;ALsmDZ;;AK7mDQ;EAOI,iCAAA;AL0mDZ;;AKjnDQ;EAOI,gCAAA;AL8mDZ;;AKrnDQ;EAOI,8BAAA;ALknDZ;;AKznDQ;EAOI,gCAAA;ALsnDZ;;AK7nDQ;EAOI,8BAAA;AL0nDZ;;ACpoDI;EIGI;IAOI,0BAAA;EL+nDV;EKtoDM;IAOI,gCAAA;ELkoDV;EKzoDM;IAOI,yBAAA;ELqoDV;EK5oDM;IAOI,wBAAA;ELwoDV;EK/oDM;IAOI,+BAAA;EL2oDV;EKlpDM;IAOI,yBAAA;EL8oDV;EKrpDM;IAOI,6BAAA;ELipDV;EKxpDM;IAOI,8BAAA;ELopDV;EK3pDM;IAOI,wBAAA;ELupDV;EK9pDM;IAOI,+BAAA;EL0pDV;EKjqDM;IAOI,wBAAA;EL6pDV;EKpqDM;IAOI,yBAAA;ELgqDV;EKvqDM;IAOI,8BAAA;ELmqDV;EK1qDM;IAOI,iCAAA;ELsqDV;EK7qDM;IAOI,sCAAA;ELyqDV;EKhrDM;IAOI,yCAAA;EL4qDV;EKnrDM;IAOI,uBAAA;EL+qDV;EKtrDM;IAOI,uBAAA;ELkrDV;EKzrDM;IAOI,yBAAA;ELqrDV;EK5rDM;IAOI,yBAAA;ELwrDV;EK/rDM;IAOI,0BAAA;EL2rDV;EKlsDM;IAOI,4BAAA;EL8rDV;EKrsDM;IAOI,kCAAA;ELisDV;EKxsDM;IAOI,sCAAA;ELosDV;EK3sDM;IAOI,oCAAA;ELusDV;EK9sDM;IAOI,kCAAA;EL0sDV;EKjtDM;IAOI,yCAAA;EL6sDV;EKptDM;IAOI,wCAAA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nEV;EK/nEM;IAOI,yCAAA;EL2nEV;EKloEM;IAOI,uBAAA;EL8nEV;EKroEM;IAOI,uBAAA;ELioEV;EKxoEM;IAOI,yBAAA;ELooEV;EK3oEM;IAOI,yBAAA;ELuoEV;EK9oEM;IAOI,0BAAA;EL0oEV;EKjpEM;IAOI,4BAAA;EL6oEV;EKppEM;IAOI,kCAAA;ELgpEV;EKvpEM;IAOI,sCAAA;ELmpEV;EK1pEM;IAOI,oCAAA;ELspEV;EK7pEM;IAOI,kCAAA;ELypEV;EKhqEM;IAOI,yCAAA;EL4pEV;EKnqEM;IAOI,wCAAA;EL+pEV;EKtqEM;IAOI,wCAAA;ELkqEV;EKzqEM;IAOI,kCAAA;ELqqEV;EK5qEM;IAOI,gCAAA;ELwqEV;EK/qEM;IAOI,8BAAA;EL2qEV;EKlrEM;IAOI,gCAAA;EL8qEV;EKrrEM;IAOI,+BAAA;ELirEV;EKxrEM;IAOI,oCAAA;ELorEV;EK3rEM;IAOI,kCAAA;ELurEV;EK9rEM;IAOI,gCAAA;EL0rEV;EKjsEM;IAOI,uCAAA;EL6rEV;EKpsEM;IAOI,sCAAA;ELgsEV;EKvsEM;IAOI,iCAAA;ELmsEV;EK1sEM;IAOI,2BAAA;ELssEV;EK7sEM;IAOI,iCAAA;ELysEV;EKhtEM;IAOI,+BAAA;EL4sEV;EKntEM;IAOI,6BAAA;EL+sEV;EKttEM;IAOI,+BAAA;ELktEV;EKztEM;IAOI,8BAAA;ELqtEV;EK5tEM;IAOI,oBAAA;ELwtEV;EK/tEM;IAOI,mBAAA;EL2tEV;EKluEM;IAOI,mBAAA;EL8tEV;EKruEM;IAOI,mBAAA;ELiuEV;EKxuEM;IAOI,mBAAA;ELouEV;EK3uEM;IAOI,mBAAA;ELuuEV;EK9uEM;IAOI,mBAAA;EL0uEV;EKjvEM;IAOI,mBAAA;EL6uEV;EKpvEM;IAOI,oBAAA;ELgvEV;EKvvEM;IAOI,0BAAA;ELmvEV;EK1vEM;IAOI,yBAAA;ELsvEV;EK7vEM;IAOI,uBAAA;ELyvEV;EKhwEM;IAOI,yBAAA;EL4vEV;EKnwEM;IAOI,uBAAA;EL+vEV;EKtwEM;IAOI,uBAAA;ELkwEV;EKzwEM;IAOI,yBAAA;IAAA,0BAAA;ELswEV;EK7wEM;IAO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EKviFM;IAOI,yBAAA;ELmiFV;EK1iFM;IAOI,wBAAA;ELsiFV;EK7iFM;IAOI,+BAAA;ELyiFV;EKhjFM;IAOI,yBAAA;EL4iFV;EKnjFM;IAOI,6BAAA;EL+iFV;EKtjFM;IAOI,8BAAA;ELkjFV;EKzjFM;IAOI,wBAAA;ELqjFV;EK5jFM;IAOI,+BAAA;ELwjFV;EK/jFM;IAOI,wBAAA;EL2jFV;EKlkFM;IAOI,yBAAA;EL8jFV;EKrkFM;IAOI,8BAAA;ELikFV;EKxkFM;IAOI,iCAAA;ELokFV;EK3kFM;IAOI,sCAAA;ELukFV;EK9kFM;IAOI,yCAAA;EL0kFV;EKjlFM;IAOI,uBAAA;EL6kFV;EKplFM;IAOI,uBAAA;ELglFV;EKvlFM;IAOI,yBAAA;ELmlFV;EK1lFM;IAOI,yBAAA;ELslFV;EK7lFM;IAOI,0BAAA;ELylFV;EKhmFM;IAOI,4BAAA;EL4lFV;EKnmFM;IAOI,kCAAA;EL+lFV;EKtmFM;IAOI,sCAAA;ELkmFV;EKzmFM;IAOI,oCAAA;ELqmFV;EK5mFM;IAOI,kCAAA;ELwmFV;EK/mFM;IAOI,yCAAA;EL2mFV;EKlnFM;IAOI,wCAAA;EL8mFV;EKrnFM;IAOI,wCAAA;ELinFV;EKxnFM;IAOI,kCAAA;ELonFV;EK3nFM;IAOI,gCAAA;ELunFV;EK9nFM;IAOI,8BAAA;EL0nFV;EKjoFM;IAOI,gCAAA;EL6nFV;EKpoFM;IAOI,+BAAA;ELgoFV;EKvoFM;IAOI,oCAAA;ELmoFV;EK1oFM;IAOI,kCAAA;ELsoFV;EK7oFM;IAOI,gCAAA;ELyoFV;EKhpFM;IAOI,uCAAA;EL4oFV;EKnpFM;IAOI,sCAAA;EL+oFV;EKtpFM;IAOI,iCAAA;ELkpFV;EKzpFM;IAOI,2BAAA;ELqpFV;EK5pFM;IAOI,iCAAA;ELwpFV;EK/pFM;IAOI,+BAAA;EL2pFV;EKlqFM;IAOI,6BAAA;EL8pFV;EKrqFM;IAOI,+BAAA;ELiqFV;EKxqFM;IAOI,8BAAA;ELoqFV;EK3qFM;IAOI,oBAAA;ELuqFV;EK9qFM;IAOI,mBAAA;EL0qFV;EKjrFM;IAOI,mBAAA;EL6qFV;EKprFM;IAOI,mBAAA;ELgrFV;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AAA;ELy8FV;EKh9FM;IAOI,iCAAA;EL48FV;EKn9FM;IAOI,+BAAA;EL+8FV;EKt9FM;IAOI,iCAAA;ELk9FV;EKz9FM;IAOI,+BAAA;ELq9FV;EK59FM;IAOI,2BAAA;ELw9FV;EK/9FM;IAOI,iCAAA;EL29FV;EKl+FM;IAOI,gCAAA;EL89FV;EKr+FM;IAOI,8BAAA;ELi+FV;EKx+FM;IAOI,gCAAA;ELo+FV;EK3+FM;IAOI,8BAAA;ELu+FV;AACF;ACl/FI;EIGI;IAOI,0BAAA;EL4+FV;EKn/FM;IAOI,gCAAA;EL++FV;EKt/FM;IAOI,yBAAA;ELk/FV;EKz/FM;IAOI,wBAAA;ELq/FV;EK5/FM;IAOI,+BAAA;ELw/FV;EK//FM;IAOI,yBAAA;EL2/FV;EKlgGM;IAOI,6BAAA;EL8/FV;EKrgGM;IAOI,8BAAA;ELigGV;EKxgGM;IAOI,wBAAA;ELogGV;EK3gGM;IAOI,+BAAA;ELugGV;EK9gGM;IAOI,wBAAA;EL0gGV;EKjhGM;IAOI,yBAAA;EL6gGV;EKphGM;IAOI,8BAAA;ELghGV;EKvhGM;IAOI,iCAAA;ELmhGV;EK1hGM;IAOI,sCAAA;ELshGV;EK7hGM;IAOI,yCAAA;ELyhGV;EKhiGM;IAOI,uBAAA;EL4hGV;EKniGM;IAOI,uBAAA;EL+hGV;EKtiGM;IAOI,yBAAA;ELkiGV;EKziGM;IAOI,yBAAA;ELqiGV;EK5iGM;IAOI,0BAAA;ELwiGV;EK/iGM;IAOI,4BAAA;EL2iGV;EKljGM;IAOI,kCAAA;EL8iGV;EKrjGM;IAOI,sCAAA;ELijGV;EKxjGM;IAOI,oCAAA;ELojGV;EK3jGM;IAOI,kCAAA;ELujGV;EK9jGM;IAOI,yCAAA;EL0jGV;EKjkGM;IAOI,wCAAA;EL6jGV;EKpkGM;IAOI,wCAAA;ELgkGV;EKvkGM;IAOI,kCAAA;ELmkGV;EK1kGM;IAOI,gCAAA;ELskGV;EK7kGM;IAOI,8BAAA;ELykGV;EKhlGM;IAOI,gCAAA;EL4kGV;EKnlGM;IAOI,+BAAA;EL+kGV;EKtlGM;IAOI,oCAAA;ELklGV;EKzlGM;IAOI,kCAAA;ELqlGV;EK5lGM;IAOI,gCAAA;ELwlGV;EK/l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ELi3GV;EKx3GM;IAOI,+BAAA;ELo3GV;EK33GM;IAOI,8BAAA;ELu3GV;EK93GM;IAOI,4BAAA;EL03GV;EKj4GM;IAOI,8BAAA;EL63GV;EKp4GM;IAOI,4BAAA;ELg4GV;EKv4GM;IAOI,0BAAA;ELm4GV;EK14GM;IAOI,gCAAA;ELs4GV;EK74GM;IAOI,+BAAA;ELy4GV;EKh5GM;IAOI,6BAAA;EL44GV;EKn5GM;IAOI,+BAAA;EL+4GV;EKt5GM;IAOI,6BAAA;ELk5GV;EKz5GM;IAOI,4BAAA;ELq5GV;EK55GM;IAOI,kCAAA;ELw5GV;EK/5GM;IAOI,iCAAA;EL25GV;EKl6GM;IAOI,+BAAA;EL85GV;EKr6GM;IAOI,iCAAA;ELi6GV;EKx6GM;IAOI,+BAAA;ELo6GV;EK36GM;IAOI,2BAAA;ELu6GV;EK96GM;IAOI,iCAAA;EL06GV;EKj7GM;IAOI,gCAAA;EL66GV;EKp7GM;IAOI,8BAAA;ELg7GV;EKv7GM;IAOI,gCAAA;ELm7GV;EK17GM;IAOI,8BAAA;ELs7GV;AACF;ACj8GI;EIGI;IAOI,0BAAA;EL27GV;EKl8GM;IAOI,gCAAA;EL87GV;EKr8GM;IAOI,yBAAA;ELi8GV;EKx8GM;IAOI,wBAAA;ELo8GV;EK38GM;IAOI,+BAAA;ELu8GV;EK98GM;IAOI,yBAAA;EL08GV;EKj9GM;IAOI,6BAAA;EL68GV;EKp9GM;IAOI,8BAAA;ELg9GV;EKv9GM;IAOI,wBAAA;ELm9GV;EK19GM;IAOI,+BAAA;ELs9GV;EK79GM;IAOI,wBAAA;ELy9GV;EKh+GM;IAOI,yBAAA;EL49GV;EKn+GM;IAOI,8BAAA;EL+9GV;EKt+GM;IAOI,iCAAA;ELk+GV;EKz+GM;IAOI,sCAAA;ELq+GV;EK5+GM;IAOI,yCAAA;ELw+GV;EK/+GM;IAOI,uBAAA;EL2+GV;EKl/GM;IAOI,uBAAA;EL8+GV;EKr/GM;IAOI,yBAAA;ELi/GV;EKx/GM;IAOI,yBAAA;ELo/GV;EK3/GM;IAOI,0BAAA;ELu/GV;EK9/GM;IAOI,4BAAA;EL0/GV;EKjgHM;IAOI,kCAAA;EL6/GV;EKpgHM;IAOI,sCAAA;ELggHV;EKvgHM;I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","file":"bootstrap-grid.rtl.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-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 --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","/*!\n * Bootstrap Grid v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@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:root {\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\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.33333333%;\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.66666667%;\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 .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\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-inline-grid {\n display: inline-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 .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-inline-grid {\n display: inline-grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\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 .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-inline-grid {\n display: inline-grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\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 .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-inline-grid {\n display: inline-grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\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 .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-inline-grid {\n display: inline-grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\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 .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-inline-grid {\n display: inline-grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\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 .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-inline-grid {\n display: inline-grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\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, xxl: 1400px)\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, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\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, xxl: 1400px))\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, xxl: 1400px))\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, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\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, $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($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 \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\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-100,\n \"purple-200\": $purple-200,\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// 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-text-variables\n$primary-text-emphasis: shade-color($primary, 60%) !default;\n$secondary-text-emphasis: shade-color($secondary, 60%) !default;\n$success-text-emphasis: shade-color($success, 60%) !default;\n$info-text-emphasis: shade-color($info, 60%) !default;\n$warning-text-emphasis: shade-color($warning, 60%) !default;\n$danger-text-emphasis: shade-color($danger, 60%) !default;\n$light-text-emphasis: $gray-700 !default;\n$dark-text-emphasis: $gray-700 !default;\n// scss-docs-end theme-text-variables\n\n// scss-docs-start theme-bg-subtle-variables\n$primary-bg-subtle: tint-color($primary, 80%) !default;\n$secondary-bg-subtle: tint-color($secondary, 80%) !default;\n$success-bg-subtle: tint-color($success, 80%) !default;\n$info-bg-subtle: tint-color($info, 80%) !default;\n$warning-bg-subtle: tint-color($warning, 80%) !default;\n$danger-bg-subtle: tint-color($danger, 80%) !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n// scss-docs-end theme-bg-subtle-variables\n\n// scss-docs-start theme-border-subtle-variables\n$primary-border-subtle: tint-color($primary, 60%) !default;\n$secondary-border-subtle: tint-color($secondary, 60%) !default;\n$success-border-subtle: tint-color($success, 60%) !default;\n$info-border-subtle: tint-color($info, 60%) !default;\n$warning-border-subtle: tint-color($warning, 60%) !default;\n$danger-border-subtle: tint-color($danger, 60%) !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n// scss-docs-end theme-border-subtle-variables\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-container-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$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !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// 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-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$body-emphasis-color: $black !default;\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// Icon links\n// scss-docs-start icon-link-variables\n$icon-link-gap: .375rem !default;\n$icon-link-underline-offset: .25em !default;\n$icon-link-icon-size: 1em !default;\n$icon-link-icon-transition: .2s ease-in-out transform !default;\n$icon-link-icon-transform: translate3d(.25em, 0, 0) !default;\n// scss-docs-end icon-link-variables\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// Container padding\n\n$container-padding-x: $grid-gutter-width !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$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-xxl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n// fusv-disable\n$border-radius-2xl: $border-radius-xxl !default; // Deprecated in v5.3.0\n// fusv-enable\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 focus-ring-variables\n$focus-ring-width: .25rem !default;\n$focus-ring-opacity: .25 !default;\n$focus-ring-color: rgba($primary, $focus-ring-opacity) !default;\n$focus-ring-blur: 0 !default;\n$focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color !default;\n// scss-docs-end focus-ring-variables\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\", \"Noto Sans\", \"Liberation Sans\", Arial, 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(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$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-medium: 500 !default;\n$font-weight-semibold: 600 !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: inherit !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-family: null !default;\n$display-font-style: null !default;\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// fusv-disable\n$text-muted: var(--#{$prefix}secondary-color) !default; // Deprecated in 5.3.0\n// fusv-enable\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\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n// scss-docs-start vr-variables\n$vr-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end vr-variables\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-color: $body-color !default;\n$mark-bg: $yellow-100 !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: var(--#{$prefix}emphasis-color) !default;\n$table-bg: var(--#{$prefix}body-bg) !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(var(--#{$prefix}emphasis-color-rgb), $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(var(--#{$prefix}emphasis-color-rgb), $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(var(--#{$prefix}emphasis-color-rgb), $table-hover-bg-factor) !default;\n\n$table-border-factor: .2 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: var(--#{$prefix}secondary-color) !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: $focus-ring-width !default;\n$input-btn-focus-color-opacity: $focus-ring-opacity !default;\n$input-btn-focus-color: $focus-ring-color !default;\n$input-btn-focus-blur: $focus-ring-blur !default;\n$input-btn-focus-box-shadow: $focus-ring-box-shadow !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: var(--#{$prefix}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-color: var(--#{$prefix}body-color) !default;\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: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: var(--#{$prefix}border-radius) !default;\n$btn-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$btn-border-radius-lg: var(--#{$prefix}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: var(--#{$prefix}secondary-color) !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: var(--#{$prefix}body-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n\n$input-border-radius: var(--#{$prefix}border-radius) !default;\n$input-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;\n$input-border-radius-lg: var(--#{$prefix}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: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc(#{$input-border-width} * 2) !default; // stylelint-disable-line function-disallowed-list\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: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !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: $focus-ring-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: var(--#{$prefix}tertiary-bg) !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: $input-disabled-bg !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: var(--#{$prefix}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: var(--#{$prefix}secondary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: var(--#{$prefix}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: var(--#{$prefix}secondary-color) !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: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !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-height: 1.5em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !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-colors\n$form-valid-color: $form-feedback-valid-color !default;\n$form-valid-border-color: $form-feedback-valid-color !default;\n$form-invalid-color: $form-feedback-invalid-color !default;\n$form-invalid-border-color: $form-feedback-invalid-color !default;\n// scss-docs-end form-validation-colors\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}form-valid-color),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}form-valid-border-color),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}form-invalid-color),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}form-invalid-border-color),\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$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\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: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}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: var(--#{$prefix}secondary-color) !default;\n$nav-link-focus-box-shadow: $focus-ring-box-shadow !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-underline-gap: 1rem !default;\n$nav-underline-border-width: .125rem !default;\n$nav-underline-link-active-color: var(--#{$prefix}emphasis-color) !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\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-icon-color: rgba($body-color, .75) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-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-icon-color: $navbar-dark-color !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !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-dark-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: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: var(--#{$prefix}border-radius) !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !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: var(--#{$prefix}tertiary-color) !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-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\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-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc(#{$pagination-border-width} * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $focus-ring-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !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: var(--#{$prefix}border-radius-sm) !default;\n$pagination-border-radius-lg: var(--#{$prefix}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-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}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(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !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: var(--#{$prefix}body-color) !default;\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}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: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;\n\n// fusv-disable\n$accordion-button-focus-border-color: $input-focus-border-color !default; // Deprecated in v5.3.3\n// fusv-enable\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text-emphasis !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: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}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: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\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: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc(#{$popover-border-radius} - #{$popover-border-width}) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: var(--#{$prefix}box-shadow) !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !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: var(--#{$prefix}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// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\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(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !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: var(--#{$prefix}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: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}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: var(--#{$prefix}box-shadow-sm) !default;\n$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-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-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\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: var(--#{$prefix}border-radius) !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !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// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\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: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}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: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !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: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !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: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}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: var(--#{$prefix}secondary-color) !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: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !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// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\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-dark-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: $focus-ring-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: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-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: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n\n@import \"variables-dark\"; // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3\n","// Row\n//\n// Rows contain your columns.\n\n:root {\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\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(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$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 --#{$prefix}gutter-x: #{$gutter};\n --#{$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(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\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(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$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// number of 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: percentage(divide(1, $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 --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$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 an 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 // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, 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 (e.g. 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 --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$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, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\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 @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\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/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css new file mode 100644 index 0000000000..672cbc2e62 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap Grid v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);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}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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.33333333%}.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.66666667%}.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-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.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-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin: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-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin: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-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin: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-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin: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-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin: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-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap-grid.rtl.min.css.map */ \ No newline at end of file diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map new file mode 100644 index 0000000000..1c926af57e --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/mixins/_banner.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":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-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.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-left: auto;\n margin-right: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@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:root {\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\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.33333333%;\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.66666667%;\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 .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-right: 0;\n }\n .offset-sm-1 {\n margin-right: 8.33333333%;\n }\n .offset-sm-2 {\n margin-right: 16.66666667%;\n }\n .offset-sm-3 {\n margin-right: 25%;\n }\n .offset-sm-4 {\n margin-right: 33.33333333%;\n }\n .offset-sm-5 {\n margin-right: 41.66666667%;\n }\n .offset-sm-6 {\n margin-right: 50%;\n }\n .offset-sm-7 {\n margin-right: 58.33333333%;\n }\n .offset-sm-8 {\n margin-right: 66.66666667%;\n }\n .offset-sm-9 {\n margin-right: 75%;\n }\n .offset-sm-10 {\n margin-right: 83.33333333%;\n }\n .offset-sm-11 {\n margin-right: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-right: 0;\n }\n .offset-md-1 {\n margin-right: 8.33333333%;\n }\n .offset-md-2 {\n margin-right: 16.66666667%;\n }\n .offset-md-3 {\n margin-right: 25%;\n }\n .offset-md-4 {\n margin-right: 33.33333333%;\n }\n .offset-md-5 {\n margin-right: 41.66666667%;\n }\n .offset-md-6 {\n margin-right: 50%;\n }\n .offset-md-7 {\n margin-right: 58.33333333%;\n }\n .offset-md-8 {\n margin-right: 66.66666667%;\n }\n .offset-md-9 {\n margin-right: 75%;\n }\n .offset-md-10 {\n margin-right: 83.33333333%;\n }\n .offset-md-11 {\n margin-right: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-right: 0;\n }\n .offset-lg-1 {\n margin-right: 8.33333333%;\n }\n .offset-lg-2 {\n margin-right: 16.66666667%;\n }\n .offset-lg-3 {\n margin-right: 25%;\n }\n .offset-lg-4 {\n margin-right: 33.33333333%;\n }\n .offset-lg-5 {\n margin-right: 41.66666667%;\n }\n .offset-lg-6 {\n margin-right: 50%;\n }\n .offset-lg-7 {\n margin-right: 58.33333333%;\n }\n .offset-lg-8 {\n margin-right: 66.66666667%;\n }\n .offset-lg-9 {\n margin-right: 75%;\n }\n .offset-lg-10 {\n margin-right: 83.33333333%;\n }\n .offset-lg-11 {\n margin-right: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-right: 0;\n }\n .offset-xl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xl-3 {\n margin-right: 25%;\n }\n .offset-xl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xl-6 {\n margin-right: 50%;\n }\n .offset-xl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xl-9 {\n margin-right: 75%;\n }\n .offset-xl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xl-11 {\n margin-right: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\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 .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-right: 0;\n }\n .offset-xxl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-right: 25%;\n }\n .offset-xxl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-right: 50%;\n }\n .offset-xxl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-right: 75%;\n }\n .offset-xxl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-right: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\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-inline-grid {\n display: inline-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 .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-inline-grid {\n display: inline-grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-sm-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-left: 0 !important;\n }\n .me-sm-1 {\n margin-left: 0.25rem !important;\n }\n .me-sm-2 {\n margin-left: 0.5rem !important;\n }\n .me-sm-3 {\n margin-left: 1rem !important;\n }\n .me-sm-4 {\n margin-left: 1.5rem !important;\n }\n .me-sm-5 {\n margin-left: 3rem !important;\n }\n .me-sm-auto {\n margin-left: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-right: 0 !important;\n }\n .ms-sm-1 {\n margin-right: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-right: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-right: 1rem !important;\n }\n .ms-sm-4 {\n margin-right: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-right: 3rem !important;\n }\n .ms-sm-auto {\n margin-right: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-sm-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-sm-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-left: 0 !important;\n }\n .pe-sm-1 {\n padding-left: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-left: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-left: 1rem !important;\n }\n .pe-sm-4 {\n padding-left: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-left: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-right: 0 !important;\n }\n .ps-sm-1 {\n padding-right: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-right: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-right: 1rem !important;\n }\n .ps-sm-4 {\n padding-right: 1.5rem !important;\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 .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-inline-grid {\n display: inline-grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-md-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-md-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-md-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-left: 0 !important;\n }\n .me-md-1 {\n margin-left: 0.25rem !important;\n }\n .me-md-2 {\n margin-left: 0.5rem !important;\n }\n .me-md-3 {\n margin-left: 1rem !important;\n }\n .me-md-4 {\n margin-left: 1.5rem !important;\n }\n .me-md-5 {\n margin-left: 3rem !important;\n }\n .me-md-auto {\n margin-left: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-right: 0 !important;\n }\n .ms-md-1 {\n margin-right: 0.25rem !important;\n }\n .ms-md-2 {\n margin-right: 0.5rem !important;\n }\n .ms-md-3 {\n margin-right: 1rem !important;\n }\n .ms-md-4 {\n margin-right: 1.5rem !important;\n }\n .ms-md-5 {\n margin-right: 3rem !important;\n }\n .ms-md-auto {\n margin-right: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-md-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-md-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-left: 0 !important;\n }\n .pe-md-1 {\n padding-left: 0.25rem !important;\n }\n .pe-md-2 {\n padding-left: 0.5rem !important;\n }\n .pe-md-3 {\n padding-left: 1rem !important;\n }\n .pe-md-4 {\n padding-left: 1.5rem !important;\n }\n .pe-md-5 {\n padding-left: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-right: 0 !important;\n }\n .ps-md-1 {\n padding-right: 0.25rem !important;\n }\n .ps-md-2 {\n padding-right: 0.5rem !important;\n }\n .ps-md-3 {\n padding-right: 1rem !important;\n }\n .ps-md-4 {\n padding-right: 1.5rem !important;\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 .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-inline-grid {\n display: inline-grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-lg-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-left: 0 !important;\n }\n .me-lg-1 {\n margin-left: 0.25rem !important;\n }\n .me-lg-2 {\n margin-left: 0.5rem !important;\n }\n .me-lg-3 {\n margin-left: 1rem !important;\n }\n .me-lg-4 {\n margin-left: 1.5rem !important;\n }\n .me-lg-5 {\n margin-left: 3rem !important;\n }\n .me-lg-auto {\n margin-left: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-right: 0 !important;\n }\n .ms-lg-1 {\n margin-right: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-right: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-right: 1rem !important;\n }\n .ms-lg-4 {\n margin-right: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-right: 3rem !important;\n }\n .ms-lg-auto {\n margin-right: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-lg-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-lg-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-left: 0 !important;\n }\n .pe-lg-1 {\n padding-left: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-left: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-left: 1rem !important;\n }\n .pe-lg-4 {\n padding-left: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-left: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-right: 0 !important;\n }\n .ps-lg-1 {\n padding-right: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-right: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-right: 1rem !important;\n }\n .ps-lg-4 {\n padding-right: 1.5rem !important;\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 .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-inline-grid {\n display: inline-grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-left: 0 !important;\n }\n .me-xl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xl-3 {\n margin-left: 1rem !important;\n }\n .me-xl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xl-5 {\n margin-left: 3rem !important;\n }\n .me-xl-auto {\n margin-left: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-right: 0 !important;\n }\n .ms-xl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-right: 1rem !important;\n }\n .ms-xl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-right: 3rem !important;\n }\n .ms-xl-auto {\n margin-right: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-left: 0 !important;\n }\n .pe-xl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-left: 1rem !important;\n }\n .pe-xl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-left: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-right: 0 !important;\n }\n .ps-xl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-right: 1rem !important;\n }\n .ps-xl-4 {\n padding-right: 1.5rem !important;\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 .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-inline-grid {\n display: inline-grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xxl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xxl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xxl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-left: 0 !important;\n }\n .me-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-left: 1rem !important;\n }\n .me-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-left: 3rem !important;\n }\n .me-xxl-auto {\n margin-left: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-right: 0 !important;\n }\n .ms-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-right: 1rem !important;\n }\n .ms-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-right: 3rem !important;\n }\n .ms-xxl-auto {\n margin-right: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xxl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xxl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-left: 0 !important;\n }\n .pe-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-left: 1rem !important;\n }\n .pe-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-left: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-right: 0 !important;\n }\n .ps-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-right: 1rem !important;\n }\n .ps-xxl-4 {\n padding-right: 1.5rem !important;\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 .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-inline-grid {\n display: inline-grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\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 --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\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, xxl: 1400px)\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, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\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, xxl: 1400px))\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, xxl: 1400px))\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, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\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, $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($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:root {\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\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(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$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 --#{$prefix}gutter-x: #{$gutter};\n --#{$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(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\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(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$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// number of 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: percentage(divide(1, $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 --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$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 an 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 // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, 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 (e.g. 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 --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$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, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\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 @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\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/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css new file mode 100644 index 0000000000..6305410923 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css @@ -0,0 +1,597 @@ +/*! + * Bootstrap Reboot v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root, +[data-bs-theme=light] { + --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-black: #000; + --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-primary-text-emphasis: #052c65; + --bs-secondary-text-emphasis: #2b2f32; + --bs-success-text-emphasis: #0a3622; + --bs-info-text-emphasis: #055160; + --bs-warning-text-emphasis: #664d03; + --bs-danger-text-emphasis: #58151c; + --bs-light-text-emphasis: #495057; + --bs-dark-text-emphasis: #495057; + --bs-primary-bg-subtle: #cfe2ff; + --bs-secondary-bg-subtle: #e2e3e5; + --bs-success-bg-subtle: #d1e7dd; + --bs-info-bg-subtle: #cff4fc; + --bs-warning-bg-subtle: #fff3cd; + --bs-danger-bg-subtle: #f8d7da; + --bs-light-bg-subtle: #fcfcfd; + --bs-dark-bg-subtle: #ced4da; + --bs-primary-border-subtle: #9ec5fe; + --bs-secondary-border-subtle: #c4c8cb; + --bs-success-border-subtle: #a3cfbb; + --bs-info-border-subtle: #9eeaf9; + --bs-warning-border-subtle: #ffe69c; + --bs-danger-border-subtle: #f1aeb5; + --bs-light-border-subtle: #e9ecef; + --bs-dark-border-subtle: #adb5bd; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --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-color-rgb: 33, 37, 41; + --bs-body-bg: #fff; + --bs-body-bg-rgb: 255, 255, 255; + --bs-emphasis-color: #000; + --bs-emphasis-color-rgb: 0, 0, 0; + --bs-secondary-color: rgba(33, 37, 41, 0.75); + --bs-secondary-color-rgb: 33, 37, 41; + --bs-secondary-bg: #e9ecef; + --bs-secondary-bg-rgb: 233, 236, 239; + --bs-tertiary-color: rgba(33, 37, 41, 0.5); + --bs-tertiary-color-rgb: 33, 37, 41; + --bs-tertiary-bg: #f8f9fa; + --bs-tertiary-bg-rgb: 248, 249, 250; + --bs-heading-color: inherit; + --bs-link-color: #0d6efd; + --bs-link-color-rgb: 13, 110, 253; + --bs-link-decoration: underline; + --bs-link-hover-color: #0a58ca; + --bs-link-hover-color-rgb: 10, 88, 202; + --bs-code-color: #d63384; + --bs-highlight-color: #212529; + --bs-highlight-bg: #fff3cd; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-xxl: 2rem; + --bs-border-radius-2xl: var(--bs-border-radius-xxl); + --bs-border-radius-pill: 50rem; + --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); + --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-focus-ring-width: 0.25rem; + --bs-focus-ring-opacity: 0.25; + --bs-focus-ring-color: rgba(13, 110, 253, 0.25); + --bs-form-valid-color: #198754; + --bs-form-valid-border-color: #198754; + --bs-form-invalid-color: #dc3545; + --bs-form-invalid-border-color: #dc3545; +} + +[data-bs-theme=dark] { + color-scheme: dark; + --bs-body-color: #dee2e6; + --bs-body-color-rgb: 222, 226, 230; + --bs-body-bg: #212529; + --bs-body-bg-rgb: 33, 37, 41; + --bs-emphasis-color: #fff; + --bs-emphasis-color-rgb: 255, 255, 255; + --bs-secondary-color: rgba(222, 226, 230, 0.75); + --bs-secondary-color-rgb: 222, 226, 230; + --bs-secondary-bg: #343a40; + --bs-secondary-bg-rgb: 52, 58, 64; + --bs-tertiary-color: rgba(222, 226, 230, 0.5); + --bs-tertiary-color-rgb: 222, 226, 230; + --bs-tertiary-bg: #2b3035; + --bs-tertiary-bg-rgb: 43, 48, 53; + --bs-primary-text-emphasis: #6ea8fe; + --bs-secondary-text-emphasis: #a7acb1; + --bs-success-text-emphasis: #75b798; + --bs-info-text-emphasis: #6edff6; + --bs-warning-text-emphasis: #ffda6a; + --bs-danger-text-emphasis: #ea868f; + --bs-light-text-emphasis: #f8f9fa; + --bs-dark-text-emphasis: #dee2e6; + --bs-primary-bg-subtle: #031633; + --bs-secondary-bg-subtle: #161719; + --bs-success-bg-subtle: #051b11; + --bs-info-bg-subtle: #032830; + --bs-warning-bg-subtle: #332701; + --bs-danger-bg-subtle: #2c0b0e; + --bs-light-bg-subtle: #343a40; + --bs-dark-bg-subtle: #1a1d20; + --bs-primary-border-subtle: #084298; + --bs-secondary-border-subtle: #41464b; + --bs-success-border-subtle: #0f5132; + --bs-info-border-subtle: #087990; + --bs-warning-border-subtle: #997404; + --bs-danger-border-subtle: #842029; + --bs-light-border-subtle: #495057; + --bs-dark-border-subtle: #343a40; + --bs-heading-color: inherit; + --bs-link-color: #6ea8fe; + --bs-link-hover-color: #8bb9fe; + --bs-link-color-rgb: 110, 168, 254; + --bs-link-hover-color-rgb: 139, 185, 254; + --bs-code-color: #e685b5; + --bs-highlight-color: #dee2e6; + --bs-highlight-bg: #664d03; + --bs-border-color: #495057; + --bs-border-color-translucent: rgba(255, 255, 255, 0.15); + --bs-form-valid-color: #75b798; + --bs-form-valid-border-color: #75b798; + --bs-form-invalid-color: #ea868f; + --bs-form-invalid-border-color: #ea868f; +} + +*, +*::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; + border: 0; + border-top: var(--bs-border-width) solid; + opacity: 0.25; +} + +h6, h5, h4, h3, h2, h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + color: var(--bs-heading-color); +} + +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] { + -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.1875em; + color: var(--bs-highlight-color); + background-color: var(--bs-highlight-bg); +} + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); + text-decoration: underline; +} +a:hover { + --bs-link-color-rgb: var(--bs-link-hover-color-rgb); +} + +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; +} + +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: var(--bs-code-color); + word-wrap: break-word; +} +a > code { + color: inherit; +} + +kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; +} +kbd kbd { + padding: 0; + font-size: 1em; +} + +figure { + margin: 0 0 1rem; +} + +img, +svg { + vertical-align: middle; +} + +table { + caption-side: bottom; + border-collapse: collapse; +} + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-secondary-color); + 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]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { + display: none !important; +} + +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] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +/* 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; + -webkit-appearance: button; +} + +::file-selector-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +iframe { + border: 0; +} + +summary { + display: list-item; + cursor: pointer; +} + +progress { + vertical-align: baseline; +} + +[hidden] { + display: none !important; +} + +/*# sourceMappingURL=bootstrap-reboot.css.map */ \ No newline at end of file diff --git a/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map new file mode 100644 index 0000000000..5fe522b6d7 --- /dev/null +++ b/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/mixins/_color-mode.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss"],"names":[],"mappings":"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","file":"bootstrap-reboot.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\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 --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\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 --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text-emphasis: #052c65;\n --bs-secondary-text-emphasis: #2b2f32;\n --bs-success-text-emphasis: #0a3622;\n --bs-info-text-emphasis: #055160;\n --bs-warning-text-emphasis: #664d03;\n --bs-danger-text-emphasis: #58151c;\n --bs-light-text-emphasis: #495057;\n --bs-dark-text-emphasis: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #e2e3e5;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #c4c8cb;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-heading-color: inherit;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-color: #212529;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-xxl: 2rem;\n --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-focus-ring-width: 0.25rem;\n --bs-focus-ring-opacity: 0.25;\n --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n --bs-form-valid-color: #198754;\n --bs-form-valid-border-color: #198754;\n --bs-form-invalid-color: #dc3545;\n --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n color-scheme: dark;\n --bs-body-color: #dee2e6;\n --bs-body-color-rgb: 222, 226, 230;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #fff;\n --bs-emphasis-color-rgb: 255, 255, 255;\n --bs-secondary-color: rgba(222, 226, 230, 0.75);\n --bs-secondary-color-rgb: 222, 226, 230;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n --bs-tertiary-color-rgb: 222, 226, 230;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-primary-text-emphasis: #6ea8fe;\n --bs-secondary-text-emphasis: #a7acb1;\n --bs-success-text-emphasis: #75b798;\n --bs-info-text-emphasis: #6edff6;\n --bs-warning-text-emphasis: #ffda6a;\n --bs-danger-text-emphasis: #ea868f;\n --bs-light-text-emphasis: #f8f9fa;\n --bs-dark-text-emphasis: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #161719;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #41464b;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #087990;\n --bs-warning-border-subtle: #997404;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: inherit;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #8bb9fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 139, 185, 254;\n --bs-code-color: #e685b5;\n --bs-highlight-color: #dee2e6;\n --bs-highlight-bg: #664d03;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n --bs-form-valid-color: #75b798;\n --bs-form-valid-border-color: #75b798;\n --bs-form-invalid-color: #ea868f;\n --bs-form-invalid-border-color: #ea868f;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color);\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] {\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.1875em;\n color: var(--bs-highlight-color);\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\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]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\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 -webkit-appearance: textfield;\n outline-offset: -2px;\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 -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","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\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 @include font-size(var(--#{$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(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$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\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\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: var(--#{$prefix}heading-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. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\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 color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-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: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\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}\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: var(--#{$prefix}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-`

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%0DufI@BzXxV#Q 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