From 81b15b510158c892b4f3a7689c90810546c3823f Mon Sep 17 00:00:00 2001 From: Marlon Regenhardt Date: Tue, 27 Jun 2023 00:45:53 +0200 Subject: [PATCH 01/12] Add Blazor WebAuthn lib --- .gitignore | 2 + .../Fido2.BlazorWebAssembly.csproj | 42 ++++++++++++ .../FidoBlazorSerializerContext.cs | 12 ++++ Src/Fido2.BlazorWebAssembly/WebAuthn.cs | 59 +++++++++++++++++ Src/Fido2.BlazorWebAssembly/tsconfig.json | 13 ++++ .../wwwroot/js/WebAuthn.ts | 65 +++++++++++++++++++ fido2-net-lib.sln | 7 +- 7 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj create mode 100644 Src/Fido2.BlazorWebAssembly/FidoBlazorSerializerContext.cs create mode 100644 Src/Fido2.BlazorWebAssembly/WebAuthn.cs create mode 100644 Src/Fido2.BlazorWebAssembly/tsconfig.json create mode 100644 Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.ts diff --git a/.gitignore b/.gitignore index c6b2f6fb6..8aa11f5ff 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,8 @@ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ +/Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.js +/Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.js.map # Visual Studio 2015/2017 cache/options directory .vs/ diff --git a/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj b/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj new file mode 100644 index 000000000..2a3514fc2 --- /dev/null +++ b/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj @@ -0,0 +1,42 @@ + + + + $(SupportedTargetFrameworks) + true + enable + enable + true + $(NoWarn);CS1591 + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + PreserveNewest + + + + diff --git a/Src/Fido2.BlazorWebAssembly/FidoBlazorSerializerContext.cs b/Src/Fido2.BlazorWebAssembly/FidoBlazorSerializerContext.cs new file mode 100644 index 000000000..e009e891e --- /dev/null +++ b/Src/Fido2.BlazorWebAssembly/FidoBlazorSerializerContext.cs @@ -0,0 +1,12 @@ +namespace Fido2.BlazorWebAssembly; + +using System.Text.Json.Serialization; +using Fido2NetLib; + +[JsonSerializable(typeof(AssertionOptions))] +[JsonSerializable(typeof(AuthenticatorAssertionRawResponse))] +[JsonSerializable(typeof(AuthenticatorAttestationRawResponse))] +[JsonSerializable(typeof(CredentialCreateOptions))] +public partial class FidoBlazorSerializerContext : JsonSerializerContext +{ +} diff --git a/Src/Fido2.BlazorWebAssembly/WebAuthn.cs b/Src/Fido2.BlazorWebAssembly/WebAuthn.cs new file mode 100644 index 000000000..5f05db6de --- /dev/null +++ b/Src/Fido2.BlazorWebAssembly/WebAuthn.cs @@ -0,0 +1,59 @@ +namespace Fido2.BlazorWebAssembly; +using System.Diagnostics.CodeAnalysis; +using Fido2NetLib; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.JSInterop; + +/// +/// Module for accessing the browser's WebAuthn API. +/// +public class WebAuthn +{ + private IJSObjectReference _jsModule = null!; + private readonly Task _initializer; + + public WebAuthn(IJSRuntime js) + { + _initializer = Task.Run(async () => + _jsModule = await js.InvokeAsync("import", "./_content/Fido2.BlazorWebAssembly/js/WebAuthn.js")); + } + + /// + /// Wait for this to make sure this module is initialized. + /// + /// + public Task Init() => _initializer; + + /// + /// Whether or not this browser supports WebAuthn. + /// + /// + public async Task IsWebAuthnSupportedAsync() => await _jsModule.InvokeAsync("isWebAuthnPossible"); + + /// + /// Creates a new credential. + /// + /// + /// + public async Task CreateCredsAsync(CredentialCreateOptions options) => + await _jsModule.InvokeAsync("createCreds", options); + + /// + /// Verifies a credential for login. + /// + /// + /// + public async Task VerifyAsync(AssertionOptions options) => + await _jsModule.InvokeAsync("verify", options); +} + +public static class DependencyInjection +{ + /// + /// Adds the service to the DI container. + /// + /// + /// + public static IServiceCollection AddWebAuthn(this IServiceCollection services) => + services.AddSingleton(); +} diff --git a/Src/Fido2.BlazorWebAssembly/tsconfig.json b/Src/Fido2.BlazorWebAssembly/tsconfig.json new file mode 100644 index 000000000..fe7f40ec9 --- /dev/null +++ b/Src/Fido2.BlazorWebAssembly/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "noImplicitAny": true, + "noEmitOnError": false, + "removeComments": false, + "sourceMap": true, + "target": "es2020" + }, + "exclude": [ + "node_modules" + ] +} diff --git a/Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.ts b/Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.ts new file mode 100644 index 000000000..99457d298 --- /dev/null +++ b/Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.ts @@ -0,0 +1,65 @@ +export function isWebAuthnPossible() { + return !!window.PublicKeyCredential; +} + +function toBase64Url(arrayBuffer: ArrayBuffer): string { + return btoa(String.fromCharCode(...new Uint8Array(arrayBuffer))).replace(/\+/g, "-").replace(/\//g, "_").replace(/=*$/g, ""); +} +function fromBase64Url(value: string): Uint8Array { + return Uint8Array.from(atob(value.replace(/-/g, "+").replace(/_/g, "/")), c => c.charCodeAt(0)); +} +function base64StringToUrl(base64String: string): string { + return base64String.replace(/\+/g, "-").replace(/\//g, "_").replace(/=*$/g, ""); +} + +export async function createCreds(options: PublicKeyCredentialCreationOptions) { + if (typeof options.challenge === 'string') + options.challenge = fromBase64Url(options.challenge); + if (typeof options.user.id === 'string') + options.user.id = fromBase64Url(options.user.id); + if (options.rp.id === null) + options.rp.id = undefined; + for (let cred of options.excludeCredentials) { + if (typeof cred.id === 'string') + cred.id = fromBase64Url(cred.id); + } + var newCreds = await navigator.credentials.create({ publicKey: options }) as PublicKeyCredential; + const response = newCreds.response as AuthenticatorAttestationResponse; + const retval = { + id: base64StringToUrl(newCreds.id), + rawId: toBase64Url(newCreds.rawId), + type: newCreds.type, + extensions: newCreds.getClientExtensionResults(), + response: { + attestationObject: toBase64Url(response.attestationObject), + clientDataJSON: toBase64Url(response.clientDataJSON) + } + }; + return retval; +} + +export async function verify(options: PublicKeyCredentialRequestOptions) { + if (typeof options.challenge === 'string') + options.challenge = fromBase64Url(options.challenge); + if (options.allowCredentials) { + for (var i = 0; i < options.allowCredentials.length; i++) { + const id = options.allowCredentials[i].id; + if (typeof id === 'string') + options.allowCredentials[i].id = fromBase64Url(id); + } + } + var creds = await navigator.credentials.get({ publicKey: options }) as PublicKeyCredential; + const response = creds.response as AuthenticatorAssertionResponse; + const retval = { + id: creds.id, + rawId: toBase64Url(creds.rawId), + type: creds.type, + response: { + authenticatorData: toBase64Url(response.authenticatorData), + clientDataJSON: toBase64Url(response.clientDataJSON), + userHandle: response.userHandle && response.userHandle.byteLength > 0 ? toBase64Url(response.userHandle) : undefined, + signature: toBase64Url(response.signature) + } + } + return retval; +} diff --git a/fido2-net-lib.sln b/fido2-net-lib.sln index bc09a4213..919c072dd 100644 --- a/fido2-net-lib.sln +++ b/fido2-net-lib.sln @@ -24,6 +24,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Fido2.Ctap2", "Src\Fido2.Ct EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Fido2.Ctap2.Tests", "Tests\Fido2.Ctap2.Tests\Fido2.Ctap2.Tests.csproj", "{BB3D1D09-1506-4DF9-8211-8B284E12B0F8}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Fido2.BlazorWebAssembly", "Src\Fido2.BlazorWebAssembly\Fido2.BlazorWebAssembly.csproj", "{F314C16B-3E3D-40E6-9B4F-36142B739478}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -57,7 +59,10 @@ Global {BB3D1D09-1506-4DF9-8211-8B284E12B0F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BB3D1D09-1506-4DF9-8211-8B284E12B0F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {BB3D1D09-1506-4DF9-8211-8B284E12B0F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB3D1D09-1506-4DF9-8211-8B284E12B0F8}.Release|Any CPU.Build.0 = Release|Any CPU + {F314C16B-3E3D-40E6-9B4F-36142B739478}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F314C16B-3E3D-40E6-9B4F-36142B739478}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F314C16B-3E3D-40E6-9B4F-36142B739478}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F314C16B-3E3D-40E6-9B4F-36142B739478}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 51b3b0c227c9686892efdb9b4babb9d324b9c452 Mon Sep 17 00:00:00 2001 From: Marlon Regenhardt Date: Tue, 27 Jun 2023 14:21:45 +0200 Subject: [PATCH 02/12] Razor lib: Add transports to attestation response. Note that this is not yet implemented by Firefox, so we have to return empty-listed if we can't get transports. --- Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.ts b/Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.ts index 99457d298..b755d72c8 100644 --- a/Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.ts +++ b/Src/Fido2.BlazorWebAssembly/wwwroot/js/WebAuthn.ts @@ -32,7 +32,8 @@ export async function createCreds(options: PublicKeyCredentialCreationOptions) { extensions: newCreds.getClientExtensionResults(), response: { attestationObject: toBase64Url(response.attestationObject), - clientDataJSON: toBase64Url(response.clientDataJSON) + clientDataJSON: toBase64Url(response.clientDataJSON), + transports: response.getTransports ? response.getTransports() : [], } }; return retval; From 990c285115549d2688b5fe1100013cdbabea3962 Mon Sep 17 00:00:00 2001 From: Marlon Regenhardt Date: Tue, 27 Jun 2023 00:46:03 +0200 Subject: [PATCH 03/12] Blazor: Create basic structure, style, and MFA page --- BlazorWasmDemo/Client/App.razor | 12 + .../Client/BlazorWasmDemo.Client.csproj | 23 + BlazorWasmDemo/Client/Pages/Mfa.razor | 150 + BlazorWasmDemo/Client/Pages/Overview.razor | 137 + BlazorWasmDemo/Client/Program.cs | 22 + .../Client/Properties/launchSettings.json | 30 + .../Client/Shared/Header/InfoNav.razor | 19 + .../Client/Shared/Header/InfoNav.razor.css | 23 + BlazorWasmDemo/Client/Shared/MainLayout.razor | 29 + .../Client/Shared/MainLayout.razor.css | 56 + BlazorWasmDemo/Client/Shared/NavMenu.razor | 32 + .../Client/Shared/NavMenu.razor.css | 60 + .../Client/Shared/SurveyPrompt.razor | 16 + .../Client/Shared/Toasts/Toast.razor | 70 + .../Client/Shared/Toasts/Toast.razor.css | 45 + .../Client/Shared/Toasts/ToastLevel.cs | 9 + .../Client/Shared/Toasts/ToastService.cs | 50 + BlazorWasmDemo/Client/Shared/UserService.cs | 103 + BlazorWasmDemo/Client/_Imports.razor | 10 + BlazorWasmDemo/Client/wwwroot/css/app.css | 79 + .../wwwroot/css/bootstrap/bootstrap.min.css | 7 + .../css/bootstrap/bootstrap.min.css.map | 1 + .../wwwroot/css/fontawesome/css/brands.css | 1522 ++++ .../css/fontawesome/css/brands.min.css | 6 + .../css/fontawesome/css/fontawesome.css | 6372 +++++++++++++++++ .../css/fontawesome/css/fontawesome.min.css | 9 + .../wwwroot/css/fontawesome/css/solid.css | 19 + .../wwwroot/css/fontawesome/css/solid.min.css | 6 + .../fontawesome/webfonts/fa-brands-400.ttf | Bin 0 -> 187448 bytes .../fontawesome/webfonts/fa-brands-400.woff2 | Bin 0 -> 108000 bytes .../css/fontawesome/webfonts/fa-solid-900.ttf | Bin 0 -> 394832 bytes .../fontawesome/webfonts/fa-solid-900.woff2 | Bin 0 -> 149908 bytes .../wwwroot/css/open-iconic/FONT-LICENSE | 86 + .../wwwroot/css/open-iconic/ICON-LICENSE | 21 + .../Client/wwwroot/css/open-iconic/README.md | 114 + .../font/css/open-iconic-bootstrap.min.css | 1 + .../open-iconic/font/fonts/open-iconic.eot | Bin 0 -> 28196 bytes .../open-iconic/font/fonts/open-iconic.otf | Bin 0 -> 20996 bytes .../open-iconic/font/fonts/open-iconic.svg | 543 ++ .../open-iconic/font/fonts/open-iconic.ttf | Bin 0 -> 28028 bytes .../open-iconic/font/fonts/open-iconic.woff | Bin 0 -> 14984 bytes BlazorWasmDemo/Client/wwwroot/favicon.ico | Bin 0 -> 5430 bytes BlazorWasmDemo/Client/wwwroot/icon-192.png | Bin 0 -> 2626 bytes .../Client/wwwroot/images/scenario1.png | Bin 0 -> 33816 bytes BlazorWasmDemo/Client/wwwroot/index.html | 28 + .../Server/BlazorWasmDemo.Server.csproj | 21 + .../Server/Controllers/UserController.cs | 259 + BlazorWasmDemo/Server/Pages/Error.cshtml | 42 + BlazorWasmDemo/Server/Pages/Error.cshtml.cs | 25 + BlazorWasmDemo/Server/Program.cs | 48 + .../Server/Properties/launchSettings.json | 30 + .../Server/appsettings.Development.json | 8 + BlazorWasmDemo/Server/appsettings.json | 10 + Demo/Pages/mfa.cshtml | 2 +- fido2-net-lib.sln | 13 + 55 files changed, 10167 insertions(+), 1 deletion(-) create mode 100644 BlazorWasmDemo/Client/App.razor create mode 100644 BlazorWasmDemo/Client/BlazorWasmDemo.Client.csproj create mode 100644 BlazorWasmDemo/Client/Pages/Mfa.razor create mode 100644 BlazorWasmDemo/Client/Pages/Overview.razor create mode 100644 BlazorWasmDemo/Client/Program.cs create mode 100644 BlazorWasmDemo/Client/Properties/launchSettings.json create mode 100644 BlazorWasmDemo/Client/Shared/Header/InfoNav.razor create mode 100644 BlazorWasmDemo/Client/Shared/Header/InfoNav.razor.css create mode 100644 BlazorWasmDemo/Client/Shared/MainLayout.razor create mode 100644 BlazorWasmDemo/Client/Shared/MainLayout.razor.css create mode 100644 BlazorWasmDemo/Client/Shared/NavMenu.razor create mode 100644 BlazorWasmDemo/Client/Shared/NavMenu.razor.css create mode 100644 BlazorWasmDemo/Client/Shared/SurveyPrompt.razor create mode 100644 BlazorWasmDemo/Client/Shared/Toasts/Toast.razor create mode 100644 BlazorWasmDemo/Client/Shared/Toasts/Toast.razor.css create mode 100644 BlazorWasmDemo/Client/Shared/Toasts/ToastLevel.cs create mode 100644 BlazorWasmDemo/Client/Shared/Toasts/ToastService.cs create mode 100644 BlazorWasmDemo/Client/Shared/UserService.cs create mode 100644 BlazorWasmDemo/Client/_Imports.razor create mode 100644 BlazorWasmDemo/Client/wwwroot/css/app.css create mode 100644 BlazorWasmDemo/Client/wwwroot/css/bootstrap/bootstrap.min.css create mode 100644 BlazorWasmDemo/Client/wwwroot/css/bootstrap/bootstrap.min.css.map create mode 100644 BlazorWasmDemo/Client/wwwroot/css/fontawesome/css/brands.css create mode 100644 BlazorWasmDemo/Client/wwwroot/css/fontawesome/css/brands.min.css create mode 100644 BlazorWasmDemo/Client/wwwroot/css/fontawesome/css/fontawesome.css create mode 100644 BlazorWasmDemo/Client/wwwroot/css/fontawesome/css/fontawesome.min.css create mode 100644 BlazorWasmDemo/Client/wwwroot/css/fontawesome/css/solid.css create mode 100644 BlazorWasmDemo/Client/wwwroot/css/fontawesome/css/solid.min.css create mode 100644 BlazorWasmDemo/Client/wwwroot/css/fontawesome/webfonts/fa-brands-400.ttf create mode 100644 BlazorWasmDemo/Client/wwwroot/css/fontawesome/webfonts/fa-brands-400.woff2 create mode 100644 BlazorWasmDemo/Client/wwwroot/css/fontawesome/webfonts/fa-solid-900.ttf create mode 100644 BlazorWasmDemo/Client/wwwroot/css/fontawesome/webfonts/fa-solid-900.woff2 create mode 100644 BlazorWasmDemo/Client/wwwroot/css/open-iconic/FONT-LICENSE create mode 100644 BlazorWasmDemo/Client/wwwroot/css/open-iconic/ICON-LICENSE create mode 100644 BlazorWasmDemo/Client/wwwroot/css/open-iconic/README.md create mode 100644 BlazorWasmDemo/Client/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css create mode 100644 BlazorWasmDemo/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.eot create mode 100644 BlazorWasmDemo/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.otf create mode 100644 BlazorWasmDemo/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.svg create mode 100644 BlazorWasmDemo/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf create mode 100644 BlazorWasmDemo/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.woff create mode 100644 BlazorWasmDemo/Client/wwwroot/favicon.ico create mode 100644 BlazorWasmDemo/Client/wwwroot/icon-192.png create mode 100644 BlazorWasmDemo/Client/wwwroot/images/scenario1.png create mode 100644 BlazorWasmDemo/Client/wwwroot/index.html create mode 100644 BlazorWasmDemo/Server/BlazorWasmDemo.Server.csproj create mode 100644 BlazorWasmDemo/Server/Controllers/UserController.cs create mode 100644 BlazorWasmDemo/Server/Pages/Error.cshtml create mode 100644 BlazorWasmDemo/Server/Pages/Error.cshtml.cs create mode 100644 BlazorWasmDemo/Server/Program.cs create mode 100644 BlazorWasmDemo/Server/Properties/launchSettings.json create mode 100644 BlazorWasmDemo/Server/appsettings.Development.json create mode 100644 BlazorWasmDemo/Server/appsettings.json diff --git a/BlazorWasmDemo/Client/App.razor b/BlazorWasmDemo/Client/App.razor new file mode 100644 index 000000000..6fd3ed1b5 --- /dev/null +++ b/BlazorWasmDemo/Client/App.razor @@ -0,0 +1,12 @@ + + + + + + + Not found + +

