From cdd4a83399719c864f6a72915736cc34bac75eca Mon Sep 17 00:00:00 2001 From: Tomas Matousek Date: Fri, 15 Nov 2024 11:25:04 -0800 Subject: [PATCH 1/5] Improve failure reporting in tests --- .../dotnet-watch/HotReloadDotNetWatcher.cs | 10 +- .../HotReload/RuntimeProcessLauncherTests.cs | 282 ++++++++---------- 2 files changed, 130 insertions(+), 162 deletions(-) diff --git a/src/BuiltInTools/dotnet-watch/HotReloadDotNetWatcher.cs b/src/BuiltInTools/dotnet-watch/HotReloadDotNetWatcher.cs index ca5348aea93b..164224e9876c 100644 --- a/src/BuiltInTools/dotnet-watch/HotReloadDotNetWatcher.cs +++ b/src/BuiltInTools/dotnet-watch/HotReloadDotNetWatcher.cs @@ -190,10 +190,6 @@ void FileChangedCallback(string path, ChangeKind kind) { ImmutableInterlocked.Update(ref changedFilesAccumulator, changedFiles => changedFiles.Add(changedFile)); } - else - { - Context.Reporter.Verbose($"Change ignored: {kind} '{path}'."); - } } fileChangedCallback = FileChangedCallback; @@ -454,6 +450,11 @@ async Task> CaptureChangedFilesSnapshot(ImmutableDict { // start next iteration unless shutdown is requested } + catch (Exception) when ((waitForFileChangeBeforeRestarting = false) == true) + { + // unreachable + throw new InvalidOperationException(); + } finally { // stop watching file changes: @@ -598,6 +599,7 @@ private async ValueTask WaitForFileChangeBeforeRestarting(FileWatcher fileWatche return new ChangedFile(new FileItem { FilePath = path, ContainingProjectPaths = [] }, kind); } + Context.Reporter.Verbose($"Change ignored: {kind} '{path}'."); return null; } diff --git a/test/dotnet-watch.Tests/HotReload/RuntimeProcessLauncherTests.cs b/test/dotnet-watch.Tests/HotReload/RuntimeProcessLauncherTests.cs index c4ab7b0db357..d13f9b78a633 100644 --- a/test/dotnet-watch.Tests/HotReload/RuntimeProcessLauncherTests.cs +++ b/test/dotnet-watch.Tests/HotReload/RuntimeProcessLauncherTests.cs @@ -3,6 +3,8 @@ #nullable enable +using System.Runtime.CompilerServices; + namespace Microsoft.DotNet.Watch.UnitTests; public class RuntimeProcessLauncherTests(ITestOutputHelper logger) : DotNetWatchTestBase(logger) @@ -14,6 +16,18 @@ public enum TriggerEvent WaitingForChanges, } + private record class RunningWatcher(Task Task, TestReporter Reporter, TestConsole Console, StrongBox ServiceHolder, CancellationTokenSource ShutdownSource) + { + public TestRuntimeProcessLauncher? Service => ServiceHolder.Value; + + public TaskCompletionSource CreateCompletionSource() + { + var source = new TaskCompletionSource(); + ShutdownSource.Token.Register(() => source.TrySetCanceled(ShutdownSource.Token)); + return source; + } + } + private TestAsset CopyTestAsset(string assetName, params object[] testParameters) => TestAssets.CopyTestAsset("WatchAppMultiProc", identifier: string.Join(";", testParameters)).WithSource(); @@ -53,6 +67,47 @@ private static async Task Launch(string projectPath, TestRuntime return await startOp(cancellationToken); } + private RunningWatcher StartWatcher(TestAsset testAsset, string[] args, string workingDirectory, string projectPath) + { + var console = new TestConsole(Logger); + var reporter = new TestReporter(Logger); + + var program = Program.TryCreate( + TestOptions.GetCommandLineOptions(["--verbose", ..args, "--project", projectPath]), + console, + TestOptions.GetEnvironmentOptions(workingDirectory, TestContext.Current.ToolsetUnderTest.DotNetHostPath, testAsset), + reporter, + out var errorCode); + + Assert.Equal(0, errorCode); + Assert.NotNull(program); + + var serviceHolder = new StrongBox(); + var factory = new TestRuntimeProcessLauncher.Factory(s => + { + serviceHolder.Value = s; + }); + + var watcher = Assert.IsType(program.CreateWatcher(factory)); + + var shutdownToken = new CancellationTokenSource(); + var watchTask = Task.Run(async () => + { + try + { + await watcher.WatchAsync(shutdownToken.Token); + } + catch (Exception e) + { + shutdownToken.Cancel(); + ((IReporter)reporter).Error($"Unexpected exception {e}"); + throw; + } + }); + + return new RunningWatcher(watchTask, reporter, console, serviceHolder, shutdownToken); + } + [Theory] [CombinatorialData] public async Task UpdateAndRudeEdit(TriggerEvent trigger) @@ -72,34 +127,12 @@ public async Task UpdateAndRudeEdit(TriggerEvent trigger) var libProject = Path.Combine(libDir, "Lib.csproj"); var libSource = Path.Combine(libDir, "Lib.cs"); - var console = new TestConsole(Logger); - var reporter = new TestReporter(Logger); - - var program = Program.TryCreate( - TestOptions.GetCommandLineOptions(["--verbose", "--non-interactive", "--project", hostProject]), - console, - TestOptions.GetEnvironmentOptions(workingDirectory, TestContext.Current.ToolsetUnderTest.DotNetHostPath, testAsset), - reporter, - out var errorCode); + var w = StartWatcher(testAsset, ["--non-interactive"], workingDirectory, hostProject); - Assert.Equal(0, errorCode); - Assert.NotNull(program); + var launchCompletionA = w.CreateCompletionSource(); + var launchCompletionB = w.CreateCompletionSource(); - TestRuntimeProcessLauncher? service = null; - var factory = new TestRuntimeProcessLauncher.Factory(s => - { - service = s; - }); - - var watcher = Assert.IsType(program.CreateWatcher(factory)); - - var watchCancellationSource = new CancellationTokenSource(); - var watchTask = watcher.WatchAsync(watchCancellationSource.Token); - - var launchCompletionA = new TaskCompletionSource(); - var launchCompletionB = new TaskCompletionSource(); - - reporter.RegisterAction(trigger switch + w.Reporter.RegisterAction(trigger switch { TriggerEvent.HotReloadSessionStarting => MessageDescriptor.HotReloadSessionStarting, TriggerEvent.HotReloadSessionStarted => MessageDescriptor.HotReloadSessionStarted, @@ -114,55 +147,54 @@ public async Task UpdateAndRudeEdit(TriggerEvent trigger) } // service should have been created before Hot Reload session started: - Assert.NotNull(service); + Assert.NotNull(w.Service); - Launch(serviceProjectA, service, workingDirectory, watchCancellationSource.Token).Wait(); + Launch(serviceProjectA, w.Service, workingDirectory, w.ShutdownSource.Token).Wait(); launchCompletionA.TrySetResult(); - Launch(serviceProjectB, service, workingDirectory, watchCancellationSource.Token).Wait(); + Launch(serviceProjectB, w.Service, workingDirectory, w.ShutdownSource.Token).Wait(); launchCompletionB.TrySetResult(); }); - var waitingForChanges = reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); + var waitingForChanges = w.Reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); var launchedProcessCount = 0; - reporter.RegisterAction(MessageDescriptor.LaunchedProcess, () => Interlocked.Increment(ref launchedProcessCount)); + w.Reporter.RegisterAction(MessageDescriptor.LaunchedProcess, () => Interlocked.Increment(ref launchedProcessCount)); - var changeHandled = reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); - var sessionStarted = reporter.RegisterSemaphore(MessageDescriptor.HotReloadSessionStarted); - var projectBaselinesUpdated = reporter.RegisterSemaphore(MessageDescriptor.ProjectBaselinesUpdated); - + var changeHandled = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); + var sessionStarted = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadSessionStarted); + var projectBaselinesUpdated = w.Reporter.RegisterSemaphore(MessageDescriptor.ProjectBaselinesUpdated); await launchCompletionA.Task; await launchCompletionB.Task; // let the host process start: Log("Waiting for changes..."); - await waitingForChanges.WaitAsync(); + await waitingForChanges.WaitAsync(w.ShutdownSource.Token); Log("Waiting for session started..."); - await sessionStarted.WaitAsync(); + await sessionStarted.WaitAsync(w.ShutdownSource.Token); await MakeRudeEditChange(); Log("Waiting for changed handled ..."); - await changeHandled.WaitAsync(); + await changeHandled.WaitAsync(w.ShutdownSource.Token); // Wait for project baselines to be updated, so that we capture the new solution snapshot // and further changes are treated as another update. Log("Waiting for baselines updated..."); - await projectBaselinesUpdated.WaitAsync(); + await projectBaselinesUpdated.WaitAsync(w.ShutdownSource.Token); await MakeValidDependencyChange(); Log("Waiting for changed handled ..."); - await changeHandled.WaitAsync(); + await changeHandled.WaitAsync(w.ShutdownSource.Token); // clean up: Log("Shutting down"); - watchCancellationSource.Cancel(); + w.ShutdownSource.Cancel(); try { - await watchTask; + await w.Task; } catch (OperationCanceledException) { @@ -173,9 +205,9 @@ public async Task UpdateAndRudeEdit(TriggerEvent trigger) // Hot Reload shared dependency - should update both service projects async Task MakeValidDependencyChange() { - var hasUpdateSourceA = new TaskCompletionSource(); - var hasUpdateSourceB = new TaskCompletionSource(); - reporter.OnProjectProcessOutput += (projectPath, line) => + var hasUpdateSourceA = w.CreateCompletionSource(); + var hasUpdateSourceB = w.CreateCompletionSource(); + w.Reporter.OnProjectProcessOutput += (projectPath, line) => { if (line.Content.Contains("")) { @@ -228,8 +260,8 @@ public static void Common() // make a rude edit and check that the process is restarted async Task MakeRudeEditChange() { - var hasUpdateSource = new TaskCompletionSource(); - reporter.OnProjectProcessOutput += (projectPath, line) => + var hasUpdateSource = w.CreateCompletionSource(); + w.Reporter.OnProjectProcessOutput += (projectPath, line) => { if (projectPath == serviceProjectA && line.Content.Contains("Started A: 2")) { @@ -275,37 +307,15 @@ public async Task UpdateAppliedToNewProcesses(bool sharedOutput) var libProject = Path.Combine(libDir, "Lib.csproj"); var libSource = Path.Combine(libDir, "Lib.cs"); - var console = new TestConsole(Logger); - var reporter = new TestReporter(Logger); - - var program = Program.TryCreate( - TestOptions.GetCommandLineOptions(["--verbose", "--non-interactive", "--project", hostProject]), - console, - TestOptions.GetEnvironmentOptions(workingDirectory, TestContext.Current.ToolsetUnderTest.DotNetHostPath, testAsset), - reporter, - out var errorCode); - - Assert.Equal(0, errorCode); - Assert.NotNull(program); - - TestRuntimeProcessLauncher? service = null; - var factory = new TestRuntimeProcessLauncher.Factory(s => - { - service = s; - }); - - var watcher = Assert.IsType(program.CreateWatcher(factory)); - - var watchCancellationSource = new CancellationTokenSource(); - var watchTask = watcher.WatchAsync(watchCancellationSource.Token); + var w = StartWatcher(testAsset, ["--non-interactive"], workingDirectory, hostProject); - var waitingForChanges = reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); - var changeHandled = reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); - var updatesApplied = reporter.RegisterSemaphore(MessageDescriptor.UpdatesApplied); + var waitingForChanges = w.Reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); + var changeHandled = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); + var updatesApplied = w.Reporter.RegisterSemaphore(MessageDescriptor.UpdatesApplied); var hasUpdateA = new SemaphoreSlim(initialCount: 0); var hasUpdateB = new SemaphoreSlim(initialCount: 0); - reporter.OnProjectProcessOutput += (projectPath, line) => + w.Reporter.OnProjectProcessOutput += (projectPath, line) => { if (line.Content.Contains("")) { @@ -326,12 +336,12 @@ public async Task UpdateAppliedToNewProcesses(bool sharedOutput) // let the host process start: Log("Waiting for changes..."); - await waitingForChanges.WaitAsync(); + await waitingForChanges.WaitAsync(w.ShutdownSource.Token); // service should have been created before Hot Reload session started: - Assert.NotNull(service); + Assert.NotNull(w.Service); - await Launch(serviceProjectA, service, workingDirectory, watchCancellationSource.Token); + await Launch(serviceProjectA, w.Service, workingDirectory, w.ShutdownSource.Token); UpdateSourceFile(libSource, """ @@ -347,30 +357,30 @@ public static void Common() """); Log("Waiting for updated output from A ..."); - await hasUpdateA.WaitAsync(); + await hasUpdateA.WaitAsync(w.ShutdownSource.Token); // Host and ServiceA received updates: Log("Waiting for updates applied 1/2 ..."); - await updatesApplied.WaitAsync(); + await updatesApplied.WaitAsync(w.ShutdownSource.Token); Log("Waiting for updates applied 2/2 ..."); - await updatesApplied.WaitAsync(); + await updatesApplied.WaitAsync(w.ShutdownSource.Token); - await Launch(serviceProjectB, service, workingDirectory, watchCancellationSource.Token); + await Launch(serviceProjectB, w.Service, workingDirectory, w.ShutdownSource.Token); // ServiceB received updates: Log("Waiting for updates applied ..."); - await updatesApplied.WaitAsync(); + await updatesApplied.WaitAsync(w.ShutdownSource.Token); Log("Waiting for updated output from B ..."); - await hasUpdateB.WaitAsync(); + await hasUpdateB.WaitAsync(w.ShutdownSource.Token); // clean up: Log("Shutting down"); - watchCancellationSource.Cancel(); + w.ShutdownSource.Cancel(); try { - await watchTask; + await w.Task; } catch (OperationCanceledException) { @@ -397,37 +407,15 @@ public async Task HostRestart(UpdateLocation updateLocation) var libProject = Path.Combine(testAsset.Path, "Lib2", "Lib2.csproj"); var lib = Path.Combine(testAsset.Path, "Lib2", "Lib2.cs"); - var console = new TestConsole(Logger); - var reporter = new TestReporter(Logger); + var w = StartWatcher(testAsset, args: [], workingDirectory, hostProject); - var program = Program.TryCreate( - TestOptions.GetCommandLineOptions(["--verbose", "--project", hostProject]), - console, - TestOptions.GetEnvironmentOptions(workingDirectory, TestContext.Current.ToolsetUnderTest.DotNetHostPath, testAsset), - reporter, - out var errorCode); - - Assert.Equal(0, errorCode); - Assert.NotNull(program); - - TestRuntimeProcessLauncher? service = null; - var factory = new TestRuntimeProcessLauncher.Factory(s => - { - service = s; - }); - - var watcher = Assert.IsType(program.CreateWatcher(factory)); - - var watchCancellationSource = new CancellationTokenSource(); - var watchTask = watcher.WatchAsync(watchCancellationSource.Token); - - var waitingForChanges = reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); - var changeHandled = reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); - var restartNeeded = reporter.RegisterSemaphore(MessageDescriptor.ApplyUpdate_ChangingEntryPoint); - var restartRequested = reporter.RegisterSemaphore(MessageDescriptor.RestartRequested); + var waitingForChanges = w.Reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); + var changeHandled = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); + var restartNeeded = w.Reporter.RegisterSemaphore(MessageDescriptor.ApplyUpdate_ChangingEntryPoint); + var restartRequested = w.Reporter.RegisterSemaphore(MessageDescriptor.RestartRequested); var hasUpdate = new SemaphoreSlim(initialCount: 0); - reporter.OnProjectProcessOutput += (projectPath, line) => + w.Reporter.OnProjectProcessOutput += (projectPath, line) => { if (line.Content.Contains("")) { @@ -446,7 +434,7 @@ public async Task HostRestart(UpdateLocation updateLocation) // let the host process start: Log("Waiting for changes..."); - await waitingForChanges.WaitAsync(); + await waitingForChanges.WaitAsync(w.ShutdownSource.Token); switch (updateLocation) { @@ -465,7 +453,7 @@ public static void Print() // Host received Hot Reload updates: Log("Waiting for change handled ..."); - await changeHandled.WaitAsync(); + await changeHandled.WaitAsync(w.ShutdownSource.Token); break; case UpdateLocation.TopFunction: @@ -474,7 +462,7 @@ public static void Print() // Host received Hot Reload updates: Log("Waiting for change handled ..."); - await changeHandled.WaitAsync(); + await changeHandled.WaitAsync(w.ShutdownSource.Token); break; case UpdateLocation.TopLevel: @@ -483,23 +471,23 @@ public static void Print() // ⚠ ENC0118: Changing 'top-level code' might not have any effect until the application is restarted. Press "Ctrl + R" to restart. Log("Waiting for restart needed ..."); - await restartNeeded.WaitAsync(); + await restartNeeded.WaitAsync(w.ShutdownSource.Token); - console.PressKey(new ConsoleKeyInfo('R', ConsoleKey.R, shift: false, alt: false, control: true)); + w.Console.PressKey(new ConsoleKeyInfo('R', ConsoleKey.R, shift: false, alt: false, control: true)); Log("Waiting for restart requested ..."); - await restartRequested.WaitAsync(); + await restartRequested.WaitAsync(w.ShutdownSource.Token); break; } Log("Waiting updated output from Host ..."); - await hasUpdate.WaitAsync(); + await hasUpdate.WaitAsync(w.ShutdownSource.Token); // clean up: - watchCancellationSource.Cancel(); + w.ShutdownSource.Cancel(); try { - await watchTask; + await w.Task; } catch (OperationCanceledException) { @@ -518,48 +506,26 @@ public async Task RudeEditInProjectWithoutRunningProcess() var serviceSourceA2 = Path.Combine(serviceDirA, "A2.cs"); var serviceProjectA = Path.Combine(serviceDirA, "A.csproj"); - var console = new TestConsole(Logger); - var reporter = new TestReporter(Logger); - - var program = Program.TryCreate( - TestOptions.GetCommandLineOptions(["--verbose", "--non-interactive", "--project", hostProject]), - console, - TestOptions.GetEnvironmentOptions(workingDirectory, TestContext.Current.ToolsetUnderTest.DotNetHostPath, testAsset), - reporter, - out var errorCode); - - Assert.Equal(0, errorCode); - Assert.NotNull(program); - - TestRuntimeProcessLauncher? service = null; - var factory = new TestRuntimeProcessLauncher.Factory(s => - { - service = s; - }); - - var watcher = Assert.IsType(program.CreateWatcher(factory)); - - var watchCancellationSource = new CancellationTokenSource(); - var watchTask = watcher.WatchAsync(watchCancellationSource.Token); + var w = StartWatcher(testAsset, ["--non-interactive"], workingDirectory, hostProject); - var waitingForChanges = reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); + var waitingForChanges = w.Reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); - var changeHandled = reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); - var sessionStarted = reporter.RegisterSemaphore(MessageDescriptor.HotReloadSessionStarted); + var changeHandled = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); + var sessionStarted = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadSessionStarted); // let the host process start: Log("Waiting for changes..."); - await waitingForChanges.WaitAsync(); + await waitingForChanges.WaitAsync(w.ShutdownSource.Token); // service should have been created before Hot Reload session started: - Assert.NotNull(service); + Assert.NotNull(w.Service); - var runningProject = await Launch(serviceProjectA, service, workingDirectory, watchCancellationSource.Token); + var runningProject = await Launch(serviceProjectA, w.Service, workingDirectory, w.ShutdownSource.Token); Log("Waiting for session started ..."); - await sessionStarted.WaitAsync(); + await sessionStarted.WaitAsync(w.ShutdownSource.Token); // Terminate the process: - await service.ProjectLauncher.TerminateProcessAsync(runningProject, CancellationToken.None); + await w.Service.ProjectLauncher.TerminateProcessAsync(runningProject, CancellationToken.None); // rude edit in A (changing assembly level attribute): UpdateSourceFile(serviceSourceA2, """ @@ -567,16 +533,16 @@ public async Task RudeEditInProjectWithoutRunningProcess() """); Log("Waiting for change handled ..."); - await changeHandled.WaitAsync(); + await changeHandled.WaitAsync(w.ShutdownSource.Token); - reporter.ProcessOutput.Contains("verbose ⌚ Rude edits detected but do not affect any running process"); - reporter.ProcessOutput.Contains($"verbose ❌ {serviceSourceA2}(1,12): error ENC0003: Updating 'attribute' requires restarting the application."); + w.Reporter.ProcessOutput.Contains("verbose ⌚ Rude edits detected but do not affect any running process"); + w.Reporter.ProcessOutput.Contains($"verbose ❌ {serviceSourceA2}(1,12): error ENC0003: Updating 'attribute' requires restarting the application."); // clean up: - watchCancellationSource.Cancel(); + w.ShutdownSource.Cancel(); try { - await watchTask; + await w.Task; } catch (OperationCanceledException) { From 80e2238e40e027628455232e7c9cdde08a13c568 Mon Sep 17 00:00:00 2001 From: tmat Date: Mon, 25 Nov 2024 20:38:35 -0800 Subject: [PATCH 2/5] Improve file change post-processing --- src/BuiltInTools/dotnet-watch/FileItem.cs | 5 +- .../HotReload/CompilationHandler.cs | 2 +- .../dotnet-watch/HotReloadDotNetWatcher.cs | 266 +++++++++++++----- .../dotnet-watch/Internal/FileWatcher.cs | 50 ++-- .../Internal/FileWatcher/ChangeKind.cs | 4 +- .../FileWatcher/EventBasedDirectoryWatcher.cs | 4 +- .../Internal/FileWatcher/IDirectoryWatcher.cs | 2 +- .../FileWatcher/PollingDirectoryWatcher.cs | 4 +- .../dotnet-watch/Internal/IReporter.cs | 4 + .../Properties/launchSettings.json | 2 +- .../dotnet-watch/Utilities/PathUtilities.cs | 45 +++ .../Utilities/ProjectGraphNodeExtensions.cs | 6 + .../Directory.Build.targets | 8 + test/dotnet-watch.Tests/FileWatcherTests.cs | 125 ++++---- .../HotReload/ApplyDeltaTests.cs | 2 +- .../HotReload/HotReloadDotNetWatcherTests.cs | 39 +++ .../HotReload/RuntimeProcessLauncherTests.cs | 198 +++++++++---- test/dotnet-watch.Tests/Utilities/AssertEx.cs | 2 +- .../Watch/Utilities/DotNetWatchTestBase.cs | 20 +- 19 files changed, 566 insertions(+), 222 deletions(-) create mode 100644 src/BuiltInTools/dotnet-watch/Utilities/PathUtilities.cs create mode 100644 test/dotnet-watch.Tests/Directory.Build.targets create mode 100644 test/dotnet-watch.Tests/HotReload/HotReloadDotNetWatcherTests.cs diff --git a/src/BuiltInTools/dotnet-watch/FileItem.cs b/src/BuiltInTools/dotnet-watch/FileItem.cs index 8e0a028d4d09..acf044055fae 100644 --- a/src/BuiltInTools/dotnet-watch/FileItem.cs +++ b/src/BuiltInTools/dotnet-watch/FileItem.cs @@ -10,15 +10,12 @@ internal readonly record struct FileItem /// /// List of all projects that contain this file (does not contain duplicates). - /// Empty if is and the - /// item has not been assigned to a project yet. + /// Empty if the item is added but not been assigned to a project yet. /// public required List ContainingProjectPaths { get; init; } public string? StaticWebAssetPath { get; init; } - public ChangeKind Change { get; init; } - public bool IsStaticFile => StaticWebAssetPath != null; } } diff --git a/src/BuiltInTools/dotnet-watch/HotReload/CompilationHandler.cs b/src/BuiltInTools/dotnet-watch/HotReload/CompilationHandler.cs index a2c8b0a906ff..838c3f97ab70 100644 --- a/src/BuiltInTools/dotnet-watch/HotReload/CompilationHandler.cs +++ b/src/BuiltInTools/dotnet-watch/HotReload/CompilationHandler.cs @@ -364,7 +364,7 @@ private async ValueTask DisplayResultsAsync(WatchHotReloadService.Updates update switch (updates.Status) { case ModuleUpdateStatus.None: - _reporter.Output("No C# changes to apply."); + _reporter.Report(MessageDescriptor.NoHotReloadChangesToApply); break; case ModuleUpdateStatus.Ready: diff --git a/src/BuiltInTools/dotnet-watch/HotReloadDotNetWatcher.cs b/src/BuiltInTools/dotnet-watch/HotReloadDotNetWatcher.cs index 164224e9876c..3f111d6507f0 100644 --- a/src/BuiltInTools/dotnet-watch/HotReloadDotNetWatcher.cs +++ b/src/BuiltInTools/dotnet-watch/HotReloadDotNetWatcher.cs @@ -3,14 +3,13 @@ using System.Collections.Immutable; using System.Diagnostics; +using Microsoft.Build.Graph; using Microsoft.CodeAnalysis; namespace Microsoft.DotNet.Watch { internal sealed partial class HotReloadDotNetWatcher : Watcher { - private static readonly DateTime s_fileNotExistFileTime = DateTime.FromFileTime(0); - private readonly IConsole _console; private readonly IRuntimeProcessLauncherFactory? _runtimeProcessLauncherFactory; private readonly RestartPrompt? _rudeEditRestartPrompt; @@ -76,7 +75,7 @@ public override async Task WatchAsync(CancellationToken shutdownCancellationToke Task>? fileWatcherTask = null; IRuntimeProcessLauncher? runtimeProcessLauncher = null; CompilationHandler? compilationHandler = null; - Action? fileChangedCallback = null; + Action? fileChangedCallback = null; try { @@ -99,13 +98,16 @@ public override async Task WatchAsync(CancellationToken shutdownCancellationToke runtimeProcessLauncherFactory ??= AspireServiceFactory.Instance; Context.Reporter.Verbose("Using Aspire process launcher."); } - + await using var browserConnector = new BrowserConnector(Context); var projectMap = new ProjectNodeMap(evaluationResult.ProjectGraph, Context.Reporter); compilationHandler = new CompilationHandler(Context.Reporter); var staticFileHandler = new StaticFileHandler(Context.Reporter, projectMap, browserConnector); var scopedCssFileHandler = new ScopedCssFileHandler(Context.Reporter, projectMap, browserConnector); var projectLauncher = new ProjectLauncher(Context, projectMap, browserConnector, compilationHandler, iteration); + var outputDirectories = GetProjectOutputDirectories(evaluationResult.ProjectGraph); + ReportOutputDirectories(outputDirectories); + var changeFilter = new Predicate(change => AcceptChange(change, evaluationResult, outputDirectories)); var rootProjectNode = evaluationResult.ProjectGraph.GraphRoots.Single(); @@ -166,7 +168,6 @@ public override async Task WatchAsync(CancellationToken shutdownCancellationToke return; } - var buildCompletionTime = DateTime.UtcNow; await compilationHandler.Workspace.UpdateProjectConeAsync(RootFileSetFactory.RootProjectFile, iterationCancellationToken); // Solution must be initialized after we load the solution but before we start watching for file changes to avoid race condition @@ -182,13 +183,14 @@ public override async Task WatchAsync(CancellationToken shutdownCancellationToke fileWatcher.WatchContainingDirectories(evaluationResult.Files.Keys); - var changedFilesAccumulator = ImmutableList.Empty; + var changedFilesAccumulator = ImmutableList.Empty; - void FileChangedCallback(string path, ChangeKind kind) + void FileChangedCallback(ChangedPath change) { - if (TryGetChangedFile(evaluationResult.Files, buildCompletionTime, path, kind) is { } changedFile) + if (changeFilter(change)) { - ImmutableInterlocked.Update(ref changedFilesAccumulator, changedFiles => changedFiles.Add(changedFile)); + Context.Reporter.Verbose($"File change: {change.Kind} '{change.Path}'."); + ImmutableInterlocked.Update(ref changedFilesAccumulator, changedPaths => changedPaths.Add(change)); } } @@ -197,13 +199,14 @@ void FileChangedCallback(string path, ChangeKind kind) ReportWatchingForChanges(); // Hot Reload loop - exits when the root process needs to be restarted. + bool extendTimeout = false; while (true) { try { // Use timeout to batch file changes. If the process doesn't exit within the given timespan we'll check // for accumulated file changes. If there are any we attempt Hot Reload. Otherwise we come back here to wait again. - _ = await rootRunningProject.RunningProcess.WaitAsync(TimeSpan.FromMilliseconds(50), iterationCancellationToken); + _ = await rootRunningProject.RunningProcess.WaitAsync(TimeSpan.FromMilliseconds(extendTimeout ? 200 : 50), iterationCancellationToken); // Process exited: cancel the iteration, but wait for a file change before starting a new one waitForFileChangeBeforeRestarting = true; @@ -221,6 +224,16 @@ void FileChangedCallback(string path, ChangeKind kind) break; } + // If the changes include addition/deletion wait a little bit more for possible matching deletion/addition. + // This eliminates reevaluations caused by teared add + delete of a temp file or a move of a file. + if (!extendTimeout && changedFilesAccumulator.Any(change => change.Kind is ChangeKind.Add or ChangeKind.Delete)) + { + extendTimeout = true; + continue; + } + + extendTimeout = false; + var changedFiles = await CaptureChangedFilesSnapshot(rebuiltProjects: null); if (changedFiles is []) { @@ -315,7 +328,7 @@ void FileChangedCallback(string path, ChangeKind kind) iterationCancellationToken.ThrowIfCancellationRequested(); // pause accumulating file changes during build: - fileWatcher.OnFileChange -= fileChangedCallback; + fileWatcher.SuppressEvents = true; try { var buildResults = await Task.WhenAll( @@ -328,19 +341,17 @@ void FileChangedCallback(string path, ChangeKind kind) } finally { - fileWatcher.OnFileChange += fileChangedCallback; + fileWatcher.SuppressEvents = false; } iterationCancellationToken.ThrowIfCancellationRequested(); _ = await fileWatcher.WaitForFileChangeAsync( + changeFilter, startedWatching: () => Context.Reporter.Report(MessageDescriptor.FixBuildError), shutdownCancellationToken); } - // Update build completion time, so that file changes caused by the rebuild do not affect our file watcher: - buildCompletionTime = DateTime.UtcNow; - // Changes made since last snapshot of the accumulator shouldn't be included in next Hot Reload update. // Apply them to the workspace. _ = await CaptureChangedFilesSnapshot(projectsToRebuild); @@ -374,20 +385,44 @@ await Task.WhenAll( async Task> CaptureChangedFilesSnapshot(ImmutableDictionary? rebuiltProjects) { - var changedFiles = Interlocked.Exchange(ref changedFilesAccumulator, []); - if (changedFiles is []) + var changedPaths = Interlocked.Exchange(ref changedFilesAccumulator, []); + if (changedPaths is []) { return []; } + // Note: + // It is possible that we could have received multiple changes for a file that should cancel each other (such as Delete + Add), + // but they end up split into two snapshots and we will interpret them as two separate Delete and Add changes that trigger + // two sets of Hot Reload updates. Hence the normalization is best effort as we can't predict future. + + var changedFiles = NormalizePathChanges(changedPaths) + .Select(changedPath => + { + if (evaluationResult.Files.TryGetValue(changedPath.Path, out var existingFileItem)) + { + // On macOS may report Update followed by Add when a new file is created or just updated. + // We normalize Update + Add to just Add above. + // To distinguish between an addition and an update we check if the file exists. + var changeKind = changedPath.Kind == ChangeKind.Add ? ChangeKind.Update : changedPath.Kind; + + return new ChangedFile(existingFileItem, changeKind); + } + + return new ChangedFile( + new FileItem() { FilePath = changedPath.Path, ContainingProjectPaths = [] }, + ChangeKind.Add); + }) + .ToImmutableList(); + // When a new file is added we need to run design-time build to find out // what kind of the file it is and which project(s) does it belong to (can be linked, web asset, etc.). // We don't need to rebuild and restart the application though. - var hasAddedFile = changedFiles.Any(f => f.Change is ChangeKind.Add); + var hasAddedFile = changedFiles.Any(f => f.Kind is ChangeKind.Add); if (hasAddedFile) { - Context.Reporter.Verbose("File addition triggered re-evaluation."); + Context.Reporter.Report(MessageDescriptor.FileAdditionTriggeredReEvaluation); evaluationResult = await EvaluateRootProjectAsync(iterationCancellationToken); @@ -415,7 +450,7 @@ async Task> CaptureChangedFilesSnapshot(ImmutableDict // and be included in the next Hot Reload change set. var rebuiltProjectPaths = rebuiltProjects.Values.ToHashSet(); - var newAccumulator = ImmutableList.Empty; + var newAccumulator = ImmutableList.Empty; var newChangedFiles = ImmutableList.Empty; foreach (var file in changedFiles) @@ -426,7 +461,7 @@ async Task> CaptureChangedFilesSnapshot(ImmutableDict } else { - newAccumulator = newAccumulator.Add(file); + newAccumulator = newAccumulator.Add(new ChangedPath(file.Item.FilePath, file.Kind)); } } @@ -533,78 +568,177 @@ private async ValueTask WaitForFileChangeBeforeRestarting(FileWatcher fileWatche fileWatcher.WatchContainingDirectories([RootFileSetFactory.RootProjectFile]); _ = await fileWatcher.WaitForFileChangeAsync( + acceptChange: change => AcceptChange(change), startedWatching: () => Context.Reporter.Report(MessageDescriptor.WaitingForFileChangeBeforeRestarting), cancellationToken); } } - private ChangedFile? TryGetChangedFile(IReadOnlyDictionary fileSet, DateTime buildCompletionTime, string path, ChangeKind kind) + private bool AcceptChange(ChangedPath change, EvaluationResult evaluationResult, IReadOnlySet outputDirectories) + { + var (path, kind) = change; + + // Handle changes to files that are known to be project build inputs from its evaluation. + if (evaluationResult.Files.ContainsKey(path)) + { + return true; + } + + // Ignore other changes to output and intermediate output directories. + // + // Unsupported scenario: + // - msbuild target adds source files to intermediate output directory and Compile items + // based on the content of non-source file. + // + // On the other hand, changes to source files produced by source generators will be registered + // since the changes to additional file will trigger workspace update, which will trigger the source generator. + if (PathUtilities.ContainsPath(outputDirectories, path)) + { + Context.Reporter.Report(MessageDescriptor.IgnoringChangeInOutputDirectory, kind, path); + return false; + } + + return AcceptChange(change); + } + + private bool AcceptChange(ChangedPath change) { + var (path, kind) = change; + // only handle file changes: if (Directory.Exists(path)) { - return null; + return false; + } + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && + PathUtilities.GetContainingDirectories(path).FirstOrDefault(IsHiddenWindowsPath) is { } containingHiddenDir) + { + Context.Reporter.Report(MessageDescriptor.IgnoringChangeInHiddenDirectory, containingHiddenDir, kind, path); + return false; + } + + return true; + } + + private static bool IsHiddenWindowsPath(string path) + // Note: the device root directory on Windows has hidden attribute: + => File.GetAttributes(path).HasFlag(FileAttributes.Hidden) && Path.GetDirectoryName(path) != null; + + internal static string FormatTimestamp(DateTime time) + => time.ToString("HH:mm:ss.fffffff"); + + private static IReadOnlySet GetProjectOutputDirectories(ProjectGraph projectGraph) + { + var projectOutputDirectories = new HashSet(PathUtilities.OSSpecificPathComparer); + + foreach (var projectNode in projectGraph.ProjectNodes) + { + TryAdd(projectNode.GetOutputDirectory()); + TryAdd(projectNode.GetIntermediateOutputDirectory()); } - if (kind != ChangeKind.Delete) + return projectOutputDirectories; + + void TryAdd(string? dir) { try { - // Do not report changes to files that happened during build: - var creationTime = File.GetCreationTimeUtc(path); - var writeTime = File.GetLastWriteTimeUtc(path); - - if (creationTime == s_fileNotExistFileTime || writeTime == s_fileNotExistFileTime) - { - // file might have been deleted since we received the event - kind = ChangeKind.Delete; - } - else if (creationTime.Ticks < buildCompletionTime.Ticks && writeTime.Ticks < buildCompletionTime.Ticks) + if (dir != null) { - Context.Reporter.Verbose( - $"Ignoring file change during build: {kind} '{path}' " + - $"(created {FormatTimestamp(creationTime)} and written {FormatTimestamp(writeTime)} before {FormatTimestamp(buildCompletionTime)})."); + // msbuild properties may use '\' as a directory separator even on Unix. + // GetFullPath does not normalize '\' to '/' on Unix. + if (Path.DirectorySeparatorChar == '/') + { + dir = dir.Replace('\\', '/'); + } - return null; - } - else if (writeTime > creationTime) - { - Context.Reporter.Verbose($"File change: {kind} '{path}' (written {FormatTimestamp(writeTime)} after {FormatTimestamp(buildCompletionTime)})."); - } - else - { - Context.Reporter.Verbose($"File change: {kind} '{path}' (created {FormatTimestamp(creationTime)} after {FormatTimestamp(buildCompletionTime)})."); + projectOutputDirectories.Add(Path.TrimEndingDirectorySeparator(Path.GetFullPath(dir))); } } - catch (Exception e) + catch { - Context.Reporter.Verbose($"Ignoring file '{path}' due to access error: {e.Message}."); - return null; + // ignore } } + } - if (kind == ChangeKind.Delete) + private void ReportOutputDirectories(IReadOnlySet directories) + { + foreach (var dir in directories) { - Context.Reporter.Verbose($"File '{path}' deleted after {FormatTimestamp(buildCompletionTime)}."); + Context.Reporter.Verbose($"Output directory: '{dir}'"); } + } - if (fileSet.TryGetValue(path, out var fileItem)) - { - // For some reason we are sometimes seeing Add events raised whan an existing file is updated: - return new ChangedFile(fileItem, (kind == ChangeKind.Add) ? ChangeKind.Update : kind); - } + internal static IEnumerable NormalizePathChanges(IEnumerable changes) + => changes + .GroupBy(keySelector: change => change.Path) + .Select(group => + { + ChangedPath? lastUpdate = null; + ChangedPath? lastDelete = null; + ChangedPath? lastAdd = null; + ChangedPath? previous = null; - if (kind == ChangeKind.Add) - { - return new ChangedFile(new FileItem { FilePath = path, ContainingProjectPaths = [] }, kind); - } + foreach (var item in group) + { + // eliminate repeated changes: + if (item.Kind == previous?.Kind) + { + continue; + } - Context.Reporter.Verbose($"Change ignored: {kind} '{path}'."); - return null; - } + previous = item; - internal static string FormatTimestamp(DateTime time) - => time.ToString("HH:mm:ss.fffffff"); + if (item.Kind == ChangeKind.Add) + { + // eliminate delete-(update)*-add: + if (lastDelete.HasValue) + { + lastDelete = null; + lastAdd = null; + lastUpdate ??= item with { Kind = ChangeKind.Update }; + } + else + { + lastAdd = item; + } + } + else if (item.Kind == ChangeKind.Delete) + { + // eliminate add-delete: + if (lastAdd.HasValue) + { + lastDelete = null; + lastAdd = null; + } + else + { + lastDelete = item; + + // eliminate previous update: + lastUpdate = null; + } + } + else if (item.Kind == ChangeKind.Update) + { + // ignore updates after add: + if (!lastAdd.HasValue) + { + lastUpdate = item; + } + } + else + { + throw new InvalidOperationException($"Unexpected change kind: {item.Kind}"); + } + } + + return lastDelete ?? lastAdd ?? lastUpdate; + }) + .Where(item => item != null) + .Select(item => item!.Value); private void ReportWatchingForChanges() { @@ -625,7 +759,7 @@ private void ReportFileChanges(IReadOnlyList changedFiles) void Report(ChangeKind kind) { - var items = changedFiles.Where(item => item.Change == kind).ToArray(); + var items = changedFiles.Where(item => item.Kind == kind).ToArray(); if (items is not []) { Context.Reporter.Output(GetMessage(items, kind)); diff --git a/src/BuiltInTools/dotnet-watch/Internal/FileWatcher.cs b/src/BuiltInTools/dotnet-watch/Internal/FileWatcher.cs index 94d4323096f4..5f4c0584702c 100644 --- a/src/BuiltInTools/dotnet-watch/Internal/FileWatcher.cs +++ b/src/BuiltInTools/dotnet-watch/Internal/FileWatcher.cs @@ -9,7 +9,9 @@ internal sealed class FileWatcher(IReporter reporter) : IDisposable private readonly Dictionary _watchers = []; private bool _disposed; - public event Action? OnFileChange; + public event Action? OnFileChange; + + public bool SuppressEvents { get; set; } public void Dispose() { @@ -62,6 +64,11 @@ public void WatchDirectories(IEnumerable directories) } var newWatcher = FileWatcherFactory.CreateWatcher(directory); + if (newWatcher is EventBasedDirectoryWatcher eventBasedWatcher) + { + eventBasedWatcher.Logger = message => reporter.Verbose(message); + } + newWatcher.OnFileChange += WatcherChangedHandler; newWatcher.OnError += WatcherErrorHandler; newWatcher.EnableRaisingEvents = true; @@ -78,9 +85,12 @@ private void WatcherErrorHandler(object? sender, Exception error) } } - private void WatcherChangedHandler(object? sender, (string changedPath, ChangeKind kind) args) + private void WatcherChangedHandler(object? sender, ChangedPath change) { - OnFileChange?.Invoke(args.changedPath, args.kind); + if (!SuppressEvents) + { + OnFileChange?.Invoke(change); + } } private void DisposeWatcher(string directory) @@ -98,45 +108,43 @@ private void DisposeWatcher(string directory) private static string EnsureTrailingSlash(string path) => (path is [.., var last] && last != Path.DirectorySeparatorChar) ? path + Path.DirectorySeparatorChar : path; - public Task WaitForFileChangeAsync(Action? startedWatching, CancellationToken cancellationToken) - => WaitForFileChangeAsync( - changeFilter: (path, kind) => new ChangedFile(new FileItem() { FilePath = path, ContainingProjectPaths = [] }, kind), - startedWatching, - cancellationToken); - - public Task WaitForFileChangeAsync(IReadOnlyDictionary fileSet, Action? startedWatching, CancellationToken cancellationToken) - => WaitForFileChangeAsync( - changeFilter: (path, kind) => fileSet.TryGetValue(path, out var fileItem) ? new ChangedFile(fileItem, kind) : null, + public async Task WaitForFileChangeAsync(IReadOnlyDictionary fileSet, Action? startedWatching, CancellationToken cancellationToken) + { + var changedPath = await WaitForFileChangeAsync( + acceptChange: change => fileSet.ContainsKey(change.Path), startedWatching, cancellationToken); - public async Task WaitForFileChangeAsync(Func changeFilter, Action? startedWatching, CancellationToken cancellationToken) + return changedPath.HasValue ? new ChangedFile(fileSet[changedPath.Value.Path], changedPath.Value.Kind) : null; + } + + public async Task WaitForFileChangeAsync(Predicate acceptChange, Action? startedWatching, CancellationToken cancellationToken) { - var fileChangedSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + var fileChangedSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); cancellationToken.Register(() => fileChangedSource.TrySetResult(null)); - void FileChangedCallback(string path, ChangeKind kind) + void FileChangedCallback(ChangedPath change) { - if (changeFilter(path, kind) is { } changedFile) + if (acceptChange(change)) { - fileChangedSource.TrySetResult(changedFile); + fileChangedSource.TrySetResult(change); } } - ChangedFile? changedFile; + ChangedPath? change; OnFileChange += FileChangedCallback; try { startedWatching?.Invoke(); - changedFile = await fileChangedSource.Task; + change = await fileChangedSource.Task; } finally { OnFileChange -= FileChangedCallback; } - return changedFile; + return change; } public static async ValueTask WaitForFileChangeAsync(string filePath, IReporter reporter, Action? startedWatching, CancellationToken cancellationToken) @@ -146,7 +154,7 @@ public static async ValueTask WaitForFileChangeAsync(string filePath, IReporter watcher.WatchDirectories([Path.GetDirectoryName(filePath)!]); var fileChange = await watcher.WaitForFileChangeAsync( - changeFilter: (path, kind) => path == filePath ? new ChangedFile(new FileItem { FilePath = path, ContainingProjectPaths = [] }, kind) : null, + acceptChange: change => change.Path == filePath, startedWatching, cancellationToken); diff --git a/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/ChangeKind.cs b/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/ChangeKind.cs index ca4cd28c9171..71e339419a1c 100644 --- a/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/ChangeKind.cs +++ b/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/ChangeKind.cs @@ -10,4 +10,6 @@ internal enum ChangeKind Delete } -internal readonly record struct ChangedFile(FileItem Item, ChangeKind Change); +internal readonly record struct ChangedFile(FileItem Item, ChangeKind Kind); + +internal readonly record struct ChangedPath(string Path, ChangeKind Kind); diff --git a/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/EventBasedDirectoryWatcher.cs b/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/EventBasedDirectoryWatcher.cs index 508475247cc7..4abf152e5e10 100644 --- a/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/EventBasedDirectoryWatcher.cs +++ b/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/EventBasedDirectoryWatcher.cs @@ -7,7 +7,7 @@ namespace Microsoft.DotNet.Watch { internal sealed class EventBasedDirectoryWatcher : IDirectoryWatcher { - public event EventHandler<(string filePath, ChangeKind kind)>? OnFileChange; + public event EventHandler? OnFileChange; public event EventHandler? OnError; @@ -118,7 +118,7 @@ private void WatcherAddedHandler(object sender, FileSystemEventArgs e) private void NotifyChange(string fullPath, ChangeKind kind) { // Only report file changes - OnFileChange?.Invoke(this, (fullPath, kind)); + OnFileChange?.Invoke(this, new ChangedPath(fullPath, kind)); } private void CreateFileSystemWatcher() diff --git a/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/IDirectoryWatcher.cs b/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/IDirectoryWatcher.cs index 6b1eb73671a9..4adff49b1425 100644 --- a/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/IDirectoryWatcher.cs +++ b/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/IDirectoryWatcher.cs @@ -5,7 +5,7 @@ namespace Microsoft.DotNet.Watch { internal interface IDirectoryWatcher : IDisposable { - event EventHandler<(string filePath, ChangeKind kind)> OnFileChange; + event EventHandler OnFileChange; event EventHandler OnError; diff --git a/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/PollingDirectoryWatcher.cs b/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/PollingDirectoryWatcher.cs index 1477e7239783..a462944e3361 100644 --- a/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/PollingDirectoryWatcher.cs +++ b/src/BuiltInTools/dotnet-watch/Internal/FileWatcher/PollingDirectoryWatcher.cs @@ -21,7 +21,7 @@ internal sealed class PollingDirectoryWatcher : IDirectoryWatcher private volatile bool _disposed; - public event EventHandler<(string filePath, ChangeKind kind)>? OnFileChange; + public event EventHandler? OnFileChange; #pragma warning disable CS0067 // not used public event EventHandler? OnError; @@ -212,7 +212,7 @@ private void NotifyChanges() break; } - OnFileChange?.Invoke(this, (path, kind)); + OnFileChange?.Invoke(this, new ChangedPath(path, kind)); } } diff --git a/src/BuiltInTools/dotnet-watch/Internal/IReporter.cs b/src/BuiltInTools/dotnet-watch/Internal/IReporter.cs index 932c92d59fdd..e216f30af874 100644 --- a/src/BuiltInTools/dotnet-watch/Internal/IReporter.cs +++ b/src/BuiltInTools/dotnet-watch/Internal/IReporter.cs @@ -72,6 +72,10 @@ public bool TryGetMessage(string? prefix, object?[] args, [NotNullWhen(true)] ou public static readonly MessageDescriptor ApplyUpdate_FileContentDoesNotMatchBuiltSource = new("{0} Expected if a source file is updated that is linked to project whose build is not up-to-date.", "⌚", MessageSeverity.Verbose, s_id++); public static readonly MessageDescriptor ConfiguredToLaunchBrowser = new("dotnet-watch is configured to launch a browser on ASP.NET Core application startup.", "⌚", MessageSeverity.Verbose, s_id++); public static readonly MessageDescriptor ConfiguredToUseBrowserRefresh = new("Configuring the app to use browser-refresh middleware", "⌚", MessageSeverity.Verbose, s_id++); + public static readonly MessageDescriptor IgnoringChangeInHiddenDirectory = new("Ignoring change in hidden directory '{0}': {1} '{2}'", "⌚", MessageSeverity.Verbose, s_id++); + public static readonly MessageDescriptor IgnoringChangeInOutputDirectory = new("Ignoring change in output directory: {0} '{1}'", "⌚", MessageSeverity.Verbose, s_id++); + public static readonly MessageDescriptor FileAdditionTriggeredReEvaluation = new("File addition triggered re-evaluation.", "⌚", MessageSeverity.Verbose, s_id++); + public static readonly MessageDescriptor NoHotReloadChangesToApply = new ("No C# changes to apply.", "⌚", MessageSeverity.Output, s_id++); } internal interface IReporter diff --git a/src/BuiltInTools/dotnet-watch/Properties/launchSettings.json b/src/BuiltInTools/dotnet-watch/Properties/launchSettings.json index de41cecc021a..98570f7335c1 100644 --- a/src/BuiltInTools/dotnet-watch/Properties/launchSettings.json +++ b/src/BuiltInTools/dotnet-watch/Properties/launchSettings.json @@ -3,7 +3,7 @@ "dotnet-watch": { "commandName": "Project", "commandLineArgs": "--verbose /bl:DotnetRun.binlog", - "workingDirectory": "$(RepoRoot)src\\Assets\\TestProjects\\BlazorWasmWithLibrary\\blazorwasm", + "workingDirectory": "C:\\sdk1\\artifacts\\tmp\\Debug\\RenameDirecto---333D0BB9\\AppWithDeps", "environmentVariables": { "DOTNET_WATCH_DEBUG_SDK_DIRECTORY": "$(RepoRoot)artifacts\\bin\\redist\\$(Configuration)\\dotnet\\sdk\\$(Version)", "DCP_IDE_REQUEST_TIMEOUT_SECONDS": "100000", diff --git a/src/BuiltInTools/dotnet-watch/Utilities/PathUtilities.cs b/src/BuiltInTools/dotnet-watch/Utilities/PathUtilities.cs new file mode 100644 index 000000000000..9d170b074cfa --- /dev/null +++ b/src/BuiltInTools/dotnet-watch/Utilities/PathUtilities.cs @@ -0,0 +1,45 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.DotNet.Watch; + +internal static class PathUtilities +{ + public static readonly IEqualityComparer OSSpecificPathComparer = Path.DirectorySeparatorChar == '\\' ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal; + + public static bool ContainsPath(IReadOnlySet directories, string fullPath) + { + fullPath = Path.TrimEndingDirectorySeparator(fullPath); + + while (true) + { + if (directories.Contains(fullPath)) + { + return true; + } + + var containingDir = Path.GetDirectoryName(fullPath); + if (containingDir == null) + { + return false; + } + + fullPath = containingDir; + } + } + + public static IEnumerable GetContainingDirectories(string path) + { + while (true) + { + var containingDir = Path.GetDirectoryName(path); + if (containingDir == null) + { + yield break; + } + + yield return containingDir; + path = containingDir; + } + } +} diff --git a/src/BuiltInTools/dotnet-watch/Utilities/ProjectGraphNodeExtensions.cs b/src/BuiltInTools/dotnet-watch/Utilities/ProjectGraphNodeExtensions.cs index 9df4691e434c..d46945d500d9 100644 --- a/src/BuiltInTools/dotnet-watch/Utilities/ProjectGraphNodeExtensions.cs +++ b/src/BuiltInTools/dotnet-watch/Utilities/ProjectGraphNodeExtensions.cs @@ -33,6 +33,12 @@ public static bool IsNetCoreApp(this ProjectGraphNode projectNode) public static bool IsNetCoreApp(this ProjectGraphNode projectNode, Version minVersion) => IsNetCoreApp(projectNode) && IsTargetFrameworkVersionOrNewer(projectNode, minVersion); + public static string? GetOutputDirectory(this ProjectGraphNode projectNode) + => projectNode.ProjectInstance.GetPropertyValue("TargetPath") is { Length: >0 } path ? Path.GetDirectoryName(Path.Combine(projectNode.ProjectInstance.Directory, path)) : null; + + public static string? GetIntermediateOutputDirectory(this ProjectGraphNode projectNode) + => projectNode.ProjectInstance.GetPropertyValue("IntermediateOutputPath") is { Length: >0 } path ? Path.Combine(projectNode.ProjectInstance.Directory, path) : null; + public static IEnumerable GetCapabilities(this ProjectGraphNode projectNode) => projectNode.ProjectInstance.GetItems("ProjectCapability").Select(item => item.EvaluatedInclude); diff --git a/test/dotnet-watch.Tests/Directory.Build.targets b/test/dotnet-watch.Tests/Directory.Build.targets new file mode 100644 index 000000000000..6ae79f4c0f1b --- /dev/null +++ b/test/dotnet-watch.Tests/Directory.Build.targets @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/dotnet-watch.Tests/FileWatcherTests.cs b/test/dotnet-watch.Tests/FileWatcherTests.cs index ab12f6c40f45..9848ec270df4 100644 --- a/test/dotnet-watch.Tests/FileWatcherTests.cs +++ b/test/dotnet-watch.Tests/FileWatcherTests.cs @@ -11,7 +11,7 @@ public class FileWatcherTests(ITestOutputHelper output) private async Task TestOperation( string dir, - (string path, ChangeKind kind)[] expectedChanges, + ChangedPath[] expectedChanges, bool usePolling, Action operation) { @@ -22,18 +22,18 @@ private async Task TestOperation( } var changedEv = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var filesChanged = new HashSet<(string path, ChangeKind kind)>(); + var filesChanged = new HashSet(); - EventHandler<(string path, ChangeKind kind)> handler = null; + EventHandler handler = null; handler = (_, f) => { if (filesChanged.Add(f)) { - output.WriteLine($"Observed new {f.kind}: '{f.path}' ({filesChanged.Count} out of {expectedChanges.Length})"); + output.WriteLine($"Observed new {f.Kind}: '{f.Path}' ({filesChanged.Count} out of {expectedChanges.Length})"); } else { - output.WriteLine($"Already seen {f.kind}: '{f.path}'"); + output.WriteLine($"Already seen {f.Kind}: '{f.Path}'"); } if (filesChanged.Count == expectedChanges.Length) @@ -58,7 +58,7 @@ private async Task TestOperation( operation(); await changedEv.Task.TimeoutAfter(DefaultTimeout); - AssertEx.SequenceEqual(expectedChanges, filesChanged.Order()); + AssertEx.SequenceEqual(expectedChanges, filesChanged.Order(Comparer.Create((x, y) => (x.Path, x.Kind).CompareTo((y.Path, y.Kind))))); } [Theory] @@ -73,15 +73,15 @@ public async Task NewFile(bool usePolling) await TestOperation( dir, expectedChanges: !RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && !usePolling - ? new[] - { - (testFileFullPath, ChangeKind.Update), - (testFileFullPath, ChangeKind.Add), - } - : new[] - { - (testFileFullPath, ChangeKind.Add), - }, + ? + [ + new(testFileFullPath, ChangeKind.Update), + new(testFileFullPath, ChangeKind.Add), + ] + : + [ + new(testFileFullPath, ChangeKind.Add), + ], usePolling, () => File.WriteAllText(testFileFullPath, string.Empty)); } @@ -99,16 +99,16 @@ public async Task NewFileInNewDirectory(bool usePolling) await TestOperation( dir, expectedChanges: RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && !usePolling - ? new[] - { - (newDir, ChangeKind.Add), - (newFile, ChangeKind.Update), - (newFile, ChangeKind.Add), - } - : new[] - { - (newDir, ChangeKind.Add), - }, + ? + [ + new(newDir, ChangeKind.Add), + new(newFile, ChangeKind.Update), + new(newFile, ChangeKind.Add), + ] + : + [ + new(newDir, ChangeKind.Add), + ], usePolling, () => { @@ -129,7 +129,7 @@ public async Task ChangeFile(bool usePolling) await TestOperation( dir, - expectedChanges: [(testFileFullPath, ChangeKind.Update)], + expectedChanges: [new(testFileFullPath, ChangeKind.Update)], usePolling, () => File.WriteAllText(testFileFullPath, string.Empty)); } @@ -149,15 +149,15 @@ await TestOperation( expectedChanges: RuntimeInformation.IsOSPlatform(OSPlatform.OSX) && !usePolling ? [ // On OSX events from before we started observing are reported as well. - (srcFile, ChangeKind.Update), - (srcFile, ChangeKind.Add), - (srcFile, ChangeKind.Delete), - (dstFile, ChangeKind.Add), + new(srcFile, ChangeKind.Update), + new(srcFile, ChangeKind.Add), + new(srcFile, ChangeKind.Delete), + new(dstFile, ChangeKind.Add), ] : [ - (srcFile, ChangeKind.Delete), - (dstFile, ChangeKind.Add), + new(srcFile, ChangeKind.Delete), + new(dstFile, ChangeKind.Add), ], usePolling, () => File.Move(srcFile, dstFile)); @@ -177,9 +177,10 @@ public async Task FileInSubdirectory() await TestOperation( dir, - expectedChanges: [ - (subdir, ChangeKind.Update), - (testFileFullPath, ChangeKind.Update) + expectedChanges: + [ + new(subdir, ChangeKind.Update), + new(testFileFullPath, ChangeKind.Update) ], usePolling: true, () => File.WriteAllText(testFileFullPath, string.Empty)); @@ -264,7 +265,7 @@ public async Task MultipleFiles(bool usePolling) await TestOperation( dir, - expectedChanges: [(testFileFullPath, ChangeKind.Update)], + expectedChanges: [new(testFileFullPath, ChangeKind.Update)], usePolling: true, () => File.WriteAllText(testFileFullPath, string.Empty)); } @@ -292,12 +293,12 @@ private async Task AssertFileChangeRaisesEvent(string directory, IDirectoryWatch { var changedEv = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var expectedPath = Path.Combine(directory, Path.GetRandomFileName()); - EventHandler<(string, ChangeKind)> handler = (_, f) => + EventHandler handler = (_, f) => { output.WriteLine("File changed: " + f); try { - if (string.Equals(f.Item1, expectedPath, StringComparison.OrdinalIgnoreCase)) + if (string.Equals(f.Path, expectedPath, StringComparison.OrdinalIgnoreCase)) { changedEv.TrySetResult(0); } @@ -351,39 +352,39 @@ await TestOperation( dir, expectedChanges: usePolling ? [ - (subdir, ChangeKind.Delete), - (f1, ChangeKind.Delete), - (f2, ChangeKind.Delete), - (f3, ChangeKind.Delete), + new(subdir, ChangeKind.Delete), + new(f1, ChangeKind.Delete), + new(f2, ChangeKind.Delete), + new(f3, ChangeKind.Delete), ] : RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? [ - (subdir, ChangeKind.Add), - (subdir, ChangeKind.Delete), - (f1, ChangeKind.Update), - (f1, ChangeKind.Add), - (f1, ChangeKind.Delete), - (f2, ChangeKind.Update), - (f2, ChangeKind.Add), - (f2, ChangeKind.Delete), - (f3, ChangeKind.Update), - (f3, ChangeKind.Add), - (f3, ChangeKind.Delete), + new(subdir, ChangeKind.Add), + new(subdir, ChangeKind.Delete), + new(f1, ChangeKind.Update), + new(f1, ChangeKind.Add), + new(f1, ChangeKind.Delete), + new(f2, ChangeKind.Update), + new(f2, ChangeKind.Add), + new(f2, ChangeKind.Delete), + new(f3, ChangeKind.Update), + new(f3, ChangeKind.Add), + new(f3, ChangeKind.Delete), ] : RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? [ - (subdir, ChangeKind.Update), - (subdir, ChangeKind.Delete), - (f1, ChangeKind.Delete), - (f2, ChangeKind.Delete), - (f3, ChangeKind.Delete), + new(subdir, ChangeKind.Update), + new(subdir, ChangeKind.Delete), + new(f1, ChangeKind.Delete), + new(f2, ChangeKind.Delete), + new(f3, ChangeKind.Delete), ] : [ - (subdir, ChangeKind.Delete), - (f1, ChangeKind.Delete), - (f2, ChangeKind.Delete), - (f3, ChangeKind.Delete), + new(subdir, ChangeKind.Delete), + new(f1, ChangeKind.Delete), + new(f2, ChangeKind.Delete), + new(f3, ChangeKind.Delete), ], usePolling, () => Directory.Delete(subdir, recursive: true)); diff --git a/test/dotnet-watch.Tests/HotReload/ApplyDeltaTests.cs b/test/dotnet-watch.Tests/HotReload/ApplyDeltaTests.cs index 402167c0f735..153695d9fd3c 100644 --- a/test/dotnet-watch.Tests/HotReload/ApplyDeltaTests.cs +++ b/test/dotnet-watch.Tests/HotReload/ApplyDeltaTests.cs @@ -291,7 +291,7 @@ class AppUpdateHandler if (verbose) { - App.AssertOutputContains("dotnet watch 🕵️ [WatchHotReloadApp (net9.0)] Deltas applied."); + await App.WaitUntilOutputContains("dotnet watch 🕵️ [WatchHotReloadApp (net9.0)] Deltas applied."); } else { diff --git a/test/dotnet-watch.Tests/HotReload/HotReloadDotNetWatcherTests.cs b/test/dotnet-watch.Tests/HotReload/HotReloadDotNetWatcherTests.cs new file mode 100644 index 000000000000..ac47a4ef9943 --- /dev/null +++ b/test/dotnet-watch.Tests/HotReload/HotReloadDotNetWatcherTests.cs @@ -0,0 +1,39 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.DotNet.Watch.UnitTests; + +public class HotReloadDotNetWatcherTests +{ + [Theory] + [InlineData(new[] { ChangeKind.Update }, new[] { ChangeKind.Update })] + [InlineData(new[] { ChangeKind.Add }, new[] { ChangeKind.Add })] + [InlineData(new[] { ChangeKind.Delete }, new[] { ChangeKind.Delete })] + + [InlineData(new[] { ChangeKind.Update, ChangeKind.Update }, new[] { ChangeKind.Update })] + [InlineData(new[] { ChangeKind.Update, ChangeKind.Delete }, new[] { ChangeKind.Delete })] + [InlineData(new[] { ChangeKind.Add, ChangeKind.Update }, new[] { ChangeKind.Add })] + [InlineData(new[] { ChangeKind.Add, ChangeKind.Delete }, new ChangeKind[] { })] + [InlineData(new[] { ChangeKind.Delete, ChangeKind.Add}, new[] { ChangeKind.Update })] + [InlineData(new[] { ChangeKind.Add, ChangeKind.Add }, new[] { ChangeKind.Add })] + [InlineData(new[] { ChangeKind.Delete, ChangeKind.Delete }, new[] { ChangeKind.Delete })] + + [InlineData(new[] { ChangeKind.Add, ChangeKind.Delete, ChangeKind.Add, ChangeKind.Delete }, new ChangeKind[] { })] + [InlineData(new[] { ChangeKind.Update, ChangeKind.Delete, ChangeKind.Add, ChangeKind.Update }, new[] { ChangeKind.Update })] + [InlineData(new[] { ChangeKind.Update, ChangeKind.Delete, ChangeKind.Update, ChangeKind.Add, ChangeKind.Update }, new[] { ChangeKind.Update })] + [InlineData(new[] { ChangeKind.Add, ChangeKind.Delete, ChangeKind.Delete }, new ChangeKind[] { })] + [InlineData(new[] { ChangeKind.Add, ChangeKind.Add, ChangeKind.Delete }, new ChangeKind[] { })] + [InlineData(new[] { ChangeKind.Add, ChangeKind.Update, ChangeKind.Delete }, new ChangeKind[] { })] + [InlineData(new[] { ChangeKind.Update, ChangeKind.Add, ChangeKind.Delete }, new[] { ChangeKind.Update })] + + // File.WriteAllText on macOS may produce Update + Add. + [InlineData(new[] { ChangeKind.Update, ChangeKind.Add }, new[] { ChangeKind.Add })] + + // The following case should not occur in practice: + [InlineData(new[] { ChangeKind.Delete, ChangeKind.Update }, new[] { ChangeKind.Delete })] + internal void NormalizeFileChanges(ChangeKind[] changes, ChangeKind[] expected) + { + var normalized = HotReloadDotNetWatcher.NormalizePathChanges(changes.Select(kind => new ChangedPath("a.html", kind))); + AssertEx.SequenceEqual(expected, normalized.Select(c => c.Kind)); + } +} diff --git a/test/dotnet-watch.Tests/HotReload/RuntimeProcessLauncherTests.cs b/test/dotnet-watch.Tests/HotReload/RuntimeProcessLauncherTests.cs index d13f9b78a633..0373b05f0239 100644 --- a/test/dotnet-watch.Tests/HotReload/RuntimeProcessLauncherTests.cs +++ b/test/dotnet-watch.Tests/HotReload/RuntimeProcessLauncherTests.cs @@ -3,6 +3,7 @@ #nullable enable +using System.Collections.Immutable; using System.Runtime.CompilerServices; namespace Microsoft.DotNet.Watch.UnitTests; @@ -16,10 +17,34 @@ public enum TriggerEvent WaitingForChanges, } - private record class RunningWatcher(Task Task, TestReporter Reporter, TestConsole Console, StrongBox ServiceHolder, CancellationTokenSource ShutdownSource) + private record class RunningWatcher( + RuntimeProcessLauncherTests Test, + HotReloadDotNetWatcher Watcher, + Task Task, + TestReporter Reporter, + TestConsole Console, + StrongBox ServiceHolder, + CancellationTokenSource ShutdownSource) : IAsyncDisposable { public TestRuntimeProcessLauncher? Service => ServiceHolder.Value; + public async ValueTask DisposeAsync() + { + if (!ShutdownSource.IsCancellationRequested) + { + Test.Log("Shutting down"); + ShutdownSource.Cancel(); + } + + try + { + await Task; + } + catch (OperationCanceledException) + { + } + } + public TaskCompletionSource CreateCompletionSource() { var source = new TaskCompletionSource(); @@ -29,7 +54,7 @@ public TaskCompletionSource CreateCompletionSource() } private TestAsset CopyTestAsset(string assetName, params object[] testParameters) - => TestAssets.CopyTestAsset("WatchAppMultiProc", identifier: string.Join(";", testParameters)).WithSource(); + => TestAssets.CopyTestAsset(assetName, identifier: string.Join(";", testParameters)).WithSource(); private static async Task Launch(string projectPath, TestRuntimeProcessLauncher service, string workingDirectory, CancellationToken cancellationToken) { @@ -67,7 +92,7 @@ private static async Task Launch(string projectPath, TestRuntime return await startOp(cancellationToken); } - private RunningWatcher StartWatcher(TestAsset testAsset, string[] args, string workingDirectory, string projectPath) + private RunningWatcher StartWatcher(TestAsset testAsset, string[] args, string workingDirectory, string projectPath, SemaphoreSlim? fileChangesCompleted = null) { var console = new TestConsole(Logger); var reporter = new TestReporter(Logger); @@ -90,22 +115,22 @@ private RunningWatcher StartWatcher(TestAsset testAsset, string[] args, string w var watcher = Assert.IsType(program.CreateWatcher(factory)); - var shutdownToken = new CancellationTokenSource(); + var shutdownSource = new CancellationTokenSource(); var watchTask = Task.Run(async () => { try { - await watcher.WatchAsync(shutdownToken.Token); + await watcher.WatchAsync(shutdownSource.Token); } - catch (Exception e) + catch (Exception e) when (e is not OperationCanceledException) { - shutdownToken.Cancel(); + shutdownSource.Cancel(); ((IReporter)reporter).Error($"Unexpected exception {e}"); throw; } - }); + }, shutdownSource.Token); - return new RunningWatcher(watchTask, reporter, console, serviceHolder, shutdownToken); + return new RunningWatcher(this, watcher, watchTask, reporter, console, serviceHolder, shutdownSource); } [Theory] @@ -127,7 +152,7 @@ public async Task UpdateAndRudeEdit(TriggerEvent trigger) var libProject = Path.Combine(libDir, "Lib.csproj"); var libSource = Path.Combine(libDir, "Lib.cs"); - var w = StartWatcher(testAsset, ["--non-interactive"], workingDirectory, hostProject); + await using var w = StartWatcher(testAsset, ["--non-interactive"], workingDirectory, hostProject); var launchCompletionA = w.CreateCompletionSource(); var launchCompletionB = w.CreateCompletionSource(); @@ -158,9 +183,6 @@ public async Task UpdateAndRudeEdit(TriggerEvent trigger) var waitingForChanges = w.Reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); - var launchedProcessCount = 0; - w.Reporter.RegisterAction(MessageDescriptor.LaunchedProcess, () => Interlocked.Increment(ref launchedProcessCount)); - var changeHandled = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); var sessionStarted = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadSessionStarted); var projectBaselinesUpdated = w.Reporter.RegisterSemaphore(MessageDescriptor.ProjectBaselinesUpdated); @@ -189,19 +211,6 @@ public async Task UpdateAndRudeEdit(TriggerEvent trigger) Log("Waiting for changed handled ..."); await changeHandled.WaitAsync(w.ShutdownSource.Token); - // clean up: - Log("Shutting down"); - w.ShutdownSource.Cancel(); - try - { - await w.Task; - } - catch (OperationCanceledException) - { - } - - Assert.Equal(6, launchedProcessCount); - // Hot Reload shared dependency - should update both service projects async Task MakeValidDependencyChange() { @@ -280,8 +289,6 @@ async Task MakeRudeEditChange() await hasUpdateSource.Task; Assert.True(hasUpdateSource.Task.IsCompletedSuccessfully); - - Assert.Equal(6, launchedProcessCount); } } @@ -307,7 +314,7 @@ public async Task UpdateAppliedToNewProcesses(bool sharedOutput) var libProject = Path.Combine(libDir, "Lib.csproj"); var libSource = Path.Combine(libDir, "Lib.cs"); - var w = StartWatcher(testAsset, ["--non-interactive"], workingDirectory, hostProject); + await using var w = StartWatcher(testAsset, ["--non-interactive"], workingDirectory, hostProject); var waitingForChanges = w.Reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); var changeHandled = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); @@ -374,17 +381,6 @@ public static void Common() Log("Waiting for updated output from B ..."); await hasUpdateB.WaitAsync(w.ShutdownSource.Token); - - // clean up: - Log("Shutting down"); - w.ShutdownSource.Cancel(); - try - { - await w.Task; - } - catch (OperationCanceledException) - { - } } public enum UpdateLocation @@ -407,7 +403,7 @@ public async Task HostRestart(UpdateLocation updateLocation) var libProject = Path.Combine(testAsset.Path, "Lib2", "Lib2.csproj"); var lib = Path.Combine(testAsset.Path, "Lib2", "Lib2.cs"); - var w = StartWatcher(testAsset, args: [], workingDirectory, hostProject); + await using var w = StartWatcher(testAsset, args: [], workingDirectory, hostProject); var waitingForChanges = w.Reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); var changeHandled = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); @@ -482,16 +478,6 @@ public static void Print() Log("Waiting updated output from Host ..."); await hasUpdate.WaitAsync(w.ShutdownSource.Token); - - // clean up: - w.ShutdownSource.Cancel(); - try - { - await w.Task; - } - catch (OperationCanceledException) - { - } } [Fact] @@ -506,7 +492,7 @@ public async Task RudeEditInProjectWithoutRunningProcess() var serviceSourceA2 = Path.Combine(serviceDirA, "A2.cs"); var serviceProjectA = Path.Combine(serviceDirA, "A.csproj"); - var w = StartWatcher(testAsset, ["--non-interactive"], workingDirectory, hostProject); + await using var w = StartWatcher(testAsset, ["--non-interactive"], workingDirectory, hostProject); var waitingForChanges = w.Reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); @@ -537,15 +523,113 @@ public async Task RudeEditInProjectWithoutRunningProcess() w.Reporter.ProcessOutput.Contains("verbose ⌚ Rude edits detected but do not affect any running process"); w.Reporter.ProcessOutput.Contains($"verbose ❌ {serviceSourceA2}(1,12): error ENC0003: Updating 'attribute' requires restarting the application."); + } + + public enum DirectoryKind + { + Ordinary, + Hidden, + Bin, + Obj, + } + + [PlatformSpecificTheory(TestPlatforms.Windows)] + [CombinatorialData] + public Task IgnoredChange_Windows(bool isExisting, bool isIncluded, DirectoryKind directoryKind) + => IgnoredChange(isExisting, isIncluded, directoryKind); - // clean up: - w.ShutdownSource.Cancel(); - try + [PlatformSpecificTheory(TestPlatforms.AnyUnix)] + [CombinatorialData] + public Task IgnoredChange_Unix( + bool isExisting, + bool isIncluded, + [CombinatorialValues(DirectoryKind.Obj, DirectoryKind.Bin, DirectoryKind.Ordinary)] DirectoryKind directoryKind) + => IgnoredChange(isExisting, isIncluded, directoryKind); + + private async Task IgnoredChange(bool isExisting, bool isIncluded, DirectoryKind directoryKind) + { + var testAsset = CopyTestAsset("WatchNoDepsApp", [isExisting, isIncluded, directoryKind]); + + var workingDirectory = testAsset.Path; + + var objDir = Path.Combine(workingDirectory, "obj", "Debug", ToolsetInfo.CurrentTargetFramework); + var binDir = Path.Combine(workingDirectory, "bin", "Debug", ToolsetInfo.CurrentTargetFramework); + + var hiddenDir = Path.Combine(workingDirectory, "hidden"); + Directory.CreateDirectory(hiddenDir); + File.SetAttributes(hiddenDir, FileAttributes.Hidden | FileAttributes.Directory); + + var extension = isIncluded ? ".cs" : ".txt"; + var dir = directoryKind switch + { + DirectoryKind.Bin => binDir, + DirectoryKind.Obj => objDir, + DirectoryKind.Hidden => hiddenDir, + _ => workingDirectory, + }; + + Directory.CreateDirectory(dir); + + var path = Path.Combine(dir, "File" + extension); + + if (isExisting) { - await w.Task; + File.WriteAllText(path, "class C { int F() => 1; }"); + + if (isIncluded && directoryKind is DirectoryKind.Bin or DirectoryKind.Obj) + { + var project = Path.Combine(workingDirectory, "WatchNoDepsApp.csproj"); + File.WriteAllText(project, File.ReadAllText(project).Replace( + "", + $""" + + """)); + } } - catch (OperationCanceledException) + + await using var w = StartWatcher(testAsset, ["--no-exit"], workingDirectory, workingDirectory); + + var waitingForChanges = w.Reporter.RegisterSemaphore(MessageDescriptor.WaitingForChanges); + var changeHandled = w.Reporter.RegisterSemaphore(MessageDescriptor.HotReloadChangeHandled); + var ignoringChangeInHiddenDirectory = w.Reporter.RegisterSemaphore(MessageDescriptor.IgnoringChangeInHiddenDirectory); + var ignoringChangeInOutputDirectory = w.Reporter.RegisterSemaphore(MessageDescriptor.IgnoringChangeInOutputDirectory); + var fileAdditionTriggeredReEvaluation = w.Reporter.RegisterSemaphore(MessageDescriptor.FileAdditionTriggeredReEvaluation); + var noHotReloadChangesToApply = w.Reporter.RegisterSemaphore(MessageDescriptor.NoHotReloadChangesToApply); + + Log("Waiting for changes..."); + await waitingForChanges.WaitAsync(w.ShutdownSource.Token); + + UpdateSourceFile(path, "class C { int F() => 2; }"); + + switch ((isExisting, isIncluded, directoryKind)) { + case (isExisting: true, isIncluded: true, directoryKind: _): + Log("Waiting for changed handled ..."); + await changeHandled.WaitAsync(w.ShutdownSource.Token); + break; + + case (isExisting: true, isIncluded: false, directoryKind: DirectoryKind.Ordinary): + Log("Waiting for no hot reload changes to apply ..."); + await noHotReloadChangesToApply.WaitAsync(w.ShutdownSource.Token); + break; + + case (isExisting: false, isIncluded: _, directoryKind: DirectoryKind.Ordinary): + Log("Waiting for file addition re-evalutation ..."); + await fileAdditionTriggeredReEvaluation.WaitAsync(w.ShutdownSource.Token); + break; + + case (isExisting: _, isIncluded: _, directoryKind: DirectoryKind.Hidden): + Log("Waiting for ignored change in hidden dir ..."); + await ignoringChangeInHiddenDirectory.WaitAsync(w.ShutdownSource.Token); + break; + + case (isExisting: _, isIncluded: _, directoryKind: DirectoryKind.Bin or DirectoryKind.Obj): + Log("Waiting for ignored change in output dir ..."); + await ignoringChangeInOutputDirectory.WaitAsync(w.ShutdownSource.Token); + break; + + default: + throw new InvalidOperationException(); } } } diff --git a/test/dotnet-watch.Tests/Utilities/AssertEx.cs b/test/dotnet-watch.Tests/Utilities/AssertEx.cs index 6ed30d98987e..ca4e251fa288 100644 --- a/test/dotnet-watch.Tests/Utilities/AssertEx.cs +++ b/test/dotnet-watch.Tests/Utilities/AssertEx.cs @@ -157,7 +157,7 @@ public static void SequenceEqual( Assert.NotNull(actual); } - if (!expected.SequenceEqual(actual, comparer)) + if (!expected.SequenceEqual(actual, comparer ?? EqualityComparer.Default)) { Fail(GetAssertMessage(expected, actual, message, itemInspector, itemSeparator)); } diff --git a/test/dotnet-watch.Tests/Watch/Utilities/DotNetWatchTestBase.cs b/test/dotnet-watch.Tests/Watch/Utilities/DotNetWatchTestBase.cs index 4650141560af..3c561b86c0ce 100644 --- a/test/dotnet-watch.Tests/Watch/Utilities/DotNetWatchTestBase.cs +++ b/test/dotnet-watch.Tests/Watch/Utilities/DotNetWatchTestBase.cs @@ -28,16 +28,32 @@ public void Log(string message) public void UpdateSourceFile(string path, string text) { - File.WriteAllText(path, text, Encoding.UTF8); + WriteAllText(path, text); Log($"File '{path}' updated ({HotReloadDotNetWatcher.FormatTimestamp(File.GetLastWriteTimeUtc(path))})."); } public void UpdateSourceFile(string path, Func contentTransform) { - File.WriteAllText(path, contentTransform(File.ReadAllText(path, Encoding.UTF8)), Encoding.UTF8); + WriteAllText(path, contentTransform(File.ReadAllText(path, Encoding.UTF8))); Log($"File '{path}' updated."); } + /// + /// Replacement for , which fails to write to hidden file + /// + public static void WriteAllText(string path, string text) + { + using var stream = File.Open(path, FileMode.OpenOrCreate); + + using (var writer = new StreamWriter(stream, Encoding.UTF8, leaveOpen: true)) + { + writer.Write(text); + } + + // truncate the rest of the file content: + stream.SetLength(stream.Position); + } + public void UpdateSourceFile(string path) => UpdateSourceFile(path, content => content); From 5d67416318f05f510e1ce24c5ebf0b2cec1bcbc4 Mon Sep 17 00:00:00 2001 From: Tomas Matousek Date: Tue, 17 Dec 2024 18:29:20 -0800 Subject: [PATCH 3/5] Add Maui Blazor test --- .../dotnet-watch/Browser/BrowserConnector.cs | 2 +- test/Common/.editorconfig | 1 + .../SetupTestRoot.targets | 3 +- test/Microsoft.NET.TestFramework/TestAsset.cs | 10 +- test/TestAssets/.editorconfig | 1 + .../TestProjects/WatchMauiBlazor/App.xaml | 17 +++ .../TestProjects/WatchMauiBlazor/App.xaml.cs | 14 +++ .../Components/Layout/MainLayout.razor | 17 +++ .../Components/Layout/MainLayout.razor.css | 77 +++++++++++++ .../Components/Layout/NavMenu.razor | 27 +++++ .../Components/Layout/NavMenu.razor.css | 101 ++++++++++++++++++ .../Components/Pages/Counter.razor | 16 +++ .../Components/Pages/Home.razor | 5 + .../Components/Pages/Weather.razor | 61 +++++++++++ .../WatchMauiBlazor/Components/Routes.razor | 6 ++ .../WatchMauiBlazor/Components/_Imports.razor | 9 ++ .../WatchMauiBlazor/MainPage.xaml | 13 +++ .../WatchMauiBlazor/MainPage.xaml.cs | 9 ++ .../WatchMauiBlazor/MauiProgram.cs | 26 +++++ .../Platforms/Android/AndroidManifest.xml | 6 ++ .../Platforms/Android/MainActivity.cs | 10 ++ .../Platforms/Android/MainApplication.cs | 15 +++ .../Android/Resources/values/colors.xml | 6 ++ .../Platforms/MacCatalyst/AppDelegate.cs | 9 ++ .../Platforms/MacCatalyst/Entitlements.plist | 14 +++ .../Platforms/MacCatalyst/Info.plist | 38 +++++++ .../Platforms/MacCatalyst/Program.cs | 15 +++ .../WatchMauiBlazor/Platforms/Tizen/Main.cs | 16 +++ .../Platforms/Tizen/tizen-manifest.xml | 15 +++ .../Platforms/Windows/App.xaml | 8 ++ .../Platforms/Windows/App.xaml.cs | 24 +++++ .../Platforms/Windows/Package.appxmanifest | 46 ++++++++ .../Platforms/Windows/app.manifest | 15 +++ .../Platforms/iOS/AppDelegate.cs | 9 ++ .../WatchMauiBlazor/Platforms/iOS/Info.plist | 32 ++++++ .../WatchMauiBlazor/Platforms/iOS/Program.cs | 15 +++ .../iOS/Resources/PrivacyInfo.xcprivacy | 51 +++++++++ .../Properties/launchSettings.json | 8 ++ .../Resources/AppIcon/appicon.svg | 4 + .../Resources/AppIcon/appiconfg.svg | 8 ++ .../Resources/Fonts/OpenSans-Regular.ttf | Bin 0 -> 107304 bytes .../Resources/Images/dotnet_bot.svg | 93 ++++++++++++++++ .../Resources/Raw/AboutAssets.txt | 15 +++ .../Resources/Splash/splash.svg | 8 ++ .../WatchMauiBlazor/maui-blazor.csproj | 60 +++++++++++ .../WatchMauiBlazor/wwwroot/css/app.css | 88 +++++++++++++++ .../wwwroot/css/bootstrap/bootstrap.min.css | 7 ++ .../css/bootstrap/bootstrap.min.css.map | 1 + .../WatchMauiBlazor/wwwroot/index.html | 30 ++++++ .../HotReload/ApplyDeltaTests.cs | 41 +++++++ 50 files changed, 1117 insertions(+), 5 deletions(-) create mode 100644 test/Common/.editorconfig create mode 100644 test/TestAssets/.editorconfig create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/App.xaml create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/App.xaml.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/MainLayout.razor create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/MainLayout.razor.css create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/NavMenu.razor create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/NavMenu.razor.css create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Counter.razor create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Home.razor create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Weather.razor create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Components/Routes.razor create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Components/_Imports.razor create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/MainPage.xaml create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/MainPage.xaml.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/MauiProgram.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/AndroidManifest.xml create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/MainActivity.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/MainApplication.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/Resources/values/colors.xml create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/AppDelegate.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Entitlements.plist create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Info.plist create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Program.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Tizen/Main.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Tizen/tizen-manifest.xml create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/App.xaml create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/App.xaml.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/Package.appxmanifest create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/app.manifest create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/AppDelegate.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Info.plist create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Program.cs create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Resources/PrivacyInfo.xcprivacy create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Properties/launchSettings.json create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Resources/AppIcon/appicon.svg create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Resources/AppIcon/appiconfg.svg create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Fonts/OpenSans-Regular.ttf create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Images/dotnet_bot.svg create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Raw/AboutAssets.txt create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Splash/splash.svg create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/maui-blazor.csproj create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/css/app.css create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/css/bootstrap/bootstrap.min.css create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/css/bootstrap/bootstrap.min.css.map create mode 100644 test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/index.html diff --git a/src/BuiltInTools/dotnet-watch/Browser/BrowserConnector.cs b/src/BuiltInTools/dotnet-watch/Browser/BrowserConnector.cs index dc120099b3b7..9126b8ec54b6 100644 --- a/src/BuiltInTools/dotnet-watch/Browser/BrowserConnector.cs +++ b/src/BuiltInTools/dotnet-watch/Browser/BrowserConnector.cs @@ -96,7 +96,7 @@ public bool TryGetRefreshServer(ProjectGraphNode projectNode, [NotNullWhen(true) { lock (_serversGuard) { - return _servers.TryGetValue(projectNode, out server); + return _servers.TryGetValue(projectNode, out server) && server != null; } } diff --git a/test/Common/.editorconfig b/test/Common/.editorconfig new file mode 100644 index 000000000000..78b36ca0838f --- /dev/null +++ b/test/Common/.editorconfig @@ -0,0 +1 @@ +root = true diff --git a/test/Microsoft.NET.TestFramework/SetupTestRoot.targets b/test/Microsoft.NET.TestFramework/SetupTestRoot.targets index 19eaf8400883..eca36e2c8138 100644 --- a/test/Microsoft.NET.TestFramework/SetupTestRoot.targets +++ b/test/Microsoft.NET.TestFramework/SetupTestRoot.targets @@ -2,14 +2,15 @@ - <_CopyDirectoryBuildTestDependenciesInput Include="$(MSBuildThisFileDirectory)..\Common\Empty.props" /> <_CopyDirectoryBuildTestDependenciesInput Include="$(MSBuildThisFileDirectory)..\Common\Empty.targets" /> + <_CopyDirectoryBuildTestDependenciesInput Include="$(MSBuildThisFileDirectory)..\Common\.editorconfig" /> <_CopyDirectoryBuildTestDependenciesOutput Include="$(ArtifactsTmpDir)Directory.Build.props" /> <_CopyDirectoryBuildTestDependenciesOutput Include="$(ArtifactsTmpDir)Directory.Build.targets" /> + <_CopyDirectoryBuildTestDependenciesOutput Include="$(ArtifactsTmpDir).editorconfig" /> diff --git a/test/Microsoft.NET.TestFramework/TestAsset.cs b/test/Microsoft.NET.TestFramework/TestAsset.cs index f48a36775831..4ba9c5c055bc 100644 --- a/test/Microsoft.NET.TestFramework/TestAsset.cs +++ b/test/Microsoft.NET.TestFramework/TestAsset.cs @@ -118,9 +118,13 @@ public TestAsset UpdateProjProperty(string propertyName, string variableName, st p => { var ns = p.Root.Name.Namespace; - var getNode = p.Root.Elements(ns + "PropertyGroup").Elements(ns + propertyName).FirstOrDefault(); - getNode ??= p.Root.Elements(ns + "PropertyGroup").Elements(ns + $"{propertyName}s").FirstOrDefault(); - getNode?.SetValue(getNode?.Value.Replace($"$({variableName})", targetValue)); + var nodes = p.Root.Elements(ns + "PropertyGroup").Elements(ns + propertyName).Concat( + p.Root.Elements(ns + "PropertyGroup").Elements(ns + $"{propertyName}s")); + + foreach (var node in nodes) + { + node.SetValue(node.Value.Replace($"$({variableName})", targetValue)); + } }); } diff --git a/test/TestAssets/.editorconfig b/test/TestAssets/.editorconfig new file mode 100644 index 000000000000..6f066619d94f --- /dev/null +++ b/test/TestAssets/.editorconfig @@ -0,0 +1 @@ +root = true \ No newline at end of file diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/App.xaml b/test/TestAssets/TestProjects/WatchMauiBlazor/App.xaml new file mode 100644 index 000000000000..bac1e2d57d0e --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/App.xaml @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/App.xaml.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/App.xaml.cs new file mode 100644 index 000000000000..d84826e754f8 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/App.xaml.cs @@ -0,0 +1,14 @@ +namespace maui_blazor; + +public partial class App : Application +{ + public App() + { + InitializeComponent(); + } + + protected override Window CreateWindow(IActivationState? activationState) + { + return new Window(new MainPage()) { Title = "maui-blazor" }; + } +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/MainLayout.razor b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/MainLayout.razor new file mode 100644 index 000000000000..7cd63fe1c017 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/MainLayout.razor @@ -0,0 +1,17 @@ +@inherits LayoutComponentBase + +
+ + +
+
+ About +
+ +
+ @Body +
+
+
diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/MainLayout.razor.css b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/MainLayout.razor.css new file mode 100644 index 000000000000..8521145896bc --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/MainLayout.razor.css @@ -0,0 +1,77 @@ +.page { + position: relative; + display: flex; + flex-direction: column; +} + +main { + flex: 1; +} + +.sidebar { + background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); +} + +.top-row { + background-color: #f7f7f7; + border-bottom: 1px solid #d6d5d5; + justify-content: flex-end; + height: 3.5rem; + display: flex; + align-items: center; +} + + .top-row ::deep a, .top-row ::deep .btn-link { + white-space: nowrap; + margin-left: 1.5rem; + text-decoration: none; + } + + .top-row ::deep a:hover, .top-row ::deep .btn-link:hover { + text-decoration: underline; + } + + .top-row ::deep a:first-child { + overflow: hidden; + text-overflow: ellipsis; + } + +@media (max-width: 640.98px) { + .top-row { + justify-content: space-between; + } + + .top-row ::deep a, .top-row ::deep .btn-link { + margin-left: 0; + } +} + +@media (min-width: 641px) { + .page { + flex-direction: row; + } + + .sidebar { + width: 250px; + height: 100vh; + position: sticky; + top: 0; + } + + .top-row { + position: sticky; + top: 0; + z-index: 1; + } + + .top-row.auth ::deep a:first-child { + flex: 1; + text-align: right; + width: 0; + } + + .top-row, article { + padding-left: 2rem !important; + padding-right: 1.5rem !important; + } +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/NavMenu.razor b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/NavMenu.razor new file mode 100644 index 000000000000..1bb93a0d522b --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/NavMenu.razor @@ -0,0 +1,27 @@ + + + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/NavMenu.razor.css b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/NavMenu.razor.css new file mode 100644 index 000000000000..06fe5ad4bfa9 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Layout/NavMenu.razor.css @@ -0,0 +1,101 @@ +.navbar-toggler { + appearance: none; + cursor: pointer; + width: 3.5rem; + height: 2.5rem; + color: white; + position: absolute; + top: 0.5rem; + right: 1rem; + border: 1px solid rgba(255, 255, 255, 0.1); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1); +} + + .navbar-toggler:checked { + background-color: rgba(255, 255, 255, 0.5); + } + +.top-row { + height: 3.5rem; + background-color: rgba(0,0,0,0.4); +} + +.navbar-brand { + font-size: 1.1rem; +} + +.bi { + display: inline-block; + position: relative; + width: 1.25rem; + height: 1.25rem; + margin-right: 0.75rem; + top: -1px; + background-size: cover; +} + +.bi-house-door-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); +} + +.bi-plus-square-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); +} + +.bi-list-nested-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); +} + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item ::deep a { + color: #d7d7d7; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + } + + .nav-item ::deep a.active { + background-color: rgba(255,255,255,0.37); + color: white; + } + + .nav-item ::deep a:hover { + background-color: rgba(255,255,255,0.1); + color: white; + } + +.nav-scrollable { + display: none; +} + +.navbar-toggler:checked ~ .nav-scrollable { + display: block; +} + +@media (min-width: 641px) { + .navbar-toggler { + display: none; + } + + .nav-scrollable { + /* Never collapse the sidebar for wide screens */ + display: block; + /* Allow sidebar to scroll for tall menus */ + height: calc(100vh - 3.5rem); + overflow-y: auto; + } +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Counter.razor b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Counter.razor new file mode 100644 index 000000000000..6324ad08efa3 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Counter.razor @@ -0,0 +1,16 @@ +@page "/counter" + +

Counter

+ +

Current count: @currentCount

+ + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Home.razor b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Home.razor new file mode 100644 index 000000000000..16dac3192520 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Home.razor @@ -0,0 +1,5 @@ +@page "/" + +

Hello, world!

+ +Welcome to your new app. diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Weather.razor b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Weather.razor new file mode 100644 index 000000000000..472bb9877ba2 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Pages/Weather.razor @@ -0,0 +1,61 @@ +@page "/weather" + +

Weather

+ +

This component demonstrates showing data.

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

Loading...

+} +else +{ + + + + + + + + + + + @foreach (var forecast in forecasts) + { + + + + + + + } + +
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
+} + +@code { + private WeatherForecast[]? forecasts; + + protected override async Task OnInitializedAsync() + { + // Simulate asynchronous loading to demonstrate a loading indicator + await Task.Delay(500); + + var startDate = DateOnly.FromDateTime(DateTime.Now); + var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; + forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = startDate.AddDays(index), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = summaries[Random.Shared.Next(summaries.Length)] + }).ToArray(); + } + + private class WeatherForecast + { + public DateOnly Date { get; set; } + public int TemperatureC { get; set; } + public string? Summary { get; set; } + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + } +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Routes.razor b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Routes.razor new file mode 100644 index 000000000000..631cf8054724 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/Routes.razor @@ -0,0 +1,6 @@ + + + + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Components/_Imports.razor b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/_Imports.razor new file mode 100644 index 000000000000..bfb7df8a2205 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Components/_Imports.razor @@ -0,0 +1,9 @@ +@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.JSInterop +@using maui_blazor +@using maui_blazor.Components diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/MainPage.xaml b/test/TestAssets/TestProjects/WatchMauiBlazor/MainPage.xaml new file mode 100644 index 000000000000..f3c845da4d14 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/MainPage.xaml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/MainPage.xaml.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/MainPage.xaml.cs new file mode 100644 index 000000000000..c594e2d01f97 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/MainPage.xaml.cs @@ -0,0 +1,9 @@ +namespace maui_blazor; + +public partial class MainPage : ContentPage +{ + public MainPage() + { + InitializeComponent(); + } +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/MauiProgram.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/MauiProgram.cs new file mode 100644 index 000000000000..f6cf66b84693 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/MauiProgram.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Logging; + +namespace maui_blazor; + +public static class MauiProgram +{ + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder(); + builder + .UseMauiApp() + .ConfigureFonts(fonts => + { + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + }); + + builder.Services.AddMauiBlazorWebView(); + +#if DEBUG + builder.Services.AddBlazorWebViewDeveloperTools(); + builder.Logging.AddDebug(); +#endif + + return builder.Build(); + } +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/AndroidManifest.xml b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/AndroidManifest.xml new file mode 100644 index 000000000000..dbf9e7e5312a --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/MainActivity.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/MainActivity.cs new file mode 100644 index 000000000000..a891c9b500c6 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/MainActivity.cs @@ -0,0 +1,10 @@ +using Android.App; +using Android.Content.PM; +using Android.OS; + +namespace maui_blazor; + +[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] +public class MainActivity : MauiAppCompatActivity +{ +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/MainApplication.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/MainApplication.cs new file mode 100644 index 000000000000..46d57a56709c --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/MainApplication.cs @@ -0,0 +1,15 @@ +using Android.App; +using Android.Runtime; + +namespace maui_blazor; + +[Application] +public class MainApplication : MauiApplication +{ + public MainApplication(IntPtr handle, JniHandleOwnership ownership) + : base(handle, ownership) + { + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/Resources/values/colors.xml b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/Resources/values/colors.xml new file mode 100644 index 000000000000..c04d7492abf8 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #512BD4 + #2B0B98 + #2B0B98 + \ No newline at end of file diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/AppDelegate.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/AppDelegate.cs new file mode 100644 index 000000000000..7a72494684ba --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/AppDelegate.cs @@ -0,0 +1,9 @@ +using Foundation; + +namespace maui_blazor; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Entitlements.plist b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Entitlements.plist new file mode 100644 index 000000000000..de4adc94a9c9 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Entitlements.plist @@ -0,0 +1,14 @@ + + + + + + + com.apple.security.app-sandbox + + + com.apple.security.network.client + + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Info.plist b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Info.plist new file mode 100644 index 000000000000..7b1e6e6219c9 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Info.plist @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + UIDeviceFamily + + 2 + + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Program.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Program.cs new file mode 100644 index 000000000000..b3a1a32e120b --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/MacCatalyst/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace maui_blazor; + +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main(args, null, typeof(AppDelegate)); + } +} \ No newline at end of file diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Tizen/Main.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Tizen/Main.cs new file mode 100644 index 000000000000..8982b7283fb9 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Tizen/Main.cs @@ -0,0 +1,16 @@ +using System; +using Microsoft.Maui; +using Microsoft.Maui.Hosting; + +namespace maui_blazor; + +class Program : MauiApplication +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); + + static void Main(string[] args) + { + var app = new Program(); + app.Run(args); + } +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Tizen/tizen-manifest.xml b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Tizen/tizen-manifest.xml new file mode 100644 index 000000000000..28ca66142ba9 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Tizen/tizen-manifest.xml @@ -0,0 +1,15 @@ + + + + + + maui-appicon-placeholder + + + + + http://tizen.org/privilege/internet + + + + \ No newline at end of file diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/App.xaml b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/App.xaml new file mode 100644 index 000000000000..3cd2720447a4 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/App.xaml @@ -0,0 +1,8 @@ + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/App.xaml.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/App.xaml.cs new file mode 100644 index 000000000000..b74ececa2bac --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/App.xaml.cs @@ -0,0 +1,24 @@ +using Microsoft.UI.Xaml; + +// To learn more about WinUI, the WinUI project structure, +// and more about our project templates, see: http://aka.ms/winui-project-info. + +namespace maui_blazor.WinUI; + +/// +/// Provides application-specific behavior to supplement the default Application class. +/// +public partial class App : MauiWinUIApplication +{ + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/Package.appxmanifest b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/Package.appxmanifest new file mode 100644 index 000000000000..a43e83424ac9 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/Package.appxmanifest @@ -0,0 +1,46 @@ + + + + + + + + + $placeholder$ + User Name + $placeholder$.png + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/app.manifest b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/app.manifest new file mode 100644 index 000000000000..e52d63b7973c --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/Windows/app.manifest @@ -0,0 +1,15 @@ + + + + + + + + true/PM + PerMonitorV2, PerMonitor + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/AppDelegate.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/AppDelegate.cs new file mode 100644 index 000000000000..7a72494684ba --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/AppDelegate.cs @@ -0,0 +1,9 @@ +using Foundation; + +namespace maui_blazor; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Info.plist b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Info.plist new file mode 100644 index 000000000000..ecb7f719bd22 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Info.plist @@ -0,0 +1,32 @@ + + + + + LSRequiresIPhoneOS + + UIDeviceFamily + + 1 + 2 + + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Program.cs b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Program.cs new file mode 100644 index 000000000000..7e8cee587005 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace maui_blazor; + +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main(args, null, typeof(AppDelegate)); + } +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 000000000000..24ab3b4334cb --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Platforms/iOS/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,51 @@ + + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + + + + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Properties/launchSettings.json b/test/TestAssets/TestProjects/WatchMauiBlazor/Properties/launchSettings.json new file mode 100644 index 000000000000..4f857936f4f5 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "Windows Machine": { + "commandName": "Project", + "nativeDebugging": false + } + } +} \ No newline at end of file diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/AppIcon/appicon.svg b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/AppIcon/appicon.svg new file mode 100644 index 000000000000..9d63b6513a1c --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/AppIcon/appicon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/AppIcon/appiconfg.svg b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/AppIcon/appiconfg.svg new file mode 100644 index 000000000000..21dfb25f187b --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/AppIcon/appiconfg.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Fonts/OpenSans-Regular.ttf b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Fonts/OpenSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6ada26a74e9bd46dcdc394e641bf9c7802be90bc GIT binary patch literal 107304 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 literal 0 HcmV?d00001 diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Images/dotnet_bot.svg b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Images/dotnet_bot.svg new file mode 100644 index 000000000000..abfaff26a853 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Images/dotnet_bot.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Raw/AboutAssets.txt b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Raw/AboutAssets.txt new file mode 100644 index 000000000000..6de1c1527064 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Raw/AboutAssets.txt @@ -0,0 +1,15 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories). Deployment of the asset to your application +is automatically handled by the following `MauiAsset` Build Action within your `.csproj`. + + + +These files will be deployed with your package and will be accessible using Essentials: + + async Task LoadMauiAsset() + { + using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); + using var reader = new StreamReader(stream); + + var contents = reader.ReadToEnd(); + } diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Splash/splash.svg b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Splash/splash.svg new file mode 100644 index 000000000000..21dfb25f187b --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/Resources/Splash/splash.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/maui-blazor.csproj b/test/TestAssets/TestProjects/WatchMauiBlazor/maui-blazor.csproj new file mode 100644 index 000000000000..aba2ee492e51 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/maui-blazor.csproj @@ -0,0 +1,60 @@ + + + + $(CurrentTargetFramework)-maccatalyst + $(TargetFrameworks);$(CurrentTargetFramework)-windows10.0.19041.0 + + Exe + maui_blazor + true + true + enable + false + enable + + + maui-blazor + + + com.companyname.mauiblazor + + + 1.0 + 1 + + + None + + 15.0 + 15.0 + 24.0 + 10.0.17763.0 + 10.0.17763.0 + 6.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/css/app.css b/test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/css/app.css new file mode 100644 index 000000000000..66293b570df7 --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/css/app.css @@ -0,0 +1,88 @@ +/*#if (SampleContent)*/ +html, body { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +a, .btn-link { + color: #006bb7; +} + +.btn-primary { + color: #fff; + background-color: white; + border-color: #ac187b; +} + +.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { + box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; +} + +.content { + padding-top: 1.1rem; +} + +/*#endif*/ +h1:focus { + outline: none; +} + +.valid.modified:not([type=checkbox]) { + outline: 1px solid #26b050; +} + +.invalid { + outline: 1px solid #e50000; +} + +.validation-message { + color: #e50000; +} + +#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." + } + +.status-bar-safe-area { + display: none; +} + +@supports (-webkit-touch-callout: none) { + .status-bar-safe-area { + display: flex; + position: sticky; + top: 0; + height: env(safe-area-inset-top); + background-color: #f7f7f7; + width: 100%; + z-index: 1; + } + + .flex-column, .navbar-brand { + padding-left: env(safe-area-inset-left); + } +} diff --git a/test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/css/bootstrap/bootstrap.min.css b/test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/css/bootstrap/bootstrap.min.css new file mode 100644 index 000000000000..02ae65b5fe5d --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/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/test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/css/bootstrap/bootstrap.min.css.map b/test/TestAssets/TestProjects/WatchMauiBlazor/wwwroot/css/bootstrap/bootstrap.min.css.map new file mode 100644 index 000000000000..afcd9e33e9ea --- /dev/null +++ b/test/TestAssets/TestProjects/WatchMauiBlazor/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-`