From 5f0bc5553a4c0a0f85cd2ed03b3faef461314a60 Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:04:14 +0100 Subject: [PATCH 01/28] feat(welcome): solution + Core/Test project skeleton --- windows/welcome/SilverOS.Welcome.sln | 54 +++++++++++++++++++ .../src/SilverOS.Welcome.Core/Class1.cs | 6 +++ .../SilverOS.Welcome.Core.csproj | 9 ++++ .../SilverOS.Welcome.Tests.csproj | 26 +++++++++ .../tests/SilverOS.Welcome.Tests/UnitTest1.cs | 10 ++++ 5 files changed, 105 insertions(+) create mode 100644 windows/welcome/SilverOS.Welcome.sln create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Class1.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/SilverOS.Welcome.Core.csproj create mode 100644 windows/welcome/tests/SilverOS.Welcome.Tests/SilverOS.Welcome.Tests.csproj create mode 100644 windows/welcome/tests/SilverOS.Welcome.Tests/UnitTest1.cs diff --git a/windows/welcome/SilverOS.Welcome.sln b/windows/welcome/SilverOS.Welcome.sln new file mode 100644 index 0000000..7fb7fd8 --- /dev/null +++ b/windows/welcome/SilverOS.Welcome.sln @@ -0,0 +1,54 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverOS.Welcome.Core", "src\SilverOS.Welcome.Core\SilverOS.Welcome.Core.csproj", "{939DF856-EB90-473B-9C46-D8504B94A81B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverOS.Welcome.Tests", "tests\SilverOS.Welcome.Tests\SilverOS.Welcome.Tests.csproj", "{73B13415-D01D-4409-B85F-62C8A4A8C95D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {939DF856-EB90-473B-9C46-D8504B94A81B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Debug|x64.ActiveCfg = Debug|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Debug|x64.Build.0 = Debug|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Debug|x86.ActiveCfg = Debug|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Debug|x86.Build.0 = Debug|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Release|Any CPU.Build.0 = Release|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Release|x64.ActiveCfg = Release|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Release|x64.Build.0 = Release|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Release|x86.ActiveCfg = Release|Any CPU + {939DF856-EB90-473B-9C46-D8504B94A81B}.Release|x86.Build.0 = Release|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Debug|x64.ActiveCfg = Debug|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Debug|x64.Build.0 = Debug|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Debug|x86.ActiveCfg = Debug|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Debug|x86.Build.0 = Debug|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Release|Any CPU.Build.0 = Release|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Release|x64.ActiveCfg = Release|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Release|x64.Build.0 = Release|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Release|x86.ActiveCfg = Release|Any CPU + {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {939DF856-EB90-473B-9C46-D8504B94A81B} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} + {73B13415-D01D-4409-B85F-62C8A4A8C95D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} + EndGlobalSection +EndGlobal diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Class1.cs b/windows/welcome/src/SilverOS.Welcome.Core/Class1.cs new file mode 100644 index 0000000..fa8f040 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Class1.cs @@ -0,0 +1,6 @@ +namespace SilverOS.Welcome.Core; + +public class Class1 +{ + +} diff --git a/windows/welcome/src/SilverOS.Welcome.Core/SilverOS.Welcome.Core.csproj b/windows/welcome/src/SilverOS.Welcome.Core/SilverOS.Welcome.Core.csproj new file mode 100644 index 0000000..976d4e0 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/SilverOS.Welcome.Core.csproj @@ -0,0 +1,9 @@ + + + + net9.0-windows + enable + enable + + + diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/SilverOS.Welcome.Tests.csproj b/windows/welcome/tests/SilverOS.Welcome.Tests/SilverOS.Welcome.Tests.csproj new file mode 100644 index 0000000..7447e76 --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/SilverOS.Welcome.Tests.csproj @@ -0,0 +1,26 @@ + + + + net9.0-windows + enable + enable + false + + + + + + + + + + + + + + + + + + + diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/UnitTest1.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/UnitTest1.cs new file mode 100644 index 0000000..910865e --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/UnitTest1.cs @@ -0,0 +1,10 @@ +namespace SilverOS.Welcome.Tests; + +public class UnitTest1 +{ + [Fact] + public void Test1() + { + + } +} From c49e1802a1047b813aa3753026a70a3434538ef0 Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:07:58 +0100 Subject: [PATCH 02/28] feat(welcome): flavour manifest model --- .../src/SilverOS.Welcome.Core/Class1.cs | 6 ---- .../Flavours/FlavourManifest.cs | 30 +++++++++++++++++++ .../FlavourManifestTests.cs | 25 ++++++++++++++++ 3 files changed, 55 insertions(+), 6 deletions(-) delete mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Class1.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourManifest.cs create mode 100644 windows/welcome/tests/SilverOS.Welcome.Tests/FlavourManifestTests.cs diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Class1.cs b/windows/welcome/src/SilverOS.Welcome.Core/Class1.cs deleted file mode 100644 index fa8f040..0000000 --- a/windows/welcome/src/SilverOS.Welcome.Core/Class1.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace SilverOS.Welcome.Core; - -public class Class1 -{ - -} diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourManifest.cs b/windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourManifest.cs new file mode 100644 index 0000000..38b62f8 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourManifest.cs @@ -0,0 +1,30 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace SilverOS.Welcome.Core.Flavours; + +public sealed record FlavourManifest +{ + public string Id { get; init; } = ""; + public string Label { get; init; } = ""; + public string Description { get; init; } = ""; + public bool IsDefault { get; init; } + public HardeningSpec Hardening { get; init; } = new(); + public IReadOnlyList AppSet { get; init; } = Array.Empty(); + public IReadOnlyDictionary Settings { get; init; } + = new Dictionary(); + + public static readonly JsonSerializerOptions JsonOptions = new() + { + PropertyNameCaseInsensitive = true, + ReadCommentHandling = JsonCommentHandling.Skip, + AllowTrailingCommas = true + }; +} + +public sealed record HardeningSpec +{ + public IReadOnlyList Modules { get; init; } = Array.Empty(); + public IReadOnlyDictionary Params { get; init; } + = new Dictionary(); +} diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourManifestTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourManifestTests.cs new file mode 100644 index 0000000..c2b66f5 --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourManifestTests.cs @@ -0,0 +1,25 @@ +using System.Text.Json; +using SilverOS.Welcome.Core.Flavours; +using Xunit; + +public class FlavourManifestTests +{ + [Fact] + public void Deserializes_a_full_manifest() + { + var json = """ + { + "id": "daily-driver", "label": "Daily-Driver", + "description": "Balanced.", "isDefault": true, + "hardening": { "modules": ["00","03","05"], "params": { "wdac": "audit" } }, + "appSet": ["SilverBrowser"], "settings": { "autoLock": 120 } + } + """; + var m = JsonSerializer.Deserialize(json, FlavourManifest.JsonOptions)!; + Assert.Equal("daily-driver", m.Id); + Assert.True(m.IsDefault); + Assert.Equal(new[] { "00", "03", "05" }, m.Hardening.Modules); + Assert.Equal("audit", m.Hardening.Params["wdac"]); + Assert.Contains("SilverBrowser", m.AppSet); + } +} From dd1e5faf9cc085613055d08e5f6c46a2d0929b07 Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:11:58 +0100 Subject: [PATCH 03/28] feat(welcome): flavour loader + validation --- .../Flavours/FlavourLoader.cs | 25 ++++++++++++ .../Flavours/IFlavourLoader.cs | 2 + .../FlavourLoaderTests.cs | 38 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourLoader.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Flavours/IFlavourLoader.cs create mode 100644 windows/welcome/tests/SilverOS.Welcome.Tests/FlavourLoaderTests.cs diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourLoader.cs b/windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourLoader.cs new file mode 100644 index 0000000..ca023c1 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Flavours/FlavourLoader.cs @@ -0,0 +1,25 @@ +using System.Text.Json; +namespace SilverOS.Welcome.Core.Flavours; + +public sealed class FlavourValidationException(string message) : Exception(message); + +public sealed class FlavourLoader : IFlavourLoader +{ + public IReadOnlyList Load(string directory) + { + var list = new List(); + foreach (var file in Directory.EnumerateFiles(directory, "*.json").OrderBy(f => f)) + { + FlavourManifest m; + try { m = JsonSerializer.Deserialize(File.ReadAllText(file), FlavourManifest.JsonOptions) + ?? throw new FlavourValidationException($"{Path.GetFileName(file)}: empty"); } + catch (JsonException ex) { throw new FlavourValidationException($"{Path.GetFileName(file)}: {ex.Message}"); } + if (string.IsNullOrWhiteSpace(m.Id)) throw new FlavourValidationException($"{Path.GetFileName(file)}: missing id"); + if (m.Hardening.Modules.Count == 0) throw new FlavourValidationException($"{Path.GetFileName(file)}: no hardening modules"); + list.Add(m); + } + if (list.Count == 0) throw new FlavourValidationException("no flavour manifests found"); + if (list.Count(m => m.IsDefault) != 1) throw new FlavourValidationException("exactly one flavour must be isDefault"); + return list.OrderByDescending(m => m.IsDefault).ThenBy(m => m.Label).ToList(); + } +} diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Flavours/IFlavourLoader.cs b/windows/welcome/src/SilverOS.Welcome.Core/Flavours/IFlavourLoader.cs new file mode 100644 index 0000000..69f9e60 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Flavours/IFlavourLoader.cs @@ -0,0 +1,2 @@ +namespace SilverOS.Welcome.Core.Flavours; +public interface IFlavourLoader { IReadOnlyList Load(string directory); } diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourLoaderTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourLoaderTests.cs new file mode 100644 index 0000000..a4f6871 --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourLoaderTests.cs @@ -0,0 +1,38 @@ +using SilverOS.Welcome.Core.Flavours; +using Xunit; + +public class FlavourLoaderTests +{ + private static string WriteTemp(params (string name, string json)[] files) + { + var dir = Directory.CreateTempSubdirectory("flav").FullName; + foreach (var (name, json) in files) File.WriteAllText(Path.Combine(dir, name), json); + return dir; + } + + [Fact] + public void Loads_all_manifests_sorted_with_default_first() + { + var dir = WriteTemp( + ("privacy-max.json", """{ "id":"privacy-max","label":"Privacy-Max","hardening":{"modules":["00"]} }"""), + ("daily-driver.json", """{ "id":"daily-driver","label":"Daily-Driver","isDefault":true,"hardening":{"modules":["00"]} }""")); + var loaded = new FlavourLoader().Load(dir); + Assert.Equal(2, loaded.Count); + Assert.Equal("daily-driver", loaded[0].Id); // default first + } + + [Fact] + public void Throws_when_a_manifest_has_no_id() + { + var dir = WriteTemp(("bad.json", """{ "label":"No Id","hardening":{"modules":["00"]} }""")); + var ex = Assert.Throws(() => new FlavourLoader().Load(dir)); + Assert.Contains("bad.json", ex.Message); + } + + [Fact] + public void Throws_when_no_default_flavour_present() + { + var dir = WriteTemp(("a.json", """{ "id":"a","label":"A","hardening":{"modules":["00"]} }""")); + Assert.Throws(() => new FlavourLoader().Load(dir)); + } +} From 6f454fe9573e0fc2e8b0ec643780e7021e780b8d Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:15:46 +0100 Subject: [PATCH 04/28] feat(welcome): author Daily-Driver/Privacy-Max/Journalist/Developer flavours --- windows/flavours/daily-driver.json | 9 ++++++++ windows/flavours/developer.json | 9 ++++++++ windows/flavours/journalist.json | 9 ++++++++ windows/flavours/privacy-max.json | 9 ++++++++ .../ShippedFlavoursTests.cs | 21 +++++++++++++++++++ 5 files changed, 57 insertions(+) create mode 100644 windows/flavours/daily-driver.json create mode 100644 windows/flavours/developer.json create mode 100644 windows/flavours/journalist.json create mode 100644 windows/flavours/privacy-max.json create mode 100644 windows/welcome/tests/SilverOS.Welcome.Tests/ShippedFlavoursTests.cs diff --git a/windows/flavours/daily-driver.json b/windows/flavours/daily-driver.json new file mode 100644 index 0000000..976ab5f --- /dev/null +++ b/windows/flavours/daily-driver.json @@ -0,0 +1,9 @@ +{ + "id": "daily-driver", + "label": "Daily-Driver", + "description": "Balanced privacy and usability. Full hardened baseline; app control in audit.", + "isDefault": true, + "hardening": { "modules": ["00","01","02","03","04","05","06","07"], "params": { "wdac": "audit" } }, + "appSet": ["SilverBrowser","SilverVPN","SilverKeys"], + "settings": { "autoLock": 120 } +} diff --git a/windows/flavours/developer.json b/windows/flavours/developer.json new file mode 100644 index 0000000..75e5f1b --- /dev/null +++ b/windows/flavours/developer.json @@ -0,0 +1,9 @@ +{ + "id": "developer", + "label": "Developer", + "description": "Hardened baseline with developer tooling allowances.", + "isDefault": false, + "hardening": { "modules": ["00","01","02","03","04","05","06","07"], "params": { "wdac": "audit" } }, + "appSet": ["SilverBrowser","SilverVPN","SilverKeys"], + "settings": { "autoLock": 300 } +} diff --git a/windows/flavours/journalist.json b/windows/flavours/journalist.json new file mode 100644 index 0000000..8cf0141 --- /dev/null +++ b/windows/flavours/journalist.json @@ -0,0 +1,9 @@ +{ + "id": "journalist", + "label": "Journalist", + "description": "Privacy-first with duress + secure comms emphasis.", + "isDefault": false, + "hardening": { "modules": ["00","01","02","03","04","05","06","07"], "params": { "wdac": "enforce" } }, + "appSet": ["SilverBrowser","SilverVPN","SilverChat","SilverDuress","SilverKeys","SilverSync"], + "settings": { "autoLock": 60 } +} diff --git a/windows/flavours/privacy-max.json b/windows/flavours/privacy-max.json new file mode 100644 index 0000000..8995e19 --- /dev/null +++ b/windows/flavours/privacy-max.json @@ -0,0 +1,9 @@ +{ + "id": "privacy-max", + "label": "Privacy-Max", + "description": "Maximum lockdown. App control enforced, tightest toggles.", + "isDefault": false, + "hardening": { "modules": ["00","01","02","03","04","05","06","07"], "params": { "wdac": "enforce" } }, + "appSet": ["SilverBrowser","SilverVPN","SilverKeys","SilverDuress","SilverChat"], + "settings": { "autoLock": 60 } +} diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/ShippedFlavoursTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/ShippedFlavoursTests.cs new file mode 100644 index 0000000..c67d196 --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/ShippedFlavoursTests.cs @@ -0,0 +1,21 @@ +using SilverOS.Welcome.Core.Flavours; +using Xunit; + +public class ShippedFlavoursTests +{ + private static string FlavoursDir() + { + var d = AppContext.BaseDirectory; + while (d is not null && !Directory.Exists(Path.Combine(d, "windows", "flavours"))) + d = Directory.GetParent(d)?.FullName; + return Path.Combine(d!, "windows", "flavours"); + } + + [Fact] + public void All_shipped_flavours_are_valid_and_one_is_default() + { + var loaded = new FlavourLoader().Load(FlavoursDir()); + Assert.Equal(4, loaded.Count); + Assert.Equal("daily-driver", loaded[0].Id); + } +} From 017eaf4d960f6802cfc2b4d26b30d74d4d974f5f Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:18:52 +0100 Subject: [PATCH 05/28] feat(welcome): process runner abstraction --- .../Apply/IProcessRunner.cs | 6 ++++++ .../Apply/ProcessRunner.cs | 19 +++++++++++++++++++ .../ProcessRunnerTests.cs | 14 ++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/IProcessRunner.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/ProcessRunner.cs create mode 100644 windows/welcome/tests/SilverOS.Welcome.Tests/ProcessRunnerTests.cs diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/IProcessRunner.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/IProcessRunner.cs new file mode 100644 index 0000000..c065de9 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/IProcessRunner.cs @@ -0,0 +1,6 @@ +namespace SilverOS.Welcome.Core.Apply; +public readonly record struct ProcessResult(int ExitCode, string StdOut, string StdErr); +public interface IProcessRunner +{ + Task RunAsync(string file, string args, CancellationToken ct = default); +} diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/ProcessRunner.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/ProcessRunner.cs new file mode 100644 index 0000000..4ec52d7 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/ProcessRunner.cs @@ -0,0 +1,19 @@ +using System.Diagnostics; +namespace SilverOS.Welcome.Core.Apply; + +public sealed class ProcessRunner : IProcessRunner +{ + public async Task RunAsync(string file, string args, CancellationToken ct = default) + { + using var p = new Process { StartInfo = new ProcessStartInfo(file, args) + { + RedirectStandardOutput = true, RedirectStandardError = true, + UseShellExecute = false, CreateNoWindow = true + }}; + p.Start(); + var outT = p.StandardOutput.ReadToEndAsync(ct); + var errT = p.StandardError.ReadToEndAsync(ct); + await p.WaitForExitAsync(ct); + return new ProcessResult(p.ExitCode, await outT, await errT); + } +} diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/ProcessRunnerTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/ProcessRunnerTests.cs new file mode 100644 index 0000000..febb0e5 --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/ProcessRunnerTests.cs @@ -0,0 +1,14 @@ +using SilverOS.Welcome.Core.Apply; +using Xunit; + +public class ProcessRunnerTests +{ + [Fact] + public async Task Runs_powershell_and_captures_output_and_exit() + { + var r = await new ProcessRunner().RunAsync( + "powershell.exe", "-NoProfile -Command \"Write-Output hello; exit 3\""); + Assert.Equal(3, r.ExitCode); + Assert.Contains("hello", r.StdOut); + } +} From 64b9e3c5f43350e70fc0c287f026a508ddb70df9 Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:22:04 +0100 Subject: [PATCH 06/28] feat(welcome): Invoke-Hardening accepts -Modules subset + -ParamsJson --- windows/hardening/Invoke-Hardening.ps1 | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/windows/hardening/Invoke-Hardening.ps1 b/windows/hardening/Invoke-Hardening.ps1 index 2359e27..81d2b25 100644 --- a/windows/hardening/Invoke-Hardening.ps1 +++ b/windows/hardening/Invoke-Hardening.ps1 @@ -1,17 +1,18 @@ #Requires -Version 5.1 -<# SilverMetal Enhanced - Windows | First-boot hardening runner. - Runs the §A-H modules (00*.ps1 .. 08*.ps1) in order, then the Verify gate. - Called by SetupComplete.cmd via -File (no cmd-quoting fragility). Logs to the - pipeline that SetupComplete redirects. -#> -[CmdletBinding()] param() +<# Runs the §A-H modules (optionally a subset) then Verify. + -Modules "00","03","05" -> run only those numeric-prefixed modules (default: all 0*). + -ParamsJson '{"wdac":"audit"}' -> exported as $env:SM_PARAMS for modules to read. #> +[CmdletBinding()] param([string[]]$Modules, [string]$ParamsJson) $ErrorActionPreference = 'Continue' $here = Split-Path -Parent $MyInvocation.MyCommand.Path +if ($ParamsJson) { $env:SM_PARAMS = $ParamsJson } Write-Host "=== SilverMetal hardening modules ===" -Get-ChildItem (Join-Path $here '0*.ps1') | Sort-Object Name | ForEach-Object { - Write-Host "--> $($_.Name)" - try { & $_.FullName } catch { Write-Warning "$($_.Name) FAILED: $_" } +$all = Get-ChildItem (Join-Path $here '0*.ps1') | Sort-Object Name +if ($Modules) { $all = $all | Where-Object { $Modules -contains $_.Name.Substring(0,2) } } +foreach ($f in $all) { + Write-Host "--> $($f.Name)" + try { & $f.FullName } catch { Write-Warning "$($f.Name) FAILED: $_" } } -Write-Host "=== Verify (effects needing reboot/PIN will show pending) ===" +Write-Host "=== Verify ===" try { & (Join-Path $here 'Verify-SilverMetalWindows.ps1') } catch { Write-Warning "Verify error: $_" } -Write-Host "=== SilverMetal hardening runner done ===" +Write-Host "=== runner done ===" From 62f66490d161e1d19e5c3f1a5e9d7c3e4cf7620d Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:26:35 +0100 Subject: [PATCH 07/28] feat(welcome): account + BitLocker + bootstrap services --- .../Apply/AccountService.cs | 18 ++++++++ .../Apply/BitLockerService.cs | 8 ++++ .../Apply/BootstrapService.cs | 13 ++++++ .../Apply/IAccountService.cs | 2 + .../Apply/IBitLockerService.cs | 2 + .../Apply/IBootstrapService.cs | 2 + .../ApplyServicesTests.cs | 45 +++++++++++++++++++ 7 files changed, 90 insertions(+) create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/AccountService.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/BitLockerService.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/BootstrapService.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/IAccountService.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/IBitLockerService.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/IBootstrapService.cs create mode 100644 windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServicesTests.cs diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/AccountService.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/AccountService.cs new file mode 100644 index 0000000..622e30d --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/AccountService.cs @@ -0,0 +1,18 @@ +namespace SilverOS.Welcome.Core.Apply; +public sealed class AccountService(IProcessRunner runner) : IAccountService +{ + public async Task CreateAccountsAsync(string user, string password, string adminPassword, CancellationToken ct = default) + { + // Daily account = Standard User (Users group only — NOT Administrators). + await Ps($"$p=ConvertTo-SecureString '{Esc(password)}' -AsPlainText -Force; " + + $"New-LocalUser -Name '{Esc(user)}' -Password $p -FullName '{Esc(user)}' -AccountNeverExpires; " + + $"Add-LocalGroupMember -Group 'Users' -Member '{Esc(user)}'", ct); + // Separate elevation account. + await Ps($"$a=ConvertTo-SecureString '{Esc(adminPassword)}' -AsPlainText -Force; " + + $"New-LocalUser -Name 'SilverOS Admin' -Password $a -AccountNeverExpires; " + + $"Add-LocalGroupMember -Group 'Administrators' -Member 'SilverOS Admin'", ct); + } + private Task Ps(string script, CancellationToken ct) => + runner.RunAsync("powershell.exe", $"-NoProfile -ExecutionPolicy Bypass -Command \"{script}\"", ct); + private static string Esc(string s) => s.Replace("'", "''"); +} diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/BitLockerService.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/BitLockerService.cs new file mode 100644 index 0000000..37edef2 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/BitLockerService.cs @@ -0,0 +1,8 @@ +namespace SilverOS.Welcome.Core.Apply; +public sealed class BitLockerService(IProcessRunner runner) : IBitLockerService +{ + public Task EnableAsync(string pin, CancellationToken ct = default) => + runner.RunAsync("powershell.exe", + $"-NoProfile -ExecutionPolicy Bypass -Command \"$p=ConvertTo-SecureString '{pin.Replace("'", "''")}' -AsPlainText -Force; " + + "Enable-BitLocker -MountPoint $env:SystemDrive -EncryptionMethod XtsAes256 -TpmAndPinProtector -Pin $p -SkipHardwareTest\"", ct); +} diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/BootstrapService.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/BootstrapService.cs new file mode 100644 index 0000000..9f059a1 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/BootstrapService.cs @@ -0,0 +1,13 @@ +namespace SilverOS.Welcome.Core.Apply; +public sealed class BootstrapService(IProcessRunner runner) : IBootstrapService +{ + public async Task TearDownAsync(string bootstrapUser, CancellationToken ct = default) + { + const string key = "'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon'"; + await Ps($"Set-ItemProperty {key} -Name AutoAdminLogon -Value 0; " + + $"Remove-ItemProperty {key} -Name DefaultPassword -EA SilentlyContinue", ct); + await Ps($"Remove-LocalUser -Name '{bootstrapUser}' -EA SilentlyContinue", ct); + } + private Task Ps(string s, CancellationToken ct) => + runner.RunAsync("powershell.exe", $"-NoProfile -ExecutionPolicy Bypass -Command \"{s}\"", ct); +} diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/IAccountService.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/IAccountService.cs new file mode 100644 index 0000000..43715f9 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/IAccountService.cs @@ -0,0 +1,2 @@ +namespace SilverOS.Welcome.Core.Apply; +public interface IAccountService { Task CreateAccountsAsync(string user, string password, string adminPassword, CancellationToken ct = default); } diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/IBitLockerService.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/IBitLockerService.cs new file mode 100644 index 0000000..4a1918f --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/IBitLockerService.cs @@ -0,0 +1,2 @@ +namespace SilverOS.Welcome.Core.Apply; +public interface IBitLockerService { Task EnableAsync(string pin, CancellationToken ct = default); } diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/IBootstrapService.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/IBootstrapService.cs new file mode 100644 index 0000000..7fef74f --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/IBootstrapService.cs @@ -0,0 +1,2 @@ +namespace SilverOS.Welcome.Core.Apply; +public interface IBootstrapService { Task TearDownAsync(string bootstrapUser, CancellationToken ct = default); } diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServicesTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServicesTests.cs new file mode 100644 index 0000000..5113487 --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServicesTests.cs @@ -0,0 +1,45 @@ +using Moq; +using SilverOS.Welcome.Core.Apply; + +public class ApplyServicesTests +{ + private static Mock Ok() + { + var m = new Mock(); + m.Setup(r => r.RunAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(new ProcessResult(0, "", "")); + return m; + } + + [Fact] + public async Task AccountService_creates_standard_daily_and_admin() + { + var run = Ok(); + await new AccountService(run.Object).CreateAccountsAsync("alice", "pw1", "adminpw"); + // daily user is a Standard user (added to Users, NOT Administrators) + run.Verify(r => r.RunAsync("powershell.exe", It.Is(s => + s.Contains("New-LocalUser") && s.Contains("alice")), It.IsAny())); + run.Verify(r => r.RunAsync("powershell.exe", It.Is(s => + s.Contains("'SilverOS Admin'") && s.Contains("Administrators")), It.IsAny())); + } + + [Fact] + public async Task BitLockerService_enables_tpm_and_pin() + { + var run = Ok(); + await new BitLockerService(run.Object).EnableAsync("123456"); + run.Verify(r => r.RunAsync("powershell.exe", It.Is(s => + s.Contains("Enable-BitLocker") && s.Contains("TpmAndPinProtector")), It.IsAny())); + } + + [Fact] + public async Task BootstrapService_removes_autologon_and_account() + { + var run = Ok(); + await new BootstrapService(run.Object).TearDownAsync("sm-bootstrap"); + run.Verify(r => r.RunAsync("powershell.exe", It.Is(s => + s.Contains("AutoAdminLogon") && s.Contains("0")), It.IsAny())); + run.Verify(r => r.RunAsync("powershell.exe", It.Is(s => + s.Contains("Remove-LocalUser") && s.Contains("sm-bootstrap")), It.IsAny())); + } +} From 3be703d5c94047cfd9e858eb3c3d09f1aa2f2b20 Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:30:35 +0100 Subject: [PATCH 08/28] fix(welcome): escape bootstrapUser + assert daily user is not admin --- .../src/SilverOS.Welcome.Core/Apply/BootstrapService.cs | 4 +++- .../tests/SilverOS.Welcome.Tests/ApplyServicesTests.cs | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/BootstrapService.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/BootstrapService.cs index 9f059a1..4cbcd19 100644 --- a/windows/welcome/src/SilverOS.Welcome.Core/Apply/BootstrapService.cs +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/BootstrapService.cs @@ -6,8 +6,10 @@ public sealed class BootstrapService(IProcessRunner runner) : IBootstrapService const string key = "'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon'"; await Ps($"Set-ItemProperty {key} -Name AutoAdminLogon -Value 0; " + $"Remove-ItemProperty {key} -Name DefaultPassword -EA SilentlyContinue", ct); - await Ps($"Remove-LocalUser -Name '{bootstrapUser}' -EA SilentlyContinue", ct); + var u = Esc(bootstrapUser); + await Ps($"Remove-LocalUser -Name '{u}' -EA SilentlyContinue", ct); } + private static string Esc(string s) => s.Replace("'", "''"); private Task Ps(string s, CancellationToken ct) => runner.RunAsync("powershell.exe", $"-NoProfile -ExecutionPolicy Bypass -Command \"{s}\"", ct); } diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServicesTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServicesTests.cs index 5113487..6ee446a 100644 --- a/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServicesTests.cs +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServicesTests.cs @@ -19,6 +19,10 @@ public class ApplyServicesTests // daily user is a Standard user (added to Users, NOT Administrators) run.Verify(r => r.RunAsync("powershell.exe", It.Is(s => s.Contains("New-LocalUser") && s.Contains("alice")), It.IsAny())); + // negative: the daily-user New-LocalUser call must never mention Administrators + run.Verify(r => r.RunAsync("powershell.exe", It.Is(s => + s.Contains("New-LocalUser") && s.Contains("alice") && !s.Contains("Administrators")), + It.IsAny()), Times.Once); run.Verify(r => r.RunAsync("powershell.exe", It.Is(s => s.Contains("'SilverOS Admin'") && s.Contains("Administrators")), It.IsAny())); } From 8fe577e0bf1dbd007fd22d97a9299f12d484a66f Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:33:39 +0100 Subject: [PATCH 09/28] feat(welcome): ApplyService orchestrator (modules->accounts->bitlocker->teardown) --- .../Apply/ApplyProgress.cs | 2 + .../Apply/ApplyRequest.cs | 4 ++ .../Apply/ApplyService.cs | 28 +++++++++++++ .../Apply/IApplyService.cs | 2 + .../ApplyServiceTests.cs | 42 +++++++++++++++++++ 5 files changed, 78 insertions(+) create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyProgress.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyRequest.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyService.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.Core/Apply/IApplyService.cs create mode 100644 windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServiceTests.cs diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyProgress.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyProgress.cs new file mode 100644 index 0000000..afdd0c1 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyProgress.cs @@ -0,0 +1,2 @@ +namespace SilverOS.Welcome.Core.Apply; +public sealed record ApplyProgress(string Stage, int Percent); diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyRequest.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyRequest.cs new file mode 100644 index 0000000..a6b0cd9 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyRequest.cs @@ -0,0 +1,4 @@ +using SilverOS.Welcome.Core.Flavours; +namespace SilverOS.Welcome.Core.Apply; +public sealed record ApplyRequest(FlavourManifest Flavour, string Username, string Password, + string AdminPassword, string BitLockerPin, string BootstrapUser); diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyService.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyService.cs new file mode 100644 index 0000000..866381e --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyService.cs @@ -0,0 +1,28 @@ +using System.Text.Json; +using SilverOS.Welcome.Core.Flavours; +namespace SilverOS.Welcome.Core.Apply; + +public sealed class ApplyService(IProcessRunner runner, IAccountService accounts, + IBitLockerService bitlocker, IBootstrapService bootstrap, string hardeningDir) : IApplyService +{ + public async Task RunAsync(ApplyRequest req, IProgress progress, CancellationToken ct = default) + { + progress.Report(new("Applying hardening", 10)); + var mods = string.Join(",", req.Flavour.Hardening.Modules.Select(m => $"'{m}'")); + var pjson = JsonSerializer.Serialize(req.Flavour.Hardening.Params).Replace("\"", "\\\""); + var script = Path.Combine(hardeningDir, "Invoke-Hardening.ps1"); + var res = await runner.RunAsync("powershell.exe", + $"-NoProfile -ExecutionPolicy Bypass -File \"{script}\" -Modules {mods} -ParamsJson \"{pjson}\"", ct); + if (res.ExitCode != 0) throw new InvalidOperationException($"hardening failed: {res.StdErr}"); + + progress.Report(new("Creating your account", 55)); + await accounts.CreateAccountsAsync(req.Username, req.Password, req.AdminPassword, ct); + + progress.Report(new("Encrypting the disk", 75)); + await bitlocker.EnableAsync(req.BitLockerPin, ct); + + progress.Report(new("Finishing up", 95)); + await bootstrap.TearDownAsync(req.BootstrapUser, ct); // last — only after success + progress.Report(new("Done", 100)); + } +} diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/IApplyService.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/IApplyService.cs new file mode 100644 index 0000000..2ac0078 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/IApplyService.cs @@ -0,0 +1,2 @@ +namespace SilverOS.Welcome.Core.Apply; +public interface IApplyService { Task RunAsync(ApplyRequest req, IProgress progress, CancellationToken ct = default); } diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServiceTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServiceTests.cs new file mode 100644 index 0000000..ea26127 --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServiceTests.cs @@ -0,0 +1,42 @@ +using Moq; +using SilverOS.Welcome.Core.Apply; +using SilverOS.Welcome.Core.Flavours; +using Xunit; + +public class ApplyServiceTests +{ + [Fact] + public async Task Runs_modules_then_accounts_then_bitlocker_then_bootstrap_last() + { + var order = new List(); + var run = new Mock(); + run.Setup(r => r.RunAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((_, a, _) => { if (a.Contains("Invoke-Hardening")) order.Add("modules"); }) + .ReturnsAsync(new ProcessResult(0, "", "")); + var acct = new Mock(); acct.Setup(a => a.CreateAccountsAsync(It.IsAny(),It.IsAny(),It.IsAny(),It.IsAny())).Callback(() => order.Add("accounts")).Returns(Task.CompletedTask); + var bl = new Mock(); bl.Setup(b => b.EnableAsync(It.IsAny(),It.IsAny())).Callback(() => order.Add("bitlocker")).Returns(Task.CompletedTask); + var boot = new Mock(); boot.Setup(b => b.TearDownAsync(It.IsAny(),It.IsAny())).Callback(() => order.Add("bootstrap")).Returns(Task.CompletedTask); + + var sut = new ApplyService(run.Object, acct.Object, bl.Object, boot.Object, "C:\\hard"); + var flavour = new FlavourManifest { Id="daily-driver", Hardening = new HardeningSpec { Modules = new[]{"00"} } }; + var req = new ApplyRequest(flavour, "alice", "pw", "adminpw", "123456", "sm-bootstrap"); + var progress = new List(); + + await sut.RunAsync(req, new Progress(p => progress.Add(p.Stage))); + + Assert.Equal(new[]{"modules","accounts","bitlocker","bootstrap"}, order); + Assert.Contains("Applying hardening", progress); + } + + [Fact] + public async Task Does_not_tear_down_bootstrap_if_account_creation_fails() + { + var run = new Mock(); run.Setup(r => r.RunAsync(It.IsAny(),It.IsAny(),It.IsAny())).ReturnsAsync(new ProcessResult(0,"","")); + var acct = new Mock(); acct.Setup(a => a.CreateAccountsAsync(It.IsAny(),It.IsAny(),It.IsAny(),It.IsAny())).ThrowsAsync(new InvalidOperationException("boom")); + var bl = new Mock(); var boot = new Mock(); + var sut = new ApplyService(run.Object, acct.Object, bl.Object, boot.Object, "C:\\hard"); + var req = new ApplyRequest(new FlavourManifest{ Hardening=new HardeningSpec{Modules=new[]{"00"}}}, "a","b","c","123456","sm-bootstrap"); + await Assert.ThrowsAsync(() => sut.RunAsync(req, new Progress(_ => {}))); + boot.Verify(b => b.TearDownAsync(It.IsAny(), It.IsAny()), Times.Never); + } +} From b1b278bb8d96fca1ffbe2f3e5c3dd3fe6d40966c Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:46:00 +0100 Subject: [PATCH 10/28] fix(welcome): correct -Modules arg encoding so hardening subset actually runs (+ real integration test) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit powershell.exe -File binds a single-quoted comma list like '00','03','05' as ONE string element, not a [string[]] array, so Invoke-Hardening.ps1's -contains filter matched nothing and all hardening modules were silently skipped. Fix: adopt a CSV-split contract — Invoke-Hardening.ps1 now accepts [string]$Modules and splits on ',' internally ($ModuleList = $Modules -split ','); ApplyService passes a bare CSV token (e.g. 00,03,05) with no surrounding quotes. Empirically verified via ProcessStartInfo: candidate (a) '00','03','05' → COUNT=1 (bug); candidate (b) 00,03,05 → single string, correctly split by the script; candidate (c) space-separated → PS positional-parameter error. PARSE OK confirmed. Adds ApplyServiceHardeningIntegrationTests: copies the real Invoke-Hardening.ps1 into a temp dir with harmless dummy 0*.ps1 stubs, runs ApplyService with the real ProcessRunner for modules ["00","05"], and asserts ran.txt contains RAN 00 and RAN 05 but NOT RAN 03 or RAN 07. Test fails on the old encoding and passes with the fix (regression-checked). --- windows/hardening/Invoke-Hardening.ps1 | 7 +- .../Apply/ApplyService.cs | 5 +- .../ApplyServiceHardeningIntegrationTests.cs | 113 ++++++++++++++++++ 3 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServiceHardeningIntegrationTests.cs diff --git a/windows/hardening/Invoke-Hardening.ps1 b/windows/hardening/Invoke-Hardening.ps1 index 81d2b25..7d6a852 100644 --- a/windows/hardening/Invoke-Hardening.ps1 +++ b/windows/hardening/Invoke-Hardening.ps1 @@ -2,13 +2,16 @@ <# Runs the §A-H modules (optionally a subset) then Verify. -Modules "00","03","05" -> run only those numeric-prefixed modules (default: all 0*). -ParamsJson '{"wdac":"audit"}' -> exported as $env:SM_PARAMS for modules to read. #> -[CmdletBinding()] param([string[]]$Modules, [string]$ParamsJson) +[CmdletBinding()] param([string]$Modules, [string]$ParamsJson) $ErrorActionPreference = 'Continue' $here = Split-Path -Parent $MyInvocation.MyCommand.Path if ($ParamsJson) { $env:SM_PARAMS = $ParamsJson } +# Accept Modules as a single CSV token (e.g. "00,03,05") so that ProcessStartInfo +# -File binding delivers it reliably as one string regardless of quoting. +$ModuleList = if ($Modules) { $Modules -split ',' } else { @() } Write-Host "=== SilverMetal hardening modules ===" $all = Get-ChildItem (Join-Path $here '0*.ps1') | Sort-Object Name -if ($Modules) { $all = $all | Where-Object { $Modules -contains $_.Name.Substring(0,2) } } +if ($ModuleList.Count -gt 0) { $all = $all | Where-Object { $ModuleList -contains $_.Name.Substring(0,2) } } foreach ($f in $all) { Write-Host "--> $($f.Name)" try { & $f.FullName } catch { Write-Warning "$($f.Name) FAILED: $_" } diff --git a/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyService.cs b/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyService.cs index 866381e..c513451 100644 --- a/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyService.cs +++ b/windows/welcome/src/SilverOS.Welcome.Core/Apply/ApplyService.cs @@ -8,7 +8,10 @@ public sealed class ApplyService(IProcessRunner runner, IAccountService accounts public async Task RunAsync(ApplyRequest req, IProgress progress, CancellationToken ct = default) { progress.Report(new("Applying hardening", 10)); - var mods = string.Join(",", req.Flavour.Hardening.Modules.Select(m => $"'{m}'")); + // Pass modules as a single bare CSV token (e.g. 00,03,05). + // powershell.exe -File receives single-quoted tokens as one literal string, not an array, + // so Invoke-Hardening.ps1 accepts [string]$Modules and splits on ',' internally. + var mods = string.Join(",", req.Flavour.Hardening.Modules); var pjson = JsonSerializer.Serialize(req.Flavour.Hardening.Params).Replace("\"", "\\\""); var script = Path.Combine(hardeningDir, "Invoke-Hardening.ps1"); var res = await runner.RunAsync("powershell.exe", diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServiceHardeningIntegrationTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServiceHardeningIntegrationTests.cs new file mode 100644 index 0000000..e63bbd7 --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyServiceHardeningIntegrationTests.cs @@ -0,0 +1,113 @@ +using Moq; +using SilverOS.Welcome.Core.Apply; +using SilverOS.Welcome.Core.Flavours; +using Xunit; + +/// +/// Real integration test: proves that ApplyService passes -Modules with the correct +/// encoding so that Invoke-Hardening.ps1's subset filter actually works through the +/// real ProcessStartInfo / PowerShell boundary. +/// +/// SAFETY: only harmless dummy .ps1 files are executed — never the real 0*.ps1 hardening +/// modules. Invoke-Hardening.ps1 is copied into a temp dir and run against dummy stubs. +/// +public class ApplyServiceHardeningIntegrationTests +{ + /// Walk up from the test binary to find the repo root (same as ShippedFlavoursTests). + private static string HardeningDir() + { + var d = AppContext.BaseDirectory; + while (d is not null && !Directory.Exists(Path.Combine(d, "windows", "hardening"))) + d = Directory.GetParent(d)?.FullName; + return Path.Combine(d!, "windows", "hardening"); + } + + [Fact] + public async Task Subset_filter_runs_only_requested_modules_via_real_powershell() + { + // ---- Arrange: set up a temp sandbox ---- + var tmp = Path.Combine(Path.GetTempPath(), $"sm_integ_{Guid.NewGuid():N}"); + Directory.CreateDirectory(tmp); + try + { + // Copy the REAL Invoke-Hardening.ps1 (the one we just patched) into the temp dir. + var realInvoke = Path.Combine(HardeningDir(), "Invoke-Hardening.ps1"); + File.Copy(realInvoke, Path.Combine(tmp, "Invoke-Hardening.ps1")); + + // Create harmless dummy module stubs. Each just appends its prefix to ran.txt. + var ranFile = Path.Combine(tmp, "ran.txt").Replace("\\", "\\\\"); + foreach (var (prefix, name) in new[] { + ("00", "00-a.ps1"), + ("03", "03-b.ps1"), + ("05", "05-c.ps1"), + ("07", "07-d.ps1"), + }) + { + // Single quotes around prefix so the string itself is written, not executed. + await File.WriteAllTextAsync( + Path.Combine(tmp, name), + $"'RAN {prefix}' | Out-File -Append \"{ranFile.Replace("\\\\", "\\\\")}\""); + } + + // Dummy Verify script — no-op so Invoke-Hardening.ps1's Verify step succeeds. + await File.WriteAllTextAsync( + Path.Combine(tmp, "Verify-SilverMetalWindows.ps1"), + "# no-op verify"); + + // ---- Arrange: mocked services so apply completes without touching real OS ---- + var acct = new Mock(); + acct.Setup(a => a.CreateAccountsAsync( + It.IsAny(), It.IsAny(), It.IsAny(), + It.IsAny())) + .Returns(Task.CompletedTask); + + var bl = new Mock(); + bl.Setup(b => b.EnableAsync(It.IsAny(), It.IsAny())) + .Returns(Task.CompletedTask); + + var boot = new Mock(); + boot.Setup(b => b.TearDownAsync(It.IsAny(), It.IsAny())) + .Returns(Task.CompletedTask); + + var sut = new ApplyService( + runner: new ProcessRunner(), + accounts: acct.Object, + bitlocker: bl.Object, + bootstrap: boot.Object, + hardeningDir: tmp); + + // Flavour requests modules 00 and 05 only — 03 and 07 must be skipped. + var flavour = new FlavourManifest + { + Id = "test", + Hardening = new HardeningSpec { Modules = new[] { "00", "05" } } + }; + var req = new ApplyRequest(flavour, "alice", "pw", "adminpw", "123456", "sm-bootstrap"); + + // ---- Act ---- + await sut.RunAsync(req, new Progress(_ => { })); + + // ---- Assert: ran.txt should contain only 00 and 05 markers ---- + Assert.True(File.Exists(Path.Combine(tmp, "ran.txt")), + "ran.txt was not created — no module ran at all (subset filter matched nothing)"); + + var ran = await File.ReadAllTextAsync(Path.Combine(tmp, "ran.txt")); + + Assert.Contains("RAN 00", ran, StringComparison.Ordinal); + Assert.Contains("RAN 05", ran, StringComparison.Ordinal); + Assert.DoesNotContain("RAN 03", ran, StringComparison.Ordinal); + Assert.DoesNotContain("RAN 07", ran, StringComparison.Ordinal); + + // ---- Assert: the rest of the apply pipeline also completed ---- + acct.Verify(a => a.CreateAccountsAsync( + "alice", "pw", "adminpw", It.IsAny()), Times.Once); + bl.Verify(b => b.EnableAsync("123456", It.IsAny()), Times.Once); + boot.Verify(b => b.TearDownAsync("sm-bootstrap", It.IsAny()), Times.Once); + } + finally + { + // Clean up — ignore errors (locked files etc.) to avoid masking test failure. + try { Directory.Delete(tmp, recursive: true); } catch { /* ignore */ } + } + } +} From 1f8ada3a45b669ee89c8ffa874a7866dc852c5e8 Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 02:50:42 +0100 Subject: [PATCH 11/28] feat(welcome): MAUI Blazor app skeleton + DI wiring Adds SilverOS.Welcome.App (net9.0-windows10.0.19041.0 only), registers all Core services in MauiProgram.cs, and introduces WizardState scoped service for the wizard host. Co-Authored-By: Claude Sonnet 4.6 --- windows/welcome/SilverOS.Welcome.sln | 15 +++ .../welcome/src/SilverOS.Welcome.App/App.xaml | 17 +++ .../src/SilverOS.Welcome.App/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 +++++++++++ .../Components/Routes.razor | 6 ++ .../Components/WizardState.cs | 12 +++ .../Components/_Imports.razor | 9 ++ .../src/SilverOS.Welcome.App/MainPage.xaml | 14 +++ .../src/SilverOS.Welcome.App/MainPage.xaml.cs | 9 ++ .../src/SilverOS.Welcome.App/MauiProgram.cs | 43 ++++++++ .../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 +++ .../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 ++ .../Platforms/iOS/Info.plist | 32 ++++++ .../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 ++ .../SilverOS.Welcome.App.csproj | 58 ++++++++++ .../SilverOS.Welcome.App/wwwroot/css/app.css | 88 +++++++++++++++ .../wwwroot/css/bootstrap/bootstrap.min.css | 7 ++ .../css/bootstrap/bootstrap.min.css.map | 1 + .../SilverOS.Welcome.App/wwwroot/index.html | 30 ++++++ 46 files changed, 1107 insertions(+) create mode 100644 windows/welcome/src/SilverOS.Welcome.App/App.xaml create mode 100644 windows/welcome/src/SilverOS.Welcome.App/App.xaml.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Components/Layout/MainLayout.razor create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Components/Layout/MainLayout.razor.css create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Components/Layout/NavMenu.razor create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Components/Layout/NavMenu.razor.css create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Counter.razor create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Home.razor create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Weather.razor create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Components/WizardState.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor create mode 100644 windows/welcome/src/SilverOS.Welcome.App/MainPage.xaml create mode 100644 windows/welcome/src/SilverOS.Welcome.App/MainPage.xaml.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/MauiProgram.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/AndroidManifest.xml create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainActivity.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainApplication.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/Resources/values/colors.xml create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/AppDelegate.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Entitlements.plist create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Info.plist create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Program.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/Main.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/tizen-manifest.xml create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/App.xaml create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/App.xaml.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/Package.appxmanifest create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/app.manifest create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/AppDelegate.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Info.plist create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Program.cs create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Resources/PrivacyInfo.xcprivacy create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Properties/launchSettings.json create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Resources/AppIcon/appicon.svg create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Resources/AppIcon/appiconfg.svg create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Resources/Fonts/OpenSans-Regular.ttf create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Resources/Images/dotnet_bot.svg create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Resources/Raw/AboutAssets.txt create mode 100644 windows/welcome/src/SilverOS.Welcome.App/Resources/Splash/splash.svg create mode 100644 windows/welcome/src/SilverOS.Welcome.App/SilverOS.Welcome.App.csproj create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/app.css create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/bootstrap/bootstrap.min.css create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/bootstrap/bootstrap.min.css.map create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/index.html diff --git a/windows/welcome/SilverOS.Welcome.sln b/windows/welcome/SilverOS.Welcome.sln index 7fb7fd8..9ad982d 100644 --- a/windows/welcome/SilverOS.Welcome.sln +++ b/windows/welcome/SilverOS.Welcome.sln @@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverOS.Welcome.Core", "sr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverOS.Welcome.Tests", "tests\SilverOS.Welcome.Tests\SilverOS.Welcome.Tests.csproj", "{73B13415-D01D-4409-B85F-62C8A4A8C95D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverOS.Welcome.App", "src\SilverOS.Welcome.App\SilverOS.Welcome.App.csproj", "{E62F6F39-C734-436E-9193-78D313205A02}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -43,6 +45,18 @@ Global {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Release|x64.Build.0 = Release|Any CPU {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Release|x86.ActiveCfg = Release|Any CPU {73B13415-D01D-4409-B85F-62C8A4A8C95D}.Release|x86.Build.0 = Release|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Debug|x64.ActiveCfg = Debug|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Debug|x64.Build.0 = Debug|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Debug|x86.ActiveCfg = Debug|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Debug|x86.Build.0 = Debug|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Release|Any CPU.Build.0 = Release|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Release|x64.ActiveCfg = Release|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Release|x64.Build.0 = Release|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Release|x86.ActiveCfg = Release|Any CPU + {E62F6F39-C734-436E-9193-78D313205A02}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -50,5 +64,6 @@ Global GlobalSection(NestedProjects) = preSolution {939DF856-EB90-473B-9C46-D8504B94A81B} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {73B13415-D01D-4409-B85F-62C8A4A8C95D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} + {E62F6F39-C734-436E-9193-78D313205A02} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} EndGlobalSection EndGlobal diff --git a/windows/welcome/src/SilverOS.Welcome.App/App.xaml b/windows/welcome/src/SilverOS.Welcome.App/App.xaml new file mode 100644 index 0000000..802e8d3 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/App.xaml @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/windows/welcome/src/SilverOS.Welcome.App/App.xaml.cs b/windows/welcome/src/SilverOS.Welcome.App/App.xaml.cs new file mode 100644 index 0000000..b2863e7 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/App.xaml.cs @@ -0,0 +1,14 @@ +namespace SilverOS.Welcome.App; + +public partial class App : Application +{ + public App() + { + InitializeComponent(); + } + + protected override Window CreateWindow(IActivationState? activationState) + { + return new Window(new MainPage()) { Title = "SilverOS.Welcome.App" }; + } +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Layout/MainLayout.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Layout/MainLayout.razor new file mode 100644 index 0000000..7cd63fe --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Layout/MainLayout.razor @@ -0,0 +1,17 @@ +@inherits LayoutComponentBase + +
+ + +
+
+ About +
+ +
+ @Body +
+
+
diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Layout/MainLayout.razor.css b/windows/welcome/src/SilverOS.Welcome.App/Components/Layout/MainLayout.razor.css new file mode 100644 index 0000000..8521145 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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/windows/welcome/src/SilverOS.Welcome.App/Components/Layout/NavMenu.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Layout/NavMenu.razor new file mode 100644 index 0000000..ef077a3 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Layout/NavMenu.razor @@ -0,0 +1,27 @@ + + + + + diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Layout/NavMenu.razor.css b/windows/welcome/src/SilverOS.Welcome.App/Components/Layout/NavMenu.razor.css new file mode 100644 index 0000000..06fe5ad --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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/windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Counter.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Counter.razor new file mode 100644 index 0000000..6324ad0 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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/windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Home.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Home.razor new file mode 100644 index 0000000..16dac31 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Home.razor @@ -0,0 +1,5 @@ +@page "/" + +

Hello, world!

+ +Welcome to your new app. diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Weather.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Weather.razor new file mode 100644 index 0000000..472bb98 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor new file mode 100644 index 0000000..631cf80 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor @@ -0,0 +1,6 @@ + + + + + + diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/WizardState.cs b/windows/welcome/src/SilverOS.Welcome.App/Components/WizardState.cs new file mode 100644 index 0000000..135583e --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/WizardState.cs @@ -0,0 +1,12 @@ +using SilverOS.Welcome.Core.Flavours; + +namespace SilverOS.Welcome.App.Components; + +public sealed class WizardState +{ + public FlavourManifest? Flavour { get; set; } + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; + public string AdminPassword { get; set; } = ""; + public string BitLockerPin { get; set; } = ""; +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor new file mode 100644 index 0000000..61d5ca1 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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 SilverOS.Welcome.App +@using SilverOS.Welcome.App.Components diff --git a/windows/welcome/src/SilverOS.Welcome.App/MainPage.xaml b/windows/welcome/src/SilverOS.Welcome.App/MainPage.xaml new file mode 100644 index 0000000..f71c0e3 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/MainPage.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/windows/welcome/src/SilverOS.Welcome.App/MainPage.xaml.cs b/windows/welcome/src/SilverOS.Welcome.App/MainPage.xaml.cs new file mode 100644 index 0000000..55e4c7c --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/MainPage.xaml.cs @@ -0,0 +1,9 @@ +namespace SilverOS.Welcome.App; + +public partial class MainPage : ContentPage +{ + public MainPage() + { + InitializeComponent(); + } +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/MauiProgram.cs b/windows/welcome/src/SilverOS.Welcome.App/MauiProgram.cs new file mode 100644 index 0000000..384adec --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/MauiProgram.cs @@ -0,0 +1,43 @@ +using Microsoft.Extensions.Logging; +using SilverOS.Welcome.Core.Apply; +using SilverOS.Welcome.Core.Flavours; +using SilverOS.Welcome.App.Components; + +namespace SilverOS.Welcome.App; + +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 + + var hardeningDir = @"C:\Windows\Setup\Scripts\hardening"; + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(sp => new ApplyService( + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + sp.GetRequiredService(), + hardeningDir)); + builder.Services.AddScoped(); + + return builder.Build(); + } +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/AndroidManifest.xml b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/AndroidManifest.xml new file mode 100644 index 0000000..dbf9e7e --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainActivity.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainActivity.cs new file mode 100644 index 0000000..a59d1f0 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainActivity.cs @@ -0,0 +1,10 @@ +using Android.App; +using Android.Content.PM; +using Android.OS; + +namespace SilverOS.Welcome.App; + +[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/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainApplication.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainApplication.cs new file mode 100644 index 0000000..97746f4 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainApplication.cs @@ -0,0 +1,15 @@ +using Android.App; +using Android.Runtime; + +namespace SilverOS.Welcome.App; + +[Application] +public class MainApplication : MauiApplication +{ + public MainApplication(IntPtr handle, JniHandleOwnership ownership) + : base(handle, ownership) + { + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/Resources/values/colors.xml b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/Resources/values/colors.xml new file mode 100644 index 0000000..c04d749 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #512BD4 + #2B0B98 + #2B0B98 + \ No newline at end of file diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/AppDelegate.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/AppDelegate.cs new file mode 100644 index 0000000..d1f3709 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/AppDelegate.cs @@ -0,0 +1,9 @@ +using Foundation; + +namespace SilverOS.Welcome.App; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Entitlements.plist b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Entitlements.plist new file mode 100644 index 0000000..de4adc9 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Entitlements.plist @@ -0,0 +1,14 @@ + + + + + + + com.apple.security.app-sandbox + + + com.apple.security.network.client + + + + diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Info.plist b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Info.plist new file mode 100644 index 0000000..7b1e6e6 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Program.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Program.cs new file mode 100644 index 0000000..8d9f343 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace SilverOS.Welcome.App; + +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/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/Main.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/Main.cs new file mode 100644 index 0000000..e273936 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/Main.cs @@ -0,0 +1,16 @@ +using System; +using Microsoft.Maui; +using Microsoft.Maui.Hosting; + +namespace SilverOS.Welcome.App; + +class Program : MauiApplication +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); + + static void Main(string[] args) + { + var app = new Program(); + app.Run(args); + } +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/tizen-manifest.xml b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/tizen-manifest.xml new file mode 100644 index 0000000..6680d35 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/App.xaml b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/App.xaml new file mode 100644 index 0000000..2a3c718 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/App.xaml @@ -0,0 +1,8 @@ + + + diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/App.xaml.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/App.xaml.cs new file mode 100644 index 0000000..c095ea5 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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 SilverOS.Welcome.App.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/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/Package.appxmanifest b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/Package.appxmanifest new file mode 100644 index 0000000..170d854 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/Package.appxmanifest @@ -0,0 +1,46 @@ + + + + + + + + + $placeholder$ + User Name + $placeholder$.png + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/app.manifest b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/app.manifest new file mode 100644 index 0000000..a795316 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Windows/app.manifest @@ -0,0 +1,15 @@ + + + + + + + + true/PM + PerMonitorV2, PerMonitor + + + diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/AppDelegate.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/AppDelegate.cs new file mode 100644 index 0000000..d1f3709 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/AppDelegate.cs @@ -0,0 +1,9 @@ +using Foundation; + +namespace SilverOS.Welcome.App; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Info.plist b/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Info.plist new file mode 100644 index 0000000..ecb7f71 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Program.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Program.cs new file mode 100644 index 0000000..6d73368 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace SilverOS.Welcome.App; + +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/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..24ab3b4 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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/windows/welcome/src/SilverOS.Welcome.App/Properties/launchSettings.json b/windows/welcome/src/SilverOS.Welcome.App/Properties/launchSettings.json new file mode 100644 index 0000000..4f85793 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "Windows Machine": { + "commandName": "Project", + "nativeDebugging": false + } + } +} \ No newline at end of file diff --git a/windows/welcome/src/SilverOS.Welcome.App/Resources/AppIcon/appicon.svg b/windows/welcome/src/SilverOS.Welcome.App/Resources/AppIcon/appicon.svg new file mode 100644 index 0000000..9d63b65 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Resources/AppIcon/appicon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/windows/welcome/src/SilverOS.Welcome.App/Resources/AppIcon/appiconfg.svg b/windows/welcome/src/SilverOS.Welcome.App/Resources/AppIcon/appiconfg.svg new file mode 100644 index 0000000..21dfb25 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Resources/AppIcon/appiconfg.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/windows/welcome/src/SilverOS.Welcome.App/Resources/Fonts/OpenSans-Regular.ttf b/windows/welcome/src/SilverOS.Welcome.App/Resources/Fonts/OpenSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..51763bf269fe5ccf65b6ae2b7b970637acda4568 GIT binary patch literal 107304 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

FtTe_~#Xxq1EyN(@m3Wm)X-EU$S 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/windows/welcome/src/SilverOS.Welcome.App/Resources/Raw/AboutAssets.txt b/windows/welcome/src/SilverOS.Welcome.App/Resources/Raw/AboutAssets.txt new file mode 100644 index 0000000..6de1c15 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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/windows/welcome/src/SilverOS.Welcome.App/Resources/Splash/splash.svg b/windows/welcome/src/SilverOS.Welcome.App/Resources/Splash/splash.svg new file mode 100644 index 0000000..21dfb25 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Resources/Splash/splash.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/windows/welcome/src/SilverOS.Welcome.App/SilverOS.Welcome.App.csproj b/windows/welcome/src/SilverOS.Welcome.App/SilverOS.Welcome.App.csproj new file mode 100644 index 0000000..f6c0afb --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/SilverOS.Welcome.App.csproj @@ -0,0 +1,58 @@ + + + + net9.0-windows10.0.19041.0 + + Exe + SilverOS.Welcome.App + true + true + enable + false + enable + + + SilverOS Welcome + + + uk.silverlabs.silveros.welcome + + + 1.0 + 1 + + + None + + 10.0.19041.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/app.css b/windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/app.css new file mode 100644 index 0000000..cc59fb5 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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: #1b6ec2; + border-color: #1861ac; +} + +.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { + box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; +} + +.content { + padding-top: 1.1rem; +} + +/*#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/windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/bootstrap/bootstrap.min.css b/windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/bootstrap/bootstrap.min.css new file mode 100644 index 0000000..02ae65b --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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/windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/bootstrap/bootstrap.min.css.map b/windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/bootstrap/bootstrap.min.css.map new file mode 100644 index 0000000..afcd9e3 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/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-` - -@code { - private int currentCount = 0; - - private void IncrementCount() - { - currentCount++; - } -} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Weather.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Weather.razor deleted file mode 100644 index 472bb98..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/Pages/Weather.razor +++ /dev/null @@ -1,61 +0,0 @@ -@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/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor index 631cf80..7100db6 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor @@ -1,6 +1,118 @@ - - - - - - +@using SilverOS.Welcome.App.Components.Steps +@using SilverOS.Welcome.Core.Flavours +@inject IFlavourLoader FlavourLoader +@inject WizardState State + +
+
+
+ @for (int i = 0; i < _stepTitles.Length; i++) + { + var idx = i; + + @_stepTitles[idx] + + } +
+
+ +
+ @if (_loading) + { +

Loading flavours…

+ } + else if (_error is not null) + { +

@_error

+ } + else + { + @switch (_currentStep) + { + case 0: + + break; + case 1: + + break; + case 2: + + break; + case 3: + + break; + case 4: + + break; + case 5: + + break; + } + } +
+ + +
+ +@code { + private static readonly string[] _stepTitles = { "Welcome", "Flavour", "Account", "Prefs", "Apply", "Done" }; + + // Flavours dir: baked alongside the exe at publish time. + private static readonly string FlavoursDir = Path.Combine( + AppContext.BaseDirectory, "flavours"); + + private int _currentStep = 0; + private bool _loading = true; + private string? _error; + private IReadOnlyList _flavours = Array.Empty(); + private AccountStep? _accountStep; + + private bool CanGoNext => _currentStep switch + { + 2 => _accountStep?.IsValid ?? false, + _ => true + }; + + protected override Task OnInitializedAsync() + { + try + { + _flavours = FlavourLoader.Load(FlavoursDir); + } + catch (Exception ex) + { + _error = $"Failed to load flavours: {ex.Message}"; + } + finally + { + _loading = false; + } + return Task.CompletedTask; + } + + void Next() + { + if (_currentStep < _stepTitles.Length - 1) + _currentStep++; + } + + void Back() + { + if (_currentStep > 0) + _currentStep--; + } +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/AccountStep.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/AccountStep.razor new file mode 100644 index 0000000..d6676f8 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/AccountStep.razor @@ -0,0 +1,84 @@ +@inject WizardState State + + + +@code { + private readonly Dictionary _errors = new(); + + /// True when all fields are valid. Used by the wizard host to gate Next. + public bool IsValid { get; private set; } + + protected override void OnInitialized() => Validate(); + + private void OnUsernameInput(ChangeEventArgs e) { State.Username = e.Value?.ToString() ?? ""; Validate(); } + private void OnPasswordInput(ChangeEventArgs e) { State.Password = e.Value?.ToString() ?? ""; Validate(); } + private void OnAdminPasswordInput(ChangeEventArgs e) { State.AdminPassword = e.Value?.ToString() ?? ""; Validate(); } + private void OnPinInput(ChangeEventArgs e) { State.BitLockerPin = e.Value?.ToString() ?? ""; Validate(); } + + void Validate() + { + _errors.Clear(); + + if (string.IsNullOrWhiteSpace(State.Username)) + _errors["username"] = "Daily username is required."; + + if (string.IsNullOrWhiteSpace(State.Password)) + _errors["password"] = "Password is required."; + + if (string.IsNullOrWhiteSpace(State.AdminPassword)) + _errors["adminpassword"] = "Administrator password is required."; + + var pin = State.BitLockerPin ?? ""; + if (!System.Text.RegularExpressions.Regex.IsMatch(pin, @"^\d{6,}$")) + _errors["bitlockerpin"] = "BitLocker PIN must be all digits and at least 6 digits long."; + + IsValid = _errors.Count == 0; + } +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/ApplyStep.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/ApplyStep.razor new file mode 100644 index 0000000..19ba43d --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/ApplyStep.razor @@ -0,0 +1,16 @@ +@* Minimal placeholder — full wiring in Task 11 *@ +
+

Applying Configuration

+

Your settings will be applied now.

+ + @if (_started) + { +

Working… please wait.

+ } +
+ +@code { + private bool _started; + + void Start() => _started = true; +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/DoneStep.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/DoneStep.razor new file mode 100644 index 0000000..a42f027 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/DoneStep.razor @@ -0,0 +1,14 @@ +@inject SilverOS.Welcome.Core.Apply.IProcessRunner ProcessRunner + +
+

All Done!

+

Your SilverOS device is configured and ready. Click below to restart and start using it.

+ +
+ +@code { + private async Task RestartNow() + { + await ProcessRunner.RunAsync("cmd.exe", "/c shutdown /r /t 5", CancellationToken.None); + } +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/FlavourStep.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/FlavourStep.razor new file mode 100644 index 0000000..18a893f --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/FlavourStep.razor @@ -0,0 +1,31 @@ +@inject WizardState State + +
+

What's this device for?

+

Choose the flavour that best matches how this PC will be used.

+
+ @foreach (var f in Flavours) + { +
+

@f.Label

+

@f.Description

+
+ } +
+
+ +@code { + [Parameter] public IReadOnlyList Flavours { get; set; } = Array.Empty(); + + protected override void OnInitialized() + { + State.Flavour ??= Flavours.FirstOrDefault(f => f.IsDefault); + } + + void Select(FlavourManifest f) + { + State.Flavour = f; + } +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/PrefsStep.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/PrefsStep.razor new file mode 100644 index 0000000..363cdb2 --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/PrefsStep.razor @@ -0,0 +1,30 @@ +@inject WizardState State + +
+

Preferences

+

A few final settings before we apply your configuration.

+ +
+
+ +
+
+ +
+
+ +
+
+
+ +@code { +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/WelcomeStep.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/WelcomeStep.razor new file mode 100644 index 0000000..1ef46cc --- /dev/null +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/WelcomeStep.razor @@ -0,0 +1,13 @@ +@inject WizardState State + +
+
+

Welcome to SilverOS

+

Let's get your device set up the way you want it.

+

This wizard will guide you through a few quick steps to configure your system, create your account, and apply the right security settings for your needs.

+

Takes about 5 minutes.

+
+
+ +@code { +} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/WizardState.cs b/windows/welcome/src/SilverOS.Welcome.App/Components/WizardState.cs index 135583e..04b08fd 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/WizardState.cs +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/WizardState.cs @@ -9,4 +9,9 @@ public sealed class WizardState public string Password { get; set; } = ""; public string AdminPassword { get; set; } = ""; public string BitLockerPin { get; set; } = ""; + + // Prefs step + public bool AutoUpdates { get; set; } = true; + public bool Telemetry { get; set; } = false; + public bool InstallDefenderUpdates { get; set; } = true; } diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor index 61d5ca1..8c75f01 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor @@ -7,3 +7,5 @@ @using Microsoft.JSInterop @using SilverOS.Welcome.App @using SilverOS.Welcome.App.Components +@using SilverOS.Welcome.App.Components.Steps +@using SilverOS.Welcome.Core.Flavours diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/AndroidManifest.xml b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/AndroidManifest.xml deleted file mode 100644 index dbf9e7e..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/AndroidManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainActivity.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainActivity.cs deleted file mode 100644 index a59d1f0..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainActivity.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Android.App; -using Android.Content.PM; -using Android.OS; - -namespace SilverOS.Welcome.App; - -[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/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainApplication.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainApplication.cs deleted file mode 100644 index 97746f4..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/MainApplication.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Android.App; -using Android.Runtime; - -namespace SilverOS.Welcome.App; - -[Application] -public class MainApplication : MauiApplication -{ - public MainApplication(IntPtr handle, JniHandleOwnership ownership) - : base(handle, ownership) - { - } - - protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); -} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/Resources/values/colors.xml b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/Resources/values/colors.xml deleted file mode 100644 index c04d749..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Android/Resources/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #512BD4 - #2B0B98 - #2B0B98 - \ No newline at end of file diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/AppDelegate.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/AppDelegate.cs deleted file mode 100644 index d1f3709..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/AppDelegate.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Foundation; - -namespace SilverOS.Welcome.App; - -[Register("AppDelegate")] -public class AppDelegate : MauiUIApplicationDelegate -{ - protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); -} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Entitlements.plist b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Entitlements.plist deleted file mode 100644 index de4adc9..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Entitlements.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - com.apple.security.app-sandbox - - - com.apple.security.network.client - - - - diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Info.plist b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Info.plist deleted file mode 100644 index 7b1e6e6..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - UIDeviceFamily - - 2 - - UIRequiredDeviceCapabilities - - arm64 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - XSAppIconAssets - Assets.xcassets/appicon.appiconset - - diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Program.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Program.cs deleted file mode 100644 index 8d9f343..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/MacCatalyst/Program.cs +++ /dev/null @@ -1,15 +0,0 @@ -using ObjCRuntime; -using UIKit; - -namespace SilverOS.Welcome.App; - -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/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/Main.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/Main.cs deleted file mode 100644 index e273936..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/Main.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using Microsoft.Maui; -using Microsoft.Maui.Hosting; - -namespace SilverOS.Welcome.App; - -class Program : MauiApplication -{ - protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); - - static void Main(string[] args) - { - var app = new Program(); - app.Run(args); - } -} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/tizen-manifest.xml b/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/tizen-manifest.xml deleted file mode 100644 index 6680d35..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/Tizen/tizen-manifest.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - maui-appicon-placeholder - - - - - http://tizen.org/privilege/internet - - - - \ No newline at end of file diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/AppDelegate.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/AppDelegate.cs deleted file mode 100644 index d1f3709..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/AppDelegate.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Foundation; - -namespace SilverOS.Welcome.App; - -[Register("AppDelegate")] -public class AppDelegate : MauiUIApplicationDelegate -{ - protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); -} diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Info.plist b/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Info.plist deleted file mode 100644 index ecb7f71..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Info.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - LSRequiresIPhoneOS - - UIDeviceFamily - - 1 - 2 - - UIRequiredDeviceCapabilities - - arm64 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - XSAppIconAssets - Assets.xcassets/appicon.appiconset - - diff --git a/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Program.cs b/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Program.cs deleted file mode 100644 index 6d73368..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Program.cs +++ /dev/null @@ -1,15 +0,0 @@ -using ObjCRuntime; -using UIKit; - -namespace SilverOS.Welcome.App; - -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/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Resources/PrivacyInfo.xcprivacy deleted file mode 100644 index 24ab3b4..0000000 --- a/windows/welcome/src/SilverOS.Welcome.App/Platforms/iOS/Resources/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryFileTimestamp - NSPrivacyAccessedAPITypeReasons - - C617.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime - NSPrivacyAccessedAPITypeReasons - - 35F9.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryDiskSpace - NSPrivacyAccessedAPITypeReasons - - E174.1 - - - - - - diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourStepTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourStepTests.cs new file mode 100644 index 0000000..972f05b --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/FlavourStepTests.cs @@ -0,0 +1,23 @@ +using Bunit; +using Microsoft.Extensions.DependencyInjection; +using SilverOS.Welcome.App.Components.Steps; +using SilverOS.Welcome.App.Components; +using SilverOS.Welcome.Core.Flavours; +using Xunit; + +public class FlavourStepTests : TestContext +{ + [Fact] + public void Renders_one_card_per_flavour_and_preselects_default() + { + var flavours = new[] + { + new FlavourManifest { Id="daily-driver", Label="Daily-Driver", IsDefault=true, Hardening=new(){Modules=new[]{"00"}} }, + new FlavourManifest { Id="privacy-max", Label="Privacy-Max", Hardening=new(){Modules=new[]{"00"}} }, + }; + Services.AddSingleton(new WizardState()); + var cut = RenderComponent(p => p.Add(s => s.Flavours, flavours)); + Assert.Equal(2, cut.FindAll(".flavour-card").Count); + Assert.Contains("selected", cut.Find(".flavour-card[data-id=daily-driver]").ClassList); + } +} diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/SilverOS.Welcome.Tests.csproj b/windows/welcome/tests/SilverOS.Welcome.Tests/SilverOS.Welcome.Tests.csproj index 7447e76..3e5ff02 100644 --- a/windows/welcome/tests/SilverOS.Welcome.Tests/SilverOS.Welcome.Tests.csproj +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/SilverOS.Welcome.Tests.csproj @@ -1,13 +1,19 @@ - + - net9.0-windows + net9.0-windows10.0.19041.0 enable enable false + true + + Library + + true + @@ -20,7 +26,7 @@ - + From a393ded7c6c059a3720457cd4adedfd0769d7e7d Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 03:12:41 +0100 Subject: [PATCH 13/28] fix(welcome): touched-gated account errors, flavour-load retry, flavour Next-gate, drop dead inject --- .../Components/Routes.razor | 13 +++++++++++-- .../Components/Steps/AccountStep.razor | 17 +++++++++-------- .../Components/Steps/WelcomeStep.razor | 2 -- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor index 7100db6..a466c0f 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor @@ -23,7 +23,11 @@ } else if (_error is not null) { -

@_error

+
+

Couldn't load device profiles. Please reinstall SilverOS.

+

@_error

+ +
} else { @@ -83,12 +87,17 @@ private bool CanGoNext => _currentStep switch { + 1 => State.Flavour is not null, 2 => _accountStep?.IsValid ?? false, _ => true }; - protected override Task OnInitializedAsync() + protected override Task OnInitializedAsync() => LoadFlavours(); + + private Task LoadFlavours() { + _error = null; + _loading = true; try { _flavours = FlavourLoader.Load(FlavoursDir); diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/AccountStep.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/AccountStep.razor index d6676f8..1553884 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/AccountStep.razor +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/AccountStep.razor @@ -9,7 +9,7 @@ - @if (_errors.TryGetValue("username", out var ue)) + @if (_touched.Contains("username") && _errors.TryGetValue("username", out var ue)) { @ue } @@ -20,7 +20,7 @@ - @if (_errors.TryGetValue("password", out var pe)) + @if (_touched.Contains("password") && _errors.TryGetValue("password", out var pe)) { @pe } @@ -31,7 +31,7 @@ - @if (_errors.TryGetValue("adminpassword", out var ae)) + @if (_touched.Contains("adminpassword") && _errors.TryGetValue("adminpassword", out var ae)) { @ae } @@ -42,7 +42,7 @@ - @if (_errors.TryGetValue("bitlockerpin", out var be)) + @if (_touched.Contains("bitlockerpin") && _errors.TryGetValue("bitlockerpin", out var be)) { @be } @@ -51,16 +51,17 @@ @code { private readonly Dictionary _errors = new(); + private readonly HashSet _touched = new(); /// True when all fields are valid. Used by the wizard host to gate Next. public bool IsValid { get; private set; } protected override void OnInitialized() => Validate(); - private void OnUsernameInput(ChangeEventArgs e) { State.Username = e.Value?.ToString() ?? ""; Validate(); } - private void OnPasswordInput(ChangeEventArgs e) { State.Password = e.Value?.ToString() ?? ""; Validate(); } - private void OnAdminPasswordInput(ChangeEventArgs e) { State.AdminPassword = e.Value?.ToString() ?? ""; Validate(); } - private void OnPinInput(ChangeEventArgs e) { State.BitLockerPin = e.Value?.ToString() ?? ""; Validate(); } + private void OnUsernameInput(ChangeEventArgs e) { State.Username = e.Value?.ToString() ?? ""; _touched.Add("username"); Validate(); } + private void OnPasswordInput(ChangeEventArgs e) { State.Password = e.Value?.ToString() ?? ""; _touched.Add("password"); Validate(); } + private void OnAdminPasswordInput(ChangeEventArgs e) { State.AdminPassword = e.Value?.ToString() ?? ""; _touched.Add("adminpassword"); Validate(); } + private void OnPinInput(ChangeEventArgs e) { State.BitLockerPin = e.Value?.ToString() ?? ""; _touched.Add("bitlockerpin"); Validate(); } void Validate() { diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/WelcomeStep.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/WelcomeStep.razor index 1ef46cc..a351341 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/WelcomeStep.razor +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/WelcomeStep.razor @@ -1,5 +1,3 @@ -@inject WizardState State -

Welcome to SilverOS

From ea5adacac330420bb16bb260dd6bf5c6765dadb6 Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 03:20:39 +0100 Subject: [PATCH 14/28] feat(welcome): apply step wiring + Mercury styling Wire ApplyStep with public StartAsync(), IProgress marshalled via InvokeAsync(StateHasChanged), OnComplete EventCallback (host advances to Done), and failure surface + Retry button. Add _Imports.razor Apply using. Wire Routes.razor AdvanceToDone handler. Add Mercury CSS: slate-void palette, DM Mono typography, layered radial gradients, staggered step-enter animation, styled wizard chrome/cards/fields/progress bar/buttons. 17/17 tests green. Co-Authored-By: Claude Sonnet 4.6 --- .../Components/Routes.razor | 10 +- .../Components/Steps/ApplyStep.razor | 98 ++- .../Components/_Imports.razor | 1 + .../SilverOS.Welcome.App/wwwroot/css/app.css | 791 ++++++++++++++++-- .../SilverOS.Welcome.Tests/ApplyStepTests.cs | 72 ++ 5 files changed, 914 insertions(+), 58 deletions(-) create mode 100644 windows/welcome/tests/SilverOS.Welcome.Tests/ApplyStepTests.cs diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor index a466c0f..26104f1 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor @@ -46,7 +46,7 @@ break; case 4: - + break; case 5: @@ -124,4 +124,12 @@ if (_currentStep > 0) _currentStep--; } + + void AdvanceToDone() + { + // Called by ApplyStep when configuration completes successfully. + // Step index 5 = Done. + _currentStep = 5; + StateHasChanged(); + } } diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/ApplyStep.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/ApplyStep.razor index 19ba43d..37d5ddf 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/ApplyStep.razor +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Steps/ApplyStep.razor @@ -1,16 +1,98 @@ -@* Minimal placeholder — full wiring in Task 11 *@ +@inject IApplyService ApplyService +@inject WizardState State +
-

Applying Configuration

-

Your settings will be applied now.

- - @if (_started) +
+

Applying Configuration

+

Your SilverOS is being configured. This may take a few minutes.

+
+ + @if (_errorMessage is not null) { -

Working… please wait.

+
+
+

Configuration failed

+

@_errorMessage

+ +
+ } + else if (!_running && !_complete) + { +
+

Ready to apply your selections. Click Start to begin.

+ +
+ } + else + { +
+
@_stageLabel
+
+
+
+
@(_percent)%
+
+ + @if (_complete) + { +
+
+

Configuration complete.

+
+ } }
@code { - private bool _started; + [Parameter] public EventCallback OnComplete { get; set; } - void Start() => _started = true; + private bool _running; + private bool _complete; + private int _percent; + private string _stageLabel = "Preparing…"; + private string? _errorMessage; + + public async Task StartAsync() + { + _running = true; + _complete = false; + _errorMessage = null; + _percent = 0; + _stageLabel = "Preparing…"; + StateHasChanged(); + + var req = new ApplyRequest( + Flavour: State.Flavour!, + Username: State.Username, + Password: State.Password, + AdminPassword: State.AdminPassword, + BitLockerPin: State.BitLockerPin, + BootstrapUser: "sm-bootstrap"); + + var progress = new Progress(p => + { + _ = InvokeAsync(() => + { + _percent = p.Percent; + _stageLabel = p.Stage; + StateHasChanged(); + }); + }); + + try + { + await ApplyService.RunAsync(req, progress); + _complete = true; + _running = false; + _percent = 100; + StateHasChanged(); + await OnComplete.InvokeAsync(); + } + catch (Exception ex) + { + _running = false; + _errorMessage = ex.Message; + StateHasChanged(); + } + } } diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor index 8c75f01..078f017 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/_Imports.razor @@ -9,3 +9,4 @@ @using SilverOS.Welcome.App.Components @using SilverOS.Welcome.App.Components.Steps @using SilverOS.Welcome.Core.Flavours +@using SilverOS.Welcome.Core.Apply diff --git a/windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/app.css b/windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/app.css index cc59fb5..796debe 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/app.css +++ b/windows/welcome/src/SilverOS.Welcome.App/wwwroot/css/app.css @@ -1,72 +1,765 @@ -/*#if (SampleContent)*/ +/* =================================================================== + SilverOS Welcome — Mercury Aesthetic + Theme: precision dark, slate-steel dominant, electric-ice accent. + Typography: "DM Mono" for headings/UI text, fallback to Courier + variant stacks for the "terminal-built" feel of a security OS. + Atmosphere: layered radial + linear gradients, subtle scanline texture. + Motion: staggered CSS entrance on .step reveal — one orchestrated + arrival, not scattered micro-animations. + =================================================================== */ + +/* ── Web Font ───────────────────────────────────────────────────────── */ +@import url('https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300&family=Inter:wght@300;400;500&display=swap'); + +/* ── Design Tokens ──────────────────────────────────────────────────── */ +:root { + /* Palette */ + --clr-void: #0b0f14; /* near-black background */ + --clr-surface: #111720; /* card / panel surface */ + --clr-surface-2: #19202e; /* raised surface */ + --clr-border: #1e2a3a; /* subtle border */ + --clr-border-hi: #2a3d56; /* highlighted border */ + --clr-accent: #00d4ff; /* electric ice — primary CTA, progress */ + --clr-accent-dim: #0099bb; /* dimmer accent for hover states */ + --clr-accent-glow: rgba(0,212,255,0.18); + --clr-success: #00e5a0; /* completion green */ + --clr-warn: #f5a623; /* error / warning amber */ + --clr-text-hi: #e8edf5; /* high-emphasis text */ + --clr-text-mid: #8fa4bc; /* mid-emphasis: labels, subtitles */ + --clr-text-lo: #4a5f78; /* low-emphasis: placeholders, hints */ + + /* Typography */ + --font-mono: 'DM Mono', 'Fira Code', 'Consolas', monospace; + --font-ui: 'Inter', system-ui, -apple-system, sans-serif; + + /* Geometry */ + --radius-sm: 4px; + --radius-md: 8px; + --radius-lg: 12px; + + /* Motion */ + --ease-out: cubic-bezier(0.22, 0.61, 0.36, 1); + --ease-in: cubic-bezier(0.64, 0, 0.78, 0); +} + +/* ── Reset & Base ───────────────────────────────────────────────────── */ +*, *::before, *::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + html, body { - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + height: 100%; + background-color: var(--clr-void); + color: var(--clr-text-hi); + font-family: var(--font-ui); + font-size: 15px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; } -a, .btn-link { - color: #006bb7; -} - -.btn-primary { - color: #fff; - background-color: #1b6ec2; - border-color: #1861ac; -} - -.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { - box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; -} - -.content { - padding-top: 1.1rem; -} - -/*#endif*/ -h1:focus { - outline: none; -} - -.valid.modified:not([type=checkbox]) { - outline: 1px solid #26b050; -} - -.invalid { - outline: 1px solid #e50000; -} - -.validation-message { - color: #e50000; +/* Atmospheric background — layered radial glow on deep void */ +body { + background: + radial-gradient(ellipse 80% 60% at 50% -10%, rgba(0,100,180,0.18) 0%, transparent 70%), + radial-gradient(ellipse 50% 40% at 90% 100%, rgba(0,180,140,0.08) 0%, transparent 60%), + var(--clr-void); + min-height: 100vh; } +/* ── Blazor error overlay (keep readable) ──────────────────────────── */ #blazor-error-ui { - background: lightyellow; + background: #1a0a0a; + border-top: 2px solid var(--clr-warn); + color: var(--clr-warn); bottom: 0; - box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 -2px 12px rgba(245,166,35,0.15); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; + font-family: var(--font-mono); + font-size: 0.8rem; } - #blazor-error-ui .dismiss { - cursor: pointer; - position: absolute; - right: 0.75rem; - top: 0.5rem; - } +#blazor-error-ui .dismiss { + cursor: pointer; + position: absolute; + right: 0.75rem; + top: 0.5rem; + color: var(--clr-text-mid); +} .blazor-error-boundary { - background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; + background: #1a0a0a; + border: 1px solid var(--clr-warn); padding: 1rem 1rem 1rem 3.7rem; - color: white; + color: var(--clr-warn); + border-radius: var(--radius-md); } - .blazor-error-boundary::after { - content: "An error has occurred." - } +.blazor-error-boundary::after { + content: "An error has occurred." +} +/* ── Validation ─────────────────────────────────────────────────────── */ +h1:focus { outline: none; } + +.valid.modified:not([type=checkbox]) { + outline: 1px solid var(--clr-success); +} + +.invalid { + outline: 1px solid var(--clr-warn); +} + +.validation-message { + color: var(--clr-warn); + font-size: 0.75rem; + font-family: var(--font-mono); +} + +/* ══════════════════════════════════════════════════════════════════════ + WIZARD CHROME + ══════════════════════════════════════════════════════════════════════ */ + +.wizard { + display: grid; + grid-template-rows: auto 1fr auto; + min-height: 100vh; + max-width: 760px; + margin: 0 auto; +} + +/* ── Step indicator ─────────────────────────────────────────────────── */ +.wizard-header { + padding: 1.5rem 2rem 1rem; + border-bottom: 1px solid var(--clr-border); + background: linear-gradient(to bottom, rgba(17,23,32,0.95), transparent); + position: sticky; + top: 0; + z-index: 10; +} + +.wizard-steps-indicator { + display: flex; + gap: 0; + align-items: center; +} + +.wizard-step-dot { + font-family: var(--font-mono); + font-size: 0.7rem; + font-weight: 400; + letter-spacing: 0.05em; + color: var(--clr-text-lo); + padding: 0.25rem 0.75rem; + border-radius: var(--radius-sm); + transition: color 0.25s var(--ease-out), background 0.25s var(--ease-out); + position: relative; + white-space: nowrap; +} + +.wizard-step-dot + .wizard-step-dot::before { + content: '›'; + position: absolute; + left: -2px; + color: var(--clr-border-hi); + font-size: 0.9rem; + top: 50%; + transform: translateY(-50%); +} + +.wizard-step-dot.done { + color: var(--clr-success); +} + +.wizard-step-dot.done::after { + content: ' ✓'; + font-size: 0.6rem; +} + +.wizard-step-dot.active { + color: var(--clr-accent); + background: var(--clr-accent-glow); + font-weight: 500; +} + +/* ── Wizard body ────────────────────────────────────────────────────── */ +.wizard-body { + padding: 2.5rem 2rem; + overflow-y: auto; +} + +/* ── Wizard footer ──────────────────────────────────────────────────── */ +.wizard-footer { + padding: 1.25rem 2rem; + border-top: 1px solid var(--clr-border); + display: flex; + justify-content: space-between; + align-items: center; + background: linear-gradient(to top, rgba(11,15,20,0.98), transparent); + gap: 1rem; +} + +/* ── Loading / error states ─────────────────────────────────────────── */ +.loading { + font-family: var(--font-mono); + color: var(--clr-text-lo); + font-size: 0.85rem; + animation: pulse 1.4s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { opacity: 0.4; } + 50% { opacity: 1; } +} + +.error-panel { + border: 1px solid var(--clr-warn); + border-radius: var(--radius-md); + padding: 1.5rem; + background: rgba(245,166,35,0.06); +} + +.error { + color: var(--clr-warn); + font-weight: 500; + margin-bottom: 0.4rem; +} + +.error-detail { + color: var(--clr-text-lo); + font-family: var(--font-mono); + font-size: 0.75rem; + margin-bottom: 1rem; +} + +/* ══════════════════════════════════════════════════════════════════════ + BUTTONS + ══════════════════════════════════════════════════════════════════════ */ + +.btn-primary, +.btn-secondary { + font-family: var(--font-mono); + font-size: 0.8rem; + font-weight: 500; + letter-spacing: 0.08em; + text-transform: uppercase; + padding: 0.6rem 1.4rem; + border-radius: var(--radius-sm); + border: none; + cursor: pointer; + transition: + background 0.2s var(--ease-out), + box-shadow 0.2s var(--ease-out), + opacity 0.15s; + outline-offset: 3px; +} + +.btn-primary { + background: var(--clr-accent); + color: var(--clr-void); +} + +.btn-primary:hover:not(:disabled) { + background: #1ae0ff; + box-shadow: 0 0 18px var(--clr-accent-glow); +} + +.btn-primary:focus-visible { + outline: 2px solid var(--clr-accent); +} + +.btn-primary:disabled { + opacity: 0.35; + cursor: not-allowed; +} + +.btn-secondary { + background: transparent; + color: var(--clr-text-mid); + border: 1px solid var(--clr-border-hi); +} + +.btn-secondary:hover:not(:disabled) { + background: var(--clr-surface-2); + color: var(--clr-text-hi); + border-color: var(--clr-accent-dim); +} + +.btn-secondary:focus-visible { + outline: 2px solid var(--clr-accent); +} + +.btn-secondary:disabled { + opacity: 0.3; + cursor: not-allowed; +} + +/* ══════════════════════════════════════════════════════════════════════ + STEP ENTRANCE ANIMATION (orchestrated stagger) + ══════════════════════════════════════════════════════════════════════ */ + +.step { + animation: step-enter 0.45s var(--ease-out) both; +} + +@keyframes step-enter { + from { + opacity: 0; + transform: translateY(16px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* heading and subtitle arrive slightly after the container */ +.step h1 { + font-family: var(--font-mono); + font-size: 1.6rem; + font-weight: 300; + letter-spacing: -0.02em; + color: var(--clr-text-hi); + line-height: 1.2; + margin-bottom: 0.4rem; + animation: step-enter 0.5s 0.05s var(--ease-out) both; +} + +.step-subtitle { + font-family: var(--font-ui); + font-size: 0.9rem; + color: var(--clr-text-mid); + margin-bottom: 2rem; + animation: step-enter 0.5s 0.1s var(--ease-out) both; +} + +/* ══════════════════════════════════════════════════════════════════════ + WELCOME STEP + ══════════════════════════════════════════════════════════════════════ */ + +.welcome-step { + display: flex; + flex-direction: column; + justify-content: center; + min-height: 50vh; +} + +.welcome-hero { + animation: step-enter 0.55s 0.05s var(--ease-out) both; +} + +.welcome-hero h1 { + font-size: 2.2rem; + font-weight: 300; + color: var(--clr-text-hi); + margin-bottom: 0.5rem; + /* Accent underline */ + background: linear-gradient(90deg, var(--clr-accent) 0%, var(--clr-success) 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + animation: step-enter 0.55s 0.1s var(--ease-out) both; +} + +.tagline { + font-size: 1.05rem; + color: var(--clr-text-mid); + font-style: italic; + margin-bottom: 1.5rem; + animation: step-enter 0.5s 0.15s var(--ease-out) both; +} + +.time-estimate { + font-family: var(--font-mono); + font-size: 0.75rem; + color: var(--clr-text-lo); + margin-top: 1.5rem; + animation: step-enter 0.5s 0.2s var(--ease-out) both; +} + +/* ══════════════════════════════════════════════════════════════════════ + FLAVOUR STEP + ══════════════════════════════════════════════════════════════════════ */ + +.flavour-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); + gap: 1rem; + margin-top: 0.5rem; +} + +.flavour-card { + background: var(--clr-surface); + border: 1px solid var(--clr-border); + border-radius: var(--radius-lg); + padding: 1.5rem; + cursor: pointer; + transition: + border-color 0.2s var(--ease-out), + box-shadow 0.2s var(--ease-out), + background 0.2s var(--ease-out); + position: relative; + overflow: hidden; +} + +.flavour-card::before { + content: ''; + position: absolute; + inset: 0; + background: linear-gradient(135deg, var(--clr-accent-glow) 0%, transparent 60%); + opacity: 0; + transition: opacity 0.25s var(--ease-out); + border-radius: inherit; +} + +.flavour-card:hover { + border-color: var(--clr-border-hi); + box-shadow: 0 0 0 1px var(--clr-border-hi), 0 4px 20px rgba(0,0,0,0.4); +} + +.flavour-card:hover::before { + opacity: 0.5; +} + +.flavour-card.selected { + border-color: var(--clr-accent); + box-shadow: 0 0 0 1px var(--clr-accent), 0 0 28px var(--clr-accent-glow); + background: var(--clr-surface-2); +} + +.flavour-card.selected::before { + opacity: 1; +} + +.flavour-card h3 { + font-family: var(--font-mono); + font-size: 0.95rem; + font-weight: 500; + color: var(--clr-text-hi); + letter-spacing: 0.03em; + margin-bottom: 0.5rem; +} + +.flavour-card.selected h3 { + color: var(--clr-accent); +} + +.flavour-card p { + font-size: 0.82rem; + color: var(--clr-text-mid); + line-height: 1.5; +} + +/* Staggered card entrance */ +.flavour-card:nth-child(1) { animation: step-enter 0.45s 0.1s var(--ease-out) both; } +.flavour-card:nth-child(2) { animation: step-enter 0.45s 0.18s var(--ease-out) both; } +.flavour-card:nth-child(3) { animation: step-enter 0.45s 0.26s var(--ease-out) both; } +.flavour-card:nth-child(4) { animation: step-enter 0.45s 0.34s var(--ease-out) both; } + +/* ══════════════════════════════════════════════════════════════════════ + ACCOUNT STEP / FORM FIELDS + ══════════════════════════════════════════════════════════════════════ */ + +.field-group { + margin-bottom: 1.4rem; + animation: step-enter 0.4s var(--ease-out) both; +} + +.field-group:nth-child(2) { animation-delay: 0.06s; } +.field-group:nth-child(3) { animation-delay: 0.12s; } +.field-group:nth-child(4) { animation-delay: 0.18s; } + +.field-group label { + display: block; + font-family: var(--font-mono); + font-size: 0.72rem; + font-weight: 500; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--clr-text-mid); + margin-bottom: 0.4rem; +} + +.field-group input[type="text"], +.field-group input[type="password"] { + width: 100%; + background: var(--clr-surface); + border: 1px solid var(--clr-border); + border-radius: var(--radius-sm); + padding: 0.65rem 0.9rem; + font-family: var(--font-mono); + font-size: 0.9rem; + color: var(--clr-text-hi); + outline: none; + transition: + border-color 0.2s var(--ease-out), + box-shadow 0.2s var(--ease-out); +} + +.field-group input:focus { + border-color: var(--clr-accent); + box-shadow: 0 0 0 3px var(--clr-accent-glow); +} + +.field-group input::placeholder { + color: var(--clr-text-lo); + font-style: italic; +} + +.field-error { + display: block; + font-family: var(--font-mono); + font-size: 0.72rem; + color: var(--clr-warn); + margin-top: 0.3rem; +} + +/* ══════════════════════════════════════════════════════════════════════ + PREFS STEP + ══════════════════════════════════════════════════════════════════════ */ + +.prefs-list { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.pref-item { + background: var(--clr-surface); + border: 1px solid var(--clr-border); + border-radius: var(--radius-md); + padding: 0.9rem 1.1rem; + animation: step-enter 0.4s var(--ease-out) both; +} + +.pref-item:nth-child(2) { animation-delay: 0.07s; } +.pref-item:nth-child(3) { animation-delay: 0.14s; } + +.pref-item label { + display: flex; + align-items: center; + gap: 0.75rem; + cursor: pointer; + font-size: 0.88rem; + color: var(--clr-text-hi); +} + +.pref-item input[type="checkbox"] { + width: 1rem; + height: 1rem; + accent-color: var(--clr-accent); + cursor: pointer; + flex-shrink: 0; +} + +.pref-item small { + font-family: var(--font-mono); + font-size: 0.72rem; + color: var(--clr-text-lo); +} + +/* ══════════════════════════════════════════════════════════════════════ + APPLY STEP + ══════════════════════════════════════════════════════════════════════ */ + +.apply-step { + display: flex; + flex-direction: column; + gap: 2rem; + min-height: 40vh; +} + +.apply-header h1 { + font-size: 1.7rem; +} + +/* Ready state */ +.apply-ready { + background: var(--clr-surface); + border: 1px solid var(--clr-border); + border-radius: var(--radius-lg); + padding: 2rem; + text-align: center; + animation: step-enter 0.4s 0.1s var(--ease-out) both; +} + +.apply-ready-text { + color: var(--clr-text-mid); + font-size: 0.9rem; + margin-bottom: 1.5rem; +} + +.btn-start { + min-width: 140px; +} + +/* Progress state */ +.apply-progress-container { + animation: step-enter 0.35s var(--ease-out) both; +} + +.apply-stage-label { + font-family: var(--font-mono); + font-size: 0.8rem; + color: var(--clr-accent); + letter-spacing: 0.04em; + margin-bottom: 0.6rem; +} + +.apply-progress-track { + width: 100%; + height: 6px; + background: var(--clr-surface-2); + border-radius: 99px; + overflow: hidden; + border: 1px solid var(--clr-border); +} + +.apply-progress-bar { + height: 100%; + background: linear-gradient(90deg, var(--clr-accent) 0%, var(--clr-success) 100%); + border-radius: 99px; + transition: width 0.4s var(--ease-out); + box-shadow: 0 0 10px var(--clr-accent-glow); +} + +.apply-percent-label { + font-family: var(--font-mono); + font-size: 0.72rem; + color: var(--clr-text-lo); + text-align: right; + margin-top: 0.3rem; +} + +/* Complete state */ +.apply-complete { + display: flex; + align-items: center; + gap: 0.75rem; + background: rgba(0,229,160,0.08); + border: 1px solid var(--clr-success); + border-radius: var(--radius-md); + padding: 1rem 1.25rem; + animation: step-enter 0.4s var(--ease-out) both; +} + +.apply-complete-icon { + font-size: 1.4rem; + color: var(--clr-success); + line-height: 1; +} + +.apply-complete p { + color: var(--clr-success); + font-family: var(--font-mono); + font-size: 0.85rem; +} + +/* Error state */ +.apply-error { + background: rgba(245,166,35,0.07); + border: 1px solid var(--clr-warn); + border-radius: var(--radius-md); + padding: 1.5rem; + display: flex; + flex-direction: column; + gap: 0.6rem; + animation: step-enter 0.35s var(--ease-out) both; +} + +.apply-error-icon { + font-size: 1.5rem; + color: var(--clr-warn); + line-height: 1; +} + +.apply-error-title { + font-family: var(--font-mono); + font-size: 0.85rem; + font-weight: 500; + color: var(--clr-warn); +} + +.apply-error-detail { + font-family: var(--font-mono); + font-size: 0.78rem; + color: var(--clr-text-mid); + margin-bottom: 0.5rem; + word-break: break-word; +} + +.btn-retry { + align-self: flex-start; +} + +/* ══════════════════════════════════════════════════════════════════════ + DONE STEP + ══════════════════════════════════════════════════════════════════════ */ + +.done-step { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + justify-content: center; + min-height: 50vh; + gap: 1.5rem; +} + +.done-step h1 { + background: linear-gradient(90deg, var(--clr-success) 0%, var(--clr-accent) 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + font-size: 2.2rem; +} + +.done-step p { + color: var(--clr-text-mid); + max-width: 440px; + font-size: 0.92rem; +} + +.btn-restart { + min-width: 160px; + background: linear-gradient(90deg, var(--clr-accent), var(--clr-success)); + color: var(--clr-void); + font-weight: 500; +} + +.btn-restart:hover:not(:disabled) { + box-shadow: 0 0 28px rgba(0,229,160,0.25), 0 0 18px var(--clr-accent-glow); + opacity: 0.92; +} + +/* ── Accessibility / focus safety ───────────────────────────────────── */ +@media (prefers-reduced-motion: reduce) { + .step, + .step h1, + .step-subtitle, + .welcome-hero, + .welcome-hero h1, + .tagline, + .time-estimate, + .flavour-card, + .field-group, + .pref-item, + .apply-progress-container, + .apply-ready, + .apply-complete, + .apply-error { + animation: none !important; + transition: none !important; + } +} + +/* ── MAUI layout safety ─────────────────────────────────────────────── */ .status-bar-safe-area { display: none; } @@ -77,7 +770,7 @@ h1:focus { position: sticky; top: 0; height: env(safe-area-inset-top); - background-color: #f7f7f7; + background-color: var(--clr-void); width: 100%; z-index: 1; } diff --git a/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyStepTests.cs b/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyStepTests.cs new file mode 100644 index 0000000..e40a9d8 --- /dev/null +++ b/windows/welcome/tests/SilverOS.Welcome.Tests/ApplyStepTests.cs @@ -0,0 +1,72 @@ +using Bunit; +using Moq; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.DependencyInjection; +using SilverOS.Welcome.App.Components; +using SilverOS.Welcome.App.Components.Steps; +using SilverOS.Welcome.Core.Apply; +using SilverOS.Welcome.Core.Flavours; +using Xunit; + +public class ApplyStepTests : TestContext +{ + [Fact] + public async Task Calls_apply_with_the_wizard_selections() + { + var apply = new Mock(); + var state = new WizardState + { + Flavour = new FlavourManifest { Id = "daily-driver", Hardening = new() { Modules = new[] { "00" } } }, + Username = "alice", + Password = "pw", + AdminPassword = "apw", + BitLockerPin = "123456" + }; + Services.AddSingleton(state); + Services.AddSingleton(apply.Object); + var cut = RenderComponent(); + await cut.InvokeAsync(() => cut.Instance.StartAsync()); + apply.Verify(a => a.RunAsync( + It.Is(r => r.Username == "alice" && r.Flavour.Id == "daily-driver"), + It.IsAny>(), + It.IsAny()), Times.Once); + } + + [Fact] + public async Task OnComplete_invoked_when_apply_succeeds() + { + var apply = new Mock(); + apply.Setup(a => a.RunAsync(It.IsAny(), It.IsAny>(), It.IsAny())) + .Returns(Task.CompletedTask); + var state = new WizardState + { + Flavour = new FlavourManifest { Id = "daily-driver", Hardening = new() { Modules = new[] { "00" } } }, + Username = "alice", Password = "pw", AdminPassword = "apw", BitLockerPin = "123456" + }; + Services.AddSingleton(state); + Services.AddSingleton(apply.Object); + var completed = false; + var cut = RenderComponent(p => p.Add(s => s.OnComplete, EventCallback.Factory.Create(this, () => { completed = true; }))); + await cut.InvokeAsync(() => cut.Instance.StartAsync()); + Assert.True(completed); + } + + [Fact] + public async Task Shows_error_and_retry_button_when_apply_fails() + { + var apply = new Mock(); + apply.Setup(a => a.RunAsync(It.IsAny(), It.IsAny>(), It.IsAny())) + .ThrowsAsync(new InvalidOperationException("Module 03 failed")); + var state = new WizardState + { + Flavour = new FlavourManifest { Id = "daily-driver", Hardening = new() { Modules = new[] { "00" } } }, + Username = "alice", Password = "pw", AdminPassword = "apw", BitLockerPin = "123456" + }; + Services.AddSingleton(state); + Services.AddSingleton(apply.Object); + var cut = RenderComponent(); + await cut.InvokeAsync(() => cut.Instance.StartAsync()); + Assert.Contains("Module 03 failed", cut.Markup); + Assert.NotNull(cut.Find(".btn-retry")); + } +} From 346abc36769575961b57bbaa9114308378c9ec79 Mon Sep 17 00:00:00 2001 From: sysadmin Date: Tue, 9 Jun 2026 03:34:34 +0100 Subject: [PATCH 15/28] fix(welcome): apply re-entrancy guard, scrub error output, lock nav during apply, offline-bundle fonts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ApplyStep: guard StartAsync against double-invocation (_running check at top) - ApplyService: replace raw StdErr dump with scrubbed message (exit code + first non-empty line, ≤200 chars) - ApplyStep: SanitiseForDisplay strips newlines and caps error at 200 chars before rendering - ApplyStep: add OnRunningChanged EventCallback; Routes.razor disables Back while _applyRunning - Routes.razor: AdvanceToDone uses _stepTitles.Length - 1 instead of magic literal 5 - app.css: replace Google Fonts CDN @import with local @font-face rules; bundle DM Mono (300/400/500 + italic 300) and Inter (300/400/500) latin woff2 files under wwwroot/fonts/ Co-Authored-By: Claude Sonnet 4.6 --- .../Components/Routes.razor | 8 +- .../Components/Steps/ApplyStep.razor | 24 +++++- .../SilverOS.Welcome.App/wwwroot/css/app.css | 75 +++++++++++++++++- .../wwwroot/fonts/dm-mono-300.woff2 | Bin 0 -> 14784 bytes .../wwwroot/fonts/dm-mono-400.woff2 | Bin 0 -> 14820 bytes .../wwwroot/fonts/dm-mono-500.woff2 | Bin 0 -> 14988 bytes .../wwwroot/fonts/dm-mono-italic-300.woff2 | Bin 0 -> 15708 bytes .../wwwroot/fonts/inter-300.woff2 | Bin 0 -> 48256 bytes .../wwwroot/fonts/inter-400.woff2 | Bin 0 -> 48256 bytes .../wwwroot/fonts/inter-500.woff2 | Bin 0 -> 48256 bytes .../Apply/ApplyService.cs | 10 ++- 11 files changed, 109 insertions(+), 8 deletions(-) create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/fonts/dm-mono-300.woff2 create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/fonts/dm-mono-400.woff2 create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/fonts/dm-mono-500.woff2 create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/fonts/dm-mono-italic-300.woff2 create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/fonts/inter-300.woff2 create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/fonts/inter-400.woff2 create mode 100644 windows/welcome/src/SilverOS.Welcome.App/wwwroot/fonts/inter-500.woff2 diff --git a/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor b/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor index 26104f1..6adc307 100644 --- a/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor +++ b/windows/welcome/src/SilverOS.Welcome.App/Components/Routes.razor @@ -46,7 +46,7 @@ break; case 4: - + break; case 5: @@ -57,7 +57,7 @@