Sorry, there's nothing at this address.

+
+
+
diff --git a/BlazorWasmDemo/Client/BlazorWasmDemo.Client.csproj b/BlazorWasmDemo/Client/BlazorWasmDemo.Client.csproj new file mode 100644 index 000000000..64eb97761 --- /dev/null +++ b/BlazorWasmDemo/Client/BlazorWasmDemo.Client.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/BlazorWasmDemo/Client/Pages/Mfa.razor b/BlazorWasmDemo/Client/Pages/Mfa.razor new file mode 100644 index 000000000..50d5f33a8 --- /dev/null +++ b/BlazorWasmDemo/Client/Pages/Mfa.razor @@ -0,0 +1,150 @@ +@page "/mfa" +@using BlazorWasmDemo.Client.Shared.Toasts +@inject UserService UserService +@inject ToastService Toasts + +

Scenario: 2FA/MFA

+
+

This is scenario where we just want to use FIDO as the MFA. The user register and logins with their username and password. For demo purposes, we trigger the MFA registering on sign up.

+
+@if (!WebAuthnSupported) +{ +
+ Please note: Your browser does not seem to support WebAuthn yet. Supported browsers +
+} + +
+
+ +

Create an account

+
+ +
+
+ +
+ +
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+ +
+

+ For demo purposes the password will not be used or stored +

