diff --git a/.github/workflows/does-it-build.yml b/.github/workflows/does-it-build.yml new file mode 100644 index 0000000..3e12049 --- /dev/null +++ b/.github/workflows/does-it-build.yml @@ -0,0 +1,114 @@ +name: build validation + +# run it on dispatch or for every PR +on: + pull_request: + workflow_dispatch: + + +env: + APPLE_ID: ${{ secrets.APPLE_ID }} + TEAM_ID: ${{ secrets.TEAM_ID }} + APP_SPECIFIC_PWD: ${{ secrets.APP_SPECIFIC_PWD }} + SIGNING_IDENTITY: ${{ secrets.SIGNING_IDENTITY }} + +jobs: + build-macos: + runs-on: macos-14 + steps: + - name: Checkout + uses: actions/checkout@v4.1.1 + - name: Setup .NET Core SDK + uses: actions/setup-dotnet@v3.2.0 + with: + dotnet-version: '8.0.x' + - name: restore workloads + run: | + cd $GITHUB_WORKSPACE/src + dotnet workload restore + - name: run housekeeping scripts + run: | + sudo xcode-select -s /Applications/Xcode_16.app + cd $GITHUB_WORKSPACE/scripts + bash housekeeping.sh + - name: Install the Apple certificate and provisioning profile + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} + P12_PASSWORD: ${{ secrets.P12_PASSWORD }} + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + run: | + # create variables + CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 + PP_PATH=$RUNNER_TEMP/build_pp.provisionprofile + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + + # import certificate and provisioning profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH + echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH + + # create temporary keychain + security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + + # import certificate to keychain + security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH + + # apply provisioning profile + mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles + cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles + + - name: run build scripts + run: | + cd $GITHUB_WORKSPACE/scripts + bash build-macos.sh + - uses: actions/upload-artifact@v3.1.3 + with: + name: macosx64file + path: ${{ github.workspace }}/src/bin/Release/net8.0-macos/osx-x64/publish/*.zip + - uses: actions/upload-artifact@v3.1.3 + with: + name: macosarm64file + path: ${{ github.workspace }}/src/bin/Release/net8.0-macos/osx-arm64/publish/*.zip + + build-windows: + runs-on: windows-latest + steps: + - name: Checkout + uses: actions/checkout@v4.1.1 + - name: Setup .NET Core SDK + uses: actions/setup-dotnet@v3.2.0 + with: + dotnet-version: '8.0.x' + - name: restore workloads + shell: bash + run: | + cd $GITHUB_WORKSPACE/src + dotnet workload restore + - name: run housekeeping scripts + shell: bash + run: | + cd $GITHUB_WORKSPACE/scripts + bash housekeeping.sh + - name: run build scripts + shell: bash + run: | + cd $GITHUB_WORKSPACE/scripts + bash build-windows.sh + echo "windowsarm64file=$windowsarm64file" >> $GITHUB_ENV + echo "windowsx64file=$windowsx64file" >> $GITHUB_ENV + echo "windowsx86file=$windowsx86file" >> $GITHUB_ENV + - uses: actions/upload-artifact@v3.1.3 + with: + name: windowsx86file + path: ${{ github.workspace }}\src\*arm64.zip + - uses: actions/upload-artifact@v3.1.3 + with: + name: windowsx64file + path: ${{ github.workspace }}\src\*x64.zip + - uses: actions/upload-artifact@v3.1.3 + with: + name: windowsarm64file + path: ${{ github.workspace }}\src\*x86.zip \ No newline at end of file diff --git a/src/.editorconfig b/src/.editorconfig new file mode 100644 index 0000000..304b5d0 --- /dev/null +++ b/src/.editorconfig @@ -0,0 +1,315 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Don't use tabs for indentation. +[*] +indent_style = tab +# (Please don't specify an indent_size here; that has too many unintended consequences.) +spelling_exclusion_path = SpellingExclusions.dic + +# Code files +[*.{cs,csx,vb,vbx}] +indent_size = 4 +insert_final_newline = true +charset = utf-8-bom + +# XML project files +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}] +indent_size = 2 + +# XML config files +[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] +indent_size = 2 + +# JSON files +[*.json] +indent_size = 2 + +# Powershell files +[*.ps1] +indent_size = 2 + +# Shell script files +[*.sh] +end_of_line = lf +indent_size = 2 + +# Dotnet code style settings: +[*.{cs,vb}] + +# Sort using and Import directives with System.* appearing first +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false +# Avoid "this." and "Me." if not necessary +dotnet_style_qualification_for_field = false:refactoring +dotnet_style_qualification_for_property = false:refactoring +dotnet_style_qualification_for_method = false:refactoring +dotnet_style_qualification_for_event = false:refactoring + +# Use language keywords instead of framework type names for type references +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion + +# Suggest more modern language features when available +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion + +# Whitespace options +dotnet_style_allow_multiple_blank_lines_experimental = false + +# Non-private static fields are PascalCase +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields +dotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style + +dotnet_naming_symbols.non_private_static_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_static_fields.required_modifiers = static + +dotnet_naming_style.non_private_static_field_style.capitalization = pascal_case + +# Non-private readonly fields are PascalCase +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields +dotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style + +dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected +dotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly + +dotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case + +# Constants are PascalCase +dotnet_naming_rule.constants_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constants_should_be_pascal_case.symbols = constants +dotnet_naming_rule.constants_should_be_pascal_case.style = constant_style + +dotnet_naming_symbols.constants.applicable_kinds = field, local +dotnet_naming_symbols.constants.required_modifiers = const + +dotnet_naming_style.constant_style.capitalization = pascal_case + +# Static fields are camelCase and start with s_ +dotnet_naming_rule.static_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.static_fields_should_be_camel_case.symbols = static_fields +dotnet_naming_rule.static_fields_should_be_camel_case.style = static_field_style + +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.required_modifiers = static + +dotnet_naming_style.static_field_style.capitalization = camel_case +#dotnet_naming_style.static_field_style.required_prefix = s_ + +# Instance fields are camelCase and start with _ +dotnet_naming_rule.instance_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields +dotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style + +dotnet_naming_symbols.instance_fields.applicable_kinds = field + +dotnet_naming_style.instance_field_style.capitalization = camel_case +dotnet_naming_style.instance_field_style.required_prefix = _ + +# Locals and parameters are camelCase +dotnet_naming_rule.locals_should_be_camel_case.severity = suggestion +dotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters +dotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style + +dotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local + +dotnet_naming_style.camel_case_style.capitalization = camel_case + +# Local functions are PascalCase +dotnet_naming_rule.local_functions_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions +dotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style + +dotnet_naming_symbols.local_functions.applicable_kinds = local_function + +dotnet_naming_style.local_function_style.capitalization = pascal_case + +# By default, name items with PascalCase +dotnet_naming_rule.members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.members_should_be_pascal_case.symbols = all_members +dotnet_naming_rule.members_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.all_members.applicable_kinds = * + +dotnet_naming_style.pascal_case_style.capitalization = pascal_case + +# internal and private fields should be _camelCase +dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion +dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields +dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style + +dotnet_naming_symbols.private_internal_fields.applicable_kinds = field +dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal + +dotnet_naming_style.camel_case_underscore_style.required_prefix = _ +dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case + + +file_header_template = Licensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the MIT license.\nSee the LICENSE file in the project root for more information. + +# RS0016: Only enable if API files are present +dotnet_public_api_analyzer.require_api_files = true + +# IDE0055: Fix formatting +# Workaround for https://github.com/dotnet/roslyn/issues/70570 +dotnet_diagnostic.IDE0055.severity = warning + +# CSharp code style settings: +[*.cs] +# Newline settings +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_switch_labels = true +csharp_indent_labels = flush_left + +# Whitespace options +csharp_style_allow_embedded_statements_on_same_line_experimental = false +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = false +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = false + +# Prefer "var" everywhere +csharp_style_var_for_built_in_types = true:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion +csharp_style_var_elsewhere = true:suggestion + +# Prefer method-like constructs to have a block body +csharp_style_expression_bodied_methods = false:none +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_operators = false:none + +# Prefer property-like constructs to have an expression-body +csharp_style_expression_bodied_properties = true:none +csharp_style_expression_bodied_indexers = true:none +csharp_style_expression_bodied_accessors = true:none + +# Suggest more modern language features when available +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_throw_expression = true:suggestion +csharp_style_conditional_delegate_call = true:suggestion +csharp_style_prefer_extended_property_pattern = true:suggestion + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = do_not_ignore +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Blocks are allowed +csharp_prefer_braces = true:silent +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true + +# IDE0060: Remove unused parameter +dotnet_diagnostic.IDE0060.severity = warning + +[src/{Compilers,ExpressionEvaluator,Scripting}/**Test**/*.{cs,vb}] + +# IDE0060: Remove unused parameter +dotnet_diagnostic.IDE0060.severity = none + +[src/{Analyzers,CodeStyle,Features,Workspaces,EditorFeatures,VisualStudio}/**/*.{cs,vb}] + +# IDE0011: Add braces +csharp_prefer_braces = when_multiline:warning +# NOTE: We need the below severity entry for Add Braces due to https://github.com/dotnet/roslyn/issues/44201 +dotnet_diagnostic.IDE0011.severity = warning + +# IDE0040: Add accessibility modifiers +dotnet_diagnostic.IDE0040.severity = warning + +# IDE0052: Remove unread private member +dotnet_diagnostic.IDE0052.severity = warning + +# IDE0059: Unnecessary assignment to a value +dotnet_diagnostic.IDE0059.severity = warning + +# CA1012: Abstract types should not have public constructors +dotnet_diagnostic.CA1012.severity = warning + +# CA1822: Make member static +dotnet_diagnostic.CA1822.severity = warning + +# Prefer "var" everywhere +dotnet_diagnostic.IDE0007.severity = warning +csharp_style_var_for_built_in_types = true:warning +csharp_style_var_when_type_is_apparent = true:warning +csharp_style_var_elsewhere = true:warning + +# csharp_style_allow_embedded_statements_on_same_line_experimental +dotnet_diagnostic.IDE2001.severity = warning + +# csharp_style_allow_blank_lines_between_consecutive_braces_experimental +dotnet_diagnostic.IDE2002.severity = warning + +# csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental +dotnet_diagnostic.IDE2004.severity = warning + +# csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental +dotnet_diagnostic.IDE2005.severity = warning + +# csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental +dotnet_diagnostic.IDE2006.severity = warning + +[src/{VisualStudio}/**/*.{cs,vb}] +# CA1822: Make member static +# There is a risk of accidentally breaking an internal API that partners rely on though IVT. +dotnet_code_quality.CA1822.api_surface = private + +[**/{ExternalAccess}/**/*.{cs,vb}] + +# RS0016: Only enable if API files are present +dotnet_public_api_analyzer.require_api_files = true + +dotnet_diagnostic.RS0051.severity = error +dotnet_diagnostic.RS0052.severity = error +dotnet_diagnostic.RS0053.severity = error +dotnet_diagnostic.RS0054.severity = error +dotnet_diagnostic.RS0055.severity = error +dotnet_diagnostic.RS0056.severity = error +dotnet_diagnostic.RS0057.severity = error +dotnet_diagnostic.RS0058.severity = error +dotnet_diagnostic.RS0059.severity = error +dotnet_diagnostic.RS0060.severity = error +dotnet_diagnostic.RS0061.severity = error \ No newline at end of file diff --git a/src/AboutWindow.axaml b/src/AboutWindow.axaml index 5d4c407..6d197bf 100644 --- a/src/AboutWindow.axaml +++ b/src/AboutWindow.axaml @@ -48,7 +48,7 @@ + Duration="0:0:0.19" /> @@ -60,12 +60,12 @@ Margin="0,0,0,10"> @@ -113,9 +113,10 @@ Tapped="SupportButton_Clicked" /> + Text="" /> diff --git a/src/AboutWindow.axaml.cs b/src/AboutWindow.axaml.cs index c6db7fd..cd0b281 100644 --- a/src/AboutWindow.axaml.cs +++ b/src/AboutWindow.axaml.cs @@ -1,13 +1,7 @@ -using System.Reflection; -using Avalonia; -using Avalonia.Animation; -using Avalonia.Animation.Easings; +using System.Reflection; using Avalonia.Controls; using Avalonia.Media; -using Avalonia.Media.Imaging; -using Avalonia.Styling; using Dots.Helpers; -using Newtonsoft.Json.Linq; #if MACOS using Foundation; @@ -15,7 +9,7 @@ namespace Dots { - public partial class AboutWindow : Window + public partial class AboutWindow : Window { bool _imageFlipped; bool _canFlipBack; @@ -33,6 +27,7 @@ public AboutWindow() var v = NSBundle.MainBundle.ObjectForInfoDictionary("CFBundleVersion")?.ToString(); VersionRun.Text = v; #endif + CreditsTextBlock.Text = $"©️ {DateTime.Now.Year} Joachim Leonfellner"; } private void OpenSourceButton_Clicked(object? sender, Avalonia.Input.TappedEventArgs e) diff --git a/src/App.axaml b/src/App.axaml index 6a3cae8..096e5c8 100644 --- a/src/App.axaml +++ b/src/App.axaml @@ -12,8 +12,15 @@ #2da44e #bf8700 #cf222e + #e16f24 + #eac54f #3483eb #3496eb + + #a475f9 + #e85aad + #116329 + #7d4e00 #38343d #4B4552 @@ -25,6 +32,7 @@ avares://Dots/Assets/Fonts/SpaceGrotesk.ttf#Space Grotesk avares://Dots/Assets/Fonts/SpaceGrotesk-Bold.ttf#Space Grotesk avares://Dots/Assets/Fonts/Lucide.ttf#lucide + avares://Dots/Assets/Fonts/LED-Dot-Matrix.ttf#LED Dot-Matrix avares://Dots/Assets/iconlogo.png avares://Dots/Assets/iconlogoback.png @@ -44,7 +52,13 @@ Color="{StaticResource Danger}" /> + + + + + + diff --git a/src/Assets/Fonts/LED-Dot-Matrix.ttf b/src/Assets/Fonts/LED-Dot-Matrix.ttf new file mode 100644 index 0000000..1be9221 Binary files /dev/null and b/src/Assets/Fonts/LED-Dot-Matrix.ttf differ diff --git a/src/Assets/Fonts/Lucide.ttf b/src/Assets/Fonts/Lucide.ttf index b195b2a..b73302a 100644 Binary files a/src/Assets/Fonts/Lucide.ttf and b/src/Assets/Fonts/Lucide.ttf differ diff --git a/src/Constants.cs b/src/Constants.cs index 3628271..87e4463 100644 --- a/src/Constants.cs +++ b/src/Constants.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Avalonia.Media; namespace Dots; @@ -48,4 +49,13 @@ public class Constants public const string InstallingText = "Installing..."; public const string UninstallingText = "Uninstalling..."; public const string OpeningText = "Opening..."; -} \ No newline at end of file + + public const string CleanupText = "These SDKs are have newer versions installed or are EOL. Do you want to remove them?"; + public const string UpdateText = "These are the latest SDKs available that have an active support lifecycle. Do you want to update them?"; + public const string UpdateButtonText = "Update"; + public const string CleanupButtonText = "Cleanup"; + public const string CancelButtonText = "Cancel"; + + public static IBrush CleanupBrush = new SolidColorBrush(Color.Parse("#bf8700")); + public static IBrush UpdateBrush = new SolidColorBrush(Color.Parse("#2da44e")); +} diff --git a/src/Data/ReleaseIndex.cs b/src/Data/ReleaseIndex.cs index 9a67d9d..845f8de 100644 --- a/src/Data/ReleaseIndex.cs +++ b/src/Data/ReleaseIndex.cs @@ -5,135 +5,139 @@ namespace Dots.Data; public class ReleaseIndexInfo { - [JsonPropertyName("releases-index")] - public ReleaseIndex[] ReleasesIndex { get; set; } + [JsonPropertyName("releases-index")] + public ReleaseIndex[] ReleasesIndex { get; set; } } public class ReleaseIndex { - [JsonPropertyName("channel-version")] - public string ChannelVersion { get; set; } + [JsonPropertyName("channel-version")] + public string ChannelVersion { get; set; } - [JsonPropertyName("latest-release")] - public string LatestRelease { get; set; } + [JsonPropertyName("latest-release")] + public string LatestRelease { get; set; } - [JsonPropertyName("latest-release-date")] - public DateTimeOffset LatestReleaseDate { get; set; } + [JsonPropertyName("latest-release-date")] + public DateTimeOffset LatestReleaseDate { get; set; } - [JsonPropertyName("security")] - public bool Security { get; set; } + [JsonPropertyName("security")] + public bool Security { get; set; } - [JsonPropertyName("latest-runtime")] - public string LatestRuntime { get; set; } + [JsonPropertyName("latest-runtime")] + public string LatestRuntime { get; set; } - [JsonPropertyName("latest-sdk")] - public string LatestSdk { get; set; } + [JsonPropertyName("latest-sdk")] + public string LatestSdk { get; set; } - [JsonPropertyName("product")] - public Product Product { get; set; } + [JsonPropertyName("product")] + public Product Product { get; set; } - [JsonPropertyName("release-type")] - public ReleaseType ReleaseType { get; set; } + [JsonPropertyName("release-type")] + public ReleaseType ReleaseType { get; set; } - [JsonPropertyName("support-phase")] - public SupportPhase SupportPhase { get; set; } + [JsonPropertyName("support-phase")] + public SupportPhase SupportPhase { get; set; } - [JsonPropertyName("eol-date")] - public DateTimeOffset? EolDate { get; set; } + [JsonPropertyName("eol-date")] + public DateTimeOffset? EolDate { get; set; } - [JsonPropertyName("releases.json")] - public Uri ReleasesJson { get; set; } + [JsonPropertyName("releases.json")] + public Uri ReleasesJson { get; set; } } public enum Product { Net, NetCore, Undefined }; public enum ReleaseType { Lts, Sts, Undefined }; -public enum SupportPhase { Active, Eol, Preview, Undefined }; +public enum SupportPhase { Active, Eol, Preview, GoLive, Maintenance, Undefined }; public class ProductEnumConverter : JsonConverter { - public override Product Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - return reader.GetString() switch - { - ".NET" => Product.Net, - ".NET Core" => Product.NetCore, - _ => Product.Undefined - }; - } - - public override void Write(Utf8JsonWriter writer, Product value, JsonSerializerOptions options) - { - writer.WriteStringValue(value switch - { - Product.Net => ".NET", - Product.NetCore => ".NET Core", - _ => "" - }); - } + public override Product Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return reader.GetString() switch + { + ".NET" => Product.Net, + ".NET Core" => Product.NetCore, + _ => Product.Undefined + }; + } + + public override void Write(Utf8JsonWriter writer, Product value, JsonSerializerOptions options) + { + writer.WriteStringValue(value switch + { + Product.Net => ".NET", + Product.NetCore => ".NET Core", + _ => "" + }); + } } public class ReleaseTypeEnumConverter : JsonConverter { - public override ReleaseType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - return reader.GetString() switch - { - "lts" => ReleaseType.Lts, - "sts" => ReleaseType.Sts, - _ => ReleaseType.Undefined - }; - } - - public override void Write(Utf8JsonWriter writer, ReleaseType value, JsonSerializerOptions options) - { - writer.WriteStringValue(value switch - { - ReleaseType.Lts => "lts", - ReleaseType.Sts => "sts", - _ => "" - }); - } + public override ReleaseType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return reader.GetString() switch + { + "lts" => ReleaseType.Lts, + "sts" => ReleaseType.Sts, + _ => ReleaseType.Undefined + }; + } + + public override void Write(Utf8JsonWriter writer, ReleaseType value, JsonSerializerOptions options) + { + writer.WriteStringValue(value switch + { + ReleaseType.Lts => "lts", + ReleaseType.Sts => "sts", + _ => "" + }); + } } public class SupportPhaseEnumConverter : JsonConverter { - public override SupportPhase Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - return reader.GetString() switch - { - "preview" => SupportPhase.Preview, - "active" => SupportPhase.Active, - "eol" => SupportPhase.Eol, - _ => SupportPhase.Undefined - }; - } - - public override void Write(Utf8JsonWriter writer, SupportPhase value, JsonSerializerOptions options) - { - writer.WriteStringValue(value switch - { - SupportPhase.Preview => "preview", - SupportPhase.Active => "active", - SupportPhase.Eol => "eol", - _ => "" - }); - } + public override SupportPhase Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return reader.GetString() switch + { + "preview" => SupportPhase.Preview, + "active" => SupportPhase.Active, + "eol" => SupportPhase.Eol, + "go-live" => SupportPhase.GoLive, + "maintenance" => SupportPhase.Maintenance, + _ => SupportPhase.Undefined + }; + } + + public override void Write(Utf8JsonWriter writer, SupportPhase value, JsonSerializerOptions options) + { + writer.WriteStringValue(value switch + { + SupportPhase.Preview => "preview", + SupportPhase.Active => "active", + SupportPhase.Eol => "eol", + SupportPhase.GoLive => "go-live", + SupportPhase.Maintenance => "maintenance", + _ => "" + }); + } } public class ReleaseSerializerOptions { - public static JsonSerializerOptions Options { get; } = new JsonSerializerOptions - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - Converters = - { - new ProductEnumConverter(), - new RidEnumConverter(), - new ReleaseTypeEnumConverter(), - new SupportPhaseEnumConverter() - } - }; -} \ No newline at end of file + public static JsonSerializerOptions Options { get; } = new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + Converters = + { + new ProductEnumConverter(), + new RidEnumConverter(), + new ReleaseTypeEnumConverter(), + new SupportPhaseEnumConverter() + } + }; +} diff --git a/src/Data/ReleaseInfo.cs b/src/Data/ReleaseInfo.cs index 0dd4837..669d7b4 100644 --- a/src/Data/ReleaseInfo.cs +++ b/src/Data/ReleaseInfo.cs @@ -7,186 +7,193 @@ namespace Dots.Data; public partial class ReleaseInfo { - [JsonPropertyName("channel-version")] - public string ChannelVersion { get; set; } + [JsonPropertyName("channel-version")] + public string ChannelVersion { get; set; } - [JsonPropertyName("latest-release")] - public string LatestRelease { get; set; } + [JsonPropertyName("latest-release")] + public string LatestRelease { get; set; } - [JsonPropertyName("latest-release-date")] - public DateTimeOffset LatestReleaseDate { get; set; } + [JsonPropertyName("latest-release-date")] + public DateTimeOffset LatestReleaseDate { get; set; } - [JsonPropertyName("latest-runtime")] - public string LatestRuntime { get; set; } + [JsonPropertyName("latest-runtime")] + public string LatestRuntime { get; set; } - [JsonPropertyName("latest-sdk")] - public string LatestSdk { get; set; } + [JsonPropertyName("latest-sdk")] + public string LatestSdk { get; set; } - [JsonPropertyName("release-type")] - public string ReleaseType { get; set; } + [JsonPropertyName("release-type")] + public string ReleaseType { get; set; } - [JsonPropertyName("support-phase")] - public string SupportPhase { get; set; } + [JsonPropertyName("support-phase")] + public string SupportPhase { get; set; } - [JsonPropertyName("eol-date")] - public DateTimeOffset EolDate { get; set; } + [JsonPropertyName("eol-date")] + public DateTimeOffset EolDate { get; set; } - [JsonPropertyName("lifecycle-policy")] - public Uri LifecyclePolicy { get; set; } + [JsonPropertyName("lifecycle-policy")] + public Uri LifecyclePolicy { get; set; } - [JsonPropertyName("releases")] - public Release[] Releases { get; set; } + [JsonPropertyName("releases")] + public Release[] Releases { get; set; } } public partial class Release { - [JsonPropertyName("release-date")] - public DateTimeOffset ReleaseDate { get; set; } + [JsonPropertyName("release-date")] + public DateTimeOffset ReleaseDate { get; set; } - [JsonPropertyName("release-version")] - public string ReleaseVersion { get; set; } + [JsonPropertyName("release-version")] + public string ReleaseVersion { get; set; } - [JsonPropertyName("security")] - public bool Security { get; set; } + [JsonPropertyName("security")] + public bool Security { get; set; } - [JsonPropertyName("cve-list")] - public CveList[] CveList { get; set; } + [JsonPropertyName("cve-list")] + public CveList[] CveList { get; set; } - [JsonPropertyName("release-notes")] - public Uri ReleaseNotes { get; set; } + [JsonPropertyName("release-notes")] + public Uri ReleaseNotes { get; set; } - [JsonPropertyName("runtime")] - public Runtime Runtime { get; set; } + [JsonPropertyName("runtime")] + public Runtime Runtime { get; set; } - [JsonPropertyName("sdk")] - public SdkInfo Sdk { get; set; } + [JsonPropertyName("sdk")] + public SdkInfo Sdk { get; set; } - [JsonPropertyName("sdks")] - public SdkInfo[] Sdks { get; set; } + [JsonPropertyName("sdks")] + public SdkInfo[] Sdks { get; set; } - [JsonPropertyName("aspnetcore-runtime")] - public AspnetcoreRuntime AspnetcoreRuntime { get; set; } + [JsonPropertyName("aspnetcore-runtime")] + public AspnetcoreRuntime AspnetcoreRuntime { get; set; } - [JsonPropertyName("windowsdesktop")] - public Windowsdesktop Windowsdesktop { get; set; } + [JsonPropertyName("windowsdesktop")] + public Windowsdesktop Windowsdesktop { get; set; } - [JsonIgnore] - public bool Preview => Sdk.Version.Contains("-"); + [JsonIgnore] + public bool Preview => Sdk.Version.Contains("-"); - [JsonIgnore] - public bool SupportPhase { get; set; } + + [JsonIgnore] + public SupportPhase SupportPhase { get; set; } + + [JsonIgnore] + public ReleaseType ReleaseType { get; set; } } public partial class AspnetcoreRuntime { - [JsonPropertyName("version")] - public string Version { get; set; } + [JsonPropertyName("version")] + public string Version { get; set; } - [JsonPropertyName("version-display")] - public string VersionDisplay { get; set; } + [JsonPropertyName("version-display")] + public string VersionDisplay { get; set; } - [JsonPropertyName("version-aspnetcoremodule")] - public string[] VersionAspnetcoremodule { get; set; } + [JsonPropertyName("version-aspnetcoremodule")] + public string[] VersionAspnetcoremodule { get; set; } - [JsonPropertyName("vs-version")] - public string VsVersion { get; set; } + [JsonPropertyName("vs-version")] + public string VsVersion { get; set; } - [JsonPropertyName("files")] - public FileInfo[] Files { get; set; } + [JsonPropertyName("files")] + public FileInfo[] Files { get; set; } } public partial class FileInfo { - [JsonPropertyName("name")] - public string Name { get; set; } + [JsonPropertyName("name")] + public string Name { get; set; } - [JsonPropertyName("rid")] - public Rid Rid { get; set; } + [JsonPropertyName("rid")] + public Rid Rid { get; set; } - [JsonPropertyName("url")] - public Uri Url { get; set; } + [JsonPropertyName("url")] + public Uri Url { get; set; } - [JsonPropertyName("hash")] - public string Hash { get; set; } + [JsonPropertyName("hash")] + public string Hash { get; set; } - [JsonPropertyName("akams")] - public Uri Akams { get; set; } + [JsonPropertyName("akams")] + public Uri Akams { get; set; } + + [JsonIgnore] + public string FileName => Url.ToString().Split('/').Last(); } public partial class CveList { - [JsonPropertyName("cve-id")] - public string CveId { get; set; } + [JsonPropertyName("cve-id")] + public string CveId { get; set; } - [JsonPropertyName("cve-url")] - public Uri CveUrl { get; set; } + [JsonPropertyName("cve-url")] + public Uri CveUrl { get; set; } } public partial class Runtime { - [JsonPropertyName("version")] - public string Version { get; set; } + [JsonPropertyName("version")] + public string Version { get; set; } - [JsonPropertyName("version-display")] - public string VersionDisplay { get; set; } + [JsonPropertyName("version-display")] + public string VersionDisplay { get; set; } - [JsonPropertyName("vs-version")] - public string VsVersion { get; set; } + [JsonPropertyName("vs-version")] + public string VsVersion { get; set; } - [JsonPropertyName("vs-mac-version")] - public string VsMacVersion { get; set; } + [JsonPropertyName("vs-mac-version")] + public string VsMacVersion { get; set; } - [JsonPropertyName("files")] - public FileInfo[] Files { get; set; } + [JsonPropertyName("files")] + public FileInfo[] Files { get; set; } } public partial class SdkInfo { - [Searchable] - [JsonPropertyName("version")] - public string Version { get; set; } + [Searchable] + [JsonPropertyName("version")] + public string Version { get; set; } - [JsonPropertyName("version-display")] - public string VersionDisplay { get; set; } + [JsonPropertyName("version-display")] + public string VersionDisplay { get; set; } - [JsonPropertyName("runtime-version")] - public string RuntimeVersion { get; set; } + [JsonPropertyName("runtime-version")] + public string RuntimeVersion { get; set; } - [JsonPropertyName("vs-version")] - public string VsVersion { get; set; } + [JsonPropertyName("vs-version")] + public string VsVersion { get; set; } - [JsonPropertyName("vs-mac-version")] - public string VsMacVersion { get; set; } + [JsonPropertyName("vs-mac-version")] + public string VsMacVersion { get; set; } - [JsonPropertyName("vs-support")] - public string VsSupport { get; set; } + [JsonPropertyName("vs-support")] + public string VsSupport { get; set; } - [JsonPropertyName("vs-mac-support")] - public string VsMacSupport { get; set; } + [JsonPropertyName("vs-mac-support")] + public string VsMacSupport { get; set; } - [JsonPropertyName("csharp-version")] - public string CsharpVersion { get; set; } + [JsonPropertyName("csharp-version")] + public string CsharpVersion { get; set; } - [JsonPropertyName("fsharp-version")] - public string FsharpVersion { get; set; } + [JsonPropertyName("fsharp-version")] + public string FsharpVersion { get; set; } - [JsonPropertyName("vb-version")] - public string VbVersion { get; set; } + [JsonPropertyName("vb-version")] + public string VbVersion { get; set; } - [JsonPropertyName("files")] - public FileInfo[] Files { get; set; } + [JsonPropertyName("files")] + public FileInfo[] Files { get; set; } } public partial class Windowsdesktop { - [JsonPropertyName("version")] - public string Version { get; set; } + [JsonPropertyName("version")] + public string Version { get; set; } - [JsonPropertyName("version-display")] - public string VersionDisplay { get; set; } + [JsonPropertyName("version-display")] + public string VersionDisplay { get; set; } - [JsonPropertyName("files")] - public FileInfo[] Files { get; set; } + [JsonPropertyName("files")] + public FileInfo[] Files { get; set; } } public enum Rid { Empty, LinuxArm, LinuxArm64, LinuxMusl, LinuxMuslArm, LinuxMuslArm64, LinuxMuslX64, LinuxX64, OsxArm64, OsxX64, WinArm, WinArm64, WinX64, WinX86, WinX86X64, RhelX64, Rhel6X64, Fedora27X64, Fedora28X64, CentosX64, Debian9X64, OpenSuse423X64, UbuntuX64, Ubuntu1604X64, Ubuntu1804X64, DebianX64, Fedora27, Fedora28, Opensuse423, Ubuntu1604, Ubuntu1804, Fedora24X64, Fedora23X64, Opensuse132X64, Ubuntu1610X64, Opensuse421X64, Ubuntu1610 }; @@ -194,109 +201,109 @@ public enum Rid { Empty, LinuxArm, LinuxArm64, LinuxMusl, LinuxMuslArm, LinuxMus public class RidEnumConverter : JsonConverter { - public override Rid Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - if (reader.TokenType != JsonTokenType.String) - throw new JsonException(); - - var value = reader.GetString(); - if (value == "") - return Rid.Empty; - - return value switch - { - "linux-arm" => Rid.LinuxArm, - "linux-arm64" => Rid.LinuxArm64, - "linux-musl" => Rid.LinuxMusl, - "linux-musl-arm" => Rid.LinuxMuslArm, - "linux-musl-arm64" => Rid.LinuxMuslArm64, - "linux-musl-x64" => Rid.LinuxMuslX64, - "linux-x64" => Rid.LinuxX64, - "osx-arm64" => Rid.OsxArm64, - "osx-x64" => Rid.OsxX64, - "win-arm" => Rid.WinArm, - "win-arm64" => Rid.WinArm64, - "win-x64" => Rid.WinX64, - "win-x86" => Rid.WinX86, - "rhel.6-x64" => Rid.Rhel6X64, - "rhel-x64" => Rid.RhelX64, - "win-x86_x64" => Rid.WinX86X64, - "fedora.27-x64" => Rid.Fedora27X64, - "fedora.28-x64" => Rid.Fedora28X64, - "centos-x64" => Rid.Fedora27X64, - "debian.9-x64" => Rid.Fedora27X64, - "opensuse.42.3-x64" => Rid.OpenSuse423X64, - "ubuntu-x64" => Rid.UbuntuX64, - "ubuntu.16.04-x64" => Rid.Ubuntu1604X64, - "ubuntu.18.04-x64" => Rid.Ubuntu1804X64, - "debian-x64" => Rid.DebianX64, - "fedora.27" => Rid.Fedora27, - "fedora.28" => Rid.Fedora28, - "opensuse.42.3" => Rid.Opensuse423, - "ubuntu.16.04" => Rid.Ubuntu1604, - "ubuntu.18.04" => Rid.Ubuntu1804, - "fedora.24-x64" => Rid.Fedora24X64, - "fedora.23-x64" => Rid.Fedora23X64, - "opensuse.13.2-x64" => Rid.Opensuse132X64, - "ubuntu.16.10-x64" => Rid.Ubuntu1610X64, - "opensuse.42.1-x64" => Rid.Opensuse421X64, - "ubuntu.16.10" => Rid.Ubuntu1610, - "" => Rid.Empty, - _ => PrintDiscard(value) - }; - } - - - - - Rid PrintDiscard(string v) - { - //Analytics.TrackEvent("RID Discarded", new Dictionary { { "value", v } }); - return Rid.Empty; - } - - public override void Write(Utf8JsonWriter writer, Rid value, JsonSerializerOptions options) - { - writer.WriteStringValue(value switch - { - Rid.Empty => "", - Rid.LinuxArm => "linux-arm", - Rid.LinuxArm64 => "linux-arm64", - Rid.LinuxMusl => "linux-musl", - Rid.LinuxMuslArm => "linux-musl-arm", - Rid.LinuxMuslArm64 => "linux-musl-arm64", - Rid.LinuxMuslX64 => "linux-musl-x64", - Rid.LinuxX64 => "linux-x64", - Rid.OsxArm64 => "osx-arm64", - Rid.OsxX64 => "osx-x64", - Rid.WinArm => "win-arm", - Rid.WinArm64 => "win-arm64", - Rid.WinX64 => "win-x64", - Rid.WinX86 => "win-x86", - Rid.Rhel6X64 => "rhel.6-x64", - Rid.RhelX64 => "rhel-x64", - Rid.WinX86X64 => "win-x86_x64", - Rid.Fedora27X64 => "fedora.27-x64", - Rid.Fedora28X64 => "fedora.28-x64", - Rid.CentosX64 => "centos-x64", - Rid.Debian9X64 => "debian.9-x64", - Rid.OpenSuse423X64 => "opensuse.42.3-x64", - Rid.UbuntuX64 => "UbuntuX64", - Rid.Ubuntu1604X64 => "ubuntu.16.04-x64", - Rid.Ubuntu1804X64 => "ubuntu.18.04-x64", - Rid.DebianX64 => "debian-x64", - Rid.Fedora27 => "fedora.27", - Rid.Fedora28 => "fedora.28", - Rid.Opensuse423 => "opensuse.42.3", - Rid.Ubuntu1604 => "ubuntu.16.04", - Rid.Ubuntu1804 => "ubuntu.18.04", - Rid.Fedora24X64 => "fedora.24-x64", - Rid.Fedora23X64 => "fedora.23-x64", - Rid.Opensuse132X64 => "opensuse.13.2-x64", - Rid.Ubuntu1610X64 => "ubuntu.16.10-x64", - Rid.Opensuse421X64 => "opensuse.42.1-x64", - Rid.Ubuntu1610 => "ubuntu.16.10", - _ => throw new NotSupportedException(), - }); - } -} \ No newline at end of file + public override Rid Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType != JsonTokenType.String) + throw new JsonException(); + + var value = reader.GetString(); + if (value == "") + return Rid.Empty; + + return value switch + { + "linux-arm" => Rid.LinuxArm, + "linux-arm64" => Rid.LinuxArm64, + "linux-musl" => Rid.LinuxMusl, + "linux-musl-arm" => Rid.LinuxMuslArm, + "linux-musl-arm64" => Rid.LinuxMuslArm64, + "linux-musl-x64" => Rid.LinuxMuslX64, + "linux-x64" => Rid.LinuxX64, + "osx-arm64" => Rid.OsxArm64, + "osx-x64" => Rid.OsxX64, + "win-arm" => Rid.WinArm, + "win-arm64" => Rid.WinArm64, + "win-x64" => Rid.WinX64, + "win-x86" => Rid.WinX86, + "rhel.6-x64" => Rid.Rhel6X64, + "rhel-x64" => Rid.RhelX64, + "win-x86_x64" => Rid.WinX86X64, + "fedora.27-x64" => Rid.Fedora27X64, + "fedora.28-x64" => Rid.Fedora28X64, + "centos-x64" => Rid.Fedora27X64, + "debian.9-x64" => Rid.Fedora27X64, + "opensuse.42.3-x64" => Rid.OpenSuse423X64, + "ubuntu-x64" => Rid.UbuntuX64, + "ubuntu.16.04-x64" => Rid.Ubuntu1604X64, + "ubuntu.18.04-x64" => Rid.Ubuntu1804X64, + "debian-x64" => Rid.DebianX64, + "fedora.27" => Rid.Fedora27, + "fedora.28" => Rid.Fedora28, + "opensuse.42.3" => Rid.Opensuse423, + "ubuntu.16.04" => Rid.Ubuntu1604, + "ubuntu.18.04" => Rid.Ubuntu1804, + "fedora.24-x64" => Rid.Fedora24X64, + "fedora.23-x64" => Rid.Fedora23X64, + "opensuse.13.2-x64" => Rid.Opensuse132X64, + "ubuntu.16.10-x64" => Rid.Ubuntu1610X64, + "opensuse.42.1-x64" => Rid.Opensuse421X64, + "ubuntu.16.10" => Rid.Ubuntu1610, + "" => Rid.Empty, + _ => PrintDiscard(value) + }; + } + + + + + Rid PrintDiscard(string v) + { + //Analytics.TrackEvent("RID Discarded", new Dictionary { { "value", v } }); + return Rid.Empty; + } + + public override void Write(Utf8JsonWriter writer, Rid value, JsonSerializerOptions options) + { + writer.WriteStringValue(value switch + { + Rid.Empty => "", + Rid.LinuxArm => "linux-arm", + Rid.LinuxArm64 => "linux-arm64", + Rid.LinuxMusl => "linux-musl", + Rid.LinuxMuslArm => "linux-musl-arm", + Rid.LinuxMuslArm64 => "linux-musl-arm64", + Rid.LinuxMuslX64 => "linux-musl-x64", + Rid.LinuxX64 => "linux-x64", + Rid.OsxArm64 => "osx-arm64", + Rid.OsxX64 => "osx-x64", + Rid.WinArm => "win-arm", + Rid.WinArm64 => "win-arm64", + Rid.WinX64 => "win-x64", + Rid.WinX86 => "win-x86", + Rid.Rhel6X64 => "rhel.6-x64", + Rid.RhelX64 => "rhel-x64", + Rid.WinX86X64 => "win-x86_x64", + Rid.Fedora27X64 => "fedora.27-x64", + Rid.Fedora28X64 => "fedora.28-x64", + Rid.CentosX64 => "centos-x64", + Rid.Debian9X64 => "debian.9-x64", + Rid.OpenSuse423X64 => "opensuse.42.3-x64", + Rid.UbuntuX64 => "UbuntuX64", + Rid.Ubuntu1604X64 => "ubuntu.16.04-x64", + Rid.Ubuntu1804X64 => "ubuntu.18.04-x64", + Rid.DebianX64 => "debian-x64", + Rid.Fedora27 => "fedora.27", + Rid.Fedora28 => "fedora.28", + Rid.Opensuse423 => "opensuse.42.3", + Rid.Ubuntu1604 => "ubuntu.16.04", + Rid.Ubuntu1804 => "ubuntu.18.04", + Rid.Fedora24X64 => "fedora.24-x64", + Rid.Fedora23X64 => "fedora.23-x64", + Rid.Opensuse132X64 => "opensuse.13.2-x64", + Rid.Ubuntu1610X64 => "ubuntu.16.10-x64", + Rid.Opensuse421X64 => "opensuse.42.1-x64", + Rid.Ubuntu1610 => "ubuntu.16.10", + _ => throw new NotSupportedException(), + }); + } +} diff --git a/src/Dots.csproj b/src/Dots.csproj index 072b5a6..73718ef 100644 --- a/src/Dots.csproj +++ b/src/Dots.csproj @@ -67,26 +67,27 @@ - - - - - + + + + + + - + - + - - - + + + - + diff --git a/src/Helpers/DataConverters.cs b/src/Helpers/DataConverters.cs new file mode 100644 index 0000000..4cdf418 --- /dev/null +++ b/src/Helpers/DataConverters.cs @@ -0,0 +1,185 @@ +using Avalonia.Data.Converters; +using Avalonia.Media; +using Dots.Data; +using System; +using System.Globalization; + +namespace Dots.Helpers +{ + public class ReleaseTypeToColorConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is ReleaseType releaseType) + { + return releaseType switch + { + ReleaseType.Sts => Color.Parse("#e85aad"), + ReleaseType.Lts => Color.Parse("#116329"), + _ => Color.Parse("#000000"), + }; + } + else return null; + } + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class SupportPhaseToColorConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is SupportPhase supportPhase) + { + return supportPhase switch + { + SupportPhase.Eol => Color.Parse("#e16f24"), + SupportPhase.Maintenance => Color.Parse("#eac54f"), + SupportPhase.Active => Color.Parse("#2da44e"), + SupportPhase.GoLive => Color.Parse("#a475f9"), + _ => Color.Parse("#000000"), + }; + } + else return null; + } + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class PreviewTypeToColorConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is string previewType) + { + if (previewType.Contains("-preview")) return Color.Parse("#bf8700"); + else if (previewType.Contains("-rc")) return Color.Parse("#7d4e00"); + else return Color.Parse("#000000"); + } + else return null; + } + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class PreviewTypeToStringConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is string previewType) + { + if (previewType.Contains("-preview")) return "Preview"; + else if (previewType.Contains("-rc")) return "Release Candidate"; + else return Color.Parse("#000000"); + } + else return null; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class RidToIconConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is Data.Rid rid && rid.ToString() is string ridstring) + { + if (ridstring.Contains("Win")) return "🪟"; + else if (ridstring.Contains("Osx")) return "🍏"; + else return "🐧"; + } + return null; + } + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class FileNameToColorConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is string filename) + { + + if (filename.EndsWith(".exe")) + { + return Color.Parse("#2da44e"); + } + else if (filename.EndsWith(".tar.gz") || filename.EndsWith(".zip")) + { + return Color.Parse("#bf8700"); + } + else if (filename.EndsWith(".pkg")) + { + return Color.Parse("#0969da"); + } + else + { + return Color.Parse("#000000"); + } + } + else return null; + } + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class FileNameToIconConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is string filename) + { + + if (filename.EndsWith(".exe")) + { + return LucideIcons.AppWindow; + } + else if (filename.EndsWith(".tar.gz") || filename.EndsWith(".zip")) + { + return LucideIcons.FolderArchive; + } + else if (filename.EndsWith(".pkg")) + { + return LucideIcons.Package; + } + else + { + return Color.Parse("#000000"); + } + } + else return null; + } + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + + public class StringIsNullOrEmptyConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is string str && !string.IsNullOrEmpty(str)) return true; + else return false; + } + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} + diff --git a/src/Helpers/Extensions.cs b/src/Helpers/Extensions.cs index 4d33b98..4e94441 100644 --- a/src/Helpers/Extensions.cs +++ b/src/Helpers/Extensions.cs @@ -151,9 +151,18 @@ public static void OpenFilePath(this string path) //credits https://gist.github.com/dalexsoto/9fd3c5bdbe9f61a717d47c5843384d11 - public static async Task DownloadDataAsync(this HttpClient client, string requestUrl, Stream destination, IProgress progress = null, CancellationToken cancellationToken = default(CancellationToken)) + public static async Task DownloadDataAsync(this HttpClient client, string requestUrl, Stream destination, IProgress<(float progress, string task)>? progress = null, CancellationToken cancellationToken = default(CancellationToken)) { - using (var response = await client.GetAsync(requestUrl, HttpCompletionOption.ResponseHeadersRead)) + //if cancellation is requested, delete the file + cancellationToken.Register(() => + { + if (destination is FileStream fs) + { + fs.Close(); + File.Delete(fs.Name); + } + }); + using (var response = await client.GetAsync(requestUrl, HttpCompletionOption.ResponseHeadersRead)) { var contentLength = response.Content.Headers.ContentLength; using (var download = await response.Content.ReadAsStreamAsync()) @@ -165,15 +174,15 @@ public static void OpenFilePath(this string path) return; } // Such progress and contentLength much reporting Wow! - var progressWrapper = new Progress(totalBytes => progress.Report(GetProgressPercentage(totalBytes, contentLength.Value))); - await download.CopyToAsync(destination, 81920, progressWrapper, cancellationToken); + var progressWrapper = new Progress<(float progress, string task)>(p => progress.Report((GetProgress(p.progress, contentLength.Value), "Downloading"))); + await download.CopyToAsync(destination, 81920, progressWrapper, cancellationToken); } } - float GetProgressPercentage(float totalBytes, float currentBytes) => (totalBytes / currentBytes) * 100f; + float GetProgress(float totalBytes, float currentBytes) => (totalBytes / currentBytes); } - static async Task CopyToAsync(this Stream source, Stream destination, int bufferSize, IProgress progress = null, CancellationToken cancellationToken = default(CancellationToken)) + static async Task CopyToAsync(this Stream source, Stream destination, int bufferSize, IProgress<(float progress, string task)>? progress = null, CancellationToken cancellationToken = default(CancellationToken)) { if (bufferSize < 0) throw new ArgumentOutOfRangeException(nameof(bufferSize)); @@ -193,7 +202,35 @@ public static void OpenFilePath(this string path) { await destination.WriteAsync(buffer, 0, bytesRead, cancellationToken).ConfigureAwait(false); totalBytesRead += bytesRead; - progress?.Report(totalBytesRead); - } + progress?.Report((totalBytesRead, "Downloading")); + } } -} \ No newline at end of file + + public static async Task WriteAllBytesAsync(this byte[] bytes, string path, IProgress<(float progress, string task)> progress, CancellationToken cancellationToken) + { + const int bufferSize = 81920; + var totalBytes = bytes.Length; + var bytesWritten = 0; + + using (var stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, bufferSize, useAsync: true)) + { + int index = 0; + + while (index < totalBytes) + { + cancellationToken.ThrowIfCancellationRequested(); + + int bytesToWrite = Math.Min(bufferSize, totalBytes - index); + + await stream.WriteAsync(bytes, index, bytesToWrite, cancellationToken); + + index += bytesToWrite; + bytesWritten += bytesToWrite; + + var p = bytesWritten / totalBytes; + + progress?.Report((p, "Writing to Disk")); + } + } + } +} diff --git a/src/Helpers/LucideIcons.cs b/src/Helpers/LucideIcons.cs index 4dee7a3..773ce74 100644 --- a/src/Helpers/LucideIcons.cs +++ b/src/Helpers/LucideIcons.cs @@ -1,1298 +1,1538 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +namespace Dots.Helpers; -namespace Dots.Helpers; -public static class LucideIcons +static class LucideIcons { - - public const string Space = "\u0020"; - public const string Accessibility = "\uf100"; - public const string Activity = "\uf101"; - public const string ActivitySquare = "\uf102"; - public const string AirVent = "\uf103"; - public const string Airplay = "\uf104"; - public const string AlarmCheck = "\uf105"; - public const string AlarmClock = "\uf106"; - public const string AlarmClockOff = "\uf107"; - public const string AlarmMinus = "\uf108"; - public const string AlarmPlus = "\uf109"; - public const string Album = "\uf10a"; - public const string AlertCircle = "\uf10b"; - public const string AlertOctagon = "\uf10c"; - public const string AlertTriangle = "\uf10d"; - public const string AlignCenter = "\uf10e"; - public const string AlignCenterHorizontal = "\uf10f"; - public const string AlignCenterVertical = "\uf110"; - public const string AlignEndHorizontal = "\uf111"; - public const string AlignEndVertical = "\uf112"; - public const string AlignHorizontalDistributeCenter = "\uf113"; - public const string AlignHorizontalDistributeEnd = "\uf114"; - public const string AlignHorizontalDistributeStart = "\uf115"; - public const string AlignHorizontalJustifyCenter = "\uf116"; - public const string AlignHorizontalJustifyEnd = "\uf117"; - public const string AlignHorizontalJustifyStart = "\uf118"; - public const string AlignHorizontalSpaceAround = "\uf119"; - public const string AlignHorizontalSpaceBetween = "\uf11a"; - public const string AlignJustify = "\uf11b"; - public const string AlignLeft = "\uf11c"; - public const string AlignRight = "\uf11d"; - public const string AlignStartHorizontal = "\uf11e"; - public const string AlignStartVertical = "\uf11f"; - public const string AlignVerticalDistributeCenter = "\uf120"; - public const string AlignVerticalDistributeEnd = "\uf121"; - public const string AlignVerticalDistributeStart = "\uf122"; - public const string AlignVerticalJustifyCenter = "\uf123"; - public const string AlignVerticalJustifyEnd = "\uf124"; - public const string AlignVerticalJustifyStart = "\uf125"; - public const string AlignVerticalSpaceAround = "\uf126"; - public const string AlignVerticalSpaceBetween = "\uf127"; - public const string Ampersand = "\uf128"; - public const string Ampersands = "\uf129"; - public const string Anchor = "\uf12a"; - public const string Angry = "\uf12b"; - public const string Annoyed = "\uf12c"; - public const string Antenna = "\uf12d"; - public const string Aperture = "\uf12e"; - public const string AppWindow = "\uf12f"; - public const string Apple = "\uf130"; - public const string Archive = "\uf131"; - public const string ArchiveRestore = "\uf132"; - public const string ArchiveX = "\uf133"; - public const string AreaChart = "\uf134"; - public const string Armchair = "\uf135"; - public const string ArrowBigDown = "\uf136"; - public const string ArrowBigDownDash = "\uf137"; - public const string ArrowBigLeft = "\uf138"; - public const string ArrowBigLeftDash = "\uf139"; - public const string ArrowBigRight = "\uf13a"; - public const string ArrowBigRightDash = "\uf13b"; - public const string ArrowBigUp = "\uf13c"; - public const string ArrowBigUpDash = "\uf13d"; - public const string ArrowDown = "\uf13e"; - public const string ArrowDown01 = "\uf13f"; - public const string ArrowDown10 = "\uf140"; - public const string ArrowDownAZ = "\uf141"; - public const string ArrowDownCircle = "\uf142"; - public const string ArrowDownFromLine = "\uf143"; - public const string ArrowDownLeft = "\uf144"; - public const string ArrowDownLeftFromCircle = "\uf145"; - public const string ArrowDownLeftSquare = "\uf146"; - public const string ArrowDownNarrowWide = "\uf147"; - public const string ArrowDownRight = "\uf148"; - public const string ArrowDownRightFromCircle = "\uf149"; - public const string ArrowDownRightSquare = "\uf14a"; - public const string ArrowDownSquare = "\uf14b"; - public const string ArrowDownToDot = "\uf14c"; - public const string ArrowDownToLine = "\uf14d"; - public const string ArrowDownUp = "\uf14e"; - public const string ArrowDownWideNarrow = "\uf14f"; - public const string ArrowDownZA = "\uf150"; - public const string ArrowLeft = "\uf151"; - public const string ArrowLeftCircle = "\uf152"; - public const string ArrowLeftFromLine = "\uf153"; - public const string ArrowLeftRight = "\uf154"; - public const string ArrowLeftSquare = "\uf155"; - public const string ArrowLeftToLine = "\uf156"; - public const string ArrowRight = "\uf157"; - public const string ArrowRightCircle = "\uf158"; - public const string ArrowRightFromLine = "\uf159"; - public const string ArrowRightLeft = "\uf15a"; - public const string ArrowRightSquare = "\uf15b"; - public const string ArrowRightToLine = "\uf15c"; - public const string ArrowUp = "\uf15d"; - public const string ArrowUp01 = "\uf15e"; - public const string ArrowUp10 = "\uf15f"; - public const string ArrowUpAZ = "\uf160"; - public const string ArrowUpCircle = "\uf161"; - public const string ArrowUpDown = "\uf162"; - public const string ArrowUpFromDot = "\uf163"; - public const string ArrowUpFromLine = "\uf164"; - public const string ArrowUpLeft = "\uf165"; - public const string ArrowUpLeftFromCircle = "\uf166"; - public const string ArrowUpLeftSquare = "\uf167"; - public const string ArrowUpNarrowWide = "\uf168"; - public const string ArrowUpRight = "\uf169"; - public const string ArrowUpRightFromCircle = "\uf16a"; - public const string ArrowUpRightSquare = "\uf16b"; - public const string ArrowUpSquare = "\uf16c"; - public const string ArrowUpToLine = "\uf16d"; - public const string ArrowUpWideNarrow = "\uf16e"; - public const string ArrowUpZA = "\uf16f"; - public const string ArrowsUpFromLine = "\uf170"; - public const string Asterisk = "\uf171"; - public const string AtSign = "\uf172"; - public const string Atom = "\uf173"; - public const string Award = "\uf174"; - public const string Axe = "\uf175"; - public const string Axis3d = "\uf176"; - public const string Baby = "\uf177"; - public const string Backpack = "\uf178"; - public const string Badge = "\uf179"; - public const string BadgeAlert = "\uf17a"; - public const string BadgeCent = "\uf17b"; - public const string BadgeCheck = "\uf17c"; - public const string BadgeDollarSign = "\uf17d"; - public const string BadgeEuro = "\uf17e"; - public const string BadgeHelp = "\uf17f"; - public const string BadgeIndianRupee = "\uf180"; - public const string BadgeInfo = "\uf181"; - public const string BadgeJapaneseYen = "\uf182"; - public const string BadgeMinus = "\uf183"; - public const string BadgePercent = "\uf184"; - public const string BadgePlus = "\uf185"; - public const string BadgePoundSterling = "\uf186"; - public const string BadgeRussianRuble = "\uf187"; - public const string BadgeSwissFranc = "\uf188"; - public const string BadgeX = "\uf189"; - public const string BaggageClaim = "\uf18a"; - public const string Ban = "\uf18b"; - public const string Banana = "\uf18c"; - public const string Banknote = "\uf18d"; - public const string BarChart = "\uf18e"; - public const string BarChart2 = "\uf18f"; - public const string BarChart3 = "\uf190"; - public const string BarChart4 = "\uf191"; - public const string BarChartBig = "\uf192"; - public const string BarChartHorizontal = "\uf193"; - public const string BarChartHorizontalBig = "\uf194"; - public const string Barcode = "\uf195"; - public const string Baseline = "\uf196"; - public const string Bath = "\uf197"; - public const string Battery = "\uf198"; - public const string BatteryCharging = "\uf199"; - public const string BatteryFull = "\uf19a"; - public const string BatteryLow = "\uf19b"; - public const string BatteryMedium = "\uf19c"; - public const string BatteryWarning = "\uf19d"; - public const string Beaker = "\uf19e"; - public const string Bean = "\uf19f"; - public const string BeanOff = "\uf1a0"; - public const string Bed = "\uf1a1"; - public const string BedDouble = "\uf1a2"; - public const string BedSingle = "\uf1a3"; - public const string Beef = "\uf1a4"; - public const string Beer = "\uf1a5"; - public const string Bell = "\uf1a6"; - public const string BellDot = "\uf1a7"; - public const string BellMinus = "\uf1a8"; - public const string BellOff = "\uf1a9"; - public const string BellPlus = "\uf1aa"; - public const string BellRing = "\uf1ab"; - public const string Bike = "\uf1ac"; - public const string Binary = "\uf1ad"; - public const string Biohazard = "\uf1ae"; - public const string Bird = "\uf1af"; - public const string Bitcoin = "\uf1b0"; - public const string Blinds = "\uf1b1"; - public const string Blocks = "\uf1b2"; - public const string Bluetooth = "\uf1b3"; - public const string BluetoothConnected = "\uf1b4"; - public const string BluetoothOff = "\uf1b5"; - public const string BluetoothSearching = "\uf1b6"; - public const string Bold = "\uf1b7"; - public const string Bomb = "\uf1b8"; - public const string Bone = "\uf1b9"; - public const string Book = "\uf1ba"; - public const string BookCopy = "\uf1bb"; - public const string BookDown = "\uf1bc"; - public const string BookKey = "\uf1bd"; - public const string BookLock = "\uf1be"; - public const string BookMarked = "\uf1bf"; - public const string BookMinus = "\uf1c0"; - public const string BookOpen = "\uf1c1"; - public const string BookOpenCheck = "\uf1c2"; - public const string BookPlus = "\uf1c3"; - public const string BookTemplate = "\uf1c4"; - public const string BookUp = "\uf1c5"; - public const string BookUp2 = "\uf1c6"; - public const string BookX = "\uf1c7"; - public const string Bookmark = "\uf1c8"; - public const string BookmarkCheck = "\uf1c9"; - public const string BookmarkMinus = "\uf1ca"; - public const string BookmarkPlus = "\uf1cb"; - public const string BookmarkX = "\uf1cc"; - public const string BoomBox = "\uf1cd"; - public const string Bot = "\uf1ce"; - public const string Box = "\uf1cf"; - public const string BoxSelect = "\uf1d0"; - public const string Boxes = "\uf1d1"; - public const string Braces = "\uf1d2"; - public const string Brackets = "\uf1d3"; - public const string Brain = "\uf1d4"; - public const string BrainCircuit = "\uf1d5"; - public const string BrainCog = "\uf1d6"; - public const string Briefcase = "\uf1d7"; - public const string BringToFront = "\uf1d8"; - public const string Brush = "\uf1d9"; - public const string Bug = "\uf1da"; - public const string BugOff = "\uf1db"; - public const string BugPlay = "\uf1dc"; - public const string Building = "\uf1dd"; - public const string Building2 = "\uf1de"; - public const string Bus = "\uf1df"; - public const string BusFront = "\uf1e0"; - public const string Cable = "\uf1e1"; - public const string CableCar = "\uf1e2"; - public const string Cake = "\uf1e3"; - public const string CakeSlice = "\uf1e4"; - public const string Calculator = "\uf1e5"; - public const string Calendar = "\uf1e6"; - public const string CalendarCheck = "\uf1e7"; - public const string CalendarCheck2 = "\uf1e8"; - public const string CalendarClock = "\uf1e9"; - public const string CalendarDays = "\uf1ea"; - public const string CalendarHeart = "\uf1eb"; - public const string CalendarMinus = "\uf1ec"; - public const string CalendarOff = "\uf1ed"; - public const string CalendarPlus = "\uf1ee"; - public const string CalendarRange = "\uf1ef"; - public const string CalendarSearch = "\uf1f0"; - public const string CalendarX = "\uf1f1"; - public const string CalendarX2 = "\uf1f2"; - public const string Camera = "\uf1f3"; - public const string CameraOff = "\uf1f4"; - public const string CandlestickChart = "\uf1f5"; - public const string Candy = "\uf1f6"; - public const string CandyCane = "\uf1f7"; - public const string CandyOff = "\uf1f8"; - public const string Car = "\uf1f9"; - public const string CarFront = "\uf1fa"; - public const string CarTaxiFront = "\uf1fb"; - public const string Caravan = "\uf1fc"; - public const string Carrot = "\uf1fd"; - public const string CaseLower = "\uf1fe"; - public const string CaseSensitive = "\uf1ff"; - public const string CaseUpper = "\uf200"; - public const string CassetteTape = "\uf201"; - public const string Cast = "\uf202"; - public const string Castle = "\uf203"; - public const string Cat = "\uf204"; - public const string Check = "\uf205"; - public const string CheckCheck = "\uf206"; - public const string CheckCircle = "\uf207"; - public const string CheckCircle2 = "\uf208"; - public const string CheckSquare = "\uf209"; - public const string ChefHat = "\uf20a"; - public const string Cherry = "\uf20b"; - public const string ChevronDown = "\uf20c"; - public const string ChevronDownCircle = "\uf20d"; - public const string ChevronDownSquare = "\uf20e"; - public const string ChevronFirst = "\uf20f"; - public const string ChevronLast = "\uf210"; - public const string ChevronLeft = "\uf211"; - public const string ChevronLeftCircle = "\uf212"; - public const string ChevronLeftSquare = "\uf213"; - public const string ChevronRight = "\uf214"; - public const string ChevronRightCircle = "\uf215"; - public const string ChevronRightSquare = "\uf216"; - public const string ChevronUp = "\uf217"; - public const string ChevronUpCircle = "\uf218"; - public const string ChevronUpSquare = "\uf219"; - public const string ChevronsDown = "\uf21a"; - public const string ChevronsDownUp = "\uf21b"; - public const string ChevronsLeft = "\uf21c"; - public const string ChevronsLeftRight = "\uf21d"; - public const string ChevronsRight = "\uf21e"; - public const string ChevronsRightLeft = "\uf21f"; - public const string ChevronsUp = "\uf220"; - public const string ChevronsUpDown = "\uf221"; - public const string Chrome = "\uf222"; - public const string Church = "\uf223"; - public const string Cigarette = "\uf224"; - public const string CigaretteOff = "\uf225"; - public const string Circle = "\uf226"; - public const string CircleDashed = "\uf227"; - public const string CircleDollarSign = "\uf228"; - public const string CircleDot = "\uf229"; - public const string CircleDotDashed = "\uf22a"; - public const string CircleEllipsis = "\uf22b"; - public const string CircleEqual = "\uf22c"; - public const string CircleOff = "\uf22d"; - public const string CircleSlash = "\uf22e"; - public const string CircleSlash2 = "\uf22f"; - public const string CircuitBoard = "\uf230"; - public const string Citrus = "\uf231"; - public const string Clapperboard = "\uf232"; - public const string Clipboard = "\uf233"; - public const string ClipboardCheck = "\uf234"; - public const string ClipboardCopy = "\uf235"; - public const string ClipboardEdit = "\uf236"; - public const string ClipboardList = "\uf237"; - public const string ClipboardPaste = "\uf238"; - public const string ClipboardSignature = "\uf239"; - public const string ClipboardType = "\uf23a"; - public const string ClipboardX = "\uf23b"; - public const string Clock = "\uf23c"; - public const string Clock1 = "\uf23d"; - public const string Clock10 = "\uf23e"; - public const string Clock11 = "\uf23f"; - public const string Clock12 = "\uf240"; - public const string Clock2 = "\uf241"; - public const string Clock3 = "\uf242"; - public const string Clock4 = "\uf243"; - public const string Clock5 = "\uf244"; - public const string Clock6 = "\uf245"; - public const string Clock7 = "\uf246"; - public const string Clock8 = "\uf247"; - public const string Clock9 = "\uf248"; - public const string Cloud = "\uf249"; - public const string CloudCog = "\uf24a"; - public const string CloudDrizzle = "\uf24b"; - public const string CloudFog = "\uf24c"; - public const string CloudHail = "\uf24d"; - public const string CloudLightning = "\uf24e"; - public const string CloudMoon = "\uf24f"; - public const string CloudMoonRain = "\uf250"; - public const string CloudOff = "\uf251"; - public const string CloudRain = "\uf252"; - public const string CloudRainWind = "\uf253"; - public const string CloudSnow = "\uf254"; - public const string CloudSun = "\uf255"; - public const string CloudSunRain = "\uf256"; - public const string Cloudy = "\uf257"; - public const string Clover = "\uf258"; - public const string Club = "\uf259"; - public const string Code = "\uf25a"; - public const string Code2 = "\uf25b"; - public const string Codepen = "\uf25c"; - public const string Codesandbox = "\uf25d"; - public const string Coffee = "\uf25e"; - public const string Cog = "\uf25f"; - public const string Coins = "\uf260"; - public const string Columns = "\uf261"; - public const string Combine = "\uf262"; - public const string Command = "\uf263"; - public const string Compass = "\uf264"; - public const string Component = "\uf265"; - public const string Computer = "\uf266"; - public const string ConciergeBell = "\uf267"; - public const string Cone = "\uf268"; - public const string Construction = "\uf269"; - public const string Contact = "\uf26a"; - public const string Contact2 = "\uf26b"; - public const string Container = "\uf26c"; - public const string Contrast = "\uf26d"; - public const string Cookie = "\uf26e"; - public const string Copy = "\uf26f"; - public const string CopyCheck = "\uf270"; - public const string CopyMinus = "\uf271"; - public const string CopyPlus = "\uf272"; - public const string CopySlash = "\uf273"; - public const string CopyX = "\uf274"; - public const string Copyleft = "\uf275"; - public const string Copyright = "\uf276"; - public const string CornerDownLeft = "\uf277"; - public const string CornerDownRight = "\uf278"; - public const string CornerLeftDown = "\uf279"; - public const string CornerLeftUp = "\uf27a"; - public const string CornerRightDown = "\uf27b"; - public const string CornerRightUp = "\uf27c"; - public const string CornerUpLeft = "\uf27d"; - public const string CornerUpRight = "\uf27e"; - public const string Cpu = "\uf27f"; - public const string CreativeCommons = "\uf280"; - public const string CreditCard = "\uf281"; - public const string Croissant = "\uf282"; - public const string Crop = "\uf283"; - public const string Cross = "\uf284"; - public const string Crosshair = "\uf285"; - public const string Crown = "\uf286"; - public const string Cuboid = "\uf287"; - public const string CupSoda = "\uf288"; - public const string Currency = "\uf289"; - public const string Cylinder = "\uf28a"; - public const string Database = "\uf28b"; - public const string DatabaseBackup = "\uf28c"; - public const string DatabaseZap = "\uf28d"; - public const string Delete = "\uf28e"; - public const string Dessert = "\uf28f"; - public const string Diameter = "\uf290"; - public const string Diamond = "\uf291"; - public const string Dice1 = "\uf292"; - public const string Dice2 = "\uf293"; - public const string Dice3 = "\uf294"; - public const string Dice4 = "\uf295"; - public const string Dice5 = "\uf296"; - public const string Dice6 = "\uf297"; - public const string Dices = "\uf298"; - public const string Diff = "\uf299"; - public const string Disc = "\uf29a"; - public const string Disc2 = "\uf29b"; - public const string Disc3 = "\uf29c"; - public const string Divide = "\uf29d"; - public const string DivideCircle = "\uf29e"; - public const string DivideSquare = "\uf29f"; - public const string Dna = "\uf2a0"; - public const string DnaOff = "\uf2a1"; - public const string Dog = "\uf2a2"; - public const string DollarSign = "\uf2a3"; - public const string Donut = "\uf2a4"; - public const string DoorClosed = "\uf2a5"; - public const string DoorOpen = "\uf2a6"; - public const string Dot = "\uf2a7"; - public const string Download = "\uf2a8"; - public const string DownloadCloud = "\uf2a9"; - public const string DraftingCompass = "\uf2aa"; - public const string Drama = "\uf2ab"; - public const string Dribbble = "\uf2ac"; - public const string Droplet = "\uf2ad"; - public const string Droplets = "\uf2ae"; - public const string Drumstick = "\uf2af"; - public const string Dumbbell = "\uf2b0"; - public const string Ear = "\uf2b1"; - public const string EarOff = "\uf2b2"; - public const string Egg = "\uf2b3"; - public const string EggFried = "\uf2b4"; - public const string EggOff = "\uf2b5"; - public const string Equal = "\uf2b6"; - public const string EqualNot = "\uf2b7"; - public const string Eraser = "\uf2b8"; - public const string Euro = "\uf2b9"; - public const string Expand = "\uf2ba"; - public const string ExternalLink = "\uf2bb"; - public const string Eye = "\uf2bc"; - public const string EyeOff = "\uf2bd"; - public const string Facebook = "\uf2be"; - public const string Factory = "\uf2bf"; - public const string Fan = "\uf2c0"; - public const string FastForward = "\uf2c1"; - public const string Feather = "\uf2c2"; - public const string FerrisWheel = "\uf2c3"; - public const string Figma = "\uf2c4"; - public const string File = "\uf2c5"; - public const string FileArchive = "\uf2c6"; - public const string FileAudio = "\uf2c7"; - public const string FileAudio2 = "\uf2c8"; - public const string FileAxis3d = "\uf2c9"; - public const string FileBadge = "\uf2ca"; - public const string FileBadge2 = "\uf2cb"; - public const string FileBarChart = "\uf2cc"; - public const string FileBarChart2 = "\uf2cd"; - public const string FileBox = "\uf2ce"; - public const string FileCheck = "\uf2cf"; - public const string FileCheck2 = "\uf2d0"; - public const string FileClock = "\uf2d1"; - public const string FileCode = "\uf2d2"; - public const string FileCode2 = "\uf2d3"; - public const string FileCog = "\uf2d4"; - public const string FileDiff = "\uf2d5"; - public const string FileDigit = "\uf2d6"; - public const string FileDown = "\uf2d7"; - public const string FileEdit = "\uf2d8"; - public const string FileHeart = "\uf2d9"; - public const string FileImage = "\uf2da"; - public const string FileInput = "\uf2db"; - public const string FileJson = "\uf2dc"; - public const string FileJson2 = "\uf2dd"; - public const string FileKey = "\uf2de"; - public const string FileKey2 = "\uf2df"; - public const string FileLineChart = "\uf2e0"; - public const string FileLock = "\uf2e1"; - public const string FileLock2 = "\uf2e2"; - public const string FileMinus = "\uf2e3"; - public const string FileMinus2 = "\uf2e4"; - public const string FileOutput = "\uf2e5"; - public const string FilePieChart = "\uf2e6"; - public const string FilePlus = "\uf2e7"; - public const string FilePlus2 = "\uf2e8"; - public const string FileQuestion = "\uf2e9"; - public const string FileScan = "\uf2ea"; - public const string FileSearch = "\uf2eb"; - public const string FileSearch2 = "\uf2ec"; - public const string FileSignature = "\uf2ed"; - public const string FileSpreadsheet = "\uf2ee"; - public const string FileStack = "\uf2ef"; - public const string FileSymlink = "\uf2f0"; - public const string FileTerminal = "\uf2f1"; - public const string FileText = "\uf2f2"; - public const string FileType = "\uf2f3"; - public const string FileType2 = "\uf2f4"; - public const string FileUp = "\uf2f5"; - public const string FileVideo = "\uf2f6"; - public const string FileVideo2 = "\uf2f7"; - public const string FileVolume = "\uf2f8"; - public const string FileVolume2 = "\uf2f9"; - public const string FileWarning = "\uf2fa"; - public const string FileX = "\uf2fb"; - public const string FileX2 = "\uf2fc"; - public const string Files = "\uf2fd"; - public const string Film = "\uf2fe"; - public const string Filter = "\uf2ff"; - public const string FilterX = "\uf300"; - public const string Fingerprint = "\uf301"; - public const string Fish = "\uf302"; - public const string FishOff = "\uf303"; - public const string FishSymbol = "\uf304"; - public const string Flag = "\uf305"; - public const string FlagOff = "\uf306"; - public const string FlagTriangleLeft = "\uf307"; - public const string FlagTriangleRight = "\uf308"; - public const string Flame = "\uf309"; - public const string FlameKindling = "\uf30a"; - public const string Flashlight = "\uf30b"; - public const string FlashlightOff = "\uf30c"; - public const string FlaskConical = "\uf30d"; - public const string FlaskConicalOff = "\uf30e"; - public const string FlaskRound = "\uf30f"; - public const string FlipHorizontal = "\uf310"; - public const string FlipHorizontal2 = "\uf311"; - public const string FlipVertical = "\uf312"; - public const string FlipVertical2 = "\uf313"; - public const string Flower = "\uf314"; - public const string Flower2 = "\uf315"; - public const string Focus = "\uf316"; - public const string FoldHorizontal = "\uf317"; - public const string FoldVertical = "\uf318"; - public const string Folder = "\uf319"; - public const string FolderArchive = "\uf31a"; - public const string FolderCheck = "\uf31b"; - public const string FolderClock = "\uf31c"; - public const string FolderClosed = "\uf31d"; - public const string FolderCog = "\uf31e"; - public const string FolderDot = "\uf31f"; - public const string FolderDown = "\uf320"; - public const string FolderEdit = "\uf321"; - public const string FolderGit = "\uf322"; - public const string FolderGit2 = "\uf323"; - public const string FolderHeart = "\uf324"; - public const string FolderInput = "\uf325"; - public const string FolderKanban = "\uf326"; - public const string FolderKey = "\uf327"; - public const string FolderLock = "\uf328"; - public const string FolderMinus = "\uf329"; - public const string FolderOpen = "\uf32a"; - public const string FolderOpenDot = "\uf32b"; - public const string FolderOutput = "\uf32c"; - public const string FolderPlus = "\uf32d"; - public const string FolderRoot = "\uf32e"; - public const string FolderSearch = "\uf32f"; - public const string FolderSearch2 = "\uf330"; - public const string FolderSymlink = "\uf331"; - public const string FolderSync = "\uf332"; - public const string FolderTree = "\uf333"; - public const string FolderUp = "\uf334"; - public const string FolderX = "\uf335"; - public const string Folders = "\uf336"; - public const string Footprints = "\uf337"; - public const string Forklift = "\uf338"; - public const string FormInput = "\uf339"; - public const string Forward = "\uf33a"; - public const string Frame = "\uf33b"; - public const string Framer = "\uf33c"; - public const string Frown = "\uf33d"; - public const string Fuel = "\uf33e"; - public const string Fullscreen = "\uf33f"; - public const string FunctionSquare = "\uf340"; - public const string GalleryHorizontal = "\uf341"; - public const string GalleryHorizontalEnd = "\uf342"; - public const string GalleryThumbnails = "\uf343"; - public const string GalleryVertical = "\uf344"; - public const string GalleryVerticalEnd = "\uf345"; - public const string Gamepad = "\uf346"; - public const string Gamepad2 = "\uf347"; - public const string GanttChart = "\uf348"; - public const string GanttChartSquare = "\uf349"; - public const string Gauge = "\uf34a"; - public const string GaugeCircle = "\uf34b"; - public const string Gavel = "\uf34c"; - public const string Gem = "\uf34d"; - public const string Ghost = "\uf34e"; - public const string Gift = "\uf34f"; - public const string GitBranch = "\uf350"; - public const string GitBranchPlus = "\uf351"; - public const string GitCommit = "\uf352"; - public const string GitCompare = "\uf353"; - public const string GitFork = "\uf354"; - public const string GitMerge = "\uf355"; - public const string GitPullRequest = "\uf356"; - public const string GitPullRequestClosed = "\uf357"; - public const string GitPullRequestDraft = "\uf358"; - public const string Github = "\uf359"; - public const string Gitlab = "\uf35a"; - public const string GlassWater = "\uf35b"; - public const string Glasses = "\uf35c"; - public const string Globe = "\uf35d"; - public const string Globe2 = "\uf35e"; - public const string Goal = "\uf35f"; - public const string Grab = "\uf360"; - public const string GraduationCap = "\uf361"; - public const string Grape = "\uf362"; - public const string Grid2x2 = "\uf363"; - public const string Grid3x3 = "\uf364"; - public const string Grip = "\uf365"; - public const string GripHorizontal = "\uf366"; - public const string GripVertical = "\uf367"; - public const string Group = "\uf368"; - public const string Hammer = "\uf369"; - public const string Hand = "\uf36a"; - public const string HandMetal = "\uf36b"; - public const string HardDrive = "\uf36c"; - public const string HardDriveDownload = "\uf36d"; - public const string HardDriveUpload = "\uf36e"; - public const string HardHat = "\uf36f"; - public const string Hash = "\uf370"; - public const string Haze = "\uf371"; - public const string HdmiPort = "\uf372"; - public const string Heading = "\uf373"; - public const string Heading1 = "\uf374"; - public const string Heading2 = "\uf375"; - public const string Heading3 = "\uf376"; - public const string Heading4 = "\uf377"; - public const string Heading5 = "\uf378"; - public const string Heading6 = "\uf379"; - public const string Headphones = "\uf37a"; - public const string Heart = "\uf37b"; - public const string HeartCrack = "\uf37c"; - public const string HeartHandshake = "\uf37d"; - public const string HeartOff = "\uf37e"; - public const string HeartPulse = "\uf37f"; - public const string HelpCircle = "\uf380"; - public const string HelpingHand = "\uf381"; - public const string Hexagon = "\uf382"; - public const string Highlighter = "\uf383"; - public const string History = "\uf384"; - public const string Home = "\uf385"; - public const string Hop = "\uf386"; - public const string HopOff = "\uf387"; - public const string Hotel = "\uf388"; - public const string Hourglass = "\uf389"; - public const string IceCream = "\uf38a"; - public const string IceCream2 = "\uf38b"; - public const string Image = "\uf38c"; - public const string ImageMinus = "\uf38d"; - public const string ImageOff = "\uf38e"; - public const string ImagePlus = "\uf38f"; - public const string Import = "\uf390"; - public const string Inbox = "\uf391"; - public const string Indent = "\uf392"; - public const string IndianRupee = "\uf393"; - public const string Infinity = "\uf394"; - public const string Info = "\uf395"; - public const string Instagram = "\uf396"; - public const string Italic = "\uf397"; - public const string IterationCcw = "\uf398"; - public const string IterationCw = "\uf399"; - public const string JapaneseYen = "\uf39a"; - public const string Joystick = "\uf39b"; - public const string Kanban = "\uf39c"; - public const string KanbanSquare = "\uf39d"; - public const string KanbanSquareDashed = "\uf39e"; - public const string Key = "\uf39f"; - public const string KeyRound = "\uf3a0"; - public const string KeySquare = "\uf3a1"; - public const string Keyboard = "\uf3a2"; - public const string Lamp = "\uf3a3"; - public const string LampCeiling = "\uf3a4"; - public const string LampDesk = "\uf3a5"; - public const string LampFloor = "\uf3a6"; - public const string LampWallDown = "\uf3a7"; - public const string LampWallUp = "\uf3a8"; - public const string LandPlot = "\uf3a9"; - public const string Landmark = "\uf3aa"; - public const string Languages = "\uf3ab"; - public const string Laptop = "\uf3ac"; - public const string Laptop2 = "\uf3ad"; - public const string Lasso = "\uf3ae"; - public const string LassoSelect = "\uf3af"; - public const string Laugh = "\uf3b0"; - public const string Layers = "\uf3b1"; - public const string Layers2 = "\uf3b2"; - public const string Layers3 = "\uf3b3"; - public const string Layout = "\uf3b4"; - public const string LayoutDashboard = "\uf3b5"; - public const string LayoutGrid = "\uf3b6"; - public const string LayoutList = "\uf3b7"; - public const string LayoutPanelLeft = "\uf3b8"; - public const string LayoutPanelTop = "\uf3b9"; - public const string LayoutTemplate = "\uf3ba"; - public const string Leaf = "\uf3bb"; - public const string LeafyGreen = "\uf3bc"; - public const string Library = "\uf3bd"; - public const string LifeBuoy = "\uf3be"; - public const string Ligature = "\uf3bf"; - public const string Lightbulb = "\uf3c0"; - public const string LightbulbOff = "\uf3c1"; - public const string LineChart = "\uf3c2"; - public const string Link = "\uf3c3"; - public const string Link2 = "\uf3c4"; - public const string Link2Off = "\uf3c5"; - public const string Linkedin = "\uf3c6"; - public const string List = "\uf3c7"; - public const string ListChecks = "\uf3c8"; - public const string ListEnd = "\uf3c9"; - public const string ListFilter = "\uf3ca"; - public const string ListMinus = "\uf3cb"; - public const string ListMusic = "\uf3cc"; - public const string ListOrdered = "\uf3cd"; - public const string ListPlus = "\uf3ce"; - public const string ListRestart = "\uf3cf"; - public const string ListStart = "\uf3d0"; - public const string ListTodo = "\uf3d1"; - public const string ListTree = "\uf3d2"; - public const string ListVideo = "\uf3d3"; - public const string ListX = "\uf3d4"; - public const string Loader = "\uf3d5"; - public const string Loader2 = "\uf3d6"; - public const string Locate = "\uf3d7"; - public const string LocateFixed = "\uf3d8"; - public const string LocateOff = "\uf3d9"; - public const string Lock = "\uf3da"; - public const string LockKeyhole = "\uf3db"; - public const string LogIn = "\uf3dc"; - public const string LogOut = "\uf3dd"; - public const string Lollipop = "\uf3de"; - public const string Luggage = "\uf3df"; - public const string MSquare = "\uf3e0"; - public const string Magnet = "\uf3e1"; - public const string Mail = "\uf3e2"; - public const string MailCheck = "\uf3e3"; - public const string MailMinus = "\uf3e4"; - public const string MailOpen = "\uf3e5"; - public const string MailPlus = "\uf3e6"; - public const string MailQuestion = "\uf3e7"; - public const string MailSearch = "\uf3e8"; - public const string MailWarning = "\uf3e9"; - public const string MailX = "\uf3ea"; - public const string Mailbox = "\uf3eb"; - public const string Mails = "\uf3ec"; - public const string Map = "\uf3ed"; - public const string MapPin = "\uf3ee"; - public const string MapPinOff = "\uf3ef"; - public const string Martini = "\uf3f0"; - public const string Maximize = "\uf3f1"; - public const string Maximize2 = "\uf3f2"; - public const string Medal = "\uf3f3"; - public const string Megaphone = "\uf3f4"; - public const string MegaphoneOff = "\uf3f5"; - public const string Meh = "\uf3f6"; - public const string MemoryStick = "\uf3f7"; - public const string Menu = "\uf3f8"; - public const string MenuSquare = "\uf3f9"; - public const string Merge = "\uf3fa"; - public const string MessageCircle = "\uf3fb"; - public const string MessageSquare = "\uf3fc"; - public const string MessageSquareDashed = "\uf3fd"; - public const string MessageSquarePlus = "\uf3fe"; - public const string MessagesSquare = "\uf3ff"; - public const string Mic = "\uf400"; - public const string Mic2 = "\uf401"; - public const string MicOff = "\uf402"; - public const string Microscope = "\uf403"; - public const string Microwave = "\uf404"; - public const string Milestone = "\uf405"; - public const string Milk = "\uf406"; - public const string MilkOff = "\uf407"; - public const string Minimize = "\uf408"; - public const string Minimize2 = "\uf409"; - public const string Minus = "\uf40a"; - public const string MinusCircle = "\uf40b"; - public const string MinusSquare = "\uf40c"; - public const string Monitor = "\uf40d"; - public const string MonitorCheck = "\uf40e"; - public const string MonitorDot = "\uf40f"; - public const string MonitorDown = "\uf410"; - public const string MonitorOff = "\uf411"; - public const string MonitorPause = "\uf412"; - public const string MonitorPlay = "\uf413"; - public const string MonitorSmartphone = "\uf414"; - public const string MonitorSpeaker = "\uf415"; - public const string MonitorStop = "\uf416"; - public const string MonitorUp = "\uf417"; - public const string MonitorX = "\uf418"; - public const string Moon = "\uf419"; - public const string MoonStar = "\uf41a"; - public const string MoreHorizontal = "\uf41b"; - public const string MoreVertical = "\uf41c"; - public const string Mountain = "\uf41d"; - public const string MountainSnow = "\uf41e"; - public const string Mouse = "\uf41f"; - public const string MousePointer = "\uf420"; - public const string MousePointer2 = "\uf421"; - public const string MousePointerClick = "\uf422"; - public const string MousePointerSquare = "\uf423"; - public const string MousePointerSquareDashed = "\uf424"; - public const string Move = "\uf425"; - public const string Move3d = "\uf426"; - public const string MoveDiagonal = "\uf427"; - public const string MoveDiagonal2 = "\uf428"; - public const string MoveDown = "\uf429"; - public const string MoveDownLeft = "\uf42a"; - public const string MoveDownRight = "\uf42b"; - public const string MoveHorizontal = "\uf42c"; - public const string MoveLeft = "\uf42d"; - public const string MoveRight = "\uf42e"; - public const string MoveUp = "\uf42f"; - public const string MoveUpLeft = "\uf430"; - public const string MoveUpRight = "\uf431"; - public const string MoveVertical = "\uf432"; - public const string Music = "\uf433"; - public const string Music2 = "\uf434"; - public const string Music3 = "\uf435"; - public const string Music4 = "\uf436"; - public const string Navigation = "\uf437"; - public const string Navigation2 = "\uf438"; - public const string Navigation2Off = "\uf439"; - public const string NavigationOff = "\uf43a"; - public const string Network = "\uf43b"; - public const string Newspaper = "\uf43c"; - public const string Nfc = "\uf43d"; - public const string Nut = "\uf43e"; - public const string NutOff = "\uf43f"; - public const string Octagon = "\uf440"; - public const string Option = "\uf441"; - public const string Orbit = "\uf442"; - public const string Outdent = "\uf443"; - public const string Package = "\uf444"; - public const string Package2 = "\uf445"; - public const string PackageCheck = "\uf446"; - public const string PackageMinus = "\uf447"; - public const string PackageOpen = "\uf448"; - public const string PackagePlus = "\uf449"; - public const string PackageSearch = "\uf44a"; - public const string PackageX = "\uf44b"; - public const string PaintBucket = "\uf44c"; - public const string Paintbrush = "\uf44d"; - public const string Paintbrush2 = "\uf44e"; - public const string Palette = "\uf44f"; - public const string Palmtree = "\uf450"; - public const string PanelBottom = "\uf451"; - public const string PanelBottomClose = "\uf452"; - public const string PanelBottomInactive = "\uf453"; - public const string PanelBottomOpen = "\uf454"; - public const string PanelLeft = "\uf455"; - public const string PanelLeftClose = "\uf456"; - public const string PanelLeftInactive = "\uf457"; - public const string PanelLeftOpen = "\uf458"; - public const string PanelRight = "\uf459"; - public const string PanelRightClose = "\uf45a"; - public const string PanelRightInactive = "\uf45b"; - public const string PanelRightOpen = "\uf45c"; - public const string PanelTop = "\uf45d"; - public const string PanelTopClose = "\uf45e"; - public const string PanelTopInactive = "\uf45f"; - public const string PanelTopOpen = "\uf460"; - public const string Paperclip = "\uf461"; - public const string Parentheses = "\uf462"; - public const string ParkingCircle = "\uf463"; - public const string ParkingCircleOff = "\uf464"; - public const string ParkingMeter = "\uf465"; - public const string ParkingSquare = "\uf466"; - public const string ParkingSquareOff = "\uf467"; - public const string PartyPopper = "\uf468"; - public const string Pause = "\uf469"; - public const string PauseCircle = "\uf46a"; - public const string PauseOctagon = "\uf46b"; - public const string PawPrint = "\uf46c"; - public const string PcCase = "\uf46d"; - public const string Pen = "\uf46e"; - public const string PenLine = "\uf46f"; - public const string PenSquare = "\uf470"; - public const string PenTool = "\uf471"; - public const string Pencil = "\uf472"; - public const string PencilLine = "\uf473"; - public const string PencilRuler = "\uf474"; - public const string Pentagon = "\uf475"; - public const string Percent = "\uf476"; - public const string PercentCircle = "\uf477"; - public const string PercentDiamond = "\uf478"; - public const string PercentSquare = "\uf479"; - public const string PersonStanding = "\uf47a"; - public const string Phone = "\uf47b"; - public const string PhoneCall = "\uf47c"; - public const string PhoneForwarded = "\uf47d"; - public const string PhoneIncoming = "\uf47e"; - public const string PhoneMissed = "\uf47f"; - public const string PhoneOff = "\uf480"; - public const string PhoneOutgoing = "\uf481"; - public const string Pi = "\uf482"; - public const string PiSquare = "\uf483"; - public const string PictureInPicture = "\uf484"; - public const string PictureInPicture2 = "\uf485"; - public const string PieChart = "\uf486"; - public const string PiggyBank = "\uf487"; - public const string Pilcrow = "\uf488"; - public const string PilcrowSquare = "\uf489"; - public const string Pill = "\uf48a"; - public const string Pin = "\uf48b"; - public const string PinOff = "\uf48c"; - public const string Pipette = "\uf48d"; - public const string Pizza = "\uf48e"; - public const string Plane = "\uf48f"; - public const string PlaneLanding = "\uf490"; - public const string PlaneTakeoff = "\uf491"; - public const string Play = "\uf492"; - public const string PlayCircle = "\uf493"; - public const string PlaySquare = "\uf494"; - public const string Plug = "\uf495"; - public const string Plug2 = "\uf496"; - public const string PlugZap = "\uf497"; - public const string PlugZap2 = "\uf498"; - public const string Plus = "\uf499"; - public const string PlusCircle = "\uf49a"; - public const string PlusSquare = "\uf49b"; - public const string Pocket = "\uf49c"; - public const string PocketKnife = "\uf49d"; - public const string Podcast = "\uf49e"; - public const string Pointer = "\uf49f"; - public const string Popcorn = "\uf4a0"; - public const string Popsicle = "\uf4a1"; - public const string PoundSterling = "\uf4a2"; - public const string Power = "\uf4a3"; - public const string PowerOff = "\uf4a4"; - public const string Presentation = "\uf4a5"; - public const string Printer = "\uf4a6"; - public const string Projector = "\uf4a7"; - public const string Puzzle = "\uf4a8"; - public const string Pyramid = "\uf4a9"; - public const string QrCode = "\uf4aa"; - public const string Quote = "\uf4ab"; - public const string Rabbit = "\uf4ac"; - public const string Radar = "\uf4ad"; - public const string Radiation = "\uf4ae"; - public const string Radio = "\uf4af"; - public const string RadioReceiver = "\uf4b0"; - public const string RadioTower = "\uf4b1"; - public const string Radius = "\uf4b2"; - public const string RailSymbol = "\uf4b3"; - public const string Rainbow = "\uf4b4"; - public const string Rat = "\uf4b5"; - public const string Ratio = "\uf4b6"; - public const string Receipt = "\uf4b7"; - public const string RectangleHorizontal = "\uf4b8"; - public const string RectangleVertical = "\uf4b9"; - public const string Recycle = "\uf4ba"; - public const string Redo = "\uf4bb"; - public const string Redo2 = "\uf4bc"; - public const string RedoDot = "\uf4bd"; - public const string RefreshCcw = "\uf4be"; - public const string RefreshCcwDot = "\uf4bf"; - public const string RefreshCw = "\uf4c0"; - public const string RefreshCwOff = "\uf4c1"; - public const string Refrigerator = "\uf4c2"; - public const string Regex = "\uf4c3"; - public const string RemoveFormatting = "\uf4c4"; - public const string Repeat = "\uf4c5"; - public const string Repeat1 = "\uf4c6"; - public const string Repeat2 = "\uf4c7"; - public const string Replace = "\uf4c8"; - public const string ReplaceAll = "\uf4c9"; - public const string Reply = "\uf4ca"; - public const string ReplyAll = "\uf4cb"; - public const string Rewind = "\uf4cc"; - public const string Rocket = "\uf4cd"; - public const string RockingChair = "\uf4ce"; - public const string RollerCoaster = "\uf4cf"; - public const string Rotate3d = "\uf4d0"; - public const string RotateCcw = "\uf4d1"; - public const string RotateCw = "\uf4d2"; - public const string Router = "\uf4d3"; - public const string Rows = "\uf4d4"; - public const string Rss = "\uf4d5"; - public const string Ruler = "\uf4d6"; - public const string RussianRuble = "\uf4d7"; - public const string Sailboat = "\uf4d8"; - public const string Salad = "\uf4d9"; - public const string Sandwich = "\uf4da"; - public const string Satellite = "\uf4db"; - public const string SatelliteDish = "\uf4dc"; - public const string Save = "\uf4dd"; - public const string SaveAll = "\uf4de"; - public const string Scale = "\uf4df"; - public const string Scale3d = "\uf4e0"; - public const string Scaling = "\uf4e1"; - public const string Scan = "\uf4e2"; - public const string ScanBarcode = "\uf4e3"; - public const string ScanEye = "\uf4e4"; - public const string ScanFace = "\uf4e5"; - public const string ScanLine = "\uf4e6"; - public const string ScanSearch = "\uf4e7"; - public const string ScanText = "\uf4e8"; - public const string ScatterChart = "\uf4e9"; - public const string School = "\uf4ea"; - public const string School2 = "\uf4eb"; - public const string Scissors = "\uf4ec"; - public const string ScissorsLineDashed = "\uf4ed"; - public const string ScissorsSquare = "\uf4ee"; - public const string ScissorsSquareDashedBottom = "\uf4ef"; - public const string ScreenShare = "\uf4f0"; - public const string ScreenShareOff = "\uf4f1"; - public const string Scroll = "\uf4f2"; - public const string ScrollText = "\uf4f3"; - public const string Search = "\uf4f4"; - public const string SearchCheck = "\uf4f5"; - public const string SearchCode = "\uf4f6"; - public const string SearchSlash = "\uf4f7"; - public const string SearchX = "\uf4f8"; - public const string Send = "\uf4f9"; - public const string SendHorizontal = "\uf4fa"; - public const string SendToBack = "\uf4fb"; - public const string SeparatorHorizontal = "\uf4fc"; - public const string SeparatorVertical = "\uf4fd"; - public const string Server = "\uf4fe"; - public const string ServerCog = "\uf4ff"; - public const string ServerCrash = "\uf500"; - public const string ServerOff = "\uf501"; - public const string Settings = "\uf502"; - public const string Settings2 = "\uf503"; - public const string Shapes = "\uf504"; - public const string Share = "\uf505"; - public const string Share2 = "\uf506"; - public const string Sheet = "\uf507"; - public const string Shell = "\uf508"; - public const string Shield = "\uf509"; - public const string ShieldAlert = "\uf50a"; - public const string ShieldBan = "\uf50b"; - public const string ShieldCheck = "\uf50c"; - public const string ShieldEllipsis = "\uf50d"; - public const string ShieldHalf = "\uf50e"; - public const string ShieldMinus = "\uf50f"; - public const string ShieldOff = "\uf510"; - public const string ShieldPlus = "\uf511"; - public const string ShieldQuestion = "\uf512"; - public const string ShieldX = "\uf513"; - public const string Ship = "\uf514"; - public const string ShipWheel = "\uf515"; - public const string Shirt = "\uf516"; - public const string ShoppingBag = "\uf517"; - public const string ShoppingBasket = "\uf518"; - public const string ShoppingCart = "\uf519"; - public const string Shovel = "\uf51a"; - public const string ShowerHead = "\uf51b"; - public const string Shrink = "\uf51c"; - public const string Shrub = "\uf51d"; - public const string Shuffle = "\uf51e"; - public const string Sigma = "\uf51f"; - public const string SigmaSquare = "\uf520"; - public const string Signal = "\uf521"; - public const string SignalHigh = "\uf522"; - public const string SignalLow = "\uf523"; - public const string SignalMedium = "\uf524"; - public const string SignalZero = "\uf525"; - public const string Siren = "\uf526"; - public const string SkipBack = "\uf527"; - public const string SkipForward = "\uf528"; - public const string Skull = "\uf529"; - public const string Slack = "\uf52a"; - public const string Slash = "\uf52b"; - public const string Slice = "\uf52c"; - public const string Sliders = "\uf52d"; - public const string SlidersHorizontal = "\uf52e"; - public const string Smartphone = "\uf52f"; - public const string SmartphoneCharging = "\uf530"; - public const string SmartphoneNfc = "\uf531"; - public const string Smile = "\uf532"; - public const string SmilePlus = "\uf533"; - public const string Snail = "\uf534"; - public const string Snowflake = "\uf535"; - public const string Sofa = "\uf536"; - public const string Soup = "\uf537"; - public const string Icon1 = "\uf538"; - public const string Spade = "\uf539"; - public const string Sparkle = "\uf53a"; - public const string Sparkles = "\uf53b"; - public const string Speaker = "\uf53c"; - public const string Speech = "\uf53d"; - public const string SpellCheck = "\uf53e"; - public const string SpellCheck2 = "\uf53f"; - public const string Spline = "\uf540"; - public const string Split = "\uf541"; - public const string SplitSquareHorizontal = "\uf542"; - public const string SplitSquareVertical = "\uf543"; - public const string SprayCan = "\uf544"; - public const string Sprout = "\uf545"; - public const string Square = "\uf546"; - public const string SquareAsterisk = "\uf547"; - public const string SquareCode = "\uf548"; - public const string SquareDashedBottom = "\uf549"; - public const string SquareDashedBottomCode = "\uf54a"; - public const string SquareDot = "\uf54b"; - public const string SquareEqual = "\uf54c"; - public const string SquareSlash = "\uf54d"; - public const string SquareStack = "\uf54e"; - public const string Squirrel = "\uf54f"; - public const string Stamp = "\uf550"; - public const string Star = "\uf551"; - public const string StarHalf = "\uf552"; - public const string StarOff = "\uf553"; - public const string StepBack = "\uf554"; - public const string StepForward = "\uf555"; - public const string Stethoscope = "\uf556"; - public const string Sticker = "\uf557"; - public const string StickyNote = "\uf558"; - public const string StopCircle = "\uf559"; - public const string Store = "\uf55a"; - public const string StretchHorizontal = "\uf55b"; - public const string StretchVertical = "\uf55c"; - public const string Strikethrough = "\uf55d"; - public const string Subscript = "\uf55e"; - public const string Subtitles = "\uf55f"; - public const string Sun = "\uf560"; - public const string SunDim = "\uf561"; - public const string SunMedium = "\uf562"; - public const string SunMoon = "\uf563"; - public const string SunSnow = "\uf564"; - public const string Sunrise = "\uf565"; - public const string Sunset = "\uf566"; - public const string Superscript = "\uf567"; - public const string SwissFranc = "\uf568"; - public const string SwitchCamera = "\uf569"; - public const string Sword = "\uf56a"; - public const string Swords = "\uf56b"; - public const string Syringe = "\uf56c"; - public const string Table = "\uf56d"; - public const string Table2 = "\uf56e"; - public const string TableProperties = "\uf56f"; - public const string Tablet = "\uf570"; - public const string TabletSmartphone = "\uf571"; - public const string Tablets = "\uf572"; - public const string Tag = "\uf573"; - public const string Tags = "\uf574"; - public const string Tally1 = "\uf575"; - public const string Tally2 = "\uf576"; - public const string Tally3 = "\uf577"; - public const string Tally4 = "\uf578"; - public const string Tally5 = "\uf579"; - public const string Tangent = "\uf57a"; - public const string Target = "\uf57b"; - public const string Tent = "\uf57c"; - public const string TentTree = "\uf57d"; - public const string Terminal = "\uf57e"; - public const string TerminalSquare = "\uf57f"; - public const string TestTube = "\uf580"; - public const string TestTube2 = "\uf581"; - public const string TestTubes = "\uf582"; - public const string Text = "\uf583"; - public const string TextCursor = "\uf584"; - public const string TextCursorInput = "\uf585"; - public const string TextQuote = "\uf586"; - public const string TextSelect = "\uf587"; - public const string Theater = "\uf588"; - public const string Thermometer = "\uf589"; - public const string ThermometerSnowflake = "\uf58a"; - public const string ThermometerSun = "\uf58b"; - public const string ThumbsDown = "\uf58c"; - public const string ThumbsUp = "\uf58d"; - public const string Ticket = "\uf58e"; - public const string Timer = "\uf58f"; - public const string TimerOff = "\uf590"; - public const string TimerReset = "\uf591"; - public const string ToggleLeft = "\uf592"; - public const string ToggleRight = "\uf593"; - public const string Tornado = "\uf594"; - public const string Torus = "\uf595"; - public const string Touchpad = "\uf596"; - public const string TouchpadOff = "\uf597"; - public const string TowerControl = "\uf598"; - public const string ToyBrick = "\uf599"; - public const string Tractor = "\uf59a"; - public const string TrafficCone = "\uf59b"; - public const string TrainFront = "\uf59c"; - public const string TrainFrontTunnel = "\uf59d"; - public const string TrainTrack = "\uf59e"; - public const string TramFront = "\uf59f"; - public const string Trash = "\uf5a0"; - public const string Trash2 = "\uf5a1"; - public const string TreeDeciduous = "\uf5a2"; - public const string TreePine = "\uf5a3"; - public const string Trees = "\uf5a4"; - public const string Trello = "\uf5a5"; - public const string TrendingDown = "\uf5a6"; - public const string TrendingUp = "\uf5a7"; - public const string Triangle = "\uf5a8"; - public const string TriangleRight = "\uf5a9"; - public const string Trophy = "\uf5aa"; - public const string Truck = "\uf5ab"; - public const string Turtle = "\uf5ac"; - public const string Tv = "\uf5ad"; - public const string Tv2 = "\uf5ae"; - public const string Twitch = "\uf5af"; - public const string Twitter = "\uf5b0"; - public const string Type = "\uf5b1"; - public const string Umbrella = "\uf5b2"; - public const string Underline = "\uf5b3"; - public const string Undo = "\uf5b4"; - public const string Undo2 = "\uf5b5"; - public const string UndoDot = "\uf5b6"; - public const string UnfoldHorizontal = "\uf5b7"; - public const string UnfoldVertical = "\uf5b8"; - public const string Ungroup = "\uf5b9"; - public const string Unlink = "\uf5ba"; - public const string Unlink2 = "\uf5bb"; - public const string Unlock = "\uf5bc"; - public const string UnlockKeyhole = "\uf5bd"; - public const string Unplug = "\uf5be"; - public const string Upload = "\uf5bf"; - public const string UploadCloud = "\uf5c0"; - public const string Usb = "\uf5c1"; - public const string User = "\uf5c2"; - public const string User2 = "\uf5c3"; - public const string UserCheck = "\uf5c4"; - public const string UserCheck2 = "\uf5c5"; - public const string UserCircle = "\uf5c6"; - public const string UserCircle2 = "\uf5c7"; - public const string UserCog = "\uf5c8"; - public const string UserCog2 = "\uf5c9"; - public const string UserMinus = "\uf5ca"; - public const string UserMinus2 = "\uf5cb"; - public const string UserPlus = "\uf5cc"; - public const string UserPlus2 = "\uf5cd"; - public const string UserSquare = "\uf5ce"; - public const string UserSquare2 = "\uf5cf"; - public const string UserX = "\uf5d0"; - public const string UserX2 = "\uf5d1"; - public const string Users = "\uf5d2"; - public const string Users2 = "\uf5d3"; - public const string Utensils = "\uf5d4"; - public const string UtensilsCrossed = "\uf5d5"; - public const string UtilityPole = "\uf5d6"; - public const string Variable = "\uf5d7"; - public const string Vegan = "\uf5d8"; - public const string VenetianMask = "\uf5d9"; - public const string Vibrate = "\uf5da"; - public const string VibrateOff = "\uf5db"; - public const string Video = "\uf5dc"; - public const string VideoOff = "\uf5dd"; - public const string Videotape = "\uf5de"; - public const string View = "\uf5df"; - public const string Voicemail = "\uf5e0"; - public const string Volume = "\uf5e1"; - public const string Volume1 = "\uf5e2"; - public const string Volume2 = "\uf5e3"; - public const string VolumeX = "\uf5e4"; - public const string Vote = "\uf5e5"; - public const string Wallet = "\uf5e6"; - public const string Wallet2 = "\uf5e7"; - public const string WalletCards = "\uf5e8"; - public const string Wallpaper = "\uf5e9"; - public const string Wand = "\uf5ea"; - public const string Wand2 = "\uf5eb"; - public const string Warehouse = "\uf5ec"; - public const string Watch = "\uf5ed"; - public const string Waves = "\uf5ee"; - public const string Webcam = "\uf5ef"; - public const string Webhook = "\uf5f0"; - public const string Weight = "\uf5f1"; - public const string Wheat = "\uf5f2"; - public const string WheatOff = "\uf5f3"; - public const string WholeWord = "\uf5f4"; - public const string Wifi = "\uf5f5"; - public const string WifiOff = "\uf5f6"; - public const string Wind = "\uf5f7"; - public const string Wine = "\uf5f8"; - public const string WineOff = "\uf5f9"; - public const string Workflow = "\uf5fa"; - public const string WrapText = "\uf5fb"; - public const string Wrench = "\uf5fc"; - public const string x = "\uf5fd"; - public const string XCircle = "\uf5fe"; - public const string XOctagon = "\uf5ff"; - public const string XSquare = "\uf600"; - public const string Youtube = "\uf601"; - public const string Zap = "\uf602"; - public const string ZapOff = "\uf603"; - public const string ZoomIn = "\uf604"; - public const string ZoomOut = "\uf605"; -} \ No newline at end of file + public const string AArrowDown = "\ue58a"; + public const string AArrowUp = "\ue58b"; + public const string ALargeSmall = "\ue58c"; + public const string Accessibility = "\ue297"; + public const string Activity = "\ue038"; + public const string AirVent = "\ue351"; + public const string Airplay = "\ue039"; + public const string AlarmClockCheck = "\ue1ec"; + public const string AlarmClockMinus = "\ue1ed"; + public const string AlarmClockOff = "\ue23b"; + public const string AlarmClockPlus = "\ue1ee"; + public const string AlarmClock = "\ue03a"; + public const string AlarmSmoke = "\ue580"; + public const string Album = "\ue03b"; + public const string AlignCenterHorizontal = "\ue26c"; + public const string AlignCenterVertical = "\ue26d"; + public const string AlignCenter = "\ue03c"; + public const string AlignEndHorizontal = "\ue26e"; + public const string AlignEndVertical = "\ue26f"; + public const string AlignHorizontalDistributeCenter = "\ue03d"; + public const string AlignHorizontalDistributeEnd = "\ue03e"; + public const string AlignHorizontalDistributeStart = "\ue03f"; + public const string AlignHorizontalJustifyCenter = "\ue272"; + public const string AlignHorizontalJustifyEnd = "\ue273"; + public const string AlignHorizontalJustifyStart = "\ue274"; + public const string AlignHorizontalSpaceAround = "\ue275"; + public const string AlignHorizontalSpaceBetween = "\ue276"; + public const string AlignJustify = "\ue040"; + public const string AlignLeft = "\ue041"; + public const string AlignRight = "\ue042"; + public const string AlignStartHorizontal = "\ue270"; + public const string AlignStartVertical = "\ue271"; + public const string AlignVerticalDistributeCenter = "\ue27e"; + public const string AlignVerticalDistributeEnd = "\ue27f"; + public const string AlignVerticalDistributeStart = "\ue280"; + public const string AlignVerticalJustifyCenter = "\ue277"; + public const string AlignVerticalJustifyEnd = "\ue278"; + public const string AlignVerticalJustifyStart = "\ue279"; + public const string AlignVerticalSpaceAround = "\ue27a"; + public const string AlignVerticalSpaceBetween = "\ue27b"; + public const string Ambulance = "\ue5c0"; + public const string Ampersand = "\ue4a1"; + public const string Ampersands = "\ue4a2"; + public const string Amphora = "\ue620"; + public const string Anchor = "\ue043"; + public const string Angry = "\ue2fc"; + public const string Annoyed = "\ue2fd"; + public const string Antenna = "\ue4e7"; + public const string Anvil = "\ue585"; + public const string Aperture = "\ue044"; + public const string AppWindowMac = "\ue5d7"; + public const string AppWindow = "\ue42b"; + public const string Apple = "\ue352"; + public const string ArchiveRestore = "\ue2cd"; + public const string ArchiveX = "\ue511"; + public const string Archive = "\ue045"; + public const string Armchair = "\ue2c0"; + public const string ArrowBigDownDash = "\ue422"; + public const string ArrowBigDown = "\ue1e1"; + public const string ArrowBigLeftDash = "\ue423"; + public const string ArrowBigLeft = "\ue1e2"; + public const string ArrowBigRightDash = "\ue424"; + public const string ArrowBigRight = "\ue1e3"; + public const string ArrowBigUpDash = "\ue425"; + public const string ArrowBigUp = "\ue1e4"; + public const string ArrowDown01 = "\ue418"; + public const string ArrowDown10 = "\ue419"; + public const string ArrowDownAZ = "\ue41a"; + public const string ArrowDownFromLine = "\ue459"; + public const string ArrowDownLeft = "\ue047"; + public const string ArrowDownNarrowWide = "\ue048"; + public const string ArrowDownRight = "\ue049"; + public const string ArrowDownToDot = "\ue452"; + public const string ArrowDownToLine = "\ue45a"; + public const string ArrowDownUp = "\ue04a"; + public const string ArrowDownWideNarrow = "\ue04b"; + public const string ArrowDownZA = "\ue41b"; + public const string ArrowDown = "\ue046"; + public const string ArrowLeftFromLine = "\ue45b"; + public const string ArrowLeftRight = "\ue24a"; + public const string ArrowLeftToLine = "\ue45c"; + public const string ArrowLeft = "\ue04c"; + public const string ArrowRightFromLine = "\ue45d"; + public const string ArrowRightLeft = "\ue41c"; + public const string ArrowRightToLine = "\ue45e"; + public const string ArrowRight = "\ue04d"; + public const string ArrowUp01 = "\ue41d"; + public const string ArrowUp10 = "\ue41e"; + public const string ArrowUpAZ = "\ue41f"; + public const string ArrowUpDown = "\ue381"; + public const string ArrowUpFromDot = "\ue453"; + public const string ArrowUpFromLine = "\ue45f"; + public const string ArrowUpLeft = "\ue04f"; + public const string ArrowUpNarrowWide = "\ue050"; + public const string ArrowUpRight = "\ue051"; + public const string ArrowUpToLine = "\ue460"; + public const string ArrowUpWideNarrow = "\ue420"; + public const string ArrowUpZA = "\ue421"; + public const string ArrowUp = "\ue04e"; + public const string ArrowsUpFromLine = "\ue4d9"; + public const string Asterisk = "\ue1ef"; + public const string AtSign = "\ue052"; + public const string Atom = "\ue3db"; + public const string AudioLines = "\ue55f"; + public const string AudioWaveform = "\ue560"; + public const string Award = "\ue053"; + public const string Axe = "\ue054"; + public const string Axis3d = "\ue2fe"; + public const string Baby = "\ue2ce"; + public const string Backpack = "\ue2c8"; + public const string BadgeAlert = "\ue47a"; + public const string BadgeCent = "\ue514"; + public const string BadgeCheck = "\ue241"; + public const string BadgeDollarSign = "\ue47b"; + public const string BadgeEuro = "\ue515"; + public const string BadgeHelp = "\ue47c"; + public const string BadgeIndianRupee = "\ue516"; + public const string BadgeInfo = "\ue47d"; + public const string BadgeJapaneseYen = "\ue517"; + public const string BadgeMinus = "\ue47e"; + public const string BadgePercent = "\ue47f"; + public const string BadgePlus = "\ue480"; + public const string BadgePoundSterling = "\ue518"; + public const string BadgeRussianRuble = "\ue519"; + public const string BadgeSwissFranc = "\ue51a"; + public const string BadgeX = "\ue481"; + public const string Badge = "\ue479"; + public const string BaggageClaim = "\ue2c9"; + public const string Ban = "\ue055"; + public const string Banana = "\ue353"; + public const string Bandage = "\ue622"; + public const string Banknote = "\ue056"; + public const string Barcode = "\ue538"; + public const string Baseline = "\ue285"; + public const string Bath = "\ue2ab"; + public const string BatteryCharging = "\ue058"; + public const string BatteryFull = "\ue059"; + public const string BatteryLow = "\ue05a"; + public const string BatteryMedium = "\ue05b"; + public const string BatteryWarning = "\ue3b0"; + public const string Battery = "\ue057"; + public const string Beaker = "\ue05c"; + public const string BeanOff = "\ue394"; + public const string Bean = "\ue393"; + public const string BedDouble = "\ue2c2"; + public const string BedSingle = "\ue2c3"; + public const string Bed = "\ue2c1"; + public const string Beef = "\ue3a9"; + public const string BeerOff = "\ue5de"; + public const string Beer = "\ue2cf"; + public const string BellDot = "\ue430"; + public const string BellElectric = "\ue581"; + public const string BellMinus = "\ue1f0"; + public const string BellOff = "\ue05e"; + public const string BellPlus = "\ue1f1"; + public const string BellRing = "\ue224"; + public const string Bell = "\ue05d"; + public const string BetweenHorizontalEnd = "\ue596"; + public const string BetweenHorizontalStart = "\ue597"; + public const string BetweenVerticalEnd = "\ue598"; + public const string BetweenVerticalStart = "\ue599"; + public const string BicepsFlexed = "\ue5f0"; + public const string Bike = "\ue1d2"; + public const string Binary = "\ue1f2"; + public const string Binoculars = "\ue626"; + public const string Biohazard = "\ue446"; + public const string Bird = "\ue3c9"; + public const string Bitcoin = "\ue05f"; + public const string Blend = "\ue5a1"; + public const string Blinds = "\ue3c4"; + public const string Blocks = "\ue4ff"; + public const string BluetoothConnected = "\ue1b8"; + public const string BluetoothOff = "\ue1b9"; + public const string BluetoothSearching = "\ue1ba"; + public const string Bluetooth = "\ue060"; + public const string Bold = "\ue061"; + public const string Bolt = "\ue591"; + public const string Bomb = "\ue2ff"; + public const string Bone = "\ue35c"; + public const string BookA = "\ue549"; + public const string BookAudio = "\ue54a"; + public const string BookCheck = "\ue54b"; + public const string BookCopy = "\ue3f1"; + public const string BookDashed = "\ue3f2"; + public const string BookDown = "\ue3f3"; + public const string BookHeadphones = "\ue54c"; + public const string BookHeart = "\ue54d"; + public const string BookImage = "\ue54e"; + public const string BookKey = "\ue3f4"; + public const string BookLock = "\ue3f5"; + public const string BookMarked = "\ue3f6"; + public const string BookMinus = "\ue3f7"; + public const string BookOpenCheck = "\ue385"; + public const string BookOpenText = "\ue54f"; + public const string BookOpen = "\ue063"; + public const string BookPlus = "\ue3f8"; + public const string BookText = "\ue550"; + public const string BookType = "\ue551"; + public const string BookUp2 = "\ue4ab"; + public const string BookUp = "\ue3f9"; + public const string BookUser = "\ue552"; + public const string BookX = "\ue3fa"; + public const string Book = "\ue062"; + public const string BookmarkCheck = "\ue524"; + public const string BookmarkMinus = "\ue23c"; + public const string BookmarkPlus = "\ue23d"; + public const string BookmarkX = "\ue525"; + public const string Bookmark = "\ue064"; + public const string BoomBox = "\ue4f3"; + public const string BotMessageSquare = "\ue5d3"; + public const string BotOff = "\ue5e5"; + public const string Bot = "\ue1bb"; + public const string Box = "\ue065"; + public const string Boxes = "\ue2d0"; + public const string Braces = "\ue36e"; + public const string Brackets = "\ue448"; + public const string BrainCircuit = "\ue3cb"; + public const string BrainCog = "\ue3cc"; + public const string Brain = "\ue3ca"; + public const string BrickWall = "\ue586"; + public const string BriefcaseBusiness = "\ue5da"; + public const string BriefcaseConveyorBelt = "\ue630"; + public const string BriefcaseMedical = "\ue5db"; + public const string Briefcase = "\ue066"; + public const string BringToFront = "\ue4f4"; + public const string Brush = "\ue1d3"; + public const string BugOff = "\ue512"; + public const string BugPlay = "\ue513"; + public const string Bug = "\ue20c"; + public const string Building2 = "\ue290"; + public const string Building = "\ue1cc"; + public const string BusFront = "\ue500"; + public const string Bus = "\ue1d4"; + public const string CableCar = "\ue501"; + public const string Cable = "\ue4e8"; + public const string CakeSlice = "\ue4be"; + public const string Cake = "\ue348"; + public const string Calculator = "\ue1bc"; + public const string Calendar1 = "\ue635"; + public const string CalendarArrowDown = "\ue603"; + public const string CalendarArrowUp = "\ue604"; + public const string CalendarCheck2 = "\ue2b8"; + public const string CalendarCheck = "\ue2b7"; + public const string CalendarClock = "\ue304"; + public const string CalendarCog = "\ue5f2"; + public const string CalendarDays = "\ue2b9"; + public const string CalendarFold = "\ue5b9"; + public const string CalendarHeart = "\ue305"; + public const string CalendarMinus2 = "\ue5ba"; + public const string CalendarMinus = "\ue2ba"; + public const string CalendarOff = "\ue2bb"; + public const string CalendarPlus2 = "\ue5bb"; + public const string CalendarPlus = "\ue2bc"; + public const string CalendarRange = "\ue2bd"; + public const string CalendarSearch = "\ue306"; + public const string CalendarX2 = "\ue2bf"; + public const string CalendarX = "\ue2be"; + public const string Calendar = "\ue067"; + public const string CameraOff = "\ue069"; + public const string Camera = "\ue068"; + public const string CandyCane = "\ue4bf"; + public const string CandyOff = "\ue396"; + public const string Candy = "\ue395"; + public const string Cannabis = "\ue5d9"; + public const string CaptionsOff = "\ue5c6"; + public const string Captions = "\ue3a8"; + public const string CarFront = "\ue502"; + public const string CarTaxiFront = "\ue503"; + public const string Car = "\ue1d5"; + public const string Caravan = "\ue53e"; + public const string Carrot = "\ue25a"; + public const string CaseLower = "\ue3dc"; + public const string CaseSensitive = "\ue3dd"; + public const string CaseUpper = "\ue3de"; + public const string CassetteTape = "\ue4cf"; + public const string Cast = "\ue06a"; + public const string Castle = "\ue3e4"; + public const string Cat = "\ue390"; + public const string Cctv = "\ue582"; + public const string ChartArea = "\ue4d8"; + public const string ChartBarBig = "\ue4ac"; + public const string ChartBarDecreasing = "\ue60c"; + public const string ChartBarIncreasing = "\ue60d"; + public const string ChartBarStacked = "\ue60e"; + public const string ChartBar = "\ue2a2"; + public const string ChartCandlestick = "\ue4ad"; + public const string ChartColumnBig = "\ue4ae"; + public const string ChartColumnDecreasing = "\ue06b"; + public const string ChartColumnIncreasing = "\ue2a4"; + public const string ChartColumnStacked = "\ue60f"; + public const string ChartColumn = "\ue2a3"; + public const string ChartGantt = "\ue629"; + public const string ChartLine = "\ue2a5"; + public const string ChartNetwork = "\ue610"; + public const string ChartNoAxesColumnDecreasing = "\ue06d"; + public const string ChartNoAxesColumnIncreasing = "\ue06e"; + public const string ChartNoAxesColumn = "\ue06c"; + public const string ChartNoAxesCombined = "\ue611"; + public const string ChartNoAxesGantt = "\ue4c9"; + public const string ChartPie = "\ue06f"; + public const string ChartScatter = "\ue48f"; + public const string ChartSpline = "\ue612"; + public const string CheckCheck = "\ue392"; + public const string Check = "\ue070"; + public const string ChefHat = "\ue2ac"; + public const string Cherry = "\ue354"; + public const string ChevronDown = "\ue071"; + public const string ChevronFirst = "\ue243"; + public const string ChevronLast = "\ue244"; + public const string ChevronLeft = "\ue072"; + public const string ChevronRight = "\ue073"; + public const string ChevronUp = "\ue074"; + public const string ChevronsDownUp = "\ue228"; + public const string ChevronsDown = "\ue075"; + public const string ChevronsLeftRightEllipsis = "\ue624"; + public const string ChevronsLeftRight = "\ue293"; + public const string ChevronsLeft = "\ue076"; + public const string ChevronsRightLeft = "\ue294"; + public const string ChevronsRight = "\ue077"; + public const string ChevronsUpDown = "\ue211"; + public const string ChevronsUp = "\ue078"; + public const string Chrome = "\ue079"; + public const string Church = "\ue3e5"; + public const string CigaretteOff = "\ue2c7"; + public const string Cigarette = "\ue2c6"; + public const string CircleAlert = "\ue07b"; + public const string CircleArrowDown = "\ue07c"; + public const string CircleArrowLeft = "\ue07d"; + public const string CircleArrowOutDownLeft = "\ue3fc"; + public const string CircleArrowOutDownRight = "\ue3fd"; + public const string CircleArrowOutUpLeft = "\ue3fe"; + public const string CircleArrowOutUpRight = "\ue3ff"; + public const string CircleArrowRight = "\ue07e"; + public const string CircleArrowUp = "\ue07f"; + public const string CircleCheckBig = "\ue080"; + public const string CircleCheck = "\ue226"; + public const string CircleChevronDown = "\ue4e2"; + public const string CircleChevronLeft = "\ue4e3"; + public const string CircleChevronRight = "\ue4e4"; + public const string CircleChevronUp = "\ue4e5"; + public const string CircleDashed = "\ue4b5"; + public const string CircleDivide = "\ue081"; + public const string CircleDollarSign = "\ue482"; + public const string CircleDotDashed = "\ue4b6"; + public const string CircleDot = "\ue349"; + public const string CircleEllipsis = "\ue34a"; + public const string CircleEqual = "\ue405"; + public const string CircleFadingArrowUp = "\ue61d"; + public const string CircleFadingPlus = "\ue5c1"; + public const string CircleGauge = "\ue4e6"; + public const string CircleHelp = "\ue082"; + public const string CircleMinus = "\ue083"; + public const string CircleOff = "\ue406"; + public const string CircleParkingOff = "\ue3ce"; + public const string CircleParking = "\ue3cd"; + public const string CirclePause = "\ue084"; + public const string CirclePercent = "\ue51f"; + public const string CirclePlay = "\ue085"; + public const string CirclePlus = "\ue086"; + public const string CirclePower = "\ue555"; + public const string CircleSlash2 = "\ue213"; + public const string CircleSlash = "\ue407"; + public const string CircleStop = "\ue087"; + public const string CircleUserRound = "\ue467"; + public const string CircleUser = "\ue466"; + public const string CircleX = "\ue088"; + public const string Circle = "\ue07a"; + public const string CircuitBoard = "\ue408"; + public const string Citrus = "\ue379"; + public const string Clapperboard = "\ue29b"; + public const string ClipboardCheck = "\ue219"; + public const string ClipboardCopy = "\ue225"; + public const string ClipboardList = "\ue08a"; + public const string ClipboardMinus = "\ue5c3"; + public const string ClipboardPaste = "\ue3ec"; + public const string ClipboardPenLine = "\ue308"; + public const string ClipboardPen = "\ue307"; + public const string ClipboardPlus = "\ue5c4"; + public const string ClipboardType = "\ue309"; + public const string ClipboardX = "\ue222"; + public const string Clipboard = "\ue089"; + public const string Clock1 = "\ue24b"; + public const string Clock10 = "\ue24c"; + public const string Clock11 = "\ue24d"; + public const string Clock12 = "\ue24e"; + public const string Clock2 = "\ue24f"; + public const string Clock3 = "\ue250"; + public const string Clock4 = "\ue08b"; + public const string Clock5 = "\ue252"; + public const string Clock6 = "\ue253"; + public const string Clock7 = "\ue254"; + public const string Clock8 = "\ue255"; + public const string Clock9 = "\ue256"; + public const string ClockAlert = "\ue62f"; + public const string ClockArrowDown = "\ue605"; + public const string ClockArrowUp = "\ue606"; + public const string CloudCog = "\ue30a"; + public const string CloudDownload = "\ue08d"; + public const string CloudDrizzle = "\ue08e"; + public const string CloudFog = "\ue214"; + public const string CloudHail = "\ue08f"; + public const string CloudLightning = "\ue090"; + public const string CloudMoonRain = "\ue2fa"; + public const string CloudMoon = "\ue215"; + public const string CloudOff = "\ue091"; + public const string CloudRainWind = "\ue093"; + public const string CloudRain = "\ue092"; + public const string CloudSnow = "\ue094"; + public const string CloudSunRain = "\ue2fb"; + public const string CloudSun = "\ue216"; + public const string CloudUpload = "\ue095"; + public const string Cloud = "\ue08c"; + public const string Cloudy = "\ue217"; + public const string Clover = "\ue096"; + public const string Club = "\ue49b"; + public const string CodeXml = "\ue206"; + public const string Code = "\ue097"; + public const string Codepen = "\ue098"; + public const string Codesandbox = "\ue099"; + public const string Coffee = "\ue09a"; + public const string Cog = "\ue30b"; + public const string Coins = "\ue09b"; + public const string Columns2 = "\ue09c"; + public const string Columns3 = "\ue09d"; + public const string Columns4 = "\ue58e"; + public const string Combine = "\ue451"; + public const string Command = "\ue09e"; + public const string Compass = "\ue09f"; + public const string Component = "\ue2ad"; + public const string Computer = "\ue4e9"; + public const string ConciergeBell = "\ue37c"; + public const string Cone = "\ue528"; + public const string Construction = "\ue3b8"; + public const string ContactRound = "\ue468"; + public const string Contact = "\ue0a0"; + public const string Container = "\ue4da"; + public const string Contrast = "\ue0a1"; + public const string Cookie = "\ue26b"; + public const string CookingPot = "\ue589"; + public const string CopyCheck = "\ue400"; + public const string CopyMinus = "\ue401"; + public const string CopyPlus = "\ue402"; + public const string CopySlash = "\ue403"; + public const string CopyX = "\ue404"; + public const string Copy = "\ue0a2"; + public const string Copyleft = "\ue0a3"; + public const string Copyright = "\ue0a4"; + public const string CornerDownLeft = "\ue0a5"; + public const string CornerDownRight = "\ue0a6"; + public const string CornerLeftDown = "\ue0a7"; + public const string CornerLeftUp = "\ue0a8"; + public const string CornerRightDown = "\ue0a9"; + public const string CornerRightUp = "\ue0aa"; + public const string CornerUpLeft = "\ue0ab"; + public const string CornerUpRight = "\ue0ac"; + public const string Cpu = "\ue0ad"; + public const string CreativeCommons = "\ue3b6"; + public const string CreditCard = "\ue0ae"; + public const string Croissant = "\ue2ae"; + public const string Crop = "\ue0af"; + public const string Cross = "\ue1e5"; + public const string Crosshair = "\ue0b0"; + public const string Crown = "\ue1d6"; + public const string Cuboid = "\ue529"; + public const string CupSoda = "\ue2d1"; + public const string Currency = "\ue230"; + public const string Cylinder = "\ue52a"; + public const string Dam = "\ue60b"; + public const string DatabaseBackup = "\ue3af"; + public const string DatabaseZap = "\ue510"; + public const string Database = "\ue0b1"; + public const string Delete = "\ue0b2"; + public const string Dessert = "\ue4c0"; + public const string Diameter = "\ue52b"; + public const string DiamondMinus = "\ue5e6"; + public const string DiamondPercent = "\ue520"; + public const string DiamondPlus = "\ue5e7"; + public const string Diamond = "\ue2d2"; + public const string Dice1 = "\ue287"; + public const string Dice2 = "\ue288"; + public const string Dice3 = "\ue289"; + public const string Dice4 = "\ue28a"; + public const string Dice5 = "\ue28b"; + public const string Dice6 = "\ue28c"; + public const string Dices = "\ue2c5"; + public const string Diff = "\ue30c"; + public const string Disc2 = "\ue3fb"; + public const string Disc3 = "\ue499"; + public const string DiscAlbum = "\ue561"; + public const string Disc = "\ue0b3"; + public const string Divide = "\ue0b4"; + public const string DnaOff = "\ue398"; + public const string Dna = "\ue397"; + public const string Dock = "\ue5d8"; + public const string Dog = "\ue391"; + public const string DollarSign = "\ue0b5"; + public const string Donut = "\ue4c1"; + public const string DoorClosed = "\ue3d9"; + public const string DoorOpen = "\ue3da"; + public const string Dot = "\ue454"; + public const string Download = "\ue0b6"; + public const string DraftingCompass = "\ue52c"; + public const string Drama = "\ue526"; + public const string Dribbble = "\ue0b7"; + public const string Drill = "\ue592"; + public const string Droplet = "\ue0b8"; + public const string Droplets = "\ue0b9"; + public const string Drum = "\ue562"; + public const string Drumstick = "\ue25b"; + public const string Dumbbell = "\ue3a5"; + public const string EarOff = "\ue387"; + public const string Ear = "\ue386"; + public const string EarthLock = "\ue5d1"; + public const string Earth = "\ue1f3"; + public const string Eclipse = "\ue5a2"; + public const string EggFried = "\ue355"; + public const string EggOff = "\ue399"; + public const string Egg = "\ue25d"; + public const string EllipsisVertical = "\ue0bb"; + public const string Ellipsis = "\ue0ba"; + public const string EqualNot = "\ue1be"; + public const string Equal = "\ue1bd"; + public const string Eraser = "\ue28f"; + public const string EthernetPort = "\ue625"; + public const string Euro = "\ue0bc"; + public const string Expand = "\ue21a"; + public const string ExternalLink = "\ue0bd"; + public const string EyeClosed = "\ue633"; + public const string EyeOff = "\ue0bf"; + public const string Eye = "\ue0be"; + public const string Facebook = "\ue0c0"; + public const string Factory = "\ue29f"; + public const string Fan = "\ue37d"; + public const string FastForward = "\ue0c1"; + public const string Feather = "\ue0c2"; + public const string Fence = "\ue587"; + public const string FerrisWheel = "\ue484"; + public const string Figma = "\ue0c3"; + public const string FileArchive = "\ue30d"; + public const string FileAudio2 = "\ue30f"; + public const string FileAudio = "\ue30e"; + public const string FileAxis3d = "\ue310"; + public const string FileBadge2 = "\ue312"; + public const string FileBadge = "\ue311"; + public const string FileBox = "\ue313"; + public const string FileChartColumnIncreasing = "\ue315"; + public const string FileChartColumn = "\ue314"; + public const string FileChartLine = "\ue316"; + public const string FileChartPie = "\ue317"; + public const string FileCheck2 = "\ue0c6"; + public const string FileCheck = "\ue0c5"; + public const string FileClock = "\ue318"; + public const string FileCode2 = "\ue463"; + public const string FileCode = "\ue0c7"; + public const string FileCog = "\ue319"; + public const string FileDiff = "\ue31a"; + public const string FileDigit = "\ue0c8"; + public const string FileDown = "\ue31b"; + public const string FileHeart = "\ue31c"; + public const string FileImage = "\ue31d"; + public const string FileInput = "\ue0c9"; + public const string FileJson2 = "\ue370"; + public const string FileJson = "\ue36f"; + public const string FileKey2 = "\ue31f"; + public const string FileKey = "\ue31e"; + public const string FileLock2 = "\ue321"; + public const string FileLock = "\ue320"; + public const string FileMinus2 = "\ue0cb"; + public const string FileMinus = "\ue0ca"; + public const string FileMusic = "\ue563"; + public const string FileOutput = "\ue0cc"; + public const string FilePenLine = "\ue323"; + public const string FilePen = "\ue322"; + public const string FilePlus2 = "\ue0ce"; + public const string FilePlus = "\ue0cd"; + public const string FileQuestion = "\ue324"; + public const string FileScan = "\ue325"; + public const string FileSearch2 = "\ue326"; + public const string FileSearch = "\ue0cf"; + public const string FileSliders = "\ue5a5"; + public const string FileSpreadsheet = "\ue327"; + public const string FileStack = "\ue4a6"; + public const string FileSymlink = "\ue328"; + public const string FileTerminal = "\ue329"; + public const string FileText = "\ue0d0"; + public const string FileType2 = "\ue371"; + public const string FileType = "\ue32a"; + public const string FileUp = "\ue32b"; + public const string FileUser = "\ue632"; + public const string FileVideo2 = "\ue32d"; + public const string FileVideo = "\ue32c"; + public const string FileVolume2 = "\ue32f"; + public const string FileVolume = "\ue32e"; + public const string FileWarning = "\ue330"; + public const string FileX2 = "\ue0d2"; + public const string FileX = "\ue0d1"; + public const string File = "\ue0c4"; + public const string Files = "\ue0d3"; + public const string Film = "\ue0d4"; + public const string FilterX = "\ue3b9"; + public const string Filter = "\ue0d5"; + public const string Fingerprint = "\ue2cb"; + public const string FireExtinguisher = "\ue583"; + public const string FishOff = "\ue3b4"; + public const string FishSymbol = "\ue4f9"; + public const string Fish = "\ue3aa"; + public const string FlagOff = "\ue292"; + public const string FlagTriangleLeft = "\ue237"; + public const string FlagTriangleRight = "\ue238"; + public const string Flag = "\ue0d6"; + public const string FlameKindling = "\ue53f"; + public const string Flame = "\ue0d7"; + public const string FlashlightOff = "\ue0d9"; + public const string Flashlight = "\ue0d8"; + public const string FlaskConicalOff = "\ue39a"; + public const string FlaskConical = "\ue0da"; + public const string FlaskRound = "\ue0db"; + public const string FlipHorizontal2 = "\ue362"; + public const string FlipHorizontal = "\ue361"; + public const string FlipVertical2 = "\ue364"; + public const string FlipVertical = "\ue363"; + public const string Flower2 = "\ue2d4"; + public const string Flower = "\ue2d3"; + public const string Focus = "\ue29e"; + public const string FoldHorizontal = "\ue440"; + public const string FoldVertical = "\ue441"; + public const string FolderArchive = "\ue331"; + public const string FolderCheck = "\ue332"; + public const string FolderClock = "\ue333"; + public const string FolderClosed = "\ue334"; + public const string FolderCode = "\ue600"; + public const string FolderCog = "\ue335"; + public const string FolderDot = "\ue4ca"; + public const string FolderDown = "\ue336"; + public const string FolderGit2 = "\ue40f"; + public const string FolderGit = "\ue40e"; + public const string FolderHeart = "\ue337"; + public const string FolderInput = "\ue338"; + public const string FolderKanban = "\ue4cb"; + public const string FolderKey = "\ue339"; + public const string FolderLock = "\ue33a"; + public const string FolderMinus = "\ue0dd"; + public const string FolderOpenDot = "\ue4cc"; + public const string FolderOpen = "\ue247"; + public const string FolderOutput = "\ue33b"; + public const string FolderPen = "\ue33c"; + public const string FolderPlus = "\ue0de"; + public const string FolderRoot = "\ue4cd"; + public const string FolderSearch2 = "\ue33e"; + public const string FolderSearch = "\ue33d"; + public const string FolderSymlink = "\ue33f"; + public const string FolderSync = "\ue4ce"; + public const string FolderTree = "\ue340"; + public const string FolderUp = "\ue341"; + public const string FolderX = "\ue342"; + public const string Folder = "\ue0dc"; + public const string Folders = "\ue343"; + public const string Footprints = "\ue3bd"; + public const string Forklift = "\ue3c5"; + public const string Forward = "\ue229"; + public const string Frame = "\ue291"; + public const string Framer = "\ue0df"; + public const string Frown = "\ue0e0"; + public const string Fuel = "\ue2af"; + public const string Fullscreen = "\ue539"; + public const string GalleryHorizontalEnd = "\ue4d4"; + public const string GalleryHorizontal = "\ue4d3"; + public const string GalleryThumbnails = "\ue4d5"; + public const string GalleryVerticalEnd = "\ue4d7"; + public const string GalleryVertical = "\ue4d6"; + public const string Gamepad2 = "\ue0e2"; + public const string Gamepad = "\ue0e1"; + public const string Gauge = "\ue1bf"; + public const string Gavel = "\ue0e3"; + public const string Gem = "\ue242"; + public const string Ghost = "\ue20e"; + public const string Gift = "\ue0e4"; + public const string GitBranchPlus = "\ue1f4"; + public const string GitBranch = "\ue0e5"; + public const string GitCommitHorizontal = "\ue0e6"; + public const string GitCommitVertical = "\ue557"; + public const string GitCompareArrows = "\ue558"; + public const string GitCompare = "\ue35d"; + public const string GitFork = "\ue28d"; + public const string GitGraph = "\ue559"; + public const string GitMerge = "\ue0e7"; + public const string GitPullRequestArrow = "\ue55a"; + public const string GitPullRequestClosed = "\ue35e"; + public const string GitPullRequestCreateArrow = "\ue55c"; + public const string GitPullRequestCreate = "\ue55b"; + public const string GitPullRequestDraft = "\ue35f"; + public const string GitPullRequest = "\ue0e8"; + public const string Github = "\ue0e9"; + public const string Gitlab = "\ue0ea"; + public const string GlassWater = "\ue2d5"; + public const string Glasses = "\ue20d"; + public const string GlobeLock = "\ue5d2"; + public const string Globe = "\ue0eb"; + public const string Goal = "\ue4aa"; + public const string Grab = "\ue1e6"; + public const string GraduationCap = "\ue234"; + public const string Grape = "\ue356"; + public const string Grid2x2Check = "\ue5e9"; + public const string Grid2x2Plus = "\ue62d"; + public const string Grid2x2X = "\ue5ea"; + public const string Grid2x2 = "\ue504"; + public const string Grid3x3 = "\ue0ec"; + public const string GripHorizontal = "\ue0ed"; + public const string GripVertical = "\ue0ee"; + public const string Grip = "\ue3b5"; + public const string Group = "\ue469"; + public const string Guitar = "\ue564"; + public const string Ham = "\ue5dc"; + public const string Hammer = "\ue0ef"; + public const string HandCoins = "\ue5bd"; + public const string HandHeart = "\ue5be"; + public const string HandHelping = "\ue3bc"; + public const string HandMetal = "\ue22c"; + public const string HandPlatter = "\ue5bf"; + public const string Hand = "\ue1d7"; + public const string Handshake = "\ue5c5"; + public const string HardDriveDownload = "\ue4ea"; + public const string HardDriveUpload = "\ue4eb"; + public const string HardDrive = "\ue0f0"; + public const string HardHat = "\ue0f1"; + public const string Hash = "\ue0f2"; + public const string Haze = "\ue0f3"; + public const string HdmiPort = "\ue4ec"; + public const string Heading1 = "\ue389"; + public const string Heading2 = "\ue38a"; + public const string Heading3 = "\ue38b"; + public const string Heading4 = "\ue38c"; + public const string Heading5 = "\ue38d"; + public const string Heading6 = "\ue38e"; + public const string Heading = "\ue388"; + public const string HeadphoneOff = "\ue62e"; + public const string Headphones = "\ue0f4"; + public const string Headset = "\ue5c2"; + public const string HeartCrack = "\ue2d6"; + public const string HeartHandshake = "\ue2d7"; + public const string HeartOff = "\ue295"; + public const string HeartPulse = "\ue372"; + public const string Heart = "\ue0f5"; + public const string Heater = "\ue593"; + public const string Hexagon = "\ue0f6"; + public const string Highlighter = "\ue0f7"; + public const string History = "\ue1f5"; + public const string HopOff = "\ue39c"; + public const string Hop = "\ue39b"; + public const string Hospital = "\ue5dd"; + public const string Hotel = "\ue3e6"; + public const string Hourglass = "\ue296"; + public const string HousePlug = "\ue5f5"; + public const string HousePlus = "\ue5f6"; + public const string House = "\ue0f8"; + public const string IceCreamBowl = "\ue3ab"; + public const string IceCreamCone = "\ue357"; + public const string IdCard = "\ue61c"; + public const string ImageDown = "\ue541"; + public const string ImageMinus = "\ue1f6"; + public const string ImageOff = "\ue1c0"; + public const string ImagePlay = "\ue5e4"; + public const string ImagePlus = "\ue1f7"; + public const string ImageUp = "\ue5d0"; + public const string Image = "\ue0f9"; + public const string Images = "\ue5c9"; + public const string Import = "\ue22f"; + public const string Inbox = "\ue0fa"; + public const string IndentDecrease = "\ue0fb"; + public const string IndentIncrease = "\ue0fc"; + public const string IndianRupee = "\ue0fd"; + public const string Infinity = "\ue1e7"; + public const string Info = "\ue0fe"; + public const string InspectionPanel = "\ue588"; + public const string Instagram = "\ue0ff"; + public const string Italic = "\ue100"; + public const string IterationCcw = "\ue428"; + public const string IterationCw = "\ue429"; + public const string JapaneseYen = "\ue101"; + public const string Joystick = "\ue359"; + public const string Kanban = "\ue4e1"; + public const string KeyRound = "\ue4a8"; + public const string KeySquare = "\ue4a9"; + public const string Key = "\ue102"; + public const string KeyboardMusic = "\ue565"; + public const string KeyboardOff = "\ue5e3"; + public const string Keyboard = "\ue284"; + public const string LampCeiling = "\ue2d9"; + public const string LampDesk = "\ue2da"; + public const string LampFloor = "\ue2db"; + public const string LampWallDown = "\ue2dc"; + public const string LampWallUp = "\ue2dd"; + public const string Lamp = "\ue2d8"; + public const string LandPlot = "\ue52d"; + public const string Landmark = "\ue23a"; + public const string Languages = "\ue103"; + public const string LaptopMinimal = "\ue1d8"; + public const string Laptop = "\ue1cd"; + public const string LassoSelect = "\ue1cf"; + public const string Lasso = "\ue1ce"; + public const string Laugh = "\ue300"; + public const string Layers2 = "\ue52e"; + public const string Layers3 = "\ue52f"; + public const string Layers = "\ue104"; + public const string LayoutDashboard = "\ue1c1"; + public const string LayoutGrid = "\ue105"; + public const string LayoutList = "\ue1d9"; + public const string LayoutPanelLeft = "\ue475"; + public const string LayoutPanelTop = "\ue476"; + public const string LayoutTemplate = "\ue207"; + public const string Leaf = "\ue2de"; + public const string LeafyGreen = "\ue474"; + public const string Lectern = "\ue5ee"; + public const string LetterText = "\ue60a"; + public const string LibraryBig = "\ue553"; + public const string Library = "\ue106"; + public const string LifeBuoy = "\ue107"; + public const string Ligature = "\ue43f"; + public const string LightbulbOff = "\ue208"; + public const string Lightbulb = "\ue1c2"; + public const string Link2Off = "\ue10a"; + public const string Link2 = "\ue109"; + public const string Link = "\ue108"; + public const string Linkedin = "\ue10b"; + public const string ListCheck = "\ue5ff"; + public const string ListChecks = "\ue1d0"; + public const string ListCollapse = "\ue5a0"; + public const string ListEnd = "\ue2df"; + public const string ListFilter = "\ue465"; + public const string ListMinus = "\ue23e"; + public const string ListMusic = "\ue2e0"; + public const string ListOrdered = "\ue1d1"; + public const string ListPlus = "\ue23f"; + public const string ListRestart = "\ue457"; + public const string ListStart = "\ue2e1"; + public const string ListTodo = "\ue4c8"; + public const string ListTree = "\ue40d"; + public const string ListVideo = "\ue2e2"; + public const string ListX = "\ue240"; + public const string List = "\ue10c"; + public const string LoaderCircle = "\ue10e"; + public const string LoaderPinwheel = "\ue5eb"; + public const string Loader = "\ue10d"; + public const string LocateFixed = "\ue1db"; + public const string LocateOff = "\ue282"; + public const string Locate = "\ue1da"; + public const string LockKeyholeOpen = "\ue537"; + public const string LockKeyhole = "\ue536"; + public const string LockOpen = "\ue110"; + public const string Lock = "\ue10f"; + public const string LogIn = "\ue111"; + public const string LogOut = "\ue112"; + public const string Logs = "\ue5f9"; + public const string Lollipop = "\ue4c2"; + public const string Luggage = "\ue2ca"; + public const string Magnet = "\ue2b5"; + public const string MailCheck = "\ue365"; + public const string MailMinus = "\ue366"; + public const string MailOpen = "\ue367"; + public const string MailPlus = "\ue368"; + public const string MailQuestion = "\ue369"; + public const string MailSearch = "\ue36a"; + public const string MailWarning = "\ue36b"; + public const string MailX = "\ue36c"; + public const string Mail = "\ue113"; + public const string Mailbox = "\ue3d8"; + public const string Mails = "\ue36d"; + public const string MapPinCheckInside = "\ue615"; + public const string MapPinCheck = "\ue614"; + public const string MapPinHouse = "\ue621"; + public const string MapPinMinusInside = "\ue617"; + public const string MapPinMinus = "\ue616"; + public const string MapPinOff = "\ue2a6"; + public const string MapPinPlusInside = "\ue619"; + public const string MapPinPlus = "\ue618"; + public const string MapPinXInside = "\ue61b"; + public const string MapPinX = "\ue61a"; + public const string MapPin = "\ue115"; + public const string MapPinned = "\ue542"; + public const string Map = "\ue114"; + public const string Martini = "\ue2e3"; + public const string Maximize2 = "\ue117"; + public const string Maximize = "\ue116"; + public const string Medal = "\ue373"; + public const string MegaphoneOff = "\ue374"; + public const string Megaphone = "\ue235"; + public const string Meh = "\ue118"; + public const string MemoryStick = "\ue44a"; + public const string Menu = "\ue119"; + public const string Merge = "\ue444"; + public const string MessageCircleCode = "\ue567"; + public const string MessageCircleDashed = "\ue568"; + public const string MessageCircleHeart = "\ue569"; + public const string MessageCircleMore = "\ue56a"; + public const string MessageCircleOff = "\ue56b"; + public const string MessageCirclePlus = "\ue56c"; + public const string MessageCircleQuestion = "\ue56d"; + public const string MessageCircleReply = "\ue56e"; + public const string MessageCircleWarning = "\ue56f"; + public const string MessageCircleX = "\ue570"; + public const string MessageCircle = "\ue11a"; + public const string MessageSquareCode = "\ue571"; + public const string MessageSquareDashed = "\ue410"; + public const string MessageSquareDiff = "\ue572"; + public const string MessageSquareDot = "\ue573"; + public const string MessageSquareHeart = "\ue574"; + public const string MessageSquareLock = "\ue631"; + public const string MessageSquareMore = "\ue575"; + public const string MessageSquareOff = "\ue576"; + public const string MessageSquarePlus = "\ue411"; + public const string MessageSquareQuote = "\ue577"; + public const string MessageSquareReply = "\ue578"; + public const string MessageSquareShare = "\ue579"; + public const string MessageSquareText = "\ue57a"; + public const string MessageSquareWarning = "\ue57b"; + public const string MessageSquareX = "\ue57c"; + public const string MessageSquare = "\ue11b"; + public const string MessagesSquare = "\ue412"; + public const string MicOff = "\ue11d"; + public const string MicVocal = "\ue34d"; + public const string Mic = "\ue11c"; + public const string Microchip = "\ue61f"; + public const string Microscope = "\ue2e4"; + public const string Microwave = "\ue37e"; + public const string Milestone = "\ue298"; + public const string MilkOff = "\ue39e"; + public const string Milk = "\ue39d"; + public const string Minimize2 = "\ue11f"; + public const string Minimize = "\ue11e"; + public const string Minus = "\ue120"; + public const string MonitorCheck = "\ue487"; + public const string MonitorCog = "\ue608"; + public const string MonitorDot = "\ue488"; + public const string MonitorDown = "\ue426"; + public const string MonitorOff = "\ue1dc"; + public const string MonitorPause = "\ue489"; + public const string MonitorPlay = "\ue48a"; + public const string MonitorSmartphone = "\ue3a6"; + public const string MonitorSpeaker = "\ue210"; + public const string MonitorStop = "\ue48b"; + public const string MonitorUp = "\ue427"; + public const string MonitorX = "\ue48c"; + public const string Monitor = "\ue121"; + public const string MoonStar = "\ue415"; + public const string Moon = "\ue122"; + public const string MountainSnow = "\ue232"; + public const string Mountain = "\ue231"; + public const string MouseOff = "\ue5e0"; + public const string MousePointer2 = "\ue1c3"; + public const string MousePointerBan = "\ue5ec"; + public const string MousePointerClick = "\ue124"; + public const string MousePointer = "\ue123"; + public const string Mouse = "\ue28e"; + public const string Move3d = "\ue2e5"; + public const string MoveDiagonal2 = "\ue1c5"; + public const string MoveDiagonal = "\ue1c4"; + public const string MoveDownLeft = "\ue492"; + public const string MoveDownRight = "\ue493"; + public const string MoveDown = "\ue491"; + public const string MoveHorizontal = "\ue1c6"; + public const string MoveLeft = "\ue494"; + public const string MoveRight = "\ue495"; + public const string MoveUpLeft = "\ue497"; + public const string MoveUpRight = "\ue498"; + public const string MoveUp = "\ue496"; + public const string MoveVertical = "\ue1c7"; + public const string Move = "\ue125"; + public const string Music2 = "\ue34e"; + public const string Music3 = "\ue34f"; + public const string Music4 = "\ue350"; + public const string Music = "\ue126"; + public const string Navigation2Off = "\ue2a7"; + public const string Navigation2 = "\ue128"; + public const string NavigationOff = "\ue2a8"; + public const string Navigation = "\ue127"; + public const string Network = "\ue129"; + public const string Newspaper = "\ue34c"; + public const string Nfc = "\ue3c7"; + public const string NotebookPen = "\ue59b"; + public const string NotebookTabs = "\ue59c"; + public const string NotebookText = "\ue59d"; + public const string Notebook = "\ue59a"; + public const string NotepadTextDashed = "\ue59f"; + public const string NotepadText = "\ue59e"; + public const string NutOff = "\ue3a0"; + public const string Nut = "\ue39f"; + public const string OctagonAlert = "\ue12b"; + public const string OctagonMinus = "\ue62c"; + public const string OctagonPause = "\ue21b"; + public const string OctagonX = "\ue12c"; + public const string Octagon = "\ue12a"; + public const string Omega = "\ue61e"; + public const string Option = "\ue1f8"; + public const string Orbit = "\ue3eb"; + public const string Origami = "\ue5e8"; + public const string Package2 = "\ue344"; + public const string PackageCheck = "\ue266"; + public const string PackageMinus = "\ue267"; + public const string PackageOpen = "\ue2cc"; + public const string PackagePlus = "\ue268"; + public const string PackageSearch = "\ue269"; + public const string PackageX = "\ue26a"; + public const string Package = "\ue12d"; + public const string PaintBucket = "\ue2e6"; + public const string PaintRoller = "\ue5a3"; + public const string PaintbrushVertical = "\ue2e8"; + public const string Paintbrush = "\ue2e7"; + public const string Palette = "\ue1dd"; + public const string PanelBottomClose = "\ue432"; + public const string PanelBottomDashed = "\ue433"; + public const string PanelBottomOpen = "\ue434"; + public const string PanelBottom = "\ue431"; + public const string PanelLeftClose = "\ue21c"; + public const string PanelLeftDashed = "\ue435"; + public const string PanelLeftOpen = "\ue21d"; + public const string PanelLeft = "\ue12e"; + public const string PanelRightClose = "\ue437"; + public const string PanelRightDashed = "\ue438"; + public const string PanelRightOpen = "\ue439"; + public const string PanelRight = "\ue436"; + public const string PanelTopClose = "\ue43b"; + public const string PanelTopDashed = "\ue43c"; + public const string PanelTopOpen = "\ue43d"; + public const string PanelTop = "\ue43a"; + public const string PanelsLeftBottom = "\ue12f"; + public const string PanelsRightBottom = "\ue58d"; + public const string PanelsTopLeft = "\ue130"; + public const string Paperclip = "\ue131"; + public const string Parentheses = "\ue449"; + public const string ParkingMeter = "\ue505"; + public const string PartyPopper = "\ue347"; + public const string Pause = "\ue132"; + public const string PawPrint = "\ue4fa"; + public const string PcCase = "\ue44b"; + public const string PenLine = "\ue134"; + public const string PenOff = "\ue5f3"; + public const string PenTool = "\ue135"; + public const string Pen = "\ue133"; + public const string PencilLine = "\ue4f5"; + public const string PencilOff = "\ue5f4"; + public const string PencilRuler = "\ue4f6"; + public const string Pencil = "\ue1f9"; + public const string Pentagon = "\ue530"; + public const string Percent = "\ue136"; + public const string PersonStanding = "\ue21e"; + public const string PhilippinePeso = "\ue609"; + public const string PhoneCall = "\ue138"; + public const string PhoneForwarded = "\ue139"; + public const string PhoneIncoming = "\ue13a"; + public const string PhoneMissed = "\ue13b"; + public const string PhoneOff = "\ue13c"; + public const string PhoneOutgoing = "\ue13d"; + public const string Phone = "\ue137"; + public const string Pi = "\ue477"; + public const string Piano = "\ue566"; + public const string Pickaxe = "\ue5cb"; + public const string PictureInPicture2 = "\ue3b3"; + public const string PictureInPicture = "\ue3b2"; + public const string PiggyBank = "\ue13e"; + public const string PilcrowLeft = "\ue5e1"; + public const string PilcrowRight = "\ue5e2"; + public const string Pilcrow = "\ue3a7"; + public const string PillBottle = "\ue5ef"; + public const string Pill = "\ue3c1"; + public const string PinOff = "\ue2b6"; + public const string Pin = "\ue259"; + public const string Pipette = "\ue13f"; + public const string Pizza = "\ue358"; + public const string PlaneLanding = "\ue3d1"; + public const string PlaneTakeoff = "\ue3d2"; + public const string Plane = "\ue1de"; + public const string Play = "\ue140"; + public const string Plug2 = "\ue384"; + public const string PlugZap = "\ue461"; + public const string Plug = "\ue383"; + public const string Plus = "\ue141"; + public const string PocketKnife = "\ue4a5"; + public const string Pocket = "\ue142"; + public const string Podcast = "\ue1fa"; + public const string PointerOff = "\ue584"; + public const string Pointer = "\ue1e8"; + public const string Popcorn = "\ue4c3"; + public const string Popsicle = "\ue4c4"; + public const string PoundSterling = "\ue143"; + public const string PowerOff = "\ue209"; + public const string Power = "\ue144"; + public const string Presentation = "\ue4b3"; + public const string PrinterCheck = "\ue5fa"; + public const string Printer = "\ue145"; + public const string Projector = "\ue4b4"; + public const string Proportions = "\ue5d4"; + public const string Puzzle = "\ue29c"; + public const string Pyramid = "\ue531"; + public const string QrCode = "\ue1df"; + public const string Quote = "\ue239"; + public const string Rabbit = "\ue4fb"; + public const string Radar = "\ue49c"; + public const string Radiation = "\ue447"; + public const string Radical = "\ue5c7"; + public const string RadioReceiver = "\ue1fb"; + public const string RadioTower = "\ue409"; + public const string Radio = "\ue146"; + public const string Radius = "\ue532"; + public const string RailSymbol = "\ue506"; + public const string Rainbow = "\ue4c7"; + public const string Rat = "\ue3f0"; + public const string Ratio = "\ue4ed"; + public const string ReceiptCent = "\ue5aa"; + public const string ReceiptEuro = "\ue5ab"; + public const string ReceiptIndianRupee = "\ue5ac"; + public const string ReceiptJapaneseYen = "\ue5ad"; + public const string ReceiptPoundSterling = "\ue5ae"; + public const string ReceiptRussianRuble = "\ue5af"; + public const string ReceiptSwissFranc = "\ue5b0"; + public const string ReceiptText = "\ue5b1"; + public const string Receipt = "\ue3d7"; + public const string RectangleEllipsis = "\ue21f"; + public const string RectangleHorizontal = "\ue37a"; + public const string RectangleVertical = "\ue37b"; + public const string Recycle = "\ue2e9"; + public const string Redo2 = "\ue2a0"; + public const string RedoDot = "\ue455"; + public const string Redo = "\ue147"; + public const string RefreshCcwDot = "\ue4b7"; + public const string RefreshCcw = "\ue148"; + public const string RefreshCwOff = "\ue49d"; + public const string RefreshCw = "\ue149"; + public const string Refrigerator = "\ue37f"; + public const string Regex = "\ue1fc"; + public const string RemoveFormatting = "\ue3b7"; + public const string Repeat1 = "\ue1fd"; + public const string Repeat2 = "\ue416"; + public const string Repeat = "\ue14a"; + public const string ReplaceAll = "\ue3e0"; + public const string Replace = "\ue3df"; + public const string ReplyAll = "\ue22b"; + public const string Reply = "\ue22a"; + public const string Rewind = "\ue14b"; + public const string Ribbon = "\ue55d"; + public const string Rocket = "\ue286"; + public const string RockingChair = "\ue233"; + public const string RollerCoaster = "\ue485"; + public const string Rotate3d = "\ue2ea"; + public const string RotateCcwSquare = "\ue5d5"; + public const string RotateCcw = "\ue14c"; + public const string RotateCwSquare = "\ue5d6"; + public const string RotateCw = "\ue14d"; + public const string RouteOff = "\ue544"; + public const string Route = "\ue543"; + public const string Router = "\ue3c3"; + public const string Rows2 = "\ue43e"; + public const string Rows3 = "\ue58f"; + public const string Rows4 = "\ue590"; + public const string Rss = "\ue14e"; + public const string Ruler = "\ue14f"; + public const string RussianRuble = "\ue150"; + public const string Sailboat = "\ue382"; + public const string Salad = "\ue3ac"; + public const string Sandwich = "\ue3ad"; + public const string SatelliteDish = "\ue44d"; + public const string Satellite = "\ue44c"; + public const string SaveAll = "\ue414"; + public const string SaveOff = "\ue5f8"; + public const string Save = "\ue151"; + public const string Scale3d = "\ue2eb"; + public const string Scale = "\ue212"; + public const string Scaling = "\ue2ec"; + public const string ScanBarcode = "\ue53a"; + public const string ScanEye = "\ue53b"; + public const string ScanFace = "\ue375"; + public const string ScanLine = "\ue258"; + public const string ScanQrCode = "\ue5fb"; + public const string ScanSearch = "\ue53c"; + public const string ScanText = "\ue53d"; + public const string Scan = "\ue257"; + public const string School = "\ue3e7"; + public const string ScissorsLineDashed = "\ue4ee"; + public const string Scissors = "\ue152"; + public const string ScreenShareOff = "\ue154"; + public const string ScreenShare = "\ue153"; + public const string ScrollText = "\ue464"; + public const string Scroll = "\ue2ed"; + public const string SearchCheck = "\ue4af"; + public const string SearchCode = "\ue4b0"; + public const string SearchSlash = "\ue4b1"; + public const string SearchX = "\ue4b2"; + public const string Search = "\ue155"; + public const string Section = "\ue5ed"; + public const string SendHorizontal = "\ue4f7"; + public const string SendToBack = "\ue4f8"; + public const string Send = "\ue156"; + public const string SeparatorHorizontal = "\ue1c8"; + public const string SeparatorVertical = "\ue1c9"; + public const string ServerCog = "\ue345"; + public const string ServerCrash = "\ue1e9"; + public const string ServerOff = "\ue1ea"; + public const string Server = "\ue157"; + public const string Settings2 = "\ue245"; + public const string Settings = "\ue158"; + public const string Shapes = "\ue4b8"; + public const string Share2 = "\ue15a"; + public const string Share = "\ue159"; + public const string Sheet = "\ue15b"; + public const string Shell = "\ue4fc"; + public const string ShieldAlert = "\ue1fe"; + public const string ShieldBan = "\ue15d"; + public const string ShieldCheck = "\ue1ff"; + public const string ShieldEllipsis = "\ue51b"; + public const string ShieldHalf = "\ue51c"; + public const string ShieldMinus = "\ue51d"; + public const string ShieldOff = "\ue15e"; + public const string ShieldPlus = "\ue51e"; + public const string ShieldQuestion = "\ue413"; + public const string ShieldX = "\ue200"; + public const string Shield = "\ue15c"; + public const string ShipWheel = "\ue507"; + public const string Ship = "\ue3be"; + public const string Shirt = "\ue1ca"; + public const string ShoppingBag = "\ue15f"; + public const string ShoppingBasket = "\ue4ef"; + public const string ShoppingCart = "\ue160"; + public const string Shovel = "\ue161"; + public const string ShowerHead = "\ue380"; + public const string Shrink = "\ue220"; + public const string Shrub = "\ue2ee"; + public const string Shuffle = "\ue162"; + public const string Sigma = "\ue201"; + public const string SignalHigh = "\ue260"; + public const string SignalLow = "\ue261"; + public const string SignalMedium = "\ue262"; + public const string SignalZero = "\ue263"; + public const string Signal = "\ue25f"; + public const string Signature = "\ue5f7"; + public const string SignpostBig = "\ue546"; + public const string Signpost = "\ue545"; + public const string Siren = "\ue2ef"; + public const string SkipBack = "\ue163"; + public const string SkipForward = "\ue164"; + public const string Skull = "\ue221"; + public const string Slack = "\ue165"; + public const string Slash = "\ue522"; + public const string Slice = "\ue2f0"; + public const string SlidersHorizontal = "\ue29a"; + public const string SlidersVertical = "\ue166"; + public const string SmartphoneCharging = "\ue22e"; + public const string SmartphoneNfc = "\ue3c8"; + public const string Smartphone = "\ue167"; + public const string SmilePlus = "\ue301"; + public const string Smile = "\ue168"; + public const string Snail = "\ue4fd"; + public const string Snowflake = "\ue169"; + public const string Sofa = "\ue2c4"; + public const string Soup = "\ue3ae"; + public const string Space = "\ue3e1"; + public const string Spade = "\ue49e"; + public const string Sparkle = "\ue483"; + public const string Sparkles = "\ue417"; + public const string Speaker = "\ue16a"; + public const string Speech = "\ue523"; + public const string SpellCheck2 = "\ue4a0"; + public const string SpellCheck = "\ue49f"; + public const string Spline = "\ue38f"; + public const string Split = "\ue445"; + public const string SprayCan = "\ue49a"; + public const string Sprout = "\ue1eb"; + public const string SquareActivity = "\ue4b9"; + public const string SquareArrowDownLeft = "\ue4ba"; + public const string SquareArrowDownRight = "\ue4bb"; + public const string SquareArrowDown = "\ue42c"; + public const string SquareArrowLeft = "\ue42d"; + public const string SquareArrowOutDownLeft = "\ue5a6"; + public const string SquareArrowOutDownRight = "\ue5a7"; + public const string SquareArrowOutUpLeft = "\ue5a8"; + public const string SquareArrowOutUpRight = "\ue5a9"; + public const string SquareArrowRight = "\ue42e"; + public const string SquareArrowUpLeft = "\ue4bc"; + public const string SquareArrowUpRight = "\ue4bd"; + public const string SquareArrowUp = "\ue42f"; + public const string SquareAsterisk = "\ue16c"; + public const string SquareBottomDashedScissors = "\ue4f0"; + public const string SquareChartGantt = "\ue16d"; + public const string SquareCheckBig = "\ue16e"; + public const string SquareCheck = "\ue55e"; + public const string SquareChevronDown = "\ue3d3"; + public const string SquareChevronLeft = "\ue3d4"; + public const string SquareChevronRight = "\ue3d5"; + public const string SquareChevronUp = "\ue3d6"; + public const string SquareCode = "\ue16f"; + public const string SquareDashedBottomCode = "\ue4c6"; + public const string SquareDashedBottom = "\ue4c5"; + public const string SquareDashedKanban = "\ue170"; + public const string SquareDashedMousePointer = "\ue50e"; + public const string SquareDashed = "\ue1cb"; + public const string SquareDivide = "\ue171"; + public const string SquareDot = "\ue172"; + public const string SquareEqual = "\ue173"; + public const string SquareFunction = "\ue22d"; + public const string SquareKanban = "\ue174"; + public const string SquareLibrary = "\ue554"; + public const string SquareM = "\ue508"; + public const string SquareMenu = "\ue458"; + public const string SquareMinus = "\ue175"; + public const string SquareMousePointer = "\ue202"; + public const string SquareParkingOff = "\ue3d0"; + public const string SquareParking = "\ue3cf"; + public const string SquarePen = "\ue176"; + public const string SquarePercent = "\ue521"; + public const string SquarePi = "\ue48d"; + public const string SquarePilcrow = "\ue490"; + public const string SquarePlay = "\ue486"; + public const string SquarePlus = "\ue177"; + public const string SquarePower = "\ue556"; + public const string SquareRadical = "\ue5c8"; + public const string SquareScissors = "\ue4f1"; + public const string SquareSigma = "\ue48e"; + public const string SquareSlash = "\ue178"; + public const string SquareSplitHorizontal = "\ue3ba"; + public const string SquareSplitVertical = "\ue3bb"; + public const string SquareSquare = "\ue613"; + public const string SquareStack = "\ue4a7"; + public const string SquareTerminal = "\ue20a"; + public const string SquareUserRound = "\ue46b"; + public const string SquareUser = "\ue46a"; + public const string SquareX = "\ue179"; + public const string Square = "\ue16b"; + public const string Squircle = "\ue57f"; + public const string Squirrel = "\ue4a4"; + public const string Stamp = "\ue3bf"; + public const string StarHalf = "\ue20b"; + public const string StarOff = "\ue2b0"; + public const string Star = "\ue17a"; + public const string StepBack = "\ue3ed"; + public const string StepForward = "\ue3ee"; + public const string Stethoscope = "\ue2f1"; + public const string Sticker = "\ue302"; + public const string StickyNote = "\ue303"; + public const string Store = "\ue3e8"; + public const string StretchHorizontal = "\ue27c"; + public const string StretchVertical = "\ue27d"; + public const string Strikethrough = "\ue17b"; + public const string Subscript = "\ue25c"; + public const string SunDim = "\ue299"; + public const string SunMedium = "\ue2b1"; + public const string SunMoon = "\ue2b2"; + public const string SunSnow = "\ue376"; + public const string Sun = "\ue17c"; + public const string Sunrise = "\ue17d"; + public const string Sunset = "\ue17e"; + public const string Superscript = "\ue25e"; + public const string SwatchBook = "\ue5a4"; + public const string SwissFranc = "\ue17f"; + public const string SwitchCamera = "\ue180"; + public const string Sword = "\ue2b3"; + public const string Swords = "\ue2b4"; + public const string Syringe = "\ue2f2"; + public const string Table2 = "\ue2f9"; + public const string TableCellsMerge = "\ue5cc"; + public const string TableCellsSplit = "\ue5cd"; + public const string TableColumnsSplit = "\ue5ce"; + public const string TableOfContents = "\ue623"; + public const string TableProperties = "\ue4e0"; + public const string TableRowsSplit = "\ue5cf"; + public const string Table = "\ue181"; + public const string TabletSmartphone = "\ue50f"; + public const string Tablet = "\ue182"; + public const string Tablets = "\ue3c2"; + public const string Tag = "\ue183"; + public const string Tags = "\ue360"; + public const string Tally1 = "\ue4db"; + public const string Tally2 = "\ue4dc"; + public const string Tally3 = "\ue4dd"; + public const string Tally4 = "\ue4de"; + public const string Tally5 = "\ue4df"; + public const string Tangent = "\ue533"; + public const string Target = "\ue184"; + public const string Telescope = "\ue5ca"; + public const string TentTree = "\ue540"; + public const string Tent = "\ue227"; + public const string Terminal = "\ue185"; + public const string TestTubeDiagonal = "\ue40b"; + public const string TestTube = "\ue40a"; + public const string TestTubes = "\ue40c"; + public const string TextCursorInput = "\ue265"; + public const string TextCursor = "\ue264"; + public const string TextQuote = "\ue4a3"; + public const string TextSearch = "\ue5b2"; + public const string TextSelect = "\ue3e2"; + public const string Text = "\ue3ef"; + public const string Theater = "\ue527"; + public const string ThermometerSnowflake = "\ue187"; + public const string ThermometerSun = "\ue188"; + public const string Thermometer = "\ue186"; + public const string ThumbsDown = "\ue189"; + public const string ThumbsUp = "\ue18a"; + public const string TicketCheck = "\ue5b3"; + public const string TicketMinus = "\ue5b4"; + public const string TicketPercent = "\ue5b5"; + public const string TicketPlus = "\ue5b6"; + public const string TicketSlash = "\ue5b7"; + public const string TicketX = "\ue5b8"; + public const string Ticket = "\ue20f"; + public const string TicketsPlane = "\ue628"; + public const string Tickets = "\ue627"; + public const string TimerOff = "\ue249"; + public const string TimerReset = "\ue236"; + public const string Timer = "\ue1e0"; + public const string ToggleLeft = "\ue18b"; + public const string ToggleRight = "\ue18c"; + public const string Tornado = "\ue218"; + public const string Torus = "\ue534"; + public const string TouchpadOff = "\ue44f"; + public const string Touchpad = "\ue44e"; + public const string TowerControl = "\ue3c0"; + public const string ToyBrick = "\ue34b"; + public const string Tractor = "\ue509"; + public const string TrafficCone = "\ue50a"; + public const string TrainFrontTunnel = "\ue50c"; + public const string TrainFront = "\ue50b"; + public const string TrainTrack = "\ue50d"; + public const string TramFront = "\ue2a9"; + public const string Trash2 = "\ue18e"; + public const string Trash = "\ue18d"; + public const string TreeDeciduous = "\ue2f3"; + public const string TreePalm = "\ue281"; + public const string TreePine = "\ue2f4"; + public const string Trees = "\ue2f5"; + public const string Trello = "\ue18f"; + public const string TrendingDown = "\ue190"; + public const string TrendingUpDown = "\ue62a"; + public const string TrendingUp = "\ue191"; + public const string TriangleAlert = "\ue193"; + public const string TriangleRight = "\ue4f2"; + public const string Triangle = "\ue192"; + public const string Trophy = "\ue377"; + public const string Truck = "\ue194"; + public const string Turtle = "\ue4fe"; + public const string TvMinimalPlay = "\ue5f1"; + public const string TvMinimal = "\ue203"; + public const string Tv = "\ue195"; + public const string Twitch = "\ue196"; + public const string Twitter = "\ue197"; + public const string TypeOutline = "\ue607"; + public const string Type = "\ue198"; + public const string UmbrellaOff = "\ue548"; + public const string Umbrella = "\ue199"; + public const string Underline = "\ue19a"; + public const string Undo2 = "\ue2a1"; + public const string UndoDot = "\ue456"; + public const string Undo = "\ue19b"; + public const string UnfoldHorizontal = "\ue442"; + public const string UnfoldVertical = "\ue443"; + public const string Ungroup = "\ue46c"; + public const string University = "\ue3e9"; + public const string Unlink2 = "\ue19d"; + public const string Unlink = "\ue19c"; + public const string Unplug = "\ue462"; + public const string Upload = "\ue19e"; + public const string Usb = "\ue35a"; + public const string UserCheck = "\ue1a0"; + public const string UserCog = "\ue346"; + public const string UserMinus = "\ue1a1"; + public const string UserPen = "\ue601"; + public const string UserPlus = "\ue1a2"; + public const string UserRoundCheck = "\ue46e"; + public const string UserRoundCog = "\ue46f"; + public const string UserRoundMinus = "\ue470"; + public const string UserRoundPen = "\ue602"; + public const string UserRoundPlus = "\ue471"; + public const string UserRoundSearch = "\ue57d"; + public const string UserRoundX = "\ue472"; + public const string UserRound = "\ue46d"; + public const string UserSearch = "\ue57e"; + public const string UserX = "\ue1a3"; + public const string User = "\ue19f"; + public const string UsersRound = "\ue473"; + public const string Users = "\ue1a4"; + public const string UtensilsCrossed = "\ue2f7"; + public const string Utensils = "\ue2f6"; + public const string UtilityPole = "\ue3c6"; + public const string Variable = "\ue478"; + public const string Vault = "\ue594"; + public const string Vegan = "\ue3a1"; + public const string VenetianMask = "\ue2aa"; + public const string VibrateOff = "\ue29d"; + public const string Vibrate = "\ue223"; + public const string VideoOff = "\ue1a6"; + public const string Video = "\ue1a5"; + public const string Videotape = "\ue4d0"; + public const string View = "\ue1a7"; + public const string Voicemail = "\ue1a8"; + public const string Volleyball = "\ue634"; + public const string Volume1 = "\ue1aa"; + public const string Volume2 = "\ue1ab"; + public const string VolumeOff = "\ue62b"; + public const string VolumeX = "\ue1ac"; + public const string Volume = "\ue1a9"; + public const string Vote = "\ue3b1"; + public const string WalletCards = "\ue4d1"; + public const string WalletMinimal = "\ue4d2"; + public const string Wallet = "\ue204"; + public const string Wallpaper = "\ue450"; + public const string WandSparkles = "\ue35b"; + public const string Wand = "\ue246"; + public const string Warehouse = "\ue3ea"; + public const string WashingMachine = "\ue595"; + public const string Watch = "\ue1ad"; + public const string Waves = "\ue283"; + public const string Waypoints = "\ue547"; + public const string Webcam = "\ue205"; + public const string WebhookOff = "\ue5bc"; + public const string Webhook = "\ue378"; + public const string Weight = "\ue535"; + public const string WheatOff = "\ue3a3"; + public const string Wheat = "\ue3a2"; + public const string WholeWord = "\ue3e3"; + public const string WifiHigh = "\ue5fc"; + public const string WifiLow = "\ue5fd"; + public const string WifiOff = "\ue1af"; + public const string WifiZero = "\ue5fe"; + public const string Wifi = "\ue1ae"; + public const string Wind = "\ue1b0"; + public const string WineOff = "\ue3a4"; + public const string Wine = "\ue2f8"; + public const string Workflow = "\ue42a"; + public const string Worm = "\ue5df"; + public const string WrapText = "\ue248"; + public const string Wrench = "\ue1b1"; + public const string x = "\ue1b2"; + public const string Youtube = "\ue1b3"; + public const string ZapOff = "\ue1b5"; + public const string Zap = "\ue1b4"; + public const string ZoomIn = "\ue1b6"; + public const string ZoomOut = "\ue1b7"; +} diff --git a/src/Helpers/RidToIconConverter.cs b/src/Helpers/RidToIconConverter.cs deleted file mode 100644 index 900f5d6..0000000 --- a/src/Helpers/RidToIconConverter.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Avalonia.Data.Converters; -using System; -using System.Globalization; - -namespace Dots.Helpers -{ - public class RidToIconConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if (value is Data.Rid rid && rid.ToString() is string ridstring) - { - if (ridstring.Contains("Win")) return "🪟"; - else if (ridstring.Contains("Osx")) return "🍏"; - else return "🐧"; - } - return null; - } - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } - - public class StringIsNullOrEmptyConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if (value is string str && !string.IsNullOrEmpty(str)) return true; - else return false; - } - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - throw new NotImplementedException(); - } - } -} - diff --git a/src/MainWindow.axaml b/src/MainWindow.axaml index 37c2117..43f316e 100644 --- a/src/MainWindow.axaml +++ b/src/MainWindow.axaml @@ -7,8 +7,10 @@ xmlns:hyper="clr-namespace:HyperText.Avalonia.Controls;assembly=HyperText.Avalonia" xmlns:anim="https://github.com/whistyun/AnimatedImage.Avalonia" mc:Ignorable="d" - d:DesignWidth="800" + d:DesignWidth="700" d:DesignHeight="450" + Width="1200" + Height="700" xmlns:vm="using:Dots.ViewModels" xmlns:models="using:Dots.Models" xmlns:helpers="using:Dots.Helpers" @@ -18,747 +20,908 @@ Icon="/Assets/iconlogo.png" x:Name="PageSelf" Title="Dots"> - - + + - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - + + + + + + - + - - - - - - - - + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/src/MainWindow.axaml.cs b/src/MainWindow.axaml.cs index d26b4ca..cc4da99 100644 --- a/src/MainWindow.axaml.cs +++ b/src/MainWindow.axaml.cs @@ -1,4 +1,4 @@ -using Akavache; +using Akavache; using Avalonia.Controls; using Avalonia.Media; using Dots.Helpers; @@ -8,112 +8,179 @@ namespace Dots { - public partial class MainWindow : Window - { - MainViewModel _vm = new MainViewModel(new DotnetService(), new ErrorPopupHelper()); - AboutWindow _aboutWindow = new AboutWindow(); - bool _aboutWindowOpen = false; - - public MainWindow() - { - this.DataContext = _vm; - InitializeComponent(); - } - - protected override void OnSizeChanged(SizeChangedEventArgs e) - { - var paneWidth = (int)(this.Width * 0.25); - paneWidth = paneWidth < 200 ? 200 : paneWidth; - MainSplitView.OpenPaneLength = Math.Min(paneWidth, 500); - } - - protected override async void OnInitialized() - { - base.OnInitialized(); - if (!await BlobCache.UserAccount.ContainsKey(Constants.LastCheckedKey)) - { - await BlobCache.UserAccount.InsertObject(Constants.LastCheckedKey, DateTime.Now); - } - var lastChecked = await BlobCache.UserAccount.GetObject(Constants.LastCheckedKey); - - bool force = false; - if (DateTime.Now.Subtract(lastChecked).TotalDays > 10) - { - force = true; - await BlobCache.UserAccount.InsertObject(Constants.LastCheckedKey, DateTime.Now); - } - await _vm.CheckSdks(force); - } - - private void Logo_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) - { - if (_aboutWindowOpen) - { - _aboutWindow.Close(); - _aboutWindowOpen = false; - } - else - { - _aboutWindow = new AboutWindow(); - _aboutWindow.Show(); - _aboutWindowOpen = true; - } - } - - private void ToggleDetails_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) - { - var paneWidth = (int)(this.Width * 0.25); - paneWidth = paneWidth < 200 ? 200 : paneWidth; - MainSplitView.OpenPaneLength = Math.Min(paneWidth, 500); - MainSplitView.IsPaneOpen = !MainSplitView.IsPaneOpen; - ToggleDetailsButton.Content = MainSplitView.IsPaneOpen ? LucideIcons.ChevronsRight : LucideIcons.ChevronsLeft; - if (!MainSplitView.IsPaneOpen) - { - _vm.SetSelectedSdk(null); - SdkList.SelectedItem = null; - SdkList.Selection = null; - } - } - - private void TextBox_TextChanged(object? sender, Avalonia.Controls.TextChangedEventArgs e) - { - _vm.FilterSdksCommand.Execute(MainSearchBar.Text); - } - - private void SdkItem_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) - { - if (e.Source is Control control && (control.Parent is Button || control.Parent.Parent is Button)) - { - //workaround for button click inside ListBox item - return; - } - var paneWidth = (int)(this.Width * 0.25); - paneWidth = paneWidth < 200 ? 200 : paneWidth; - MainSplitView.OpenPaneLength = Math.Min(paneWidth, 500); - var unselect = _vm.SetSelectedSdk((Sdk)((Avalonia.Controls.Grid)sender).DataContext); - if (unselect) - { - SdkList.SelectedItem = null; - SdkList.Selection = null; - MainSplitView.IsPaneOpen = false; - } - else - { - MainSplitView.IsPaneOpen = true; - } - ToggleDetailsButton.Content = MainSplitView.IsPaneOpen ? LucideIcons.ChevronsRight : LucideIcons.ChevronsLeft; - - } - - private void PathTextBlock_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) - { - var path = ((TextBlock)sender).Text; - path.OpenFilePath(); - } - - private void Filter_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) - { - FilterButton.Flyout.Hide(); - } - } -} \ No newline at end of file + public partial class MainWindow : Window + { + MainViewModel _vm = new MainViewModel(new DotnetService(), new ErrorPopupHelper()); + AboutWindow _aboutWindow = new AboutWindow(); + bool _aboutWindowOpen = false; + int _minPaneWidth = 260; + double _paneRatio = 0.3; + + public MainWindow() + { + this.DataContext = _vm; + InitializeComponent(); + } + + protected override void OnSizeChanged(SizeChangedEventArgs e) + { + SetPaneWidth(); + } + + protected override async void OnInitialized() + { + base.OnInitialized(); + if (!await BlobCache.UserAccount.ContainsKey(Constants.LastCheckedKey)) + { + await BlobCache.UserAccount.InsertObject(Constants.LastCheckedKey, DateTime.Now); + } + var lastChecked = await BlobCache.UserAccount.GetObject(Constants.LastCheckedKey); + + bool force = false; + if (DateTime.Now.Subtract(lastChecked).TotalDays > 10) + { + force = true; + await BlobCache.UserAccount.InsertObject(Constants.LastCheckedKey, DateTime.Now); + } + await _vm.CheckSdks(force); + } + + private void Logo_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) + { + if (_aboutWindowOpen) + { + _aboutWindow.Close(); + _aboutWindowOpen = false; + } + else + { + _aboutWindow = new AboutWindow(); + _aboutWindow.Show(); + _aboutWindowOpen = true; + } + } + + private void ToggleDetails_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) + { + SetPaneWidth(); + MainSplitView.IsPaneOpen = !MainSplitView.IsPaneOpen; + ToggleDetailsButton.Content = MainSplitView.IsPaneOpen ? LucideIcons.ChevronRight : LucideIcons.ChevronLeft; + if (!MainSplitView.IsPaneOpen) + { + _vm.SetSelectedSdk(null); + SdkList.SelectedItem = null; + SdkList.Selection = null; + } + } + + private void TextBox_TextChanged(object? sender, Avalonia.Controls.TextChangedEventArgs e) + { + _vm.FilterSdksCommand.Execute(MainSearchBar.Text); + } + + private void SdkItem_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) + { + if (e.Source is Control control && (control.Parent is Button || control.Parent.Parent is Button)) + { + //workaround for button click inside ListBox item + return; + } + + SetPaneWidth(); + var unselect = _vm.SetSelectedSdk((Sdk)((Avalonia.Controls.Grid)sender).DataContext); + if (unselect) + { + SdkList.SelectedItem = null; + SdkList.Selection = null; + MainSplitView.IsPaneOpen = false; + } + else + { + MainSplitView.IsPaneOpen = true; + } + ToggleDetailsButton.Content = MainSplitView.IsPaneOpen ? LucideIcons.ChevronRight : LucideIcons.ChevronLeft; + + } + + private void PathTextBlock_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) + { + var path = ((TextBlock)sender).Text; + path.OpenFilePath(); + } + + private void Filter_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) + { + FilterButton.Flyout.Hide(); + } + + private async void UpdateAndCleanupButton_Click(object? sender, Avalonia.Input.TappedEventArgs e) + { + var filterTask = _vm.FilterUpdateSdks; + if (SelectionInfoContainer.Height != 0) + { + if (SelectionInfoText.Text == Constants.UpdateText) + { + SelectionInfoContainer.HeightTo(0); + filterTask = _vm.ResetSelectionFilter; + } + } + SelectionInfoButton.Command = _vm.DoUpdateCommand; + SelectionInfoButton.Content = Constants.UpdateButtonText; + SelectionInfoText.Text = Constants.UpdateText; + SelectionInfoButton.Background = Constants.UpdateBrush; + + var hasSelection = await filterTask(); + if (!hasSelection) + { + await SelectionInfoContainer.HeightTo(0); + } + else + { + SelectionInfoContainer.HeightTo(105); + } + } + + private async void CleanupButton_Click(object? sender, Avalonia.Input.TappedEventArgs e) + { + var filterTask = _vm.FilterCleanupSdks; + if (SelectionInfoContainer.Height != 0) + { + if (SelectionInfoText.Text == Constants.CleanupText) + { + SelectionInfoContainer.HeightTo(0); + filterTask = _vm.ResetSelectionFilter; + } + } + SelectionInfoButton.Command = _vm.DoCleanupCommand; + SelectionInfoButton.Content = Constants.CleanupButtonText; + SelectionInfoText.Text = Constants.CleanupText; + SelectionInfoButton.Background = Constants.CleanupBrush; + + var hasSelection = await filterTask(); + if(!hasSelection) + { + await SelectionInfoContainer.HeightTo(0); + } + else + { + SelectionInfoContainer.HeightTo(105); + } + + } + + void SetPaneWidth() + { + var paneWidth = (int)(this.Width * _paneRatio); + paneWidth = paneWidth < _minPaneWidth ? _minPaneWidth : paneWidth; + MainSplitView.OpenPaneLength = Math.Min(paneWidth, 500); + } + + private async void CloseSelectionInfoButton_Tapped(object? sender, Avalonia.Input.TappedEventArgs e) + { + await _vm.ResetSelectionFilter(); + await SelectionInfoContainer.HeightTo(0); + _vm.Sdks.Search(" "); + _vm.Sdks.Search("."); + } + } +} diff --git a/src/Models/ProgressTask.cs b/src/Models/ProgressTask.cs index 63586d6..4f8c8a3 100644 --- a/src/Models/ProgressTask.cs +++ b/src/Models/ProgressTask.cs @@ -9,11 +9,14 @@ namespace Dots.Models; public partial class ProgressTask : ObservableObject { - public string Title { get; set; } - public string Url { get; set; } - public CancellationTokenSource CancellationTokenSource { get; set; } - public IProgress Progress { get; set; } + public string Title { get; set; } + public string Url { get; set; } + public CancellationTokenSource CancellationTokenSource { get; set; } + public IProgress<(float progress, string task)> Progress { get; set; } - [ObservableProperty] - float _value; + [ObservableProperty] + float? _value; + + [ObservableProperty] + string? _task; } diff --git a/src/Models/SDK.cs b/src/Models/SDK.cs index c0e33b7..470d52d 100644 --- a/src/Models/SDK.cs +++ b/src/Models/SDK.cs @@ -1,62 +1,67 @@ using Avalonia.Media; using Dots.Data; +using System.Diagnostics; using System.Text.Json.Serialization; namespace Dots.Models; +[DebuggerDisplay("{VersionDisplay}")] public partial class Sdk : ObservableObject { - [ObservableProperty] - Release _data; + [ObservableProperty] + Release _data; - [ObservableProperty] - [NotifyPropertyChangedFor(nameof(Installed))] - string _path = ""; + [ObservableProperty] + SdkInfo _sdkData; - //UI - public string ColorHex { get; set; } - public string Group => VersionDisplay.First().ToString(); + [ObservableProperty] + [NotifyPropertyChangedFor(nameof(Installed))] + string _path = ""; - [JsonIgnore] - public IBrush Color => SolidColorBrush.Parse(ColorHex); + //UI + public string ColorHex { get; set; } + public string Group => VersionDisplay.First().ToString(); - [JsonIgnore] - public bool IsSelected { get; set; } - [JsonIgnore] - public bool Installed => !string.IsNullOrEmpty(Path); + [JsonIgnore] + public IBrush Color => SolidColorBrush.Parse(ColorHex); - [ObservableProperty] - [NotifyPropertyChangedFor(nameof(IsBusy))] - [JsonIgnore] - public bool _isDownloading; + [JsonIgnore] + public bool IsSelected { get; set; } + [JsonIgnore] + public bool Installed => !string.IsNullOrEmpty(Path); - [ObservableProperty] - [NotifyPropertyChangedFor(nameof(IsBusy))] - [JsonIgnore] - public bool _isInstalling; + [ObservableProperty] + [NotifyPropertyChangedFor(nameof(IsBusy))] + [JsonIgnore] + public bool _isDownloading; - [ObservableProperty] - [JsonIgnore] - public string _statusMessage; + [ObservableProperty] + [NotifyPropertyChangedFor(nameof(IsBusy))] + [JsonIgnore] + public bool _isInstalling; - [ObservableProperty] - [JsonIgnore] - double _progress; + [ObservableProperty] + [JsonIgnore] + public string _statusMessage; - [JsonIgnore] - public bool IsBusy => _isDownloading || _isInstalling; + [ObservableProperty] + [JsonIgnore] + double _progress; - [JsonIgnore] - public string VersionDisplay { get; set; } + [JsonIgnore] + public bool IsBusy => _isDownloading || _isInstalling; - [ObservableProperty] - [JsonIgnore] - ProgressTask _progressTask; + [JsonIgnore] + public string VersionDisplay { get; set; } + + [ObservableProperty] + [JsonIgnore] + ProgressTask _progressTask; } public class InstalledSdk { - public string Version { get; set; } - public string Path { get; set; } -} \ No newline at end of file + public string Version { get; set; } + public string Path { get; set; } +} diff --git a/src/Services/DotnetService.cs b/src/Services/DotnetService.cs index adc6354..7e4d90b 100644 --- a/src/Services/DotnetService.cs +++ b/src/Services/DotnetService.cs @@ -7,6 +7,7 @@ using System.Text.Json; using System.Threading; using Akavache; +using AsyncAwaitBestPractices; using CliWrap; using CliWrap.Buffered; using Dots.Data; @@ -20,351 +21,425 @@ namespace Dots.Services; public class DotnetService { - List _sdks; - List _installedSdks = new(); - ReleaseIndex[] _releaseIndex; - Dictionary _releases = new(); - - public DotnetService() - { - } - - public async Task> GetSdks(bool force = false) - { - var result = new List(); - var index = await GetReleaseIndex(force); - var releaseInfos = new List(); - await GetInstalledSdks(force); - foreach (var item in index) - { - var infos = await GetReleaseInfos(item.ChannelVersion, force); - releaseInfos.AddRange(infos); - } - foreach (var release in releaseInfos) - { - var sdk = new Sdk() - { - Data = release, - ColorHex = ColorHelper.GenerateHexColor(release.Sdk.Version.First().ToString()), - Path = _installedSdks.FirstOrDefault(x => x.Version == release.Sdk.Version)?.Path ?? string.Empty, - VersionDisplay = release.Sdk.Version, - }; - result.Add(sdk); - - if (release.Sdks is not null) - { - foreach (var subSdk in release.Sdks) - { - var sub = new Sdk() - { - Data = release, - ColorHex = ColorHelper.GenerateHexColor(release.Sdk.Version.First().ToString()), - Path = _installedSdks.FirstOrDefault(x => x.Version == subSdk.Version)?.Path ?? string.Empty, - VersionDisplay = subSdk.Version, - }; - - if (result.FirstOrDefault(s => s.VersionDisplay == subSdk.VersionDisplay) is null) - { - result.Add(sub); - } - - } - } - } - - foreach(var installed in _installedSdks) - { - if(result.FirstOrDefault(x => x.VersionDisplay == installed.Version) is null) - { - result.Add( - new Sdk() - { - Data = null, - VersionDisplay = installed.Version, - Path = installed.Path , - ColorHex = ColorHelper.GenerateHexColor(installed.Version.First().ToString()), - } - ); - } - } - - return result.OrderByDescending(x => x.VersionDisplay).ToList(); - } - - async Task GetReleaseIndex(bool force = false) - { - if (!force && _releaseIndex is not null) - { - return _releaseIndex; - } - if (_releaseIndex is null && await BlobCache.UserAccount.ContainsKey(Constants.ReleaseIndexKey) && !force) - { - var json = await File.ReadAllTextAsync(Constants.ReleaseIndexPath); - var deserialized = JsonSerializer.Deserialize(json, ReleaseSerializerOptions.Options); - _releaseIndex = deserialized.ReleasesIndex; - return _releaseIndex; - } - - using var client = new HttpClient(); - var response = await client.GetStringAsync(Constants.ReleaseIndexUrl); - var releaseIndex = JsonSerializer.Deserialize(response, ReleaseSerializerOptions.Options); - _releaseIndex = releaseIndex.ReleasesIndex; - if (!Directory.Exists(Constants.AppDataPath)) - { - Directory.CreateDirectory(Constants.AppDataPath); - } - - - await File.WriteAllTextAsync(Constants.ReleaseIndexPath, response); - BlobCache.UserAccount.InsertObject(Constants.ReleaseIndexKey, Constants.ReleaseIndexPath); - return _releaseIndex; - } - - async Task GetReleaseInfos(string channel, bool force = false) - { - if (!force && _releases is not null && _releases.ContainsKey(channel)) - { - return _releases[channel]; - } - if (await BlobCache.UserAccount.ContainsKey(Constants.ReleaseBaseKey + channel) && !force) - { - var cachedFile = Path.Combine(Constants.AppDataPath, $"release-{channel}.json"); - var json = await File.ReadAllTextAsync(cachedFile); - var deserialized = JsonSerializer.Deserialize(json, ReleaseSerializerOptions.Options); - - _releases.Add(channel, deserialized.Releases); - return _releases[channel]; - } - - using var client = new HttpClient(); - var url = Constants.ReleaseInfoUrl + channel + Constants.ReleaseInfoUrlEnd; - var response = await client.GetStringAsync(url); - var releases = JsonSerializer.Deserialize(response, ReleaseSerializerOptions.Options); - var path = Path.Combine(Constants.AppDataPath, $"release-{channel}.json"); - await File.WriteAllTextAsync(path, response); - await BlobCache.UserAccount.InsertObject(Constants.ReleaseBaseKey + channel, path); - return releases.Releases; - } - - - async ValueTask> GetInstalledSdks(bool force = false) - { - try - { - if (!_installedSdks.IsNullOrEmpty() && !force) - { - return _installedSdks; - } - if (await BlobCache.UserAccount.ContainsKey(Constants.InstalledSdksKey) && !force) - { - var sdks = await BlobCache.UserAccount.GetObject(Constants.InstalledSdksKey); - _installedSdks = JsonSerializer.Deserialize>(sdks); - return _installedSdks; - } - - List result = new(); - var cmdresult = await Cli.Wrap(Constants.DotnetCommand) - .WithArguments(Constants.ListSdksCommand) - .ExecuteBufferedAsync(Encoding.UTF8); - - if (!string.IsNullOrEmpty(cmdresult.StandardOutput)) - { - if (cmdresult.StandardOutput.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries) is string[] sdks) - { - foreach (var s in sdks) - { - if (!string.IsNullOrEmpty(s)) - { - var lineSplit = s.Split("[", StringSplitOptions.RemoveEmptyEntries); - var versionString = lineSplit[0].Trim(); - var path = lineSplit[1].TrimEnd(']'); - result.Add(new InstalledSdk() { Version = versionString, Path = path }); - } - } - } - } - _installedSdks = result; - await BlobCache.UserAccount.InsertObject(Constants.InstalledSdksKey, JsonSerializer.Serialize(result)); - return _installedSdks; - } - catch (Exception ex) - { - Debug.WriteLine(ex); - //Analytics.TrackEvent("GetInstalledSdks", new Dictionary() { { "Error", ex.Message } }); - return null; - } - - } - - public async ValueTask Download(Sdk sdk, bool toDesktop = false) - { - try - { - Rid rid = GetRid(); - var extension = GetExtension(); - if (sdk.Data.Sdk.Files.Where(f => f.Rid == rid).FirstOrDefault(r => r.Name.Contains(extension)) is Data.FileInfo info) - { - if (!Directory.Exists(Constants.AppDataPath)) - { - Directory.CreateDirectory(Constants.AppDataPath); - } - var sdkFile = info.Url.ToString().Split("/").LastOrDefault(); - var path = Path.Combine(Constants.AppDataPath, sdkFile); - if (File.Exists(path)) - { - if (toDesktop) - { - //if file exists on desktop, return desktop path otherwise copy and return desktop path - var desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); - var filename = Path.Combine(desktop, sdkFile); - if (File.Exists(Path.Combine(desktop, filename))) - { - return desktop; - } - else - { - await File.WriteAllBytesAsync(Path.Combine(desktop, sdkFile), await File.ReadAllBytesAsync(path)); - return desktop; - } - } - return path; - } - - var progress = new ProgressTask(); - progress.Title = $"Downloading {sdk.Data.Sdk.Version}"; - progress.Url = info.Url.ToString(); - progress.CancellationTokenSource = new CancellationTokenSource(); - - var p = new Progress(); - p.ProgressChanged += (s, e) => - { - progress.Value = e; - }; - progress.Progress = p; - - - sdk.ProgressTask = progress; - - // Use the provided extension method - using var file = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None); - using var client = new HttpClient(); - await client.DownloadDataAsync(info.Url.ToString(), file, p); - - if (toDesktop) - { - var desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); - var filename = Path.Combine(desktop, sdkFile); - await File.WriteAllBytesAsync(Path.Combine(desktop, sdkFile), await File.ReadAllBytesAsync(path)); - path = desktop; - } - - return path; - } - return null; - } - catch (Exception ex) - { - Debug.WriteLine(ex); - //Analytics.TrackEvent("Download SDK", new Dictionary() { { "Error", ex.Message }, { "SDK Version", sdk.Data.Sdk.Version } }); - return null; - } - } - - public async ValueTask Install(string exe) - { - try - { + List _installedSdks = new(); + ReleaseIndex[] _releaseIndex; + Dictionary _releases = new(); + + public DotnetService() + { + } + + public async Task> GetSdks(bool force = false) + { + var result = new List(); + var index = await GetReleaseIndex(force); + var releaseInfos = new List(); + await GetInstalledSdks(force); + + var parallelOptions = new ParallelOptions(); + parallelOptions.MaxDegreeOfParallelism = 10; + + await Parallel.ForEachAsync(index, parallelOptions, async (item, token) => + { + var infos = await GetReleaseInfos(item.ChannelVersion, force); + infos.ToList().ForEach(r => r.SupportPhase = item.SupportPhase); + infos.ToList().ForEach(r => r.ReleaseType = item.ReleaseType); + releaseInfos.AddRange(infos); + }); + + foreach (var release in releaseInfos) + { + if (release is null) + { + continue; + } + var sdk = new Sdk() + { + Data = release, + ColorHex = ColorHelper.GenerateHexColor(release.Sdk.Version.First().ToString()), + Path = _installedSdks.FirstOrDefault(x => x.Version == release.Sdk.Version)?.Path ?? string.Empty, + VersionDisplay = release.Sdk.Version, + SdkData = release.Sdk, + }; + + sdk.Data.ReleaseType = release.ReleaseType; + sdk.Data.SupportPhase = release.SupportPhase; + + result.Add(sdk); + + if (release.Sdks is not null) + { + foreach (var subSdk in release.Sdks) + { + var sub = new Sdk() + { + Data = release, + ColorHex = ColorHelper.GenerateHexColor(release.Sdk.Version.First().ToString()), + Path = _installedSdks.FirstOrDefault(x => x.Version == subSdk.Version)?.Path ?? string.Empty, + VersionDisplay = subSdk.Version, + SdkData = subSdk, + }; + + if (result.FirstOrDefault(s => s.VersionDisplay == subSdk.VersionDisplay) is null) + { + result.Add(sub); + } + } + } + } + + foreach (var installed in _installedSdks) + { + if (result.FirstOrDefault(x => x.VersionDisplay == installed.Version) is null) + { + result.Add( + new Sdk() + { + Data = null, + VersionDisplay = installed.Version, + Path = installed.Path, + ColorHex = ColorHelper.GenerateHexColor(installed.Version.First().ToString()), + } + ); + } + } + + result = result.GroupBy(x => x.Group) + .SelectMany(x => x.OrderByDescending(y => y.Data?.ReleaseDate)) + .OrderByDescending(x => x.Group) + .ToList(); + + return result; + } + + async Task GetReleaseIndex(bool force = false) + { + if (!force && _releaseIndex is not null) + { + return _releaseIndex; + } + if (_releaseIndex is null && await BlobCache.UserAccount.ContainsKey(Constants.ReleaseIndexKey) && !force) + { + var json = await File.ReadAllTextAsync(Constants.ReleaseIndexPath); + var deserialized = JsonSerializer.Deserialize(json, ReleaseSerializerOptions.Options); + _releaseIndex = deserialized.ReleasesIndex; + return _releaseIndex; + } + + using var client = new HttpClient(); + var response = await client.GetStringAsync(Constants.ReleaseIndexUrl); + var releaseIndex = JsonSerializer.Deserialize(response, ReleaseSerializerOptions.Options); + _releaseIndex = releaseIndex.ReleasesIndex; + if (!Directory.Exists(Constants.AppDataPath)) + { + Directory.CreateDirectory(Constants.AppDataPath); + } + + + await File.WriteAllTextAsync(Constants.ReleaseIndexPath, response); + BlobCache.UserAccount.InsertObject(Constants.ReleaseIndexKey, Constants.ReleaseIndexPath); + return _releaseIndex; + } + + async Task GetReleaseInfos(string channel, bool force = false) + { + if (!force && _releases is not null && _releases.ContainsKey(channel)) + { + return _releases[channel]; + } + if (await BlobCache.UserAccount.ContainsKey(Constants.ReleaseBaseKey + channel) && !force) + { + var cachedFile = Path.Combine(Constants.AppDataPath, $"release-{channel}.json"); + var json = await File.ReadAllTextAsync(cachedFile); + var deserialized = JsonSerializer.Deserialize(json, ReleaseSerializerOptions.Options); + + _releases.Add(channel, deserialized.Releases); + return _releases[channel]; + } + + using var client = new HttpClient(); + var url = Constants.ReleaseInfoUrl + channel + Constants.ReleaseInfoUrlEnd; + var response = await client.GetStringAsync(url); + var releases = JsonSerializer.Deserialize(response, ReleaseSerializerOptions.Options); + var path = Path.Combine(Constants.AppDataPath, $"release-{channel}.json"); + await File.WriteAllTextAsync(path, response); + await BlobCache.UserAccount.InsertObject(Constants.ReleaseBaseKey + channel, path); + return releases.Releases; + } + + + async ValueTask> GetInstalledSdks(bool force = false) + { + try + { + if (!_installedSdks.IsNullOrEmpty() && !force) + { + return _installedSdks; + } + if (await BlobCache.UserAccount.ContainsKey(Constants.InstalledSdksKey) && !force) + { + var sdks = await BlobCache.UserAccount.GetObject(Constants.InstalledSdksKey); + _installedSdks = JsonSerializer.Deserialize>(sdks); + return _installedSdks; + } + + List result = new(); + var cmdresult = await Cli.Wrap(Constants.DotnetCommand) + .WithArguments(Constants.ListSdksCommand) + .ExecuteBufferedAsync(Encoding.UTF8); + + if (!string.IsNullOrEmpty(cmdresult.StandardOutput)) + { + if (cmdresult.StandardOutput.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries) is string[] sdks) + { + foreach (var s in sdks) + { + if (!string.IsNullOrEmpty(s)) + { + var lineSplit = s.Split("[", StringSplitOptions.RemoveEmptyEntries); + var versionString = lineSplit[0].Trim(); + var path = lineSplit[1].TrimEnd(']'); + result.Add(new InstalledSdk() { Version = versionString, Path = path }); + } + } + } + } + _installedSdks = result; + await BlobCache.UserAccount.InsertObject(Constants.InstalledSdksKey, JsonSerializer.Serialize(result)); + return _installedSdks; + } + catch (Exception ex) + { + Debug.WriteLine(ex); + //Analytics.TrackEvent("GetInstalledSdks", new Dictionary() { { "Error", ex.Message } }); + return null; + } + + } + + public async ValueTask Download(Sdk sdk, bool toDesktop = false, IProgress<(float progress, string task)>? status = null) + { + try + { + Rid rid = GetRid(); + var extension = GetExtension(); + if (sdk.SdkData.Files.Where(f => f.Rid == rid).FirstOrDefault(r => r.Name.Contains(extension)) is Data.FileInfo info) + { + if (!Directory.Exists(Constants.AppDataPath)) + { + Directory.CreateDirectory(Constants.AppDataPath); + } + var sdkFile = info.Url.ToString().Split("/").LastOrDefault(); + var path = Path.Combine(Constants.AppDataPath, sdkFile); + if (File.Exists(path)) + { + status?.Report((0.5f, "Already downloaded")); + if (toDesktop) + { + //if file exists on desktop, return desktop path otherwise copy and return desktop path + var desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + var filename = Path.Combine(desktop, sdkFile); + if (File.Exists(Path.Combine(desktop, filename))) + { + status?.Report((1f, "Already downloaded")); + return desktop; + } + else + { + var bytes = await File.ReadAllBytesAsync(path); + await bytes.WriteAllBytesAsync(Path.Combine(desktop, sdkFile), status, CancellationToken.None); + return desktop; + } + } + return path; + } + + var progress = new ProgressTask(); + progress.Title = $"Downloading {sdk.SdkData.Version}"; + progress.Url = info.Url.ToString(); + progress.CancellationTokenSource = new CancellationTokenSource(); + + var p = new Progress<(float progress, string task)>(); + p.ProgressChanged += (s, e) => + { + progress.Value = e.progress * 100; + progress.Task = e.task; + status?.Report(e); + }; + progress.Progress = p; + + + sdk.ProgressTask = progress; + + // Use the provided extension method + using var file = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None); + using var client = new HttpClient(); + await client.DownloadDataAsync(info.Url.ToString(), file, p, sdk.ProgressTask.CancellationTokenSource.Token); + + if (toDesktop) + { + var desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + var filename = Path.Combine(desktop, sdkFile); + await File.WriteAllBytesAsync(Path.Combine(desktop, sdkFile), await File.ReadAllBytesAsync(path), sdk.ProgressTask.CancellationTokenSource.Token); + path = desktop; + } + + return path; + } + return null; + } + catch (Exception ex) + { + Debug.WriteLine(ex); + //Analytics.TrackEvent("Download SDK", new Dictionary() { { "Error", ex.Message }, { "SDK Version", sdk.SdkData.Version } }); + return null; + } + } + + public async ValueTask Install(string exe, IProgress<(float progress, string task)>? status = null) + { + try + { #if WINDOWS - var result = await Cli.Wrap(exe).WithArguments(" /install /quiet /qn /norestart").WithValidation(CommandResultValidation.None).ExecuteAsync(); - return result.ExitCode == 0; + var result = await Cli.Wrap(exe).WithArguments(" /install /quiet /qn /norestart").WithValidation(CommandResultValidation.None).ExecuteAsync(); + if (result.ExitCode == 1638) + { + status?.Report((1f, "Another version is already installed")); + } + else if (result.ExitCode == 0) + { + status?.Report((1f, "Installed")); + } + return result.ExitCode == 0; #endif #if MACOS return RunAsRoot("/usr/sbin/installer", new[] { "-pkg", exe, "-target", "/", null }); #endif - } - catch (Exception ex) - { - Debug.WriteLine(ex); - //Analytics.TrackEvent("Install SDK", new Dictionary() { { "Error", ex.Message }, { "Exe", exe } }); - return false; - } - return false; - } + } + catch (Exception ex) + { + Debug.WriteLine(ex); + //Analytics.TrackEvent("Install SDK", new Dictionary() { { "Error", ex.Message }, { "Exe", exe } }); + return false; + } + finally + { + GetInstalledSdks(true).SafeFireAndForget(); + } + return false; + } + + public async Task GetInstallationPath(Sdk sdk) + { + var installed = await GetInstalledSdks(true); + return installed.FirstOrDefault(x => x.Version == sdk.SdkData.Version)?.Path ?? string.Empty; + } + + public async Task OpenFolder(Sdk sdk) + { + try + { + string path = Path.Combine(sdk.Path, sdk.SdkData.Version); + path.OpenFilePath(); + } + catch (Exception ex) + { + Debug.WriteLine(ex); + //Analytics.TrackEvent("OpenFolder", new Dictionary() { { "Error", ex.Message }, { "Path", sdk.Path } }); + } + } + + public async Task OpenFolder(string path) + { + try + { + await Cli.Wrap(Constants.ExplorerCommand).WithArguments(path).WithValidation(CommandResultValidation.None).ExecuteAsync(); + } + catch (Exception ex) + { + Debug.WriteLine(ex); + //Analytics.TrackEvent("OpenFolder", new Dictionary() { { "Error", ex.Message }, { "Path", sdk.Path } }); + } + } + + + public async Task Uninstall(Sdk sdk, string setupPath = "", IProgress<(float progress, string task)>? status = null) + { + try + { + var progress = new ProgressTask(); + progress.Title = $"Uninstalling {sdk.SdkData.Version}"; + progress.CancellationTokenSource = new CancellationTokenSource(); + + var p = new Progress<(float progress, string task)>(); + p.ProgressChanged += (s, e) => + { + progress.Value = e.progress * 100; + progress.Task = e.task; + status?.Report(e); + }; + progress.Progress = p; + + + sdk.ProgressTask = progress; - public async Task GetInstallationPath(Sdk sdk) - { - var installed = await GetInstalledSdks(true); - return installed.FirstOrDefault(x => x.Version == sdk.Data.Sdk.Version)?.Path ?? string.Empty; - } - - public async Task OpenFolder(Sdk sdk) - { - try - { - string path = Path.Combine(sdk.Path, sdk.Data.Sdk.Version); - path.OpenFilePath(); - } - catch (Exception ex) - { - Debug.WriteLine(ex); - //Analytics.TrackEvent("OpenFolder", new Dictionary() { { "Error", ex.Message }, { "Path", sdk.Path } }); - } - } - - public async Task OpenFolder(string path) - { - try - { - await Cli.Wrap(Constants.ExplorerCommand).WithArguments(path).WithValidation(CommandResultValidation.None).ExecuteAsync(); - } - catch (Exception ex) - { - Debug.WriteLine(ex); - //Analytics.TrackEvent("OpenFolder", new Dictionary() { { "Error", ex.Message }, { "Path", sdk.Path } }); - } - } - - - public async Task Uninstall(Sdk sdk, string setupPath = "") - { - try - { #if WINDOWS - var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), Constants.UninstallerPath); - var filename = GetSetupName(sdk); - - string[] files = Directory.GetFiles(path, filename, SearchOption.AllDirectories); - - if (!files.IsNullOrEmpty()) - { - var result = await Cli.Wrap(files.First()).WithArguments(" /uninstall /quiet /qn /norestart").WithValidation(CommandResultValidation.None).ExecuteAsync(); - return result.ExitCode == 0; - } - else - { - - var setupInLocalDirectory = Path.Combine(Constants.AppDataPath, filename); - if (!string.IsNullOrEmpty(setupPath)) - { - var result = await Cli.Wrap(setupPath).WithArguments(" /uninstall /quiet /qn /norestart").WithValidation(CommandResultValidation.None).ExecuteAsync(); - return result.ExitCode == 0; - } - else if (File.Exists(setupInLocalDirectory)) - { - var result = await Cli.Wrap(setupInLocalDirectory).WithArguments(" /uninstall /quiet /qn /norestart").WithValidation(CommandResultValidation.None).ExecuteAsync(); - return result.ExitCode == 0; - } - else - { - var exe = await Download(sdk); - if (!string.IsNullOrEmpty(exe)) - { - return await Uninstall(sdk, exe); - } - } - } - return false; + var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), Constants.UninstallerPath); + var filename = GetSetupName(sdk); + + string[] files = Directory.GetFiles(path, filename, SearchOption.AllDirectories); + + if (!files.IsNullOrEmpty()) + { + sdk.ProgressTask.Progress?.Report((0.5f, "Found uninstaller")); + var result = await Cli.Wrap(files.First()).WithArguments(" /uninstall /quiet /qn /norestart").WithValidation(CommandResultValidation.None).ExecuteAsync(); + if (result.ExitCode == 0) + { + sdk.ProgressTask.Progress?.Report((1f, "Uninstalled")); + GetInstalledSdks(true).SafeFireAndForget(); + } + return result.ExitCode == 0; + } + else + { + + var setupInLocalDirectory = Path.Combine(Constants.AppDataPath, filename); + if (!string.IsNullOrEmpty(setupPath)) + { + sdk.ProgressTask.Progress?.Report((0.5f, "Found Uninstaller")); + var result = await Cli.Wrap(setupPath).WithArguments(" /uninstall /quiet /qn /norestart").WithValidation(CommandResultValidation.None).ExecuteAsync(); + if (result.ExitCode == 0) + { + sdk.ProgressTask.Progress?.Report((1f, "Uninstalled")); + GetInstalledSdks(true).SafeFireAndForget(); + } + return result.ExitCode == 0; + } + else if (File.Exists(setupInLocalDirectory)) + { + sdk.ProgressTask.Progress?.Report((0.5f, "Found Uninstaller")); + var result = await Cli.Wrap(setupInLocalDirectory).WithArguments(" /uninstall /quiet /qn /norestart").WithValidation(CommandResultValidation.None).ExecuteAsync(); + if (result.ExitCode == 0) + { + sdk.ProgressTask.Progress?.Report((1f, "Uninstalled")); + GetInstalledSdks(true).SafeFireAndForget(); + } + return result.ExitCode == 0; + } + else + { + sdk.ProgressTask.Progress?.Report((0.3f, "Fetching Uninstaller")); + var exe = await Download(sdk, status: status); + + if (!string.IsNullOrEmpty(exe)) + { + sdk.ProgressTask.Progress?.Report((0.4f, "Found Uninstaller")); + return await Uninstall(sdk, exe); + } + } + } + return false; #endif #if MACOS @@ -373,50 +448,58 @@ public async Task Uninstall(Sdk sdk, string setupPath = "") Directory.CreateDirectory(Constants.AppDataPath); } //write Constants.UninstallScriptFile to file - var script = Constants.UninstallScriptFile.Replace("XXXXX", sdk.Data.Sdk.Version); - script = script.Replace("XXXXX", sdk.Data.Sdk.Version); - var filename = "uninstall-" + sdk.Data.Sdk.Version.Replace(".", "-") + ".sh"; + var script = Constants.UninstallScriptFile.Replace("XXXXX", sdk.SdkData.Version); + script = script.Replace("XXXXX", sdk.SdkData.Version); + var filename = "uninstall-" + sdk.SdkData.Version.Replace(".", "-") + ".sh"; var path = Path.Combine(Constants.AppDataPath, filename); + sdk.ProgressTask.Progress?.Report((0.5f, "Writing Uninstaller")); await File.WriteAllTextAsync(path, script); - return RunAsRoot("/bin/sh", new[] { path, null }); + sdk.ProgressTask.Progress?.Report((0.6f, "Uninstalling")); + var result = RunAsRoot("/bin/sh", new[] { path, null }); + if (result) + { + sdk.ProgressTask.Progress?.Report((1f, "Uninstalled")); + return true; + } + return false; #endif - } - catch (Exception ex) - { - Debug.WriteLine(ex); - //Analytics.TrackEvent("Uninstall SDK", new Dictionary() { { "Error", ex.Message }, { "SDK Version", sdk.Data.Sdk.Version } }); - } - return false; - } - - string GetSetupName(Sdk sdk) - { - try - { - var env = Environment.Is64BitOperatingSystem ? "64" : "32"; - var arch = "x"; - if (RuntimeInformation.OSArchitecture == Architecture.Arm || - RuntimeInformation.OSArchitecture == Architecture.Arm64 || - RuntimeInformation.OSArchitecture == Architecture.Armv6) - { - arch = "arm"; - } - var os = "win"; - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - os = "macos"; - } - - return $"dotnet-sdk-{sdk.Data.Sdk.Version}-{os}-{arch}{env}.exe"; - - } - catch (Exception ex) - { - Debug.WriteLine(ex); - //Analytics.TrackEvent("GetSetupName", new Dictionary() { { "Error", ex.Message }, { "SDK Version", sdk.Data.Sdk.Version } }); - return null; - } - } + } + catch (Exception ex) + { + Debug.WriteLine(ex); + //Analytics.TrackEvent("Uninstall SDK", new Dictionary() { { "Error", ex.Message }, { "SDK Version", sdk.SdkData.Version } }); + } + return false; + } + + string GetSetupName(Sdk sdk) + { + try + { + var env = Environment.Is64BitOperatingSystem ? "64" : "32"; + var arch = "x"; + if (RuntimeInformation.OSArchitecture == Architecture.Arm || + RuntimeInformation.OSArchitecture == Architecture.Arm64 || + RuntimeInformation.OSArchitecture == Architecture.Armv6) + { + arch = "arm"; + } + var os = "win"; + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + os = "macos"; + } + + return $"dotnet-sdk-{sdk.SdkData.Version}-{os}-{arch}{env}.exe"; + + } + catch (Exception ex) + { + Debug.WriteLine(ex); + //Analytics.TrackEvent("GetSetupName", new Dictionary() { { "Error", ex.Message }, { "SDK Version", sdk.SdkData.Version } }); + return null; + } + } #if MACOS bool RunAsRoot(string exe, string[] args) @@ -469,58 +552,78 @@ bool RunAsRoot(string exe, string[] args) #endif - string GetExtension() - { - var ext = ".tar.gz"; - //if(RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) doesn't work on mac-catalyst - if (RuntimeInformation.RuntimeIdentifier.Contains("mac")) - { - ext = ".pkg"; - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - ext = ".exe"; - } - return ext; - } - - Rid GetRid() - { - try - { - //if(RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) doesn't work on mac-catalyst - if (RuntimeInformation.RuntimeIdentifier.Contains("mac")) - { - return - (RuntimeInformation.OSArchitecture == Architecture.Arm || - RuntimeInformation.OSArchitecture == Architecture.Arm64 || - RuntimeInformation.OSArchitecture == Architecture.Armv6) ? Rid.OsxArm64 : Rid.OsxX64; - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - if (Environment.Is64BitOperatingSystem) - { - return - (RuntimeInformation.OSArchitecture == Architecture.Arm || - RuntimeInformation.OSArchitecture == Architecture.Arm64 || - RuntimeInformation.OSArchitecture == Architecture.Armv6) ? Rid.WinArm64 : Rid.WinX64; - } - else - { - return - (RuntimeInformation.OSArchitecture == Architecture.Arm || - RuntimeInformation.OSArchitecture == Architecture.Arm64 || - RuntimeInformation.OSArchitecture == Architecture.Armv6) ? Rid.WinArm : Rid.WinX86; - } - - } - return Rid.Empty; - } - catch (Exception ex) - { - Debug.WriteLine(ex); - //Analytics.TrackEvent("GetRid", new Dictionary() { { "Error", ex.Message } }); - return Rid.Empty; - } - } -} \ No newline at end of file + Sdk GetMostRecentSdk(List sdks, bool withPreview = false) + { + try + { + sdks = sdks.OrderByDescending(x => x.VersionDisplay).ToList(); + if (withPreview) + { + return sdks.FirstOrDefault(x => x.Data.Preview); + } + return sdks.FirstOrDefault(x => !x.Data.Preview); + } + catch (Exception ex) + { + Debug.WriteLine(ex); + //Analytics.TrackEvent("GetMostRecentSdk", new Dictionary() { { "Error", ex.Message } }); + return null; + } + } + + + string GetExtension() + { + var ext = ".tar.gz"; + //if(RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) doesn't work on mac-catalyst + if (RuntimeInformation.RuntimeIdentifier.Contains("mac")) + { + ext = ".pkg"; + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + ext = ".exe"; + } + return ext; + } + + Rid GetRid() + { + try + { + //if(RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) doesn't work on mac-catalyst + if (RuntimeInformation.RuntimeIdentifier.Contains("mac")) + { + return + (RuntimeInformation.OSArchitecture == Architecture.Arm || + RuntimeInformation.OSArchitecture == Architecture.Arm64 || + RuntimeInformation.OSArchitecture == Architecture.Armv6) ? Rid.OsxArm64 : Rid.OsxX64; + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + if (Environment.Is64BitOperatingSystem) + { + return + (RuntimeInformation.OSArchitecture == Architecture.Arm || + RuntimeInformation.OSArchitecture == Architecture.Arm64 || + RuntimeInformation.OSArchitecture == Architecture.Armv6) ? Rid.WinArm64 : Rid.WinX64; + } + else + { + return + (RuntimeInformation.OSArchitecture == Architecture.Arm || + RuntimeInformation.OSArchitecture == Architecture.Arm64 || + RuntimeInformation.OSArchitecture == Architecture.Armv6) ? Rid.WinArm : Rid.WinX86; + } + + } + return Rid.Empty; + } + catch (Exception ex) + { + Debug.WriteLine(ex); + //Analytics.TrackEvent("GetRid", new Dictionary() { { "Error", ex.Message } }); + return Rid.Empty; + } + } +} diff --git a/src/Styles.axaml b/src/Styles.axaml index 85a5ed8..af5956a 100644 --- a/src/Styles.axaml +++ b/src/Styles.axaml @@ -1,11 +1,11 @@ - - - - - + xmlns="https://github.com/avaloniaui" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> + + + + + diff --git a/src/ViewModels/MainViewModel.cs b/src/ViewModels/MainViewModel.cs index c9a27e5..5267955 100644 --- a/src/ViewModels/MainViewModel.cs +++ b/src/ViewModels/MainViewModel.cs @@ -1,322 +1,505 @@ - -using System; -using System.Collections.ObjectModel; +using System.Collections.ObjectModel; using System.Diagnostics; using CommunityToolkit.Mvvm.Input; using Dots.Models; using Dots.Services; -using System.Reactive; using Dots.Data; using Dots.Helpers; using ObservableView; using ObservableView.Searching.Operators; -using System.Collections.Generic; using System.IO; using System.Net.Http; -using System.Threading.Tasks; -using System.Windows.Input; +using AsyncAwaitBestPractices; +using Avalonia.Media; +using Avalonia.Threading; namespace Dots.ViewModels; public partial class MainViewModel : ObservableRecipient { - public MainViewModel(DotnetService dotnet, ErrorPopupHelper errorHelper) - { - _dotnet = dotnet; - _errorHelper = errorHelper; - _progressTasks = new ObservableCollection(); - SelectedFilterIcon = LucideIcons.ListFilter; - } - - string _query = ""; - bool _isLoading = false; - - DotnetService _dotnet; - ErrorPopupHelper _errorHelper; - List _baseSdks; - - [ObservableProperty] - bool _selectionEnabled; - - [ObservableProperty] - bool _isBusy; - - [ObservableProperty] - Sdk _selectedSdk; - - [ObservableProperty] - ObservableView _sdks; - - [ObservableProperty] - string _lastUpdated; - - [ObservableProperty] - bool _showDetails = false; - - [ObservableProperty] - ObservableCollection _progressTasks; - - [ObservableProperty] - string _selectedFilterIcon; - - bool _showOnline = true; - bool _showInstalled = true; - - [ObservableProperty] - bool _emptyData; - - public bool SetSelectedSdk(Sdk sdk) - { - var showDetails = true; - if (sdk is null) - { - showDetails = false; - } - else if (SelectedSdk is null) - { - showDetails = true; - } - else if (sdk is not null && sdk.VersionDisplay == SelectedSdk.VersionDisplay) - { - showDetails = !ShowDetails; - } - ShowDetails = showDetails; - EmptyData = sdk?.Data is null; - - if (sdk?.VersionDisplay == SelectedSdk?.VersionDisplay) - { - SelectedSdk = null; - return true; - } - else - { - SelectedSdk = sdk; - return false; - } - } - - - [RelayCommand] - async Task DownloadScript() - { - try - { - using var client = new HttpClient(); - var response = await client.GetAsync(Constants.InstallerScript); - var content = await response.Content.ReadAsStringAsync(); - //save file to disk - var folder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); - if (!Directory.Exists(folder)) - { - Directory.CreateDirectory(folder); - } - - - var filename = Path.Combine(folder, "dotnet-install.ps1"); - await File.WriteAllTextAsync(filename, content); - Debug.WriteLine("done - " + filename); - - } - catch (Exception ex) - { - Console.WriteLine(ex); - } - } - - [RelayCommand(AllowConcurrentExecutions = true)] - async Task ListSdks() - { - LastUpdated = " " + DateTime.Now.ToString("MMMM dd, yyyy HH:mm"); - await CheckSdks(true); - } - - [RelayCommand] - void FilterSdks(string query) - { - _query = query; - Sdks.Search(_query); - - var filteredCollection = _baseSdks.Where(s => - s.Data.Sdk.Version.ToLowerInvariant().Contains(query.ToLowerInvariant()) || - s.Path.ToLowerInvariant().Contains(query.ToLowerInvariant())).ToList(); - - foreach (var s in _baseSdks) - { - if (!filteredCollection.Contains(s)) - { - Sdks.View.Remove(s); - } - else if (!Sdks.View.Contains(s)) - { - Sdks.View.Add(s); - } - } - } - - [RelayCommand] - void ToggleSelection() - { } - - [RelayCommand] - void ApplyFilter(string f) - { - int filter = int.Parse(f); - //0 all - //1 online - //2 installed - if(filter == 0) - { - _showOnline = true; - _showInstalled = true; - SelectedFilterIcon = LucideIcons.ListFilter; - } - else if (filter == 1) - { - _showInstalled = false; - _showOnline = true; - SelectedFilterIcon = LucideIcons.Cloudy; - } - else if(filter == 2) - { - _showOnline = false; - _showInstalled = true; - SelectedFilterIcon = LucideIcons.HardDrive; - } - Sdks.Search(" "); - Sdks.Search(_query); - - if (!Sdks.View.Contains(SelectedSdk)) - { - SelectedSdk = null; - } - } - - public ICommand MyTestCommand { get; set; } - - [RelayCommand(AllowConcurrentExecutions = true)] - async Task OpenOrDownload(Sdk sdk) - { - try - { - sdk.IsDownloading = true; - if (sdk.Installed) - { - sdk.StatusMessage = Constants.OpeningText; - await _dotnet.OpenFolder(sdk); - } - else - { - sdk.StatusMessage = Constants.DownloadingText; - var path = await _dotnet.Download(sdk, true); - await _dotnet.OpenFolder(path); - } - sdk.IsDownloading = false; - - } - catch (Exception ex) - { - sdk.IsDownloading = false; - await _errorHelper.ShowPopup(ex); - } - } - - [RelayCommand(AllowConcurrentExecutions = true)] - async Task InstallOrUninstall(Sdk sdk) - { - try - { - sdk.IsInstalling = true; - - if (sdk.Installed) - { - sdk.StatusMessage = Constants.UninstallingText; - var result = await _dotnet.Uninstall(sdk); - if (result) - { - sdk.Path = string.Empty; - } - } - else - { - sdk.StatusMessage = Constants.DownloadingText; - var path = await _dotnet.Download(sdk); - if (!string.IsNullOrEmpty(path)) - { - sdk.StatusMessage = Constants.InstallingText; - var result = await _dotnet.Install(path); - if (result) - { - sdk.Path = await _dotnet.GetInstallationPath(sdk); - } - else - { - //show popup and prompt to manually install - } - } - } - sdk.IsInstalling = false; - } - - catch (Exception ex) - { - sdk.IsInstalling = false; - await _errorHelper.ShowPopup(ex); - } - } - - [RelayCommand] - void ToggleMultiSelection() - { - - } - - [RelayCommand] - void OpenSettings() - { } - - void Sdks_FilterHandler(object sender, ObservableView.Filtering.FilterEventArgs e) - { - if (_showOnline && _showInstalled) - { - e.IsAllowed = true; - } - else if (_showOnline && !_showInstalled) - { - e.IsAllowed = !e.Item.Installed; - } - else if (!_showOnline && _showInstalled) - { - e.IsAllowed = e.Item.Installed; - } - else - { - e.IsAllowed = false; - } - } - - public async Task CheckSdks(bool force = false) - { - try - { - if (_isLoading) return; - _isLoading = true; - if (Sdks is not null) Sdks.FilterHandler -= Sdks_FilterHandler; - IsBusy = true; - var sdkList = await _dotnet.GetSdks(force); - Sdks = new ObservableView(sdkList.DistinctBy(s => s.VersionDisplay)); - Sdks.SearchSpecification.Add(x => x.VersionDisplay, BinaryOperator.Contains); - Sdks.SearchSpecification.Add(x => x.Path, BinaryOperator.Contains); - Sdks.FilterHandler += Sdks_FilterHandler; - - _baseSdks = sdkList; - LastUpdated = " " + DateTime.Now.ToString("MMMM dd, yyyy HH:mm"); - IsBusy = false; - _isLoading = false; - } - catch (Exception ex) - { - await _errorHelper.ShowPopup(ex); - } - } + public MainViewModel(DotnetService dotnet, ErrorPopupHelper errorHelper) + { + _dotnet = dotnet; + _errorHelper = errorHelper; + _progressTasks = new ObservableCollection(); + SelectedFilterIcon = LucideIcons.ListFilter; + CurrentStatusIcon = LucideIcons.Info; + _filteredSelection = new(); + _baseSdks = new(); + _currentStatusIcon = LucideIcons.Info; + _currentStatusText = "Loading SDKs..."; + _lastUpdated = ""; + } + + string _query = ""; + bool _isLoading = false; + + DotnetService _dotnet; + ErrorPopupHelper _errorHelper; + List _baseSdks; + List _filteredSelection; + + + [ObservableProperty] + bool _selectionEnabled; + + [ObservableProperty] + bool _isBusy; + + [ObservableProperty] + Sdk? _selectedSdk; + + [ObservableProperty] + ObservableView? _sdks; + + [ObservableProperty] + string _lastUpdated; + + [ObservableProperty] + bool _showDetails = false; + + [ObservableProperty] + ObservableCollection _progressTasks; + + [ObservableProperty] + string _selectedFilterIcon; + + [ObservableProperty] + string _currentStatusIcon; + + [ObservableProperty] + string _currentStatusText; + + [ObservableProperty] + bool _emptyData; + + bool _showOnline = true; + bool _showInstalled = true; + + public bool SetSelectedSdk(Sdk sdk) + { + var showDetails = true; + if (sdk is null) + { + showDetails = false; + } + else if (SelectedSdk is null) + { + showDetails = true; + } + else if (sdk is not null && sdk.VersionDisplay == SelectedSdk.VersionDisplay) + { + showDetails = !ShowDetails; + } + ShowDetails = showDetails; + EmptyData = sdk?.Data is null; + + if (sdk?.VersionDisplay == SelectedSdk?.VersionDisplay) + { + SelectedSdk = null; + return true; + } + else + { + SelectedSdk = sdk; + return false; + } + } + + + [RelayCommand] + async Task DownloadScript() + { + try + { + using var client = new HttpClient(); + var response = await client.GetAsync(Constants.InstallerScript); + var content = await response.Content.ReadAsStringAsync(); + //save file to disk + var folder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + if (!Directory.Exists(folder)) + { + Directory.CreateDirectory(folder); + } + + + var filename = Path.Combine(folder, "dotnet-install.ps1"); + await File.WriteAllTextAsync(filename, content); + Debug.WriteLine("done - " + filename); + + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + + [RelayCommand(AllowConcurrentExecutions = true)] + async Task DoCleanup() + { + int current = 0; + var toCleanup = Sdks.View.ToList(); + + foreach (var sdk in toCleanup) + { + CurrentStatusText = $"Uninstalling {sdk.VersionDisplay} - Cleanup {current + 1} | {toCleanup.Count}"; + CurrentStatusIcon = LucideIcons.Trash2; + sdk.IsInstalling = true; + var result = await _dotnet.Uninstall(sdk, status: new Progress<(float progress, string task)>(p => + { + sdk.Progress = p.progress; + CurrentStatusText = $"Cleanup {sdk.VersionDisplay} - {p.task} {p.progress:P0}"; + CurrentStatusIcon = LucideIcons.Trash2; + if (p.progress == 1) + { + ResetStatusInfo().SafeFireAndForget(); + } + })); + if (result) + { + sdk.Path = string.Empty; + } + sdk.IsInstalling = false; + current++; + } + + await CheckSdks(false); + } + + public async Task FilterCleanupSdks() + { + await CheckSdks(true); + var toCleanup = Sdks.Source.Where(s => s.Installed && s.Data.SupportPhase is SupportPhase.Eol).ToList(); + var installed = Sdks.Source.Where(s => s.Installed).GroupBy(s => s.VersionDisplay.Substring(0, 3)).Where(g => g.Count() >= 1).SelectMany(g => g).ToList(); + var latests = Sdks.Source.Where(s => !s.Data.Preview).GroupBy(s => s.VersionDisplay.Substring(0, 3)).Select(g => g.OrderByDescending(s => s.Data.ReleaseDate).First()).ToList(); + + var installedGrouped = installed.GroupBy(s => s.VersionDisplay.Substring(0, 3)).ToList(); + + var addToCleanup = new List(); + foreach (var sdk in installed) + { + if (latests.Contains(sdk)) + { + continue; + } + else + { + //add from the same major version but skip the latest + var group = installedGrouped.FirstOrDefault(g => g.Key == sdk.VersionDisplay.Substring(0, 3)); + if (group is not null) + { + var ordered = group.OrderByDescending(s => s.Data.ReleaseDate).ToList(); + for (int i = 1; i < ordered.Count; i++) + { + addToCleanup.Add(ordered[i]); + } + } + } + } + toCleanup.AddRange(addToCleanup); + toCleanup.AddRange(installed.Where(s => s.Data.SupportPhase is SupportPhase.Eol).ToList()); + toCleanup = toCleanup.Distinct().ToList(); + + if (toCleanup.Count() == 0) + { + CurrentStatusText = $"no SDKs to cleanup"; + CurrentStatusIcon = LucideIcons.TriangleAlert; + ResetStatusInfo().SafeFireAndForget(); + return false; + } + + _filteredSelection = toCleanup; + Sdks.Search(" "); + Sdks.Search("."); + return true; + } + + [RelayCommand(AllowConcurrentExecutions = true)] + async Task DoUpdate() + { + int current = 0; + var toInstall = Sdks.View.ToList(); + foreach (var sdk in toInstall) + { + CurrentStatusText = $"Installing {sdk.VersionDisplay} - Update {current + 1} | {toInstall.Count()}"; + CurrentStatusIcon = LucideIcons.CircleFadingArrowUp; + await InstallOrUninstall(sdk); + } + + await CheckSdks(false); + } + + public async Task FilterUpdateSdks() + { + await CheckSdks(true); + var latests = Sdks.Source.GroupBy(s => s.VersionDisplay.Substring(0, 3)).Select(g => g.OrderByDescending(s => s.Data.ReleaseDate).First()).ToList(); + var installed = Sdks.Source.Where(s => s.Installed).GroupBy(s => s.VersionDisplay.Substring(0, 3)).Where(g => g.Count() >= 1).SelectMany(g => g).ToList(); + var toInstall = latests.Except(installed).ToList().Where(s => s.Data.SupportPhase is SupportPhase.Active || s.Data.SupportPhase is SupportPhase.Preview || s.Data.SupportPhase is SupportPhase.Maintenance); + toInstall = toInstall.Distinct().ToList(); + + if (toInstall.Count() == 0) + { + CurrentStatusText = $"everything is up to date - no SDKs to update"; + CurrentStatusIcon = LucideIcons.TriangleAlert; + ResetStatusInfo().SafeFireAndForget(); + return false; + } + + _filteredSelection = toInstall.ToList(); + Sdks.Search(" "); + Sdks.Search("."); + return true; + } + + public async Task ResetSelectionFilter() + { + await CheckSdks(false); + _filteredSelection = new(); + return false; + } + + [RelayCommand] + void CancelTask(Sdk sdk) + { + sdk.ProgressTask.CancellationTokenSource.Cancel(); + } + + + [RelayCommand(AllowConcurrentExecutions = true)] + async Task ListSdks() + { + LastUpdated = " " + DateTime.Now.ToString("MMMM dd, yyyy HH:mm"); + await CheckSdks(true); + } + + [RelayCommand] + void FilterSdks(string query) + { + _query = query; + Sdks.Search(_query); + } + + [RelayCommand] + void ToggleSelection() + { } + + [RelayCommand] + void ApplyFilter(string f) + { + int filter = int.Parse(f); + //0 all + //1 online + //2 installed + if (filter == 0) + { + _showOnline = true; + _showInstalled = true; + SelectedFilterIcon = LucideIcons.ListFilter; + } + else if (filter == 1) + { + _showInstalled = false; + _showOnline = true; + SelectedFilterIcon = LucideIcons.Cloudy; + } + else if (filter == 2) + { + _showOnline = false; + _showInstalled = true; + SelectedFilterIcon = LucideIcons.HardDrive; + } + Sdks.Search(" "); + Sdks.Search(_query); + + if (!Sdks.View.Contains(SelectedSdk)) + { + SelectedSdk = null; + } + } + + [RelayCommand(AllowConcurrentExecutions = true)] + async Task OpenOrDownload(Sdk sdk) + { + try + { + sdk.IsDownloading = true; + if (sdk.Installed) + { + sdk.StatusMessage = Constants.OpeningText; + CurrentStatusText = $"Opening {Path.Combine(sdk.Path, sdk.Data.Sdk.Version)}"; + CurrentStatusIcon = LucideIcons.Folder; + ResetStatusInfo().SafeFireAndForget(); + await _dotnet.OpenFolder(sdk); + } + else + { + sdk.StatusMessage = Constants.DownloadingText; + var path = await _dotnet.Download(sdk, true, status: new Progress<(float progress, string task)>(p => + { + sdk.Progress = p.progress; + CurrentStatusText = $"{sdk.VersionDisplay} - {p.task} {p.progress:P0}"; + CurrentStatusIcon = LucideIcons.Download; + if (p.progress == 1) + { + CurrentStatusText = "Downloaded to Desktop - opening..."; + CurrentStatusIcon = LucideIcons.Folder; + ResetStatusInfo().SafeFireAndForget(); + } + })); + await _dotnet.OpenFolder(path); + } + sdk.IsDownloading = false; + + } + catch (Exception ex) + { + sdk.IsDownloading = false; + await _errorHelper.ShowPopup(ex); + } + } + + [RelayCommand(AllowConcurrentExecutions = true)] + async Task InstallOrUninstall(Sdk sdk) + { + try + { + sdk.IsInstalling = true; + if (sdk.Installed) + { + sdk.StatusMessage = Constants.UninstallingText; + CurrentStatusText = $"{sdk.VersionDisplay} - {sdk.StatusMessage}"; + var result = await _dotnet.Uninstall(sdk, status: new Progress<(float progress, string task)>(p => + { + sdk.Progress = p.progress; + CurrentStatusText = $"{sdk.VersionDisplay} - {sdk.StatusMessage} - {p.task} {p.progress:P0}"; + CurrentStatusIcon = LucideIcons.Trash2; + if (p.progress == 1) + { + ResetStatusInfo().SafeFireAndForget(); + } + })); + if (result) + { + sdk.Path = string.Empty; + } + } + else + { + sdk.StatusMessage = Constants.DownloadingText; + CurrentStatusText = $"{sdk.VersionDisplay} - {sdk.StatusMessage}"; + var path = await _dotnet.Download(sdk, status: new Progress<(float progress, string task)>(p => + { + sdk.Progress = p.progress; + CurrentStatusText = $"{sdk.VersionDisplay} - {sdk.StatusMessage} - {p.task} {p.progress:P0}"; + CurrentStatusIcon = LucideIcons.Download; + if (p.progress == 1) + { + ResetStatusInfo().SafeFireAndForget(); + } + })); + if (!string.IsNullOrEmpty(path)) + { + sdk.StatusMessage = Constants.InstallingText; + var result = await _dotnet.Install(path, status: new Progress<(float progress, string task)>(p => + { + sdk.Progress = p.progress; + CurrentStatusText = $"{sdk.VersionDisplay} - {sdk.StatusMessage} - {p.task} {p.progress:P0}"; + CurrentStatusIcon = LucideIcons.HardDriveDownload; + if (p.progress == 1) + { + ResetStatusInfo().SafeFireAndForget(); + } + })); + if (result) + { + sdk.Path = await _dotnet.GetInstallationPath(sdk); + } + else + { + //show popup and prompt to manually install + } + } + } + sdk.IsInstalling = false; + } + + catch (Exception ex) + { + sdk.IsInstalling = false; + await _errorHelper.ShowPopup(ex); + } + } + + async ValueTask ResetStatusInfo(bool delay = true) + { + if (delay) + { + await Task.Delay(1800); + } + CurrentStatusText = $"{Sdks.Source.Count()} SDKs found - {Sdks.Source.Count(s => s.Installed)} installed"; + CurrentStatusIcon = LucideIcons.Info; + } + + [RelayCommand] + void ToggleMultiSelection() + { + + } + + [RelayCommand] + void OpenSettings() + { } + + void Sdks_FilterHandler(object sender, ObservableView.Filtering.FilterEventArgs e) + { + if (_showOnline && _showInstalled) + { + e.IsAllowed = true; + } + else if (_showOnline && !_showInstalled) + { + e.IsAllowed = !e.Item.Installed; + } + else if (!_showOnline && _showInstalled) + { + e.IsAllowed = e.Item.Installed; + } + else + { + e.IsAllowed = false; + } + + if(_filteredSelection.Count > 0) + { + e.IsAllowed = _filteredSelection.FirstOrDefault(s => s.VersionDisplay == e.Item.VersionDisplay) is not null; + } + } + + public async Task CheckSdks(bool force = false) + { + try + { + if (_isLoading) return; + _isLoading = true; + if (Sdks is not null) Sdks.FilterHandler -= Sdks_FilterHandler; + IsBusy = true; + var sdkList = await _dotnet.GetSdks(force); + sdkList = sdkList.DistinctBy(s => s.VersionDisplay).ToList(); + Sdks = new ObservableView(sdkList); + Sdks.SearchSpecification.Add(x => x.VersionDisplay, BinaryOperator.Contains); + Sdks.SearchSpecification.Add(x => x.Path, BinaryOperator.Contains); + Sdks.FilterHandler += Sdks_FilterHandler; + + _baseSdks = sdkList; + LastUpdated = " " + DateTime.Now.ToString("MMMM dd, yyyy HH:mm"); + ResetStatusInfo(false).SafeFireAndForget(); + IsBusy = false; + _isLoading = false; + } + catch (Exception ex) + { + await _errorHelper.ShowPopup(ex); + } + } } diff --git a/version.txt b/version.txt index 6acdb44..50aea0e 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -2.0.3 \ No newline at end of file +2.1.0 \ No newline at end of file diff --git a/web/android-chrome-192x192.png b/web/android-chrome-192x192.png new file mode 100644 index 0000000..bc59fa0 Binary files /dev/null and b/web/android-chrome-192x192.png differ diff --git a/web/android-chrome-512x512.png b/web/android-chrome-512x512.png new file mode 100644 index 0000000..77d4c08 Binary files /dev/null and b/web/android-chrome-512x512.png differ diff --git a/web/apple-touch-icon.png b/web/apple-touch-icon.png new file mode 100644 index 0000000..b6645d9 Binary files /dev/null and b/web/apple-touch-icon.png differ diff --git a/web/css/bootstrap.css b/web/css/bootstrap.css deleted file mode 100644 index 36bfb2d..0000000 --- a/web/css/bootstrap.css +++ /dev/null @@ -1,10259 +0,0 @@ -/*! - * Bootstrap v4.5.2 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -:root { - --blue: #007bff; - --indigo: #6610f2; - --purple: #6f42c1; - --pink: #e83e8c; - --red: #dc3545; - --orange: #fd7e14; - --yellow: #ffc107; - --green: #28a745; - --teal: #20c997; - --cyan: #17a2b8; - --white: #fff; - --gray: #6c757d; - --gray-dark: #343a40; - --primary: #007bff; - --secondary: #6c757d; - --success: #28a745; - --info: #17a2b8; - --warning: #ffc107; - --danger: #dc3545; - --light: #f8f9fa; - --dark: #343a40; - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { - display: block; -} - -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: left; - background-color: #fff; -} - -[tabindex="-1"]:focus:not(:focus-visible) { - outline: 0 !important; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -h1, h2, h3, h4, h5, h6 { - margin-top: 0; - margin-bottom: 0.5rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -abbr[title], -abbr[data-original-title] { - text-decoration: underline; - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - border-bottom: 0; - -webkit-text-decoration-skip-ink: none; - text-decoration-skip-ink: none; -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} - -ol, -ul, -dl { - margin-top: 0; - margin-bottom: 1rem; -} - -ol ol, -ul ul, -ol ul, -ul ol { - margin-bottom: 0; -} - -dt { - font-weight: 700; -} - -dd { - margin-bottom: .5rem; - margin-left: 0; -} - -blockquote { - margin: 0 0 1rem; -} - -b, -strong { - font-weight: bolder; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -.25em; -} - -sup { - top: -.5em; -} - -a { - color: #007bff; - text-decoration: none; - background-color: transparent; -} - -a:hover { - color: #0056b3; - text-decoration: underline; -} - -a:not([href]):not([class]) { - color: inherit; - text-decoration: none; -} - -a:not([href]):not([class]):hover { - color: inherit; - text-decoration: none; -} - -pre, -code, -kbd, -samp { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-size: 1em; -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; - -ms-overflow-style: scrollbar; -} - -figure { - margin: 0 0 1rem; -} - -img { - vertical-align: middle; - border-style: none; -} - -svg { - overflow: hidden; - vertical-align: middle; -} - -table { - border-collapse: collapse; -} - -caption { - padding-top: 0.75rem; - padding-bottom: 0.75rem; - color: #6c757d; - text-align: left; - caption-side: bottom; -} - -th { - text-align: inherit; -} - -label { - display: inline-block; - margin-bottom: 0.5rem; -} - -button { - border-radius: 0; -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} - -input, -button, -select, -optgroup, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -input { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -[role="button"] { - cursor: pointer; -} - -select { - word-wrap: normal; -} - -button, -[type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; -} - -button:not(:disabled), -[type="button"]:not(:disabled), -[type="reset"]:not(:disabled), -[type="submit"]:not(:disabled) { - cursor: pointer; -} - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - padding: 0; - border-style: none; -} - -input[type="radio"], -input[type="checkbox"] { - box-sizing: border-box; - padding: 0; -} - -textarea { - overflow: auto; - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - max-width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; - color: inherit; - white-space: normal; -} - -progress { - vertical-align: baseline; -} - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -[type="search"] { - outline-offset: -2px; - -webkit-appearance: none; -} - -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button; -} - -output { - display: inline-block; -} - -summary { - display: list-item; - cursor: pointer; -} - -template { - display: none; -} - -[hidden] { - display: none !important; -} - -h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5, .h6 { - margin-bottom: 0.5rem; - font-weight: 500; - line-height: 1.2; -} - -h1, .h1 { - font-size: 2.5rem; -} - -h2, .h2 { - font-size: 2rem; -} - -h3, .h3 { - font-size: 1.75rem; -} - -h4, .h4 { - font-size: 1.5rem; -} - -h5, .h5 { - font-size: 1.25rem; -} - -h6, .h6 { - font-size: 1rem; -} - -.lead { - font-size: 1.25rem; - font-weight: 300; -} - -.display-1 { - font-size: 6rem; - font-weight: 300; - line-height: 1.2; -} - -.display-2 { - font-size: 5.5rem; - font-weight: 300; - line-height: 1.2; -} - -.display-3 { - font-size: 4.5rem; - font-weight: 300; - line-height: 1.2; -} - -.display-4 { - font-size: 3.5rem; - font-weight: 300; - line-height: 1.2; -} - -hr { - margin-top: 1rem; - margin-bottom: 1rem; - border: 0; - border-top: 1px solid rgba(0, 0, 0, 0.1); -} - -small, -.small { - font-size: 80%; - font-weight: 400; -} - -mark, -.mark { - padding: 0.2em; - background-color: #fcf8e3; -} - -.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: 0.5rem; -} - -.initialism { - font-size: 90%; - text-transform: uppercase; -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.25rem; -} - -.blockquote-footer { - display: block; - font-size: 80%; - color: #6c757d; -} - -.blockquote-footer::before { - content: "\2014\00A0"; -} - -.img-fluid { - max-width: 100%; - height: auto; -} - -.img-thumbnail { - padding: 0.25rem; - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: 0.25rem; - max-width: 100%; - height: auto; -} - -.figure { - display: inline-block; -} - -.figure-img { - margin-bottom: 0.5rem; - line-height: 1; -} - -.figure-caption { - font-size: 90%; - color: #6c757d; -} - -code { - font-size: 87.5%; - color: #e83e8c; - word-wrap: break-word; -} - -a > code { - color: inherit; -} - -kbd { - padding: 0.2rem 0.4rem; - font-size: 87.5%; - color: #fff; - background-color: #212529; - border-radius: 0.2rem; -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700; -} - -pre { - display: block; - font-size: 87.5%; - color: #212529; -} - -pre code { - font-size: inherit; - color: inherit; - word-break: normal; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -.container, -.container-fluid, -.container-sm, -.container-md, -.container-lg, -.container-xl { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container, .container-sm { - max-width: 540px; - } -} - -@media (min-width: 768px) { - .container, .container-sm, .container-md { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container, .container-sm, .container-md, .container-lg { - max-width: 960px; - } -} - -@media (min-width: 1200px) { - .container, .container-sm, .container-md, .container-lg, .container-xl { - max-width: 1140px; - } -} - -.row { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px; -} - -.no-gutters { - margin-right: 0; - margin-left: 0; -} - -.no-gutters > .col, -.no-gutters > [class*="col-"] { - padding-right: 0; - padding-left: 0; -} - -.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, -.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, -.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, -.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, -.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, -.col-xl-auto { - position: relative; - width: 100%; - padding-right: 15px; - padding-left: 15px; -} - -.col { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; -} - -.row-cols-1 > * { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; -} - -.row-cols-2 > * { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; -} - -.row-cols-3 > * { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; -} - -.row-cols-4 > * { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; -} - -.row-cols-5 > * { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; -} - -.row-cols-6 > * { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; -} - -.col-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; -} - -.col-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; -} - -.col-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; -} - -.col-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; -} - -.col-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; -} - -.col-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; -} - -.col-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; -} - -.col-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; -} - -.col-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; -} - -.col-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; -} - -.col-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; -} - -.col-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; -} - -.col-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; -} - -.order-first { - -ms-flex-order: -1; - order: -1; -} - -.order-last { - -ms-flex-order: 13; - order: 13; -} - -.order-0 { - -ms-flex-order: 0; - order: 0; -} - -.order-1 { - -ms-flex-order: 1; - order: 1; -} - -.order-2 { - -ms-flex-order: 2; - order: 2; -} - -.order-3 { - -ms-flex-order: 3; - order: 3; -} - -.order-4 { - -ms-flex-order: 4; - order: 4; -} - -.order-5 { - -ms-flex-order: 5; - order: 5; -} - -.order-6 { - -ms-flex-order: 6; - order: 6; -} - -.order-7 { - -ms-flex-order: 7; - order: 7; -} - -.order-8 { - -ms-flex-order: 8; - order: 8; -} - -.order-9 { - -ms-flex-order: 9; - order: 9; -} - -.order-10 { - -ms-flex-order: 10; - order: 10; -} - -.order-11 { - -ms-flex-order: 11; - order: 11; -} - -.order-12 { - -ms-flex-order: 12; - order: 12; -} - -.offset-1 { - margin-left: 8.333333%; -} - -.offset-2 { - margin-left: 16.666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.333333%; -} - -.offset-5 { - margin-left: 41.666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.333333%; -} - -.offset-8 { - margin-left: 66.666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.333333%; -} - -.offset-11 { - margin-left: 91.666667%; -} - -@media (min-width: 576px) { - .col-sm { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-sm-1 > * { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-sm-2 > * { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-sm-3 > * { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-sm-4 > * { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-sm-5 > * { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-sm-6 > * { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-sm-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-sm-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-sm-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-sm-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-sm-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-sm-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-sm-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-sm-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-sm-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-sm-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-sm-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-sm-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-sm-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-sm-first { - -ms-flex-order: -1; - order: -1; - } - .order-sm-last { - -ms-flex-order: 13; - order: 13; - } - .order-sm-0 { - -ms-flex-order: 0; - order: 0; - } - .order-sm-1 { - -ms-flex-order: 1; - order: 1; - } - .order-sm-2 { - -ms-flex-order: 2; - order: 2; - } - .order-sm-3 { - -ms-flex-order: 3; - order: 3; - } - .order-sm-4 { - -ms-flex-order: 4; - order: 4; - } - .order-sm-5 { - -ms-flex-order: 5; - order: 5; - } - .order-sm-6 { - -ms-flex-order: 6; - order: 6; - } - .order-sm-7 { - -ms-flex-order: 7; - order: 7; - } - .order-sm-8 { - -ms-flex-order: 8; - order: 8; - } - .order-sm-9 { - -ms-flex-order: 9; - order: 9; - } - .order-sm-10 { - -ms-flex-order: 10; - order: 10; - } - .order-sm-11 { - -ms-flex-order: 11; - order: 11; - } - .order-sm-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-sm-0 { - margin-left: 0; - } - .offset-sm-1 { - margin-left: 8.333333%; - } - .offset-sm-2 { - margin-left: 16.666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.333333%; - } - .offset-sm-5 { - margin-left: 41.666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.333333%; - } - .offset-sm-8 { - margin-left: 66.666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.333333%; - } - .offset-sm-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 768px) { - .col-md { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-md-1 > * { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-md-2 > * { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-md-3 > * { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-md-4 > * { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-md-5 > * { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-md-6 > * { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-md-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-md-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-md-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-md-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-md-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-md-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-md-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-md-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-md-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-md-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-md-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-md-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-md-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-md-first { - -ms-flex-order: -1; - order: -1; - } - .order-md-last { - -ms-flex-order: 13; - order: 13; - } - .order-md-0 { - -ms-flex-order: 0; - order: 0; - } - .order-md-1 { - -ms-flex-order: 1; - order: 1; - } - .order-md-2 { - -ms-flex-order: 2; - order: 2; - } - .order-md-3 { - -ms-flex-order: 3; - order: 3; - } - .order-md-4 { - -ms-flex-order: 4; - order: 4; - } - .order-md-5 { - -ms-flex-order: 5; - order: 5; - } - .order-md-6 { - -ms-flex-order: 6; - order: 6; - } - .order-md-7 { - -ms-flex-order: 7; - order: 7; - } - .order-md-8 { - -ms-flex-order: 8; - order: 8; - } - .order-md-9 { - -ms-flex-order: 9; - order: 9; - } - .order-md-10 { - -ms-flex-order: 10; - order: 10; - } - .order-md-11 { - -ms-flex-order: 11; - order: 11; - } - .order-md-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-md-0 { - margin-left: 0; - } - .offset-md-1 { - margin-left: 8.333333%; - } - .offset-md-2 { - margin-left: 16.666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.333333%; - } - .offset-md-5 { - margin-left: 41.666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.333333%; - } - .offset-md-8 { - margin-left: 66.666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.333333%; - } - .offset-md-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 992px) { - .col-lg { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-lg-1 > * { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-lg-2 > * { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-lg-3 > * { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-lg-4 > * { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-lg-5 > * { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-lg-6 > * { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-lg-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-lg-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-lg-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-lg-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-lg-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-lg-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-lg-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-lg-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-lg-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-lg-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-lg-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-lg-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-lg-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-lg-first { - -ms-flex-order: -1; - order: -1; - } - .order-lg-last { - -ms-flex-order: 13; - order: 13; - } - .order-lg-0 { - -ms-flex-order: 0; - order: 0; - } - .order-lg-1 { - -ms-flex-order: 1; - order: 1; - } - .order-lg-2 { - -ms-flex-order: 2; - order: 2; - } - .order-lg-3 { - -ms-flex-order: 3; - order: 3; - } - .order-lg-4 { - -ms-flex-order: 4; - order: 4; - } - .order-lg-5 { - -ms-flex-order: 5; - order: 5; - } - .order-lg-6 { - -ms-flex-order: 6; - order: 6; - } - .order-lg-7 { - -ms-flex-order: 7; - order: 7; - } - .order-lg-8 { - -ms-flex-order: 8; - order: 8; - } - .order-lg-9 { - -ms-flex-order: 9; - order: 9; - } - .order-lg-10 { - -ms-flex-order: 10; - order: 10; - } - .order-lg-11 { - -ms-flex-order: 11; - order: 11; - } - .order-lg-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-lg-0 { - margin-left: 0; - } - .offset-lg-1 { - margin-left: 8.333333%; - } - .offset-lg-2 { - margin-left: 16.666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.333333%; - } - .offset-lg-5 { - margin-left: 41.666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.333333%; - } - .offset-lg-8 { - margin-left: 66.666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.333333%; - } - .offset-lg-11 { - margin-left: 91.666667%; - } -} - -@media (min-width: 1200px) { - .col-xl { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - max-width: 100%; - } - .row-cols-xl-1 > * { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .row-cols-xl-2 > * { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .row-cols-xl-3 > * { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .row-cols-xl-4 > * { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .row-cols-xl-5 > * { - -ms-flex: 0 0 20%; - flex: 0 0 20%; - max-width: 20%; - } - .row-cols-xl-6 > * { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-xl-auto { - -ms-flex: 0 0 auto; - flex: 0 0 auto; - width: auto; - max-width: 100%; - } - .col-xl-1 { - -ms-flex: 0 0 8.333333%; - flex: 0 0 8.333333%; - max-width: 8.333333%; - } - .col-xl-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667%; - } - .col-xl-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25%; - } - .col-xl-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333%; - } - .col-xl-5 { - -ms-flex: 0 0 41.666667%; - flex: 0 0 41.666667%; - max-width: 41.666667%; - } - .col-xl-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50%; - } - .col-xl-7 { - -ms-flex: 0 0 58.333333%; - flex: 0 0 58.333333%; - max-width: 58.333333%; - } - .col-xl-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667%; - } - .col-xl-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75%; - } - .col-xl-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333%; - } - .col-xl-11 { - -ms-flex: 0 0 91.666667%; - flex: 0 0 91.666667%; - max-width: 91.666667%; - } - .col-xl-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100%; - } - .order-xl-first { - -ms-flex-order: -1; - order: -1; - } - .order-xl-last { - -ms-flex-order: 13; - order: 13; - } - .order-xl-0 { - -ms-flex-order: 0; - order: 0; - } - .order-xl-1 { - -ms-flex-order: 1; - order: 1; - } - .order-xl-2 { - -ms-flex-order: 2; - order: 2; - } - .order-xl-3 { - -ms-flex-order: 3; - order: 3; - } - .order-xl-4 { - -ms-flex-order: 4; - order: 4; - } - .order-xl-5 { - -ms-flex-order: 5; - order: 5; - } - .order-xl-6 { - -ms-flex-order: 6; - order: 6; - } - .order-xl-7 { - -ms-flex-order: 7; - order: 7; - } - .order-xl-8 { - -ms-flex-order: 8; - order: 8; - } - .order-xl-9 { - -ms-flex-order: 9; - order: 9; - } - .order-xl-10 { - -ms-flex-order: 10; - order: 10; - } - .order-xl-11 { - -ms-flex-order: 11; - order: 11; - } - .order-xl-12 { - -ms-flex-order: 12; - order: 12; - } - .offset-xl-0 { - margin-left: 0; - } - .offset-xl-1 { - margin-left: 8.333333%; - } - .offset-xl-2 { - margin-left: 16.666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.333333%; - } - .offset-xl-5 { - margin-left: 41.666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.333333%; - } - .offset-xl-8 { - margin-left: 66.666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.333333%; - } - .offset-xl-11 { - margin-left: 91.666667%; - } -} - -.table { - width: 100%; - margin-bottom: 1rem; - color: #212529; -} - -.table th, -.table td { - padding: 0.75rem; - vertical-align: top; - border-top: 1px solid #dee2e6; -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #dee2e6; -} - -.table tbody + tbody { - border-top: 2px solid #dee2e6; -} - -.table-sm th, -.table-sm td { - padding: 0.3rem; -} - -.table-bordered { - border: 1px solid #dee2e6; -} - -.table-bordered th, -.table-bordered td { - border: 1px solid #dee2e6; -} - -.table-bordered thead th, -.table-bordered thead td { - border-bottom-width: 2px; -} - -.table-borderless th, -.table-borderless td, -.table-borderless thead th, -.table-borderless tbody + tbody { - border: 0; -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(0, 0, 0, 0.05); -} - -.table-hover tbody tr:hover { - color: #212529; - background-color: rgba(0, 0, 0, 0.075); -} - -.table-primary, -.table-primary > th, -.table-primary > td { - background-color: #b8daff; -} - -.table-primary th, -.table-primary td, -.table-primary thead th, -.table-primary tbody + tbody { - border-color: #7abaff; -} - -.table-hover .table-primary:hover { - background-color: #9fcdff; -} - -.table-hover .table-primary:hover > td, -.table-hover .table-primary:hover > th { - background-color: #9fcdff; -} - -.table-secondary, -.table-secondary > th, -.table-secondary > td { - background-color: #d6d8db; -} - -.table-secondary th, -.table-secondary td, -.table-secondary thead th, -.table-secondary tbody + tbody { - border-color: #b3b7bb; -} - -.table-hover .table-secondary:hover { - background-color: #c8cbcf; -} - -.table-hover .table-secondary:hover > td, -.table-hover .table-secondary:hover > th { - background-color: #c8cbcf; -} - -.table-success, -.table-success > th, -.table-success > td { - background-color: #c3e6cb; -} - -.table-success th, -.table-success td, -.table-success thead th, -.table-success tbody + tbody { - border-color: #8fd19e; -} - -.table-hover .table-success:hover { - background-color: #b1dfbb; -} - -.table-hover .table-success:hover > td, -.table-hover .table-success:hover > th { - background-color: #b1dfbb; -} - -.table-info, -.table-info > th, -.table-info > td { - background-color: #bee5eb; -} - -.table-info th, -.table-info td, -.table-info thead th, -.table-info tbody + tbody { - border-color: #86cfda; -} - -.table-hover .table-info:hover { - background-color: #abdde5; -} - -.table-hover .table-info:hover > td, -.table-hover .table-info:hover > th { - background-color: #abdde5; -} - -.table-warning, -.table-warning > th, -.table-warning > td { - background-color: #ffeeba; -} - -.table-warning th, -.table-warning td, -.table-warning thead th, -.table-warning tbody + tbody { - border-color: #ffdf7e; -} - -.table-hover .table-warning:hover { - background-color: #ffe8a1; -} - -.table-hover .table-warning:hover > td, -.table-hover .table-warning:hover > th { - background-color: #ffe8a1; -} - -.table-danger, -.table-danger > th, -.table-danger > td { - background-color: #f5c6cb; -} - -.table-danger th, -.table-danger td, -.table-danger thead th, -.table-danger tbody + tbody { - border-color: #ed969e; -} - -.table-hover .table-danger:hover { - background-color: #f1b0b7; -} - -.table-hover .table-danger:hover > td, -.table-hover .table-danger:hover > th { - background-color: #f1b0b7; -} - -.table-light, -.table-light > th, -.table-light > td { - background-color: #fdfdfe; -} - -.table-light th, -.table-light td, -.table-light thead th, -.table-light tbody + tbody { - border-color: #fbfcfc; -} - -.table-hover .table-light:hover { - background-color: #ececf6; -} - -.table-hover .table-light:hover > td, -.table-hover .table-light:hover > th { - background-color: #ececf6; -} - -.table-dark, -.table-dark > th, -.table-dark > td { - background-color: #c6c8ca; -} - -.table-dark th, -.table-dark td, -.table-dark thead th, -.table-dark tbody + tbody { - border-color: #95999c; -} - -.table-hover .table-dark:hover { - background-color: #b9bbbe; -} - -.table-hover .table-dark:hover > td, -.table-hover .table-dark:hover > th { - background-color: #b9bbbe; -} - -.table-active, -.table-active > th, -.table-active > td { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-hover .table-active:hover { - background-color: rgba(0, 0, 0, 0.075); -} - -.table-hover .table-active:hover > td, -.table-hover .table-active:hover > th { - background-color: rgba(0, 0, 0, 0.075); -} - -.table .thead-dark th { - color: #fff; - background-color: #343a40; - border-color: #454d55; -} - -.table .thead-light th { - color: #495057; - background-color: #e9ecef; - border-color: #dee2e6; -} - -.table-dark { - color: #fff; - background-color: #343a40; -} - -.table-dark th, -.table-dark td, -.table-dark thead th { - border-color: #454d55; -} - -.table-dark.table-bordered { - border: 0; -} - -.table-dark.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(255, 255, 255, 0.05); -} - -.table-dark.table-hover tbody tr:hover { - color: #fff; - background-color: rgba(255, 255, 255, 0.075); -} - -@media (max-width: 575.98px) { - .table-responsive-sm { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - .table-responsive-sm > .table-bordered { - border: 0; - } -} - -@media (max-width: 767.98px) { - .table-responsive-md { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - .table-responsive-md > .table-bordered { - border: 0; - } -} - -@media (max-width: 991.98px) { - .table-responsive-lg { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - .table-responsive-lg > .table-bordered { - border: 0; - } -} - -@media (max-width: 1199.98px) { - .table-responsive-xl { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } - .table-responsive-xl > .table-bordered { - border: 0; - } -} - -.table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; -} - -.table-responsive > .table-bordered { - border: 0; -} - -.form-control { - display: block; - width: 100%; - height: calc(1.5em + 0.75rem + 2px); - padding: 0.375rem 0.75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ced4da; - border-radius: 0.25rem; - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .form-control { - transition: none; - } -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0; -} - -.form-control:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 #495057; -} - -.form-control:focus { - color: #495057; - background-color: #fff; - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.form-control::-webkit-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::-moz-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control:-ms-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::-ms-input-placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control::placeholder { - color: #6c757d; - opacity: 1; -} - -.form-control:disabled, .form-control[readonly] { - background-color: #e9ecef; - opacity: 1; -} - -input[type="date"].form-control, -input[type="time"].form-control, -input[type="datetime-local"].form-control, -input[type="month"].form-control { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -select.form-control:focus::-ms-value { - color: #495057; - background-color: #fff; -} - -.form-control-file, -.form-control-range { - display: block; - width: 100%; -} - -.col-form-label { - padding-top: calc(0.375rem + 1px); - padding-bottom: calc(0.375rem + 1px); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5; -} - -.col-form-label-lg { - padding-top: calc(0.5rem + 1px); - padding-bottom: calc(0.5rem + 1px); - font-size: 1.25rem; - line-height: 1.5; -} - -.col-form-label-sm { - padding-top: calc(0.25rem + 1px); - padding-bottom: calc(0.25rem + 1px); - font-size: 0.875rem; - line-height: 1.5; -} - -.form-control-plaintext { - display: block; - width: 100%; - padding: 0.375rem 0; - margin-bottom: 0; - font-size: 1rem; - line-height: 1.5; - color: #212529; - background-color: transparent; - border: solid transparent; - border-width: 1px 0; -} - -.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { - padding-right: 0; - padding-left: 0; -} - -.form-control-sm { - height: calc(1.5em + 0.5rem + 2px); - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.form-control-lg { - height: calc(1.5em + 1rem + 2px); - padding: 0.5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -select.form-control[size], select.form-control[multiple] { - height: auto; -} - -textarea.form-control { - height: auto; -} - -.form-group { - margin-bottom: 1rem; -} - -.form-text { - display: block; - margin-top: 0.25rem; -} - -.form-row { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px; -} - -.form-row > .col, -.form-row > [class*="col-"] { - padding-right: 5px; - padding-left: 5px; -} - -.form-check { - position: relative; - display: block; - padding-left: 1.25rem; -} - -.form-check-input { - position: absolute; - margin-top: 0.3rem; - margin-left: -1.25rem; -} - -.form-check-input[disabled] ~ .form-check-label, -.form-check-input:disabled ~ .form-check-label { - color: #6c757d; -} - -.form-check-label { - margin-bottom: 0; -} - -.form-check-inline { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - padding-left: 0; - margin-right: 0.75rem; -} - -.form-check-inline .form-check-input { - position: static; - margin-top: 0; - margin-right: 0.3125rem; - margin-left: 0; -} - -.valid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 80%; - color: #28a745; -} - -.valid-tooltip { - position: absolute; - top: 100%; - left: 0; - z-index: 5; - display: none; - max-width: 100%; - padding: 0.25rem 0.5rem; - margin-top: .1rem; - font-size: 0.875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(40, 167, 69, 0.9); - border-radius: 0.25rem; -} - -.was-validated :valid ~ .valid-feedback, -.was-validated :valid ~ .valid-tooltip, -.is-valid ~ .valid-feedback, -.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .form-control:valid, .form-control.is-valid { - border-color: #28a745; - padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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(0.375em + 0.1875rem) center; - background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} - -.was-validated .form-control:valid:focus, .form-control.is-valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.was-validated textarea.form-control:valid, textarea.form-control.is-valid { - padding-right: calc(1.5em + 0.75rem); - background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); -} - -.was-validated .custom-select:valid, .custom-select.is-valid { - border-color: #28a745; - padding-right: calc(0.75em + 2.3125rem); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} - -.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { - border-color: #28a745; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { - color: #28a745; -} - -.was-validated .form-check-input:valid ~ .valid-feedback, -.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, -.form-check-input.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { - color: #28a745; -} - -.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { - border-color: #28a745; -} - -.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { - border-color: #34ce57; - background-color: #34ce57; -} - -.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { - border-color: #28a745; -} - -.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { - border-color: #28a745; -} - -.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { - border-color: #28a745; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 80%; - color: #dc3545; -} - -.invalid-tooltip { - position: absolute; - top: 100%; - left: 0; - z-index: 5; - display: none; - max-width: 100%; - padding: 0.25rem 0.5rem; - margin-top: .1rem; - font-size: 0.875rem; - line-height: 1.5; - color: #fff; - background-color: rgba(220, 53, 69, 0.9); - border-radius: 0.25rem; -} - -.was-validated :invalid ~ .invalid-feedback, -.was-validated :invalid ~ .invalid-tooltip, -.is-invalid ~ .invalid-feedback, -.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .form-control:invalid, .form-control.is-invalid { - border-color: #dc3545; - padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%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(0.375em + 0.1875rem) center; - background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} - -.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { - padding-right: calc(1.5em + 0.75rem); - background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); -} - -.was-validated .custom-select:invalid, .custom-select.is-invalid { - border-color: #dc3545; - padding-right: calc(0.75em + 2.3125rem); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%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") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} - -.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { - color: #dc3545; -} - -.was-validated .form-check-input:invalid ~ .invalid-feedback, -.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, -.form-check-input.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { - color: #dc3545; -} - -.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { - border-color: #dc3545; -} - -.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { - border-color: #e4606d; - background-color: #e4606d; -} - -.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { - border-color: #dc3545; -} - -.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { - border-color: #dc3545; -} - -.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { - border-color: #dc3545; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); -} - -.form-inline { - display: -ms-flexbox; - display: flex; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - -ms-flex-align: center; - align-items: center; -} - -.form-inline .form-check { - width: 100%; -} - -@media (min-width: 576px) { - .form-inline label { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - margin-bottom: 0; - } - .form-inline .form-group { - display: -ms-flexbox; - display: flex; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - -ms-flex-align: center; - align-items: center; - margin-bottom: 0; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-plaintext { - display: inline-block; - } - .form-inline .input-group, - .form-inline .custom-select { - width: auto; - } - .form-inline .form-check { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - width: auto; - padding-left: 0; - } - .form-inline .form-check-input { - position: relative; - -ms-flex-negative: 0; - flex-shrink: 0; - margin-top: 0; - margin-right: 0.25rem; - margin-left: 0; - } - .form-inline .custom-control { - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - } - .form-inline .custom-control-label { - margin-bottom: 0; - } -} - -.btn { - display: inline-block; - font-weight: 400; - color: #212529; - text-align: center; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: 0.375rem 0.75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .btn { - transition: none; - } -} - -.btn:hover { - color: #212529; - text-decoration: none; -} - -.btn:focus, .btn.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.btn.disabled, .btn:disabled { - opacity: 0.65; -} - -.btn:not(:disabled):not(.disabled) { - cursor: pointer; -} - -a.btn.disabled, -fieldset:disabled a.btn { - pointer-events: none; -} - -.btn-primary { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-primary:hover { - color: #fff; - background-color: #0069d9; - border-color: #0062cc; -} - -.btn-primary:focus, .btn-primary.focus { - color: #fff; - background-color: #0069d9; - border-color: #0062cc; - box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); -} - -.btn-primary.disabled, .btn-primary:disabled { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, -.show > .btn-primary.dropdown-toggle { - color: #fff; - background-color: #0062cc; - border-color: #005cbf; -} - -.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, -.show > .btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); -} - -.btn-secondary { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-secondary:hover { - color: #fff; - background-color: #5a6268; - border-color: #545b62; -} - -.btn-secondary:focus, .btn-secondary.focus { - color: #fff; - background-color: #5a6268; - border-color: #545b62; - box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); -} - -.btn-secondary.disabled, .btn-secondary:disabled { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, -.show > .btn-secondary.dropdown-toggle { - color: #fff; - background-color: #545b62; - border-color: #4e555b; -} - -.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, -.show > .btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); -} - -.btn-success { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-success:hover { - color: #fff; - background-color: #218838; - border-color: #1e7e34; -} - -.btn-success:focus, .btn-success.focus { - color: #fff; - background-color: #218838; - border-color: #1e7e34; - box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); -} - -.btn-success.disabled, .btn-success:disabled { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, -.show > .btn-success.dropdown-toggle { - color: #fff; - background-color: #1e7e34; - border-color: #1c7430; -} - -.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, -.show > .btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); -} - -.btn-info { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-info:hover { - color: #fff; - background-color: #138496; - border-color: #117a8b; -} - -.btn-info:focus, .btn-info.focus { - color: #fff; - background-color: #138496; - border-color: #117a8b; - box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); -} - -.btn-info.disabled, .btn-info:disabled { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, -.show > .btn-info.dropdown-toggle { - color: #fff; - background-color: #117a8b; - border-color: #10707f; -} - -.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, -.show > .btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); -} - -.btn-warning { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-warning:hover { - color: #212529; - background-color: #e0a800; - border-color: #d39e00; -} - -.btn-warning:focus, .btn-warning.focus { - color: #212529; - background-color: #e0a800; - border-color: #d39e00; - box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); -} - -.btn-warning.disabled, .btn-warning:disabled { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, -.show > .btn-warning.dropdown-toggle { - color: #212529; - background-color: #d39e00; - border-color: #c69500; -} - -.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, -.show > .btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); -} - -.btn-danger { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-danger:hover { - color: #fff; - background-color: #c82333; - border-color: #bd2130; -} - -.btn-danger:focus, .btn-danger.focus { - color: #fff; - background-color: #c82333; - border-color: #bd2130; - box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); -} - -.btn-danger.disabled, .btn-danger:disabled { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, -.show > .btn-danger.dropdown-toggle { - color: #fff; - background-color: #bd2130; - border-color: #b21f2d; -} - -.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, -.show > .btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); -} - -.btn-light { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-light:hover { - color: #212529; - background-color: #e2e6ea; - border-color: #dae0e5; -} - -.btn-light:focus, .btn-light.focus { - color: #212529; - background-color: #e2e6ea; - border-color: #dae0e5; - box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); -} - -.btn-light.disabled, .btn-light:disabled { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, -.show > .btn-light.dropdown-toggle { - color: #212529; - background-color: #dae0e5; - border-color: #d3d9df; -} - -.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, -.show > .btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); -} - -.btn-dark { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-dark:hover { - color: #fff; - background-color: #23272b; - border-color: #1d2124; -} - -.btn-dark:focus, .btn-dark.focus { - color: #fff; - background-color: #23272b; - border-color: #1d2124; - box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); -} - -.btn-dark.disabled, .btn-dark:disabled { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, -.show > .btn-dark.dropdown-toggle { - color: #fff; - background-color: #1d2124; - border-color: #171a1d; -} - -.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, -.show > .btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); -} - -.btn-outline-primary { - color: #007bff; - border-color: #007bff; -} - -.btn-outline-primary:hover { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-outline-primary:focus, .btn-outline-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-outline-primary.disabled, .btn-outline-primary:disabled { - color: #007bff; - background-color: transparent; -} - -.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, -.show > .btn-outline-primary.dropdown-toggle { - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.btn-outline-secondary { - color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:hover { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:focus, .btn-outline-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { - color: #6c757d; - background-color: transparent; -} - -.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, -.show > .btn-outline-secondary.dropdown-toggle { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.btn-outline-success { - color: #28a745; - border-color: #28a745; -} - -.btn-outline-success:hover { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-outline-success:focus, .btn-outline-success.focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-outline-success.disabled, .btn-outline-success:disabled { - color: #28a745; - background-color: transparent; -} - -.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, -.show > .btn-outline-success.dropdown-toggle { - color: #fff; - background-color: #28a745; - border-color: #28a745; -} - -.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.btn-outline-info { - color: #17a2b8; - border-color: #17a2b8; -} - -.btn-outline-info:hover { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-outline-info:focus, .btn-outline-info.focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-outline-info.disabled, .btn-outline-info:disabled { - color: #17a2b8; - background-color: transparent; -} - -.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, -.show > .btn-outline-info.dropdown-toggle { - color: #fff; - background-color: #17a2b8; - border-color: #17a2b8; -} - -.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.btn-outline-warning { - color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:hover { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:focus, .btn-outline-warning.focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-outline-warning.disabled, .btn-outline-warning:disabled { - color: #ffc107; - background-color: transparent; -} - -.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, -.show > .btn-outline-warning.dropdown-toggle { - color: #212529; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.btn-outline-danger { - color: #dc3545; - border-color: #dc3545; -} - -.btn-outline-danger:hover { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-outline-danger:focus, .btn-outline-danger.focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-outline-danger.disabled, .btn-outline-danger:disabled { - color: #dc3545; - background-color: transparent; -} - -.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, -.show > .btn-outline-danger.dropdown-toggle { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.btn-outline-light { - color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:hover { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:focus, .btn-outline-light.focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-outline-light.disabled, .btn-outline-light:disabled { - color: #f8f9fa; - background-color: transparent; -} - -.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, -.show > .btn-outline-light.dropdown-toggle { - color: #212529; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.btn-outline-dark { - color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:hover { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:focus, .btn-outline-dark.focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-outline-dark.disabled, .btn-outline-dark:disabled { - color: #343a40; - background-color: transparent; -} - -.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, -.show > .btn-outline-dark.dropdown-toggle { - color: #fff; - background-color: #343a40; - border-color: #343a40; -} - -.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, -.show > .btn-outline-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.btn-link { - font-weight: 400; - color: #007bff; - text-decoration: none; -} - -.btn-link:hover { - color: #0056b3; - text-decoration: underline; -} - -.btn-link:focus, .btn-link.focus { - text-decoration: underline; -} - -.btn-link:disabled, .btn-link.disabled { - color: #6c757d; - pointer-events: none; -} - -.btn-lg, .btn-group-lg > .btn { - padding: 0.5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -.btn-sm, .btn-group-sm > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.btn-block { - display: block; - width: 100%; -} - -.btn-block + .btn-block { - margin-top: 0.5rem; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.fade { - transition: opacity 0.15s linear; -} - -@media (prefers-reduced-motion: reduce) { - .fade { - transition: none; - } -} - -.fade:not(.show) { - opacity: 0; -} - -.collapse:not(.show) { - display: none; -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - transition: height 0.35s ease; -} - -@media (prefers-reduced-motion: reduce) { - .collapsing { - transition: none; - } -} - -.dropup, -.dropright, -.dropdown, -.dropleft { - position: relative; -} - -.dropdown-toggle { - white-space: nowrap; -} - -.dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; -} - -.dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 10rem; - padding: 0.5rem 0; - margin: 0.125rem 0 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, 0.15); - border-radius: 0.25rem; -} - -.dropdown-menu-left { - right: auto; - left: 0; -} - -.dropdown-menu-right { - right: 0; - left: auto; -} - -@media (min-width: 576px) { - .dropdown-menu-sm-left { - right: auto; - left: 0; - } - .dropdown-menu-sm-right { - right: 0; - left: auto; - } -} - -@media (min-width: 768px) { - .dropdown-menu-md-left { - right: auto; - left: 0; - } - .dropdown-menu-md-right { - right: 0; - left: auto; - } -} - -@media (min-width: 992px) { - .dropdown-menu-lg-left { - right: auto; - left: 0; - } - .dropdown-menu-lg-right { - right: 0; - left: auto; - } -} - -@media (min-width: 1200px) { - .dropdown-menu-xl-left { - right: auto; - left: 0; - } - .dropdown-menu-xl-right { - right: 0; - left: auto; - } -} - -.dropup .dropdown-menu { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: 0.125rem; -} - -.dropup .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0; - border-right: 0.3em solid transparent; - border-bottom: 0.3em solid; - border-left: 0.3em solid transparent; -} - -.dropup .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropright .dropdown-menu { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: 0.125rem; -} - -.dropright .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0; - border-bottom: 0.3em solid transparent; - border-left: 0.3em solid; -} - -.dropright .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropright .dropdown-toggle::after { - vertical-align: 0; -} - -.dropleft .dropdown-menu { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: 0.125rem; -} - -.dropleft .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; -} - -.dropleft .dropdown-toggle::after { - display: none; -} - -.dropleft .dropdown-toggle::before { - display: inline-block; - margin-right: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0.3em solid; - border-bottom: 0.3em solid transparent; -} - -.dropleft .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropleft .dropdown-toggle::before { - vertical-align: 0; -} - -.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { - right: auto; - bottom: auto; -} - -.dropdown-divider { - height: 0; - margin: 0.5rem 0; - overflow: hidden; - border-top: 1px solid #e9ecef; -} - -.dropdown-item { - display: block; - width: 100%; - padding: 0.25rem 1.5rem; - clear: both; - font-weight: 400; - color: #212529; - text-align: inherit; - white-space: nowrap; - background-color: transparent; - border: 0; -} - -.dropdown-item:hover, .dropdown-item:focus { - color: #16181b; - text-decoration: none; - background-color: #f8f9fa; -} - -.dropdown-item.active, .dropdown-item:active { - color: #fff; - text-decoration: none; - background-color: #007bff; -} - -.dropdown-item.disabled, .dropdown-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: transparent; -} - -.dropdown-menu.show { - display: block; -} - -.dropdown-header { - display: block; - padding: 0.5rem 1.5rem; - margin-bottom: 0; - font-size: 0.875rem; - color: #6c757d; - white-space: nowrap; -} - -.dropdown-item-text { - display: block; - padding: 0.25rem 1.5rem; - color: #212529; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: -ms-inline-flexbox; - display: inline-flex; - vertical-align: middle; -} - -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - -ms-flex: 1 1 auto; - flex: 1 1 auto; -} - -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover { - z-index: 1; -} - -.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, -.btn-group-vertical > .btn:focus, -.btn-group-vertical > .btn:active, -.btn-group-vertical > .btn.active { - z-index: 1; -} - -.btn-toolbar { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-pack: start; - justify-content: flex-start; -} - -.btn-toolbar .input-group { - width: auto; -} - -.btn-group > .btn:not(:first-child), -.btn-group > .btn-group:not(:first-child) { - margin-left: -1px; -} - -.btn-group > .btn:not(:last-child):not(.dropdown-toggle), -.btn-group > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.btn-group > .btn:not(:first-child), -.btn-group > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.dropdown-toggle-split { - padding-right: 0.5625rem; - padding-left: 0.5625rem; -} - -.dropdown-toggle-split::after, -.dropup .dropdown-toggle-split::after, -.dropright .dropdown-toggle-split::after { - margin-left: 0; -} - -.dropleft .dropdown-toggle-split::before { - margin-right: 0; -} - -.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { - padding-right: 0.375rem; - padding-left: 0.375rem; -} - -.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { - padding-right: 0.75rem; - padding-left: 0.75rem; -} - -.btn-group-vertical { - -ms-flex-direction: column; - flex-direction: column; - -ms-flex-align: start; - align-items: flex-start; - -ms-flex-pack: center; - justify-content: center; -} - -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group { - width: 100%; -} - -.btn-group-vertical > .btn:not(:first-child), -.btn-group-vertical > .btn-group:not(:first-child) { - margin-top: -1px; -} - -.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), -.btn-group-vertical > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.btn-group-vertical > .btn:not(:first-child), -.btn-group-vertical > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.btn-group-toggle > .btn, -.btn-group-toggle > .btn-group > .btn { - margin-bottom: 0; -} - -.btn-group-toggle > .btn input[type="radio"], -.btn-group-toggle > .btn input[type="checkbox"], -.btn-group-toggle > .btn-group > .btn input[type="radio"], -.btn-group-toggle > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} - -.input-group { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: stretch; - align-items: stretch; - width: 100%; -} - -.input-group > .form-control, -.input-group > .form-control-plaintext, -.input-group > .custom-select, -.input-group > .custom-file { - position: relative; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - width: 1%; - min-width: 0; - margin-bottom: 0; -} - -.input-group > .form-control + .form-control, -.input-group > .form-control + .custom-select, -.input-group > .form-control + .custom-file, -.input-group > .form-control-plaintext + .form-control, -.input-group > .form-control-plaintext + .custom-select, -.input-group > .form-control-plaintext + .custom-file, -.input-group > .custom-select + .form-control, -.input-group > .custom-select + .custom-select, -.input-group > .custom-select + .custom-file, -.input-group > .custom-file + .form-control, -.input-group > .custom-file + .custom-select, -.input-group > .custom-file + .custom-file { - margin-left: -1px; -} - -.input-group > .form-control:focus, -.input-group > .custom-select:focus, -.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { - z-index: 3; -} - -.input-group > .custom-file .custom-file-input:focus { - z-index: 4; -} - -.input-group > .form-control:not(:last-child), -.input-group > .custom-select:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .form-control:not(:first-child), -.input-group > .custom-select:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.input-group > .custom-file { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; -} - -.input-group > .custom-file:not(:last-child) .custom-file-label, -.input-group > .custom-file:not(:last-child) .custom-file-label::after { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .custom-file:not(:first-child) .custom-file-label { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.input-group-prepend, -.input-group-append { - display: -ms-flexbox; - display: flex; -} - -.input-group-prepend .btn, -.input-group-append .btn { - position: relative; - z-index: 2; -} - -.input-group-prepend .btn:focus, -.input-group-append .btn:focus { - z-index: 3; -} - -.input-group-prepend .btn + .btn, -.input-group-prepend .btn + .input-group-text, -.input-group-prepend .input-group-text + .input-group-text, -.input-group-prepend .input-group-text + .btn, -.input-group-append .btn + .btn, -.input-group-append .btn + .input-group-text, -.input-group-append .input-group-text + .input-group-text, -.input-group-append .input-group-text + .btn { - margin-left: -1px; -} - -.input-group-prepend { - margin-right: -1px; -} - -.input-group-append { - margin-left: -1px; -} - -.input-group-text { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - padding: 0.375rem 0.75rem; - margin-bottom: 0; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} - -.input-group-text input[type="radio"], -.input-group-text input[type="checkbox"] { - margin-top: 0; -} - -.input-group-lg > .form-control:not(textarea), -.input-group-lg > .custom-select { - height: calc(1.5em + 1rem + 2px); -} - -.input-group-lg > .form-control, -.input-group-lg > .custom-select, -.input-group-lg > .input-group-prepend > .input-group-text, -.input-group-lg > .input-group-append > .input-group-text, -.input-group-lg > .input-group-prepend > .btn, -.input-group-lg > .input-group-append > .btn { - padding: 0.5rem 1rem; - font-size: 1.25rem; - line-height: 1.5; - border-radius: 0.3rem; -} - -.input-group-sm > .form-control:not(textarea), -.input-group-sm > .custom-select { - height: calc(1.5em + 0.5rem + 2px); -} - -.input-group-sm > .form-control, -.input-group-sm > .custom-select, -.input-group-sm > .input-group-prepend > .input-group-text, -.input-group-sm > .input-group-append > .input-group-text, -.input-group-sm > .input-group-prepend > .btn, -.input-group-sm > .input-group-append > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; - border-radius: 0.2rem; -} - -.input-group-lg > .custom-select, -.input-group-sm > .custom-select { - padding-right: 1.75rem; -} - -.input-group > .input-group-prepend > .btn, -.input-group > .input-group-prepend > .input-group-text, -.input-group > .input-group-append:not(:last-child) > .btn, -.input-group > .input-group-append:not(:last-child) > .input-group-text, -.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group > .input-group-append > .btn, -.input-group > .input-group-append > .input-group-text, -.input-group > .input-group-prepend:not(:first-child) > .btn, -.input-group > .input-group-prepend:not(:first-child) > .input-group-text, -.input-group > .input-group-prepend:first-child > .btn:not(:first-child), -.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.custom-control { - position: relative; - z-index: 1; - display: block; - min-height: 1.5rem; - padding-left: 1.5rem; -} - -.custom-control-inline { - display: -ms-inline-flexbox; - display: inline-flex; - margin-right: 1rem; -} - -.custom-control-input { - position: absolute; - left: 0; - z-index: -1; - width: 1rem; - height: 1.25rem; - opacity: 0; -} - -.custom-control-input:checked ~ .custom-control-label::before { - color: #fff; - border-color: #007bff; - background-color: #007bff; -} - -.custom-control-input:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-control-input:focus:not(:checked) ~ .custom-control-label::before { - border-color: #80bdff; -} - -.custom-control-input:not(:disabled):active ~ .custom-control-label::before { - color: #fff; - background-color: #b3d7ff; - border-color: #b3d7ff; -} - -.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label { - color: #6c757d; -} - -.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before { - background-color: #e9ecef; -} - -.custom-control-label { - position: relative; - margin-bottom: 0; - vertical-align: top; -} - -.custom-control-label::before { - position: absolute; - top: 0.25rem; - left: -1.5rem; - display: block; - width: 1rem; - height: 1rem; - pointer-events: none; - content: ""; - background-color: #fff; - border: #adb5bd solid 1px; -} - -.custom-control-label::after { - position: absolute; - top: 0.25rem; - left: -1.5rem; - display: block; - width: 1rem; - height: 1rem; - content: ""; - background: no-repeat 50% / 50% 50%; -} - -.custom-checkbox .custom-control-label::before { - border-radius: 0.25rem; -} - -.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); -} - -.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { - border-color: #007bff; - background-color: #007bff; -} - -.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); -} - -.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-radio .custom-control-label::before { - border-radius: 50%; -} - -.custom-radio .custom-control-input:checked ~ .custom-control-label::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); -} - -.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-switch { - padding-left: 2.25rem; -} - -.custom-switch .custom-control-label::before { - left: -2.25rem; - width: 1.75rem; - pointer-events: all; - border-radius: 0.5rem; -} - -.custom-switch .custom-control-label::after { - top: calc(0.25rem + 2px); - left: calc(-2.25rem + 2px); - width: calc(1rem - 4px); - height: calc(1rem - 4px); - background-color: #adb5bd; - border-radius: 0.5rem; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; - transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .custom-switch .custom-control-label::after { - transition: none; - } -} - -.custom-switch .custom-control-input:checked ~ .custom-control-label::after { - background-color: #fff; - -webkit-transform: translateX(0.75rem); - transform: translateX(0.75rem); -} - -.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { - background-color: rgba(0, 123, 255, 0.5); -} - -.custom-select { - display: inline-block; - width: 100%; - height: calc(1.5em + 0.75rem + 2px); - padding: 0.375rem 1.75rem 0.375rem 0.75rem; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - vertical-align: middle; - background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; - border: 1px solid #ced4da; - border-radius: 0.25rem; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.custom-select:focus { - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-select:focus::-ms-value { - color: #495057; - background-color: #fff; -} - -.custom-select[multiple], .custom-select[size]:not([size="1"]) { - height: auto; - padding-right: 0.75rem; - background-image: none; -} - -.custom-select:disabled { - color: #6c757d; - background-color: #e9ecef; -} - -.custom-select::-ms-expand { - display: none; -} - -.custom-select:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 #495057; -} - -.custom-select-sm { - height: calc(1.5em + 0.5rem + 2px); - padding-top: 0.25rem; - padding-bottom: 0.25rem; - padding-left: 0.5rem; - font-size: 0.875rem; -} - -.custom-select-lg { - height: calc(1.5em + 1rem + 2px); - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - font-size: 1.25rem; -} - -.custom-file { - position: relative; - display: inline-block; - width: 100%; - height: calc(1.5em + 0.75rem + 2px); - margin-bottom: 0; -} - -.custom-file-input { - position: relative; - z-index: 2; - width: 100%; - height: calc(1.5em + 0.75rem + 2px); - margin: 0; - opacity: 0; -} - -.custom-file-input:focus ~ .custom-file-label { - border-color: #80bdff; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-file-input[disabled] ~ .custom-file-label, -.custom-file-input:disabled ~ .custom-file-label { - background-color: #e9ecef; -} - -.custom-file-input:lang(en) ~ .custom-file-label::after { - content: "Browse"; -} - -.custom-file-input ~ .custom-file-label[data-browse]::after { - content: attr(data-browse); -} - -.custom-file-label { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 1; - height: calc(1.5em + 0.75rem + 2px); - padding: 0.375rem 0.75rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - background-color: #fff; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} - -.custom-file-label::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - z-index: 3; - display: block; - height: calc(1.5em + 0.75rem); - padding: 0.375rem 0.75rem; - line-height: 1.5; - color: #495057; - content: "Browse"; - background-color: #e9ecef; - border-left: inherit; - border-radius: 0 0.25rem 0.25rem 0; -} - -.custom-range { - width: 100%; - height: 1.4rem; - padding: 0; - background-color: transparent; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.custom-range:focus { - outline: none; -} - -.custom-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range:focus::-ms-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.custom-range::-moz-focus-outer { - border: 0; -} - -.custom-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -0.25rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - -webkit-appearance: none; - appearance: none; -} - -@media (prefers-reduced-motion: reduce) { - .custom-range::-webkit-slider-thumb { - -webkit-transition: none; - transition: none; - } -} - -.custom-range::-webkit-slider-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-webkit-slider-runnable-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; -} - -.custom-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - -moz-appearance: none; - appearance: none; -} - -@media (prefers-reduced-motion: reduce) { - .custom-range::-moz-range-thumb { - -moz-transition: none; - transition: none; - } -} - -.custom-range::-moz-range-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-moz-range-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; -} - -.custom-range::-ms-thumb { - width: 1rem; - height: 1rem; - margin-top: 0; - margin-right: 0.2rem; - margin-left: 0.2rem; - background-color: #007bff; - border: 0; - border-radius: 1rem; - -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - appearance: none; -} - -@media (prefers-reduced-motion: reduce) { - .custom-range::-ms-thumb { - -ms-transition: none; - transition: none; - } -} - -.custom-range::-ms-thumb:active { - background-color: #b3d7ff; -} - -.custom-range::-ms-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: transparent; - border-color: transparent; - border-width: 0.5rem; -} - -.custom-range::-ms-fill-lower { - background-color: #dee2e6; - border-radius: 1rem; -} - -.custom-range::-ms-fill-upper { - margin-right: 15px; - background-color: #dee2e6; - border-radius: 1rem; -} - -.custom-range:disabled::-webkit-slider-thumb { - background-color: #adb5bd; -} - -.custom-range:disabled::-webkit-slider-runnable-track { - cursor: default; -} - -.custom-range:disabled::-moz-range-thumb { - background-color: #adb5bd; -} - -.custom-range:disabled::-moz-range-track { - cursor: default; -} - -.custom-range:disabled::-ms-thumb { - background-color: #adb5bd; -} - -.custom-control-label::before, -.custom-file-label, -.custom-select { - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .custom-control-label::before, - .custom-file-label, - .custom-select { - transition: none; - } -} - -.nav { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.nav-link { - display: block; - padding: 0.5rem 1rem; -} - -.nav-link:hover, .nav-link:focus { - text-decoration: none; -} - -.nav-link.disabled { - color: #6c757d; - pointer-events: none; - cursor: default; -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6; -} - -.nav-tabs .nav-item { - margin-bottom: -1px; -} - -.nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} - -.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { - border-color: #e9ecef #e9ecef #dee2e6; -} - -.nav-tabs .nav-link.disabled { - color: #6c757d; - background-color: transparent; - border-color: transparent; -} - -.nav-tabs .nav-link.active, -.nav-tabs .nav-item.show .nav-link { - 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 { - border-radius: 0.25rem; -} - -.nav-pills .nav-link.active, -.nav-pills .show > .nav-link { - color: #fff; - background-color: #007bff; -} - -.nav-fill > .nav-link, -.nav-fill .nav-item { - -ms-flex: 1 1 auto; - flex: 1 1 auto; - text-align: center; -} - -.nav-justified > .nav-link, -.nav-justified .nav-item { - -ms-flex-preferred-size: 0; - flex-basis: 0; - -ms-flex-positive: 1; - flex-grow: 1; - text-align: center; -} - -.tab-content > .tab-pane { - display: none; -} - -.tab-content > .active { - display: block; -} - -.navbar { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: justify; - justify-content: space-between; - padding: 0.5rem 1rem; -} - -.navbar .container, -.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: justify; - justify-content: space-between; -} - -.navbar-brand { - display: inline-block; - padding-top: 0.3125rem; - padding-bottom: 0.3125rem; - margin-right: 1rem; - font-size: 1.25rem; - line-height: inherit; - white-space: nowrap; -} - -.navbar-brand:hover, .navbar-brand:focus { - text-decoration: none; -} - -.navbar-nav { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - 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; - float: none; -} - -.navbar-text { - display: inline-block; - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.navbar-collapse { - -ms-flex-preferred-size: 100%; - flex-basis: 100%; - -ms-flex-positive: 1; - flex-grow: 1; - -ms-flex-align: center; - align-items: center; -} - -.navbar-toggler { - padding: 0.25rem 0.75rem; - font-size: 1.25rem; - line-height: 1; - background-color: transparent; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.navbar-toggler:hover, .navbar-toggler:focus { - text-decoration: none; -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - content: ""; - background: no-repeat center center; - background-size: 100% 100%; -} - -@media (max-width: 575.98px) { - .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 576px) { - .navbar-expand-sm { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-sm .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-sm .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-sm .navbar-toggler { - display: none; - } -} - -@media (max-width: 767.98px) { - .navbar-expand-md > .container, - .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 768px) { - .navbar-expand-md { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-md .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-md .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-md > .container, - .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-md .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-md .navbar-toggler { - display: none; - } -} - -@media (max-width: 991.98px) { - .navbar-expand-lg > .container, - .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 992px) { - .navbar-expand-lg { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-lg .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-lg > .container, - .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-lg .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-lg .navbar-toggler { - display: none; - } -} - -@media (max-width: 1199.98px) { - .navbar-expand-xl > .container, - .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { - padding-right: 0; - padding-left: 0; - } -} - -@media (min-width: 1200px) { - .navbar-expand-xl { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; - } - .navbar-expand-xl .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; - } - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-xl > .container, - .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - } - .navbar-expand-xl .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; - } - .navbar-expand-xl .navbar-toggler { - display: none; - } -} - -.navbar-expand { - -ms-flex-flow: row nowrap; - flex-flow: row nowrap; - -ms-flex-pack: start; - justify-content: flex-start; -} - -.navbar-expand > .container, -.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { - padding-right: 0; - padding-left: 0; -} - -.navbar-expand .navbar-nav { - -ms-flex-direction: row; - flex-direction: row; -} - -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute; -} - -.navbar-expand .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; -} - -.navbar-expand > .container, -.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; -} - -.navbar-expand .navbar-collapse { - display: -ms-flexbox !important; - display: flex !important; - -ms-flex-preferred-size: auto; - flex-basis: auto; -} - -.navbar-expand .navbar-toggler { - display: none; -} - -.navbar-light .navbar-brand { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, 0.5); -} - -.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { - color: rgba(0, 0, 0, 0.7); -} - -.navbar-light .navbar-nav .nav-link.disabled { - color: rgba(0, 0, 0, 0.3); -} - -.navbar-light .navbar-nav .show > .nav-link, -.navbar-light .navbar-nav .active > .nav-link, -.navbar-light .navbar-nav .nav-link.show, -.navbar-light .navbar-nav .nav-link.active { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-toggler { - color: rgba(0, 0, 0, 0.5); - border-color: rgba(0, 0, 0, 0.1); -} - -.navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%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, 0.5); -} - -.navbar-light .navbar-text a { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-dark .navbar-brand { - color: #fff; -} - -.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { - color: #fff; -} - -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, 0.5); -} - -.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { - color: rgba(255, 255, 255, 0.75); -} - -.navbar-dark .navbar-nav .nav-link.disabled { - color: rgba(255, 255, 255, 0.25); -} - -.navbar-dark .navbar-nav .show > .nav-link, -.navbar-dark .navbar-nav .active > .nav-link, -.navbar-dark .navbar-nav .nav-link.show, -.navbar-dark .navbar-nav .nav-link.active { - color: #fff; -} - -.navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, 0.5); - border-color: rgba(255, 255, 255, 0.1); -} - -.navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%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, 0.5); -} - -.navbar-dark .navbar-text a { - color: #fff; -} - -.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { - color: #fff; -} - -.card { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(0, 0, 0, 0.125); - border-radius: 0.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(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); -} - -.card > .list-group:last-child { - border-bottom-width: 0; - border-bottom-right-radius: calc(0.25rem - 1px); - border-bottom-left-radius: calc(0.25rem - 1px); -} - -.card > .card-header + .list-group, -.card > .list-group + .card-footer { - border-top: 0; -} - -.card-body { - -ms-flex: 1 1 auto; - flex: 1 1 auto; - min-height: 1px; - padding: 1.25rem; -} - -.card-title { - margin-bottom: 0.75rem; -} - -.card-subtitle { - margin-top: -0.375rem; - margin-bottom: 0; -} - -.card-text:last-child { - margin-bottom: 0; -} - -.card-link:hover { - text-decoration: none; -} - -.card-link + .card-link { - margin-left: 1.25rem; -} - -.card-header { - padding: 0.75rem 1.25rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, 0.03); - border-bottom: 1px solid rgba(0, 0, 0, 0.125); -} - -.card-header:first-child { - border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; -} - -.card-footer { - padding: 0.75rem 1.25rem; - background-color: rgba(0, 0, 0, 0.03); - border-top: 1px solid rgba(0, 0, 0, 0.125); -} - -.card-footer:last-child { - border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); -} - -.card-header-tabs { - margin-right: -0.625rem; - margin-bottom: -0.75rem; - margin-left: -0.625rem; - border-bottom: 0; -} - -.card-header-pills { - margin-right: -0.625rem; - margin-left: -0.625rem; -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1.25rem; - border-radius: calc(0.25rem - 1px); -} - -.card-img, -.card-img-top, -.card-img-bottom { - -ms-flex-negative: 0; - flex-shrink: 0; - width: 100%; -} - -.card-img, -.card-img-top { - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); -} - -.card-img, -.card-img-bottom { - border-bottom-right-radius: calc(0.25rem - 1px); - border-bottom-left-radius: calc(0.25rem - 1px); -} - -.card-deck .card { - margin-bottom: 15px; -} - -@media (min-width: 576px) { - .card-deck { - display: -ms-flexbox; - display: flex; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - margin-right: -15px; - margin-left: -15px; - } - .card-deck .card { - -ms-flex: 1 0 0%; - flex: 1 0 0%; - margin-right: 15px; - margin-bottom: 0; - margin-left: 15px; - } -} - -.card-group > .card { - margin-bottom: 15px; -} - -@media (min-width: 576px) { - .card-group { - display: -ms-flexbox; - display: flex; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - } - .card-group > .card { - -ms-flex: 1 0 0%; - 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-img-top, - .card-group > .card:not(:last-child) .card-header { - border-top-right-radius: 0; - } - .card-group > .card:not(:last-child) .card-img-bottom, - .card-group > .card:not(:last-child) .card-footer { - 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-img-top, - .card-group > .card:not(:first-child) .card-header { - border-top-left-radius: 0; - } - .card-group > .card:not(:first-child) .card-img-bottom, - .card-group > .card:not(:first-child) .card-footer { - border-bottom-left-radius: 0; - } -} - -.card-columns .card { - margin-bottom: 0.75rem; -} - -@media (min-width: 576px) { - .card-columns { - -webkit-column-count: 3; - -moz-column-count: 3; - column-count: 3; - -webkit-column-gap: 1.25rem; - -moz-column-gap: 1.25rem; - column-gap: 1.25rem; - orphans: 1; - widows: 1; - } - .card-columns .card { - display: inline-block; - width: 100%; - } -} - -.accordion { - overflow-anchor: none; -} - -.accordion > .card { - overflow: hidden; -} - -.accordion > .card:not(:last-of-type) { - border-bottom: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.accordion > .card:not(:first-of-type) { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.accordion > .card > .card-header { - border-radius: 0; - margin-bottom: -1px; -} - -.breadcrumb { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - padding: 0.75rem 1rem; - margin-bottom: 1rem; - list-style: none; - background-color: #e9ecef; - border-radius: 0.25rem; -} - -.breadcrumb-item { - display: -ms-flexbox; - display: flex; -} - -.breadcrumb-item + .breadcrumb-item { - padding-left: 0.5rem; -} - -.breadcrumb-item + .breadcrumb-item::before { - display: inline-block; - padding-right: 0.5rem; - color: #6c757d; - content: "/"; -} - -.breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: underline; -} - -.breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: none; -} - -.breadcrumb-item.active { - color: #6c757d; -} - -.pagination { - display: -ms-flexbox; - display: flex; - padding-left: 0; - list-style: none; - border-radius: 0.25rem; -} - -.page-link { - position: relative; - display: block; - padding: 0.5rem 0.75rem; - margin-left: -1px; - line-height: 1.25; - color: #007bff; - background-color: #fff; - border: 1px solid #dee2e6; -} - -.page-link:hover { - z-index: 2; - color: #0056b3; - text-decoration: none; - background-color: #e9ecef; - border-color: #dee2e6; -} - -.page-link:focus { - z-index: 3; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); -} - -.page-item:first-child .page-link { - margin-left: 0; - border-top-left-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.page-item:last-child .page-link { - border-top-right-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; -} - -.page-item.active .page-link { - z-index: 3; - color: #fff; - background-color: #007bff; - border-color: #007bff; -} - -.page-item.disabled .page-link { - color: #6c757d; - pointer-events: none; - cursor: auto; - background-color: #fff; - border-color: #dee2e6; -} - -.pagination-lg .page-link { - padding: 0.75rem 1.5rem; - font-size: 1.25rem; - line-height: 1.5; -} - -.pagination-lg .page-item:first-child .page-link { - border-top-left-radius: 0.3rem; - border-bottom-left-radius: 0.3rem; -} - -.pagination-lg .page-item:last-child .page-link { - border-top-right-radius: 0.3rem; - border-bottom-right-radius: 0.3rem; -} - -.pagination-sm .page-link { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - line-height: 1.5; -} - -.pagination-sm .page-item:first-child .page-link { - border-top-left-radius: 0.2rem; - border-bottom-left-radius: 0.2rem; -} - -.pagination-sm .page-item:last-child .page-link { - border-top-right-radius: 0.2rem; - border-bottom-right-radius: 0.2rem; -} - -.badge { - display: inline-block; - padding: 0.25em 0.4em; - font-size: 75%; - font-weight: 700; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .badge { - transition: none; - } -} - -a.badge:hover, a.badge:focus { - text-decoration: none; -} - -.badge:empty { - display: none; -} - -.btn .badge { - position: relative; - top: -1px; -} - -.badge-pill { - padding-right: 0.6em; - padding-left: 0.6em; - border-radius: 10rem; -} - -.badge-primary { - color: #fff; - background-color: #007bff; -} - -a.badge-primary:hover, a.badge-primary:focus { - color: #fff; - background-color: #0062cc; -} - -a.badge-primary:focus, a.badge-primary.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); -} - -.badge-secondary { - color: #fff; - background-color: #6c757d; -} - -a.badge-secondary:hover, a.badge-secondary:focus { - color: #fff; - background-color: #545b62; -} - -a.badge-secondary:focus, a.badge-secondary.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); -} - -.badge-success { - color: #fff; - background-color: #28a745; -} - -a.badge-success:hover, a.badge-success:focus { - color: #fff; - background-color: #1e7e34; -} - -a.badge-success:focus, a.badge-success.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); -} - -.badge-info { - color: #fff; - background-color: #17a2b8; -} - -a.badge-info:hover, a.badge-info:focus { - color: #fff; - background-color: #117a8b; -} - -a.badge-info:focus, a.badge-info.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); -} - -.badge-warning { - color: #212529; - background-color: #ffc107; -} - -a.badge-warning:hover, a.badge-warning:focus { - color: #212529; - background-color: #d39e00; -} - -a.badge-warning:focus, a.badge-warning.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); -} - -.badge-danger { - color: #fff; - background-color: #dc3545; -} - -a.badge-danger:hover, a.badge-danger:focus { - color: #fff; - background-color: #bd2130; -} - -a.badge-danger:focus, a.badge-danger.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); -} - -.badge-light { - color: #212529; - background-color: #f8f9fa; -} - -a.badge-light:hover, a.badge-light:focus { - color: #212529; - background-color: #dae0e5; -} - -a.badge-light:focus, a.badge-light.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); -} - -.badge-dark { - color: #fff; - background-color: #343a40; -} - -a.badge-dark:hover, a.badge-dark:focus { - color: #fff; - background-color: #1d2124; -} - -a.badge-dark:focus, a.badge-dark.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); -} - -.jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #e9ecef; - border-radius: 0.3rem; -} - -@media (min-width: 576px) { - .jumbotron { - padding: 4rem 2rem; - } -} - -.jumbotron-fluid { - padding-right: 0; - padding-left: 0; - border-radius: 0; -} - -.alert { - position: relative; - padding: 0.75rem 1.25rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.alert-heading { - color: inherit; -} - -.alert-link { - font-weight: 700; -} - -.alert-dismissible { - padding-right: 4rem; -} - -.alert-dismissible .close { - position: absolute; - top: 0; - right: 0; - padding: 0.75rem 1.25rem; - color: inherit; -} - -.alert-primary { - color: #004085; - background-color: #cce5ff; - border-color: #b8daff; -} - -.alert-primary hr { - border-top-color: #9fcdff; -} - -.alert-primary .alert-link { - color: #002752; -} - -.alert-secondary { - color: #383d41; - background-color: #e2e3e5; - border-color: #d6d8db; -} - -.alert-secondary hr { - border-top-color: #c8cbcf; -} - -.alert-secondary .alert-link { - color: #202326; -} - -.alert-success { - color: #155724; - background-color: #d4edda; - border-color: #c3e6cb; -} - -.alert-success hr { - border-top-color: #b1dfbb; -} - -.alert-success .alert-link { - color: #0b2e13; -} - -.alert-info { - color: #0c5460; - background-color: #d1ecf1; - border-color: #bee5eb; -} - -.alert-info hr { - border-top-color: #abdde5; -} - -.alert-info .alert-link { - color: #062c33; -} - -.alert-warning { - color: #856404; - background-color: #fff3cd; - border-color: #ffeeba; -} - -.alert-warning hr { - border-top-color: #ffe8a1; -} - -.alert-warning .alert-link { - color: #533f03; -} - -.alert-danger { - color: #721c24; - background-color: #f8d7da; - border-color: #f5c6cb; -} - -.alert-danger hr { - border-top-color: #f1b0b7; -} - -.alert-danger .alert-link { - color: #491217; -} - -.alert-light { - color: #818182; - background-color: #fefefe; - border-color: #fdfdfe; -} - -.alert-light hr { - border-top-color: #ececf6; -} - -.alert-light .alert-link { - color: #686868; -} - -.alert-dark { - color: #1b1e21; - background-color: #d6d8d9; - border-color: #c6c8ca; -} - -.alert-dark hr { - border-top-color: #b9bbbe; -} - -.alert-dark .alert-link { - color: #040505; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} - -.progress { - display: -ms-flexbox; - display: flex; - height: 1rem; - overflow: hidden; - line-height: 0; - font-size: 0.75rem; - background-color: #e9ecef; - border-radius: 0.25rem; -} - -.progress-bar { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - -ms-flex-pack: center; - justify-content: center; - overflow: hidden; - color: #fff; - text-align: center; - white-space: nowrap; - background-color: #007bff; - transition: width 0.6s ease; -} - -@media (prefers-reduced-motion: reduce) { - .progress-bar { - transition: none; - } -} - -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem; -} - -.progress-bar-animated { - -webkit-animation: progress-bar-stripes 1s linear infinite; - animation: progress-bar-stripes 1s linear infinite; -} - -@media (prefers-reduced-motion: reduce) { - .progress-bar-animated { - -webkit-animation: none; - animation: none; - } -} - -.media { - display: -ms-flexbox; - display: flex; - -ms-flex-align: start; - align-items: flex-start; -} - -.media-body { - -ms-flex: 1; - flex: 1; -} - -.list-group { - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - border-radius: 0.25rem; -} - -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit; -} - -.list-group-item-action:hover, .list-group-item-action:focus { - 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: 0.75rem 1.25rem; - background-color: #fff; - border: 1px solid rgba(0, 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: #007bff; - border-color: #007bff; -} - -.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 { - -ms-flex-direction: row; - flex-direction: row; -} - -.list-group-horizontal > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; -} - -.list-group-horizontal > .list-group-item:last-child { - border-top-right-radius: 0.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 { - -ms-flex-direction: row; - flex-direction: row; - } - .list-group-horizontal-sm > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-sm > .list-group-item:last-child { - border-top-right-radius: 0.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 { - -ms-flex-direction: row; - flex-direction: row; - } - .list-group-horizontal-md > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-md > .list-group-item:last-child { - border-top-right-radius: 0.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 { - -ms-flex-direction: row; - flex-direction: row; - } - .list-group-horizontal-lg > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-lg > .list-group-item:last-child { - border-top-right-radius: 0.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 { - -ms-flex-direction: row; - flex-direction: row; - } - .list-group-horizontal-xl > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-xl > .list-group-item:last-child { - border-top-right-radius: 0.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; - } -} - -.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: #004085; - background-color: #b8daff; -} - -.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { - color: #004085; - background-color: #9fcdff; -} - -.list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #004085; - border-color: #004085; -} - -.list-group-item-secondary { - color: #383d41; - background-color: #d6d8db; -} - -.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { - color: #383d41; - background-color: #c8cbcf; -} - -.list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #383d41; - border-color: #383d41; -} - -.list-group-item-success { - color: #155724; - background-color: #c3e6cb; -} - -.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { - color: #155724; - background-color: #b1dfbb; -} - -.list-group-item-success.list-group-item-action.active { - color: #fff; - background-color: #155724; - border-color: #155724; -} - -.list-group-item-info { - color: #0c5460; - background-color: #bee5eb; -} - -.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { - color: #0c5460; - background-color: #abdde5; -} - -.list-group-item-info.list-group-item-action.active { - color: #fff; - background-color: #0c5460; - border-color: #0c5460; -} - -.list-group-item-warning { - color: #856404; - background-color: #ffeeba; -} - -.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { - color: #856404; - background-color: #ffe8a1; -} - -.list-group-item-warning.list-group-item-action.active { - color: #fff; - background-color: #856404; - border-color: #856404; -} - -.list-group-item-danger { - color: #721c24; - background-color: #f5c6cb; -} - -.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { - color: #721c24; - background-color: #f1b0b7; -} - -.list-group-item-danger.list-group-item-action.active { - color: #fff; - background-color: #721c24; - border-color: #721c24; -} - -.list-group-item-light { - color: #818182; - background-color: #fdfdfe; -} - -.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { - color: #818182; - background-color: #ececf6; -} - -.list-group-item-light.list-group-item-action.active { - color: #fff; - background-color: #818182; - border-color: #818182; -} - -.list-group-item-dark { - color: #1b1e21; - background-color: #c6c8ca; -} - -.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { - color: #1b1e21; - background-color: #b9bbbe; -} - -.list-group-item-dark.list-group-item-action.active { - color: #fff; - background-color: #1b1e21; - border-color: #1b1e21; -} - -.close { - float: right; - font-size: 1.5rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: .5; -} - -.close:hover { - color: #000; - text-decoration: none; -} - -.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { - opacity: .75; -} - -button.close { - padding: 0; - background-color: transparent; - border: 0; -} - -a.close.disabled { - pointer-events: none; -} - -.toast { - -ms-flex-preferred-size: 350px; - flex-basis: 350px; - max-width: 350px; - font-size: 0.875rem; - background-color: rgba(255, 255, 255, 0.85); - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.1); - box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); - opacity: 0; - border-radius: 0.25rem; -} - -.toast:not(:last-child) { - margin-bottom: 0.75rem; -} - -.toast.showing { - opacity: 1; -} - -.toast.show { - display: block; - opacity: 1; -} - -.toast.hide { - display: none; -} - -.toast-header { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - padding: 0.25rem 0.75rem; - color: #6c757d; - background-color: rgba(255, 255, 255, 0.85); - background-clip: padding-box; - border-bottom: 1px solid rgba(0, 0, 0, 0.05); - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); -} - -.toast-body { - padding: 0.75rem; -} - -.modal-open { - overflow: hidden; -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} - -.modal { - position: fixed; - top: 0; - left: 0; - z-index: 1050; - display: none; - width: 100%; - height: 100%; - overflow: hidden; - outline: 0; -} - -.modal-dialog { - position: relative; - width: auto; - margin: 0.5rem; - pointer-events: none; -} - -.modal.fade .modal-dialog { - transition: -webkit-transform 0.3s ease-out; - transition: transform 0.3s ease-out; - transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; - -webkit-transform: translate(0, -50px); - transform: translate(0, -50px); -} - -@media (prefers-reduced-motion: reduce) { - .modal.fade .modal-dialog { - transition: none; - } -} - -.modal.show .modal-dialog { - -webkit-transform: none; - transform: none; -} - -.modal.modal-static .modal-dialog { - -webkit-transform: scale(1.02); - transform: scale(1.02); -} - -.modal-dialog-scrollable { - display: -ms-flexbox; - display: flex; - max-height: calc(100% - 1rem); -} - -.modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 1rem); - overflow: hidden; -} - -.modal-dialog-scrollable .modal-header, -.modal-dialog-scrollable .modal-footer { - -ms-flex-negative: 0; - flex-shrink: 0; -} - -.modal-dialog-scrollable .modal-body { - overflow-y: auto; -} - -.modal-dialog-centered { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - min-height: calc(100% - 1rem); -} - -.modal-dialog-centered::before { - display: block; - height: calc(100vh - 1rem); - height: -webkit-min-content; - height: -moz-min-content; - height: min-content; - content: ""; -} - -.modal-dialog-centered.modal-dialog-scrollable { - -ms-flex-direction: column; - flex-direction: column; - -ms-flex-pack: center; - justify-content: center; - height: 100%; -} - -.modal-dialog-centered.modal-dialog-scrollable .modal-content { - max-height: none; -} - -.modal-dialog-centered.modal-dialog-scrollable::before { - content: none; -} - -.modal-content { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; - outline: 0; -} - -.modal-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1040; - width: 100vw; - height: 100vh; - background-color: #000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop.show { - opacity: 0.5; -} - -.modal-header { - display: -ms-flexbox; - display: flex; - -ms-flex-align: start; - align-items: flex-start; - -ms-flex-pack: justify; - justify-content: space-between; - padding: 1rem 1rem; - border-bottom: 1px solid #dee2e6; - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); -} - -.modal-header .close { - padding: 1rem 1rem; - margin: -1rem -1rem -1rem auto; -} - -.modal-title { - margin-bottom: 0; - line-height: 1.5; -} - -.modal-body { - position: relative; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - padding: 1rem; -} - -.modal-footer { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: end; - justify-content: flex-end; - padding: 0.75rem; - border-top: 1px solid #dee2e6; - border-bottom-right-radius: calc(0.3rem - 1px); - border-bottom-left-radius: calc(0.3rem - 1px); -} - -.modal-footer > * { - margin: 0.25rem; -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} - -@media (min-width: 576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto; - } - .modal-dialog-scrollable { - max-height: calc(100% - 3.5rem); - } - .modal-dialog-scrollable .modal-content { - max-height: calc(100vh - 3.5rem); - } - .modal-dialog-centered { - min-height: calc(100% - 3.5rem); - } - .modal-dialog-centered::before { - height: calc(100vh - 3.5rem); - height: -webkit-min-content; - height: -moz-min-content; - height: min-content; - } - .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; - } -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - 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: 0.875rem; - word-wrap: break-word; - opacity: 0; -} - -.tooltip.show { - opacity: 0.9; -} - -.tooltip .arrow { - position: absolute; - display: block; - width: 0.8rem; - height: 0.4rem; -} - -.tooltip .arrow::before { - position: absolute; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { - padding: 0.4rem 0; -} - -.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { - bottom: 0; -} - -.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { - top: 0; - border-width: 0.4rem 0.4rem 0; - border-top-color: #000; -} - -.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { - padding: 0 0.4rem; -} - -.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { - left: 0; - width: 0.4rem; - height: 0.8rem; -} - -.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { - right: 0; - border-width: 0.4rem 0.4rem 0.4rem 0; - border-right-color: #000; -} - -.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { - padding: 0.4rem 0; -} - -.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { - top: 0; -} - -.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { - bottom: 0; - border-width: 0 0.4rem 0.4rem; - border-bottom-color: #000; -} - -.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { - padding: 0 0.4rem; -} - -.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { - right: 0; - width: 0.4rem; - height: 0.8rem; -} - -.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { - left: 0; - border-width: 0.4rem 0 0.4rem 0.4rem; - border-left-color: #000; -} - -.tooltip-inner { - max-width: 200px; - padding: 0.25rem 0.5rem; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 0.25rem; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - 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: 0.875rem; - word-wrap: break-word; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; -} - -.popover .arrow { - position: absolute; - display: block; - width: 1rem; - height: 0.5rem; - margin: 0 0.3rem; -} - -.popover .arrow::before, .popover .arrow::after { - position: absolute; - display: block; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-popover-top, .bs-popover-auto[x-placement^="top"] { - margin-bottom: 0.5rem; -} - -.bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { - bottom: calc(-0.5rem - 1px); -} - -.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { - bottom: 0; - border-width: 0.5rem 0.5rem 0; - border-top-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { - bottom: 1px; - border-width: 0.5rem 0.5rem 0; - border-top-color: #fff; -} - -.bs-popover-right, .bs-popover-auto[x-placement^="right"] { - margin-left: 0.5rem; -} - -.bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { - left: calc(-0.5rem - 1px); - width: 0.5rem; - height: 1rem; - margin: 0.3rem 0; -} - -.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { - left: 0; - border-width: 0.5rem 0.5rem 0.5rem 0; - border-right-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { - left: 1px; - border-width: 0.5rem 0.5rem 0.5rem 0; - border-right-color: #fff; -} - -.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { - margin-top: 0.5rem; -} - -.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { - top: calc(-0.5rem - 1px); -} - -.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { - top: 0; - border-width: 0 0.5rem 0.5rem 0.5rem; - border-bottom-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { - top: 1px; - border-width: 0 0.5rem 0.5rem 0.5rem; - border-bottom-color: #fff; -} - -.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 1rem; - margin-left: -0.5rem; - content: ""; - border-bottom: 1px solid #f7f7f7; -} - -.bs-popover-left, .bs-popover-auto[x-placement^="left"] { - margin-right: 0.5rem; -} - -.bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { - right: calc(-0.5rem - 1px); - width: 0.5rem; - height: 1rem; - margin: 0.3rem 0; -} - -.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { - right: 0; - border-width: 0.5rem 0 0.5rem 0.5rem; - border-left-color: rgba(0, 0, 0, 0.25); -} - -.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { - right: 1px; - border-width: 0.5rem 0 0.5rem 0.5rem; - border-left-color: #fff; -} - -.popover-header { - padding: 0.5rem 0.75rem; - margin-bottom: 0; - font-size: 1rem; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); -} - -.popover-header:empty { - display: none; -} - -.popover-body { - padding: 0.5rem 0.75rem; - color: #212529; -} - -.carousel { - position: relative; -} - -.carousel.pointer-event { - -ms-touch-action: pan-y; - 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: -webkit-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-item { - transition: none; - } -} - -.carousel-item.active, -.carousel-item-next, -.carousel-item-prev { - display: block; -} - -.carousel-item-next:not(.carousel-item-left), -.active.carousel-item-right { - -webkit-transform: translateX(100%); - transform: translateX(100%); -} - -.carousel-item-prev:not(.carousel-item-right), -.active.carousel-item-left { - -webkit-transform: translateX(-100%); - transform: translateX(-100%); -} - -.carousel-fade .carousel-item { - opacity: 0; - transition-property: opacity; - -webkit-transform: none; - transform: none; -} - -.carousel-fade .carousel-item.active, -.carousel-fade .carousel-item-next.carousel-item-left, -.carousel-fade .carousel-item-prev.carousel-item-right { - z-index: 1; - opacity: 1; -} - -.carousel-fade .active.carousel-item-left, -.carousel-fade .active.carousel-item-right { - z-index: 0; - opacity: 0; - transition: opacity 0s 0.6s; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-fade .active.carousel-item-left, - .carousel-fade .active.carousel-item-right { - transition: none; - } -} - -.carousel-control-prev, -.carousel-control-next { - position: absolute; - top: 0; - bottom: 0; - z-index: 1; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - width: 15%; - color: #fff; - text-align: center; - opacity: 0.5; - transition: opacity 0.15s ease; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-control-prev, - .carousel-control-next { - transition: none; - } -} - -.carousel-control-prev:hover, .carousel-control-prev:focus, -.carousel-control-next:hover, -.carousel-control-next:focus { - color: #fff; - text-decoration: none; - outline: 0; - opacity: 0.9; -} - -.carousel-control-prev { - left: 0; -} - -.carousel-control-next { - right: 0; -} - -.carousel-control-prev-icon, -.carousel-control-next-icon { - display: inline-block; - width: 20px; - height: 20px; - background: no-repeat 50% / 100% 100%; -} - -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 15; - display: -ms-flexbox; - display: flex; - -ms-flex-pack: center; - justify-content: center; - padding-left: 0; - margin-right: 15%; - margin-left: 15%; - list-style: none; -} - -.carousel-indicators li { - box-sizing: content-box; - -ms-flex: 0 1 auto; - flex: 0 1 auto; - width: 30px; - height: 3px; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - cursor: pointer; - background-color: #fff; - background-clip: padding-box; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - opacity: .5; - transition: opacity 0.6s ease; -} - -@media (prefers-reduced-motion: reduce) { - .carousel-indicators li { - transition: none; - } -} - -.carousel-indicators .active { - opacity: 1; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; -} - -@-webkit-keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@keyframes spinner-border { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -.spinner-border { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - border: 0.25em solid currentColor; - border-right-color: transparent; - border-radius: 50%; - -webkit-animation: spinner-border .75s linear infinite; - animation: spinner-border .75s linear infinite; -} - -.spinner-border-sm { - width: 1rem; - height: 1rem; - border-width: 0.2em; -} - -@-webkit-keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0); - } - 50% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes spinner-grow { - 0% { - -webkit-transform: scale(0); - transform: scale(0); - } - 50% { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.spinner-grow { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: text-bottom; - background-color: currentColor; - border-radius: 50%; - opacity: 0; - -webkit-animation: spinner-grow .75s linear infinite; - animation: spinner-grow .75s linear infinite; -} - -.spinner-grow-sm { - width: 1rem; - height: 1rem; -} - -.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; -} - -.bg-primary { - background-color: #007bff !important; -} - -a.bg-primary:hover, a.bg-primary:focus, -button.bg-primary:hover, -button.bg-primary:focus { - background-color: #0062cc !important; -} - -.bg-secondary { - background-color: #6c757d !important; -} - -a.bg-secondary:hover, a.bg-secondary:focus, -button.bg-secondary:hover, -button.bg-secondary:focus { - background-color: #545b62 !important; -} - -.bg-success { - background-color: #28a745 !important; -} - -a.bg-success:hover, a.bg-success:focus, -button.bg-success:hover, -button.bg-success:focus { - background-color: #1e7e34 !important; -} - -.bg-info { - background-color: #17a2b8 !important; -} - -a.bg-info:hover, a.bg-info:focus, -button.bg-info:hover, -button.bg-info:focus { - background-color: #117a8b !important; -} - -.bg-warning { - background-color: #ffc107 !important; -} - -a.bg-warning:hover, a.bg-warning:focus, -button.bg-warning:hover, -button.bg-warning:focus { - background-color: #d39e00 !important; -} - -.bg-danger { - background-color: #dc3545 !important; -} - -a.bg-danger:hover, a.bg-danger:focus, -button.bg-danger:hover, -button.bg-danger:focus { - background-color: #bd2130 !important; -} - -.bg-light { - background-color: #f8f9fa !important; -} - -a.bg-light:hover, a.bg-light:focus, -button.bg-light:hover, -button.bg-light:focus { - background-color: #dae0e5 !important; -} - -.bg-dark { - background-color: #343a40 !important; -} - -a.bg-dark:hover, a.bg-dark:focus, -button.bg-dark:hover, -button.bg-dark:focus { - background-color: #1d2124 !important; -} - -.bg-white { - background-color: #fff !important; -} - -.bg-transparent { - background-color: transparent !important; -} - -.border { - border: 1px solid #dee2e6 !important; -} - -.border-top { - border-top: 1px solid #dee2e6 !important; -} - -.border-right { - border-right: 1px solid #dee2e6 !important; -} - -.border-bottom { - border-bottom: 1px solid #dee2e6 !important; -} - -.border-left { - border-left: 1px solid #dee2e6 !important; -} - -.border-0 { - border: 0 !important; -} - -.border-top-0 { - border-top: 0 !important; -} - -.border-right-0 { - border-right: 0 !important; -} - -.border-bottom-0 { - border-bottom: 0 !important; -} - -.border-left-0 { - border-left: 0 !important; -} - -.border-primary { - border-color: #007bff !important; -} - -.border-secondary { - border-color: #6c757d !important; -} - -.border-success { - border-color: #28a745 !important; -} - -.border-info { - border-color: #17a2b8 !important; -} - -.border-warning { - border-color: #ffc107 !important; -} - -.border-danger { - border-color: #dc3545 !important; -} - -.border-light { - border-color: #f8f9fa !important; -} - -.border-dark { - border-color: #343a40 !important; -} - -.border-white { - border-color: #fff !important; -} - -.rounded-sm { - border-radius: 0.2rem !important; -} - -.rounded { - border-radius: 0.25rem !important; -} - -.rounded-top { - border-top-left-radius: 0.25rem !important; - border-top-right-radius: 0.25rem !important; -} - -.rounded-right { - border-top-right-radius: 0.25rem !important; - border-bottom-right-radius: 0.25rem !important; -} - -.rounded-bottom { - border-bottom-right-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-left { - border-top-left-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-lg { - border-radius: 0.3rem !important; -} - -.rounded-circle { - border-radius: 50% !important; -} - -.rounded-pill { - border-radius: 50rem !important; -} - -.rounded-0 { - border-radius: 0 !important; -} - -.clearfix::after { - display: block; - clear: both; - content: ""; -} - -.d-none { - display: none !important; -} - -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: -ms-flexbox !important; - display: flex !important; -} - -.d-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; -} - -@media (min-width: 576px) { - .d-sm-none { - display: none !important; - } - .d-sm-inline { - display: inline !important; - } - .d-sm-inline-block { - display: inline-block !important; - } - .d-sm-block { - display: block !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: -ms-flexbox !important; - display: flex !important; - } - .d-sm-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 768px) { - .d-md-none { - display: none !important; - } - .d-md-inline { - display: inline !important; - } - .d-md-inline-block { - display: inline-block !important; - } - .d-md-block { - display: block !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: -ms-flexbox !important; - display: flex !important; - } - .d-md-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 992px) { - .d-lg-none { - display: none !important; - } - .d-lg-inline { - display: inline !important; - } - .d-lg-inline-block { - display: inline-block !important; - } - .d-lg-block { - display: block !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: -ms-flexbox !important; - display: flex !important; - } - .d-lg-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media (min-width: 1200px) { - .d-xl-none { - display: none !important; - } - .d-xl-inline { - display: inline !important; - } - .d-xl-inline-block { - display: inline-block !important; - } - .d-xl-block { - display: block !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: -ms-flexbox !important; - display: flex !important; - } - .d-xl-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -@media print { - .d-print-none { - display: none !important; - } - .d-print-inline { - display: inline !important; - } - .d-print-inline-block { - display: inline-block !important; - } - .d-print-block { - display: block !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: -ms-flexbox !important; - display: flex !important; - } - .d-print-inline-flex { - display: -ms-inline-flexbox !important; - display: inline-flex !important; - } -} - -.embed-responsive { - position: relative; - display: block; - width: 100%; - padding: 0; - overflow: hidden; -} - -.embed-responsive::before { - display: block; - content: ""; -} - -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} - -.embed-responsive-21by9::before { - padding-top: 42.857143%; -} - -.embed-responsive-16by9::before { - padding-top: 56.25%; -} - -.embed-responsive-4by3::before { - padding-top: 75%; -} - -.embed-responsive-1by1::before { - padding-top: 100%; -} - -.flex-row { - -ms-flex-direction: row !important; - flex-direction: row !important; -} - -.flex-column { - -ms-flex-direction: column !important; - flex-direction: column !important; -} - -.flex-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; -} - -.flex-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; -} - -.flex-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; -} - -.flex-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; -} - -.flex-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; -} - -.flex-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; -} - -.flex-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; -} - -.justify-content-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; -} - -.justify-content-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; -} - -.justify-content-center { - -ms-flex-pack: center !important; - justify-content: center !important; -} - -.justify-content-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; -} - -.justify-content-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; -} - -.align-items-start { - -ms-flex-align: start !important; - align-items: flex-start !important; -} - -.align-items-end { - -ms-flex-align: end !important; - align-items: flex-end !important; -} - -.align-items-center { - -ms-flex-align: center !important; - align-items: center !important; -} - -.align-items-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; -} - -.align-items-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; -} - -.align-content-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; -} - -.align-content-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; -} - -.align-content-center { - -ms-flex-line-pack: center !important; - align-content: center !important; -} - -.align-content-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; -} - -.align-content-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; -} - -.align-content-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; -} - -.align-self-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; -} - -.align-self-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; -} - -.align-self-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; -} - -.align-self-center { - -ms-flex-item-align: center !important; - align-self: center !important; -} - -.align-self-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; -} - -.align-self-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; -} - -@media (min-width: 576px) { - .flex-sm-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-sm-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-sm-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-sm-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-sm-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-sm-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-sm-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-sm-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-sm-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-sm-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-sm-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-sm-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-sm-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-sm-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-sm-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-sm-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-sm-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-sm-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-sm-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-sm-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-sm-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-sm-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-sm-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-sm-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-sm-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-sm-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-sm-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-sm-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-sm-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-sm-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-sm-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-sm-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-sm-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-sm-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 768px) { - .flex-md-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-md-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-md-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-md-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-md-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-md-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-md-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-md-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-md-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-md-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-md-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-md-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-md-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-md-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-md-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-md-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-md-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-md-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-md-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-md-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-md-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-md-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-md-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-md-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-md-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-md-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-md-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-md-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-md-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-md-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-md-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-md-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-md-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-md-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 992px) { - .flex-lg-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-lg-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-lg-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-lg-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-lg-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-lg-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-lg-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-lg-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-lg-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-lg-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-lg-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-lg-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-lg-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-lg-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-lg-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-lg-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-lg-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-lg-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-lg-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-lg-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-lg-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-lg-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-lg-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-lg-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-lg-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-lg-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-lg-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-lg-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-lg-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-lg-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-lg-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-lg-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-lg-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-lg-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -@media (min-width: 1200px) { - .flex-xl-row { - -ms-flex-direction: row !important; - flex-direction: row !important; - } - .flex-xl-column { - -ms-flex-direction: column !important; - flex-direction: column !important; - } - .flex-xl-row-reverse { - -ms-flex-direction: row-reverse !important; - flex-direction: row-reverse !important; - } - .flex-xl-column-reverse { - -ms-flex-direction: column-reverse !important; - flex-direction: column-reverse !important; - } - .flex-xl-wrap { - -ms-flex-wrap: wrap !important; - flex-wrap: wrap !important; - } - .flex-xl-nowrap { - -ms-flex-wrap: nowrap !important; - flex-wrap: nowrap !important; - } - .flex-xl-wrap-reverse { - -ms-flex-wrap: wrap-reverse !important; - flex-wrap: wrap-reverse !important; - } - .flex-xl-fill { - -ms-flex: 1 1 auto !important; - flex: 1 1 auto !important; - } - .flex-xl-grow-0 { - -ms-flex-positive: 0 !important; - flex-grow: 0 !important; - } - .flex-xl-grow-1 { - -ms-flex-positive: 1 !important; - flex-grow: 1 !important; - } - .flex-xl-shrink-0 { - -ms-flex-negative: 0 !important; - flex-shrink: 0 !important; - } - .flex-xl-shrink-1 { - -ms-flex-negative: 1 !important; - flex-shrink: 1 !important; - } - .justify-content-xl-start { - -ms-flex-pack: start !important; - justify-content: flex-start !important; - } - .justify-content-xl-end { - -ms-flex-pack: end !important; - justify-content: flex-end !important; - } - .justify-content-xl-center { - -ms-flex-pack: center !important; - justify-content: center !important; - } - .justify-content-xl-between { - -ms-flex-pack: justify !important; - justify-content: space-between !important; - } - .justify-content-xl-around { - -ms-flex-pack: distribute !important; - justify-content: space-around !important; - } - .align-items-xl-start { - -ms-flex-align: start !important; - align-items: flex-start !important; - } - .align-items-xl-end { - -ms-flex-align: end !important; - align-items: flex-end !important; - } - .align-items-xl-center { - -ms-flex-align: center !important; - align-items: center !important; - } - .align-items-xl-baseline { - -ms-flex-align: baseline !important; - align-items: baseline !important; - } - .align-items-xl-stretch { - -ms-flex-align: stretch !important; - align-items: stretch !important; - } - .align-content-xl-start { - -ms-flex-line-pack: start !important; - align-content: flex-start !important; - } - .align-content-xl-end { - -ms-flex-line-pack: end !important; - align-content: flex-end !important; - } - .align-content-xl-center { - -ms-flex-line-pack: center !important; - align-content: center !important; - } - .align-content-xl-between { - -ms-flex-line-pack: justify !important; - align-content: space-between !important; - } - .align-content-xl-around { - -ms-flex-line-pack: distribute !important; - align-content: space-around !important; - } - .align-content-xl-stretch { - -ms-flex-line-pack: stretch !important; - align-content: stretch !important; - } - .align-self-xl-auto { - -ms-flex-item-align: auto !important; - align-self: auto !important; - } - .align-self-xl-start { - -ms-flex-item-align: start !important; - align-self: flex-start !important; - } - .align-self-xl-end { - -ms-flex-item-align: end !important; - align-self: flex-end !important; - } - .align-self-xl-center { - -ms-flex-item-align: center !important; - align-self: center !important; - } - .align-self-xl-baseline { - -ms-flex-item-align: baseline !important; - align-self: baseline !important; - } - .align-self-xl-stretch { - -ms-flex-item-align: stretch !important; - align-self: stretch !important; - } -} - -.float-left { - float: left !important; -} - -.float-right { - float: right !important; -} - -.float-none { - float: none !important; -} - -@media (min-width: 576px) { - .float-sm-left { - float: left !important; - } - .float-sm-right { - float: right !important; - } - .float-sm-none { - float: none !important; - } -} - -@media (min-width: 768px) { - .float-md-left { - float: left !important; - } - .float-md-right { - float: right !important; - } - .float-md-none { - float: none !important; - } -} - -@media (min-width: 992px) { - .float-lg-left { - float: left !important; - } - .float-lg-right { - float: right !important; - } - .float-lg-none { - float: none !important; - } -} - -@media (min-width: 1200px) { - .float-xl-left { - float: left !important; - } - .float-xl-right { - float: right !important; - } - .float-xl-none { - float: none !important; - } -} - -.user-select-all { - -webkit-user-select: all !important; - -moz-user-select: all !important; - -ms-user-select: all !important; - user-select: all !important; -} - -.user-select-auto { - -webkit-user-select: auto !important; - -moz-user-select: auto !important; - -ms-user-select: auto !important; - user-select: auto !important; -} - -.user-select-none { - -webkit-user-select: none !important; - -moz-user-select: none !important; - -ms-user-select: none !important; - user-select: none !important; -} - -.overflow-auto { - overflow: auto !important; -} - -.overflow-hidden { - overflow: hidden !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; -} - -.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; -} - -@supports ((position: -webkit-sticky) or (position: sticky)) { - .sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1020; - } -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -} - -.sr-only-focusable:active, .sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - overflow: visible; - clip: auto; - white-space: normal; -} - -.shadow-sm { - box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; -} - -.shadow { - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; -} - -.shadow-lg { - box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; -} - -.shadow-none { - box-shadow: none !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; -} - -.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; -} - -.mw-100 { - max-width: 100% !important; -} - -.mh-100 { - max-height: 100% !important; -} - -.min-vw-100 { - min-width: 100vw !important; -} - -.min-vh-100 { - min-height: 100vh !important; -} - -.vw-100 { - width: 100vw !important; -} - -.vh-100 { - height: 100vh !important; -} - -.m-0 { - margin: 0 !important; -} - -.mt-0, -.my-0 { - margin-top: 0 !important; -} - -.mr-0, -.mx-0 { - margin-right: 0 !important; -} - -.mb-0, -.my-0 { - margin-bottom: 0 !important; -} - -.ml-0, -.mx-0 { - margin-left: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.mt-1, -.my-1 { - margin-top: 0.25rem !important; -} - -.mr-1, -.mx-1 { - margin-right: 0.25rem !important; -} - -.mb-1, -.my-1 { - margin-bottom: 0.25rem !important; -} - -.ml-1, -.mx-1 { - margin-left: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.mt-2, -.my-2 { - margin-top: 0.5rem !important; -} - -.mr-2, -.mx-2 { - margin-right: 0.5rem !important; -} - -.mb-2, -.my-2 { - margin-bottom: 0.5rem !important; -} - -.ml-2, -.mx-2 { - margin-left: 0.5rem !important; -} - -.m-3 { - margin: 1rem !important; -} - -.mt-3, -.my-3 { - margin-top: 1rem !important; -} - -.mr-3, -.mx-3 { - margin-right: 1rem !important; -} - -.mb-3, -.my-3 { - margin-bottom: 1rem !important; -} - -.ml-3, -.mx-3 { - margin-left: 1rem !important; -} - -.m-4 { - margin: 1.5rem !important; -} - -.mt-4, -.my-4 { - margin-top: 1.5rem !important; -} - -.mr-4, -.mx-4 { - margin-right: 1.5rem !important; -} - -.mb-4, -.my-4 { - margin-bottom: 1.5rem !important; -} - -.ml-4, -.mx-4 { - margin-left: 1.5rem !important; -} - -.m-5 { - margin: 3rem !important; -} - -.mt-5, -.my-5 { - margin-top: 3rem !important; -} - -.mr-5, -.mx-5 { - margin-right: 3rem !important; -} - -.mb-5, -.my-5 { - margin-bottom: 3rem !important; -} - -.ml-5, -.mx-5 { - margin-left: 3rem !important; -} - -.p-0 { - padding: 0 !important; -} - -.pt-0, -.py-0 { - padding-top: 0 !important; -} - -.pr-0, -.px-0 { - padding-right: 0 !important; -} - -.pb-0, -.py-0 { - padding-bottom: 0 !important; -} - -.pl-0, -.px-0 { - padding-left: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.pt-1, -.py-1 { - padding-top: 0.25rem !important; -} - -.pr-1, -.px-1 { - padding-right: 0.25rem !important; -} - -.pb-1, -.py-1 { - padding-bottom: 0.25rem !important; -} - -.pl-1, -.px-1 { - padding-left: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.pt-2, -.py-2 { - padding-top: 0.5rem !important; -} - -.pr-2, -.px-2 { - padding-right: 0.5rem !important; -} - -.pb-2, -.py-2 { - padding-bottom: 0.5rem !important; -} - -.pl-2, -.px-2 { - padding-left: 0.5rem !important; -} - -.p-3 { - padding: 1rem !important; -} - -.pt-3, -.py-3 { - padding-top: 1rem !important; -} - -.pr-3, -.px-3 { - padding-right: 1rem !important; -} - -.pb-3, -.py-3 { - padding-bottom: 1rem !important; -} - -.pl-3, -.px-3 { - padding-left: 1rem !important; -} - -.p-4 { - padding: 1.5rem !important; -} - -.pt-4, -.py-4 { - padding-top: 1.5rem !important; -} - -.pr-4, -.px-4 { - padding-right: 1.5rem !important; -} - -.pb-4, -.py-4 { - padding-bottom: 1.5rem !important; -} - -.pl-4, -.px-4 { - padding-left: 1.5rem !important; -} - -.p-5 { - padding: 3rem !important; -} - -.pt-5, -.py-5 { - padding-top: 3rem !important; -} - -.pr-5, -.px-5 { - padding-right: 3rem !important; -} - -.pb-5, -.py-5 { - padding-bottom: 3rem !important; -} - -.pl-5, -.px-5 { - padding-left: 3rem !important; -} - -.m-n1 { - margin: -0.25rem !important; -} - -.mt-n1, -.my-n1 { - margin-top: -0.25rem !important; -} - -.mr-n1, -.mx-n1 { - margin-right: -0.25rem !important; -} - -.mb-n1, -.my-n1 { - margin-bottom: -0.25rem !important; -} - -.ml-n1, -.mx-n1 { - margin-left: -0.25rem !important; -} - -.m-n2 { - margin: -0.5rem !important; -} - -.mt-n2, -.my-n2 { - margin-top: -0.5rem !important; -} - -.mr-n2, -.mx-n2 { - margin-right: -0.5rem !important; -} - -.mb-n2, -.my-n2 { - margin-bottom: -0.5rem !important; -} - -.ml-n2, -.mx-n2 { - margin-left: -0.5rem !important; -} - -.m-n3 { - margin: -1rem !important; -} - -.mt-n3, -.my-n3 { - margin-top: -1rem !important; -} - -.mr-n3, -.mx-n3 { - margin-right: -1rem !important; -} - -.mb-n3, -.my-n3 { - margin-bottom: -1rem !important; -} - -.ml-n3, -.mx-n3 { - margin-left: -1rem !important; -} - -.m-n4 { - margin: -1.5rem !important; -} - -.mt-n4, -.my-n4 { - margin-top: -1.5rem !important; -} - -.mr-n4, -.mx-n4 { - margin-right: -1.5rem !important; -} - -.mb-n4, -.my-n4 { - margin-bottom: -1.5rem !important; -} - -.ml-n4, -.mx-n4 { - margin-left: -1.5rem !important; -} - -.m-n5 { - margin: -3rem !important; -} - -.mt-n5, -.my-n5 { - margin-top: -3rem !important; -} - -.mr-n5, -.mx-n5 { - margin-right: -3rem !important; -} - -.mb-n5, -.my-n5 { - margin-bottom: -3rem !important; -} - -.ml-n5, -.mx-n5 { - margin-left: -3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mt-auto, -.my-auto { - margin-top: auto !important; -} - -.mr-auto, -.mx-auto { - margin-right: auto !important; -} - -.mb-auto, -.my-auto { - margin-bottom: auto !important; -} - -.ml-auto, -.mx-auto { - margin-left: auto !important; -} - -@media (min-width: 576px) { - .m-sm-0 { - margin: 0 !important; - } - .mt-sm-0, - .my-sm-0 { - margin-top: 0 !important; - } - .mr-sm-0, - .mx-sm-0 { - margin-right: 0 !important; - } - .mb-sm-0, - .my-sm-0 { - margin-bottom: 0 !important; - } - .ml-sm-0, - .mx-sm-0 { - margin-left: 0 !important; - } - .m-sm-1 { - margin: 0.25rem !important; - } - .mt-sm-1, - .my-sm-1 { - margin-top: 0.25rem !important; - } - .mr-sm-1, - .mx-sm-1 { - margin-right: 0.25rem !important; - } - .mb-sm-1, - .my-sm-1 { - margin-bottom: 0.25rem !important; - } - .ml-sm-1, - .mx-sm-1 { - margin-left: 0.25rem !important; - } - .m-sm-2 { - margin: 0.5rem !important; - } - .mt-sm-2, - .my-sm-2 { - margin-top: 0.5rem !important; - } - .mr-sm-2, - .mx-sm-2 { - margin-right: 0.5rem !important; - } - .mb-sm-2, - .my-sm-2 { - margin-bottom: 0.5rem !important; - } - .ml-sm-2, - .mx-sm-2 { - margin-left: 0.5rem !important; - } - .m-sm-3 { - margin: 1rem !important; - } - .mt-sm-3, - .my-sm-3 { - margin-top: 1rem !important; - } - .mr-sm-3, - .mx-sm-3 { - margin-right: 1rem !important; - } - .mb-sm-3, - .my-sm-3 { - margin-bottom: 1rem !important; - } - .ml-sm-3, - .mx-sm-3 { - margin-left: 1rem !important; - } - .m-sm-4 { - margin: 1.5rem !important; - } - .mt-sm-4, - .my-sm-4 { - margin-top: 1.5rem !important; - } - .mr-sm-4, - .mx-sm-4 { - margin-right: 1.5rem !important; - } - .mb-sm-4, - .my-sm-4 { - margin-bottom: 1.5rem !important; - } - .ml-sm-4, - .mx-sm-4 { - margin-left: 1.5rem !important; - } - .m-sm-5 { - margin: 3rem !important; - } - .mt-sm-5, - .my-sm-5 { - margin-top: 3rem !important; - } - .mr-sm-5, - .mx-sm-5 { - margin-right: 3rem !important; - } - .mb-sm-5, - .my-sm-5 { - margin-bottom: 3rem !important; - } - .ml-sm-5, - .mx-sm-5 { - margin-left: 3rem !important; - } - .p-sm-0 { - padding: 0 !important; - } - .pt-sm-0, - .py-sm-0 { - padding-top: 0 !important; - } - .pr-sm-0, - .px-sm-0 { - padding-right: 0 !important; - } - .pb-sm-0, - .py-sm-0 { - padding-bottom: 0 !important; - } - .pl-sm-0, - .px-sm-0 { - padding-left: 0 !important; - } - .p-sm-1 { - padding: 0.25rem !important; - } - .pt-sm-1, - .py-sm-1 { - padding-top: 0.25rem !important; - } - .pr-sm-1, - .px-sm-1 { - padding-right: 0.25rem !important; - } - .pb-sm-1, - .py-sm-1 { - padding-bottom: 0.25rem !important; - } - .pl-sm-1, - .px-sm-1 { - padding-left: 0.25rem !important; - } - .p-sm-2 { - padding: 0.5rem !important; - } - .pt-sm-2, - .py-sm-2 { - padding-top: 0.5rem !important; - } - .pr-sm-2, - .px-sm-2 { - padding-right: 0.5rem !important; - } - .pb-sm-2, - .py-sm-2 { - padding-bottom: 0.5rem !important; - } - .pl-sm-2, - .px-sm-2 { - padding-left: 0.5rem !important; - } - .p-sm-3 { - padding: 1rem !important; - } - .pt-sm-3, - .py-sm-3 { - padding-top: 1rem !important; - } - .pr-sm-3, - .px-sm-3 { - padding-right: 1rem !important; - } - .pb-sm-3, - .py-sm-3 { - padding-bottom: 1rem !important; - } - .pl-sm-3, - .px-sm-3 { - padding-left: 1rem !important; - } - .p-sm-4 { - padding: 1.5rem !important; - } - .pt-sm-4, - .py-sm-4 { - padding-top: 1.5rem !important; - } - .pr-sm-4, - .px-sm-4 { - padding-right: 1.5rem !important; - } - .pb-sm-4, - .py-sm-4 { - padding-bottom: 1.5rem !important; - } - .pl-sm-4, - .px-sm-4 { - padding-left: 1.5rem !important; - } - .p-sm-5 { - padding: 3rem !important; - } - .pt-sm-5, - .py-sm-5 { - padding-top: 3rem !important; - } - .pr-sm-5, - .px-sm-5 { - padding-right: 3rem !important; - } - .pb-sm-5, - .py-sm-5 { - padding-bottom: 3rem !important; - } - .pl-sm-5, - .px-sm-5 { - padding-left: 3rem !important; - } - .m-sm-n1 { - margin: -0.25rem !important; - } - .mt-sm-n1, - .my-sm-n1 { - margin-top: -0.25rem !important; - } - .mr-sm-n1, - .mx-sm-n1 { - margin-right: -0.25rem !important; - } - .mb-sm-n1, - .my-sm-n1 { - margin-bottom: -0.25rem !important; - } - .ml-sm-n1, - .mx-sm-n1 { - margin-left: -0.25rem !important; - } - .m-sm-n2 { - margin: -0.5rem !important; - } - .mt-sm-n2, - .my-sm-n2 { - margin-top: -0.5rem !important; - } - .mr-sm-n2, - .mx-sm-n2 { - margin-right: -0.5rem !important; - } - .mb-sm-n2, - .my-sm-n2 { - margin-bottom: -0.5rem !important; - } - .ml-sm-n2, - .mx-sm-n2 { - margin-left: -0.5rem !important; - } - .m-sm-n3 { - margin: -1rem !important; - } - .mt-sm-n3, - .my-sm-n3 { - margin-top: -1rem !important; - } - .mr-sm-n3, - .mx-sm-n3 { - margin-right: -1rem !important; - } - .mb-sm-n3, - .my-sm-n3 { - margin-bottom: -1rem !important; - } - .ml-sm-n3, - .mx-sm-n3 { - margin-left: -1rem !important; - } - .m-sm-n4 { - margin: -1.5rem !important; - } - .mt-sm-n4, - .my-sm-n4 { - margin-top: -1.5rem !important; - } - .mr-sm-n4, - .mx-sm-n4 { - margin-right: -1.5rem !important; - } - .mb-sm-n4, - .my-sm-n4 { - margin-bottom: -1.5rem !important; - } - .ml-sm-n4, - .mx-sm-n4 { - margin-left: -1.5rem !important; - } - .m-sm-n5 { - margin: -3rem !important; - } - .mt-sm-n5, - .my-sm-n5 { - margin-top: -3rem !important; - } - .mr-sm-n5, - .mx-sm-n5 { - margin-right: -3rem !important; - } - .mb-sm-n5, - .my-sm-n5 { - margin-bottom: -3rem !important; - } - .ml-sm-n5, - .mx-sm-n5 { - margin-left: -3rem !important; - } - .m-sm-auto { - margin: auto !important; - } - .mt-sm-auto, - .my-sm-auto { - margin-top: auto !important; - } - .mr-sm-auto, - .mx-sm-auto { - margin-right: auto !important; - } - .mb-sm-auto, - .my-sm-auto { - margin-bottom: auto !important; - } - .ml-sm-auto, - .mx-sm-auto { - margin-left: auto !important; - } -} - -@media (min-width: 768px) { - .m-md-0 { - margin: 0 !important; - } - .mt-md-0, - .my-md-0 { - margin-top: 0 !important; - } - .mr-md-0, - .mx-md-0 { - margin-right: 0 !important; - } - .mb-md-0, - .my-md-0 { - margin-bottom: 0 !important; - } - .ml-md-0, - .mx-md-0 { - margin-left: 0 !important; - } - .m-md-1 { - margin: 0.25rem !important; - } - .mt-md-1, - .my-md-1 { - margin-top: 0.25rem !important; - } - .mr-md-1, - .mx-md-1 { - margin-right: 0.25rem !important; - } - .mb-md-1, - .my-md-1 { - margin-bottom: 0.25rem !important; - } - .ml-md-1, - .mx-md-1 { - margin-left: 0.25rem !important; - } - .m-md-2 { - margin: 0.5rem !important; - } - .mt-md-2, - .my-md-2 { - margin-top: 0.5rem !important; - } - .mr-md-2, - .mx-md-2 { - margin-right: 0.5rem !important; - } - .mb-md-2, - .my-md-2 { - margin-bottom: 0.5rem !important; - } - .ml-md-2, - .mx-md-2 { - margin-left: 0.5rem !important; - } - .m-md-3 { - margin: 1rem !important; - } - .mt-md-3, - .my-md-3 { - margin-top: 1rem !important; - } - .mr-md-3, - .mx-md-3 { - margin-right: 1rem !important; - } - .mb-md-3, - .my-md-3 { - margin-bottom: 1rem !important; - } - .ml-md-3, - .mx-md-3 { - margin-left: 1rem !important; - } - .m-md-4 { - margin: 1.5rem !important; - } - .mt-md-4, - .my-md-4 { - margin-top: 1.5rem !important; - } - .mr-md-4, - .mx-md-4 { - margin-right: 1.5rem !important; - } - .mb-md-4, - .my-md-4 { - margin-bottom: 1.5rem !important; - } - .ml-md-4, - .mx-md-4 { - margin-left: 1.5rem !important; - } - .m-md-5 { - margin: 3rem !important; - } - .mt-md-5, - .my-md-5 { - margin-top: 3rem !important; - } - .mr-md-5, - .mx-md-5 { - margin-right: 3rem !important; - } - .mb-md-5, - .my-md-5 { - margin-bottom: 3rem !important; - } - .ml-md-5, - .mx-md-5 { - margin-left: 3rem !important; - } - .p-md-0 { - padding: 0 !important; - } - .pt-md-0, - .py-md-0 { - padding-top: 0 !important; - } - .pr-md-0, - .px-md-0 { - padding-right: 0 !important; - } - .pb-md-0, - .py-md-0 { - padding-bottom: 0 !important; - } - .pl-md-0, - .px-md-0 { - padding-left: 0 !important; - } - .p-md-1 { - padding: 0.25rem !important; - } - .pt-md-1, - .py-md-1 { - padding-top: 0.25rem !important; - } - .pr-md-1, - .px-md-1 { - padding-right: 0.25rem !important; - } - .pb-md-1, - .py-md-1 { - padding-bottom: 0.25rem !important; - } - .pl-md-1, - .px-md-1 { - padding-left: 0.25rem !important; - } - .p-md-2 { - padding: 0.5rem !important; - } - .pt-md-2, - .py-md-2 { - padding-top: 0.5rem !important; - } - .pr-md-2, - .px-md-2 { - padding-right: 0.5rem !important; - } - .pb-md-2, - .py-md-2 { - padding-bottom: 0.5rem !important; - } - .pl-md-2, - .px-md-2 { - padding-left: 0.5rem !important; - } - .p-md-3 { - padding: 1rem !important; - } - .pt-md-3, - .py-md-3 { - padding-top: 1rem !important; - } - .pr-md-3, - .px-md-3 { - padding-right: 1rem !important; - } - .pb-md-3, - .py-md-3 { - padding-bottom: 1rem !important; - } - .pl-md-3, - .px-md-3 { - padding-left: 1rem !important; - } - .p-md-4 { - padding: 1.5rem !important; - } - .pt-md-4, - .py-md-4 { - padding-top: 1.5rem !important; - } - .pr-md-4, - .px-md-4 { - padding-right: 1.5rem !important; - } - .pb-md-4, - .py-md-4 { - padding-bottom: 1.5rem !important; - } - .pl-md-4, - .px-md-4 { - padding-left: 1.5rem !important; - } - .p-md-5 { - padding: 3rem !important; - } - .pt-md-5, - .py-md-5 { - padding-top: 3rem !important; - } - .pr-md-5, - .px-md-5 { - padding-right: 3rem !important; - } - .pb-md-5, - .py-md-5 { - padding-bottom: 3rem !important; - } - .pl-md-5, - .px-md-5 { - padding-left: 3rem !important; - } - .m-md-n1 { - margin: -0.25rem !important; - } - .mt-md-n1, - .my-md-n1 { - margin-top: -0.25rem !important; - } - .mr-md-n1, - .mx-md-n1 { - margin-right: -0.25rem !important; - } - .mb-md-n1, - .my-md-n1 { - margin-bottom: -0.25rem !important; - } - .ml-md-n1, - .mx-md-n1 { - margin-left: -0.25rem !important; - } - .m-md-n2 { - margin: -0.5rem !important; - } - .mt-md-n2, - .my-md-n2 { - margin-top: -0.5rem !important; - } - .mr-md-n2, - .mx-md-n2 { - margin-right: -0.5rem !important; - } - .mb-md-n2, - .my-md-n2 { - margin-bottom: -0.5rem !important; - } - .ml-md-n2, - .mx-md-n2 { - margin-left: -0.5rem !important; - } - .m-md-n3 { - margin: -1rem !important; - } - .mt-md-n3, - .my-md-n3 { - margin-top: -1rem !important; - } - .mr-md-n3, - .mx-md-n3 { - margin-right: -1rem !important; - } - .mb-md-n3, - .my-md-n3 { - margin-bottom: -1rem !important; - } - .ml-md-n3, - .mx-md-n3 { - margin-left: -1rem !important; - } - .m-md-n4 { - margin: -1.5rem !important; - } - .mt-md-n4, - .my-md-n4 { - margin-top: -1.5rem !important; - } - .mr-md-n4, - .mx-md-n4 { - margin-right: -1.5rem !important; - } - .mb-md-n4, - .my-md-n4 { - margin-bottom: -1.5rem !important; - } - .ml-md-n4, - .mx-md-n4 { - margin-left: -1.5rem !important; - } - .m-md-n5 { - margin: -3rem !important; - } - .mt-md-n5, - .my-md-n5 { - margin-top: -3rem !important; - } - .mr-md-n5, - .mx-md-n5 { - margin-right: -3rem !important; - } - .mb-md-n5, - .my-md-n5 { - margin-bottom: -3rem !important; - } - .ml-md-n5, - .mx-md-n5 { - margin-left: -3rem !important; - } - .m-md-auto { - margin: auto !important; - } - .mt-md-auto, - .my-md-auto { - margin-top: auto !important; - } - .mr-md-auto, - .mx-md-auto { - margin-right: auto !important; - } - .mb-md-auto, - .my-md-auto { - margin-bottom: auto !important; - } - .ml-md-auto, - .mx-md-auto { - margin-left: auto !important; - } -} - -@media (min-width: 992px) { - .m-lg-0 { - margin: 0 !important; - } - .mt-lg-0, - .my-lg-0 { - margin-top: 0 !important; - } - .mr-lg-0, - .mx-lg-0 { - margin-right: 0 !important; - } - .mb-lg-0, - .my-lg-0 { - margin-bottom: 0 !important; - } - .ml-lg-0, - .mx-lg-0 { - margin-left: 0 !important; - } - .m-lg-1 { - margin: 0.25rem !important; - } - .mt-lg-1, - .my-lg-1 { - margin-top: 0.25rem !important; - } - .mr-lg-1, - .mx-lg-1 { - margin-right: 0.25rem !important; - } - .mb-lg-1, - .my-lg-1 { - margin-bottom: 0.25rem !important; - } - .ml-lg-1, - .mx-lg-1 { - margin-left: 0.25rem !important; - } - .m-lg-2 { - margin: 0.5rem !important; - } - .mt-lg-2, - .my-lg-2 { - margin-top: 0.5rem !important; - } - .mr-lg-2, - .mx-lg-2 { - margin-right: 0.5rem !important; - } - .mb-lg-2, - .my-lg-2 { - margin-bottom: 0.5rem !important; - } - .ml-lg-2, - .mx-lg-2 { - margin-left: 0.5rem !important; - } - .m-lg-3 { - margin: 1rem !important; - } - .mt-lg-3, - .my-lg-3 { - margin-top: 1rem !important; - } - .mr-lg-3, - .mx-lg-3 { - margin-right: 1rem !important; - } - .mb-lg-3, - .my-lg-3 { - margin-bottom: 1rem !important; - } - .ml-lg-3, - .mx-lg-3 { - margin-left: 1rem !important; - } - .m-lg-4 { - margin: 1.5rem !important; - } - .mt-lg-4, - .my-lg-4 { - margin-top: 1.5rem !important; - } - .mr-lg-4, - .mx-lg-4 { - margin-right: 1.5rem !important; - } - .mb-lg-4, - .my-lg-4 { - margin-bottom: 1.5rem !important; - } - .ml-lg-4, - .mx-lg-4 { - margin-left: 1.5rem !important; - } - .m-lg-5 { - margin: 3rem !important; - } - .mt-lg-5, - .my-lg-5 { - margin-top: 3rem !important; - } - .mr-lg-5, - .mx-lg-5 { - margin-right: 3rem !important; - } - .mb-lg-5, - .my-lg-5 { - margin-bottom: 3rem !important; - } - .ml-lg-5, - .mx-lg-5 { - margin-left: 3rem !important; - } - .p-lg-0 { - padding: 0 !important; - } - .pt-lg-0, - .py-lg-0 { - padding-top: 0 !important; - } - .pr-lg-0, - .px-lg-0 { - padding-right: 0 !important; - } - .pb-lg-0, - .py-lg-0 { - padding-bottom: 0 !important; - } - .pl-lg-0, - .px-lg-0 { - padding-left: 0 !important; - } - .p-lg-1 { - padding: 0.25rem !important; - } - .pt-lg-1, - .py-lg-1 { - padding-top: 0.25rem !important; - } - .pr-lg-1, - .px-lg-1 { - padding-right: 0.25rem !important; - } - .pb-lg-1, - .py-lg-1 { - padding-bottom: 0.25rem !important; - } - .pl-lg-1, - .px-lg-1 { - padding-left: 0.25rem !important; - } - .p-lg-2 { - padding: 0.5rem !important; - } - .pt-lg-2, - .py-lg-2 { - padding-top: 0.5rem !important; - } - .pr-lg-2, - .px-lg-2 { - padding-right: 0.5rem !important; - } - .pb-lg-2, - .py-lg-2 { - padding-bottom: 0.5rem !important; - } - .pl-lg-2, - .px-lg-2 { - padding-left: 0.5rem !important; - } - .p-lg-3 { - padding: 1rem !important; - } - .pt-lg-3, - .py-lg-3 { - padding-top: 1rem !important; - } - .pr-lg-3, - .px-lg-3 { - padding-right: 1rem !important; - } - .pb-lg-3, - .py-lg-3 { - padding-bottom: 1rem !important; - } - .pl-lg-3, - .px-lg-3 { - padding-left: 1rem !important; - } - .p-lg-4 { - padding: 1.5rem !important; - } - .pt-lg-4, - .py-lg-4 { - padding-top: 1.5rem !important; - } - .pr-lg-4, - .px-lg-4 { - padding-right: 1.5rem !important; - } - .pb-lg-4, - .py-lg-4 { - padding-bottom: 1.5rem !important; - } - .pl-lg-4, - .px-lg-4 { - padding-left: 1.5rem !important; - } - .p-lg-5 { - padding: 3rem !important; - } - .pt-lg-5, - .py-lg-5 { - padding-top: 3rem !important; - } - .pr-lg-5, - .px-lg-5 { - padding-right: 3rem !important; - } - .pb-lg-5, - .py-lg-5 { - padding-bottom: 3rem !important; - } - .pl-lg-5, - .px-lg-5 { - padding-left: 3rem !important; - } - .m-lg-n1 { - margin: -0.25rem !important; - } - .mt-lg-n1, - .my-lg-n1 { - margin-top: -0.25rem !important; - } - .mr-lg-n1, - .mx-lg-n1 { - margin-right: -0.25rem !important; - } - .mb-lg-n1, - .my-lg-n1 { - margin-bottom: -0.25rem !important; - } - .ml-lg-n1, - .mx-lg-n1 { - margin-left: -0.25rem !important; - } - .m-lg-n2 { - margin: -0.5rem !important; - } - .mt-lg-n2, - .my-lg-n2 { - margin-top: -0.5rem !important; - } - .mr-lg-n2, - .mx-lg-n2 { - margin-right: -0.5rem !important; - } - .mb-lg-n2, - .my-lg-n2 { - margin-bottom: -0.5rem !important; - } - .ml-lg-n2, - .mx-lg-n2 { - margin-left: -0.5rem !important; - } - .m-lg-n3 { - margin: -1rem !important; - } - .mt-lg-n3, - .my-lg-n3 { - margin-top: -1rem !important; - } - .mr-lg-n3, - .mx-lg-n3 { - margin-right: -1rem !important; - } - .mb-lg-n3, - .my-lg-n3 { - margin-bottom: -1rem !important; - } - .ml-lg-n3, - .mx-lg-n3 { - margin-left: -1rem !important; - } - .m-lg-n4 { - margin: -1.5rem !important; - } - .mt-lg-n4, - .my-lg-n4 { - margin-top: -1.5rem !important; - } - .mr-lg-n4, - .mx-lg-n4 { - margin-right: -1.5rem !important; - } - .mb-lg-n4, - .my-lg-n4 { - margin-bottom: -1.5rem !important; - } - .ml-lg-n4, - .mx-lg-n4 { - margin-left: -1.5rem !important; - } - .m-lg-n5 { - margin: -3rem !important; - } - .mt-lg-n5, - .my-lg-n5 { - margin-top: -3rem !important; - } - .mr-lg-n5, - .mx-lg-n5 { - margin-right: -3rem !important; - } - .mb-lg-n5, - .my-lg-n5 { - margin-bottom: -3rem !important; - } - .ml-lg-n5, - .mx-lg-n5 { - margin-left: -3rem !important; - } - .m-lg-auto { - margin: auto !important; - } - .mt-lg-auto, - .my-lg-auto { - margin-top: auto !important; - } - .mr-lg-auto, - .mx-lg-auto { - margin-right: auto !important; - } - .mb-lg-auto, - .my-lg-auto { - margin-bottom: auto !important; - } - .ml-lg-auto, - .mx-lg-auto { - margin-left: auto !important; - } -} - -@media (min-width: 1200px) { - .m-xl-0 { - margin: 0 !important; - } - .mt-xl-0, - .my-xl-0 { - margin-top: 0 !important; - } - .mr-xl-0, - .mx-xl-0 { - margin-right: 0 !important; - } - .mb-xl-0, - .my-xl-0 { - margin-bottom: 0 !important; - } - .ml-xl-0, - .mx-xl-0 { - margin-left: 0 !important; - } - .m-xl-1 { - margin: 0.25rem !important; - } - .mt-xl-1, - .my-xl-1 { - margin-top: 0.25rem !important; - } - .mr-xl-1, - .mx-xl-1 { - margin-right: 0.25rem !important; - } - .mb-xl-1, - .my-xl-1 { - margin-bottom: 0.25rem !important; - } - .ml-xl-1, - .mx-xl-1 { - margin-left: 0.25rem !important; - } - .m-xl-2 { - margin: 0.5rem !important; - } - .mt-xl-2, - .my-xl-2 { - margin-top: 0.5rem !important; - } - .mr-xl-2, - .mx-xl-2 { - margin-right: 0.5rem !important; - } - .mb-xl-2, - .my-xl-2 { - margin-bottom: 0.5rem !important; - } - .ml-xl-2, - .mx-xl-2 { - margin-left: 0.5rem !important; - } - .m-xl-3 { - margin: 1rem !important; - } - .mt-xl-3, - .my-xl-3 { - margin-top: 1rem !important; - } - .mr-xl-3, - .mx-xl-3 { - margin-right: 1rem !important; - } - .mb-xl-3, - .my-xl-3 { - margin-bottom: 1rem !important; - } - .ml-xl-3, - .mx-xl-3 { - margin-left: 1rem !important; - } - .m-xl-4 { - margin: 1.5rem !important; - } - .mt-xl-4, - .my-xl-4 { - margin-top: 1.5rem !important; - } - .mr-xl-4, - .mx-xl-4 { - margin-right: 1.5rem !important; - } - .mb-xl-4, - .my-xl-4 { - margin-bottom: 1.5rem !important; - } - .ml-xl-4, - .mx-xl-4 { - margin-left: 1.5rem !important; - } - .m-xl-5 { - margin: 3rem !important; - } - .mt-xl-5, - .my-xl-5 { - margin-top: 3rem !important; - } - .mr-xl-5, - .mx-xl-5 { - margin-right: 3rem !important; - } - .mb-xl-5, - .my-xl-5 { - margin-bottom: 3rem !important; - } - .ml-xl-5, - .mx-xl-5 { - margin-left: 3rem !important; - } - .p-xl-0 { - padding: 0 !important; - } - .pt-xl-0, - .py-xl-0 { - padding-top: 0 !important; - } - .pr-xl-0, - .px-xl-0 { - padding-right: 0 !important; - } - .pb-xl-0, - .py-xl-0 { - padding-bottom: 0 !important; - } - .pl-xl-0, - .px-xl-0 { - padding-left: 0 !important; - } - .p-xl-1 { - padding: 0.25rem !important; - } - .pt-xl-1, - .py-xl-1 { - padding-top: 0.25rem !important; - } - .pr-xl-1, - .px-xl-1 { - padding-right: 0.25rem !important; - } - .pb-xl-1, - .py-xl-1 { - padding-bottom: 0.25rem !important; - } - .pl-xl-1, - .px-xl-1 { - padding-left: 0.25rem !important; - } - .p-xl-2 { - padding: 0.5rem !important; - } - .pt-xl-2, - .py-xl-2 { - padding-top: 0.5rem !important; - } - .pr-xl-2, - .px-xl-2 { - padding-right: 0.5rem !important; - } - .pb-xl-2, - .py-xl-2 { - padding-bottom: 0.5rem !important; - } - .pl-xl-2, - .px-xl-2 { - padding-left: 0.5rem !important; - } - .p-xl-3 { - padding: 1rem !important; - } - .pt-xl-3, - .py-xl-3 { - padding-top: 1rem !important; - } - .pr-xl-3, - .px-xl-3 { - padding-right: 1rem !important; - } - .pb-xl-3, - .py-xl-3 { - padding-bottom: 1rem !important; - } - .pl-xl-3, - .px-xl-3 { - padding-left: 1rem !important; - } - .p-xl-4 { - padding: 1.5rem !important; - } - .pt-xl-4, - .py-xl-4 { - padding-top: 1.5rem !important; - } - .pr-xl-4, - .px-xl-4 { - padding-right: 1.5rem !important; - } - .pb-xl-4, - .py-xl-4 { - padding-bottom: 1.5rem !important; - } - .pl-xl-4, - .px-xl-4 { - padding-left: 1.5rem !important; - } - .p-xl-5 { - padding: 3rem !important; - } - .pt-xl-5, - .py-xl-5 { - padding-top: 3rem !important; - } - .pr-xl-5, - .px-xl-5 { - padding-right: 3rem !important; - } - .pb-xl-5, - .py-xl-5 { - padding-bottom: 3rem !important; - } - .pl-xl-5, - .px-xl-5 { - padding-left: 3rem !important; - } - .m-xl-n1 { - margin: -0.25rem !important; - } - .mt-xl-n1, - .my-xl-n1 { - margin-top: -0.25rem !important; - } - .mr-xl-n1, - .mx-xl-n1 { - margin-right: -0.25rem !important; - } - .mb-xl-n1, - .my-xl-n1 { - margin-bottom: -0.25rem !important; - } - .ml-xl-n1, - .mx-xl-n1 { - margin-left: -0.25rem !important; - } - .m-xl-n2 { - margin: -0.5rem !important; - } - .mt-xl-n2, - .my-xl-n2 { - margin-top: -0.5rem !important; - } - .mr-xl-n2, - .mx-xl-n2 { - margin-right: -0.5rem !important; - } - .mb-xl-n2, - .my-xl-n2 { - margin-bottom: -0.5rem !important; - } - .ml-xl-n2, - .mx-xl-n2 { - margin-left: -0.5rem !important; - } - .m-xl-n3 { - margin: -1rem !important; - } - .mt-xl-n3, - .my-xl-n3 { - margin-top: -1rem !important; - } - .mr-xl-n3, - .mx-xl-n3 { - margin-right: -1rem !important; - } - .mb-xl-n3, - .my-xl-n3 { - margin-bottom: -1rem !important; - } - .ml-xl-n3, - .mx-xl-n3 { - margin-left: -1rem !important; - } - .m-xl-n4 { - margin: -1.5rem !important; - } - .mt-xl-n4, - .my-xl-n4 { - margin-top: -1.5rem !important; - } - .mr-xl-n4, - .mx-xl-n4 { - margin-right: -1.5rem !important; - } - .mb-xl-n4, - .my-xl-n4 { - margin-bottom: -1.5rem !important; - } - .ml-xl-n4, - .mx-xl-n4 { - margin-left: -1.5rem !important; - } - .m-xl-n5 { - margin: -3rem !important; - } - .mt-xl-n5, - .my-xl-n5 { - margin-top: -3rem !important; - } - .mr-xl-n5, - .mx-xl-n5 { - margin-right: -3rem !important; - } - .mb-xl-n5, - .my-xl-n5 { - margin-bottom: -3rem !important; - } - .ml-xl-n5, - .mx-xl-n5 { - margin-left: -3rem !important; - } - .m-xl-auto { - margin: auto !important; - } - .mt-xl-auto, - .my-xl-auto { - margin-top: auto !important; - } - .mr-xl-auto, - .mx-xl-auto { - margin-right: auto !important; - } - .mb-xl-auto, - .my-xl-auto { - margin-bottom: auto !important; - } - .ml-xl-auto, - .mx-xl-auto { - margin-left: auto !important; - } -} - -.stretched-link::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - pointer-events: auto; - content: ""; - background-color: rgba(0, 0, 0, 0); -} - -.text-monospace { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; -} - -.text-justify { - text-align: justify !important; -} - -.text-wrap { - white-space: normal !important; -} - -.text-nowrap { - white-space: nowrap !important; -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.text-left { - text-align: left !important; -} - -.text-right { - text-align: right !important; -} - -.text-center { - text-align: center !important; -} - -@media (min-width: 576px) { - .text-sm-left { - text-align: left !important; - } - .text-sm-right { - text-align: right !important; - } - .text-sm-center { - text-align: center !important; - } -} - -@media (min-width: 768px) { - .text-md-left { - text-align: left !important; - } - .text-md-right { - text-align: right !important; - } - .text-md-center { - text-align: center !important; - } -} - -@media (min-width: 992px) { - .text-lg-left { - text-align: left !important; - } - .text-lg-right { - text-align: right !important; - } - .text-lg-center { - text-align: center !important; - } -} - -@media (min-width: 1200px) { - .text-xl-left { - text-align: left !important; - } - .text-xl-right { - text-align: right !important; - } - .text-xl-center { - text-align: center !important; - } -} - -.text-lowercase { - text-transform: lowercase !important; -} - -.text-uppercase { - text-transform: uppercase !important; -} - -.text-capitalize { - text-transform: capitalize !important; -} - -.font-weight-light { - font-weight: 300 !important; -} - -.font-weight-lighter { - font-weight: lighter !important; -} - -.font-weight-normal { - font-weight: 400 !important; -} - -.font-weight-bold { - font-weight: 700 !important; -} - -.font-weight-bolder { - font-weight: bolder !important; -} - -.font-italic { - font-style: italic !important; -} - -.text-white { - color: #fff !important; -} - -.text-primary { - color: #007bff !important; -} - -a.text-primary:hover, a.text-primary:focus { - color: #0056b3 !important; -} - -.text-secondary { - color: #6c757d !important; -} - -a.text-secondary:hover, a.text-secondary:focus { - color: #494f54 !important; -} - -.text-success { - color: #28a745 !important; -} - -a.text-success:hover, a.text-success:focus { - color: #19692c !important; -} - -.text-info { - color: #17a2b8 !important; -} - -a.text-info:hover, a.text-info:focus { - color: #0f6674 !important; -} - -.text-warning { - color: #ffc107 !important; -} - -a.text-warning:hover, a.text-warning:focus { - color: #ba8b00 !important; -} - -.text-danger { - color: #dc3545 !important; -} - -a.text-danger:hover, a.text-danger:focus { - color: #a71d2a !important; -} - -.text-light { - color: #f8f9fa !important; -} - -a.text-light:hover, a.text-light:focus { - color: #cbd3da !important; -} - -.text-dark { - color: #343a40 !important; -} - -a.text-dark:hover, a.text-dark:focus { - color: #121416 !important; -} - -.text-body { - color: #212529 !important; -} - -.text-muted { - color: #6c757d !important; -} - -.text-black-50 { - color: rgba(0, 0, 0, 0.5) !important; -} - -.text-white-50 { - color: rgba(255, 255, 255, 0.5) !important; -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.text-decoration-none { - text-decoration: none !important; -} - -.text-break { - word-break: break-word !important; - overflow-wrap: break-word !important; -} - -.text-reset { - color: inherit !important; -} - -.visible { - visibility: visible !important; -} - -.invisible { - visibility: hidden !important; -} - -@media print { - *, - *::before, - *::after { - text-shadow: none !important; - box-shadow: none !important; - } - a:not(.btn) { - text-decoration: underline; - } - abbr[title]::after { - content: " (" attr(title) ")"; - } - pre { - white-space: pre-wrap !important; - } - pre, - blockquote { - border: 1px solid #adb5bd; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - @page { - size: a3; - } - body { - min-width: 992px !important; - } - .container { - min-width: 992px !important; - } - .navbar { - display: none; - } - .badge { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #dee2e6 !important; - } - .table-dark { - color: inherit; - } - .table-dark th, - .table-dark td, - .table-dark thead th, - .table-dark tbody + tbody { - border-color: #dee2e6; - } - .table .thead-dark th { - color: inherit; - border-color: #dee2e6; - } -} -/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/web/css/dots.css b/web/css/dots.css new file mode 100644 index 0000000..ecadabd --- /dev/null +++ b/web/css/dots.css @@ -0,0 +1,106 @@ +@font-face { + font-family: dotted; + src: url(../fonts/LED-Dot-Matrix.woff2) format('woff2'); + font-weight: 400; + font-style: normal +} + +/*SpaceGrotesk-VariableFont_wght.woff2*/ + +@font-face { + font-family: SpaceGrotesk-VariableFont; + src: url(../fonts/SpaceGrotesk-VariableFont_wght.woff2) format('woff2'); +} + +body, +button, +input, +select, +textarea { + font-family: "SpaceGrotesk-VariableFont", sans-serif +} + +.font-dotted { + font-family: dotted +} + +.bold { + font-weight: 700; +} + +.hero-title { + font-size: 3rem +} + +.logo-img { + width: 70px; + margin: 0 auto; + margin-bottom: 1rem +} + +.download-img { + width: 150px; + margin: 0 auto +} + +.feature-icon { + display: flex; + align-items: center; + height: 80px; + width: 80px; + margin: 0 auto +} + +.feature-icon img { + width: 40px +} + +.button-dark { + background: linear-gradient(65deg, #38343d 0, #605d64 100%); + color: #fff !important +} + +.button-dark:hover { + background: linear-gradient(42deg, #38343d 0, #605d64 100%) +} + +.button-main { + background: linear-gradient(65deg, #6669be 0, #512cd4 100%); + color: #fff !important +} + +.newsletter-form { + justify-content: center +} + +.footer-icon { + width: 60px +} + +.site-footer::before { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDE0NDAgMjE3IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MjsiPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4zODYzLDAsMCwxLjAwMTg4LC04NS42NzM4LC0xMy40MTg1KSI+CiAgICAgICAgPGVsbGlwc2UgY3g9Ijc0Ni44NTYiIGN5PSIzMTIuNjIzIiByeD0iNzQzLjI4NSIgcnk9IjI5Ni45NTUiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjEpOyIvPgogICAgPC9nPgogICAgPGRlZnM+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJfTGluZWFyMSIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDE0ODYuNTcsMCwwLDE0ODYuNTcsMy41NzA0MywzMTIuNjIzKSI+PHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoODEsNDQsMjEyKTtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDEwMiwxMDUsMTkwKTtzdG9wLW9wYWNpdHk6MSIvPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8L2RlZnM+Cjwvc3ZnPgo=); + background-position: center +} + +.features::before { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEyMDUgNDgyIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MjsiPgogICAgPGc+CiAgICAgICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC40NTQyODgsMCwwLDAuNzQ3MDA3LDMzLjQwOTEsOC4zODMzMykiPgogICAgICAgICAgICA8ZWxsaXBzZSBjeD0iNzQ2Ljg1NiIgY3k9IjMxMi42MjMiIHJ4PSI3NDMuMjg1IiByeT0iMjk2Ljk1NSIgc3R5bGU9ImZpbGw6dXJsKCNfTGluZWFyMSk7Ii8+CiAgICAgICAgPC9nPgogICAgICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuMTk4OTgzLDAuMTAwMjg0LC0wLjIzNzc4MywwLjQ3MTgwOCw5NDYuNCw4My43MDEpIj4KICAgICAgICAgICAgPGVsbGlwc2UgY3g9Ijc0Ni44NTYiIGN5PSIzMTIuNjIzIiByeD0iNzQzLjI4NSIgcnk9IjI5Ni45NTUiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjIpOyIvPgogICAgICAgIDwvZz4KICAgICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjMxNTUwNywwLjE1OTAxLC0wLjI4MzY2MywwLjU2Mjg0Myw1MzYuNjI4LC02NC4wMDM4KSI+CiAgICAgICAgICAgIDxlbGxpcHNlIGN4PSI3NDYuODU2IiBjeT0iMzEyLjYyMyIgcng9Ijc0My4yODUiIHJ5PSIyOTYuOTU1IiBzdHlsZT0iZmlsbDp1cmwoI19MaW5lYXIzKTsiLz4KICAgICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZGVmcz4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9MaW5lYXIxIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMTQ4Ni41NywwLDAsMTQ4Ni41NywzLjU3MDQzLDMxMi42MjMpIj48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYig4MSw0NCwyMTIpO3N0b3Atb3BhY2l0eTowLjA2Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTAyLDEwNSwxOTApO3N0b3Atb3BhY2l0eTowLjA2Ii8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9MaW5lYXIyIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMTQ4Ni41NywwLDAsMTQ4Ni41NywzLjU3MDQzLDMxMi42MjMpIj48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYig4MSw0NCwyMTIpO3N0b3Atb3BhY2l0eTowLjA2Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTAyLDEwNSwxOTApO3N0b3Atb3BhY2l0eTowLjA2Ii8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9MaW5lYXIzIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMTQ4Ni41NywwLDAsMTQ4Ni41NywzLjU3MDQzLDMxMi42MjMpIj48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYig4MSw0NCwyMTIpO3N0b3Atb3BhY2l0eTowLjA2Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTAyLDEwNSwxOTApO3N0b3Atb3BhY2l0eTowLjA2Ii8+PC9saW5lYXJHcmFkaWVudD4KICAgIDwvZGVmcz4KPC9zdmc+Cg==) +} + +.site-header::before { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDE0ODAgNjUwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MjsiPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC40NjYwMTMsMCwwLDEuMDY1MjEsNy42OCwtNi42OTM3NCkiPgogICAgICAgIDxlbGxpcHNlIGN4PSI3NDYuODU2IiBjeT0iMzEyLjYyMyIgcng9Ijc0My4yODUiIHJ5PSIyOTYuOTU1IiBzdHlsZT0iZmlsbDp1cmwoI19MaW5lYXIxKTsiLz4KICAgIDwvZz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuMTk4OTgzLDAuMTAwMjg0LC0wLjIzNzc4MywwLjQ3MTgwOCwxMjM3LjIyLC00OS4zMjI0KSI+CiAgICAgICAgPGVsbGlwc2UgY3g9Ijc0Ni44NTYiIGN5PSIzMTIuNjIzIiByeD0iNzQzLjI4NSIgcnk9IjI5Ni45NTUiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjIpOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC4wODkyMDg2LC0wLjAzMjk4MzEsMC4wODYyMDAzLDAuMjMzMTQ0LDY1Mi42Miw0OTUuMTE5KSI+CiAgICAgICAgPGVsbGlwc2UgY3g9Ijc0Ni44NTYiIGN5PSIzMTIuNjIzIiByeD0iNzQzLjI4NSIgcnk9IjI5Ni45NTUiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjMpOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC42Mzk4MjgsMC4zMjI0NjIsLTAuMjgzNjYzLDAuNTYyODQzLDUzNS40NywtNjQuNTg3NCkiPgogICAgICAgIDxlbGxpcHNlIGN4PSI3NDYuODU2IiBjeT0iMzEyLjYyMyIgcng9Ijc0My4yODUiIHJ5PSIyOTYuOTU1IiBzdHlsZT0iZmlsbDp1cmwoI19MaW5lYXI0KTsiLz4KICAgIDwvZz4KICAgIDxkZWZzPgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjEiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxNDg2LjU3LDAsMCwxNDg2LjU3LDMuNTcwNDMsMzEyLjYyMykiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDgxLDQ0LDIxMik7c3RvcC1vcGFjaXR5OjAuMDYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxMDIsMTA1LDE5MCk7c3RvcC1vcGFjaXR5OjAuMDYiLz48L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjIiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxNDg2LjU3LDAsMCwxNDg2LjU3LDMuNTcwNDMsMzEyLjYyMykiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDgxLDQ0LDIxMik7c3RvcC1vcGFjaXR5OjAuMDYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxMDIsMTA1LDE5MCk7c3RvcC1vcGFjaXR5OjAuMDYiLz48L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjMiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxNDg2LjU3LDAsMCwxNDg2LjU3LDMuNTcwNDMsMzEyLjYyMykiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDgxLDQ0LDIxMik7c3RvcC1vcGFjaXR5OjAuMDYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxMDIsMTA1LDE5MCk7c3RvcC1vcGFjaXR5OjAuMDYiLz48L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjQiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxNDg2LjU3LDAsMCwxNDg2LjU3LDMuNTcwNDMsMzEyLjYyMykiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDgxLDQ0LDIxMik7c3RvcC1vcGFjaXR5OjAuMDYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxMDIsMTA1LDE5MCk7c3RvcC1vcGFjaXR5OjAuMDYiLz48L2xpbmVhckdyYWRpZW50PgogICAgPC9kZWZzPgo8L3N2Zz4K); + background-position: left; + left: -20%; + width: 400% +} + +.hero-subparagraph { + font-size: .8rem; + max-width: 69%; + margin: 0 auto; + margin-top: .5rem; + line-height: normal; + background: #fff; + border-radius: 14px; + padding: .4rem; + box-shadow: 0 16px 48px #e3e7eb +} \ No newline at end of file diff --git a/web/css/dots.min.css b/web/css/dots.min.css new file mode 100644 index 0000000..dc31812 --- /dev/null +++ b/web/css/dots.min.css @@ -0,0 +1 @@ +@font-face{font-family:dotted;src:url(../fonts/LED-Dot-Matrix.woff2) format('woff2');font-weight:400;font-style:normal}@font-face{font-family:SpaceGrotesk-VariableFont;src:url(../fonts/SpaceGrotesk-VariableFont_wght.woff2) format('woff2')}body,button,input,select,textarea{font-family:SpaceGrotesk-VariableFont,sans-serif}.font-dotted{font-family:dotted}.bold{font-weight:700}.hero-title{font-size:3rem}.logo-img{width:70px;margin:0 auto;margin-bottom:1rem}.download-img{width:150px;margin:0 auto}.feature-icon{display:flex;align-items:center;height:80px;width:80px;margin:0 auto}.feature-icon img{width:40px}.button-dark{background:linear-gradient(65deg,#38343d 0,#605d64 100%);color:#fff!important}.button-dark:hover{background:linear-gradient(42deg,#38343d 0,#605d64 100%)}.button-main{background:linear-gradient(65deg,#6669be 0,#512cd4 100%);color:#fff!important}.newsletter-form{justify-content:center}.footer-icon{width:60px}.site-footer::before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDE0NDAgMjE3IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MjsiPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4zODYzLDAsMCwxLjAwMTg4LC04NS42NzM4LC0xMy40MTg1KSI+CiAgICAgICAgPGVsbGlwc2UgY3g9Ijc0Ni44NTYiIGN5PSIzMTIuNjIzIiByeD0iNzQzLjI4NSIgcnk9IjI5Ni45NTUiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjEpOyIvPgogICAgPC9nPgogICAgPGRlZnM+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJfTGluZWFyMSIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjAiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDE0ODYuNTcsMCwwLDE0ODYuNTcsMy41NzA0MywzMTIuNjIzKSI+PHN0b3Agb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoODEsNDQsMjEyKTtzdG9wLW9wYWNpdHk6MSIvPjxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDEwMiwxMDUsMTkwKTtzdG9wLW9wYWNpdHk6MSIvPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8L2RlZnM+Cjwvc3ZnPgo=);background-position:center}.features::before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEyMDUgNDgyIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MjsiPgogICAgPGc+CiAgICAgICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC40NTQyODgsMCwwLDAuNzQ3MDA3LDMzLjQwOTEsOC4zODMzMykiPgogICAgICAgICAgICA8ZWxsaXBzZSBjeD0iNzQ2Ljg1NiIgY3k9IjMxMi42MjMiIHJ4PSI3NDMuMjg1IiByeT0iMjk2Ljk1NSIgc3R5bGU9ImZpbGw6dXJsKCNfTGluZWFyMSk7Ii8+CiAgICAgICAgPC9nPgogICAgICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuMTk4OTgzLDAuMTAwMjg0LC0wLjIzNzc4MywwLjQ3MTgwOCw5NDYuNCw4My43MDEpIj4KICAgICAgICAgICAgPGVsbGlwc2UgY3g9Ijc0Ni44NTYiIGN5PSIzMTIuNjIzIiByeD0iNzQzLjI4NSIgcnk9IjI5Ni45NTUiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjIpOyIvPgogICAgICAgIDwvZz4KICAgICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjMxNTUwNywwLjE1OTAxLC0wLjI4MzY2MywwLjU2Mjg0Myw1MzYuNjI4LC02NC4wMDM4KSI+CiAgICAgICAgICAgIDxlbGxpcHNlIGN4PSI3NDYuODU2IiBjeT0iMzEyLjYyMyIgcng9Ijc0My4yODUiIHJ5PSIyOTYuOTU1IiBzdHlsZT0iZmlsbDp1cmwoI19MaW5lYXIzKTsiLz4KICAgICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZGVmcz4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9MaW5lYXIxIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMTQ4Ni41NywwLDAsMTQ4Ni41NywzLjU3MDQzLDMxMi42MjMpIj48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYig4MSw0NCwyMTIpO3N0b3Atb3BhY2l0eTowLjA2Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTAyLDEwNSwxOTApO3N0b3Atb3BhY2l0eTowLjA2Ii8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9MaW5lYXIyIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMTQ4Ni41NywwLDAsMTQ4Ni41NywzLjU3MDQzLDMxMi42MjMpIj48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYig4MSw0NCwyMTIpO3N0b3Atb3BhY2l0eTowLjA2Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTAyLDEwNSwxOTApO3N0b3Atb3BhY2l0eTowLjA2Ii8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9MaW5lYXIzIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMTQ4Ni41NywwLDAsMTQ4Ni41NywzLjU3MDQzLDMxMi42MjMpIj48c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYig4MSw0NCwyMTIpO3N0b3Atb3BhY2l0eTowLjA2Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjpyZ2IoMTAyLDEwNSwxOTApO3N0b3Atb3BhY2l0eTowLjA2Ii8+PC9saW5lYXJHcmFkaWVudD4KICAgIDwvZGVmcz4KPC9zdmc+Cg==)}.site-header::before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDE0ODAgNjUwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MjsiPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC40NjYwMTMsMCwwLDEuMDY1MjEsNy42OCwtNi42OTM3NCkiPgogICAgICAgIDxlbGxpcHNlIGN4PSI3NDYuODU2IiBjeT0iMzEyLjYyMyIgcng9Ijc0My4yODUiIHJ5PSIyOTYuOTU1IiBzdHlsZT0iZmlsbDp1cmwoI19MaW5lYXIxKTsiLz4KICAgIDwvZz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuMTk4OTgzLDAuMTAwMjg0LC0wLjIzNzc4MywwLjQ3MTgwOCwxMjM3LjIyLC00OS4zMjI0KSI+CiAgICAgICAgPGVsbGlwc2UgY3g9Ijc0Ni44NTYiIGN5PSIzMTIuNjIzIiByeD0iNzQzLjI4NSIgcnk9IjI5Ni45NTUiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjIpOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC4wODkyMDg2LC0wLjAzMjk4MzEsMC4wODYyMDAzLDAuMjMzMTQ0LDY1Mi42Miw0OTUuMTE5KSI+CiAgICAgICAgPGVsbGlwc2UgY3g9Ijc0Ni44NTYiIGN5PSIzMTIuNjIzIiByeD0iNzQzLjI4NSIgcnk9IjI5Ni45NTUiIHN0eWxlPSJmaWxsOnVybCgjX0xpbmVhcjMpOyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC42Mzk4MjgsMC4zMjI0NjIsLTAuMjgzNjYzLDAuNTYyODQzLDUzNS40NywtNjQuNTg3NCkiPgogICAgICAgIDxlbGxpcHNlIGN4PSI3NDYuODU2IiBjeT0iMzEyLjYyMyIgcng9Ijc0My4yODUiIHJ5PSIyOTYuOTU1IiBzdHlsZT0iZmlsbDp1cmwoI19MaW5lYXI0KTsiLz4KICAgIDwvZz4KICAgIDxkZWZzPgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjEiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxNDg2LjU3LDAsMCwxNDg2LjU3LDMuNTcwNDMsMzEyLjYyMykiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDgxLDQ0LDIxMik7c3RvcC1vcGFjaXR5OjAuMDYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxMDIsMTA1LDE5MCk7c3RvcC1vcGFjaXR5OjAuMDYiLz48L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjIiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxNDg2LjU3LDAsMCwxNDg2LjU3LDMuNTcwNDMsMzEyLjYyMykiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDgxLDQ0LDIxMik7c3RvcC1vcGFjaXR5OjAuMDYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxMDIsMTA1LDE5MCk7c3RvcC1vcGFjaXR5OjAuMDYiLz48L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjMiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxNDg2LjU3LDAsMCwxNDg2LjU3LDMuNTcwNDMsMzEyLjYyMykiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDgxLDQ0LDIxMik7c3RvcC1vcGFjaXR5OjAuMDYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxMDIsMTA1LDE5MCk7c3RvcC1vcGFjaXR5OjAuMDYiLz48L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iX0xpbmVhcjQiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxNDg2LjU3LDAsMCwxNDg2LjU3LDMuNTcwNDMsMzEyLjYyMykiPjxzdG9wIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6cmdiKDgxLDQ0LDIxMik7c3RvcC1vcGFjaXR5OjAuMDYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOnJnYigxMDIsMTA1LDE5MCk7c3RvcC1vcGFjaXR5OjAuMDYiLz48L2xpbmVhckdyYWRpZW50PgogICAgPC9kZWZzPgo8L3N2Zz4K);background-position:left;left:-20%;width:400%}.hero-subparagraph{font-size:.8rem;max-width:69%;margin:0 auto;margin-top:.5rem;line-height:normal;background:#fff;border-radius:14px;padding:.4rem;box-shadow:0 16px 48px #e3e7eb} \ No newline at end of file diff --git a/web/css/fontawesome-all.css b/web/css/fontawesome-all.css deleted file mode 100644 index bca4744..0000000 --- a/web/css/fontawesome-all.css +++ /dev/null @@ -1,4396 +0,0 @@ -/*! - * Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa, -.fas, -.far, -.fal, -.fad, -.fab { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - line-height: 1; } - -.fa-lg { - font-size: 1.33333em; - line-height: 0.75em; - vertical-align: -.0667em; } - -.fa-xs { - font-size: .75em; } - -.fa-sm { - font-size: .875em; } - -.fa-1x { - font-size: 1em; } - -.fa-2x { - font-size: 2em; } - -.fa-3x { - font-size: 3em; } - -.fa-4x { - font-size: 4em; } - -.fa-5x { - font-size: 5em; } - -.fa-6x { - font-size: 6em; } - -.fa-7x { - font-size: 7em; } - -.fa-8x { - font-size: 8em; } - -.fa-9x { - font-size: 9em; } - -.fa-10x { - font-size: 10em; } - -.fa-fw { - text-align: center; - width: 1.25em; } - -.fa-ul { - list-style-type: none; - margin-left: 2.5em; - padding-left: 0; } - .fa-ul > li { - position: relative; } - -.fa-li { - left: -2em; - position: absolute; - text-align: center; - width: 2em; - line-height: inherit; } - -.fa-border { - border: solid 0.08em #eee; - border-radius: .1em; - padding: .2em .25em .15em; } - -.fa-pull-left { - float: left; } - -.fa-pull-right { - float: right; } - -.fa.fa-pull-left, -.fas.fa-pull-left, -.far.fa-pull-left, -.fal.fa-pull-left, -.fab.fa-pull-left { - margin-right: .3em; } - -.fa.fa-pull-right, -.fas.fa-pull-right, -.far.fa-pull-right, -.fal.fa-pull-right, -.fab.fa-pull-right { - margin-left: .3em; } - -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; } - -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); } - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); } } - -.fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); } - -.fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - -webkit-transform: rotate(180deg); - transform: rotate(180deg); } - -.fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - -webkit-transform: rotate(270deg); - transform: rotate(270deg); } - -.fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - -webkit-transform: scale(-1, 1); - transform: scale(-1, 1); } - -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - -webkit-transform: scale(1, -1); - transform: scale(1, -1); } - -.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - -webkit-transform: scale(-1, -1); - transform: scale(-1, -1); } - -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical, -:root .fa-flip-both { - -webkit-filter: none; - filter: none; } - -.fa-stack { - display: inline-block; - height: 2em; - line-height: 2em; - position: relative; - vertical-align: middle; - width: 2.5em; } - -.fa-stack-1x, -.fa-stack-2x { - left: 0; - position: absolute; - text-align: center; - width: 100%; } - -.fa-stack-1x { - line-height: inherit; } - -.fa-stack-2x { - font-size: 2em; } - -.fa-inverse { - color: #fff; } - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen -readers do not read off random characters that represent icons */ -.fa-500px:before { - content: "\f26e"; } - -.fa-accessible-icon:before { - content: "\f368"; } - -.fa-accusoft:before { - content: "\f369"; } - -.fa-acquisitions-incorporated:before { - content: "\f6af"; } - -.fa-ad:before { - content: "\f641"; } - -.fa-address-book:before { - content: "\f2b9"; } - -.fa-address-card:before { - content: "\f2bb"; } - -.fa-adjust:before { - content: "\f042"; } - -.fa-adn:before { - content: "\f170"; } - -.fa-adobe:before { - content: "\f778"; } - -.fa-adversal:before { - content: "\f36a"; } - -.fa-affiliatetheme:before { - content: "\f36b"; } - -.fa-air-freshener:before { - content: "\f5d0"; } - -.fa-airbnb:before { - content: "\f834"; } - -.fa-algolia:before { - content: "\f36c"; } - -.fa-align-center:before { - content: "\f037"; } - -.fa-align-justify:before { - content: "\f039"; } - -.fa-align-left:before { - content: "\f036"; } - -.fa-align-right:before { - content: "\f038"; } - -.fa-alipay:before { - content: "\f642"; } - -.fa-allergies:before { - content: "\f461"; } - -.fa-amazon:before { - content: "\f270"; } - -.fa-amazon-pay:before { - content: "\f42c"; } - -.fa-ambulance:before { - content: "\f0f9"; } - -.fa-american-sign-language-interpreting:before { - content: "\f2a3"; } - -.fa-amilia:before { - content: "\f36d"; } - -.fa-anchor:before { - content: "\f13d"; } - -.fa-android:before { - content: "\f17b"; } - -.fa-angellist:before { - content: "\f209"; } - -.fa-angle-double-down:before { - content: "\f103"; } - -.fa-angle-double-left:before { - content: "\f100"; } - -.fa-angle-double-right:before { - content: "\f101"; } - -.fa-angle-double-up:before { - content: "\f102"; } - -.fa-angle-down:before { - content: "\f107"; } - -.fa-angle-left:before { - content: "\f104"; } - -.fa-angle-right:before { - content: "\f105"; } - -.fa-angle-up:before { - content: "\f106"; } - -.fa-angry:before { - content: "\f556"; } - -.fa-angrycreative:before { - content: "\f36e"; } - -.fa-angular:before { - content: "\f420"; } - -.fa-ankh:before { - content: "\f644"; } - -.fa-app-store:before { - content: "\f36f"; } - -.fa-app-store-ios:before { - content: "\f370"; } - -.fa-apper:before { - content: "\f371"; } - -.fa-apple:before { - content: "\f179"; } - -.fa-apple-alt:before { - content: "\f5d1"; } - -.fa-apple-pay:before { - content: "\f415"; } - -.fa-archive:before { - content: "\f187"; } - -.fa-archway:before { - content: "\f557"; } - -.fa-arrow-alt-circle-down:before { - content: "\f358"; } - -.fa-arrow-alt-circle-left:before { - content: "\f359"; } - -.fa-arrow-alt-circle-right:before { - content: "\f35a"; } - -.fa-arrow-alt-circle-up:before { - content: "\f35b"; } - -.fa-arrow-circle-down:before { - content: "\f0ab"; } - -.fa-arrow-circle-left:before { - content: "\f0a8"; } - -.fa-arrow-circle-right:before { - content: "\f0a9"; } - -.fa-arrow-circle-up:before { - content: "\f0aa"; } - -.fa-arrow-down:before { - content: "\f063"; } - -.fa-arrow-left:before { - content: "\f060"; } - -.fa-arrow-right:before { - content: "\f061"; } - -.fa-arrow-up:before { - content: "\f062"; } - -.fa-arrows-alt:before { - content: "\f0b2"; } - -.fa-arrows-alt-h:before { - content: "\f337"; } - -.fa-arrows-alt-v:before { - content: "\f338"; } - -.fa-artstation:before { - content: "\f77a"; } - -.fa-assistive-listening-systems:before { - content: "\f2a2"; } - -.fa-asterisk:before { - content: "\f069"; } - -.fa-asymmetrik:before { - content: "\f372"; } - -.fa-at:before { - content: "\f1fa"; } - -.fa-atlas:before { - content: "\f558"; } - -.fa-atlassian:before { - content: "\f77b"; } - -.fa-atom:before { - content: "\f5d2"; } - -.fa-audible:before { - content: "\f373"; } - -.fa-audio-description:before { - content: "\f29e"; } - -.fa-autoprefixer:before { - content: "\f41c"; } - -.fa-avianex:before { - content: "\f374"; } - -.fa-aviato:before { - content: "\f421"; } - -.fa-award:before { - content: "\f559"; } - -.fa-aws:before { - content: "\f375"; } - -.fa-baby:before { - content: "\f77c"; } - -.fa-baby-carriage:before { - content: "\f77d"; } - -.fa-backspace:before { - content: "\f55a"; } - -.fa-backward:before { - content: "\f04a"; } - -.fa-bacon:before { - content: "\f7e5"; } - -.fa-balance-scale:before { - content: "\f24e"; } - -.fa-balance-scale-left:before { - content: "\f515"; } - -.fa-balance-scale-right:before { - content: "\f516"; } - -.fa-ban:before { - content: "\f05e"; } - -.fa-band-aid:before { - content: "\f462"; } - -.fa-bandcamp:before { - content: "\f2d5"; } - -.fa-barcode:before { - content: "\f02a"; } - -.fa-bars:before { - content: "\f0c9"; } - -.fa-baseball-ball:before { - content: "\f433"; } - -.fa-basketball-ball:before { - content: "\f434"; } - -.fa-bath:before { - content: "\f2cd"; } - -.fa-battery-empty:before { - content: "\f244"; } - -.fa-battery-full:before { - content: "\f240"; } - -.fa-battery-half:before { - content: "\f242"; } - -.fa-battery-quarter:before { - content: "\f243"; } - -.fa-battery-three-quarters:before { - content: "\f241"; } - -.fa-battle-net:before { - content: "\f835"; } - -.fa-bed:before { - content: "\f236"; } - -.fa-beer:before { - content: "\f0fc"; } - -.fa-behance:before { - content: "\f1b4"; } - -.fa-behance-square:before { - content: "\f1b5"; } - -.fa-bell:before { - content: "\f0f3"; } - -.fa-bell-slash:before { - content: "\f1f6"; } - -.fa-bezier-curve:before { - content: "\f55b"; } - -.fa-bible:before { - content: "\f647"; } - -.fa-bicycle:before { - content: "\f206"; } - -.fa-biking:before { - content: "\f84a"; } - -.fa-bimobject:before { - content: "\f378"; } - -.fa-binoculars:before { - content: "\f1e5"; } - -.fa-biohazard:before { - content: "\f780"; } - -.fa-birthday-cake:before { - content: "\f1fd"; } - -.fa-bitbucket:before { - content: "\f171"; } - -.fa-bitcoin:before { - content: "\f379"; } - -.fa-bity:before { - content: "\f37a"; } - -.fa-black-tie:before { - content: "\f27e"; } - -.fa-blackberry:before { - content: "\f37b"; } - -.fa-blender:before { - content: "\f517"; } - -.fa-blender-phone:before { - content: "\f6b6"; } - -.fa-blind:before { - content: "\f29d"; } - -.fa-blog:before { - content: "\f781"; } - -.fa-blogger:before { - content: "\f37c"; } - -.fa-blogger-b:before { - content: "\f37d"; } - -.fa-bluetooth:before { - content: "\f293"; } - -.fa-bluetooth-b:before { - content: "\f294"; } - -.fa-bold:before { - content: "\f032"; } - -.fa-bolt:before { - content: "\f0e7"; } - -.fa-bomb:before { - content: "\f1e2"; } - -.fa-bone:before { - content: "\f5d7"; } - -.fa-bong:before { - content: "\f55c"; } - -.fa-book:before { - content: "\f02d"; } - -.fa-book-dead:before { - content: "\f6b7"; } - -.fa-book-medical:before { - content: "\f7e6"; } - -.fa-book-open:before { - content: "\f518"; } - -.fa-book-reader:before { - content: "\f5da"; } - -.fa-bookmark:before { - content: "\f02e"; } - -.fa-bootstrap:before { - content: "\f836"; } - -.fa-border-all:before { - content: "\f84c"; } - -.fa-border-none:before { - content: "\f850"; } - -.fa-border-style:before { - content: "\f853"; } - -.fa-bowling-ball:before { - content: "\f436"; } - -.fa-box:before { - content: "\f466"; } - -.fa-box-open:before { - content: "\f49e"; } - -.fa-boxes:before { - content: "\f468"; } - -.fa-braille:before { - content: "\f2a1"; } - -.fa-brain:before { - content: "\f5dc"; } - -.fa-bread-slice:before { - content: "\f7ec"; } - -.fa-briefcase:before { - content: "\f0b1"; } - -.fa-briefcase-medical:before { - content: "\f469"; } - -.fa-broadcast-tower:before { - content: "\f519"; } - -.fa-broom:before { - content: "\f51a"; } - -.fa-brush:before { - content: "\f55d"; } - -.fa-btc:before { - content: "\f15a"; } - -.fa-buffer:before { - content: "\f837"; } - -.fa-bug:before { - content: "\f188"; } - -.fa-building:before { - content: "\f1ad"; } - -.fa-bullhorn:before { - content: "\f0a1"; } - -.fa-bullseye:before { - content: "\f140"; } - -.fa-burn:before { - content: "\f46a"; } - -.fa-buromobelexperte:before { - content: "\f37f"; } - -.fa-bus:before { - content: "\f207"; } - -.fa-bus-alt:before { - content: "\f55e"; } - -.fa-business-time:before { - content: "\f64a"; } - -.fa-buysellads:before { - content: "\f20d"; } - -.fa-calculator:before { - content: "\f1ec"; } - -.fa-calendar:before { - content: "\f133"; } - -.fa-calendar-alt:before { - content: "\f073"; } - -.fa-calendar-check:before { - content: "\f274"; } - -.fa-calendar-day:before { - content: "\f783"; } - -.fa-calendar-minus:before { - content: "\f272"; } - -.fa-calendar-plus:before { - content: "\f271"; } - -.fa-calendar-times:before { - content: "\f273"; } - -.fa-calendar-week:before { - content: "\f784"; } - -.fa-camera:before { - content: "\f030"; } - -.fa-camera-retro:before { - content: "\f083"; } - -.fa-campground:before { - content: "\f6bb"; } - -.fa-canadian-maple-leaf:before { - content: "\f785"; } - -.fa-candy-cane:before { - content: "\f786"; } - -.fa-cannabis:before { - content: "\f55f"; } - -.fa-capsules:before { - content: "\f46b"; } - -.fa-car:before { - content: "\f1b9"; } - -.fa-car-alt:before { - content: "\f5de"; } - -.fa-car-battery:before { - content: "\f5df"; } - -.fa-car-crash:before { - content: "\f5e1"; } - -.fa-car-side:before { - content: "\f5e4"; } - -.fa-caret-down:before { - content: "\f0d7"; } - -.fa-caret-left:before { - content: "\f0d9"; } - -.fa-caret-right:before { - content: "\f0da"; } - -.fa-caret-square-down:before { - content: "\f150"; } - -.fa-caret-square-left:before { - content: "\f191"; } - -.fa-caret-square-right:before { - content: "\f152"; } - -.fa-caret-square-up:before { - content: "\f151"; } - -.fa-caret-up:before { - content: "\f0d8"; } - -.fa-carrot:before { - content: "\f787"; } - -.fa-cart-arrow-down:before { - content: "\f218"; } - -.fa-cart-plus:before { - content: "\f217"; } - -.fa-cash-register:before { - content: "\f788"; } - -.fa-cat:before { - content: "\f6be"; } - -.fa-cc-amazon-pay:before { - content: "\f42d"; } - -.fa-cc-amex:before { - content: "\f1f3"; } - -.fa-cc-apple-pay:before { - content: "\f416"; } - -.fa-cc-diners-club:before { - content: "\f24c"; } - -.fa-cc-discover:before { - content: "\f1f2"; } - -.fa-cc-jcb:before { - content: "\f24b"; } - -.fa-cc-mastercard:before { - content: "\f1f1"; } - -.fa-cc-paypal:before { - content: "\f1f4"; } - -.fa-cc-stripe:before { - content: "\f1f5"; } - -.fa-cc-visa:before { - content: "\f1f0"; } - -.fa-centercode:before { - content: "\f380"; } - -.fa-centos:before { - content: "\f789"; } - -.fa-certificate:before { - content: "\f0a3"; } - -.fa-chair:before { - content: "\f6c0"; } - -.fa-chalkboard:before { - content: "\f51b"; } - -.fa-chalkboard-teacher:before { - content: "\f51c"; } - -.fa-charging-station:before { - content: "\f5e7"; } - -.fa-chart-area:before { - content: "\f1fe"; } - -.fa-chart-bar:before { - content: "\f080"; } - -.fa-chart-line:before { - content: "\f201"; } - -.fa-chart-pie:before { - content: "\f200"; } - -.fa-check:before { - content: "\f00c"; } - -.fa-check-circle:before { - content: "\f058"; } - -.fa-check-double:before { - content: "\f560"; } - -.fa-check-square:before { - content: "\f14a"; } - -.fa-cheese:before { - content: "\f7ef"; } - -.fa-chess:before { - content: "\f439"; } - -.fa-chess-bishop:before { - content: "\f43a"; } - -.fa-chess-board:before { - content: "\f43c"; } - -.fa-chess-king:before { - content: "\f43f"; } - -.fa-chess-knight:before { - content: "\f441"; } - -.fa-chess-pawn:before { - content: "\f443"; } - -.fa-chess-queen:before { - content: "\f445"; } - -.fa-chess-rook:before { - content: "\f447"; } - -.fa-chevron-circle-down:before { - content: "\f13a"; } - -.fa-chevron-circle-left:before { - content: "\f137"; } - -.fa-chevron-circle-right:before { - content: "\f138"; } - -.fa-chevron-circle-up:before { - content: "\f139"; } - -.fa-chevron-down:before { - content: "\f078"; } - -.fa-chevron-left:before { - content: "\f053"; } - -.fa-chevron-right:before { - content: "\f054"; } - -.fa-chevron-up:before { - content: "\f077"; } - -.fa-child:before { - content: "\f1ae"; } - -.fa-chrome:before { - content: "\f268"; } - -.fa-chromecast:before { - content: "\f838"; } - -.fa-church:before { - content: "\f51d"; } - -.fa-circle:before { - content: "\f111"; } - -.fa-circle-notch:before { - content: "\f1ce"; } - -.fa-city:before { - content: "\f64f"; } - -.fa-clinic-medical:before { - content: "\f7f2"; } - -.fa-clipboard:before { - content: "\f328"; } - -.fa-clipboard-check:before { - content: "\f46c"; } - -.fa-clipboard-list:before { - content: "\f46d"; } - -.fa-clock:before { - content: "\f017"; } - -.fa-clone:before { - content: "\f24d"; } - -.fa-closed-captioning:before { - content: "\f20a"; } - -.fa-cloud:before { - content: "\f0c2"; } - -.fa-cloud-download-alt:before { - content: "\f381"; } - -.fa-cloud-meatball:before { - content: "\f73b"; } - -.fa-cloud-moon:before { - content: "\f6c3"; } - -.fa-cloud-moon-rain:before { - content: "\f73c"; } - -.fa-cloud-rain:before { - content: "\f73d"; } - -.fa-cloud-showers-heavy:before { - content: "\f740"; } - -.fa-cloud-sun:before { - content: "\f6c4"; } - -.fa-cloud-sun-rain:before { - content: "\f743"; } - -.fa-cloud-upload-alt:before { - content: "\f382"; } - -.fa-cloudscale:before { - content: "\f383"; } - -.fa-cloudsmith:before { - content: "\f384"; } - -.fa-cloudversify:before { - content: "\f385"; } - -.fa-cocktail:before { - content: "\f561"; } - -.fa-code:before { - content: "\f121"; } - -.fa-code-branch:before { - content: "\f126"; } - -.fa-codepen:before { - content: "\f1cb"; } - -.fa-codiepie:before { - content: "\f284"; } - -.fa-coffee:before { - content: "\f0f4"; } - -.fa-cog:before { - content: "\f013"; } - -.fa-cogs:before { - content: "\f085"; } - -.fa-coins:before { - content: "\f51e"; } - -.fa-columns:before { - content: "\f0db"; } - -.fa-comment:before { - content: "\f075"; } - -.fa-comment-alt:before { - content: "\f27a"; } - -.fa-comment-dollar:before { - content: "\f651"; } - -.fa-comment-dots:before { - content: "\f4ad"; } - -.fa-comment-medical:before { - content: "\f7f5"; } - -.fa-comment-slash:before { - content: "\f4b3"; } - -.fa-comments:before { - content: "\f086"; } - -.fa-comments-dollar:before { - content: "\f653"; } - -.fa-compact-disc:before { - content: "\f51f"; } - -.fa-compass:before { - content: "\f14e"; } - -.fa-compress:before { - content: "\f066"; } - -.fa-compress-arrows-alt:before { - content: "\f78c"; } - -.fa-concierge-bell:before { - content: "\f562"; } - -.fa-confluence:before { - content: "\f78d"; } - -.fa-connectdevelop:before { - content: "\f20e"; } - -.fa-contao:before { - content: "\f26d"; } - -.fa-cookie:before { - content: "\f563"; } - -.fa-cookie-bite:before { - content: "\f564"; } - -.fa-copy:before { - content: "\f0c5"; } - -.fa-copyright:before { - content: "\f1f9"; } - -.fa-cotton-bureau:before { - content: "\f89e"; } - -.fa-couch:before { - content: "\f4b8"; } - -.fa-cpanel:before { - content: "\f388"; } - -.fa-creative-commons:before { - content: "\f25e"; } - -.fa-creative-commons-by:before { - content: "\f4e7"; } - -.fa-creative-commons-nc:before { - content: "\f4e8"; } - -.fa-creative-commons-nc-eu:before { - content: "\f4e9"; } - -.fa-creative-commons-nc-jp:before { - content: "\f4ea"; } - -.fa-creative-commons-nd:before { - content: "\f4eb"; } - -.fa-creative-commons-pd:before { - content: "\f4ec"; } - -.fa-creative-commons-pd-alt:before { - content: "\f4ed"; } - -.fa-creative-commons-remix:before { - content: "\f4ee"; } - -.fa-creative-commons-sa:before { - content: "\f4ef"; } - -.fa-creative-commons-sampling:before { - content: "\f4f0"; } - -.fa-creative-commons-sampling-plus:before { - content: "\f4f1"; } - -.fa-creative-commons-share:before { - content: "\f4f2"; } - -.fa-creative-commons-zero:before { - content: "\f4f3"; } - -.fa-credit-card:before { - content: "\f09d"; } - -.fa-critical-role:before { - content: "\f6c9"; } - -.fa-crop:before { - content: "\f125"; } - -.fa-crop-alt:before { - content: "\f565"; } - -.fa-cross:before { - content: "\f654"; } - -.fa-crosshairs:before { - content: "\f05b"; } - -.fa-crow:before { - content: "\f520"; } - -.fa-crown:before { - content: "\f521"; } - -.fa-crutch:before { - content: "\f7f7"; } - -.fa-css3:before { - content: "\f13c"; } - -.fa-css3-alt:before { - content: "\f38b"; } - -.fa-cube:before { - content: "\f1b2"; } - -.fa-cubes:before { - content: "\f1b3"; } - -.fa-cut:before { - content: "\f0c4"; } - -.fa-cuttlefish:before { - content: "\f38c"; } - -.fa-d-and-d:before { - content: "\f38d"; } - -.fa-d-and-d-beyond:before { - content: "\f6ca"; } - -.fa-dashcube:before { - content: "\f210"; } - -.fa-database:before { - content: "\f1c0"; } - -.fa-deaf:before { - content: "\f2a4"; } - -.fa-delicious:before { - content: "\f1a5"; } - -.fa-democrat:before { - content: "\f747"; } - -.fa-deploydog:before { - content: "\f38e"; } - -.fa-deskpro:before { - content: "\f38f"; } - -.fa-desktop:before { - content: "\f108"; } - -.fa-dev:before { - content: "\f6cc"; } - -.fa-deviantart:before { - content: "\f1bd"; } - -.fa-dharmachakra:before { - content: "\f655"; } - -.fa-dhl:before { - content: "\f790"; } - -.fa-diagnoses:before { - content: "\f470"; } - -.fa-diaspora:before { - content: "\f791"; } - -.fa-dice:before { - content: "\f522"; } - -.fa-dice-d20:before { - content: "\f6cf"; } - -.fa-dice-d6:before { - content: "\f6d1"; } - -.fa-dice-five:before { - content: "\f523"; } - -.fa-dice-four:before { - content: "\f524"; } - -.fa-dice-one:before { - content: "\f525"; } - -.fa-dice-six:before { - content: "\f526"; } - -.fa-dice-three:before { - content: "\f527"; } - -.fa-dice-two:before { - content: "\f528"; } - -.fa-digg:before { - content: "\f1a6"; } - -.fa-digital-ocean:before { - content: "\f391"; } - -.fa-digital-tachograph:before { - content: "\f566"; } - -.fa-directions:before { - content: "\f5eb"; } - -.fa-discord:before { - content: "\f392"; } - -.fa-discourse:before { - content: "\f393"; } - -.fa-divide:before { - content: "\f529"; } - -.fa-dizzy:before { - content: "\f567"; } - -.fa-dna:before { - content: "\f471"; } - -.fa-dochub:before { - content: "\f394"; } - -.fa-docker:before { - content: "\f395"; } - -.fa-dog:before { - content: "\f6d3"; } - -.fa-dollar-sign:before { - content: "\f155"; } - -.fa-dolly:before { - content: "\f472"; } - -.fa-dolly-flatbed:before { - content: "\f474"; } - -.fa-donate:before { - content: "\f4b9"; } - -.fa-door-closed:before { - content: "\f52a"; } - -.fa-door-open:before { - content: "\f52b"; } - -.fa-dot-circle:before { - content: "\f192"; } - -.fa-dove:before { - content: "\f4ba"; } - -.fa-download:before { - content: "\f019"; } - -.fa-draft2digital:before { - content: "\f396"; } - -.fa-drafting-compass:before { - content: "\f568"; } - -.fa-dragon:before { - content: "\f6d5"; } - -.fa-draw-polygon:before { - content: "\f5ee"; } - -.fa-dribbble:before { - content: "\f17d"; } - -.fa-dribbble-square:before { - content: "\f397"; } - -.fa-dropbox:before { - content: "\f16b"; } - -.fa-drum:before { - content: "\f569"; } - -.fa-drum-steelpan:before { - content: "\f56a"; } - -.fa-drumstick-bite:before { - content: "\f6d7"; } - -.fa-drupal:before { - content: "\f1a9"; } - -.fa-dumbbell:before { - content: "\f44b"; } - -.fa-dumpster:before { - content: "\f793"; } - -.fa-dumpster-fire:before { - content: "\f794"; } - -.fa-dungeon:before { - content: "\f6d9"; } - -.fa-dyalog:before { - content: "\f399"; } - -.fa-earlybirds:before { - content: "\f39a"; } - -.fa-ebay:before { - content: "\f4f4"; } - -.fa-edge:before { - content: "\f282"; } - -.fa-edit:before { - content: "\f044"; } - -.fa-egg:before { - content: "\f7fb"; } - -.fa-eject:before { - content: "\f052"; } - -.fa-elementor:before { - content: "\f430"; } - -.fa-ellipsis-h:before { - content: "\f141"; } - -.fa-ellipsis-v:before { - content: "\f142"; } - -.fa-ello:before { - content: "\f5f1"; } - -.fa-ember:before { - content: "\f423"; } - -.fa-empire:before { - content: "\f1d1"; } - -.fa-envelope:before { - content: "\f0e0"; } - -.fa-envelope-open:before { - content: "\f2b6"; } - -.fa-envelope-open-text:before { - content: "\f658"; } - -.fa-envelope-square:before { - content: "\f199"; } - -.fa-envira:before { - content: "\f299"; } - -.fa-equals:before { - content: "\f52c"; } - -.fa-eraser:before { - content: "\f12d"; } - -.fa-erlang:before { - content: "\f39d"; } - -.fa-ethereum:before { - content: "\f42e"; } - -.fa-ethernet:before { - content: "\f796"; } - -.fa-etsy:before { - content: "\f2d7"; } - -.fa-euro-sign:before { - content: "\f153"; } - -.fa-evernote:before { - content: "\f839"; } - -.fa-exchange-alt:before { - content: "\f362"; } - -.fa-exclamation:before { - content: "\f12a"; } - -.fa-exclamation-circle:before { - content: "\f06a"; } - -.fa-exclamation-triangle:before { - content: "\f071"; } - -.fa-expand:before { - content: "\f065"; } - -.fa-expand-arrows-alt:before { - content: "\f31e"; } - -.fa-expeditedssl:before { - content: "\f23e"; } - -.fa-external-link-alt:before { - content: "\f35d"; } - -.fa-external-link-square-alt:before { - content: "\f360"; } - -.fa-eye:before { - content: "\f06e"; } - -.fa-eye-dropper:before { - content: "\f1fb"; } - -.fa-eye-slash:before { - content: "\f070"; } - -.fa-facebook:before { - content: "\f09a"; } - -.fa-facebook-f:before { - content: "\f39e"; } - -.fa-facebook-messenger:before { - content: "\f39f"; } - -.fa-facebook-square:before { - content: "\f082"; } - -.fa-fan:before { - content: "\f863"; } - -.fa-fantasy-flight-games:before { - content: "\f6dc"; } - -.fa-fast-backward:before { - content: "\f049"; } - -.fa-fast-forward:before { - content: "\f050"; } - -.fa-fax:before { - content: "\f1ac"; } - -.fa-feather:before { - content: "\f52d"; } - -.fa-feather-alt:before { - content: "\f56b"; } - -.fa-fedex:before { - content: "\f797"; } - -.fa-fedora:before { - content: "\f798"; } - -.fa-female:before { - content: "\f182"; } - -.fa-fighter-jet:before { - content: "\f0fb"; } - -.fa-figma:before { - content: "\f799"; } - -.fa-file:before { - content: "\f15b"; } - -.fa-file-alt:before { - content: "\f15c"; } - -.fa-file-archive:before { - content: "\f1c6"; } - -.fa-file-audio:before { - content: "\f1c7"; } - -.fa-file-code:before { - content: "\f1c9"; } - -.fa-file-contract:before { - content: "\f56c"; } - -.fa-file-csv:before { - content: "\f6dd"; } - -.fa-file-download:before { - content: "\f56d"; } - -.fa-file-excel:before { - content: "\f1c3"; } - -.fa-file-export:before { - content: "\f56e"; } - -.fa-file-image:before { - content: "\f1c5"; } - -.fa-file-import:before { - content: "\f56f"; } - -.fa-file-invoice:before { - content: "\f570"; } - -.fa-file-invoice-dollar:before { - content: "\f571"; } - -.fa-file-medical:before { - content: "\f477"; } - -.fa-file-medical-alt:before { - content: "\f478"; } - -.fa-file-pdf:before { - content: "\f1c1"; } - -.fa-file-powerpoint:before { - content: "\f1c4"; } - -.fa-file-prescription:before { - content: "\f572"; } - -.fa-file-signature:before { - content: "\f573"; } - -.fa-file-upload:before { - content: "\f574"; } - -.fa-file-video:before { - content: "\f1c8"; } - -.fa-file-word:before { - content: "\f1c2"; } - -.fa-fill:before { - content: "\f575"; } - -.fa-fill-drip:before { - content: "\f576"; } - -.fa-film:before { - content: "\f008"; } - -.fa-filter:before { - content: "\f0b0"; } - -.fa-fingerprint:before { - content: "\f577"; } - -.fa-fire:before { - content: "\f06d"; } - -.fa-fire-alt:before { - content: "\f7e4"; } - -.fa-fire-extinguisher:before { - content: "\f134"; } - -.fa-firefox:before { - content: "\f269"; } - -.fa-first-aid:before { - content: "\f479"; } - -.fa-first-order:before { - content: "\f2b0"; } - -.fa-first-order-alt:before { - content: "\f50a"; } - -.fa-firstdraft:before { - content: "\f3a1"; } - -.fa-fish:before { - content: "\f578"; } - -.fa-fist-raised:before { - content: "\f6de"; } - -.fa-flag:before { - content: "\f024"; } - -.fa-flag-checkered:before { - content: "\f11e"; } - -.fa-flag-usa:before { - content: "\f74d"; } - -.fa-flask:before { - content: "\f0c3"; } - -.fa-flickr:before { - content: "\f16e"; } - -.fa-flipboard:before { - content: "\f44d"; } - -.fa-flushed:before { - content: "\f579"; } - -.fa-fly:before { - content: "\f417"; } - -.fa-folder:before { - content: "\f07b"; } - -.fa-folder-minus:before { - content: "\f65d"; } - -.fa-folder-open:before { - content: "\f07c"; } - -.fa-folder-plus:before { - content: "\f65e"; } - -.fa-font:before { - content: "\f031"; } - -.fa-font-awesome:before { - content: "\f2b4"; } - -.fa-font-awesome-alt:before { - content: "\f35c"; } - -.fa-font-awesome-flag:before { - content: "\f425"; } - -.fa-font-awesome-logo-full:before { - content: "\f4e6"; } - -.fa-fonticons:before { - content: "\f280"; } - -.fa-fonticons-fi:before { - content: "\f3a2"; } - -.fa-football-ball:before { - content: "\f44e"; } - -.fa-fort-awesome:before { - content: "\f286"; } - -.fa-fort-awesome-alt:before { - content: "\f3a3"; } - -.fa-forumbee:before { - content: "\f211"; } - -.fa-forward:before { - content: "\f04e"; } - -.fa-foursquare:before { - content: "\f180"; } - -.fa-free-code-camp:before { - content: "\f2c5"; } - -.fa-freebsd:before { - content: "\f3a4"; } - -.fa-frog:before { - content: "\f52e"; } - -.fa-frown:before { - content: "\f119"; } - -.fa-frown-open:before { - content: "\f57a"; } - -.fa-fulcrum:before { - content: "\f50b"; } - -.fa-funnel-dollar:before { - content: "\f662"; } - -.fa-futbol:before { - content: "\f1e3"; } - -.fa-galactic-republic:before { - content: "\f50c"; } - -.fa-galactic-senate:before { - content: "\f50d"; } - -.fa-gamepad:before { - content: "\f11b"; } - -.fa-gas-pump:before { - content: "\f52f"; } - -.fa-gavel:before { - content: "\f0e3"; } - -.fa-gem:before { - content: "\f3a5"; } - -.fa-genderless:before { - content: "\f22d"; } - -.fa-get-pocket:before { - content: "\f265"; } - -.fa-gg:before { - content: "\f260"; } - -.fa-gg-circle:before { - content: "\f261"; } - -.fa-ghost:before { - content: "\f6e2"; } - -.fa-gift:before { - content: "\f06b"; } - -.fa-gifts:before { - content: "\f79c"; } - -.fa-git:before { - content: "\f1d3"; } - -.fa-git-alt:before { - content: "\f841"; } - -.fa-git-square:before { - content: "\f1d2"; } - -.fa-github:before { - content: "\f09b"; } - -.fa-github-alt:before { - content: "\f113"; } - -.fa-github-square:before { - content: "\f092"; } - -.fa-gitkraken:before { - content: "\f3a6"; } - -.fa-gitlab:before { - content: "\f296"; } - -.fa-gitter:before { - content: "\f426"; } - -.fa-glass-cheers:before { - content: "\f79f"; } - -.fa-glass-martini:before { - content: "\f000"; } - -.fa-glass-martini-alt:before { - content: "\f57b"; } - -.fa-glass-whiskey:before { - content: "\f7a0"; } - -.fa-glasses:before { - content: "\f530"; } - -.fa-glide:before { - content: "\f2a5"; } - -.fa-glide-g:before { - content: "\f2a6"; } - -.fa-globe:before { - content: "\f0ac"; } - -.fa-globe-africa:before { - content: "\f57c"; } - -.fa-globe-americas:before { - content: "\f57d"; } - -.fa-globe-asia:before { - content: "\f57e"; } - -.fa-globe-europe:before { - content: "\f7a2"; } - -.fa-gofore:before { - content: "\f3a7"; } - -.fa-golf-ball:before { - content: "\f450"; } - -.fa-goodreads:before { - content: "\f3a8"; } - -.fa-goodreads-g:before { - content: "\f3a9"; } - -.fa-google:before { - content: "\f1a0"; } - -.fa-google-drive:before { - content: "\f3aa"; } - -.fa-google-play:before { - content: "\f3ab"; } - -.fa-google-plus:before { - content: "\f2b3"; } - -.fa-google-plus-g:before { - content: "\f0d5"; } - -.fa-google-plus-square:before { - content: "\f0d4"; } - -.fa-google-wallet:before { - content: "\f1ee"; } - -.fa-gopuram:before { - content: "\f664"; } - -.fa-graduation-cap:before { - content: "\f19d"; } - -.fa-gratipay:before { - content: "\f184"; } - -.fa-grav:before { - content: "\f2d6"; } - -.fa-greater-than:before { - content: "\f531"; } - -.fa-greater-than-equal:before { - content: "\f532"; } - -.fa-grimace:before { - content: "\f57f"; } - -.fa-grin:before { - content: "\f580"; } - -.fa-grin-alt:before { - content: "\f581"; } - -.fa-grin-beam:before { - content: "\f582"; } - -.fa-grin-beam-sweat:before { - content: "\f583"; } - -.fa-grin-hearts:before { - content: "\f584"; } - -.fa-grin-squint:before { - content: "\f585"; } - -.fa-grin-squint-tears:before { - content: "\f586"; } - -.fa-grin-stars:before { - content: "\f587"; } - -.fa-grin-tears:before { - content: "\f588"; } - -.fa-grin-tongue:before { - content: "\f589"; } - -.fa-grin-tongue-squint:before { - content: "\f58a"; } - -.fa-grin-tongue-wink:before { - content: "\f58b"; } - -.fa-grin-wink:before { - content: "\f58c"; } - -.fa-grip-horizontal:before { - content: "\f58d"; } - -.fa-grip-lines:before { - content: "\f7a4"; } - -.fa-grip-lines-vertical:before { - content: "\f7a5"; } - -.fa-grip-vertical:before { - content: "\f58e"; } - -.fa-gripfire:before { - content: "\f3ac"; } - -.fa-grunt:before { - content: "\f3ad"; } - -.fa-guitar:before { - content: "\f7a6"; } - -.fa-gulp:before { - content: "\f3ae"; } - -.fa-h-square:before { - content: "\f0fd"; } - -.fa-hacker-news:before { - content: "\f1d4"; } - -.fa-hacker-news-square:before { - content: "\f3af"; } - -.fa-hackerrank:before { - content: "\f5f7"; } - -.fa-hamburger:before { - content: "\f805"; } - -.fa-hammer:before { - content: "\f6e3"; } - -.fa-hamsa:before { - content: "\f665"; } - -.fa-hand-holding:before { - content: "\f4bd"; } - -.fa-hand-holding-heart:before { - content: "\f4be"; } - -.fa-hand-holding-usd:before { - content: "\f4c0"; } - -.fa-hand-lizard:before { - content: "\f258"; } - -.fa-hand-middle-finger:before { - content: "\f806"; } - -.fa-hand-paper:before { - content: "\f256"; } - -.fa-hand-peace:before { - content: "\f25b"; } - -.fa-hand-point-down:before { - content: "\f0a7"; } - -.fa-hand-point-left:before { - content: "\f0a5"; } - -.fa-hand-point-right:before { - content: "\f0a4"; } - -.fa-hand-point-up:before { - content: "\f0a6"; } - -.fa-hand-pointer:before { - content: "\f25a"; } - -.fa-hand-rock:before { - content: "\f255"; } - -.fa-hand-scissors:before { - content: "\f257"; } - -.fa-hand-spock:before { - content: "\f259"; } - -.fa-hands:before { - content: "\f4c2"; } - -.fa-hands-helping:before { - content: "\f4c4"; } - -.fa-handshake:before { - content: "\f2b5"; } - -.fa-hanukiah:before { - content: "\f6e6"; } - -.fa-hard-hat:before { - content: "\f807"; } - -.fa-hashtag:before { - content: "\f292"; } - -.fa-hat-wizard:before { - content: "\f6e8"; } - -.fa-haykal:before { - content: "\f666"; } - -.fa-hdd:before { - content: "\f0a0"; } - -.fa-heading:before { - content: "\f1dc"; } - -.fa-headphones:before { - content: "\f025"; } - -.fa-headphones-alt:before { - content: "\f58f"; } - -.fa-headset:before { - content: "\f590"; } - -.fa-heart:before { - content: "\f004"; } - -.fa-heart-broken:before { - content: "\f7a9"; } - -.fa-heartbeat:before { - content: "\f21e"; } - -.fa-helicopter:before { - content: "\f533"; } - -.fa-highlighter:before { - content: "\f591"; } - -.fa-hiking:before { - content: "\f6ec"; } - -.fa-hippo:before { - content: "\f6ed"; } - -.fa-hips:before { - content: "\f452"; } - -.fa-hire-a-helper:before { - content: "\f3b0"; } - -.fa-history:before { - content: "\f1da"; } - -.fa-hockey-puck:before { - content: "\f453"; } - -.fa-holly-berry:before { - content: "\f7aa"; } - -.fa-home:before { - content: "\f015"; } - -.fa-hooli:before { - content: "\f427"; } - -.fa-hornbill:before { - content: "\f592"; } - -.fa-horse:before { - content: "\f6f0"; } - -.fa-horse-head:before { - content: "\f7ab"; } - -.fa-hospital:before { - content: "\f0f8"; } - -.fa-hospital-alt:before { - content: "\f47d"; } - -.fa-hospital-symbol:before { - content: "\f47e"; } - -.fa-hot-tub:before { - content: "\f593"; } - -.fa-hotdog:before { - content: "\f80f"; } - -.fa-hotel:before { - content: "\f594"; } - -.fa-hotjar:before { - content: "\f3b1"; } - -.fa-hourglass:before { - content: "\f254"; } - -.fa-hourglass-end:before { - content: "\f253"; } - -.fa-hourglass-half:before { - content: "\f252"; } - -.fa-hourglass-start:before { - content: "\f251"; } - -.fa-house-damage:before { - content: "\f6f1"; } - -.fa-houzz:before { - content: "\f27c"; } - -.fa-hryvnia:before { - content: "\f6f2"; } - -.fa-html5:before { - content: "\f13b"; } - -.fa-hubspot:before { - content: "\f3b2"; } - -.fa-i-cursor:before { - content: "\f246"; } - -.fa-ice-cream:before { - content: "\f810"; } - -.fa-icicles:before { - content: "\f7ad"; } - -.fa-icons:before { - content: "\f86d"; } - -.fa-id-badge:before { - content: "\f2c1"; } - -.fa-id-card:before { - content: "\f2c2"; } - -.fa-id-card-alt:before { - content: "\f47f"; } - -.fa-igloo:before { - content: "\f7ae"; } - -.fa-image:before { - content: "\f03e"; } - -.fa-images:before { - content: "\f302"; } - -.fa-imdb:before { - content: "\f2d8"; } - -.fa-inbox:before { - content: "\f01c"; } - -.fa-indent:before { - content: "\f03c"; } - -.fa-industry:before { - content: "\f275"; } - -.fa-infinity:before { - content: "\f534"; } - -.fa-info:before { - content: "\f129"; } - -.fa-info-circle:before { - content: "\f05a"; } - -.fa-instagram:before { - content: "\f16d"; } - -.fa-intercom:before { - content: "\f7af"; } - -.fa-internet-explorer:before { - content: "\f26b"; } - -.fa-invision:before { - content: "\f7b0"; } - -.fa-ioxhost:before { - content: "\f208"; } - -.fa-italic:before { - content: "\f033"; } - -.fa-itch-io:before { - content: "\f83a"; } - -.fa-itunes:before { - content: "\f3b4"; } - -.fa-itunes-note:before { - content: "\f3b5"; } - -.fa-java:before { - content: "\f4e4"; } - -.fa-jedi:before { - content: "\f669"; } - -.fa-jedi-order:before { - content: "\f50e"; } - -.fa-jenkins:before { - content: "\f3b6"; } - -.fa-jira:before { - content: "\f7b1"; } - -.fa-joget:before { - content: "\f3b7"; } - -.fa-joint:before { - content: "\f595"; } - -.fa-joomla:before { - content: "\f1aa"; } - -.fa-journal-whills:before { - content: "\f66a"; } - -.fa-js:before { - content: "\f3b8"; } - -.fa-js-square:before { - content: "\f3b9"; } - -.fa-jsfiddle:before { - content: "\f1cc"; } - -.fa-kaaba:before { - content: "\f66b"; } - -.fa-kaggle:before { - content: "\f5fa"; } - -.fa-key:before { - content: "\f084"; } - -.fa-keybase:before { - content: "\f4f5"; } - -.fa-keyboard:before { - content: "\f11c"; } - -.fa-keycdn:before { - content: "\f3ba"; } - -.fa-khanda:before { - content: "\f66d"; } - -.fa-kickstarter:before { - content: "\f3bb"; } - -.fa-kickstarter-k:before { - content: "\f3bc"; } - -.fa-kiss:before { - content: "\f596"; } - -.fa-kiss-beam:before { - content: "\f597"; } - -.fa-kiss-wink-heart:before { - content: "\f598"; } - -.fa-kiwi-bird:before { - content: "\f535"; } - -.fa-korvue:before { - content: "\f42f"; } - -.fa-landmark:before { - content: "\f66f"; } - -.fa-language:before { - content: "\f1ab"; } - -.fa-laptop:before { - content: "\f109"; } - -.fa-laptop-code:before { - content: "\f5fc"; } - -.fa-laptop-medical:before { - content: "\f812"; } - -.fa-laravel:before { - content: "\f3bd"; } - -.fa-lastfm:before { - content: "\f202"; } - -.fa-lastfm-square:before { - content: "\f203"; } - -.fa-laugh:before { - content: "\f599"; } - -.fa-laugh-beam:before { - content: "\f59a"; } - -.fa-laugh-squint:before { - content: "\f59b"; } - -.fa-laugh-wink:before { - content: "\f59c"; } - -.fa-layer-group:before { - content: "\f5fd"; } - -.fa-leaf:before { - content: "\f06c"; } - -.fa-leanpub:before { - content: "\f212"; } - -.fa-lemon:before { - content: "\f094"; } - -.fa-less:before { - content: "\f41d"; } - -.fa-less-than:before { - content: "\f536"; } - -.fa-less-than-equal:before { - content: "\f537"; } - -.fa-level-down-alt:before { - content: "\f3be"; } - -.fa-level-up-alt:before { - content: "\f3bf"; } - -.fa-life-ring:before { - content: "\f1cd"; } - -.fa-lightbulb:before { - content: "\f0eb"; } - -.fa-line:before { - content: "\f3c0"; } - -.fa-link:before { - content: "\f0c1"; } - -.fa-linkedin:before { - content: "\f08c"; } - -.fa-linkedin-in:before { - content: "\f0e1"; } - -.fa-linode:before { - content: "\f2b8"; } - -.fa-linux:before { - content: "\f17c"; } - -.fa-lira-sign:before { - content: "\f195"; } - -.fa-list:before { - content: "\f03a"; } - -.fa-list-alt:before { - content: "\f022"; } - -.fa-list-ol:before { - content: "\f0cb"; } - -.fa-list-ul:before { - content: "\f0ca"; } - -.fa-location-arrow:before { - content: "\f124"; } - -.fa-lock:before { - content: "\f023"; } - -.fa-lock-open:before { - content: "\f3c1"; } - -.fa-long-arrow-alt-down:before { - content: "\f309"; } - -.fa-long-arrow-alt-left:before { - content: "\f30a"; } - -.fa-long-arrow-alt-right:before { - content: "\f30b"; } - -.fa-long-arrow-alt-up:before { - content: "\f30c"; } - -.fa-low-vision:before { - content: "\f2a8"; } - -.fa-luggage-cart:before { - content: "\f59d"; } - -.fa-lyft:before { - content: "\f3c3"; } - -.fa-magento:before { - content: "\f3c4"; } - -.fa-magic:before { - content: "\f0d0"; } - -.fa-magnet:before { - content: "\f076"; } - -.fa-mail-bulk:before { - content: "\f674"; } - -.fa-mailchimp:before { - content: "\f59e"; } - -.fa-male:before { - content: "\f183"; } - -.fa-mandalorian:before { - content: "\f50f"; } - -.fa-map:before { - content: "\f279"; } - -.fa-map-marked:before { - content: "\f59f"; } - -.fa-map-marked-alt:before { - content: "\f5a0"; } - -.fa-map-marker:before { - content: "\f041"; } - -.fa-map-marker-alt:before { - content: "\f3c5"; } - -.fa-map-pin:before { - content: "\f276"; } - -.fa-map-signs:before { - content: "\f277"; } - -.fa-markdown:before { - content: "\f60f"; } - -.fa-marker:before { - content: "\f5a1"; } - -.fa-mars:before { - content: "\f222"; } - -.fa-mars-double:before { - content: "\f227"; } - -.fa-mars-stroke:before { - content: "\f229"; } - -.fa-mars-stroke-h:before { - content: "\f22b"; } - -.fa-mars-stroke-v:before { - content: "\f22a"; } - -.fa-mask:before { - content: "\f6fa"; } - -.fa-mastodon:before { - content: "\f4f6"; } - -.fa-maxcdn:before { - content: "\f136"; } - -.fa-medal:before { - content: "\f5a2"; } - -.fa-medapps:before { - content: "\f3c6"; } - -.fa-medium:before { - content: "\f23a"; } - -.fa-medium-m:before { - content: "\f3c7"; } - -.fa-medkit:before { - content: "\f0fa"; } - -.fa-medrt:before { - content: "\f3c8"; } - -.fa-meetup:before { - content: "\f2e0"; } - -.fa-megaport:before { - content: "\f5a3"; } - -.fa-meh:before { - content: "\f11a"; } - -.fa-meh-blank:before { - content: "\f5a4"; } - -.fa-meh-rolling-eyes:before { - content: "\f5a5"; } - -.fa-memory:before { - content: "\f538"; } - -.fa-mendeley:before { - content: "\f7b3"; } - -.fa-menorah:before { - content: "\f676"; } - -.fa-mercury:before { - content: "\f223"; } - -.fa-meteor:before { - content: "\f753"; } - -.fa-microchip:before { - content: "\f2db"; } - -.fa-microphone:before { - content: "\f130"; } - -.fa-microphone-alt:before { - content: "\f3c9"; } - -.fa-microphone-alt-slash:before { - content: "\f539"; } - -.fa-microphone-slash:before { - content: "\f131"; } - -.fa-microscope:before { - content: "\f610"; } - -.fa-microsoft:before { - content: "\f3ca"; } - -.fa-minus:before { - content: "\f068"; } - -.fa-minus-circle:before { - content: "\f056"; } - -.fa-minus-square:before { - content: "\f146"; } - -.fa-mitten:before { - content: "\f7b5"; } - -.fa-mix:before { - content: "\f3cb"; } - -.fa-mixcloud:before { - content: "\f289"; } - -.fa-mizuni:before { - content: "\f3cc"; } - -.fa-mobile:before { - content: "\f10b"; } - -.fa-mobile-alt:before { - content: "\f3cd"; } - -.fa-modx:before { - content: "\f285"; } - -.fa-monero:before { - content: "\f3d0"; } - -.fa-money-bill:before { - content: "\f0d6"; } - -.fa-money-bill-alt:before { - content: "\f3d1"; } - -.fa-money-bill-wave:before { - content: "\f53a"; } - -.fa-money-bill-wave-alt:before { - content: "\f53b"; } - -.fa-money-check:before { - content: "\f53c"; } - -.fa-money-check-alt:before { - content: "\f53d"; } - -.fa-monument:before { - content: "\f5a6"; } - -.fa-moon:before { - content: "\f186"; } - -.fa-mortar-pestle:before { - content: "\f5a7"; } - -.fa-mosque:before { - content: "\f678"; } - -.fa-motorcycle:before { - content: "\f21c"; } - -.fa-mountain:before { - content: "\f6fc"; } - -.fa-mouse-pointer:before { - content: "\f245"; } - -.fa-mug-hot:before { - content: "\f7b6"; } - -.fa-music:before { - content: "\f001"; } - -.fa-napster:before { - content: "\f3d2"; } - -.fa-neos:before { - content: "\f612"; } - -.fa-network-wired:before { - content: "\f6ff"; } - -.fa-neuter:before { - content: "\f22c"; } - -.fa-newspaper:before { - content: "\f1ea"; } - -.fa-nimblr:before { - content: "\f5a8"; } - -.fa-node:before { - content: "\f419"; } - -.fa-node-js:before { - content: "\f3d3"; } - -.fa-not-equal:before { - content: "\f53e"; } - -.fa-notes-medical:before { - content: "\f481"; } - -.fa-npm:before { - content: "\f3d4"; } - -.fa-ns8:before { - content: "\f3d5"; } - -.fa-nutritionix:before { - content: "\f3d6"; } - -.fa-object-group:before { - content: "\f247"; } - -.fa-object-ungroup:before { - content: "\f248"; } - -.fa-odnoklassniki:before { - content: "\f263"; } - -.fa-odnoklassniki-square:before { - content: "\f264"; } - -.fa-oil-can:before { - content: "\f613"; } - -.fa-old-republic:before { - content: "\f510"; } - -.fa-om:before { - content: "\f679"; } - -.fa-opencart:before { - content: "\f23d"; } - -.fa-openid:before { - content: "\f19b"; } - -.fa-opera:before { - content: "\f26a"; } - -.fa-optin-monster:before { - content: "\f23c"; } - -.fa-osi:before { - content: "\f41a"; } - -.fa-otter:before { - content: "\f700"; } - -.fa-outdent:before { - content: "\f03b"; } - -.fa-page4:before { - content: "\f3d7"; } - -.fa-pagelines:before { - content: "\f18c"; } - -.fa-pager:before { - content: "\f815"; } - -.fa-paint-brush:before { - content: "\f1fc"; } - -.fa-paint-roller:before { - content: "\f5aa"; } - -.fa-palette:before { - content: "\f53f"; } - -.fa-palfed:before { - content: "\f3d8"; } - -.fa-pallet:before { - content: "\f482"; } - -.fa-paper-plane:before { - content: "\f1d8"; } - -.fa-paperclip:before { - content: "\f0c6"; } - -.fa-parachute-box:before { - content: "\f4cd"; } - -.fa-paragraph:before { - content: "\f1dd"; } - -.fa-parking:before { - content: "\f540"; } - -.fa-passport:before { - content: "\f5ab"; } - -.fa-pastafarianism:before { - content: "\f67b"; } - -.fa-paste:before { - content: "\f0ea"; } - -.fa-patreon:before { - content: "\f3d9"; } - -.fa-pause:before { - content: "\f04c"; } - -.fa-pause-circle:before { - content: "\f28b"; } - -.fa-paw:before { - content: "\f1b0"; } - -.fa-paypal:before { - content: "\f1ed"; } - -.fa-peace:before { - content: "\f67c"; } - -.fa-pen:before { - content: "\f304"; } - -.fa-pen-alt:before { - content: "\f305"; } - -.fa-pen-fancy:before { - content: "\f5ac"; } - -.fa-pen-nib:before { - content: "\f5ad"; } - -.fa-pen-square:before { - content: "\f14b"; } - -.fa-pencil-alt:before { - content: "\f303"; } - -.fa-pencil-ruler:before { - content: "\f5ae"; } - -.fa-penny-arcade:before { - content: "\f704"; } - -.fa-people-carry:before { - content: "\f4ce"; } - -.fa-pepper-hot:before { - content: "\f816"; } - -.fa-percent:before { - content: "\f295"; } - -.fa-percentage:before { - content: "\f541"; } - -.fa-periscope:before { - content: "\f3da"; } - -.fa-person-booth:before { - content: "\f756"; } - -.fa-phabricator:before { - content: "\f3db"; } - -.fa-phoenix-framework:before { - content: "\f3dc"; } - -.fa-phoenix-squadron:before { - content: "\f511"; } - -.fa-phone:before { - content: "\f095"; } - -.fa-phone-alt:before { - content: "\f879"; } - -.fa-phone-slash:before { - content: "\f3dd"; } - -.fa-phone-square:before { - content: "\f098"; } - -.fa-phone-square-alt:before { - content: "\f87b"; } - -.fa-phone-volume:before { - content: "\f2a0"; } - -.fa-photo-video:before { - content: "\f87c"; } - -.fa-php:before { - content: "\f457"; } - -.fa-pied-piper:before { - content: "\f2ae"; } - -.fa-pied-piper-alt:before { - content: "\f1a8"; } - -.fa-pied-piper-hat:before { - content: "\f4e5"; } - -.fa-pied-piper-pp:before { - content: "\f1a7"; } - -.fa-piggy-bank:before { - content: "\f4d3"; } - -.fa-pills:before { - content: "\f484"; } - -.fa-pinterest:before { - content: "\f0d2"; } - -.fa-pinterest-p:before { - content: "\f231"; } - -.fa-pinterest-square:before { - content: "\f0d3"; } - -.fa-pizza-slice:before { - content: "\f818"; } - -.fa-place-of-worship:before { - content: "\f67f"; } - -.fa-plane:before { - content: "\f072"; } - -.fa-plane-arrival:before { - content: "\f5af"; } - -.fa-plane-departure:before { - content: "\f5b0"; } - -.fa-play:before { - content: "\f04b"; } - -.fa-play-circle:before { - content: "\f144"; } - -.fa-playstation:before { - content: "\f3df"; } - -.fa-plug:before { - content: "\f1e6"; } - -.fa-plus:before { - content: "\f067"; } - -.fa-plus-circle:before { - content: "\f055"; } - -.fa-plus-square:before { - content: "\f0fe"; } - -.fa-podcast:before { - content: "\f2ce"; } - -.fa-poll:before { - content: "\f681"; } - -.fa-poll-h:before { - content: "\f682"; } - -.fa-poo:before { - content: "\f2fe"; } - -.fa-poo-storm:before { - content: "\f75a"; } - -.fa-poop:before { - content: "\f619"; } - -.fa-portrait:before { - content: "\f3e0"; } - -.fa-pound-sign:before { - content: "\f154"; } - -.fa-power-off:before { - content: "\f011"; } - -.fa-pray:before { - content: "\f683"; } - -.fa-praying-hands:before { - content: "\f684"; } - -.fa-prescription:before { - content: "\f5b1"; } - -.fa-prescription-bottle:before { - content: "\f485"; } - -.fa-prescription-bottle-alt:before { - content: "\f486"; } - -.fa-print:before { - content: "\f02f"; } - -.fa-procedures:before { - content: "\f487"; } - -.fa-product-hunt:before { - content: "\f288"; } - -.fa-project-diagram:before { - content: "\f542"; } - -.fa-pushed:before { - content: "\f3e1"; } - -.fa-puzzle-piece:before { - content: "\f12e"; } - -.fa-python:before { - content: "\f3e2"; } - -.fa-qq:before { - content: "\f1d6"; } - -.fa-qrcode:before { - content: "\f029"; } - -.fa-question:before { - content: "\f128"; } - -.fa-question-circle:before { - content: "\f059"; } - -.fa-quidditch:before { - content: "\f458"; } - -.fa-quinscape:before { - content: "\f459"; } - -.fa-quora:before { - content: "\f2c4"; } - -.fa-quote-left:before { - content: "\f10d"; } - -.fa-quote-right:before { - content: "\f10e"; } - -.fa-quran:before { - content: "\f687"; } - -.fa-r-project:before { - content: "\f4f7"; } - -.fa-radiation:before { - content: "\f7b9"; } - -.fa-radiation-alt:before { - content: "\f7ba"; } - -.fa-rainbow:before { - content: "\f75b"; } - -.fa-random:before { - content: "\f074"; } - -.fa-raspberry-pi:before { - content: "\f7bb"; } - -.fa-ravelry:before { - content: "\f2d9"; } - -.fa-react:before { - content: "\f41b"; } - -.fa-reacteurope:before { - content: "\f75d"; } - -.fa-readme:before { - content: "\f4d5"; } - -.fa-rebel:before { - content: "\f1d0"; } - -.fa-receipt:before { - content: "\f543"; } - -.fa-recycle:before { - content: "\f1b8"; } - -.fa-red-river:before { - content: "\f3e3"; } - -.fa-reddit:before { - content: "\f1a1"; } - -.fa-reddit-alien:before { - content: "\f281"; } - -.fa-reddit-square:before { - content: "\f1a2"; } - -.fa-redhat:before { - content: "\f7bc"; } - -.fa-redo:before { - content: "\f01e"; } - -.fa-redo-alt:before { - content: "\f2f9"; } - -.fa-registered:before { - content: "\f25d"; } - -.fa-remove-format:before { - content: "\f87d"; } - -.fa-renren:before { - content: "\f18b"; } - -.fa-reply:before { - content: "\f3e5"; } - -.fa-reply-all:before { - content: "\f122"; } - -.fa-replyd:before { - content: "\f3e6"; } - -.fa-republican:before { - content: "\f75e"; } - -.fa-researchgate:before { - content: "\f4f8"; } - -.fa-resolving:before { - content: "\f3e7"; } - -.fa-restroom:before { - content: "\f7bd"; } - -.fa-retweet:before { - content: "\f079"; } - -.fa-rev:before { - content: "\f5b2"; } - -.fa-ribbon:before { - content: "\f4d6"; } - -.fa-ring:before { - content: "\f70b"; } - -.fa-road:before { - content: "\f018"; } - -.fa-robot:before { - content: "\f544"; } - -.fa-rocket:before { - content: "\f135"; } - -.fa-rocketchat:before { - content: "\f3e8"; } - -.fa-rockrms:before { - content: "\f3e9"; } - -.fa-route:before { - content: "\f4d7"; } - -.fa-rss:before { - content: "\f09e"; } - -.fa-rss-square:before { - content: "\f143"; } - -.fa-ruble-sign:before { - content: "\f158"; } - -.fa-ruler:before { - content: "\f545"; } - -.fa-ruler-combined:before { - content: "\f546"; } - -.fa-ruler-horizontal:before { - content: "\f547"; } - -.fa-ruler-vertical:before { - content: "\f548"; } - -.fa-running:before { - content: "\f70c"; } - -.fa-rupee-sign:before { - content: "\f156"; } - -.fa-sad-cry:before { - content: "\f5b3"; } - -.fa-sad-tear:before { - content: "\f5b4"; } - -.fa-safari:before { - content: "\f267"; } - -.fa-salesforce:before { - content: "\f83b"; } - -.fa-sass:before { - content: "\f41e"; } - -.fa-satellite:before { - content: "\f7bf"; } - -.fa-satellite-dish:before { - content: "\f7c0"; } - -.fa-save:before { - content: "\f0c7"; } - -.fa-schlix:before { - content: "\f3ea"; } - -.fa-school:before { - content: "\f549"; } - -.fa-screwdriver:before { - content: "\f54a"; } - -.fa-scribd:before { - content: "\f28a"; } - -.fa-scroll:before { - content: "\f70e"; } - -.fa-sd-card:before { - content: "\f7c2"; } - -.fa-search:before { - content: "\f002"; } - -.fa-search-dollar:before { - content: "\f688"; } - -.fa-search-location:before { - content: "\f689"; } - -.fa-search-minus:before { - content: "\f010"; } - -.fa-search-plus:before { - content: "\f00e"; } - -.fa-searchengin:before { - content: "\f3eb"; } - -.fa-seedling:before { - content: "\f4d8"; } - -.fa-sellcast:before { - content: "\f2da"; } - -.fa-sellsy:before { - content: "\f213"; } - -.fa-server:before { - content: "\f233"; } - -.fa-servicestack:before { - content: "\f3ec"; } - -.fa-shapes:before { - content: "\f61f"; } - -.fa-share:before { - content: "\f064"; } - -.fa-share-alt:before { - content: "\f1e0"; } - -.fa-share-alt-square:before { - content: "\f1e1"; } - -.fa-share-square:before { - content: "\f14d"; } - -.fa-shekel-sign:before { - content: "\f20b"; } - -.fa-shield-alt:before { - content: "\f3ed"; } - -.fa-ship:before { - content: "\f21a"; } - -.fa-shipping-fast:before { - content: "\f48b"; } - -.fa-shirtsinbulk:before { - content: "\f214"; } - -.fa-shoe-prints:before { - content: "\f54b"; } - -.fa-shopping-bag:before { - content: "\f290"; } - -.fa-shopping-basket:before { - content: "\f291"; } - -.fa-shopping-cart:before { - content: "\f07a"; } - -.fa-shopware:before { - content: "\f5b5"; } - -.fa-shower:before { - content: "\f2cc"; } - -.fa-shuttle-van:before { - content: "\f5b6"; } - -.fa-sign:before { - content: "\f4d9"; } - -.fa-sign-in-alt:before { - content: "\f2f6"; } - -.fa-sign-language:before { - content: "\f2a7"; } - -.fa-sign-out-alt:before { - content: "\f2f5"; } - -.fa-signal:before { - content: "\f012"; } - -.fa-signature:before { - content: "\f5b7"; } - -.fa-sim-card:before { - content: "\f7c4"; } - -.fa-simplybuilt:before { - content: "\f215"; } - -.fa-sistrix:before { - content: "\f3ee"; } - -.fa-sitemap:before { - content: "\f0e8"; } - -.fa-sith:before { - content: "\f512"; } - -.fa-skating:before { - content: "\f7c5"; } - -.fa-sketch:before { - content: "\f7c6"; } - -.fa-skiing:before { - content: "\f7c9"; } - -.fa-skiing-nordic:before { - content: "\f7ca"; } - -.fa-skull:before { - content: "\f54c"; } - -.fa-skull-crossbones:before { - content: "\f714"; } - -.fa-skyatlas:before { - content: "\f216"; } - -.fa-skype:before { - content: "\f17e"; } - -.fa-slack:before { - content: "\f198"; } - -.fa-slack-hash:before { - content: "\f3ef"; } - -.fa-slash:before { - content: "\f715"; } - -.fa-sleigh:before { - content: "\f7cc"; } - -.fa-sliders-h:before { - content: "\f1de"; } - -.fa-slideshare:before { - content: "\f1e7"; } - -.fa-smile:before { - content: "\f118"; } - -.fa-smile-beam:before { - content: "\f5b8"; } - -.fa-smile-wink:before { - content: "\f4da"; } - -.fa-smog:before { - content: "\f75f"; } - -.fa-smoking:before { - content: "\f48d"; } - -.fa-smoking-ban:before { - content: "\f54d"; } - -.fa-sms:before { - content: "\f7cd"; } - -.fa-snapchat:before { - content: "\f2ab"; } - -.fa-snapchat-ghost:before { - content: "\f2ac"; } - -.fa-snapchat-square:before { - content: "\f2ad"; } - -.fa-snowboarding:before { - content: "\f7ce"; } - -.fa-snowflake:before { - content: "\f2dc"; } - -.fa-snowman:before { - content: "\f7d0"; } - -.fa-snowplow:before { - content: "\f7d2"; } - -.fa-socks:before { - content: "\f696"; } - -.fa-solar-panel:before { - content: "\f5ba"; } - -.fa-sort:before { - content: "\f0dc"; } - -.fa-sort-alpha-down:before { - content: "\f15d"; } - -.fa-sort-alpha-down-alt:before { - content: "\f881"; } - -.fa-sort-alpha-up:before { - content: "\f15e"; } - -.fa-sort-alpha-up-alt:before { - content: "\f882"; } - -.fa-sort-amount-down:before { - content: "\f160"; } - -.fa-sort-amount-down-alt:before { - content: "\f884"; } - -.fa-sort-amount-up:before { - content: "\f161"; } - -.fa-sort-amount-up-alt:before { - content: "\f885"; } - -.fa-sort-down:before { - content: "\f0dd"; } - -.fa-sort-numeric-down:before { - content: "\f162"; } - -.fa-sort-numeric-down-alt:before { - content: "\f886"; } - -.fa-sort-numeric-up:before { - content: "\f163"; } - -.fa-sort-numeric-up-alt:before { - content: "\f887"; } - -.fa-sort-up:before { - content: "\f0de"; } - -.fa-soundcloud:before { - content: "\f1be"; } - -.fa-sourcetree:before { - content: "\f7d3"; } - -.fa-spa:before { - content: "\f5bb"; } - -.fa-space-shuttle:before { - content: "\f197"; } - -.fa-speakap:before { - content: "\f3f3"; } - -.fa-speaker-deck:before { - content: "\f83c"; } - -.fa-spell-check:before { - content: "\f891"; } - -.fa-spider:before { - content: "\f717"; } - -.fa-spinner:before { - content: "\f110"; } - -.fa-splotch:before { - content: "\f5bc"; } - -.fa-spotify:before { - content: "\f1bc"; } - -.fa-spray-can:before { - content: "\f5bd"; } - -.fa-square:before { - content: "\f0c8"; } - -.fa-square-full:before { - content: "\f45c"; } - -.fa-square-root-alt:before { - content: "\f698"; } - -.fa-squarespace:before { - content: "\f5be"; } - -.fa-stack-exchange:before { - content: "\f18d"; } - -.fa-stack-overflow:before { - content: "\f16c"; } - -.fa-stackpath:before { - content: "\f842"; } - -.fa-stamp:before { - content: "\f5bf"; } - -.fa-star:before { - content: "\f005"; } - -.fa-star-and-crescent:before { - content: "\f699"; } - -.fa-star-half:before { - content: "\f089"; } - -.fa-star-half-alt:before { - content: "\f5c0"; } - -.fa-star-of-david:before { - content: "\f69a"; } - -.fa-star-of-life:before { - content: "\f621"; } - -.fa-staylinked:before { - content: "\f3f5"; } - -.fa-steam:before { - content: "\f1b6"; } - -.fa-steam-square:before { - content: "\f1b7"; } - -.fa-steam-symbol:before { - content: "\f3f6"; } - -.fa-step-backward:before { - content: "\f048"; } - -.fa-step-forward:before { - content: "\f051"; } - -.fa-stethoscope:before { - content: "\f0f1"; } - -.fa-sticker-mule:before { - content: "\f3f7"; } - -.fa-sticky-note:before { - content: "\f249"; } - -.fa-stop:before { - content: "\f04d"; } - -.fa-stop-circle:before { - content: "\f28d"; } - -.fa-stopwatch:before { - content: "\f2f2"; } - -.fa-store:before { - content: "\f54e"; } - -.fa-store-alt:before { - content: "\f54f"; } - -.fa-strava:before { - content: "\f428"; } - -.fa-stream:before { - content: "\f550"; } - -.fa-street-view:before { - content: "\f21d"; } - -.fa-strikethrough:before { - content: "\f0cc"; } - -.fa-stripe:before { - content: "\f429"; } - -.fa-stripe-s:before { - content: "\f42a"; } - -.fa-stroopwafel:before { - content: "\f551"; } - -.fa-studiovinari:before { - content: "\f3f8"; } - -.fa-stumbleupon:before { - content: "\f1a4"; } - -.fa-stumbleupon-circle:before { - content: "\f1a3"; } - -.fa-subscript:before { - content: "\f12c"; } - -.fa-subway:before { - content: "\f239"; } - -.fa-suitcase:before { - content: "\f0f2"; } - -.fa-suitcase-rolling:before { - content: "\f5c1"; } - -.fa-sun:before { - content: "\f185"; } - -.fa-superpowers:before { - content: "\f2dd"; } - -.fa-superscript:before { - content: "\f12b"; } - -.fa-supple:before { - content: "\f3f9"; } - -.fa-surprise:before { - content: "\f5c2"; } - -.fa-suse:before { - content: "\f7d6"; } - -.fa-swatchbook:before { - content: "\f5c3"; } - -.fa-swimmer:before { - content: "\f5c4"; } - -.fa-swimming-pool:before { - content: "\f5c5"; } - -.fa-symfony:before { - content: "\f83d"; } - -.fa-synagogue:before { - content: "\f69b"; } - -.fa-sync:before { - content: "\f021"; } - -.fa-sync-alt:before { - content: "\f2f1"; } - -.fa-syringe:before { - content: "\f48e"; } - -.fa-table:before { - content: "\f0ce"; } - -.fa-table-tennis:before { - content: "\f45d"; } - -.fa-tablet:before { - content: "\f10a"; } - -.fa-tablet-alt:before { - content: "\f3fa"; } - -.fa-tablets:before { - content: "\f490"; } - -.fa-tachometer-alt:before { - content: "\f3fd"; } - -.fa-tag:before { - content: "\f02b"; } - -.fa-tags:before { - content: "\f02c"; } - -.fa-tape:before { - content: "\f4db"; } - -.fa-tasks:before { - content: "\f0ae"; } - -.fa-taxi:before { - content: "\f1ba"; } - -.fa-teamspeak:before { - content: "\f4f9"; } - -.fa-teeth:before { - content: "\f62e"; } - -.fa-teeth-open:before { - content: "\f62f"; } - -.fa-telegram:before { - content: "\f2c6"; } - -.fa-telegram-plane:before { - content: "\f3fe"; } - -.fa-temperature-high:before { - content: "\f769"; } - -.fa-temperature-low:before { - content: "\f76b"; } - -.fa-tencent-weibo:before { - content: "\f1d5"; } - -.fa-tenge:before { - content: "\f7d7"; } - -.fa-terminal:before { - content: "\f120"; } - -.fa-text-height:before { - content: "\f034"; } - -.fa-text-width:before { - content: "\f035"; } - -.fa-th:before { - content: "\f00a"; } - -.fa-th-large:before { - content: "\f009"; } - -.fa-th-list:before { - content: "\f00b"; } - -.fa-the-red-yeti:before { - content: "\f69d"; } - -.fa-theater-masks:before { - content: "\f630"; } - -.fa-themeco:before { - content: "\f5c6"; } - -.fa-themeisle:before { - content: "\f2b2"; } - -.fa-thermometer:before { - content: "\f491"; } - -.fa-thermometer-empty:before { - content: "\f2cb"; } - -.fa-thermometer-full:before { - content: "\f2c7"; } - -.fa-thermometer-half:before { - content: "\f2c9"; } - -.fa-thermometer-quarter:before { - content: "\f2ca"; } - -.fa-thermometer-three-quarters:before { - content: "\f2c8"; } - -.fa-think-peaks:before { - content: "\f731"; } - -.fa-thumbs-down:before { - content: "\f165"; } - -.fa-thumbs-up:before { - content: "\f164"; } - -.fa-thumbtack:before { - content: "\f08d"; } - -.fa-ticket-alt:before { - content: "\f3ff"; } - -.fa-times:before { - content: "\f00d"; } - -.fa-times-circle:before { - content: "\f057"; } - -.fa-tint:before { - content: "\f043"; } - -.fa-tint-slash:before { - content: "\f5c7"; } - -.fa-tired:before { - content: "\f5c8"; } - -.fa-toggle-off:before { - content: "\f204"; } - -.fa-toggle-on:before { - content: "\f205"; } - -.fa-toilet:before { - content: "\f7d8"; } - -.fa-toilet-paper:before { - content: "\f71e"; } - -.fa-toolbox:before { - content: "\f552"; } - -.fa-tools:before { - content: "\f7d9"; } - -.fa-tooth:before { - content: "\f5c9"; } - -.fa-torah:before { - content: "\f6a0"; } - -.fa-torii-gate:before { - content: "\f6a1"; } - -.fa-tractor:before { - content: "\f722"; } - -.fa-trade-federation:before { - content: "\f513"; } - -.fa-trademark:before { - content: "\f25c"; } - -.fa-traffic-light:before { - content: "\f637"; } - -.fa-train:before { - content: "\f238"; } - -.fa-tram:before { - content: "\f7da"; } - -.fa-transgender:before { - content: "\f224"; } - -.fa-transgender-alt:before { - content: "\f225"; } - -.fa-trash:before { - content: "\f1f8"; } - -.fa-trash-alt:before { - content: "\f2ed"; } - -.fa-trash-restore:before { - content: "\f829"; } - -.fa-trash-restore-alt:before { - content: "\f82a"; } - -.fa-tree:before { - content: "\f1bb"; } - -.fa-trello:before { - content: "\f181"; } - -.fa-tripadvisor:before { - content: "\f262"; } - -.fa-trophy:before { - content: "\f091"; } - -.fa-truck:before { - content: "\f0d1"; } - -.fa-truck-loading:before { - content: "\f4de"; } - -.fa-truck-monster:before { - content: "\f63b"; } - -.fa-truck-moving:before { - content: "\f4df"; } - -.fa-truck-pickup:before { - content: "\f63c"; } - -.fa-tshirt:before { - content: "\f553"; } - -.fa-tty:before { - content: "\f1e4"; } - -.fa-tumblr:before { - content: "\f173"; } - -.fa-tumblr-square:before { - content: "\f174"; } - -.fa-tv:before { - content: "\f26c"; } - -.fa-twitch:before { - content: "\f1e8"; } - -.fa-twitter:before { - content: "\f099"; } - -.fa-twitter-square:before { - content: "\f081"; } - -.fa-typo3:before { - content: "\f42b"; } - -.fa-uber:before { - content: "\f402"; } - -.fa-ubuntu:before { - content: "\f7df"; } - -.fa-uikit:before { - content: "\f403"; } - -.fa-umbrella:before { - content: "\f0e9"; } - -.fa-umbrella-beach:before { - content: "\f5ca"; } - -.fa-underline:before { - content: "\f0cd"; } - -.fa-undo:before { - content: "\f0e2"; } - -.fa-undo-alt:before { - content: "\f2ea"; } - -.fa-uniregistry:before { - content: "\f404"; } - -.fa-universal-access:before { - content: "\f29a"; } - -.fa-university:before { - content: "\f19c"; } - -.fa-unlink:before { - content: "\f127"; } - -.fa-unlock:before { - content: "\f09c"; } - -.fa-unlock-alt:before { - content: "\f13e"; } - -.fa-untappd:before { - content: "\f405"; } - -.fa-upload:before { - content: "\f093"; } - -.fa-ups:before { - content: "\f7e0"; } - -.fa-usb:before { - content: "\f287"; } - -.fa-user:before { - content: "\f007"; } - -.fa-user-alt:before { - content: "\f406"; } - -.fa-user-alt-slash:before { - content: "\f4fa"; } - -.fa-user-astronaut:before { - content: "\f4fb"; } - -.fa-user-check:before { - content: "\f4fc"; } - -.fa-user-circle:before { - content: "\f2bd"; } - -.fa-user-clock:before { - content: "\f4fd"; } - -.fa-user-cog:before { - content: "\f4fe"; } - -.fa-user-edit:before { - content: "\f4ff"; } - -.fa-user-friends:before { - content: "\f500"; } - -.fa-user-graduate:before { - content: "\f501"; } - -.fa-user-injured:before { - content: "\f728"; } - -.fa-user-lock:before { - content: "\f502"; } - -.fa-user-md:before { - content: "\f0f0"; } - -.fa-user-minus:before { - content: "\f503"; } - -.fa-user-ninja:before { - content: "\f504"; } - -.fa-user-nurse:before { - content: "\f82f"; } - -.fa-user-plus:before { - content: "\f234"; } - -.fa-user-secret:before { - content: "\f21b"; } - -.fa-user-shield:before { - content: "\f505"; } - -.fa-user-slash:before { - content: "\f506"; } - -.fa-user-tag:before { - content: "\f507"; } - -.fa-user-tie:before { - content: "\f508"; } - -.fa-user-times:before { - content: "\f235"; } - -.fa-users:before { - content: "\f0c0"; } - -.fa-users-cog:before { - content: "\f509"; } - -.fa-usps:before { - content: "\f7e1"; } - -.fa-ussunnah:before { - content: "\f407"; } - -.fa-utensil-spoon:before { - content: "\f2e5"; } - -.fa-utensils:before { - content: "\f2e7"; } - -.fa-vaadin:before { - content: "\f408"; } - -.fa-vector-square:before { - content: "\f5cb"; } - -.fa-venus:before { - content: "\f221"; } - -.fa-venus-double:before { - content: "\f226"; } - -.fa-venus-mars:before { - content: "\f228"; } - -.fa-viacoin:before { - content: "\f237"; } - -.fa-viadeo:before { - content: "\f2a9"; } - -.fa-viadeo-square:before { - content: "\f2aa"; } - -.fa-vial:before { - content: "\f492"; } - -.fa-vials:before { - content: "\f493"; } - -.fa-viber:before { - content: "\f409"; } - -.fa-video:before { - content: "\f03d"; } - -.fa-video-slash:before { - content: "\f4e2"; } - -.fa-vihara:before { - content: "\f6a7"; } - -.fa-vimeo:before { - content: "\f40a"; } - -.fa-vimeo-square:before { - content: "\f194"; } - -.fa-vimeo-v:before { - content: "\f27d"; } - -.fa-vine:before { - content: "\f1ca"; } - -.fa-vk:before { - content: "\f189"; } - -.fa-vnv:before { - content: "\f40b"; } - -.fa-voicemail:before { - content: "\f897"; } - -.fa-volleyball-ball:before { - content: "\f45f"; } - -.fa-volume-down:before { - content: "\f027"; } - -.fa-volume-mute:before { - content: "\f6a9"; } - -.fa-volume-off:before { - content: "\f026"; } - -.fa-volume-up:before { - content: "\f028"; } - -.fa-vote-yea:before { - content: "\f772"; } - -.fa-vr-cardboard:before { - content: "\f729"; } - -.fa-vuejs:before { - content: "\f41f"; } - -.fa-walking:before { - content: "\f554"; } - -.fa-wallet:before { - content: "\f555"; } - -.fa-warehouse:before { - content: "\f494"; } - -.fa-water:before { - content: "\f773"; } - -.fa-wave-square:before { - content: "\f83e"; } - -.fa-waze:before { - content: "\f83f"; } - -.fa-weebly:before { - content: "\f5cc"; } - -.fa-weibo:before { - content: "\f18a"; } - -.fa-weight:before { - content: "\f496"; } - -.fa-weight-hanging:before { - content: "\f5cd"; } - -.fa-weixin:before { - content: "\f1d7"; } - -.fa-whatsapp:before { - content: "\f232"; } - -.fa-whatsapp-square:before { - content: "\f40c"; } - -.fa-wheelchair:before { - content: "\f193"; } - -.fa-whmcs:before { - content: "\f40d"; } - -.fa-wifi:before { - content: "\f1eb"; } - -.fa-wikipedia-w:before { - content: "\f266"; } - -.fa-wind:before { - content: "\f72e"; } - -.fa-window-close:before { - content: "\f410"; } - -.fa-window-maximize:before { - content: "\f2d0"; } - -.fa-window-minimize:before { - content: "\f2d1"; } - -.fa-window-restore:before { - content: "\f2d2"; } - -.fa-windows:before { - content: "\f17a"; } - -.fa-wine-bottle:before { - content: "\f72f"; } - -.fa-wine-glass:before { - content: "\f4e3"; } - -.fa-wine-glass-alt:before { - content: "\f5ce"; } - -.fa-wix:before { - content: "\f5cf"; } - -.fa-wizards-of-the-coast:before { - content: "\f730"; } - -.fa-wolf-pack-battalion:before { - content: "\f514"; } - -.fa-won-sign:before { - content: "\f159"; } - -.fa-wordpress:before { - content: "\f19a"; } - -.fa-wordpress-simple:before { - content: "\f411"; } - -.fa-wpbeginner:before { - content: "\f297"; } - -.fa-wpexplorer:before { - content: "\f2de"; } - -.fa-wpforms:before { - content: "\f298"; } - -.fa-wpressr:before { - content: "\f3e4"; } - -.fa-wrench:before { - content: "\f0ad"; } - -.fa-x-ray:before { - content: "\f497"; } - -.fa-xbox:before { - content: "\f412"; } - -.fa-xing:before { - content: "\f168"; } - -.fa-xing-square:before { - content: "\f169"; } - -.fa-y-combinator:before { - content: "\f23b"; } - -.fa-yahoo:before { - content: "\f19e"; } - -.fa-yammer:before { - content: "\f840"; } - -.fa-yandex:before { - content: "\f413"; } - -.fa-yandex-international:before { - content: "\f414"; } - -.fa-yarn:before { - content: "\f7e3"; } - -.fa-yelp:before { - content: "\f1e9"; } - -.fa-yen-sign:before { - content: "\f157"; } - -.fa-yin-yang:before { - content: "\f6ad"; } - -.fa-yoast:before { - content: "\f2b1"; } - -.fa-youtube:before { - content: "\f167"; } - -.fa-youtube-square:before { - content: "\f431"; } - -.fa-zhihu:before { - content: "\f63f"; } - -.sr-only { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; } - -.sr-only-focusable:active, .sr-only-focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; } -@font-face { - font-family: 'Font Awesome 5 Brands'; - font-style: normal; - font-weight: normal; - font-display: auto; - src: url("../webfonts/fa-brands-400.eot"); - src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } - -.fab { - font-family: 'Font Awesome 5 Brands'; } -@font-face { - font-family: 'Font Awesome 5 Free'; - font-style: normal; - font-weight: 400; - font-display: auto; - src: url("../webfonts/fa-regular-400.eot"); - src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } - -.far { - font-family: 'Font Awesome 5 Free'; - font-weight: 400; } -@font-face { - font-family: 'Font Awesome 5 Free'; - font-style: normal; - font-weight: 900; - font-display: auto; - src: url("../webfonts/fa-solid-900.eot"); - src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } - -.fa, -.fas { - font-family: 'Font Awesome 5 Free'; - font-weight: 900; } diff --git a/web/css/style.css b/web/css/style.css new file mode 100644 index 0000000..5558be1 --- /dev/null +++ b/web/css/style.css @@ -0,0 +1,3 @@ +html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:0.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}body{background:#fff;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}hr{border:0;display:block;height:1px;background:#E3E7EB;background:linear-gradient(to right, rgba(227,231,235,0.1) 0, rgba(227,231,235,0.6) 50%, rgba(227,231,235,0.1) 100%);margin-top:24px;margin-bottom:24px}ul,ol{margin-top:0;margin-bottom:24px;padding-left:24px}ul{list-style:disc}ol{list-style:decimal}li>ul,li>ol{margin-bottom:0}dl{margin-top:0;margin-bottom:24px}dt{font-weight:700}dd{margin-left:24px;margin-bottom:24px}img{height:auto;max-width:100%;vertical-align:middle}figure{margin:24px 0}figcaption{font-size:16px;line-height:24px;padding:8px 0}img,svg{display:block}table{border-collapse:collapse;margin-bottom:24px;width:100%}tr{border-bottom:1px solid #E3E7EB}th{text-align:left}th,td{padding:10px 16px}th:first-child,td:first-child{padding-left:0}th:last-child,td:last-child{padding-right:0}html{font-size:18px;line-height:27px}@media (min-width: 641px){html{font-size:20px;line-height:30px;letter-spacing:-0.1px}}body{color:#5B6F82;font-size:1rem}body,button,input,select,textarea{font-family:"Lato", sans-serif}a{color:inherit;text-decoration:underline}a:hover,a:active{outline:0;text-decoration:none}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{clear:both;color:#202B36;font-family:"Roboto", sans-serif;font-weight:500}h1,.h1{font-size:36px;line-height:46px;letter-spacing:-0.2px}@media (min-width: 641px){h1,.h1{font-size:42px;line-height:52px;letter-spacing:-0.1px}}h2,.h2{font-size:30px;line-height:40px;letter-spacing:-0.1px}@media (min-width: 641px){h2,.h2{font-size:36px;line-height:46px;letter-spacing:-0.2px}}h3,.h3,blockquote{font-size:20px;line-height:30px;letter-spacing:-0.1px}@media (min-width: 641px){h3,.h3,blockquote{font-size:30px;line-height:40px;letter-spacing:-0.1px}}h4,h5,h6,.h4,.h5,.h6{font-size:18px;line-height:27px;letter-spacing:-0.1px}@media (min-width: 641px){h4,h5,h6,.h4,.h5,.h6{font-size:20px;line-height:30px;letter-spacing:-0.1px}}@media (max-width: 640px){.h1-mobile{font-size:36px;line-height:46px;letter-spacing:-0.2px}.h2-mobile{font-size:30px;line-height:40px;letter-spacing:-0.1px}.h3-mobile{font-size:20px;line-height:30px;letter-spacing:-0.1px}.h4-mobile,.h5-mobile,.h6-mobile{font-size:18px;line-height:27px;letter-spacing:-0.1px}}.text-light{color:rgba(255,255,255,0.8)}.text-light a{color:rgba(255,255,255,0.8)}.text-light h1,.text-light h2,.text-light h3,.text-light h4,.text-light h5,.text-light h6,.text-light .h1,.text-light .h2,.text-light .h3,.text-light .h4,.text-light .h5,.text-light .h6{color:#fff !important}.text-sm{font-size:18px;line-height:27px;letter-spacing:-0.1px}.text-xs{font-size:16px;line-height:24px;letter-spacing:-0.1px}h1,h2,.h1,.h2{margin-top:48px;margin-bottom:16px}h3,.h3{margin-top:36px;margin-bottom:12px}h4,h5,h6,.h4,.h5,.h6{margin-top:24px;margin-bottom:4px}p{margin-top:0;margin-bottom:24px}dfn,cite,em,i{font-style:italic}blockquote{color:#92A2B1;font-style:italic;margin-top:24px;margin-bottom:24px;margin-left:24px}blockquote::before{content:"\201C"}blockquote::after{content:"\201D"}blockquote p{display:inline}address{color:#5B6F82;border-width:1px 0;border-style:solid;border-color:#E3E7EB;padding:24px 0;margin:0 0 24px}pre,pre h1,pre h2,pre h3,pre h4,pre h5,pre h6,pre .h1,pre .h2,pre .h3,pre .h4,pre .h5,pre .h6{font-family:"Courier 10 Pitch", Courier, monospace}pre,code,kbd,tt,var{background:#F6F8FA}pre{font-size:16px;line-height:24px;margin-bottom:1.6em;max-width:100%;overflow:auto;padding:24px;margin-top:24px;margin-bottom:24px}code,kbd,tt,var{font-family:Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace;font-size:16px;padding:2px 4px}abbr,acronym{cursor:help}mark,ins{text-decoration:none}small{font-size:18px;line-height:27px;letter-spacing:-0.1px}b,strong{font-weight:700}button,input,select,textarea,label{font-size:18px;line-height:27px}.container,.container-sm{width:100%;margin:0 auto;padding-left:16px;padding-right:16px}@media (min-width: 481px){.container,.container-sm{padding-left:24px;padding-right:24px}}.container{max-width:1128px}.container-sm{max-width:848px}.container .container-sm{max-width:800px;padding-left:0;padding-right:0}.screen-reader-text{clip:rect(1px, 1px, 1px, 1px);position:absolute !important;height:1px;width:1px;overflow:hidden;word-wrap:normal !important}.screen-reader-text:focus{border-radius:2px;box-shadow:0 0 2px 2px rgba(0,0,0,0.6);clip:auto !important;display:block;font-size:13px;letter-spacing:0px;font-weight:700;line-height:16px;text-transform:uppercase;text-decoration:none;background-color:#fff;color:#4992F0 !important;border:none;height:auto;left:8px;padding:16px 32px;top:8px;width:auto;z-index:100000}.list-reset{list-style:none;padding:0}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-primary{color:#4992F0}.text-secondary{color:#838DEA}.has-top-divider{position:relative}.has-top-divider::before{content:'';position:absolute;top:0;left:0;width:100%;display:block;height:1px;background:#E3E7EB;background:linear-gradient(to right, rgba(227,231,235,0.1) 0, rgba(227,231,235,0.6) 50%, rgba(227,231,235,0.1) 100%)}.has-bottom-divider{position:relative}.has-bottom-divider::after{content:'';position:absolute;bottom:0;left:0;width:100%;display:block;height:1px;background:#E3E7EB;background:linear-gradient(to right, rgba(227,231,235,0.1) 0, rgba(227,231,235,0.6) 50%, rgba(227,231,235,0.1) 100%)}.m-0{margin:0}.mt-0{margin-top:0}.mr-0{margin-right:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.m-8{margin:8px}.mt-8{margin-top:8px}.mr-8{margin-right:8px}.mb-8{margin-bottom:8px}.ml-8{margin-left:8px}.m-16{margin:16px}.mt-16{margin-top:16px}.mr-16{margin-right:16px}.mb-16{margin-bottom:16px}.ml-16{margin-left:16px}.m-24{margin:24px}.mt-24{margin-top:24px}.mr-24{margin-right:24px}.mb-24{margin-bottom:24px}.ml-24{margin-left:24px}.m-32{margin:32px}.mt-32{margin-top:32px}.mr-32{margin-right:32px}.mb-32{margin-bottom:32px}.ml-32{margin-left:32px}.m-40{margin:40px}.mt-40{margin-top:40px}.mr-40{margin-right:40px}.mb-40{margin-bottom:40px}.ml-40{margin-left:40px}.m-48{margin:48px}.mt-48{margin-top:48px}.mr-48{margin-right:48px}.mb-48{margin-bottom:48px}.ml-48{margin-left:48px}.m-56{margin:56px}.mt-56{margin-top:56px}.mr-56{margin-right:56px}.mb-56{margin-bottom:56px}.ml-56{margin-left:56px}.m-64{margin:64px}.mt-64{margin-top:64px}.mr-64{margin-right:64px}.mb-64{margin-bottom:64px}.ml-64{margin-left:64px}.p-0{padding:0}.pt-0{padding-top:0}.pr-0{padding-right:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.p-8{padding:8px}.pt-8{padding-top:8px}.pr-8{padding-right:8px}.pb-8{padding-bottom:8px}.pl-8{padding-left:8px}.p-16{padding:16px}.pt-16{padding-top:16px}.pr-16{padding-right:16px}.pb-16{padding-bottom:16px}.pl-16{padding-left:16px}.p-24{padding:24px}.pt-24{padding-top:24px}.pr-24{padding-right:24px}.pb-24{padding-bottom:24px}.pl-24{padding-left:24px}.p-32{padding:32px}.pt-32{padding-top:32px}.pr-32{padding-right:32px}.pb-32{padding-bottom:32px}.pl-32{padding-left:32px}.p-40{padding:40px}.pt-40{padding-top:40px}.pr-40{padding-right:40px}.pb-40{padding-bottom:40px}.pl-40{padding-left:40px}.p-48{padding:48px}.pt-48{padding-top:48px}.pr-48{padding-right:48px}.pb-48{padding-bottom:48px}.pl-48{padding-left:48px}.p-56{padding:56px}.pt-56{padding-top:56px}.pr-56{padding-right:56px}.pb-56{padding-bottom:56px}.pl-56{padding-left:56px}.p-64{padding:64px}.pt-64{padding-top:64px}.pr-64{padding-right:64px}.pb-64{padding-bottom:64px}.pl-64{padding-left:64px}.sr .has-animations .is-revealing{visibility:hidden}.input,.textarea{background-color:#fff;border-width:1px;border-style:solid;border-color:#E3E7EB;color:#5B6F82;max-width:100%;width:100%}.input::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:#92A2B1}.input:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:#92A2B1}.input::-ms-input-placeholder,.textarea::-ms-input-placeholder{color:#92A2B1}.input::placeholder,.textarea::placeholder{color:#92A2B1}.input::-ms-input-placeholder,.textarea::-ms-input-placeholder{color:#92A2B1}.input:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:#92A2B1}.input:hover,.textarea:hover{border-color:#d4dae0}.input:active,.input:focus,.textarea:active,.textarea:focus{outline:none;border-color:#4992F0}.input[disabled],.textarea[disabled]{cursor:not-allowed;background-color:#F6F8FA;border-color:#F6F8FA}.input{-moz-appearance:none;-webkit-appearance:none;font-size:16px;letter-spacing:-0.1px;line-height:20px;border-radius:2px;padding:13px 16px;height:48px;box-shadow:none}.input .inline-input{display:inline;width:auto}.textarea{display:block;min-width:100%;resize:vertical}.textarea .inline-textarea{display:inline;width:auto}.field-grouped>.control:not(:last-child){margin-bottom:8px}@media (min-width: 641px){.field-grouped{display:flex}.field-grouped>.control{flex-shrink:0}.field-grouped>.control.control-expanded{flex-grow:1;flex-shrink:1}.field-grouped>.control:not(:last-child){margin-bottom:0;margin-right:8px}}.button{display:inline-flex;font-size:13px;letter-spacing:0px;font-weight:700;line-height:16px;text-transform:uppercase;text-decoration:none !important;background-color:#fff;color:#4992F0 !important;border:none;border-radius:2px;cursor:pointer;justify-content:center;padding:16px 32px;height:48px;text-align:center;white-space:nowrap}.button:active{outline:0}.button::before{border-radius:2px}.button-shadow{position:relative}.button-shadow::before{content:'';position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:0 8px 24px rgba(32,43,54,0.12);mix-blend-mode:multiply;transition:box-shadow .15s ease}.button-shadow:hover::before{box-shadow:0 8px 24px rgba(32,43,54,0.25)}.button-sm{padding:8px 24px;height:32px}.button-sm.button-shadow::before{box-shadow:0 4px 16px rgba(32,43,54,0.12)}.button-sm.button-shadow:hover::before{box-shadow:0 4px 16px rgba(32,43,54,0.25)}.button-primary{color:#fff !important;transition:background .15s ease}.button-primary{background:#2e83ef;background:linear-gradient(65deg, #1274ED 0, #4992F0 100%)}.button-primary:hover{background:#3386ef;background:linear-gradient(65deg, #1777ed 0, #4e95f0 100%)}.button-block{display:flex}.site-header{position:relative;padding:24px 0}.site-header::before{content:'';position:absolute;top:0;left:16%;width:84%;height:500px;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQ4MCIgaGVpZ2h0PSI2NTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICAgIDxwYXRoIGQ9Ik03MzEuMjA3IDY0OS44MDJDOTM1LjQ4NCA2NDIuMTQgMTQ4MCAzMzcuMzI1IDE0ODAgMTgwLjg4OGMwLTE1Ni40MzgtMzA5Ljc0NC0zNi4wNTUtNzIwLTM2LjA1NVMwLTE3NC40ODMgMCAxMzUuMTQ0YzAgMzA5LjYyNyA1MjYuOTMgNTIyLjMyIDczMS4yMDcgNTE0LjY1OHoiIGZpbGw9IiNGNkY4RkEiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);background-size:1140px 500px;background-repeat:no-repeat}.site-header-inner{position:relative;display:flex;justify-content:space-between;align-items:center}.header-links{display:inline-flex}.header-links li{display:inline-flex}.header-links a:not(.button){font-size:13px;line-height:18px;letter-spacing:0px;font-weight:700;color:#5B6F82;text-transform:uppercase;text-decoration:none;line-height:16px;padding:8px 24px}.header-links a:not(.button):hover,.header-links a:not(.button):active{color:#202B36}@media (min-width: 641px){.site-header{position:relative;padding:24px 0}.site-header::before{top:-50%;left:20%;width:80%;height:651px;background-size:1480px 651px}}.hero{position:relative;padding-top:40px;padding-bottom:40px}.hero-paragraph{margin-bottom:32px}.hero-browser{position:relative;margin-top:80px}.hero-browser-inner{position:relative}.hero-browser-inner svg{width:100%;height:auto;overflow:visible}.bubble-1,.bubble-2,.bubble-3,.bubble-4{position:absolute}.bubble-1 svg,.bubble-2 svg,.bubble-3 svg,.bubble-4 svg{height:auto}.bubble-1{top:-15px;left:70px}.bubble-1 svg{width:34px}.bubble-2{bottom:0;right:-30px}.bubble-2 svg{width:78px}.bubble-3{left:-40px;bottom:-40px}.bubble-3 svg{width:143px}.bubble-4{top:-25px;right:-54px}.bubble-4 svg{width:104px}@media (min-width: 641px){.hero{padding-top:80px;padding-bottom:120px}.hero-paragraph{margin-bottom:40px;padding-left:72px;padding-right:72px}.bubble-1 svg,.bubble-2 svg,.bubble-3 svg,.bubble-4 svg{width:auto}.bubble-1{top:85px;left:-30px}.bubble-2{bottom:-8px;right:-75px}.bubble-3{left:-140px;bottom:-120px}.bubble-4{top:-35px;right:-110px}}.features{position:relative}.features::before{content:'';position:absolute;bottom:0;left:0;width:100%;height:482px;background-size:1205px 482px;background-repeat:no-repeat}.features-wrap{display:flex;flex-wrap:wrap;justify-content:center;margin-right:-12px;margin-left:-12px}.features-wrap:first-child{margin-top:-8px}.features-wrap:last-child{margin-bottom:-8px}.feature{padding:8px 12px;width:368px;max-width:344px;flex-grow:1}.feature-inner{height:100%}.feature-icon{position:relative;display:flex;justify-content:center;background:#fff;border-radius:50%}.feature-icon::before{content:'';position:absolute;top:0;width:80px;height:80px;border-radius:50%;box-shadow:0 16px 48px #E3E7EB;mix-blend-mode:multiply}@supports (-ms-ime-align: auto){.feature-icon::before{box-shadow:0 16px 48px rgba(32,43,54,0.12)}}.feature-title{margin-top:20px}@media (min-width: 641px){.features::before{left:55%;width:45%}.features-wrap:first-child{margin-top:-32px}.features-wrap:last-child{margin-bottom:-32px}.feature{padding:32px 12px}.feature-title{margin-top:16px}}.newsletter .section-inner{padding-bottom:64px}.newsletter .section-paragraph{margin-bottom:32px}.newsletter-form{max-width:475px;margin:0 auto}@media (min-width: 641px){.newsletter .section-inner{padding-bottom:120px}.newsletter .section-paragraph{margin-bottom:40px;padding-left:72px;padding-right:72px}}.is-boxed{background:#F6F8FA}.body-wrap{background:#fff;overflow:hidden;display:flex;flex-direction:column;min-height:100vh}.boxed-container{max-width:1440px;margin:0 auto;box-shadow:0 16px 48px #E3E7EB}@supports (-ms-ime-align: auto){.boxed-container{box-shadow:0 16px 48px rgba(32,43,54,0.12)}}main{flex:1 0 auto}.section-inner{position:relative;padding-top:48px;padding-bottom:48px}@media (min-width: 641px){.section-inner{padding-top:80px;padding-bottom:80px}}.site-footer{position:relative;font-size:14px;line-height:20px;letter-spacing:0px}.site-footer::before{content:'';position:absolute;bottom:0;left:0;width:100%;height:259px;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQ0MCIgaGVpZ2h0PSIyMTciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiAgPGRlZnM+ICAgIDxwYXRoIGQ9Ik0yNjEuNyAyODYuNjgyYzQyMS40NzcgMCAxNDg4Ljk3NyAxNzYuMDc4IDE0ODguOTc3IDM5LjIzNHM0NzguNzU0LTI0OC4wNDMgNTcuMjc4LTI0OC4wNDNjLTE5OC43NDYgMC00NjguNTY2IDMuNTU1LTcxOS45NTctMTEuMjNDODA2LjI3MSA1MC4wNzYgNTQxLjkgMjcuMjI3IDM0NC45NzcgNTIuNDM4LTI3LjY2NSAxMDAuMTQ1LTE1OS43NzYgMjg2LjY4MyAyNjEuNyAyODYuNjgzeiIgaWQ9ImEiLz4gIDwvZGVmcz4gIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yODUgLTQxKSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4gICAgPG1hc2sgaWQ9ImIiIGZpbGw9IiNmZmYiPiAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2EiLz4gICAgPC9tYXNrPiAgICA8dXNlIGZpbGw9IiM4MzhERUEiIHhsaW5rOmhyZWY9IiNhIi8+ICAgIDxwYXRoIGQ9Ik0yNDAuNzI3IDMyNi4zOTVjNDIxLjQ3NiAwIDk3Mi43NDQgMTc5Ljc4NyA5NzIuNzQ0IDQyLjk0M3MxMjkuMjg2LTE3NS43NDgtMjkyLjE5LTE3NS43NDgtMjU2LjMxNC0yMjYuNDk0LTI1Ni4zMTQtODkuNjVjMCAxMzYuODQzLTg0NS43MTcgMjIyLjQ1NS00MjQuMjQgMjIyLjQ1NXoiIGZpbGw9IiNBMEE2RUUiIG1hc2s9InVybCgjYikiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDEzNTUuMTYyIDApIi8+ICAgIDxwYXRoIGQ9Ik00NDUuNyAzODcuNjgyYzQyMS40NzcgMCA5NzIuNzQ1IDE3OS43ODcgOTcyLjc0NSA0Mi45NDNzNTc5Ljk0MS0yNTUuMjQ2IDE1OC40NjUtMjU1LjI0Ni03MDYuOTY5LTE0Ni45OTYtNzA2Ljk2OS0xMC4xNTJjMCAxMzYuODQzLTg0NS43MTcgMjIyLjQ1NS00MjQuMjQgMjIyLjQ1NXoiIGZpbGw9IiM2MjZDRDUiIG1hc2s9InVybCgjYikiLz4gIDwvZz48L3N2Zz4=);background-size:1440px 259px;background-repeat:no-repeat}.site-footer a{color:rgba(255,255,255,0.8);text-decoration:none}.site-footer a:hover,.site-footer a:active{color:#fff;text-decoration:underline}.site-footer-inner{position:relative;display:flex;flex-wrap:wrap;padding-top:40px;padding-bottom:40px}.footer-brand,.footer-links,.footer-social-links,.footer-copyright{flex:none;width:100%;display:inline-flex;justify-content:center}.footer-brand,.footer-links,.footer-social-links{margin-bottom:24px}.footer-links li+li,.footer-social-links li+li{margin-left:16px}.footer-social-links li{display:inline-flex}.footer-social-links li a{padding:8px}@media (min-width: 641px){.site-footer::before{height:202px}.site-footer-inner{justify-content:space-between}.footer-brand,.footer-links,.footer-social-links,.footer-copyright{flex:50%}.footer-brand,.footer-copyright{justify-content:flex-start}.footer-links,.footer-social-links{justify-content:flex-end}.footer-links{order:1;margin-bottom:0}} + +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxLQUFLLGlCQUFpQiwwQkFBMEIsNkJBQTZCLENBQUMsS0FBSyxRQUFRLENBQUMsd0NBQXdDLGFBQWEsQ0FBQyxHQUFHLGNBQWMsZUFBZSxDQUFDLHVCQUF1QixhQUFhLENBQUMsT0FBTyxlQUFlLENBQUMsR0FBRyx1QkFBdUIsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLGlDQUFpQyxhQUFhLENBQUMsRUFBRSw2QkFBNkIsb0NBQW9DLENBQUMsWUFBWSxtQkFBbUIsMEJBQTBCLHlDQUFnQyxBQUFoQyxnQ0FBZ0MsQ0FBQyxTQUFTLG1CQUFtQixDQUFDLFNBQVMsa0JBQWtCLENBQUMsY0FBYyxpQ0FBaUMsYUFBYSxDQUFDLElBQUksaUJBQWlCLENBQUMsS0FBSyxzQkFBc0IsVUFBVSxDQUFDLE1BQU0sYUFBYSxDQUFDLFFBQVEsY0FBYyxjQUFjLGtCQUFrQix1QkFBdUIsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLG9CQUFvQixDQUFDLHNCQUFzQixhQUFhLFFBQVEsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLGVBQWUsZUFBZSxDQUFDLHNDQUFzQyx1QkFBdUIsZUFBZSxpQkFBaUIsUUFBUSxDQUFDLGFBQWEsZ0JBQWdCLENBQUMsY0FBYyxtQkFBbUIsQ0FBQywyREFBMkQseUJBQXlCLENBQUMsOEhBQThILGtCQUFrQixTQUFTLENBQUMsa0hBQWtILDZCQUE2QixDQUFDLFNBQVMsNkJBQTZCLENBQUMsT0FBTyxzQkFBc0IsY0FBYyxjQUFjLGVBQWUsVUFBVSxrQkFBa0IsQ0FBQyxTQUFTLHFCQUFxQix1QkFBdUIsQ0FBQyxTQUFTLGFBQWEsQ0FBQyxpQ0FBaUMsc0JBQXNCLFNBQVMsQ0FBQyxzRkFBc0YsV0FBVyxDQUFDLGdCQUFnQiw2QkFBNkIsbUJBQW1CLENBQUMseUZBQXlGLHVCQUF1QixDQUFDLDZCQUE2QiwwQkFBMEIsWUFBWSxDQUFDLGFBQWEsYUFBYSxDQUFDLFFBQVEsaUJBQWlCLENBQUMsT0FBTyxvQkFBb0IsQ0FBQyxTQUFTLFlBQVksQ0FBQyxTQUFTLFlBQVksQ0FBQyxLQUFLLHFCQUFxQixDQUFDLG1CQUFtQixrQkFBa0IsQ0FBQyxLQUFLLGdCQUFnQixrQ0FBa0Msa0NBQWtDLENBQUMsR0FBRyxTQUFTLGNBQWMsV0FBVyxtQkFBbUIscUhBQXFILGdCQUFnQixrQkFBa0IsQ0FBQyxNQUFNLGFBQWEsbUJBQW1CLGlCQUFpQixDQUFDLEdBQUcsZUFBZSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsWUFBWSxlQUFlLENBQUMsR0FBRyxhQUFhLGtCQUFrQixDQUFDLEdBQUcsZUFBZSxDQUFDLEdBQUcsaUJBQWlCLGtCQUFrQixDQUFDLElBQUksWUFBWSxlQUFlLHFCQUFxQixDQUFDLE9BQU8sYUFBYSxDQUFDLFdBQVcsZUFBZSxpQkFBaUIsYUFBYSxDQUFDLFFBQVEsYUFBYSxDQUFDLE1BQU0seUJBQXlCLG1CQUFtQixVQUFVLENBQUMsR0FBRywrQkFBK0IsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLGlCQUFpQixDQUFDLDhCQUE4QixjQUFjLENBQUMsNEJBQTRCLGVBQWUsQ0FBQyxLQUFLLGVBQWUsZ0JBQWdCLENBQUMsMEJBQTBCLEtBQUssZUFBZSxpQkFBaUIscUJBQXFCLENBQUMsQ0FBQyxLQUFLLGNBQWMsY0FBYyxDQUFDLGtDQUFrQyw4QkFBOEIsQ0FBQyxFQUFFLGNBQWMseUJBQXlCLENBQUMsaUJBQWlCLFVBQVUsb0JBQW9CLENBQUMsMENBQTBDLFdBQVcsY0FBYyxpQ0FBaUMsZUFBZSxDQUFDLE9BQU8sZUFBZSxpQkFBaUIscUJBQXFCLENBQUMsMEJBQTBCLE9BQU8sZUFBZSxpQkFBaUIscUJBQXFCLENBQUMsQ0FBQyxPQUFPLGVBQWUsaUJBQWlCLHFCQUFxQixDQUFDLDBCQUEwQixPQUFPLGVBQWUsaUJBQWlCLHFCQUFxQixDQUFDLENBQUMsa0JBQWtCLGVBQWUsaUJBQWlCLHFCQUFxQixDQUFDLDBCQUEwQixrQkFBa0IsZUFBZSxpQkFBaUIscUJBQXFCLENBQUMsQ0FBQyxxQkFBcUIsZUFBZSxpQkFBaUIscUJBQXFCLENBQUMsMEJBQTBCLHFCQUFxQixlQUFlLGlCQUFpQixxQkFBcUIsQ0FBQyxDQUFDLDBCQUEwQixXQUFXLGVBQWUsaUJBQWlCLHFCQUFxQixDQUFDLFdBQVcsZUFBZSxpQkFBaUIscUJBQXFCLENBQUMsV0FBVyxlQUFlLGlCQUFpQixxQkFBcUIsQ0FBQyxpQ0FBaUMsZUFBZSxpQkFBaUIscUJBQXFCLENBQUMsQ0FBQyxZQUFZLDJCQUEyQixDQUFDLGNBQWMsMkJBQTJCLENBQUMsMExBQTBMLHFCQUFxQixDQUFDLFNBQVMsZUFBZSxpQkFBaUIscUJBQXFCLENBQUMsU0FBUyxlQUFlLGlCQUFpQixxQkFBcUIsQ0FBQyxjQUFjLGdCQUFnQixrQkFBa0IsQ0FBQyxPQUFPLGdCQUFnQixrQkFBa0IsQ0FBQyxxQkFBcUIsZ0JBQWdCLGlCQUFpQixDQUFDLEVBQUUsYUFBYSxrQkFBa0IsQ0FBQyxjQUFjLGlCQUFpQixDQUFDLFdBQVcsY0FBYyxrQkFBa0IsZ0JBQWdCLG1CQUFtQixnQkFBZ0IsQ0FBQyxtQkFBbUIsZUFBZSxDQUFDLGtCQUFrQixlQUFlLENBQUMsYUFBYSxjQUFjLENBQUMsUUFBUSxjQUFjLG1CQUFtQixtQkFBbUIscUJBQXFCLGVBQWUsZUFBZSxDQUFDLDhGQUE4RixrREFBa0QsQ0FBQyxvQkFBb0Isa0JBQWtCLENBQUMsSUFBSSxlQUFlLGlCQUFpQixvQkFBb0IsZUFBZSxjQUFjLGFBQWEsZ0JBQWdCLGtCQUFrQixDQUFDLGdCQUFnQiwyRUFBMkUsZUFBZSxlQUFlLENBQUMsYUFBYSxXQUFXLENBQUMsU0FBUyxvQkFBb0IsQ0FBQyxNQUFNLGVBQWUsaUJBQWlCLHFCQUFxQixDQUFDLFNBQVMsZUFBZSxDQUFDLG1DQUFtQyxlQUFlLGdCQUFnQixDQUFDLHlCQUF5QixXQUFXLGNBQWMsa0JBQWtCLGtCQUFrQixDQUFDLDBCQUEwQix5QkFBeUIsa0JBQWtCLGtCQUFrQixDQUFDLENBQUMsV0FBVyxnQkFBZ0IsQ0FBQyxjQUFjLGVBQWUsQ0FBQyx5QkFBeUIsZ0JBQWdCLGVBQWUsZUFBZSxDQUFDLG9CQUFvQiw4QkFBOEIsNkJBQTZCLFdBQVcsVUFBVSxnQkFBZ0IsMkJBQTJCLENBQUMsMEJBQTBCLGtCQUFrQix1Q0FBdUMscUJBQXFCLGNBQWMsZUFBZSxtQkFBbUIsZ0JBQWdCLGlCQUFpQix5QkFBeUIscUJBQXFCLHNCQUFzQix5QkFBeUIsWUFBWSxZQUFZLFNBQVMsa0JBQWtCLFFBQVEsV0FBVyxjQUFjLENBQUMsWUFBWSxnQkFBZ0IsU0FBUyxDQUFDLFdBQVcsZUFBZSxDQUFDLGFBQWEsaUJBQWlCLENBQUMsWUFBWSxnQkFBZ0IsQ0FBQyxjQUFjLGFBQWEsQ0FBQyxnQkFBZ0IsYUFBYSxDQUFDLGlCQUFpQixpQkFBaUIsQ0FBQyx5QkFBeUIsV0FBVyxrQkFBa0IsTUFBTSxPQUFPLFdBQVcsY0FBYyxXQUFXLG1CQUFtQixvSEFBb0gsQ0FBQyxvQkFBb0IsaUJBQWlCLENBQUMsMkJBQTJCLFdBQVcsa0JBQWtCLFNBQVMsT0FBTyxXQUFXLGNBQWMsV0FBVyxtQkFBbUIsb0hBQW9ILENBQUMsS0FBSyxRQUFRLENBQUMsTUFBTSxZQUFZLENBQUMsTUFBTSxjQUFjLENBQUMsTUFBTSxlQUFlLENBQUMsTUFBTSxhQUFhLENBQUMsS0FBSyxVQUFVLENBQUMsTUFBTSxjQUFjLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxNQUFNLGlCQUFpQixDQUFDLE1BQU0sZUFBZSxDQUFDLE1BQU0sV0FBVyxDQUFDLE9BQU8sZUFBZSxDQUFDLE9BQU8saUJBQWlCLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sV0FBVyxDQUFDLE9BQU8sZUFBZSxDQUFDLE9BQU8saUJBQWlCLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sV0FBVyxDQUFDLE9BQU8sZUFBZSxDQUFDLE9BQU8saUJBQWlCLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sV0FBVyxDQUFDLE9BQU8sZUFBZSxDQUFDLE9BQU8saUJBQWlCLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sV0FBVyxDQUFDLE9BQU8sZUFBZSxDQUFDLE9BQU8saUJBQWlCLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sV0FBVyxDQUFDLE9BQU8sZUFBZSxDQUFDLE9BQU8saUJBQWlCLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sV0FBVyxDQUFDLE9BQU8sZUFBZSxDQUFDLE9BQU8saUJBQWlCLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLEtBQUssU0FBUyxDQUFDLE1BQU0sYUFBYSxDQUFDLE1BQU0sZUFBZSxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxjQUFjLENBQUMsS0FBSyxXQUFXLENBQUMsTUFBTSxlQUFlLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxZQUFZLENBQUMsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLGtCQUFrQixDQUFDLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLFlBQVksQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE9BQU8sa0JBQWtCLENBQUMsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sWUFBWSxDQUFDLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLG1CQUFtQixDQUFDLE9BQU8saUJBQWlCLENBQUMsTUFBTSxZQUFZLENBQUMsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLGtCQUFrQixDQUFDLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLFlBQVksQ0FBQyxPQUFPLGdCQUFnQixDQUFDLE9BQU8sa0JBQWtCLENBQUMsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sWUFBWSxDQUFDLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLG1CQUFtQixDQUFDLE9BQU8saUJBQWlCLENBQUMsTUFBTSxZQUFZLENBQUMsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLGtCQUFrQixDQUFDLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxpQkFBaUIsQ0FBQyxrQ0FBa0MsaUJBQWlCLENBQUMsaUJBQWlCLHNCQUFzQixpQkFBaUIsbUJBQW1CLHFCQUFxQixjQUFjLGVBQWUsVUFBVSxDQUFDLHVFQUEyQyxhQUFhLENBQUMsQUFBekQsNkRBQTJDLGFBQWEsQ0FBQyxBQUF6RCwrREFBMkMsYUFBYSxDQUFDLEFBQXpELDJDQUEyQyxhQUFhLENBQUMsK0RBQStELGFBQWEsQ0FBQyw2REFBNkQsYUFBYSxDQUFDLDZCQUE2QixvQkFBb0IsQ0FBQyw0REFBNEQsYUFBYSxvQkFBb0IsQ0FBQyxxQ0FBcUMsbUJBQW1CLHlCQUF5QixvQkFBb0IsQ0FBQyxPQUFPLHFCQUFxQix3QkFBd0IsZUFBZSxzQkFBc0IsaUJBQWlCLGtCQUFrQixrQkFBa0IsWUFBWSxlQUFlLENBQUMscUJBQXFCLGVBQWUsVUFBVSxDQUFDLFVBQVUsY0FBYyxlQUFlLGVBQWUsQ0FBQywyQkFBMkIsZUFBZSxVQUFVLENBQUMseUNBQXlDLGlCQUFpQixDQUFDLDBCQUEwQixlQUFlLFlBQVksQ0FBQyx3QkFBd0IsYUFBYSxDQUFDLHlDQUF5QyxZQUFZLGFBQWEsQ0FBQyx5Q0FBeUMsZ0JBQWdCLGdCQUFnQixDQUFDLENBQUMsUUFBUSxvQkFBb0IsZUFBZSxtQkFBbUIsZ0JBQWdCLGlCQUFpQix5QkFBeUIsZ0NBQWdDLHNCQUFzQix5QkFBeUIsWUFBWSxrQkFBa0IsZUFBZSx1QkFBdUIsa0JBQWtCLFlBQVksa0JBQWtCLGtCQUFrQixDQUFDLGVBQWUsU0FBUyxDQUFDLGdCQUFnQixpQkFBaUIsQ0FBQyxlQUFlLGlCQUFpQixDQUFDLHVCQUF1QixXQUFXLGtCQUFrQixNQUFNLFFBQVEsU0FBUyxPQUFPLDBDQUEwQyx3QkFBd0IsK0JBQStCLENBQUMsNkJBQTZCLHlDQUF5QyxDQUFDLFdBQVcsaUJBQWlCLFdBQVcsQ0FBQyxpQ0FBaUMseUNBQXlDLENBQUMsdUNBQXVDLHlDQUF5QyxDQUFDLGdCQUFnQixzQkFBc0IsK0JBQStCLENBQUMsZ0JBQWdCLG1CQUFtQiwwREFBMEQsQ0FBQyxzQkFBc0IsbUJBQW1CLDBEQUEwRCxDQUFDLGNBQWMsWUFBWSxDQUFDLGFBQWEsa0JBQWtCLGNBQWMsQ0FBQyxxQkFBcUIsV0FBVyxrQkFBa0IsTUFBTSxTQUFTLFVBQVUsYUFBYSxxYUFBcWEsNkJBQTZCLDJCQUEyQixDQUFDLG1CQUFtQixrQkFBa0IsYUFBYSw4QkFBOEIsa0JBQWtCLENBQUMsY0FBYyxtQkFBbUIsQ0FBQyxpQkFBaUIsbUJBQW1CLENBQUMsNkJBQTZCLGVBQWUsaUJBQWlCLG1CQUFtQixnQkFBZ0IsY0FBYyx5QkFBeUIscUJBQXFCLGlCQUFpQixnQkFBZ0IsQ0FBQyx1RUFBdUUsYUFBYSxDQUFDLDBCQUEwQixhQUFhLGtCQUFrQixjQUFjLENBQUMscUJBQXFCLFNBQVMsU0FBUyxVQUFVLGFBQWEsNEJBQTRCLENBQUMsQ0FBQyxNQUFNLGtCQUFrQixpQkFBaUIsbUJBQW1CLENBQUMsZ0JBQWdCLGtCQUFrQixDQUFDLGNBQWMsa0JBQWtCLGVBQWUsQ0FBQyxvQkFBb0IsaUJBQWlCLENBQUMsd0JBQXdCLFdBQVcsWUFBWSxnQkFBZ0IsQ0FBQyx3Q0FBd0MsaUJBQWlCLENBQUMsd0RBQXdELFdBQVcsQ0FBQyxVQUFVLFVBQVUsU0FBUyxDQUFDLGNBQWMsVUFBVSxDQUFDLFVBQVUsU0FBUyxXQUFXLENBQUMsY0FBYyxVQUFVLENBQUMsVUFBVSxXQUFXLFlBQVksQ0FBQyxjQUFjLFdBQVcsQ0FBQyxVQUFVLFVBQVUsV0FBVyxDQUFDLGNBQWMsV0FBVyxDQUFDLDBCQUEwQixNQUFNLGlCQUFpQixvQkFBb0IsQ0FBQyxnQkFBZ0IsbUJBQW1CLGtCQUFrQixrQkFBa0IsQ0FBQyx3REFBd0QsVUFBVSxDQUFDLFVBQVUsU0FBUyxVQUFVLENBQUMsVUFBVSxZQUFZLFdBQVcsQ0FBQyxVQUFVLFlBQVksYUFBYSxDQUFDLFVBQVUsVUFBVSxZQUFZLENBQUMsQ0FBQyxVQUFVLGlCQUFpQixDQUFDLGtCQUFrQixXQUFXLGtCQUFrQixTQUFTLE9BQU8sV0FBVyxhQUFhLGl2QkFBaXZCLDZCQUE2QiwyQkFBMkIsQ0FBQyxlQUFlLGFBQWEsZUFBZSx1QkFBdUIsbUJBQW1CLGlCQUFpQixDQUFDLDJCQUEyQixlQUFlLENBQUMsMEJBQTBCLGtCQUFrQixDQUFDLFNBQVMsaUJBQWlCLFlBQVksZ0JBQWdCLFdBQVcsQ0FBQyxlQUFlLFdBQVcsQ0FBQyxjQUFjLGtCQUFrQixhQUFhLHVCQUF1QixnQkFBZ0IsaUJBQWlCLENBQUMsc0JBQXNCLFdBQVcsa0JBQWtCLE1BQU0sV0FBVyxZQUFZLGtCQUFrQiwrQkFBK0IsdUJBQXVCLENBQUMsZ0NBQWdDLHNCQUFzQiwwQ0FBMEMsQ0FBQyxDQUFDLGVBQWUsZUFBZSxDQUFDLDBCQUEwQixrQkFBa0IsU0FBUyxTQUFTLENBQUMsMkJBQTJCLGdCQUFnQixDQUFDLDBCQUEwQixtQkFBbUIsQ0FBQyxTQUFTLGlCQUFpQixDQUFDLGVBQWUsZUFBZSxDQUFDLENBQUMsMkJBQTJCLG1CQUFtQixDQUFDLCtCQUErQixrQkFBa0IsQ0FBQyxpQkFBaUIsZ0JBQWdCLGFBQWEsQ0FBQywwQkFBMEIsMkJBQTJCLG9CQUFvQixDQUFDLCtCQUErQixtQkFBbUIsa0JBQWtCLGtCQUFrQixDQUFDLENBQUMsVUFBVSxrQkFBa0IsQ0FBQyxXQUFXLGdCQUFnQixnQkFBZ0IsYUFBYSxzQkFBc0IsZ0JBQWdCLENBQUMsaUJBQWlCLGlCQUFpQixjQUFjLDhCQUE4QixDQUFDLGdDQUFnQyxpQkFBaUIsMENBQTBDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxlQUFlLGtCQUFrQixpQkFBaUIsbUJBQW1CLENBQUMsMEJBQTBCLGVBQWUsaUJBQWlCLG1CQUFtQixDQUFDLENBQUMsYUFBYSxrQkFBa0IsZUFBZSxpQkFBaUIsa0JBQWtCLENBQUMscUJBQXFCLFdBQVcsa0JBQWtCLFNBQVMsT0FBTyxXQUFXLGFBQWEsaTNDQUFpM0MsNkJBQTZCLDJCQUEyQixDQUFDLGVBQWUsNEJBQTRCLG9CQUFvQixDQUFDLDJDQUEyQyxXQUFXLHlCQUF5QixDQUFDLG1CQUFtQixrQkFBa0IsYUFBYSxlQUFlLGlCQUFpQixtQkFBbUIsQ0FBQyxtRUFBbUUsVUFBVSxXQUFXLG9CQUFvQixzQkFBc0IsQ0FBQyxpREFBaUQsa0JBQWtCLENBQUMsK0NBQStDLGdCQUFnQixDQUFDLHdCQUF3QixtQkFBbUIsQ0FBQywwQkFBMEIsV0FBVyxDQUFDLDBCQUEwQixxQkFBcUIsWUFBWSxDQUFDLG1CQUFtQiw2QkFBNkIsQ0FBQyxtRUFBbUUsUUFBUSxDQUFDLGdDQUFnQywwQkFBMEIsQ0FBQyxtQ0FBbUMsd0JBQXdCLENBQUMsY0FBYyxRQUFRLGVBQWUsQ0FBQyxDQUFDIiwiZmlsZSI6InN0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbImh0bWx7bGluZS1oZWlnaHQ6MS4xNTstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlfWJvZHl7bWFyZ2luOjB9YXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLG5hdixzZWN0aW9ue2Rpc3BsYXk6YmxvY2t9aDF7Zm9udC1zaXplOjJlbTttYXJnaW46MC42N2VtIDB9ZmlnY2FwdGlvbixmaWd1cmUsbWFpbntkaXNwbGF5OmJsb2NrfWZpZ3VyZXttYXJnaW46MWVtIDQwcHh9aHJ7Ym94LXNpemluZzpjb250ZW50LWJveDtoZWlnaHQ6MDtvdmVyZmxvdzp2aXNpYmxlfXByZXtmb250LWZhbWlseTptb25vc3BhY2UsIG1vbm9zcGFjZTtmb250LXNpemU6MWVtfWF7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwOm9iamVjdHN9YWJiclt0aXRsZV17Ym9yZGVyLWJvdHRvbTpub25lO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2UsIG1vbm9zcGFjZTtmb250LXNpemU6MWVtfWRmbntmb250LXN0eWxlOml0YWxpY31tYXJre2JhY2tncm91bmQtY29sb3I6I2ZmMDtjb2xvcjojMDAwfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vie2JvdHRvbTotMC4yNWVtfXN1cHt0b3A6LTAuNWVtfWF1ZGlvLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfWF1ZGlvOm5vdChbY29udHJvbHNdKXtkaXNwbGF5Om5vbmU7aGVpZ2h0OjB9aW1ne2JvcmRlci1zdHlsZTpub25lfXN2Zzpub3QoOnJvb3Qpe292ZXJmbG93OmhpZGRlbn1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zaXplOjEwMCU7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46MH1idXR0b24saW5wdXR7b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgW3R5cGU9XCJidXR0b25cIl0sW3R5cGU9XCJyZXNldFwiXSxbdHlwZT1cInN1Ym1pdFwiXXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1cImJ1dHRvblwiXTo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1cInJlc2V0XCJdOjotbW96LWZvY3VzLWlubmVyLFt0eXBlPVwic3VibWl0XCJdOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH1idXR0b246LW1vei1mb2N1c3JpbmcsW3R5cGU9XCJidXR0b25cIl06LW1vei1mb2N1c3JpbmcsW3R5cGU9XCJyZXNldFwiXTotbW96LWZvY3VzcmluZyxbdHlwZT1cInN1Ym1pdFwiXTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH1maWVsZHNldHtwYWRkaW5nOjAuMzVlbSAwLjc1ZW0gMC42MjVlbX1sZWdlbmR7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7ZGlzcGxheTp0YWJsZTttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOjA7d2hpdGUtc3BhY2U6bm9ybWFsfXByb2dyZXNze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXRleHRhcmVhe292ZXJmbG93OmF1dG99W3R5cGU9XCJjaGVja2JveFwiXSxbdHlwZT1cInJhZGlvXCJde2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjB9W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9XCJzZWFyY2hcIl17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fVt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9ZGV0YWlscyxtZW51e2Rpc3BsYXk6YmxvY2t9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1jYW52YXN7ZGlzcGxheTppbmxpbmUtYmxvY2t9dGVtcGxhdGV7ZGlzcGxheTpub25lfVtoaWRkZW5de2Rpc3BsYXk6bm9uZX1odG1se2JveC1zaXppbmc6Ym9yZGVyLWJveH0qLCo6YmVmb3JlLCo6YWZ0ZXJ7Ym94LXNpemluZzppbmhlcml0fWJvZHl7YmFja2dyb3VuZDojZmZmOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfWhye2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjFweDtiYWNrZ3JvdW5kOiNFM0U3RUI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjI3LDIzMSwyMzUsMC4xKSAwLCByZ2JhKDIyNywyMzEsMjM1LDAuNikgNTAlLCByZ2JhKDIyNywyMzEsMjM1LDAuMSkgMTAwJSk7bWFyZ2luLXRvcDoyNHB4O21hcmdpbi1ib3R0b206MjRweH11bCxvbHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbToyNHB4O3BhZGRpbmctbGVmdDoyNHB4fXVse2xpc3Qtc3R5bGU6ZGlzY31vbHtsaXN0LXN0eWxlOmRlY2ltYWx9bGk+dWwsbGk+b2x7bWFyZ2luLWJvdHRvbTowfWRse21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjI0cHh9ZHR7Zm9udC13ZWlnaHQ6NzAwfWRke21hcmdpbi1sZWZ0OjI0cHg7bWFyZ2luLWJvdHRvbToyNHB4fWltZ3toZWlnaHQ6YXV0bzttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9ZmlndXJle21hcmdpbjoyNHB4IDB9ZmlnY2FwdGlvbntmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoyNHB4O3BhZGRpbmc6OHB4IDB9aW1nLHN2Z3tkaXNwbGF5OmJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW4tYm90dG9tOjI0cHg7d2lkdGg6MTAwJX10cntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRTNFN0VCfXRoe3RleHQtYWxpZ246bGVmdH10aCx0ZHtwYWRkaW5nOjEwcHggMTZweH10aDpmaXJzdC1jaGlsZCx0ZDpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MH10aDpsYXN0LWNoaWxkLHRkOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowfWh0bWx7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MjdweH1AbWVkaWEgKG1pbi13aWR0aDogNjQxcHgpe2h0bWx7Zm9udC1zaXplOjIwcHg7bGluZS1oZWlnaHQ6MzBweDtsZXR0ZXItc3BhY2luZzotMC4xcHh9fWJvZHl7Y29sb3I6IzVCNkY4Mjtmb250LXNpemU6MXJlbX1ib2R5LGJ1dHRvbixpbnB1dCxzZWxlY3QsdGV4dGFyZWF7Zm9udC1mYW1pbHk6XCJMYXRvXCIsIHNhbnMtc2VyaWZ9YXtjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9YTpob3ZlcixhOmFjdGl2ZXtvdXRsaW5lOjA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9aDEsaDIsaDMsaDQsaDUsaDYsLmgxLC5oMiwuaDMsLmg0LC5oNSwuaDZ7Y2xlYXI6Ym90aDtjb2xvcjojMjAyQjM2O2ZvbnQtZmFtaWx5OlwiUm9ib3RvXCIsIHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NTAwfWgxLC5oMXtmb250LXNpemU6MzZweDtsaW5lLWhlaWdodDo0NnB4O2xldHRlci1zcGFjaW5nOi0wLjJweH1AbWVkaWEgKG1pbi13aWR0aDogNjQxcHgpe2gxLC5oMXtmb250LXNpemU6NDJweDtsaW5lLWhlaWdodDo1MnB4O2xldHRlci1zcGFjaW5nOi0wLjFweH19aDIsLmgye2ZvbnQtc2l6ZTozMHB4O2xpbmUtaGVpZ2h0OjQwcHg7bGV0dGVyLXNwYWNpbmc6LTAuMXB4fUBtZWRpYSAobWluLXdpZHRoOiA2NDFweCl7aDIsLmgye2ZvbnQtc2l6ZTozNnB4O2xpbmUtaGVpZ2h0OjQ2cHg7bGV0dGVyLXNwYWNpbmc6LTAuMnB4fX1oMywuaDMsYmxvY2txdW90ZXtmb250LXNpemU6MjBweDtsaW5lLWhlaWdodDozMHB4O2xldHRlci1zcGFjaW5nOi0wLjFweH1AbWVkaWEgKG1pbi13aWR0aDogNjQxcHgpe2gzLC5oMyxibG9ja3F1b3Rle2ZvbnQtc2l6ZTozMHB4O2xpbmUtaGVpZ2h0OjQwcHg7bGV0dGVyLXNwYWNpbmc6LTAuMXB4fX1oNCxoNSxoNiwuaDQsLmg1LC5oNntmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoyN3B4O2xldHRlci1zcGFjaW5nOi0wLjFweH1AbWVkaWEgKG1pbi13aWR0aDogNjQxcHgpe2g0LGg1LGg2LC5oNCwuaDUsLmg2e2ZvbnQtc2l6ZToyMHB4O2xpbmUtaGVpZ2h0OjMwcHg7bGV0dGVyLXNwYWNpbmc6LTAuMXB4fX1AbWVkaWEgKG1heC13aWR0aDogNjQwcHgpey5oMS1tb2JpbGV7Zm9udC1zaXplOjM2cHg7bGluZS1oZWlnaHQ6NDZweDtsZXR0ZXItc3BhY2luZzotMC4ycHh9LmgyLW1vYmlsZXtmb250LXNpemU6MzBweDtsaW5lLWhlaWdodDo0MHB4O2xldHRlci1zcGFjaW5nOi0wLjFweH0uaDMtbW9iaWxle2ZvbnQtc2l6ZToyMHB4O2xpbmUtaGVpZ2h0OjMwcHg7bGV0dGVyLXNwYWNpbmc6LTAuMXB4fS5oNC1tb2JpbGUsLmg1LW1vYmlsZSwuaDYtbW9iaWxle2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjI3cHg7bGV0dGVyLXNwYWNpbmc6LTAuMXB4fX0udGV4dC1saWdodHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuOCl9LnRleHQtbGlnaHQgYXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuOCl9LnRleHQtbGlnaHQgaDEsLnRleHQtbGlnaHQgaDIsLnRleHQtbGlnaHQgaDMsLnRleHQtbGlnaHQgaDQsLnRleHQtbGlnaHQgaDUsLnRleHQtbGlnaHQgaDYsLnRleHQtbGlnaHQgLmgxLC50ZXh0LWxpZ2h0IC5oMiwudGV4dC1saWdodCAuaDMsLnRleHQtbGlnaHQgLmg0LC50ZXh0LWxpZ2h0IC5oNSwudGV4dC1saWdodCAuaDZ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50fS50ZXh0LXNte2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjI3cHg7bGV0dGVyLXNwYWNpbmc6LTAuMXB4fS50ZXh0LXhze2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjI0cHg7bGV0dGVyLXNwYWNpbmc6LTAuMXB4fWgxLGgyLC5oMSwuaDJ7bWFyZ2luLXRvcDo0OHB4O21hcmdpbi1ib3R0b206MTZweH1oMywuaDN7bWFyZ2luLXRvcDozNnB4O21hcmdpbi1ib3R0b206MTJweH1oNCxoNSxoNiwuaDQsLmg1LC5oNnttYXJnaW4tdG9wOjI0cHg7bWFyZ2luLWJvdHRvbTo0cHh9cHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbToyNHB4fWRmbixjaXRlLGVtLGl7Zm9udC1zdHlsZTppdGFsaWN9YmxvY2txdW90ZXtjb2xvcjojOTJBMkIxO2ZvbnQtc3R5bGU6aXRhbGljO21hcmdpbi10b3A6MjRweDttYXJnaW4tYm90dG9tOjI0cHg7bWFyZ2luLWxlZnQ6MjRweH1ibG9ja3F1b3RlOjpiZWZvcmV7Y29udGVudDpcIlxcMjAxQ1wifWJsb2NrcXVvdGU6OmFmdGVye2NvbnRlbnQ6XCJcXDIwMURcIn1ibG9ja3F1b3RlIHB7ZGlzcGxheTppbmxpbmV9YWRkcmVzc3tjb2xvcjojNUI2RjgyO2JvcmRlci13aWR0aDoxcHggMDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiNFM0U3RUI7cGFkZGluZzoyNHB4IDA7bWFyZ2luOjAgMCAyNHB4fXByZSxwcmUgaDEscHJlIGgyLHByZSBoMyxwcmUgaDQscHJlIGg1LHByZSBoNixwcmUgLmgxLHByZSAuaDIscHJlIC5oMyxwcmUgLmg0LHByZSAuaDUscHJlIC5oNntmb250LWZhbWlseTpcIkNvdXJpZXIgMTAgUGl0Y2hcIiwgQ291cmllciwgbW9ub3NwYWNlfXByZSxjb2RlLGtiZCx0dCx2YXJ7YmFja2dyb3VuZDojRjZGOEZBfXByZXtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoyNHB4O21hcmdpbi1ib3R0b206MS42ZW07bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjI0cHg7bWFyZ2luLXRvcDoyNHB4O21hcmdpbi1ib3R0b206MjRweH1jb2RlLGtiZCx0dCx2YXJ7Zm9udC1mYW1pbHk6TW9uYWNvLCBDb25zb2xhcywgXCJBbmRhbGUgTW9ub1wiLCBcIkRlamFWdSBTYW5zIE1vbm9cIiwgbW9ub3NwYWNlO2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6MnB4IDRweH1hYmJyLGFjcm9ueW17Y3Vyc29yOmhlbHB9bWFyayxpbnN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9c21hbGx7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MjdweDtsZXR0ZXItc3BhY2luZzotMC4xcHh9YixzdHJvbmd7Zm9udC13ZWlnaHQ6NzAwfWJ1dHRvbixpbnB1dCxzZWxlY3QsdGV4dGFyZWEsbGFiZWx7Zm9udC1zaXplOjE4cHg7bGluZS1oZWlnaHQ6MjdweH0uY29udGFpbmVyLC5jb250YWluZXItc217d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvO3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH1AbWVkaWEgKG1pbi13aWR0aDogNDgxcHgpey5jb250YWluZXIsLmNvbnRhaW5lci1zbXtwYWRkaW5nLWxlZnQ6MjRweDtwYWRkaW5nLXJpZ2h0OjI0cHh9fS5jb250YWluZXJ7bWF4LXdpZHRoOjExMjhweH0uY29udGFpbmVyLXNte21heC13aWR0aDo4NDhweH0uY29udGFpbmVyIC5jb250YWluZXItc217bWF4LXdpZHRoOjgwMHB4O3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH0uc2NyZWVuLXJlYWRlci10ZXh0e2NsaXA6cmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpO3Bvc2l0aW9uOmFic29sdXRlICFpbXBvcnRhbnQ7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3dvcmQtd3JhcDpub3JtYWwgIWltcG9ydGFudH0uc2NyZWVuLXJlYWRlci10ZXh0OmZvY3Vze2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaGFkb3c6MCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjYpO2NsaXA6YXV0byAhaW1wb3J0YW50O2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEzcHg7bGV0dGVyLXNwYWNpbmc6MHB4O2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxNnB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzQ5OTJGMCAhaW1wb3J0YW50O2JvcmRlcjpub25lO2hlaWdodDphdXRvO2xlZnQ6OHB4O3BhZGRpbmc6MTZweCAzMnB4O3RvcDo4cHg7d2lkdGg6YXV0bzt6LWluZGV4OjEwMDAwMH0ubGlzdC1yZXNldHtsaXN0LXN0eWxlOm5vbmU7cGFkZGluZzowfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50ZXh0LXByaW1hcnl7Y29sb3I6IzQ5OTJGMH0udGV4dC1zZWNvbmRhcnl7Y29sb3I6IzgzOERFQX0uaGFzLXRvcC1kaXZpZGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5oYXMtdG9wLWRpdmlkZXI6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjFweDtiYWNrZ3JvdW5kOiNFM0U3RUI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjI3LDIzMSwyMzUsMC4xKSAwLCByZ2JhKDIyNywyMzEsMjM1LDAuNikgNTAlLCByZ2JhKDIyNywyMzEsMjM1LDAuMSkgMTAwJSl9Lmhhcy1ib3R0b20tZGl2aWRlcntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFzLWJvdHRvbS1kaXZpZGVyOjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjFweDtiYWNrZ3JvdW5kOiNFM0U3RUI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjI3LDIzMSwyMzUsMC4xKSAwLCByZ2JhKDIyNywyMzEsMjM1LDAuNikgNTAlLCByZ2JhKDIyNywyMzEsMjM1LDAuMSkgMTAwJSl9Lm0tMHttYXJnaW46MH0ubXQtMHttYXJnaW4tdG9wOjB9Lm1yLTB7bWFyZ2luLXJpZ2h0OjB9Lm1iLTB7bWFyZ2luLWJvdHRvbTowfS5tbC0we21hcmdpbi1sZWZ0OjB9Lm0tOHttYXJnaW46OHB4fS5tdC04e21hcmdpbi10b3A6OHB4fS5tci04e21hcmdpbi1yaWdodDo4cHh9Lm1iLTh7bWFyZ2luLWJvdHRvbTo4cHh9Lm1sLTh7bWFyZ2luLWxlZnQ6OHB4fS5tLTE2e21hcmdpbjoxNnB4fS5tdC0xNnttYXJnaW4tdG9wOjE2cHh9Lm1yLTE2e21hcmdpbi1yaWdodDoxNnB4fS5tYi0xNnttYXJnaW4tYm90dG9tOjE2cHh9Lm1sLTE2e21hcmdpbi1sZWZ0OjE2cHh9Lm0tMjR7bWFyZ2luOjI0cHh9Lm10LTI0e21hcmdpbi10b3A6MjRweH0ubXItMjR7bWFyZ2luLXJpZ2h0OjI0cHh9Lm1iLTI0e21hcmdpbi1ib3R0b206MjRweH0ubWwtMjR7bWFyZ2luLWxlZnQ6MjRweH0ubS0zMnttYXJnaW46MzJweH0ubXQtMzJ7bWFyZ2luLXRvcDozMnB4fS5tci0zMnttYXJnaW4tcmlnaHQ6MzJweH0ubWItMzJ7bWFyZ2luLWJvdHRvbTozMnB4fS5tbC0zMnttYXJnaW4tbGVmdDozMnB4fS5tLTQwe21hcmdpbjo0MHB4fS5tdC00MHttYXJnaW4tdG9wOjQwcHh9Lm1yLTQwe21hcmdpbi1yaWdodDo0MHB4fS5tYi00MHttYXJnaW4tYm90dG9tOjQwcHh9Lm1sLTQwe21hcmdpbi1sZWZ0OjQwcHh9Lm0tNDh7bWFyZ2luOjQ4cHh9Lm10LTQ4e21hcmdpbi10b3A6NDhweH0ubXItNDh7bWFyZ2luLXJpZ2h0OjQ4cHh9Lm1iLTQ4e21hcmdpbi1ib3R0b206NDhweH0ubWwtNDh7bWFyZ2luLWxlZnQ6NDhweH0ubS01NnttYXJnaW46NTZweH0ubXQtNTZ7bWFyZ2luLXRvcDo1NnB4fS5tci01NnttYXJnaW4tcmlnaHQ6NTZweH0ubWItNTZ7bWFyZ2luLWJvdHRvbTo1NnB4fS5tbC01NnttYXJnaW4tbGVmdDo1NnB4fS5tLTY0e21hcmdpbjo2NHB4fS5tdC02NHttYXJnaW4tdG9wOjY0cHh9Lm1yLTY0e21hcmdpbi1yaWdodDo2NHB4fS5tYi02NHttYXJnaW4tYm90dG9tOjY0cHh9Lm1sLTY0e21hcmdpbi1sZWZ0OjY0cHh9LnAtMHtwYWRkaW5nOjB9LnB0LTB7cGFkZGluZy10b3A6MH0ucHItMHtwYWRkaW5nLXJpZ2h0OjB9LnBiLTB7cGFkZGluZy1ib3R0b206MH0ucGwtMHtwYWRkaW5nLWxlZnQ6MH0ucC04e3BhZGRpbmc6OHB4fS5wdC04e3BhZGRpbmctdG9wOjhweH0ucHItOHtwYWRkaW5nLXJpZ2h0OjhweH0ucGItOHtwYWRkaW5nLWJvdHRvbTo4cHh9LnBsLTh7cGFkZGluZy1sZWZ0OjhweH0ucC0xNntwYWRkaW5nOjE2cHh9LnB0LTE2e3BhZGRpbmctdG9wOjE2cHh9LnByLTE2e3BhZGRpbmctcmlnaHQ6MTZweH0ucGItMTZ7cGFkZGluZy1ib3R0b206MTZweH0ucGwtMTZ7cGFkZGluZy1sZWZ0OjE2cHh9LnAtMjR7cGFkZGluZzoyNHB4fS5wdC0yNHtwYWRkaW5nLXRvcDoyNHB4fS5wci0yNHtwYWRkaW5nLXJpZ2h0OjI0cHh9LnBiLTI0e3BhZGRpbmctYm90dG9tOjI0cHh9LnBsLTI0e3BhZGRpbmctbGVmdDoyNHB4fS5wLTMye3BhZGRpbmc6MzJweH0ucHQtMzJ7cGFkZGluZy10b3A6MzJweH0ucHItMzJ7cGFkZGluZy1yaWdodDozMnB4fS5wYi0zMntwYWRkaW5nLWJvdHRvbTozMnB4fS5wbC0zMntwYWRkaW5nLWxlZnQ6MzJweH0ucC00MHtwYWRkaW5nOjQwcHh9LnB0LTQwe3BhZGRpbmctdG9wOjQwcHh9LnByLTQwe3BhZGRpbmctcmlnaHQ6NDBweH0ucGItNDB7cGFkZGluZy1ib3R0b206NDBweH0ucGwtNDB7cGFkZGluZy1sZWZ0OjQwcHh9LnAtNDh7cGFkZGluZzo0OHB4fS5wdC00OHtwYWRkaW5nLXRvcDo0OHB4fS5wci00OHtwYWRkaW5nLXJpZ2h0OjQ4cHh9LnBiLTQ4e3BhZGRpbmctYm90dG9tOjQ4cHh9LnBsLTQ4e3BhZGRpbmctbGVmdDo0OHB4fS5wLTU2e3BhZGRpbmc6NTZweH0ucHQtNTZ7cGFkZGluZy10b3A6NTZweH0ucHItNTZ7cGFkZGluZy1yaWdodDo1NnB4fS5wYi01NntwYWRkaW5nLWJvdHRvbTo1NnB4fS5wbC01NntwYWRkaW5nLWxlZnQ6NTZweH0ucC02NHtwYWRkaW5nOjY0cHh9LnB0LTY0e3BhZGRpbmctdG9wOjY0cHh9LnByLTY0e3BhZGRpbmctcmlnaHQ6NjRweH0ucGItNjR7cGFkZGluZy1ib3R0b206NjRweH0ucGwtNjR7cGFkZGluZy1sZWZ0OjY0cHh9LnNyIC5oYXMtYW5pbWF0aW9ucyAuaXMtcmV2ZWFsaW5ne3Zpc2liaWxpdHk6aGlkZGVufS5pbnB1dCwudGV4dGFyZWF7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojRTNFN0VCO2NvbG9yOiM1QjZGODI7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uaW5wdXQ6OnBsYWNlaG9sZGVyLC50ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7Y29sb3I6IzkyQTJCMX0uaW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwudGV4dGFyZWE6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojOTJBMkIxfS5pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIsLnRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojOTJBMkIxfS5pbnB1dDpob3ZlciwudGV4dGFyZWE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNkNGRhZTB9LmlucHV0OmFjdGl2ZSwuaW5wdXQ6Zm9jdXMsLnRleHRhcmVhOmFjdGl2ZSwudGV4dGFyZWE6Zm9jdXN7b3V0bGluZTpub25lO2JvcmRlci1jb2xvcjojNDk5MkYwfS5pbnB1dFtkaXNhYmxlZF0sLnRleHRhcmVhW2Rpc2FibGVkXXtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojRjZGOEZBO2JvcmRlci1jb2xvcjojRjZGOEZBfS5pbnB1dHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtmb250LXNpemU6MTZweDtsZXR0ZXItc3BhY2luZzotMC4xcHg7bGluZS1oZWlnaHQ6MjBweDtib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjEzcHggMTZweDtoZWlnaHQ6NDhweDtib3gtc2hhZG93Om5vbmV9LmlucHV0IC5pbmxpbmUtaW5wdXR7ZGlzcGxheTppbmxpbmU7d2lkdGg6YXV0b30udGV4dGFyZWF7ZGlzcGxheTpibG9jazttaW4td2lkdGg6MTAwJTtyZXNpemU6dmVydGljYWx9LnRleHRhcmVhIC5pbmxpbmUtdGV4dGFyZWF7ZGlzcGxheTppbmxpbmU7d2lkdGg6YXV0b30uZmllbGQtZ3JvdXBlZD4uY29udHJvbDpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206OHB4fUBtZWRpYSAobWluLXdpZHRoOiA2NDFweCl7LmZpZWxkLWdyb3VwZWR7ZGlzcGxheTpmbGV4fS5maWVsZC1ncm91cGVkPi5jb250cm9se2ZsZXgtc2hyaW5rOjB9LmZpZWxkLWdyb3VwZWQ+LmNvbnRyb2wuY29udHJvbC1leHBhbmRlZHtmbGV4LWdyb3c6MTtmbGV4LXNocmluazoxfS5maWVsZC1ncm91cGVkPi5jb250cm9sOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1yaWdodDo4cHh9fS5idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtmb250LXNpemU6MTNweDtsZXR0ZXItc3BhY2luZzowcHg7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE2cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RleHQtZGVjb3JhdGlvbjpub25lICFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM0OTkyRjAgIWltcG9ydGFudDtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MTZweCAzMnB4O2hlaWdodDo0OHB4O3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0uYnV0dG9uOmFjdGl2ZXtvdXRsaW5lOjB9LmJ1dHRvbjo6YmVmb3Jle2JvcmRlci1yYWRpdXM6MnB4fS5idXR0b24tc2hhZG93e3Bvc2l0aW9uOnJlbGF0aXZlfS5idXR0b24tc2hhZG93OjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtib3gtc2hhZG93OjAgOHB4IDI0cHggcmdiYSgzMiw0Myw1NCwwLjEyKTttaXgtYmxlbmQtbW9kZTptdWx0aXBseTt0cmFuc2l0aW9uOmJveC1zaGFkb3cgLjE1cyBlYXNlfS5idXR0b24tc2hhZG93OmhvdmVyOjpiZWZvcmV7Ym94LXNoYWRvdzowIDhweCAyNHB4IHJnYmEoMzIsNDMsNTQsMC4yNSl9LmJ1dHRvbi1zbXtwYWRkaW5nOjhweCAyNHB4O2hlaWdodDozMnB4fS5idXR0b24tc20uYnV0dG9uLXNoYWRvdzo6YmVmb3Jle2JveC1zaGFkb3c6MCA0cHggMTZweCByZ2JhKDMyLDQzLDU0LDAuMTIpfS5idXR0b24tc20uYnV0dG9uLXNoYWRvdzpob3Zlcjo6YmVmb3Jle2JveC1zaGFkb3c6MCA0cHggMTZweCByZ2JhKDMyLDQzLDU0LDAuMjUpfS5idXR0b24tcHJpbWFyeXtjb2xvcjojZmZmICFpbXBvcnRhbnQ7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXMgZWFzZX0uYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZDojMmU4M2VmO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDY1ZGVnLCAjMTI3NEVEIDAsICM0OTkyRjAgMTAwJSl9LmJ1dHRvbi1wcmltYXJ5OmhvdmVye2JhY2tncm91bmQ6IzMzODZlZjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg2NWRlZywgIzE3NzdlZCAwLCAjNGU5NWYwIDEwMCUpfS5idXR0b24tYmxvY2t7ZGlzcGxheTpmbGV4fS5zaXRlLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjI0cHggMH0uc2l0ZS1oZWFkZXI6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MTYlO3dpZHRoOjg0JTtoZWlnaHQ6NTAwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRRNE1DSWdhR1ZwWjJoMFBTSTJOVEFpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrSUNBZ0lEeHdZWFJvSUdROUlrMDNNekV1TWpBM0lEWTBPUzQ0TURKRE9UTTFMalE0TkNBMk5ESXVNVFFnTVRRNE1DQXpNemN1TXpJMUlERTBPREFnTVRnd0xqZzRPR013TFRFMU5pNDBNemd0TXpBNUxqYzBOQzB6Tmk0d05UVXROekl3TFRNMkxqQTFOVk13TFRFM05DNDBPRE1nTUNBeE16VXVNVFEwWXpBZ016QTVMall5TnlBMU1qWXVPVE1nTlRJeUxqTXlJRGN6TVM0eU1EY2dOVEUwTGpZMU9Ib2lJR1pwYkd3OUlpTkdOa1k0UmtFaUlHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSXZQand2YzNablBnPT0pO2JhY2tncm91bmQtc2l6ZToxMTQwcHggNTAwcHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS5zaXRlLWhlYWRlci1pbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyfS5oZWFkZXItbGlua3N7ZGlzcGxheTppbmxpbmUtZmxleH0uaGVhZGVyLWxpbmtzIGxpe2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhlYWRlci1saW5rcyBhOm5vdCguYnV0dG9uKXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxOHB4O2xldHRlci1zcGFjaW5nOjBweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzVCNkY4Mjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6MTZweDtwYWRkaW5nOjhweCAyNHB4fS5oZWFkZXItbGlua3MgYTpub3QoLmJ1dHRvbik6aG92ZXIsLmhlYWRlci1saW5rcyBhOm5vdCguYnV0dG9uKTphY3RpdmV7Y29sb3I6IzIwMkIzNn1AbWVkaWEgKG1pbi13aWR0aDogNjQxcHgpey5zaXRlLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjI0cHggMH0uc2l0ZS1oZWFkZXI6OmJlZm9yZXt0b3A6LTUwJTtsZWZ0OjIwJTt3aWR0aDo4MCU7aGVpZ2h0OjY1MXB4O2JhY2tncm91bmQtc2l6ZToxNDgwcHggNjUxcHh9fS5oZXJve3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctdG9wOjQwcHg7cGFkZGluZy1ib3R0b206NDBweH0uaGVyby1wYXJhZ3JhcGh7bWFyZ2luLWJvdHRvbTozMnB4fS5oZXJvLWJyb3dzZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDo4MHB4fS5oZXJvLWJyb3dzZXItaW5uZXJ7cG9zaXRpb246cmVsYXRpdmV9Lmhlcm8tYnJvd3Nlci1pbm5lciBzdmd7d2lkdGg6MTAwJTtoZWlnaHQ6YXV0bztvdmVyZmxvdzp2aXNpYmxlfS5idWJibGUtMSwuYnViYmxlLTIsLmJ1YmJsZS0zLC5idWJibGUtNHtwb3NpdGlvbjphYnNvbHV0ZX0uYnViYmxlLTEgc3ZnLC5idWJibGUtMiBzdmcsLmJ1YmJsZS0zIHN2ZywuYnViYmxlLTQgc3Zne2hlaWdodDphdXRvfS5idWJibGUtMXt0b3A6LTE1cHg7bGVmdDo3MHB4fS5idWJibGUtMSBzdmd7d2lkdGg6MzRweH0uYnViYmxlLTJ7Ym90dG9tOjA7cmlnaHQ6LTMwcHh9LmJ1YmJsZS0yIHN2Z3t3aWR0aDo3OHB4fS5idWJibGUtM3tsZWZ0Oi00MHB4O2JvdHRvbTotNDBweH0uYnViYmxlLTMgc3Zne3dpZHRoOjE0M3B4fS5idWJibGUtNHt0b3A6LTI1cHg7cmlnaHQ6LTU0cHh9LmJ1YmJsZS00IHN2Z3t3aWR0aDoxMDRweH1AbWVkaWEgKG1pbi13aWR0aDogNjQxcHgpey5oZXJve3BhZGRpbmctdG9wOjgwcHg7cGFkZGluZy1ib3R0b206MTIwcHh9Lmhlcm8tcGFyYWdyYXBoe21hcmdpbi1ib3R0b206NDBweDtwYWRkaW5nLWxlZnQ6NzJweDtwYWRkaW5nLXJpZ2h0OjcycHh9LmJ1YmJsZS0xIHN2ZywuYnViYmxlLTIgc3ZnLC5idWJibGUtMyBzdmcsLmJ1YmJsZS00IHN2Z3t3aWR0aDphdXRvfS5idWJibGUtMXt0b3A6ODVweDtsZWZ0Oi0zMHB4fS5idWJibGUtMntib3R0b206LThweDtyaWdodDotNzVweH0uYnViYmxlLTN7bGVmdDotMTQwcHg7Ym90dG9tOi0xMjBweH0uYnViYmxlLTR7dG9wOi0zNXB4O3JpZ2h0Oi0xMTBweH19LmZlYXR1cmVze3Bvc2l0aW9uOnJlbGF0aXZlfS5mZWF0dXJlczo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjQ4MnB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1USXdOU0lnYUdWcFoyaDBQU0kwT0RJaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJK0lDQThaeUJtYVd4c1BTSnViMjVsSWlCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaVBpQWdJQ0E4Y0dGMGFDQmtQU0pOT0RRdU1qRXlJRFE0TVVNek15NHhOVElnTkRRM0xqUTNJREFnTkRBM0xqZzRNU0F3SURNMk1pNDNORE1nTUNBeU1EUXVOVEExSURRM09DNDJOelFnTUNBMk16WXVPRFEzSURCak1UVTRMakUzTkNBd0lETXpMalF6TkNBeE56SXVOelF4SURNekxqUXpOQ0F6TXpBdU9UZ2dNQ0ExTlM0M09ESWdOaTQyTkRZZ01UQTNMakF6TlNBNExqTXlNeUF4TlRBdU1ESklPRFF1TWpFeWVpSWdabWxzYkQwaUkwWTJSamhHUVNJdlBpQWdJQ0E4Y0dGMGFDQmtQU0pOTVRFd05DNDRNVGNnTkRneExqSTBNbXd0T0RZeExqUTROUzB1TVRkRE1qRXhMak00TWlBME5UTXVNamM0SURFNU1pQTBNakl1TURFeklERTVNaUF6T0RjdU5UQTBJREU1TWlBeU1qa3VNamdnTkRjM0xqYzVNU0EwSURZek5TNDVOeUEwSURjNU5DNHhORGNnTkNBeE1qQTFJREUwT1M0ek5UZ2dNVEl3TlNBek1EY3VOVGd4WXpBZ05Ua3VORFExTFRRd0xqZ3lNeUF4TWpBdU5UUXpMVEV3TUM0eE9ETWdNVGN6TGpZMk1Yb2lJR1pwYkd3dGIzQmhZMmwwZVQwaUxqVWlJR1pwYkd3OUlpTkdSa1lpTHo0Z0lEd3ZaejQ4TDNOMlp6ND0pO2JhY2tncm91bmQtc2l6ZToxMjA1cHggNDgycHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS5mZWF0dXJlcy13cmFwe2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi1yaWdodDotMTJweDttYXJnaW4tbGVmdDotMTJweH0uZmVhdHVyZXMtd3JhcDpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi04cHh9LmZlYXR1cmVzLXdyYXA6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOi04cHh9LmZlYXR1cmV7cGFkZGluZzo4cHggMTJweDt3aWR0aDozNjhweDttYXgtd2lkdGg6MzQ0cHg7ZmxleC1ncm93OjF9LmZlYXR1cmUtaW5uZXJ7aGVpZ2h0OjEwMCV9LmZlYXR1cmUtaWNvbntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo1MCV9LmZlYXR1cmUtaWNvbjo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6ODBweDtoZWlnaHQ6ODBweDtib3JkZXItcmFkaXVzOjUwJTtib3gtc2hhZG93OjAgMTZweCA0OHB4ICNFM0U3RUI7bWl4LWJsZW5kLW1vZGU6bXVsdGlwbHl9QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOiBhdXRvKXsuZmVhdHVyZS1pY29uOjpiZWZvcmV7Ym94LXNoYWRvdzowIDE2cHggNDhweCByZ2JhKDMyLDQzLDU0LDAuMTIpfX0uZmVhdHVyZS10aXRsZXttYXJnaW4tdG9wOjIwcHh9QG1lZGlhIChtaW4td2lkdGg6IDY0MXB4KXsuZmVhdHVyZXM6OmJlZm9yZXtsZWZ0OjU1JTt3aWR0aDo0NSV9LmZlYXR1cmVzLXdyYXA6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotMzJweH0uZmVhdHVyZXMtd3JhcDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LTMycHh9LmZlYXR1cmV7cGFkZGluZzozMnB4IDEycHh9LmZlYXR1cmUtdGl0bGV7bWFyZ2luLXRvcDoxNnB4fX0ubmV3c2xldHRlciAuc2VjdGlvbi1pbm5lcntwYWRkaW5nLWJvdHRvbTo2NHB4fS5uZXdzbGV0dGVyIC5zZWN0aW9uLXBhcmFncmFwaHttYXJnaW4tYm90dG9tOjMycHh9Lm5ld3NsZXR0ZXItZm9ybXttYXgtd2lkdGg6NDc1cHg7bWFyZ2luOjAgYXV0b31AbWVkaWEgKG1pbi13aWR0aDogNjQxcHgpey5uZXdzbGV0dGVyIC5zZWN0aW9uLWlubmVye3BhZGRpbmctYm90dG9tOjEyMHB4fS5uZXdzbGV0dGVyIC5zZWN0aW9uLXBhcmFncmFwaHttYXJnaW4tYm90dG9tOjQwcHg7cGFkZGluZy1sZWZ0OjcycHg7cGFkZGluZy1yaWdodDo3MnB4fX0uaXMtYm94ZWR7YmFja2dyb3VuZDojRjZGOEZBfS5ib2R5LXdyYXB7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi1oZWlnaHQ6MTAwdmh9LmJveGVkLWNvbnRhaW5lcnttYXgtd2lkdGg6MTQ0MHB4O21hcmdpbjowIGF1dG87Ym94LXNoYWRvdzowIDE2cHggNDhweCAjRTNFN0VCfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjogYXV0byl7LmJveGVkLWNvbnRhaW5lcntib3gtc2hhZG93OjAgMTZweCA0OHB4IHJnYmEoMzIsNDMsNTQsMC4xMil9fW1haW57ZmxleDoxIDAgYXV0b30uc2VjdGlvbi1pbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXRvcDo0OHB4O3BhZGRpbmctYm90dG9tOjQ4cHh9QG1lZGlhIChtaW4td2lkdGg6IDY0MXB4KXsuc2VjdGlvbi1pbm5lcntwYWRkaW5nLXRvcDo4MHB4O3BhZGRpbmctYm90dG9tOjgwcHh9fS5zaXRlLWZvb3Rlcntwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2xldHRlci1zcGFjaW5nOjBweH0uc2l0ZS1mb290ZXI6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoyNTlweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFEwTUNJZ2FHVnBaMmgwUFNJeU1UY2lJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SWdlRzFzYm5NNmVHeHBibXM5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR3hwYm1zaVBpQWdQR1JsWm5NK0lDQWdJRHh3WVhSb0lHUTlJazB5TmpFdU55QXlPRFl1TmpneVl6UXlNUzQwTnpjZ01DQXhORGc0TGprM055QXhOell1TURjNElERTBPRGd1T1RjM0lETTVMakl6TkhNME56Z3VOelUwTFRJME9DNHdORE1nTlRjdU1qYzRMVEkwT0M0d05ETmpMVEU1T0M0M05EWWdNQzAwTmpndU5UWTJJRE11TlRVMUxUY3hPUzQ1TlRjdE1URXVNak5ET0RBMkxqSTNNU0ExTUM0d056WWdOVFF4TGprZ01qY3VNakkzSURNME5DNDVOemNnTlRJdU5ETTRMVEkzTGpZMk5TQXhNREF1TVRRMUxURTFPUzQzTnpZZ01qZzJMalk0TXlBeU5qRXVOeUF5T0RZdU5qZ3plaUlnYVdROUltRWlMejRnSUR3dlpHVm1jejRnSUR4bklIUnlZVzV6Wm05eWJUMGlkSEpoYm5Oc1lYUmxLQzB5T0RVZ0xUUXhLU0lnWm1sc2JEMGlibTl1WlNJZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lqNGdJQ0FnUEcxaGMyc2dhV1E5SW1JaUlHWnBiR3c5SWlObVptWWlQaUFnSUNBZ0lEeDFjMlVnZUd4cGJtczZhSEpsWmowaUkyRWlMejRnSUNBZ1BDOXRZWE5yUGlBZ0lDQThkWE5sSUdacGJHdzlJaU00TXpoRVJVRWlJSGhzYVc1ck9taHlaV1k5SWlOaElpOCtJQ0FnSUR4d1lYUm9JR1E5SWsweU5EQXVOekkzSURNeU5pNHpPVFZqTkRJeExqUTNOaUF3SURrM01pNDNORFFnTVRjNUxqYzROeUE1TnpJdU56UTBJRFF5TGprME0zTXhNamt1TWpnMkxURTNOUzQzTkRndE1qa3lMakU1TFRFM05TNDNORGd0TWpVMkxqTXhOQzB5TWpZdU5EazBMVEkxTmk0ek1UUXRPRGt1TmpWak1DQXhNell1T0RRekxUZzBOUzQzTVRjZ01qSXlMalExTlMwME1qUXVNalFnTWpJeUxqUTFOWG9pSUdacGJHdzlJaU5CTUVFMlJVVWlJRzFoYzJzOUluVnliQ2dqWWlraUlIUnlZVzV6Wm05eWJUMGliV0YwY21sNEtDMHhJREFnTUNBeElERXpOVFV1TVRZeUlEQXBJaTgrSUNBZ0lEeHdZWFJvSUdROUlrMDBORFV1TnlBek9EY3VOamd5WXpReU1TNDBOemNnTUNBNU56SXVOelExSURFM09TNDNPRGNnT1RjeUxqYzBOU0EwTWk0NU5ETnpOVGM1TGprME1TMHlOVFV1TWpRMklERTFPQzQwTmpVdE1qVTFMakkwTmkwM01EWXVPVFk1TFRFME5pNDVPVFl0TnpBMkxqazJPUzB4TUM0eE5USmpNQ0F4TXpZdU9EUXpMVGcwTlM0M01UY2dNakl5TGpRMU5TMDBNalF1TWpRZ01qSXlMalExTlhvaUlHWnBiR3c5SWlNMk1qWkRSRFVpSUcxaGMyczlJblZ5YkNnallpa2lMejRnSUR3dlp6NDhMM04yWno0PSk7YmFja2dyb3VuZC1zaXplOjE0NDBweCAyNTlweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LnNpdGUtZm9vdGVyIGF7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjgpO3RleHQtZGVjb3JhdGlvbjpub25lfS5zaXRlLWZvb3RlciBhOmhvdmVyLC5zaXRlLWZvb3RlciBhOmFjdGl2ZXtjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnNpdGUtZm9vdGVyLWlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtwYWRkaW5nLXRvcDo0MHB4O3BhZGRpbmctYm90dG9tOjQwcHh9LmZvb3Rlci1icmFuZCwuZm9vdGVyLWxpbmtzLC5mb290ZXItc29jaWFsLWxpbmtzLC5mb290ZXItY29weXJpZ2h0e2ZsZXg6bm9uZTt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZm9vdGVyLWJyYW5kLC5mb290ZXItbGlua3MsLmZvb3Rlci1zb2NpYWwtbGlua3N7bWFyZ2luLWJvdHRvbToyNHB4fS5mb290ZXItbGlua3MgbGkrbGksLmZvb3Rlci1zb2NpYWwtbGlua3MgbGkrbGl7bWFyZ2luLWxlZnQ6MTZweH0uZm9vdGVyLXNvY2lhbC1saW5rcyBsaXtkaXNwbGF5OmlubGluZS1mbGV4fS5mb290ZXItc29jaWFsLWxpbmtzIGxpIGF7cGFkZGluZzo4cHh9QG1lZGlhIChtaW4td2lkdGg6IDY0MXB4KXsuc2l0ZS1mb290ZXI6OmJlZm9yZXtoZWlnaHQ6MjAycHh9LnNpdGUtZm9vdGVyLWlubmVye2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5mb290ZXItYnJhbmQsLmZvb3Rlci1saW5rcywuZm9vdGVyLXNvY2lhbC1saW5rcywuZm9vdGVyLWNvcHlyaWdodHtmbGV4OjUwJX0uZm9vdGVyLWJyYW5kLC5mb290ZXItY29weXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5mb290ZXItbGlua3MsLmZvb3Rlci1zb2NpYWwtbGlua3N7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5mb290ZXItbGlua3N7b3JkZXI6MTttYXJnaW4tYm90dG9tOjB9fVxuIl19 */ \ No newline at end of file diff --git a/web/css/styles.css b/web/css/styles.css deleted file mode 100644 index c78d75e..0000000 --- a/web/css/styles.css +++ /dev/null @@ -1,1179 +0,0 @@ -/* Description: Master CSS file */ - - -/***************************************** -Table Of Contents: - -- General Styles -- Navigation -- Header -- Services -- Details 1 -- Details 2 -- Contact -- Copyright -- Back To Top Button -- Media Queries -******************************************/ - - -/***************************************** -Colors: -- Backgrounds, navbar - dark gray #38343d -- Backgrounds - light gray #eaeaea -- Headings text, buttons - black #333333 -- Body text - dark gray #6b747b -******************************************/ - - -/**************************/ - - -/* General Styles */ - - -/**************************/ - -body, -html { - width: 100%; - height: 100%; -} - -body, -p { - color: #6b747b; - font: 400 1rem/1.625rem "Open Sans", sans-serif; -} - -h1 { - color: #333333; - font: 500 2.5rem/3.25rem "Poppins", sans-serif; -} - -h2 { - color: #333333; - font: 500 2.125rem/2.75rem "Poppins", sans-serif; -} - -h3 { - color: #333333; - font: 500 1.75rem/2.375rem "Poppins", sans-serif; -} - -h4 { - color: #333333; - font: 500 1.5rem/2.125rem "Poppins", sans-serif; -} - -h5 { - color: #333333; - font: 500 1.25rem/1.75rem "Poppins", sans-serif; -} - -h6 { - color: #333333; - font: 500 1rem/1.5rem "Poppins", sans-serif; -} - -.p-large { - font-size: 1.125rem; - line-height: 1.75rem; -} - -.p-small { - font-size: 0.875rem; - line-height: 1.5rem; -} - -.li-space-lg li { - margin-bottom: 0.5rem; -} - -a { - color: #6b747b; - text-decoration: underline; -} - -a:hover { - color: #6b747b; - text-decoration: underline; -} - -.no-line { - text-decoration: none; -} - -.no-line:hover { - text-decoration: none; -} - -a.white { - color: #ffffff; -} - -.bg-gray { - background-color: #eaeaea; -} - -.btn-solid-reg { - display: inline-block; - padding: 1.375rem 2.25rem 1.375rem 2.25rem; - border: 1px solid #333333; - background-color: #333333; - color: #ffffff; - font-weight: 600; - font-size: 0.875rem; - line-height: 0; - text-decoration: none; - transition: all 0.2s; -} - -.btn-solid-reg:hover { - border: 1px solid #333333; - background-color: transparent; - color: #333333; - text-decoration: none; -} - -.btn-solid-lg { - display: inline-block; - padding: 1.5rem 2.5rem 1.5rem 2.5rem; - border: 1px solid #333333; - background-color: #333333; - color: #ffffff; - font-weight: 600; - font-size: 0.875rem; - line-height: 0; - text-decoration: none; - transition: all 0.2s; -} - -.btn-solid-lg:hover { - border: 1px solid #333333; - background-color: transparent; - color: #333333; - text-decoration: none; -} - -.btn-outline-reg { - display: inline-block; - padding: 1.375rem 2.25rem 1.375rem 2.25rem; - border: 1px solid #333333; - background-color: transparent; - color: #333333; - font-weight: 600; - font-size: 0.875rem; - line-height: 0; - text-decoration: none; - transition: all 0.2s; -} - -.btn-outline-reg:hover { - border: 1px solid #333333; - background-color: #333333; - color: #ffffff; - text-decoration: none; -} - -.btn-outline-lg { - display: inline-block; - padding: 1.5rem 2.5rem 1.5rem 2.5rem; - border: 1px solid #333333; - background-color: transparent; - color: #333333; - font-weight: 600; - font-size: 0.875rem; - line-height: 0; - text-decoration: none; - transition: all 0.2s; -} - -.btn-outline-lg:hover { - border: 1px solid #333333; - background-color: #333333; - color: #ffffff; - text-decoration: none; -} - -.btn-outline-sm { - display: inline-block; - padding: 1rem 1.5rem 1rem 1.5rem; - border: 1px solid #333333; - background-color: transparent; - color: #333333; - font-weight: 600; - font-size: 0.875rem; - line-height: 0; - text-decoration: none; - transition: all 0.2s; -} - -.btn-outline-sm:hover { - border: 1px solid #333333; - background-color: #333333; - color: #ffffff; - text-decoration: none; -} - -.form-group { - position: relative; - margin-bottom: 1.25rem; -} - -.form-group.has-error.has-danger { - margin-bottom: 0.625rem; -} - -.form-group.has-error.has-danger .help-block.with-errors ul { - margin-top: 0.375rem; -} - -.label-control { - position: absolute; - top: 0.875rem; - left: 1.375rem; - color: #6b747b; - opacity: 1; - font-size: 0.875rem; - line-height: 1.375rem; - cursor: text; - transition: all 0.2s ease; -} - -.form-control-input:focus+.label-control, -.form-control-input.notEmpty+.label-control, -.form-control-textarea:focus+.label-control, -.form-control-textarea.notEmpty+.label-control { - top: 0.125rem; - color: #6b747b; - opacity: 1; - font-size: 0.75rem; - font-weight: 700; -} - -.form-control-input, -.form-control-select { - display: block; - /* needed for proper display of the label in Firefox, IE, Edge */ - width: 100%; - padding-top: 1.125rem; - padding-bottom: 0.125rem; - padding-left: 1.3125rem; - border: 1px solid #6b747b; - background-color: #ffffff; - color: #333333; - font-size: 0.875rem; - line-height: 1.875rem; - transition: all 0.2s; - -webkit-appearance: none; - /* removes inner shadow on form inputs on ios safari */ -} - -.form-control-select { - padding-top: 0.5rem; - padding-bottom: 0.5rem; - height: 3.25rem; - color: #7d838a; -} - -select { - /* you should keep these first rules in place to maintain cross-browser behavior */ - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - background-image: url('../images/down-arrow.png'); - background-position: 96% 50%; - background-repeat: no-repeat; - outline: none; -} - -.form-control-textarea { - display: block; - /* used to eliminate a bottom gap difference between Chrome and IE/FF */ - width: 100%; - height: 14rem; - /* used instead of html rows to normalize height between Chrome and IE/FF */ - padding-top: 1.5rem; - padding-left: 1.3125rem; - border: 1px solid #6b747b; - background-color: #ffffff; - color: #333333; - font-size: 0.875rem; - line-height: 1.5rem; - transition: all 0.2s; -} - -.form-control-input:focus, -.form-control-select:focus, -.form-control-textarea:focus { - border: 1px solid #a8b0b6; - outline: none; - /* Removes blue border on focus */ -} - -.form-control-input:hover, -.form-control-select:hover, -.form-control-textarea:hover { - border: 1px solid #a8b0b6; -} - -.checkbox { - font-size: 0.75rem; - line-height: 1.25rem; -} - -input[type='checkbox'] { - vertical-align: -10%; - margin-right: 0.5rem; -} - -.form-control-submit-button { - display: inline-block; - width: 100%; - height: 3.25rem; - border: 1px solid #333333; - background-color: #333333; - color: #ffffff; - font-weight: 600; - font-size: 0.875rem; - line-height: 0; - cursor: pointer; - transition: all 0.2s; -} - -.form-control-submit-button:hover { - border: 1px solid #333333; - background-color: transparent; - color: #333333; -} - - -/* Fade-move Animation For Details Lightbox - Magnific Popup */ - - -/* at start */ - -.my-mfp-slide-bottom .zoom-anim-dialog { - opacity: 0; - transition: all 0.2s ease-out; - -webkit-transform: translateY(-1.25rem) perspective(37.5rem) rotateX(10deg); - -ms-transform: translateY(-1.25rem) perspective(37.5rem) rotateX(10deg); - transform: translateY(-1.25rem) perspective(37.5rem) rotateX(10deg); -} - - -/* animate in */ - -.my-mfp-slide-bottom.mfp-ready .zoom-anim-dialog { - opacity: 1; - -webkit-transform: translateY(0) perspective(37.5rem) rotateX(0); - -ms-transform: translateY(0) perspective(37.5rem) rotateX(0); - transform: translateY(0) perspective(37.5rem) rotateX(0); -} - - -/* animate out */ - -.my-mfp-slide-bottom.mfp-removing .zoom-anim-dialog { - opacity: 0; - -webkit-transform: translateY(-0.625rem) perspective(37.5rem) rotateX(10deg); - -ms-transform: translateY(-0.625rem) perspective(37.5rem) rotateX(10deg); - transform: translateY(-0.625rem) perspective(37.5rem) rotateX(10deg); -} - - -/* dark overlay, start state */ - -.my-mfp-slide-bottom.mfp-bg { - opacity: 0; - transition: opacity 0.2s ease-out; -} - - -/* animate in */ - -.my-mfp-slide-bottom.mfp-ready.mfp-bg { - opacity: 0.8; -} - - -/* animate out */ - -.my-mfp-slide-bottom.mfp-removing.mfp-bg { - opacity: 0; -} - - -/* end of fade-move animation for details lightbox - magnific popup */ - - -/* Fade Animation For Image Lightbox - Magnific Popup And Morphtext */ - -@-webkit-keyframes fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -@keyframes fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -.fadeIn { - -webkit-animation: fadeIn 0.6s; - animation: fadeIn 0.6s; -} - -@-webkit-keyframes fadeOut { - from { - opacity: 1; - } - to { - opacity: 0; - } -} - -@keyframes fadeOut { - from { - opacity: 1; - } - to { - opacity: 0; - } -} - -.fadeOut { - -webkit-animation: fadeOut 0.8s; - animation: fadeOut 0.8s; -} - - -/* end of fade animation for image lightbox - magnific popup and morphtext */ - - -/**********************/ - - -/* Navigation */ - - -/**********************/ - -.navbar { - padding-top: 0.625rem; - padding-bottom: 0.625rem; - background-color: transparent; - font-weight: 600; - font-size: 0.875rem; - line-height: 0.875rem; - box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.025); -} - -.navbar .navbar-brand { - padding-top: 0.25rem; - padding-bottom: 0.25rem; -} - -.navbar .logo-image img { - width: 80px; -} - -.navbar .logo-text { - color: #ffffff; - font-weight: 600; - font-size: 2rem; - line-height: 1rem; - text-decoration: none; -} - -.offcanvas-collapse { - position: fixed; - top: 3.25rem; - /* adjusts the height between the top of the page and the offcanvas menu */ - bottom: 0; - left: 100%; - width: 100%; - padding-right: 1rem; - padding-left: 1rem; - overflow-y: auto; - visibility: hidden; - background-color: #38343d; - transition: visibility .3s ease-in-out, -webkit-transform .3s ease-in-out; - transition: transform .3s ease-in-out, visibility .3s ease-in-out; - transition: transform .3s ease-in-out, visibility .3s ease-in-out, -webkit-transform .3s ease-in-out; -} - -.offcanvas-collapse.open { - visibility: visible; - -webkit-transform: translateX(-100%); - transform: translateX(-100%); -} - -.navbar .navbar-nav { - margin-top: 0.75rem; - margin-bottom: 0.5rem; -} - -.navbar .nav-item .nav-link { - padding-top: 0.625rem; - padding-bottom: 0.625rem; - color: #c4c2c2; - text-decoration: none; - transition: all 0.2s ease; -} - -.navbar .nav-item .nav-link:hover, -.navbar .nav-item .nav-link.active { - color: #ffffff; -} - -.navbar .navbar-toggler { - padding: 0; - border: none; - font-size: 1.25rem; -} - - -/*****************/ - - -/* Header */ - - -/*****************/ - -.header { - text-align: center; -} - -.header .left-wrapper { - background: url("../images/background-dots.png") #38343d; - background-blend-mode: color-burn; -} - -.header .left-wrapper .text-container { - position: relative; - padding-top: 9.5rem; - padding-bottom: 7rem; -} - -.header .left-wrapper .text-container:before { - position: absolute; - z-index: 0; - top: 90px; - left: 0; - display: inline-block; - width: 80px; - height: 80px; - border-style: solid; - border-width: 25px 25px 0 0; - border-color: #555555; - opacity: 0.5; - content: ''; - transform: rotate(-90deg); -} - -.header .left-wrapper .text-container:after { - position: absolute; - z-index: 0; - right: 0; - bottom: 60px; - display: inline-block; - width: 80px; - height: 80px; - border-style: solid; - border-width: 25px 25px 0 0; - border-color: #555555; - opacity: 0.5; - content: ''; - transform: rotate(90deg); -} - -.header .left-wrapper h2 { - position: relative; - z-index: 1; - color: #ffffff; - font-size: 1.875rem; - line-height: 2.375rem; -} - -.header .right-wrapper { - background: linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../images/header-right-background.jpg") center; - background-size: cover; -} - -.header .right-wrapper .text-container { - padding-top: 2.375rem; - padding-bottom: 2rem; -} - - -/********************/ - - -/* Services */ - - -/********************/ - -.basic-1 { - padding-top: 10rem; - padding-bottom: 6.375rem; - background: linear-gradient(to bottom, rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.5)), url("../images/services-background.jpg") center; - background-size: cover; -} - -.basic-1 .services-container { - margin-bottom: 4rem; -} - -.basic-1 .services-icon { - margin-bottom: 0.75rem; -} - -.basic-1 .services-icon img { - width: 70px; -} - - -/*********************/ - - -/* Details 1 */ - - -/*********************/ - -.basic-2 { - padding-top: 12rem; - padding-bottom: 7rem; - overflow: hidden; -} - -.basic-2 h2 { - margin-bottom: 1.5rem; -} - -.basic-2 p { - margin-bottom: 1.5rem; -} - -.basic-2 .image-container { - position: absolute; - z-index: -1; - top: -60px; - right: -260px; - width: 400px; -} - -.basic-2 .btn-solid-reg { - margin-right: 0.5rem; -} - - -/*********************/ - - -/* Details 2 */ - - -/*********************/ - -.basic-3 { - overflow: hidden; - padding-top: 7rem; - padding-bottom: 9rem; -} - -.basic-3 h2 { - margin-bottom: 1.5rem; -} - -.basic-3 p { - margin-bottom: 1.5rem; -} - -.basic-3 .list-unstyled .fas { - color: #333333; - font-size: 0.375rem; - line-height: 1.625rem; -} - -.basic-3 .list-unstyled .media-body { - margin-left: 0.5rem; -} - -.basic-3 .image-container { - position: absolute; - z-index: -1; - top: -60px; - left: -260px; - width: 400px; -} - - -/*******************/ - - -/* Contact */ - - -/*******************/ - -.form-1 .left-wrapper { - background: url("../images/background-dots.png") #38343d; - background-blend-mode: color-burn; -} - -.form-1 .left-wrapper .text-container { - padding-top: 7rem; - padding-bottom: 5rem; -} - -.form-1 .left-wrapper h2 { - color: #ffffff; - margin-bottom: 1.5rem; -} - -.form-1 .left-wrapper p { - margin-bottom: 2.75rem; - color: #ffffff; -} - -.form-1 .left-wrapper .contact-container { - display: flex; - align-items: flex-start; - margin-bottom: 2.75rem; - color: #ffffff; -} - -.form-1 .left-wrapper .contact-icon img { - width: 30px; - opacity: 0.5; -} - -.form-1 .left-wrapper .contact-text { - flex: 1; - margin-left: 0.75rem; -} - -.form-1 .right-wrapper { - background: linear-gradient(to bottom, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.9)), url("../images/contact-right-background.jpg") center; - background-size: cover; -} - -.form-1 .right-wrapper .form-container { - padding-top: 7rem; - padding-bottom: 7rem; -} - -.form-1 .form-control-input, -.form-1 .form-control-textarea { - background-color: transparent; -} - - -/*********************/ - - -/* Copyright */ - - -/*********************/ - -.copyright { - padding-top: 2.5rem; - padding-bottom: 1.75rem; - text-align: center; -} - -.copyright p, -.copyright a { - color: #7a848d; - text-decoration: none; -} - -.copyright .fab { - margin-right: 0.375rem; - margin-left: 0.375rem; - color: #333333; - font-size: 1.25rem; - transition: all 0.2s; -} - -.copyright .fab:hover { - color: #777777; -} - -.copyright .fa { - margin-right: 0.375rem; - margin-left: 0.375rem; - color: #333333; - font-size: 1.1rem; - transition: all 0.2s; -} - -.copyright .fa:hover { - color: #777777; -} - - -/******************************/ - - -/* Back To Top Button */ - - -/******************************/ - -a.back-to-top { - position: fixed; - z-index: 999; - right: 12px; - bottom: 12px; - display: none; - width: 42px; - height: 42px; - border-radius: 30px; - background: #38343d url("../images/up-arrow.png") no-repeat center 47%; - background-size: 18px 18px; - text-indent: -9999px; -} - -a:hover.back-to-top { - background-color: #000000; -} - - -/*************************/ - - -/* Media Queries */ - - -/*************************/ - - -/* Min-width 768px */ - -@media (min-width: 768px) { - /* Header */ - .header .left-wrapper .text-container { - padding-top: 11.5rem; - padding-bottom: 10rem; - } - .header .left-wrapper .text-container:before { - top: 120px; - } - .header .left-wrapper .text-container:after { - bottom: 110px; - } - .header .left-wrapper h2 { - width: 45rem; - margin-right: auto; - margin-left: auto; - font-size: 2.125rem; - line-height: 2.875rem; - } - .header .right-wrapper .h1-large { - letter-spacing: 8px; - } - /* end of header */ - /* Details 1 */ - .basic-2 .image-container { - top: -80px; - right: -300px; - } - /* end of details 1 */ - /* Details 1 */ - .basic-3 .image-container { - top: -80px; - left: -300px; - } - /* end of details 1 */ - /* Contact */ - .form-1 .left-wrapper .contact-icon img { - width: 50px; - } - .form-1 .left-wrapper .contact-text { - margin-left: 1.5rem; - } - /* end of contact */ -} - - -/* end of min-width 768px */ - - -/* Min-width 992px */ - -@media (min-width: 992px) { - /* General Styles */ - .h1-large { - font-size: 3.5rem; - line-height: 3.375rem; - } - .h2-heading { - width: 35.25rem; - margin-right: auto; - margin-left: auto; - } - .p-heading { - width: 42.5rem; - margin-right: auto; - margin-left: auto; - } - /* end of general styles */ - /* Navigation */ - .navbar { - padding-top: 1.75rem; - background-color: transparent; - box-shadow: none; - transition: all 0.2s; - } - .navbar.top-nav-collapse { - padding-top: 0.625rem; - padding-bottom: 0.625rem; - background-color: transparent; - } - .offcanvas-collapse { - position: static; - top: auto; - bottom: auto; - left: auto; - width: auto; - padding-right: 0; - padding-left: 0; - background-color: transparent; - overflow-y: visible; - visibility: visible; - } - .offcanvas-collapse.open { - -webkit-transform: none; - transform: none; - } - .navbar .navbar-nav { - margin-top: 0; - margin-bottom: 0; - } - .navbar .nav-item .nav-link { - padding-right: 0.625rem; - padding-left: 0.625rem; - color: #38343d; - } - .navbar .nav-item .nav-link:hover, - .navbar .nav-item .nav-link.active { - color: #b4b4b4; - } - .navbar.top-nav-collapse .nav-item .nav-link { - color: #c4c2c2; - } - .navbar.top-nav-collapse .nav-item .nav-link:hover, - .navbar.top-nav-collapse .nav-item .nav-link.active { - color: #ffffff; - } - /* end of navigation */ - /* Header */ - .header .left-wrapper .text-container { - padding-top: 15rem; - padding-bottom: 13rem; - } - .header .right-wrapper .text-container { - padding-top: 3.375rem; - padding-bottom: 3rem; - } - /* end of header */ - /* Services */ - .basic-1 .services-container { - display: flex; - align-items: flex-start; - margin-right: 2rem; - margin-left: 2rem; - } - .basic-1 .services-text { - flex: 1; - margin-left: 2rem; - } - /* end of services */ - /* Details 1 */ - .basic-2 .text-container { - width: 720px; - } - .basic-2 .image-container { - right: -100px; - } - /* end of details 1 */ - /* Details 2 */ - .basic-3 .text-container { - width: 720px; - margin-right: 0; - margin-left: auto; - } - .basic-3 .image-container { - left: -100px; - } - /* end of details 2 */ - /* Copyright */ - .copyright p { - margin-bottom: 0; - } - /* end of copyright */ -} - - -/* end of min-width 992px */ - - -/* Min-width 1200px */ - -@media (min-width: 1200px) { - /* General Styles */ - .h1-large { - font-size: 4.5rem; - } - /* end of general styles */ - /* Navigation */ - .navbar .container { - max-width: 100%; - padding-right: 1.5rem; - padding-left: 1.5rem; - } - /* end of navigation */ - /* Header */ - .header .left-wrapper .text-container { - padding-top: 23rem; - padding-bottom: 23rem; - } - .header .left-wrapper .text-container:before { - top: 300px; - left: 70px; - } - .header .left-wrapper .text-container:after { - bottom: 320px; - right: 70px; - } - .header .left-wrapper h2 { - width: 29rem; - } - .header .right-wrapper .text-container { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - padding: 0; - } - .header .right-wrapper .h1-large { - margin-bottom: 1.875rem; - } - /* end of header */ - /* Services */ - .basic-1 .services-container { - margin-right: 3rem; - margin-left: 4rem; - } - .basic-1 .services-icon img { - width: 80px; - } - /* end of services */ - /* Details 1 */ - .basic-2 { - padding-top: 17rem; - padding-bottom: 13rem; - } - .basic-2 .text-container { - width: 640px; - margin-left: 4rem; - } - .basic-2 .image-container { - top: -145px; - right: 60px; - width: 500px; - } - /* end of details 1 */ - /* Details 2 */ - .basic-3 { - padding-top: 15rem; - padding-bottom: 18rem; - } - .basic-3 .text-container { - width: 640px; - margin-right: 4rem; - } - .basic-3 .image-container { - top: -145px; - left: 60px; - width: 500px; - } - /* end of details 2 */ - /* Contact */ - .form-1 .left-wrapper .text-container { - width: 29rem; - margin-right: auto; - margin-left: auto; - } - .form-1 .right-wrapper .form-container { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - padding: 0; - } - .form-1 .right-wrapper .form-container form { - width: 40rem; - margin-right: auto; - margin-left: auto; - } - /* end of contact */ -} - - -/* end of min-width 1200px */ - -.download-badge { - width: 180px; - transition: all 0.2s; -} - -.download-badge:hover { - transform: scale(1.1); - rotate: -3deg; -} - - -/* black 2px thin scrollbar */ - -::-webkit-scrollbar { - width: 4px; - height: 2px; -} - -::-webkit-scrollbar-track { - background: #f1f1f1; -} - -::-webkit-scrollbar-thumb { - background: #38343d; -} - - -/* .logo-image hover animation */ - -.logo-image { - transition: all 0.2s; -} - -.logo-image:hover { - transform: scale(1.1); - rotate: 3deg; -} \ No newline at end of file diff --git a/web/favicon-16x16.png b/web/favicon-16x16.png new file mode 100644 index 0000000..0917aa6 Binary files /dev/null and b/web/favicon-16x16.png differ diff --git a/web/favicon-32x32.png b/web/favicon-32x32.png new file mode 100644 index 0000000..a2cb747 Binary files /dev/null and b/web/favicon-32x32.png differ diff --git a/web/favicon.ico b/web/favicon.ico new file mode 100644 index 0000000..327045f Binary files /dev/null and b/web/favicon.ico differ diff --git a/web/fonts/LED-Dot-Matrix.woff2 b/web/fonts/LED-Dot-Matrix.woff2 new file mode 100644 index 0000000..6109671 Binary files /dev/null and b/web/fonts/LED-Dot-Matrix.woff2 differ diff --git a/web/fonts/SpaceGrotesk-VariableFont_wght.woff2 b/web/fonts/SpaceGrotesk-VariableFont_wght.woff2 new file mode 100644 index 0000000..a09e98c Binary files /dev/null and b/web/fonts/SpaceGrotesk-VariableFont_wght.woff2 differ diff --git a/web/icon.png b/web/icon.png new file mode 100644 index 0000000..18b0bb5 Binary files /dev/null and b/web/icon.png differ diff --git a/web/images/background-dots.png b/web/images/background-dots.png deleted file mode 100644 index 4d557dc..0000000 Binary files a/web/images/background-dots.png and /dev/null differ diff --git a/web/images/favicon.png b/web/images/favicon.png deleted file mode 100644 index 4dd8ae0..0000000 Binary files a/web/images/favicon.png and /dev/null differ diff --git a/web/images/header-right-background.jpg b/web/images/header-right-background.jpg deleted file mode 100644 index efff00c..0000000 Binary files a/web/images/header-right-background.jpg and /dev/null differ diff --git a/web/images/logo.png b/web/images/logo.png deleted file mode 100644 index b71c092..0000000 Binary files a/web/images/logo.png and /dev/null differ diff --git a/web/images/screenshot.png b/web/images/screenshot.png deleted file mode 100644 index d00515e..0000000 Binary files a/web/images/screenshot.png and /dev/null differ diff --git a/web/img/book-open-text.svg b/web/img/book-open-text.svg new file mode 100644 index 0000000..6f7cd23 --- /dev/null +++ b/web/img/book-open-text.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/web/img/circle-fading-arrow-up.svg b/web/img/circle-fading-arrow-up.svg new file mode 100644 index 0000000..a83df40 --- /dev/null +++ b/web/img/circle-fading-arrow-up.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/web/img/coffee.svg b/web/img/coffee.svg new file mode 100644 index 0000000..70db1fd --- /dev/null +++ b/web/img/coffee.svg @@ -0,0 +1,16 @@ + + + + + + diff --git a/web/images/download-badge.png b/web/img/download-badge.png similarity index 100% rename from web/images/download-badge.png rename to web/img/download-badge.png diff --git a/web/img/footerbg.svg b/web/img/footerbg.svg new file mode 100644 index 0000000..ef53342 --- /dev/null +++ b/web/img/footerbg.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/web/img/github.svg b/web/img/github.svg new file mode 100644 index 0000000..2908924 --- /dev/null +++ b/web/img/github.svg @@ -0,0 +1,14 @@ + + + + diff --git a/web/img/icon.png b/web/img/icon.png new file mode 100644 index 0000000..18b0bb5 Binary files /dev/null and b/web/img/icon.png differ diff --git a/web/img/logo.png b/web/img/logo.png new file mode 100644 index 0000000..4471df2 Binary files /dev/null and b/web/img/logo.png differ diff --git a/web/img/screenshot.png b/web/img/screenshot.png new file mode 100644 index 0000000..f66ee7e Binary files /dev/null and b/web/img/screenshot.png differ diff --git a/web/img/telescope.svg b/web/img/telescope.svg new file mode 100644 index 0000000..1a69c9a --- /dev/null +++ b/web/img/telescope.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/web/img/trash-2.svg b/web/img/trash-2.svg new file mode 100644 index 0000000..0798fa3 --- /dev/null +++ b/web/img/trash-2.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/web/img/twitter.svg b/web/img/twitter.svg new file mode 100644 index 0000000..faae324 --- /dev/null +++ b/web/img/twitter.svg @@ -0,0 +1,13 @@ + + + diff --git a/web/index.html b/web/index.html index 1b1a359..647e00d 100644 --- a/web/index.html +++ b/web/index.html @@ -2,140 +2,257 @@ - - - - - - - - - - - - - - - - - - - - - - - - Dots - the friendly .NET SDK manager - - - - - - - - - - + + + + DOTS - the friendly .NET SDK manager + + + + + + - - - - - + + + + + + + + + + + + - - + + + + + - - + DoTS + - the + friendly .NET SDK manager + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + a clean, simple and easy-to-use .NET SDK manager for Windows and macOS with Linux + builds coming soon. Always free and open-source. + + + + + + - - - - GitHub - - - + + + + + + + + + + Discover + + Browse and install .NET SDKs with ease. No more manual downloads and + installations. + + + + + + + - - - - - - - - + + Update + + One-click updates to automatically bump to the latest SDK versions for all + channels. + + + + + + + + + + + Cleanup + + Remove and uninstall old SDKs and their associated files with a single click. + Keep your system clean. + + + + + + + + + + Metadata + + + Quickly view detailed information about installed SDKs, including version, + release date notes, and more. + + + + + + + - - - - - - - Dots- the friendly .NET SDK manager - - - - - - - - - - - + + + + + + Open Source + + + Dots is developed in the open and is available on GitHub. Contribute to the project, + report issues, or request new features. We'd love to hear from you! + + + + + + + - - - - - - - - + + + + + + - - - - - - - Copyright 2023 © H3Y.studio - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/web/js/bootstrap.min.js b/web/js/bootstrap.min.js deleted file mode 100644 index ef4d9cb..0000000 --- a/web/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v4.5.2 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t,e){for(var n=0;n=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};a.jQueryDetection(),e.fn.emulateTransitionEnd=r,e.event.special[a.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var l="alert",c=e.fn[l],h=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=a.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=a.getTransitionDurationFromElement(t);e(t).one(a.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),e.fn[l]=h._jQueryInterface,e.fn[l].Constructor=h,e.fn[l].noConflict=function(){return e.fn[l]=c,h._jQueryInterface};var u=e.fn.button,d=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var s=i.querySelector(".active");s&&e(s).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();("LABEL"!==i.tagName||o&&"checkbox"!==o.type)&&d._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(a.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(g),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=s({},p,t),a.typeCheckConfig(f,t,_),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&v[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&v[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),s=this._items.length-1;if((i&&0===o||n&&o===s)&&!this._config.wrap)return e;var r=(o+("prev"===t?-1:1))%this._items.length;return-1===r?this._items[this._items.length-1]:this._items[r]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),s=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(s),s},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,s,r=this,l=this._element.querySelector(".active.carousel-item"),c=this._getItemIndex(l),h=n||l&&this._getItemByDirection(t,l),u=this._getItemIndex(h),d=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",s="left"):(i="carousel-item-right",o="carousel-item-prev",s="right"),h&&e(h).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(h,s).isDefaultPrevented()&&l&&h){this._isSliding=!0,d&&this.pause(),this._setActiveIndicatorElement(h);var f=e.Event("slid.bs.carousel",{relatedTarget:h,direction:s,from:c,to:u});if(e(this._element).hasClass("slide")){e(h).addClass(o),a.reflow(h),e(l).addClass(i),e(h).addClass(i);var g=parseInt(h.getAttribute("data-interval"),10);g?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=g):this._config.interval=this._config.defaultInterval||this._config.interval;var m=a.getTransitionDurationFromElement(l);e(l).one(a.TRANSITION_END,(function(){e(h).removeClass(i+" "+o).addClass("active"),e(l).removeClass("active "+o+" "+i),r._isSliding=!1,setTimeout((function(){return e(r._element).trigger(f)}),0)})).emulateTransitionEnd(m)}else e(l).removeClass("active"),e(h).addClass("active"),this._isSliding=!1,e(this._element).trigger(f);d&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=s({},p,e(this).data());"object"==typeof n&&(o=s({},o,n));var r="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof r){if("undefined"==typeof i[r])throw new TypeError('No method named "'+r+'"');i[r]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=a.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var r=s({},e(o).data(),e(this).data()),l=this.getAttribute("data-slide-to");l&&(r.interval=!1),t._jQueryInterface.call(e(o),r),l&&e(o).data("bs.carousel").to(l),n.preventDefault()}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return p}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",b._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n0&&(this._selector=r,this._triggerArray.push(s))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var s=e.Event("show.bs.collapse");if(e(this._element).trigger(s),!s.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var r=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[r]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var l="scroll"+(r[0].toUpperCase()+r.slice(1)),c=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[r]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(c),this._element.style[r]=this._element[l]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",a.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var s=0;s0},i._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=s({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},i._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),s({},t,this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,s=i.length;o0&&r--,40===n.which&&rdocument.documentElement.clientHeight;i||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var o=a.getTransitionDurationFromElement(this._dialog);e(this._element).off(a.TRANSITION_END),e(this._element).one(a.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),i||e(t._element).one(a.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}else this.hide()},n._showElement=function(t){var n=this,i=e(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),e(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,i&&a.reflow(this._element),e(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var s=e.Event("shown.bs.modal",{relatedTarget:t}),r=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(s)};if(i){var l=a.getTransitionDurationFromElement(this._dialog);e(this._dialog).one(a.TRANSITION_END,r).emulateTransitionEnd(l)}else r()},n._enforceFocus=function(){var t=this;e(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()}))},n._setEscapeEvent=function(){var t=this;this._isShown?e(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||e(this._element).off("keydown.dismiss.bs.modal")},n._setResizeEvent=function(){var t=this;this._isShown?e(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):e(window).off("resize.bs.modal")},n._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){e(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger("hidden.bs.modal")}))},n._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},n._showBackdrop=function(t){var n=this,i=e(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add(i),e(this._backdrop).appendTo(document.body),e(this._element).on("click.dismiss.bs.modal",(function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&n._triggerBackdropTransition()})),i&&a.reflow(this._backdrop),e(this._backdrop).addClass("show"),!t)return;if(!i)return void t();var o=a.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(a.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass("show");var s=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass("fade")){var r=a.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(a.TRANSITION_END,s).emulateTransitionEnd(r)}else s()}else t&&t()},n._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:L,popperConfig:null},K={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},X=function(){function t(t,e){if("undefined"==typeof n)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var i=t.prototype;return i.enable=function(){this._isEnabled=!0},i.disable=function(){this._isEnabled=!1},i.toggleEnabled=function(){this._isEnabled=!this._isEnabled},i.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},i.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},i.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var o=a.findShadowRoot(this.element),s=e.contains(null!==o?o:this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!s)return;var r=this.getTipElement(),l=a.getUID(this.constructor.NAME);r.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&e(r).addClass("fade");var c="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,h=this._getAttachment(c);this.addAttachmentClass(h);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,r,this._getPopperConfig(h)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var d=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=a.getTransitionDurationFromElement(this.tip);e(this.tip).one(a.TRANSITION_END,d).emulateTransitionEnd(f)}else d()}},i.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),s=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var r=a.getTransitionDurationFromElement(i);e(i).one(a.TRANSITION_END,s).emulateTransitionEnd(r)}else s();this._hoverState=""}},i.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},i.isWithContent=function(){return Boolean(this.getTitle())},i.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},i.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},i.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},i.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=Q(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},i.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},i._getPopperConfig=function(t){var e=this;return s({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},i._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=s({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},i._getContainer=function(){return!1===this.config.container?document.body:a.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},i._getAttachment=function(t){return V[t.toUpperCase()]},i._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=s({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},i._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},i._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},i._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},i._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},i._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==M.indexOf(t)&&delete n[t]})),"number"==typeof(t=s({},this.constructor.Default,n,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a.typeCheckConfig(B,t,this.constructor.DefaultType),t.sanitize&&(t.template=Q(t.template,t.whiteList,t.sanitizeFn)),t},i._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},i._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(U);null!==n&&n.length&&t.removeClass(n.join(""))},i._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},i._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return z}},{key:"NAME",get:function(){return B}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return K}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return W}}]),t}();e.fn[B]=X._jQueryInterface,e.fn[B].Constructor=X,e.fn[B].noConflict=function(){return e.fn[B]=H,X._jQueryInterface};var Y="popover",$=e.fn[Y],J=new RegExp("(^|\\s)bs-popover\\S+","g"),G=s({},X.Default,{placement:"right",trigger:"click",content:"",template:''}),Z=s({},X.DefaultType,{content:"(string|element|function)"}),tt={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},et=function(t){var n,i;function s(){return t.apply(this,arguments)||this}i=t,(n=s).prototype=Object.create(i.prototype),n.prototype.constructor=n,n.__proto__=i;var r=s.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},r.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(J);null!==n&&n.length>0&&t.removeClass(n.join(""))},s._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new s(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},o(s,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return G}},{key:"NAME",get:function(){return Y}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return tt}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return Z}}]),s}(X);e.fn[Y]=et._jQueryInterface,e.fn[Y].Constructor=et,e.fn[Y].noConflict=function(){return e.fn[Y]=$,et._jQueryInterface};var nt="scrollspy",it=e.fn[nt],ot={offset:10,method:"auto",target:""},st={offset:"number",method:"string",target:"(string|element)"},rt=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,s=a.getSelectorFromElement(t);if(s&&(n=document.querySelector(s)),n){var r=n.getBoundingClientRect();if(r.width||r.height)return[e(n)[i]().top+o,s]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=s({},ot,"object"==typeof t&&t?t:{})).target&&a.isElement(t.target)){var n=e(t.target).attr("id");n||(n=a.getUID(nt),e(t.target).attr("id",n)),t.target="#"+n}return a.typeCheckConfig(nt,t,st),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t li > .active":".active";i=(i=e.makeArray(e(o).find(r)))[i.length-1]}var l=e.Event("hide.bs.tab",{relatedTarget:this._element}),c=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(l),e(this._element).trigger(c),!c.isDefaultPrevented()&&!l.isDefaultPrevented()){s&&(n=document.querySelector(s)),this._activate(this._element,o);var h=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,h):h()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,s=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],r=i&&s&&e(s).hasClass("fade"),l=function(){return o._transitionComplete(t,s,i)};if(s&&r){var c=a.getTransitionDurationFromElement(s);e(s).removeClass("show").one(a.TRANSITION_END,l).emulateTransitionEnd(c)}else l()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),a.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var s=e(t).closest(".dropdown")[0];if(s){var r=[].slice.call(s.querySelectorAll(".dropdown-toggle"));e(r).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),lt._jQueryInterface.call(e(this),"show")})),e.fn.tab=lt._jQueryInterface,e.fn.tab.Constructor=lt,e.fn.tab.noConflict=function(){return e.fn.tab=at,lt._jQueryInterface};var ct=e.fn.toast,ht={animation:"boolean",autohide:"boolean",delay:"number"},ut={animation:!0,autohide:!0,delay:500},dt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),a.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=s({},ut,e(this._element).data(),"object"==typeof t&&t?t:{}),a.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},n._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"DefaultType",get:function(){return ht}},{key:"Default",get:function(){return ut}}]),t}();e.fn.toast=dt._jQueryInterface,e.fn.toast.Constructor=dt,e.fn.toast.noConflict=function(){return e.fn.toast=ct,dt._jQueryInterface},t.Alert=h,t.Button=d,t.Carousel=b,t.Collapse=C,t.Dropdown=I,t.Modal=P,t.Popover=et,t.Scrollspy=rt,t.Tab=lt,t.Toast=dt,t.Tooltip=X,t.Util=a,Object.defineProperty(t,"__esModule",{value:!0})})); -//# sourceMappingURL=bootstrap.min.js.map \ No newline at end of file diff --git a/web/js/dots.min.js b/web/js/dots.min.js new file mode 100644 index 0000000..a967aa8 --- /dev/null +++ b/web/js/dots.min.js @@ -0,0 +1 @@ +function setYear() { document.getElementById("year").innerText = (new Date).getFullYear() } setYear(); diff --git a/web/js/jquery.min.js b/web/js/jquery.min.js deleted file mode 100644 index b061403..0000000 --- a/web/js/jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="x",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"",""],col:[2,"",""],tr:[2,"",""],td:[3,"",""],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 60) { - $(".fixed-top").addClass("top-nav-collapse"); - } else { - $(".fixed-top").removeClass("top-nav-collapse"); - } - }); - - // jQuery for page scrolling feature - requires jQuery Easing plugin - $(function() { - $(document).on('click', 'a.page-scroll', function(event) { - var $anchor = $(this); - $('html, body').stop().animate({ - scrollTop: $($anchor.attr('href')).offset().top - }, 600, 'easeInOutExpo'); - event.preventDefault(); - }); - }); - - // offcanvas script from Bootstrap + added element to close menu on click in small viewport - $('[data-toggle="offcanvas"], .navbar-nav li a:not(.dropdown-toggle').on('click', function () { - $('.offcanvas-collapse').toggleClass('open') - }) - - // hover in desktop mode - function toggleDropdown (e) { - const _d = $(e.target).closest('.dropdown'), - _m = $('.dropdown-menu', _d); - setTimeout(function(){ - const shouldOpen = e.type !== 'click' && _d.is(':hover'); - _m.toggleClass('show', shouldOpen); - _d.toggleClass('show', shouldOpen); - $('[data-toggle="dropdown"]', _d).attr('aria-expanded', shouldOpen); - }, e.type === 'mouseleave' ? 300 : 0); - } - $('body') - .on('mouseenter mouseleave','.dropdown',toggleDropdown) - .on('click', '.dropdown-menu a', toggleDropdown); - - - /* Rotating Text - Morphtext */ - $("#js-rotating").Morphext({ - // The [in] animation type. Refer to Animate.css for a list of available animations. - animation: "fadeIn", - // An array of phrases to rotate are created based on this separator. Change it if you wish to separate the phrases differently (e.g. So Simple | Very Doge | Much Wow | Such Cool). - separator: ",", - // The delay between the changing of each phrase in milliseconds. - speed: 2000, - complete: function () { - // Called after the entrance animation is executed. - } - }); - - - /* Move Form Fields Label When User Types */ - // for input and textarea fields - $("input, textarea").keyup(function(){ - if ($(this).val() != '') { - $(this).addClass('notEmpty'); - } else { - $(this).removeClass('notEmpty'); - } - }); - - - /* Back To Top Button */ - // create the back to top button - $('body').prepend('Back to Top'); - var amountScrolled = 700; - $(window).scroll(function() { - if ($(window).scrollTop() > amountScrolled) { - $('a.back-to-top').fadeIn('500'); - } else { - $('a.back-to-top').fadeOut('500'); - } - }); - - - /* Removes Long Focus On Buttons */ - $(".button, a, button").mouseup(function() { - $(this).blur(); - }); - -})(jQuery); \ No newline at end of file diff --git a/web/js/scrollreveal.min.js b/web/js/scrollreveal.min.js new file mode 100644 index 0000000..cc87de4 --- /dev/null +++ b/web/js/scrollreveal.min.js @@ -0,0 +1 @@ +(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,e.ScrollReveal=t())})(this,function(){"use strict";function e(){return document.documentElement.classList.remove("sr"),{clean:function(){},destroy:function(){},reveal:function(){},sync:function(){},get noop(){return!0}}}function t(){document.documentElement.classList.add("sr"),document.body?document.body.style.height="100%":document.addEventListener("DOMContentLoaded",function(){document.body.style.height="100%"})}function n(e){return"object"==typeof window.Node?e instanceof window.Node:null!==e&&"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName}function i(e){var t=Object.prototype.toString.call(e),i=/^\[object (HTMLCollection|NodeList|Object)\]$/;return"object"==typeof window.NodeList?e instanceof window.NodeList:null!==e&&"object"==typeof e&&"number"==typeof e.length&&i.test(t)&&(0===e.length||n(e[0]))}function r(e,t){if(void 0===t&&(t=document),e instanceof Array)return e.filter(n);if(n(e))return[e];if(i(e))return Array.prototype.slice.call(e);if("string"==typeof e)try{var r=t.querySelectorAll(e);return Array.prototype.slice.call(r)}catch(e){return[]}return[]}function o(e){return null!==e&&e instanceof Object&&(e.constructor===Object||"[object Object]"===Object.prototype.toString.call(e))}function s(e,t){if(o(e)){var n=Object.keys(e);return n.forEach(function(n){return t(e[n],n,e)})}if(e instanceof Array)return e.forEach(function(n,i){return t(n,i,e)});throw new TypeError("Expected either an array or object literal.")}function a(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];if(this.constructor.debug&&console){var i="%cScrollReveal: "+e;t.forEach(function(e){return i+="\n — "+e}),console.log(i,"color: #ea654b;")}}function c(){var e=this,t=function(){return{active:[],stale:[]}},n=t(),i=t(),o=t();try{s(r("[data-sr-id]"),function(e){var t=parseInt(e.getAttribute("data-sr-id"));n.active.push(t)})}catch(e){throw e}s(this.store.elements,function(e){-1===n.active.indexOf(e.id)&&n.stale.push(e.id)}),s(n.stale,function(t){return delete e.store.elements[t]}),s(this.store.elements,function(e){-1===o.active.indexOf(e.containerId)&&o.active.push(e.containerId),e.hasOwnProperty("sequence")&&-1===i.active.indexOf(e.sequence.id)&&i.active.push(e.sequence.id)}),s(this.store.containers,function(e){-1===o.active.indexOf(e.id)&&o.stale.push(e.id)}),s(o.stale,function(t){var n=e.store.containers[t].node;n.removeEventListener("scroll",e.delegate),n.removeEventListener("resize",e.delegate),delete e.store.containers[t]}),s(this.store.sequences,function(e){-1===i.active.indexOf(e.id)&&i.stale.push(e.id)}),s(i.stale,function(t){return delete e.store.sequences[t]})}function l(e){if(e.constructor!==Array)throw new TypeError("Expected array.");if(16===e.length)return e;if(6===e.length){var t=u();return t[0]=e[0],t[1]=e[1],t[4]=e[2],t[5]=e[3],t[12]=e[4],t[13]=e[5],t}throw new RangeError("Expected array with either 6 or 16 values.")}function u(){for(var e=[],t=0;t<16;t++)t%5==0?e.push(1):e.push(0);return e}function d(e,t){for(var n=l(e),i=l(t),r=[],o=0;o<4;o++)for(var s=[n[o],n[o+4],n[o+8],n[o+12]],a=0;a<4;a++){var c=4*a,u=[i[c],i[c+1],i[c+2],i[c+3]],d=s[0]*u[0]+s[1]*u[1]+s[2]*u[2]+s[3]*u[3];r[o+c]=d}return r}function f(e){if("string"==typeof e){var t=e.match(/matrix(3d)?\(([^)]+)\)/);if(t){var n=t[2].split(", ").map(parseFloat);return l(n)}}return u()}function h(e){var t=Math.PI/180*e,n=u();return n[5]=n[10]=Math.cos(t),n[6]=n[9]=Math.sin(t),n[9]*=-1,n}function p(e){var t=Math.PI/180*e,n=u();return n[0]=n[10]=Math.cos(t),n[2]=n[8]=Math.sin(t),n[2]*=-1,n}function m(e){var t=Math.PI/180*e,n=u();return n[0]=n[5]=Math.cos(t),n[1]=n[4]=Math.sin(t),n[4]*=-1,n}function y(e,t){var n=u();return n[0]=e,n[5]="number"==typeof t?t:e,n}function v(e){var t=u();return t[12]=e,t}function g(e){var t=u();return t[13]=e,t}function b(e){var t=window.getComputedStyle(e.node),n=t.position,i=e.config,r={},o=e.node.getAttribute("style")||"",s=o.match(/[\w-]+\s*:\s*[^;]+\s*/gi)||[];r.computed=s?s.map(function(e){return e.trim()}).join("; ")+";":"",r.generated=s.some(function(e){return e.match(/visibility\s?:\s?visible/i)})?r.computed:s.concat(["visibility: visible"]).map(function(e){return e.trim()}).join("; ")+";";var a=parseFloat(t.opacity),c=isNaN(parseFloat(i.opacity))?parseFloat(t.opacity):parseFloat(i.opacity),l={computed:a!==c?"opacity: "+a+";":"",generated:a!==c?"opacity: "+c+";":""},u=[];if(parseFloat(i.distance)){var b="top"===i.origin||"bottom"===i.origin?"Y":"X",w=i.distance;"top"!==i.origin&&"left"!==i.origin||(w=/^-/.test(w)?w.substr(1):"-"+w);var E=w.match(/(^-?\d+\.?\d?)|(em$|px$|%$)/g),j=E[0],T=E[1];switch(T){case"em":w=parseInt(t.fontSize)*j;break;case"px":w=j;break;case"%":w="Y"===b?e.node.getBoundingClientRect().height*j/100:e.node.getBoundingClientRect().width*j/100;break;default:throw new RangeError("Unrecognized or missing distance unit.")}"Y"===b?u.push(g(w)):u.push(v(w))}i.rotate.x&&u.push(h(i.rotate.x)),i.rotate.y&&u.push(p(i.rotate.y)),i.rotate.z&&u.push(m(i.rotate.z)),1!==i.scale&&(0===i.scale?u.push(y(2e-4)):u.push(y(i.scale)));var k={};if(u.length){k.property=ne("transform"),k.computed={raw:t[k.property],matrix:f(t[k.property])},u.unshift(k.computed.matrix);var O=u.reduce(d);k.generated={initial:k.property+": matrix3d("+O.join(", ")+");",final:k.property+": matrix3d("+k.computed.matrix.join(", ")+");"}}else k.generated={initial:"",final:""};var x={};if(l.generated||k.generated.initial){x.property=ne("transition"),x.computed=t[x.property],x.fragments=[];var R=i.delay,q=i.duration,A=i.easing;l.generated&&x.fragments.push({delayed:"opacity "+q/1e3+"s "+A+" "+R/1e3+"s",instant:"opacity "+q/1e3+"s "+A+" 0s"}),k.generated.initial&&x.fragments.push({delayed:k.property+" "+q/1e3+"s "+A+" "+R/1e3+"s",instant:k.property+" "+q/1e3+"s "+A+" 0s"});var P=x.computed&&!x.computed.match(/all 0s|none 0s/);P&&x.fragments.unshift({delayed:x.computed,instant:x.computed});var L=x.fragments.reduce(function(e,t,n){return e.delayed+=0===n?t.delayed:", "+t.delayed,e.instant+=0===n?t.instant:", "+t.instant,e},{delayed:"",instant:""});x.generated={delayed:x.property+": "+L.delayed+";",instant:x.property+": "+L.instant+";"}}else x.generated={delayed:"",instant:""};return{inline:r,opacity:l,position:n,transform:k,transition:x}}function w(e,t){t.split(";").forEach(function(t){var n=t.split(":"),i=n[0],r=n.slice(1);i&&r&&(e.style[i.trim()]=r.join(":"))})}function E(e){var t,n=this;try{s(r(e),function(e){var i=e.getAttribute("data-sr-id");if(null!==i){t=!0;var r=n.store.elements[i];r.callbackTimer&&window.clearTimeout(r.callbackTimer.clock),w(r.node,r.styles.inline.generated),e.removeAttribute("data-sr-id"),delete n.store.elements[i]}})}catch(e){return a.call(this,"Clean failed.",e.message)}if(t)try{c.call(this)}catch(e){return a.call(this,"Clean failed.",e.message)}}function j(){var e=this;s(this.store.elements,function(e){w(e.node,e.styles.inline.generated),e.node.removeAttribute("data-sr-id")}),s(this.store.containers,function(t){var n=t.node===document.documentElement?window:t.node;n.removeEventListener("scroll",e.delegate),n.removeEventListener("resize",e.delegate)}),this.store={containers:{},elements:{},history:[],sequences:{}}}function T(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];if(o(e))return s(t,function(t){s(t,function(t,n){o(t)?(e[n]&&o(e[n])||(e[n]={}),T(e[n],t)):e[n]=t})}),e;throw new TypeError("Target must be an object literal.")}function k(e){return void 0===e&&(e=navigator.userAgent),/Android|iPhone|iPad|iPod/i.test(e)}function O(){var e=this;c.call(this),s(this.store.elements,function(e){var t=[e.styles.inline.generated];e.visible?(t.push(e.styles.opacity.computed),t.push(e.styles.transform.generated.final),e.revealed=!0):(t.push(e.styles.opacity.generated),t.push(e.styles.transform.generated.initial),e.revealed=!1),w(e.node,t.filter(function(e){return""!==e}).join(" "))}),s(this.store.containers,function(t){var n=t.node===document.documentElement?window:t.node;n.addEventListener("scroll",e.delegate),n.addEventListener("resize",e.delegate)}),this.delegate(),this.initTimeout=null}function x(e,t){void 0===t&&(t={});var n=t.pristine||this.pristine,i="always"===e.config.useDelay||"onload"===e.config.useDelay&&n||"once"===e.config.useDelay&&!e.seen,r=e.visible&&!e.revealed,o=!e.visible&&e.revealed&&e.config.reset;return t.reveal||r?R.call(this,e,i):t.reset||o?q.call(this,e):void 0}function R(e,t){var n=[e.styles.inline.generated,e.styles.opacity.computed,e.styles.transform.generated.final];t?n.push(e.styles.transition.generated.delayed):n.push(e.styles.transition.generated.instant),e.revealed=e.seen=!0,w(e.node,n.filter(function(e){return""!==e}).join(" ")),A.call(this,e,t)}function q(e){var t=[e.styles.inline.generated,e.styles.opacity.generated,e.styles.transform.generated.initial,e.styles.transition.generated.instant];e.revealed=!1,w(e.node,t.filter(function(e){return""!==e}).join(" ")),A.call(this,e)}function A(e,t){var n=this,i=t?e.config.duration+e.config.delay:e.config.duration,r=e.revealed?e.config.beforeReveal:e.config.beforeReset,o=e.revealed?e.config.afterReveal:e.config.afterReset,s=0;e.callbackTimer&&(s=Date.now()-e.callbackTimer.start,window.clearTimeout(e.callbackTimer.clock)),r(e.node),e.callbackTimer={start:Date.now(),clock:window.setTimeout(function(){o(e.node),e.callbackTimer=null,e.revealed&&!e.config.reset&&e.config.cleanup&&E.call(n,e.node)},i-s)}}function P(e,t){if(void 0===t&&(t=this.pristine),!e.visible&&e.revealed&&e.config.reset)return x.call(this,e,{reset:!0});var n=this.store.sequences[e.sequence.id],i=e.sequence.index;if(n){var r=new M(n,"visible",this.store),o=new M(n,"revealed",this.store);if(n.models={visible:r,revealed:o},!o.body.length){var s=n.members[r.body[0]],a=this.store.elements[s];if(a)return I.call(this,n,r.body[0],-1,t),I.call(this,n,r.body[0],1,t),x.call(this,a,{reveal:!0,pristine:t})}if(!n.blocked.head&&i===[].concat(o.head).pop()&&i>=[].concat(r.body).shift())return I.call(this,n,i,-1,t),x.call(this,e,{reveal:!0,pristine:t});if(!n.blocked.foot&&i===[].concat(o.foot).shift()&&i<=[].concat(r.body).pop())return I.call(this,n,i,1,t),x.call(this,e,{reveal:!0,pristine:t})}}function L(e){var t=Math.abs(e);if(isNaN(t))throw new RangeError("Invalid sequence interval.");this.id=ie(),this.interval=Math.max(t,16),this.members=[],this.models={},this.blocked={head:!1,foot:!1}}function M(e,t,n){var i=this;this.head=[],this.body=[],this.foot=[],s(e.members,function(e,r){var o=n.elements[e];o&&o[t]&&i.body.push(r)}),this.body.length&&s(e.members,function(e,r){var o=n.elements[e];o&&!o[t]&&(r0;)t[n]=arguments[n+1];var i=null;return s(t,function(t){s(t,function(t){null===i&&t.node===e&&(i=t.id)})}),i}function F(){var e=this;s(this.store.history,function(t){N.call(e,t.target,t.options,!0)}),O.call(this)}function D(e,t){var n=t?e.node.clientHeight:e.node.offsetHeight,i=t?e.node.clientWidth:e.node.offsetWidth,r=0,o=0,s=e.node;do{isNaN(s.offsetTop)||(r+=s.offsetTop),isNaN(s.offsetLeft)||(o+=s.offsetLeft),s=s.offsetParent}while(s);return{bounds:{top:r,right:o+i,bottom:r+n,left:o},height:n,width:i}}function S(e){var t,n;return e.node===document.documentElement?(t=window.pageYOffset,n=window.pageXOffset):(t=e.node.scrollTop,n=e.node.scrollLeft),{top:t,left:n}}function C(e){void 0===e&&(e={});var t=this.store.containers[e.containerId];if(t){var n=Math.max(0,Math.min(1,e.config.viewFactor)),i=e.config.viewOffset,r={top:e.geometry.bounds.top+e.geometry.height*n,right:e.geometry.bounds.right-e.geometry.width*n,bottom:e.geometry.bounds.bottom-e.geometry.height*n,left:e.geometry.bounds.left+e.geometry.width*n},o={top:t.geometry.bounds.top+t.scroll.top+i.top,right:t.geometry.bounds.right+t.scroll.left-i.right,bottom:t.geometry.bounds.bottom+t.scroll.top-i.bottom,left:t.geometry.bounds.left+t.scroll.left+i.left};return r.topo.left&&r.bottom>o.top&&r.left0)-(e<0)||+e},oe=Math.sign||re,se=(U=Date.now(),function(e){var t=Date.now();t-U>16?(U=t,e(t)):setTimeout(function(){return se(e)},0)}),ae=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||se,ce="4.0.9";return H.isSupported=function(){return Y()&&$()},Object.defineProperty(H,"debug",{get:function(){return Z||!1},set:function(e){return Z="boolean"==typeof e?e:Z}}),H(),H}); \ No newline at end of file diff --git a/web/site.webmanifest b/web/site.webmanifest new file mode 100644 index 0000000..62ff540 --- /dev/null +++ b/web/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/web/webfonts/fa-brands-400.eot b/web/webfonts/fa-brands-400.eot deleted file mode 100644 index a619622..0000000 Binary files a/web/webfonts/fa-brands-400.eot and /dev/null differ diff --git a/web/webfonts/fa-brands-400.svg b/web/webfonts/fa-brands-400.svg deleted file mode 100644 index 33efe39..0000000 --- a/web/webfonts/fa-brands-400.svg +++ /dev/null @@ -1,3451 +0,0 @@ - - - - - -Created by FontForge 20190112 at Fri Aug 2 14:42:17 2019 - By Robert Madole -Copyright (c) Font Awesome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/webfonts/fa-brands-400.ttf b/web/webfonts/fa-brands-400.ttf deleted file mode 100644 index c3edffd..0000000 Binary files a/web/webfonts/fa-brands-400.ttf and /dev/null differ diff --git a/web/webfonts/fa-brands-400.woff b/web/webfonts/fa-brands-400.woff deleted file mode 100644 index 13125dc..0000000 Binary files a/web/webfonts/fa-brands-400.woff and /dev/null differ diff --git a/web/webfonts/fa-brands-400.woff2 b/web/webfonts/fa-brands-400.woff2 deleted file mode 100644 index ce25be0..0000000 Binary files a/web/webfonts/fa-brands-400.woff2 and /dev/null differ diff --git a/web/webfonts/fa-regular-400.eot b/web/webfonts/fa-regular-400.eot deleted file mode 100644 index 0610148..0000000 Binary files a/web/webfonts/fa-regular-400.eot and /dev/null differ diff --git a/web/webfonts/fa-regular-400.svg b/web/webfonts/fa-regular-400.svg deleted file mode 100644 index 4576c80..0000000 --- a/web/webfonts/fa-regular-400.svg +++ /dev/null @@ -1,803 +0,0 @@ - - - - - -Created by FontForge 20190112 at Fri Aug 2 14:42:17 2019 - By Robert Madole -Copyright (c) Font Awesome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/webfonts/fa-regular-400.ttf b/web/webfonts/fa-regular-400.ttf deleted file mode 100644 index d71787b..0000000 Binary files a/web/webfonts/fa-regular-400.ttf and /dev/null differ diff --git a/web/webfonts/fa-regular-400.woff b/web/webfonts/fa-regular-400.woff deleted file mode 100644 index 8894b46..0000000 Binary files a/web/webfonts/fa-regular-400.woff and /dev/null differ diff --git a/web/webfonts/fa-regular-400.woff2 b/web/webfonts/fa-regular-400.woff2 deleted file mode 100644 index a5c98bc..0000000 Binary files a/web/webfonts/fa-regular-400.woff2 and /dev/null differ diff --git a/web/webfonts/fa-solid-900.eot b/web/webfonts/fa-solid-900.eot deleted file mode 100644 index 7c78e8c..0000000 Binary files a/web/webfonts/fa-solid-900.eot and /dev/null differ diff --git a/web/webfonts/fa-solid-900.svg b/web/webfonts/fa-solid-900.svg deleted file mode 100644 index 6b98037..0000000 --- a/web/webfonts/fa-solid-900.svg +++ /dev/null @@ -1,4649 +0,0 @@ - - - - - -Created by FontForge 20190112 at Fri Aug 2 14:42:17 2019 - By Robert Madole -Copyright (c) Font Awesome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/webfonts/fa-solid-900.ttf b/web/webfonts/fa-solid-900.ttf deleted file mode 100644 index d4e300d..0000000 Binary files a/web/webfonts/fa-solid-900.ttf and /dev/null differ diff --git a/web/webfonts/fa-solid-900.woff b/web/webfonts/fa-solid-900.woff deleted file mode 100644 index a50f67f..0000000 Binary files a/web/webfonts/fa-solid-900.woff and /dev/null differ diff --git a/web/webfonts/fa-solid-900.woff2 b/web/webfonts/fa-solid-900.woff2 deleted file mode 100644 index a43e1ca..0000000 Binary files a/web/webfonts/fa-solid-900.woff2 and /dev/null differ
- the + friendly .NET SDK manager
+ a clean, simple and easy-to-use .NET SDK manager for Windows and macOS with Linux + builds coming soon. Always free and open-source. +
+ Browse and install .NET SDKs with ease. No more manual downloads and + installations. +
+ One-click updates to automatically bump to the latest SDK versions for all + channels. +
+ Remove and uninstall old SDKs and their associated files with a single click. + Keep your system clean. +
+ Quickly view detailed information about installed SDKs, including version, + release date notes, and more. +
+ Dots is developed in the open and is available on GitHub. Contribute to the project, + report issues, or request new features. We'd love to hear from you! +
Copyright 2023 © H3Y.studio