+ + +
+
+ +
+
+
+
+ +

Sign in

+
+ +
+
+ + +
+ +
+ + +
+
+ + +
+ +
+

For demo purposes the password will not be used or stored

+
+
+ +
+
+
+ +
+

Explanation: 2FA/MFA with FIDO2

+

+ In this scenario, WebAuthn is only used as second factor mechanism. MFA stands for Multi Factor Authentication which generally means it relies on something the user knows (username & password) and something the user has (Authenticator Private key). + The flow is visualized in the figure below. +

+ figure visualizing username and password sent together with assertion +

In this flow the Relying Party does not necessarily need to tell the Authenticator device to verify the human identity (we could set UserVerification to discourage) to minimize user interactions needed to sign in. More on UserVerification in the other scenarios.

+ +

+ Read the source code for this demo here: Mfa.razor and UserService.cs +

+
+ +@code +{ + private bool WebAuthnSupported { get; set; } = true; + + private string RegisterUsername { get; set; } = ""; + private string? RegisterDisplayName { get; set; } + + private string LoginUsername { get; set; } = ""; + + protected override async Task OnInitializedAsync() + { + WebAuthnSupported = await UserService.IsWebAuthnSupportedAsync(); + } + + private bool RegisterFormValid() => !string.IsNullOrWhiteSpace(RegisterUsername); + private async Task Register() + { + var username = RegisterUsername; + var displayName = RegisterDisplayName; + + var result = await UserService.RegisterAsync(username, displayName); + + if (result == "OK") + { + Toasts.ShowToast("Registration successful", ToastLevel.Success); + } + else + { + Toasts.ShowToast(result, ToastLevel.Error); + } + } + + private bool LoginFormValid() => !string.IsNullOrWhiteSpace(LoginUsername); + private async Task Login() + { + var result = await UserService.LoginAsync(LoginUsername); + + if (result.StartsWith("Bearer")) + { + Toasts.ShowToast($"Login successful, token:{Environment.NewLine}{result.Replace("Bearer ", string.Empty)}", ToastLevel.Success); + } + else + { + Toasts.ShowToast(result, ToastLevel.Error); + } + } +} diff --git a/BlazorWasmDemo/Client/Pages/Overview.razor b/BlazorWasmDemo/Client/Pages/Overview.razor new file mode 100644 index 000000000..3c5199f8d --- /dev/null +++ b/BlazorWasmDemo/Client/Pages/Overview.razor @@ -0,0 +1,137 @@ +@page "/" + +

FIDO2 .NET Library (WebAuthn)

+
+

+ A working implementation library + demo for FIDO2 and WebAuthn using .NET. +

+

Bringing FIDO2 & WebAuthn to asp.net, .net core and full framework.

+

+ Available on GitHub and Nuget. +

+
+ +

Purpose

+
+

Enable passwordless sign in for all .NET apps (asp, core, native).

+

To provide a developer friendly and well tested .NET FIDO2 Server / WebAuthn relying party library for the easy validation of registration (attestation) and authentication (assertion) of FIDO2 / WebAuthn credentials, in order to increase the adoption of the technology, ultimately defeating phishing attacks.

+

Consider to become a backer.

+
+ +

What is FIDO2 / WebAuthn?

+
+

The passwordless web is coming

+

+ FIDO2 / WebAuthn is a new open authentication standard, supported by browsers and many large tech companies such as Microsoft, Google etc. The main driver is to allow a user to login without passwords, creating passwordless flows or strong MFA for user signup/login on websites. The standard is not limited to web applications with support coming to Active Directory and native apps. The technology builds on public/private keys, allowing authentication to happen without sharing a secret between the user & platform. This brings many benefits, such as easier and safer logins and makes phishing attempts extremely hard. + + Read more: + + Why it's exciting + Medium + FIDO Alliance + Yubico + WebAuthn.Guide from Duo Security + WebAuthn.io + WebAuthn Awesome +

+ + +
+

Features

+
    +
  • + + + + Attestation API & verification (Register and verify credentials/authenticators) +
  • +
  • + + + + Assertion API & verification (Authenticate users) +
  • +
  • + + + + 100% pass rate in conformance testing (results) +
  • +
  • + + + + FIDO2 security keys aka roaming authenticators , like SoloKeys Solo, Yubico YubiKey, and Feitian BioPass FIDO2) +
  • +
  • + + + + Device embedded authenticators aka platform authenticators , like Android Key and TPM) +
  • +
  • + + + + Backwards compatibility with FIDO U2F authenticators +
  • +
  • + + + + Windows Hello +
  • +
  • + + + + All currently referenced cryptographic algorithms for FIDO2 Server +
  • +
  • + + + + All current attestation formats: "packed", "tpm", "android-key", "android-safetynet", "fido-u2f", "apple", and "none" +
  • +
  • + + + + FIDO2 Server attestation validation via FIDO Metadata Service +
  • +
  • + + + + WebAuthn extensions +
  • +
  • + + + + Examples & demos +
  • +
  • + + + + Intellisense documentation +
  • +
+ +
+

Concepts

+

The following chapter will explain some of the concepts mentioned in the 3 scenarios

+ +

Fido2 vs WebAuthn?

+

Fido2 is the umbrella term and branding of two new w3c standards: WebAuthn and CTAP2. WebAuthn is the JS API that allows browser to talk to the operating system to generate assertions and CTAP2 is the API that allows the operating system to talk to Authenticators (usb security keys etc)

+ +

Relying Party (RP)

+

The Relying Party - often called RP - is the server that the browser communicates with. If you are a developer reading this, the Relying Party is probably your webserver. It's the server that runs the fido2-net-lib library.

+ +

User Verification

+

A FIDO2 server (a.k.a the Relying Party, RP) can ask the authenticator to verify the user. This can be done either via PIN code, biometrics or other factors that securely verifies that it's the expected human in front of the device, not just any human.

+ +

Resident Credentials (RK)

+

The resident credential is a credential that can be accessed simply with RP ID. When not using RK you will have to provide a list of the credentials (array of ID's) you want the authenticator to use. With RK you don’t need it because the authentication will locate all RK's (only RK credentials), and for each of them generate the assertion over the challenge and return all of them to the client. The client then will display all of the credentials to the user and user will pick one, thus returning selected credential to the relying party.

+
\ No newline at end of file diff --git a/BlazorWasmDemo/Client/Program.cs b/BlazorWasmDemo/Client/Program.cs new file mode 100644 index 000000000..a31ed5405 --- /dev/null +++ b/BlazorWasmDemo/Client/Program.cs @@ -0,0 +1,22 @@ +using BlazorWasmDemo.Client; +using BlazorWasmDemo.Client.Shared; +using BlazorWasmDemo.Client.Shared.Toasts; +using Fido2.BlazorWebAssembly; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; + +var builder = WebAssemblyHostBuilder.CreateDefault(args); +builder.RootComponents.Add("#app"); +builder.RootComponents.Add("head::after"); + +builder.Services.AddSingleton(_ => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddWebAuthn(); + +await builder.Build().RunAsync(); + +internal class Constants +{ + public const string GithubBaseUrl = "https://github.com/passwordless-lib/fido2-net-lib/blob/master/"; +} diff --git a/BlazorWasmDemo/Client/Properties/launchSettings.json b/BlazorWasmDemo/Client/Properties/launchSettings.json new file mode 100644 index 000000000..90bf16d40 --- /dev/null +++ b/BlazorWasmDemo/Client/Properties/launchSettings.json @@ -0,0 +1,30 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:17580", + "sslPort": 44312 + } + }, + "profiles": { + "BlazorWasmDemo": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7124;http://localhost:5107", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/BlazorWasmDemo/Client/Shared/Header/InfoNav.razor b/BlazorWasmDemo/Client/Shared/Header/InfoNav.razor new file mode 100644 index 000000000..023ebc801 --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/Header/InfoNav.razor @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/BlazorWasmDemo/Client/Shared/Header/InfoNav.razor.css b/BlazorWasmDemo/Client/Shared/Header/InfoNav.razor.css new file mode 100644 index 000000000..d9851fcdc --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/Header/InfoNav.razor.css @@ -0,0 +1,23 @@ +.navbar-end { + display: flex; + align-items: stretch; + justify-content: flex-end; + margin-left: auto; +} + +.navbar-item { + color: inherit; + display: flex; + align-items: center; + flex-grow: 0; + flex-shrink: 0; + padding: 0.5rem 1rem; + text-decoration: none; + opacity: 0.9; +} + + a.navbar-item:hover { + background-color: rgb(0, 0, 0); + opacity: 1; + color: inherit; + } \ No newline at end of file diff --git a/BlazorWasmDemo/Client/Shared/MainLayout.razor b/BlazorWasmDemo/Client/Shared/MainLayout.razor new file mode 100644 index 000000000..0c627b921 --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/MainLayout.razor @@ -0,0 +1,29 @@ +@inherits LayoutComponentBase +@using BlazorWasmDemo.Client.Shared.Header +@using BlazorWasmDemo.Client.Shared.Toasts + +FIDO2 & WebAuthn for .NET + +
+
+ +
+
+

+ Passwordless - FIDO2 for .NET +

+
+ Enabling smoooth sign in using FIDO2 / WebAuthn +
+
+ +
+ +
+ +
+ @Body +
+
diff --git a/BlazorWasmDemo/Client/Shared/MainLayout.razor.css b/BlazorWasmDemo/Client/Shared/MainLayout.razor.css new file mode 100644 index 000000000..7c1713b59 --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/MainLayout.razor.css @@ -0,0 +1,56 @@ +.page { + position: relative; + display: flex; + flex-direction: column; +} + +section.header { + color: white; + background-color: rgb(10, 10, 10); + background-image: linear-gradient(326deg, rgb(134, 22, 87) 0%, rgb(255, 166, 158) 74%); + align-items: stretch; + display: flex; + flex-direction: column; + justify-content: space-between; +} + + section.header > .title { + padding-top: 9rem; + padding-bottom: 9rem; + flex-grow: 1; + flex-shrink: 0; + text-align: center; + } + +section.footer { + flex-grow: 0; + flex-shrink: 0; +} + +main { + flex: 1; +} + +.sidebar { + background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); +} + +.top-row { + justify-content: flex-end; + height: 3.5rem; + display: flex; + align-items: center; +} + +@media (min-width: 641px) { + .top-row { + position: sticky; + top: 0; + z-index: 1; + } + + .top-row, article { + padding-left: 2rem !important; + padding-right: 2rem !important; + } +} diff --git a/BlazorWasmDemo/Client/Shared/NavMenu.razor b/BlazorWasmDemo/Client/Shared/NavMenu.razor new file mode 100644 index 000000000..d3bbdeb1a --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/NavMenu.razor @@ -0,0 +1,32 @@ + + + + +@code { + private bool collapseNavMenu = true; + + private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null; + + private void ToggleNavMenu() + { + collapseNavMenu = !collapseNavMenu; + } +} diff --git a/BlazorWasmDemo/Client/Shared/NavMenu.razor.css b/BlazorWasmDemo/Client/Shared/NavMenu.razor.css new file mode 100644 index 000000000..8e78763a4 --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/NavMenu.razor.css @@ -0,0 +1,60 @@ +.navbar-toggler { + background-color: rgba(255, 255, 255, 0.1); +} + +.nav { + display: flex; + flex-wrap: wrap; + align-items: stretch; + font-size: 1rem; + justify-content: space-around; + overflow: auto hidden; + white-space: nowrap; + border-bottom: medium none; +} + +.nav-item { + font-size: 1rem; + flex-grow: 1; + flex-shrink: 0; +} + + .nav-item ::deep a { + color: inherit; + line-height: 1.5rem; + text-decoration: none; + height: 100%; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + padding: 0.5rem 1rem; + opacity: 0.9; + } + + .nav-item ::deep a.active { + background-color: rgb(255, 255, 255); + color: rgb(10, 10, 10); + border-radius: 4px 4px 0 0; + opacity: 1; + } + + .nav-item ::deep a:hover:not(.active) { + background-color: rgba(10, 10, 10, 0.1); + opacity: 1; + } + +.collapse { + display: none; +} + +@media (min-width: 641px) { + .navbar-toggler { + display: none; + } + + .collapse { + /* Never collapse the sidebar for wide screens */ + display: flex; + } +} diff --git a/BlazorWasmDemo/Client/Shared/SurveyPrompt.razor b/BlazorWasmDemo/Client/Shared/SurveyPrompt.razor new file mode 100644 index 000000000..962027fcc --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/SurveyPrompt.razor @@ -0,0 +1,16 @@ +
+ + @Title + + + Please take our + brief survey + + and tell us what you think. +
+ +@code { + // Demonstrates how a parent component can supply parameters + [Parameter] + public string? Title { get; set; } +} diff --git a/BlazorWasmDemo/Client/Shared/Toasts/Toast.razor b/BlazorWasmDemo/Client/Shared/Toasts/Toast.razor new file mode 100644 index 000000000..e88170e51 --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/Toasts/Toast.razor @@ -0,0 +1,70 @@ +@inject ToastService Service + +
+
+ +
+
+
@Heading
+

@Message

+
+
+ +@code { + private string AdditionalClass { get; set; } = ""; + private string BackgroundCssClass { get; set; } = ""; + private string IconCssClass { get; set; } = ""; + private string Heading { get; set; } = ""; + private string Message { get; set; } = ""; + + protected override void OnInitialized() { + Console.WriteLine("Init toasts"); + Service.OnShow += ShowToast; + Service.OnHide += HideToast; + } + + private void ShowToast(string message, ToastLevel level) + { + Console.WriteLine("Showing toasts"); + AdditionalClass = "toast-visible show"; + BuildToastSettings(level, message); + StateHasChanged(); + } + private void HideToast() + { + AdditionalClass = ""; + StateHasChanged(); + } + private void BuildToastSettings(ToastLevel level, string message) + { + switch (level) + { + case ToastLevel.Info: + BackgroundCssClass = "bg-info"; + IconCssClass = "info"; + Heading = "Info"; + break; + case ToastLevel.Success: + BackgroundCssClass = "bg-success"; + IconCssClass = "check"; + Heading = "Success"; + break; + case ToastLevel.Warning: + BackgroundCssClass = "bg-warning"; + IconCssClass = "exclamation"; + Heading = "Warning"; + break; + case ToastLevel.Error: + BackgroundCssClass = "bg-danger"; + IconCssClass = "times"; + Heading = "Error"; + break; + } + Message = message; + } + + public void Dispose() + { + Service.OnShow -= ShowToast; + } +} diff --git a/BlazorWasmDemo/Client/Shared/Toasts/Toast.razor.css b/BlazorWasmDemo/Client/Shared/Toasts/Toast.razor.css new file mode 100644 index 000000000..4ce060b13 --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/Toasts/Toast.razor.css @@ -0,0 +1,45 @@ +.toast { + padding: 1.5rem; + color: #fff; + z-index: 1; + position: fixed; + width: 25rem; + top: 2rem; + border-radius: 1rem; + left: 50%; +} + +.toast-icon { + display: flex; + flex-direction: column; + justify-content: center; + padding: 0 1rem; + font-size: 2.5rem; + } + +.toast-body { + display: flex; + flex-direction: column; + flex: 1; + padding-left: 1rem; + } + +.toast-body p { + margin-bottom: 0; + } + +.toast-visible { + display: flex; + flex-direction: row; + animation: fadein 1.5s; + } + +@keyframes fadein { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} \ No newline at end of file diff --git a/BlazorWasmDemo/Client/Shared/Toasts/ToastLevel.cs b/BlazorWasmDemo/Client/Shared/Toasts/ToastLevel.cs new file mode 100644 index 000000000..a2ca4bf87 --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/Toasts/ToastLevel.cs @@ -0,0 +1,9 @@ +namespace BlazorWasmDemo.Client.Shared.Toasts; + +public enum ToastLevel +{ + Info, + Success, + Warning, + Error +} diff --git a/BlazorWasmDemo/Client/Shared/Toasts/ToastService.cs b/BlazorWasmDemo/Client/Shared/Toasts/ToastService.cs new file mode 100644 index 000000000..35983667c --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/Toasts/ToastService.cs @@ -0,0 +1,50 @@ +namespace BlazorWasmDemo.Client.Shared.Toasts; + +using System.Diagnostics.CodeAnalysis; +using System.Timers; + +public class ToastService : IDisposable +{ + public event Action? OnShow; + public event Action? OnHide; + private Timer? _countdown; + + public void ShowToast(string message, ToastLevel level) + { + OnShow?.Invoke(message, level); + StartCountdown(); + } + + private void StartCountdown() + { + SetCountdown(); + if (_countdown.Enabled) + { + _countdown.Stop(); + _countdown.Start(); + } + else + { + _countdown.Start(); + } + } + + [MemberNotNull(nameof(_countdown))] + private void SetCountdown() + { + if (_countdown == null) + { + _countdown = new Timer(5000); + _countdown.Elapsed += HideToast; + _countdown.AutoReset = false; + } + } + private void HideToast(object? source, ElapsedEventArgs args) + { + OnHide?.Invoke(); + } + public void Dispose() + { + _countdown?.Dispose(); + } +} diff --git a/BlazorWasmDemo/Client/Shared/UserService.cs b/BlazorWasmDemo/Client/Shared/UserService.cs new file mode 100644 index 000000000..5e7a167ea --- /dev/null +++ b/BlazorWasmDemo/Client/Shared/UserService.cs @@ -0,0 +1,103 @@ +namespace BlazorWasmDemo.Client.Shared; + +using System.Net.Http.Json; +using Fido2.BlazorWebAssembly; +using Fido2NetLib; + +public class UserService +{ + private const string _routeUser = "api/user"; + private const string _routeCredOptions = "credential-options"; + private const string _routeRegister = "credential"; + private const string _routeAssertionOpts = "assertion-options"; + private const string _routeLogin = "assertion"; + + private readonly HttpClient _httpClient; + private readonly WebAuthn _webAuthn; + + public UserService(HttpClient httpClient, WebAuthn webAuthn) + { + _httpClient = httpClient; + _webAuthn = webAuthn; + } + + public async Task RegisterAsync(string? username, string? displayName) + { + // Make sure the WebAuthn API is initialized (although that should happen almost immediately after startup) + await _webAuthn.Init(); + + // Build the route to get options + var routeOpts = _routeUser + + (string.IsNullOrEmpty(username) ? string.Empty : $"/{username}") // Query specific user unless we go usernameless + + $"/{_routeCredOptions}"; + + // Add display name if set + var query = string.IsNullOrEmpty(displayName) ? string.Empty : $"?displayName={displayName}"; + + // Now the magic happens so stuff can go wrong + try + { + // Get options from server + var options = await _httpClient.GetFromJsonAsync(routeOpts + query); + if(options == null) + { + return "No options received"; + } + + // Present options to user and get response + var credential = await _webAuthn.CreateCredsAsync(options); + + // Send response to server + return await (await _httpClient.PutAsJsonAsync($"{_routeUser}/{options.User.Name}/{_routeRegister}", credential)).Content.ReadAsStringAsync(); + } + catch (Exception e) + { + Console.WriteLine(e); + return e.Message; + } + } + + public async Task LoginAsync(string? username) + { + // Make sure the WebAuthn API is initialized (although that should happen almost immediately after startup) + await _webAuthn.Init(); + + // Build the route to get options + var route = _routeUser + + (string.IsNullOrEmpty(username) ? string.Empty : $"/{username}") // Query specific user unless we go usernameless + + $"/{_routeAssertionOpts}"; + + // Now the magic happens so stuff can go wrong + try + { + // Get options from server + var options = await _httpClient.GetFromJsonAsync(route); + if (options == null) + { + return "No options received"; + } + + if (options.Status != "ok") + { + return options.ErrorMessage; + } + + // Present options to user and get response (usernameless users will be asked by their authenticator, which credential they want to use to sign the challenge) + var assertion = await _webAuthn.VerifyAsync(options); + + // Send response to server + return await (await _httpClient.PostAsJsonAsync($"{_routeUser}/{_routeLogin}", assertion)).Content.ReadAsStringAsync(); + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } + } + + public async Task IsWebAuthnSupportedAsync() + { + await _webAuthn.Init(); + return await _webAuthn.IsWebAuthnSupportedAsync(); + } +} diff --git a/BlazorWasmDemo/Client/_Imports.razor b/BlazorWasmDemo/Client/_Imports.razor new file mode 100644 index 000000000..daa80a6a2 --- /dev/null +++ b/BlazorWasmDemo/Client/_Imports.razor @@ -0,0 +1,10 @@ +@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 Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.AspNetCore.Components.WebAssembly.Http +@using Microsoft.JSInterop +@using BlazorWasmDemo.Client +@using BlazorWasmDemo.Client.Shared diff --git a/BlazorWasmDemo/Client/wwwroot/css/app.css b/BlazorWasmDemo/Client/wwwroot/css/app.css new file mode 100644 index 000000000..c3a146182 --- /dev/null +++ b/BlazorWasmDemo/Client/wwwroot/css/app.css @@ -0,0 +1,79 @@ +@import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); + +html, body { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +h1:focus { + outline: none; +} + +a { + color: rgb(50, 115, 220); + cursor: pointer; + text-decoration: none; +} + +.is-inverted { + background-color: white; + color: rgb(32, 156, 238); +} + + .is-inverted:hover { + background-color: rgb(242, 242, 242); + } + +.btn-link { + color: #0071c1; +} + +.btn-primary { + color: #fff; + background-color: #1b6ec2; + border-color: #1861ac; +} + +.content { + padding-top: 1.1rem; +} + +.valid.modified:not([type=checkbox]) { + outline: 1px solid #26b050; +} + +.invalid { + outline: 1px solid red; +} + +.validation-message { + color: red; +} + +#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; + } + +.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." + } diff --git a/BlazorWasmDemo/Client/wwwroot/css/bootstrap/bootstrap.min.css b/BlazorWasmDemo/Client/wwwroot/css/bootstrap/bootstrap.min.css new file mode 100644 index 000000000..02ae65b5f --- /dev/null +++ b/BlazorWasmDemo/Client/wwwroot/css/bootstrap/bootstrap.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * Bootstrap v5.1.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-rgb:33,37,41;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{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:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],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}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button: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:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) * -.5);margin-left:calc(var(--bs-gutter-x) * -.5)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image: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")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!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}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!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}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!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}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!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}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!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}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!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}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!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}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/BlazorWasmDemo/Client/wwwroot/css/bootstrap/bootstrap.min.css.map b/BlazorWasmDemo/Client/wwwroot/css/bootstrap/bootstrap.min.css.map new file mode 100644 index 000000000..afcd9e33e --- /dev/null +++ b/BlazorWasmDemo/Client/wwwroot/css/bootstrap/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v5.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-rgb: #{to-rgb($body-color)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}-root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

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

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

+
+ +

Sign in

+
+ +
+
+ + +
+ +
+
+
+ +
+
+ + +
+

Explanation: Passwordless login with FIDO2

+

+ In this scenario, WebAuthn is used as together with a username to securely authenticate the user. This scenario can still be considered MFA (although no password is used) since the Authenticator can verify the User. + The flow is visualized in the figure below. +

+ figure visualizing username and challenge sent together with assertion +

In this flow the Relying Party should tell the Authenticator to do User Verification (set UserVerification to required) via Biometrics/pin, thus the authentication is MFA (Something the user has - the private key - and something the user knows/is - the PIN or biometrics). However in scenarios where security requirements are very low we we could discourage user verification to minimize the user interaction needed to sign in. If discouraged, only user presence will be checked (Any human is present at the device).

+ +

+ Read the source code for this demo here: Passwordless.razor and UserService.cs +

+
+@code { + private bool WebAuthnSupported { get; set; } = true; + + private string RegisterUsername { get; set; } = ""; + private string? RegisterDisplayName { get; set; } + + private string LoginUsername { get; set; } = ""; + + protected override async Task OnInitializedAsync() + { + WebAuthnSupported = await UserService.IsWebAuthnSupportedAsync(); + } + + private bool RegisterFormValid() => !string.IsNullOrWhiteSpace(RegisterUsername); + private async Task Register() + { + var username = RegisterUsername; + var displayName = RegisterDisplayName; + + var result = await UserService.RegisterAsync(username, displayName); + + if (result == "OK") + { + Toasts.ShowToast("Registration successful", ToastLevel.Success); + } + else + { + Toasts.ShowToast(result, ToastLevel.Error); + } + } + + private bool LoginFormValid() => !string.IsNullOrWhiteSpace(LoginUsername); + private async Task Login() + { + var result = await UserService.LoginAsync(LoginUsername); + + if (result.StartsWith("Bearer")) + { + Toasts.ShowToast($"Login successful, JWT received", ToastLevel.Success); + Console.WriteLine($"Token: {result.Replace("Bearer ", "")}"); + } + else + { + Toasts.ShowToast(result, ToastLevel.Error); + } + } +} diff --git a/BlazorWasmDemo/Client/wwwroot/images/scenario2.png b/BlazorWasmDemo/Client/wwwroot/images/scenario2.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad441e9a8cd1ec9fc9a724acd61204507e9249b GIT binary patch literal 34085 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

-T^<0pc~GKU8n)0S|u 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%0D;l?KSMoq(~+$ZcrCLOQ!?ubl#&d+_J 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 A82|tP literal 0 HcmV?d00001 From a59ce71d99d92c7730bc6cd5b018aa6a667183c8 Mon Sep 17 00:00:00 2001 From: Marlon Regenhardt Date: Thu, 16 Feb 2023 11:22:37 +0100 Subject: [PATCH 06/12] Add usernameless --- .../Client/Pages/Usernameless.razor | 103 ++++++++++++++++++ BlazorWasmDemo/Client/Shared/UserService.cs | 39 +++++-- .../Server/Controllers/UserController.cs | 15 ++- 3 files changed, 143 insertions(+), 14 deletions(-) create mode 100644 BlazorWasmDemo/Client/Pages/Usernameless.razor diff --git a/BlazorWasmDemo/Client/Pages/Usernameless.razor b/BlazorWasmDemo/Client/Pages/Usernameless.razor new file mode 100644 index 000000000..b8e86f468 --- /dev/null +++ b/BlazorWasmDemo/Client/Pages/Usernameless.razor @@ -0,0 +1,103 @@ +@page "/usernameless" +@using BlazorWasmDemo.Client.Shared.Toasts +@inject UserService UserService +@inject ToastService Toasts + +

Scenario: Usernameless

+ +

In this scenario we have removed the need for both usernames and passwords. The WebAuthn flow is very similiar to the paswordless flow, but when registering we require the resident key option. User account selection is handled by the client/authenticator. If multiple credentials are found, the user will be able to choose which credential to use.

+

Note: When we say passwordless, what we mean is that no password is sent over the internet or stored in a database. Password, PINs or Biometrics might be used by the authenticator on the client

+ +@if (!WebAuthnSupported) +{ +
+} +
+ Please note: At the time of writing (July 2019) this is not supported on all browsers. Confirmed to work on: Windows Edge, Edge (OS X, pre-release), Firefox 69 (Windows), Chrome 76.0.3809.72 beta (OS X) +
+ +
+
+ +

Create an account

+
+ +
+
+ + +
+ +
+
+
+ +
+
+
+
+ +

Sign in

+
+ +
+
+
+ +
+

Explanation: Username and paswordless login with FIDO2

+

+ In this scenario, WebAuthn is used without a username to securely authenticate the user. This requires the Authenticator to support Resident Keys. + The flow is visualized in the figure below. +

+ figure visualizing username and challenge sent together with assertion +

In this flow the Relying Party should tell the Authenticator to do User Verification (set UserVerification to required) via Biometrics/pin, thus the authentication is MFA (Something the user has - the private key - and something the user knows/is - the PIN or biometrics). However in scenarios where security requirements are very low we we could discourage user verification to minimize the user interaction needed to sign in. If discouraged, only user presence will be checked (Any human is present at the device).

+ +

+ Read the source code for this demo here: Usernameless.razor and UserService.cs +

+
+@code { + private bool WebAuthnSupported { get; set; } = true; + + private string? RegisterDisplayName { get; set; } + + + protected override async Task OnInitializedAsync() + { + WebAuthnSupported = await UserService.IsWebAuthnSupportedAsync(); + } + + private async Task Register() + { + var displayName = RegisterDisplayName; + + var result = await UserService.RegisterAsync(null, displayName); + + if (result == "OK") + { + Toasts.ShowToast("Registration successful", ToastLevel.Success); + } + else + { + Toasts.ShowToast(result, ToastLevel.Error); + } + } + + private async Task Login() + { + var result = await UserService.LoginAsync(null); + + if (result.StartsWith("Bearer")) + { + Toasts.ShowToast($"Login successful, JWT received", ToastLevel.Success); + Console.WriteLine($"Token: {result.Replace("Bearer ", "")}"); + } + else + { + Toasts.ShowToast(result, ToastLevel.Error); + } + } +} diff --git a/BlazorWasmDemo/Client/Shared/UserService.cs b/BlazorWasmDemo/Client/Shared/UserService.cs index 5e7a167ea..198a2134c 100644 --- a/BlazorWasmDemo/Client/Shared/UserService.cs +++ b/BlazorWasmDemo/Client/Shared/UserService.cs @@ -1,6 +1,8 @@ namespace BlazorWasmDemo.Client.Shared; using System.Net.Http.Json; +using System.Text; +using System.Text.Json; using Fido2.BlazorWebAssembly; using Fido2NetLib; @@ -12,6 +14,7 @@ public class UserService private const string _routeAssertionOpts = "assertion-options"; private const string _routeLogin = "assertion"; + private readonly JsonSerializerOptions _jsonOptions = new FidoBlazorSerializerContext().Options; private readonly HttpClient _httpClient; private readonly WebAuthn _webAuthn; @@ -35,25 +38,43 @@ public async Task RegisterAsync(string? username, string? displayName) var query = string.IsNullOrEmpty(displayName) ? string.Empty : $"?displayName={displayName}"; // Now the magic happens so stuff can go wrong + CredentialCreateOptions? options; try { // Get options from server - var options = await _httpClient.GetFromJsonAsync(routeOpts + query); - if(options == null) - { - return "No options received"; - } + options = await _httpClient.GetFromJsonAsync(routeOpts + query, _jsonOptions); + } + catch (Exception e) + { + Console.WriteLine(e); + return e.Message; + } + if (options == null) + { + return "No options received"; + } + + // Build the route to register the credentials + var routeCreds = $"{_routeUser}/{username ?? Convert.ToBase64String(Encoding.UTF8.GetBytes(options.User.Name))}/{_routeRegister}"; + + try + { // Present options to user and get response var credential = await _webAuthn.CreateCredsAsync(options); // Send response to server - return await (await _httpClient.PutAsJsonAsync($"{_routeUser}/{options.User.Name}/{_routeRegister}", credential)).Content.ReadAsStringAsync(); + return await (await _httpClient.PutAsJsonAsync(routeCreds, credential, _jsonOptions)).Content.ReadAsStringAsync(); } catch (Exception e) { Console.WriteLine(e); - return e.Message; + var errorMessage = e.Message; + if(options.ExcludeCredentials?.Count > 0) + { + errorMessage += " (You may have already registered this device)"; + } + return errorMessage; } } @@ -71,7 +92,7 @@ public async Task LoginAsync(string? username) try { // Get options from server - var options = await _httpClient.GetFromJsonAsync(route); + var options = await _httpClient.GetFromJsonAsync(route, _jsonOptions); if (options == null) { return "No options received"; @@ -86,7 +107,7 @@ public async Task LoginAsync(string? username) var assertion = await _webAuthn.VerifyAsync(options); // Send response to server - return await (await _httpClient.PostAsJsonAsync($"{_routeUser}/{_routeLogin}", assertion)).Content.ReadAsStringAsync(); + return await (await _httpClient.PostAsJsonAsync($"{_routeUser}/{_routeLogin}", assertion, _jsonOptions)).Content.ReadAsStringAsync(); } catch (Exception e) { diff --git a/BlazorWasmDemo/Server/Controllers/UserController.cs b/BlazorWasmDemo/Server/Controllers/UserController.cs index 96b75def5..94851e8bb 100644 --- a/BlazorWasmDemo/Server/Controllers/UserController.cs +++ b/BlazorWasmDemo/Server/Controllers/UserController.cs @@ -1,5 +1,6 @@ namespace BlazorWasmDemo.Server.Controllers; +using System.Diagnostics; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; @@ -47,19 +48,23 @@ public CredentialCreateOptions GetCredentialOptions([FromRoute] string? username { try { + var key = username; if (string.IsNullOrEmpty(username)) { var created = DateTime.UtcNow; if (string.IsNullOrEmpty(displayName)) { - displayName = $"(Usernameless user created at {created} for {Request.Host})"; - username = $"(Usernameless user created at {created.ToLongTimeString()} for {Request.Host})"; // more precise internal name for less collisions in _pendingCredentials + // More precise generated name for less collisions in _pendingCredentials + username = $"(Usernameless user created {created})"; } else { - username = $"{displayName} (Usernameless user created at {created} for {Request.Host})"; // Less precise if there's a displayName set anyway + // Less precise but nicer for user if there's a displayName set anyway + username = $"{displayName} (Usernameless user created {created.ToShortDateString()})"; } + key = Convert.ToBase64String(Encoding.UTF8.GetBytes(username)); } + Debug.Assert(key != null); // If it was null before, it was set to the base64 value. Analyzer doesn't understand this though. // 1. Get user from DB by username (in our example, auto create missing users) var user = _demoStorage.GetOrAddUser(username, () => new Fido2User @@ -76,7 +81,7 @@ public CredentialCreateOptions GetCredentialOptions([FromRoute] string? username var options = _fido2.RequestNewCredential(user, existingKeys, AuthenticatorSelection.Default, AttestationConveyancePreference.None); // 4. Temporarily store options, session/in-memory cache/redis/db - _pendingCredentials[username] = options; + _pendingCredentials[key] = options; // 5. return options to client return options; @@ -90,7 +95,7 @@ public CredentialCreateOptions GetCredentialOptions([FromRoute] string? username /// /// Creates a new credential for a user. /// - /// Use options.User.Name from the create options object received by a call to "/credential-options", even when called usernameless. + /// Username of registering user. If usernameless, use base64 encoded options.User.Name from the credential-options used to create the credential. /// /// /// a string containing either "OK" or an error message. From 0e419f2b0974ba7864c76ac887f3cbc103429cff Mon Sep 17 00:00:00 2001 From: Marlon Regenhardt Date: Thu, 16 Feb 2023 21:01:03 +0100 Subject: [PATCH 07/12] Add custom demo --- BlazorWasmDemo/Client/Pages/Custom.razor | 171 ++++++++++++++++++ BlazorWasmDemo/Client/Shared/UserService.cs | 41 ++++- BlazorWasmDemo/Client/wwwroot/css/app.css | 4 + .../Server/Controllers/UserController.cs | 42 ++++- 4 files changed, 248 insertions(+), 10 deletions(-) create mode 100644 BlazorWasmDemo/Client/Pages/Custom.razor diff --git a/BlazorWasmDemo/Client/Pages/Custom.razor b/BlazorWasmDemo/Client/Pages/Custom.razor new file mode 100644 index 000000000..8edb6fb9b --- /dev/null +++ b/BlazorWasmDemo/Client/Pages/Custom.razor @@ -0,0 +1,171 @@ +@page "/custom" +@using BlazorWasmDemo.Client.Shared.Toasts +@using Fido2NetLib.Objects +@inject UserService UserService +@inject ToastService Toasts + +

Custom

+ +

In this scenario we have removed the need for passwords. We will use the settings set by you when registering your credentials. This is useful if you want to try differences or browser support etc.

+

Note: When we say passwordless, what we mean is that no password is sent over the internet or stored in a database. Password, PINs or Biometrics might be used by the authenticator on the client

+ +@if (!WebAuthnSupported) +{ +
+ Please note: Your browser does not seem to support WebAuthn yet. Supported browsers +
+} + +
+
+ +

Create an account

+
+ +
+
+ +
+ +
+ + +
+
+ + +
+ +
+
+
+ +
+
+
+
+ +

Sign in

+
+ +
+
+ + +
+ +
+
+
+ +
+
+
+
+
Advanced settings
+

These settings are typically administred by the RP but for demo purposes we expose them to you for testing behaviours and browser support

+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ +
+

+ Read the source code for this demo here: Custom.razor and UserService.cs +

+
+@code { + private bool WebAuthnSupported { get; set; } = true; + + private string RegisterUsername { get; set; } = ""; + private string? RegisterDisplayName { get; set; } + + private string LoginUsername { get; set; } = ""; + + private AttestationConveyancePreference AttestationType { get; set; } + + private AuthenticatorAttachment? Authenticator { get; set; } + + private UserVerificationRequirement UserVerification { get; set; } = UserVerificationRequirement.Discouraged; + + private ResidentKeyRequirement ResidentKey { get; set; } = ResidentKeyRequirement.Preferred; + + protected override async Task OnInitializedAsync() + { + WebAuthnSupported = await UserService.IsWebAuthnSupportedAsync(); + } + + private bool RegisterFormValid() => !string.IsNullOrWhiteSpace(RegisterUsername); + private async Task Register() + { + var username = RegisterUsername; + var displayName = RegisterDisplayName; + + var result = await UserService.RegisterAsync( + username, + displayName, + AttestationType, + Authenticator, + UserVerification, + ResidentKey); + + if (result == "OK") + { + Toasts.ShowToast("Registration successful", ToastLevel.Success); + } + else + { + Toasts.ShowToast(result, ToastLevel.Error); + } + } + + private bool LoginFormValid() => !string.IsNullOrWhiteSpace(LoginUsername); + private async Task Login() + { + var result = await UserService.LoginAsync(LoginUsername); + + if (result.StartsWith("Bearer")) + { + Toasts.ShowToast($"Login successful, JWT received", ToastLevel.Success); + Console.WriteLine($"Token: {result.Replace("Bearer ", "")}"); + } + else + { + Toasts.ShowToast(result, ToastLevel.Error); + } + } +} diff --git a/BlazorWasmDemo/Client/Shared/UserService.cs b/BlazorWasmDemo/Client/Shared/UserService.cs index 198a2134c..55967f40a 100644 --- a/BlazorWasmDemo/Client/Shared/UserService.cs +++ b/BlazorWasmDemo/Client/Shared/UserService.cs @@ -5,6 +5,7 @@ using System.Text.Json; using Fido2.BlazorWebAssembly; using Fido2NetLib; +using Fido2NetLib.Objects; public class UserService { @@ -13,7 +14,7 @@ public class UserService private const string _routeRegister = "credential"; private const string _routeAssertionOpts = "assertion-options"; private const string _routeLogin = "assertion"; - + private readonly JsonSerializerOptions _jsonOptions = new FidoBlazorSerializerContext().Options; private readonly HttpClient _httpClient; private readonly WebAuthn _webAuthn; @@ -24,7 +25,9 @@ public UserService(HttpClient httpClient, WebAuthn webAuthn) _webAuthn = webAuthn; } - public async Task RegisterAsync(string? username, string? displayName) + public async Task RegisterAsync(string? username, string? displayName = null, + AttestationConveyancePreference? attestationType = null, AuthenticatorAttachment? authenticator = null, + UserVerificationRequirement? userVerification = null, ResidentKeyRequirement? residentKey = null) { // Make sure the WebAuthn API is initialized (although that should happen almost immediately after startup) await _webAuthn.Init(); @@ -34,8 +37,38 @@ public async Task RegisterAsync(string? username, string? displayName) + (string.IsNullOrEmpty(username) ? string.Empty : $"/{username}") // Query specific user unless we go usernameless + $"/{_routeCredOptions}"; - // Add display name if set - var query = string.IsNullOrEmpty(displayName) ? string.Empty : $"?displayName={displayName}"; + // Add optional parameters if set + var optionalParams = new List(); + if (!string.IsNullOrEmpty(displayName)) + { + optionalParams.Add($"{nameof(displayName)}={displayName}"); + } + + if (attestationType.HasValue) + { + optionalParams.Add($"{nameof(attestationType)}={attestationType}"); + } + + if (authenticator.HasValue) + { + optionalParams.Add($"{nameof(authenticator)}={authenticator}"); + } + + if (userVerification.HasValue) + { + optionalParams.Add($"{nameof(userVerification)}={userVerification}"); + } + + if (residentKey.HasValue) + { + optionalParams.Add($"{nameof(residentKey)}={residentKey}"); + } + + var query = ""; + if (optionalParams.Any()) + { + query = "?" + string.Join("&", optionalParams); + } // Now the magic happens so stuff can go wrong CredentialCreateOptions? options; diff --git a/BlazorWasmDemo/Client/wwwroot/css/app.css b/BlazorWasmDemo/Client/wwwroot/css/app.css index 764b4eea4..b3cfb3cbd 100644 --- a/BlazorWasmDemo/Client/wwwroot/css/app.css +++ b/BlazorWasmDemo/Client/wwwroot/css/app.css @@ -53,6 +53,10 @@ a { color: #23d160; } +.input-group { + padding-bottom: 0.75rem; +} + #blazor-error-ui { background: lightyellow; bottom: 0; diff --git a/BlazorWasmDemo/Server/Controllers/UserController.cs b/BlazorWasmDemo/Server/Controllers/UserController.cs index 94851e8bb..d6a6a86e4 100644 --- a/BlazorWasmDemo/Server/Controllers/UserController.cs +++ b/BlazorWasmDemo/Server/Controllers/UserController.cs @@ -39,12 +39,20 @@ public UserController(IFido2 fido2) /// Creates options to create a new credential for a user. /// /// (optional) The user's internal identifier. Omit for usernameless account. - /// (optional) Name for display purposes. Pass as query. + /// (optional as query) Name for display purposes. + /// (optional as query) + /// (optional as query) + /// (optional as query) + /// (optional as query) /// A new . Contains an error message if .Status is "error". [HttpGet("{username}/credential-options")] [HttpGet("credential-options")] public CredentialCreateOptions GetCredentialOptions([FromRoute] string? username, - [FromQuery] string? displayName) + [FromQuery] string? displayName, + [FromQuery] AttestationConveyancePreference? attestationType, + [FromQuery] AuthenticatorAttachment? authenticator, + [FromQuery] UserVerificationRequirement? userVerification, + [FromQuery] ResidentKeyRequirement? residentKey) { try { @@ -77,13 +85,35 @@ public CredentialCreateOptions GetCredentialOptions([FromRoute] string? username // 2. Get user existing keys by username var existingKeys = _demoStorage.GetCredentialsByUser(user).Select(c => c.Descriptor).ToList(); - // 3. Create options - var options = _fido2.RequestNewCredential(user, existingKeys, AuthenticatorSelection.Default, AttestationConveyancePreference.None); + // 3. Build authenticator selection + var authenticatorSelection = AuthenticatorSelection.Default; + if (authenticator != null) + { + authenticatorSelection.AuthenticatorAttachment = authenticator; + } - // 4. Temporarily store options, session/in-memory cache/redis/db + if (userVerification != null) + { + authenticatorSelection.UserVerification = userVerification.Value; + } + + if (residentKey != null) + { + authenticatorSelection.ResidentKey = residentKey.Value; + } + + // 4. Create options + var options = _fido2.RequestNewCredential( + user, + existingKeys, + authenticatorSelection, + attestationType ?? AttestationConveyancePreference.None + ); + + // 5. Temporarily store options, session/in-memory cache/redis/db _pendingCredentials[key] = options; - // 5. return options to client + // 6. return options to client return options; } catch (Exception e) From 8703de3a96c9ef4e32f99f093f5af62c3057b61b Mon Sep 17 00:00:00 2001 From: Marlon Regenhardt Date: Tue, 27 Jun 2023 14:20:07 +0200 Subject: [PATCH 08/12] Blazor Client: Update userservice for new featues --- .../Server/Controllers/UserController.cs | 53 +++++++++++++++---- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/BlazorWasmDemo/Server/Controllers/UserController.cs b/BlazorWasmDemo/Server/Controllers/UserController.cs index d6a6a86e4..68b945f01 100644 --- a/BlazorWasmDemo/Server/Controllers/UserController.cs +++ b/BlazorWasmDemo/Server/Controllers/UserController.cs @@ -104,11 +104,21 @@ public CredentialCreateOptions GetCredentialOptions([FromRoute] string? username // 4. Create options var options = _fido2.RequestNewCredential( - user, + user, existingKeys, - authenticatorSelection, - attestationType ?? AttestationConveyancePreference.None - ); + authenticatorSelection, + attestationType ?? AttestationConveyancePreference.None, + new AuthenticationExtensionsClientInputs() + { + Extensions = true, + UserVerificationMethod = true, + CredProps = true, + DevicePubKey = new AuthenticationExtensionsDevicePublicKeyInputs() + { + Attestation = attestationType?.ToString() ?? AttestationConveyancePreference.None.ToString() + }, + } + ); // 5. Temporarily store options, session/in-memory cache/redis/db _pendingCredentials[key] = options; @@ -150,13 +160,21 @@ public async Task CreateCredentialAsync([FromRoute] string username, [Fr // 4. Store the credentials in db _demoStorage.AddCredentialToUser(options.User, new StoredCredential { - Descriptor = new PublicKeyCredentialDescriptor(result.Result.CredentialId), + Type = result.Result.Type, + CredType = result.Result.CredType, + Id = result.Result.Id, + Descriptor = new PublicKeyCredentialDescriptor(result.Result.Id), PublicKey = result.Result.PublicKey, UserHandle = result.Result.User.Id, - SignatureCounter = result.Result.Counter, - CredType = result.Result.CredType, + SignCount = result.Result.Counter, RegDate = DateTime.Now, - AaGuid = result.Result.AaGuid + AaGuid = result.Result.AaGuid, + DevicePublicKeys = new List { result.Result.DevicePublicKey }, + Transports = result.Result.Transports, + BE = result.Result.BE, + BS = result.Result.BS, + AttestationObject = result.Result.AttestationObject, + AttestationClientDataJSON = result.Result.AttestationClientDataJSON, }); // 5. Now we need to remove the options from the pending dictionary @@ -193,8 +211,18 @@ public AssertionOptions MakeAssertionOptions([FromRoute] string? username, [From existingKeys = _demoStorage.GetCredentialsByUser(user).Select(c => c.Descriptor).ToList(); } - // 2. Create options (usernameless users will be prompted by their device to select a credential from their own list) - var options = _fido2.GetAssertionOptions(existingKeys, userVerification ?? UserVerificationRequirement.Discouraged); + var exts = new AuthenticationExtensionsClientInputs() + { + UserVerificationMethod = true, + Extensions = true, + DevicePubKey = new AuthenticationExtensionsDevicePublicKeyInputs() + }; + + // 2. Create options (usernameless users will be prompted by their device to select a credential from their own list) + var options = _fido2.GetAssertionOptions( + existingKeys, + userVerification ?? UserVerificationRequirement.Discouraged, + exts); // 4. Temporarily store options, session/in-memory cache/redis/db _pendingAssertions[new string(options.Challenge.Select(b => (char)b).ToArray())] = options; @@ -248,6 +276,7 @@ public async Task MakeAssertionAsync([FromBody] AuthenticatorAssertionRa clientResponse, options, creds.PublicKey, + creds.DevicePublicKeys, creds.SignatureCounter, UserHandleOwnerOfCredentialIdAsync, cancellationToken: cancellationToken); @@ -256,6 +285,10 @@ public async Task MakeAssertionAsync([FromBody] AuthenticatorAssertionRa if (res.Status == "ok") { _demoStorage.UpdateCounter(res.CredentialId, res.Counter); + if (res.DevicePublicKey is not null) + { + creds.DevicePublicKeys.Add(res.DevicePublicKey); + } } else { From 5902600cac8f798834b9279af60536dabbf42f2f Mon Sep 17 00:00:00 2001 From: Regenhardt Date: Thu, 23 Feb 2023 22:18:04 +0100 Subject: [PATCH 09/12] Add docker support for onrender deployment --- .dockerignore | 25 ++++++++ .../Client/BlazorWasmDemo.Client.csproj | 4 -- .../Server/BlazorWasmDemo.Server.csproj | 4 ++ BlazorWasmDemo/Server/Dockerfile | 28 +++++++++ .../Server/Properties/launchSettings.json | 57 +++++++++++-------- BlazorWasmDemo/Server/appsettings.json | 2 +- .../Fido2.BlazorWebAssembly.csproj | 4 ++ 7 files changed, 94 insertions(+), 30 deletions(-) create mode 100644 .dockerignore create mode 100644 BlazorWasmDemo/Server/Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..3729ff0cd --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/BlazorWasmDemo/Client/BlazorWasmDemo.Client.csproj b/BlazorWasmDemo/Client/BlazorWasmDemo.Client.csproj index 64eb97761..63cddbb6a 100644 --- a/BlazorWasmDemo/Client/BlazorWasmDemo.Client.csproj +++ b/BlazorWasmDemo/Client/BlazorWasmDemo.Client.csproj @@ -9,10 +9,6 @@ - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/BlazorWasmDemo/Server/BlazorWasmDemo.Server.csproj b/BlazorWasmDemo/Server/BlazorWasmDemo.Server.csproj index 2416ad48b..0770c83ff 100644 --- a/BlazorWasmDemo/Server/BlazorWasmDemo.Server.csproj +++ b/BlazorWasmDemo/Server/BlazorWasmDemo.Server.csproj @@ -4,10 +4,14 @@ net6.0 enable enable + d4e312c9-f55a-43e0-b3ea-699aa6421a5c + Linux + ..\.. + diff --git a/BlazorWasmDemo/Server/Dockerfile b/BlazorWasmDemo/Server/Dockerfile new file mode 100644 index 000000000..9c7d78f86 --- /dev/null +++ b/BlazorWasmDemo/Server/Dockerfile @@ -0,0 +1,28 @@ +#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +WORKDIR /app +EXPOSE 80 +EXPOSE 443 + +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build +WORKDIR /src +COPY ["nuget.config", "."] +COPY ["BlazorWasmDemo/Server/BlazorWasmDemo.Server.csproj", "BlazorWasmDemo/Server/"] +COPY ["Src/Fido2.AspNet/Fido2.AspNet.csproj", "Src/Fido2.AspNet/"] +COPY ["Src/Fido2/Fido2.csproj", "Src/Fido2/"] +COPY ["Src/Fido2.Models/Fido2.Models.csproj", "Src/Fido2.Models/"] +COPY ["BlazorWasmDemo/Client/BlazorWasmDemo.Client.csproj", "BlazorWasmDemo/Client/"] +COPY ["Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj", "Src/Fido2.BlazorWebAssembly/"] +RUN dotnet restore "BlazorWasmDemo/Server/BlazorWasmDemo.Server.csproj" +COPY . . +WORKDIR "/src/BlazorWasmDemo/Server" +RUN dotnet build "BlazorWasmDemo.Server.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "BlazorWasmDemo.Server.csproj" -c Release -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "BlazorWasmDemo.Server.dll"] \ No newline at end of file diff --git a/BlazorWasmDemo/Server/Properties/launchSettings.json b/BlazorWasmDemo/Server/Properties/launchSettings.json index 2f5a9b614..714fb6304 100644 --- a/BlazorWasmDemo/Server/Properties/launchSettings.json +++ b/BlazorWasmDemo/Server/Properties/launchSettings.json @@ -1,30 +1,37 @@ { - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:17580", - "sslPort": 44312 - } + "profiles": { + "BlazorWasmDemo.Server": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "dotnetRunMessages": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7124" }, - "profiles": { - "BlazorWasmDemo.Server": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "applicationUrl": "https://localhost:7124", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}" + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "publishAllPorts": true, + "useSSL": true + } + }, + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:17580", + "sslPort": 44312 } } +} \ No newline at end of file diff --git a/BlazorWasmDemo/Server/appsettings.json b/BlazorWasmDemo/Server/appsettings.json index 90e2c3300..a7a5b7e51 100644 --- a/BlazorWasmDemo/Server/appsettings.json +++ b/BlazorWasmDemo/Server/appsettings.json @@ -6,5 +6,5 @@ } }, "AllowedHosts": "*", - "Origins": "https://localhost:7124;https://localhost:5001" + "Origins": "https://localhost:7124;https://localhost:5001;https://blazor-webauthn.onrender.com" } diff --git a/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj b/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj index 2a3514fc2..138200372 100644 --- a/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj +++ b/Src/Fido2.BlazorWebAssembly/Fido2.BlazorWebAssembly.csproj @@ -39,4 +39,8 @@ + + + + From b417d0f029c09e04e62502f035bfde422452270e Mon Sep 17 00:00:00 2001 From: Regenhardt Date: Thu, 9 Mar 2023 08:34:48 +0100 Subject: [PATCH 10/12] Less SouceLink but more nodejs in docker builder --- BlazorWasmDemo/Server/Dockerfile | 6 +++++- Src/Directory.Build.props | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/BlazorWasmDemo/Server/Dockerfile b/BlazorWasmDemo/Server/Dockerfile index 9c7d78f86..89f2f33ac 100644 --- a/BlazorWasmDemo/Server/Dockerfile +++ b/BlazorWasmDemo/Server/Dockerfile @@ -6,9 +6,13 @@ EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build +ENV IS_DOCKER "true" WORKDIR /src +RUN apt-get update && apt-get install -y nodejs COPY ["nuget.config", "."] +COPY ["Directory.Build.props", "."] COPY ["BlazorWasmDemo/Server/BlazorWasmDemo.Server.csproj", "BlazorWasmDemo/Server/"] +COPY ["Src/Directory.Build.props", "Src/"] COPY ["Src/Fido2.AspNet/Fido2.AspNet.csproj", "Src/Fido2.AspNet/"] COPY ["Src/Fido2/Fido2.csproj", "Src/Fido2/"] COPY ["Src/Fido2.Models/Fido2.Models.csproj", "Src/Fido2.Models/"] @@ -25,4 +29,4 @@ RUN dotnet publish "BlazorWasmDemo.Server.csproj" -c Release -o /app/publish /p: FROM base AS final WORKDIR /app COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "BlazorWasmDemo.Server.dll"] \ No newline at end of file +ENTRYPOINT ["dotnet", "BlazorWasmDemo.Server.dll"] diff --git a/Src/Directory.Build.props b/Src/Directory.Build.props index 780ef4cc6..94c54bc0d 100644 --- a/Src/Directory.Build.props +++ b/Src/Directory.Build.props @@ -3,11 +3,11 @@ - + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb true - + From 064bf3d3816997ab602b6ede062ce78c1d51f3f7 Mon Sep 17 00:00:00 2001 From: Marlon Regenhardt Date: Tue, 27 Jun 2023 01:01:21 +0200 Subject: [PATCH 11/12] Return actual errors, use render as origin --- BlazorWasmDemo/Server/Program.cs | 7 ++++--- BlazorWasmDemo/Server/appsettings.json | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/BlazorWasmDemo/Server/Program.cs b/BlazorWasmDemo/Server/Program.cs index 301c0a35c..1bc13682f 100644 --- a/BlazorWasmDemo/Server/Program.cs +++ b/BlazorWasmDemo/Server/Program.cs @@ -4,11 +4,12 @@ builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); +var origin = new Uri(builder.Configuration["Origin"]); builder.Services.AddFido2(options => { - options.ServerDomain = "localhost"; + options.ServerDomain = origin.Host; options.ServerName = "FIDO2 Server"; - options.Origins = builder.Configuration["origins"].Split(';').ToHashSet(); + options.Origins = new HashSet { origin.AbsoluteUri }; options.TimestampDriftTolerance = 1000; }); builder.Services.AddSwaggerGen(opts => @@ -26,7 +27,7 @@ } else { - app.UseExceptionHandler("/Error"); + //app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } diff --git a/BlazorWasmDemo/Server/appsettings.json b/BlazorWasmDemo/Server/appsettings.json index a7a5b7e51..d869b9295 100644 --- a/BlazorWasmDemo/Server/appsettings.json +++ b/BlazorWasmDemo/Server/appsettings.json @@ -6,5 +6,5 @@ } }, "AllowedHosts": "*", - "Origins": "https://localhost:7124;https://localhost:5001;https://blazor-webauthn.onrender.com" + "Origin": "https://fido2-blazorwasm.onrender.com" } From 2ffbf21f6d38f1b0520e14ea9ff506cd61eb9984 Mon Sep 17 00:00:00 2001 From: Regenhardt Date: Thu, 23 Feb 2023 22:03:28 +0100 Subject: [PATCH 12/12] Add Blazor demo to pipeline config Also publishWebProjects has to be explicitly false to honour the 'projects' parameter. --- azure-pipelines.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 95afbbaec..ba0419965 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -35,6 +35,7 @@ jobs: inputs: command: publish arguments: '--no-build --nologo --configuration $(BuildConfiguration) --output $(build.ArtifactStagingDirectory)/net6.0 /p:PackageVersion=$(Build.BuildNumber)-development --framework net6.0' + publishWebProjects: false projects: 'Demo/Demo.csproj' - task: PublishBuildArtifacts@1 displayName: Copy website to artifacts [net6.0] @@ -42,6 +43,30 @@ jobs: pathToPublish: $(build.ArtifactStagingDirectory)/net6.0 artifactName: Demo .Net 6.0 +# Build the Blazor WebAssembly demo +- job: blazorWasmDemo + displayName: BlazorWasmDemo build + pool: + vmImage: $(TargetWindowsVMImage) + steps: + - task: UseDotNet@2 + displayName: 'Use .NET 6.0 SDK' + inputs: + packageType: 'sdk' + version: '6.0.x' + installationPath: $(Agent.ToolsDirectory)/dotnet-demo + - task: DotNetCoreCLI@2 + displayName: 'dotnet restore' + inputs: + command: restore + projects: 'BlazorWasmDemo/Server/BlazorWasmDemo.Server.csproj' + - task: DotNetCoreCLI@2 + displayName: 'dotnet build $(buildConfiguration)' + inputs: + command: build + arguments: '--configuration $(buildConfiguration) --no-restore --nologo "-p:Version=$(Build.BuildNumber)-development"' + projects: 'BlazorWasmDemo/Server/BlazorWasmDemo.Server.csproj' + # Run unit tests for windows-latest and publish coverage - job: test_windows displayName: Unit test windows