From 2b51c24cdf38dfabff17dca8e67514035149ad40 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Tue, 8 Nov 2022 10:43:22 +0900 Subject: [PATCH] init --- .dockerignore | 124 + .editorconfig | 153 + .gitattributes | 17 + .gitignore | 304 + PluginBuilder.Targets/Class1.cs | 19 + .../PluginBuilder.Targets.csproj | 13 + .../PluginBuilder.Tests.csproj | 27 + PluginBuilder.Tests/ServerTester.cs | 70 + PluginBuilder.Tests/UnitTest1.cs | 53 + PluginBuilder.Tests/UnitTestBase.cs | 33 + PluginBuilder.Tests/XUnitLogger.cs | 82 + PluginBuilder.Tests/docker-compose.yml | 18 + PluginBuilder/ConfigurationExtensions.cs | 26 + PluginBuilder/Controllers/HomeController.cs | 33 + PluginBuilder/Data/Scripts/01.migrations.sql | 3 + PluginBuilder/Data/Scripts/02.Init.sql | 35 + PluginBuilder/FullBuildId.cs | 22 + .../AzureStartupHostedService.cs | 24 + .../DatabaseStartupHostedService.cs | 84 + .../DockerStartupHostedService.cs | 76 + PluginBuilder/NpgsqlConnectionExtensions.cs | 51 + PluginBuilder/PluginBuildParameters.cs | 14 + PluginBuilder/PluginBuilder.Dockerfile | 21 + PluginBuilder/PluginBuilder.csproj | 43 + PluginBuilder/PluginSlug.cs | 64 + PluginBuilder/ProcessRunner.cs | 294 + PluginBuilder/Program.cs | 60 + PluginBuilder/Properties/launchSettings.json | 14 + PluginBuilder/Services/AzureStorageClient.cs | 135 + PluginBuilder/Services/BuildService.cs | 139 + PluginBuilder/Services/DBConnectionFactory.cs | 46 + PluginBuilder/Views/Home/HomePage.cshtml | 33 + PluginBuilder/Views/_ViewImports.cshtml | 2 + PluginBuilder/Views/_ViewStart.cshtml | 3 + PluginBuilder/entrypoint.sh | 68 + PluginBuilder/wwwroot/favicon.ico | Bin 0 -> 2090 bytes .../wwwroot/styles/btcpayserver-bootstrap.css | 11320 ++++++++++++++++ .../wwwroot/styles/btcpayserver-main.css | 943 ++ .../wwwroot/styles/btcpayserver-variables.css | 578 + PluginBuilder/wwwroot/svg/logo.svg | 10 + README.md | 13 + btcpayserver-plugin-builder.sln | 34 + 42 files changed, 15101 insertions(+) create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 PluginBuilder.Targets/Class1.cs create mode 100644 PluginBuilder.Targets/PluginBuilder.Targets.csproj create mode 100644 PluginBuilder.Tests/PluginBuilder.Tests.csproj create mode 100644 PluginBuilder.Tests/ServerTester.cs create mode 100644 PluginBuilder.Tests/UnitTest1.cs create mode 100644 PluginBuilder.Tests/UnitTestBase.cs create mode 100644 PluginBuilder.Tests/XUnitLogger.cs create mode 100644 PluginBuilder.Tests/docker-compose.yml create mode 100644 PluginBuilder/ConfigurationExtensions.cs create mode 100644 PluginBuilder/Controllers/HomeController.cs create mode 100644 PluginBuilder/Data/Scripts/01.migrations.sql create mode 100644 PluginBuilder/Data/Scripts/02.Init.sql create mode 100644 PluginBuilder/FullBuildId.cs create mode 100644 PluginBuilder/HostedServices/AzureStartupHostedService.cs create mode 100644 PluginBuilder/HostedServices/DatabaseStartupHostedService.cs create mode 100644 PluginBuilder/HostedServices/DockerStartupHostedService.cs create mode 100644 PluginBuilder/NpgsqlConnectionExtensions.cs create mode 100644 PluginBuilder/PluginBuildParameters.cs create mode 100644 PluginBuilder/PluginBuilder.Dockerfile create mode 100644 PluginBuilder/PluginBuilder.csproj create mode 100644 PluginBuilder/PluginSlug.cs create mode 100644 PluginBuilder/ProcessRunner.cs create mode 100644 PluginBuilder/Program.cs create mode 100644 PluginBuilder/Properties/launchSettings.json create mode 100644 PluginBuilder/Services/AzureStorageClient.cs create mode 100644 PluginBuilder/Services/BuildService.cs create mode 100644 PluginBuilder/Services/DBConnectionFactory.cs create mode 100644 PluginBuilder/Views/Home/HomePage.cshtml create mode 100644 PluginBuilder/Views/_ViewImports.cshtml create mode 100644 PluginBuilder/Views/_ViewStart.cshtml create mode 100644 PluginBuilder/entrypoint.sh create mode 100644 PluginBuilder/wwwroot/favicon.ico create mode 100644 PluginBuilder/wwwroot/styles/btcpayserver-bootstrap.css create mode 100644 PluginBuilder/wwwroot/styles/btcpayserver-main.css create mode 100644 PluginBuilder/wwwroot/styles/btcpayserver-variables.css create mode 100644 PluginBuilder/wwwroot/svg/logo.svg create mode 100644 README.md create mode 100644 btcpayserver-plugin-builder.sln diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5a76cae --- /dev/null +++ b/.dockerignore @@ -0,0 +1,124 @@ +# Build Folders (you can keep bin if you'd like, to store dlls and pdbs) +**/[Bb]in/ +**/[Oo]bj/ +node_modules/ +dist/ + +# mstest test results +TestResults + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +x64/ +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.log +*.vspscc +*.vssscc +.builds + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper* + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Publish Web Output +*.Publish.xml + +# NuGet Packages Directory +packages + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +[Bb]in +[Oo]bj +sql +TestResults +[Tt]est[Rr]esult* +*.Cache +ClientBin +[Ss]tyle[Cc]op.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML + +src/Rapporteringsregisteret.Web/assets/less/*.css + +MetricResults/ +*.sln.ide/ + +_configs/ + +# vnext stuff +bower_components +output + +.vs +**/launchSettings.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..cce17d7 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,153 @@ +# editorconfig.org + +# top-most EditorConfig file +root = true + +# Default settings: +# A newline ending every file +# Use 4 spaces as indentation +[*] +insert_final_newline = true +indent_style = space +indent_size = 4 +charset = utf-8 + +[launchSettings.json] +indent_size = 2 + +# C# files +[*.cs] +# New line preferences +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_within_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = flush_left + +# avoid this. unless absolutely necessary +dotnet_style_qualification_for_field = false:suggestion +dotnet_style_qualification_for_property = false:suggestion +dotnet_style_qualification_for_method = false:suggestion +dotnet_style_qualification_for_event = false:suggestion + +# only use var when it's obvious what the variable type is +csharp_style_var_for_built_in_types = false:none +csharp_style_var_when_type_is_apparent = false:none +csharp_style_var_elsewhere = false:suggestion + +# use language keywords instead of BCL types +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion + +# name all constant fields using PascalCase +dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style + +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.required_modifiers = const + +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 + +# Code style defaults +dotnet_sort_system_directives_first = true +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false + +# Expression-level preferences +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion + +# Expression-bodied members +csharp_style_expression_bodied_methods = false:none +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_operators = false:none +csharp_style_expression_bodied_properties = true:none +csharp_style_expression_bodied_indexers = true:none +csharp_style_expression_bodied_accessors = true:none + +# Pattern matching +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 + +# Null checking preferences +csharp_style_throw_expression = true:suggestion +csharp_style_conditional_delegate_call = 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 +csharp_style_prefer_null_check_over_type_check = true:warning +csharp_prefer_simple_using_statement = true:warning + +# C++ Files + +[*.{cpp,h,in}] +curly_bracket_next_line = true +indent_brace_style = Allman + +# Xml project files +[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] +indent_size = 2 + +# Xml build files +[*.builds] +indent_size = 2 + +# Xml files +[*.{xml,stylecop,resx,ruleset}] +indent_size = 2 + +# Xml config files +[*.{props,targets,config,nuspec}] +indent_size = 2 + +# Shell scripts +[*.sh] +end_of_line = lf +[*.{cmd, bat}] +end_of_line = crlf diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..48e8fa1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,17 @@ +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto + +# Explicitly declare text files you want to always be normalized and converted +# to native line endings on checkout. +*.c text +*.h text + +# Declare files that will always have CRLF line endings on checkout. +*.sln text eol=crlf + +# Declare files that will always have CRLF line endings on checkout. +*.sh text eol=lf + +# Denote all files that are truly binary and should not be modified. +*.png binary +*.jpg binary \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bda46af --- /dev/null +++ b/.gitignore @@ -0,0 +1,304 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates +.vs/ + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Typescript v1 declaration files +typings/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs +/BTCPayServer/Build/dockerfiles + +# Bundling JS/CSS +BTCPayServer/wwwroot/bundles/* +!BTCPayServer/wwwroot/bundles/.gitignore + +.vscode/* +!.vscode/launch.json +!.vscode/tasks.json +!.vscode/extensions.json +BTCPayServer/testpwd +.DS_Store +Packed Plugins +Plugins/packed + +BTCPayServer/wwwroot/swagger/v1/openapi.json diff --git a/PluginBuilder.Targets/Class1.cs b/PluginBuilder.Targets/Class1.cs new file mode 100644 index 0000000..fccdb91 --- /dev/null +++ b/PluginBuilder.Targets/Class1.cs @@ -0,0 +1,19 @@ +#nullable disable +using System.Reflection; +using Microsoft.Build.Framework; + +namespace PluginBuilder.Targets; +public class Packer : ITask +{ + public IBuildEngine BuildEngine { get; set; } + public ITaskHost HostObject { get; set; } + + public bool Execute() + { + return true; + } + + public string PluginDll { get; set; } + [Output] + public string Output { get; set; } +} diff --git a/PluginBuilder.Targets/PluginBuilder.Targets.csproj b/PluginBuilder.Targets/PluginBuilder.Targets.csproj new file mode 100644 index 0000000..cc1de02 --- /dev/null +++ b/PluginBuilder.Targets/PluginBuilder.Targets.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + enable + + + + + + + diff --git a/PluginBuilder.Tests/PluginBuilder.Tests.csproj b/PluginBuilder.Tests/PluginBuilder.Tests.csproj new file mode 100644 index 0000000..dfb68c0 --- /dev/null +++ b/PluginBuilder.Tests/PluginBuilder.Tests.csproj @@ -0,0 +1,27 @@ + + + + net6.0 + enable + + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/PluginBuilder.Tests/ServerTester.cs b/PluginBuilder.Tests/ServerTester.cs new file mode 100644 index 0000000..26daf42 --- /dev/null +++ b/PluginBuilder.Tests/ServerTester.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Xunit.Abstractions; + +namespace PluginBuilder.Tests +{ + public class ServerTester : IAsyncDisposable + { + public ServerTester(string testFolder, XUnitLogger logs) + { + TestFolder = testFolder; + Logs = logs; + } + + public string TestFolder { get; } + + public T GetService() where T : notnull + { + return WebApp.Services.GetRequiredService(); + } + + public XUnitLogger Logs { get; } + + List disposables = new List(); + WebApplication? _WebApp; + public WebApplication WebApp + { + get + { + return _WebApp ?? throw new InvalidOperationException("Webapp not initialized"); + } + } + public bool ReuseDatabase { get; set; } = true; + public async Task Start() + { + string dbName = TestFolder; + if (!ReuseDatabase) + { + dbName = TestFolder + "_" + (DateTimeOffset.UtcNow.Ticks / 100000).ToString(); + } + dbName = dbName.ToLowerInvariant(); + Logs.LogInformation($"DbName: {dbName}"); + Environment.SetEnvironmentVariable("PB_POSTGRES", "User ID=postgres;Include Error Detail=true;Host=127.0.0.1;Port=61932;Database=" + dbName); + Environment.SetEnvironmentVariable("PB_STORAGE_CONNECTION_STRING", "BlobEndpoint=http://127.0.0.1:32827/satoshi;AccountName=satoshi;AccountKey=Rxb41pUHRe+ibX5XS311tjXpjvu7mVi2xYJvtmq1j2jlUpN+fY/gkzyBMjqwzgj42geXGdYSbPEcu5i5wjSjPw=="); + var host = new PluginBuilder.Program(); + var webappBuilder = host.CreateWebApplicationBuilder(); + webappBuilder.Logging.AddFilter(typeof(ProcessRunner).FullName, LogLevel.Trace); + webappBuilder.Logging.AddProvider(Logs); + var webapp = webappBuilder.Build(); + host.Configure(webapp); + disposables.Add(webapp); + await webapp.StartAsync(); + _WebApp = webapp; + } + + public async ValueTask DisposeAsync() + { + foreach (var d in disposables) + { + await d.DisposeAsync(); + } + } + } +} diff --git a/PluginBuilder.Tests/UnitTest1.cs b/PluginBuilder.Tests/UnitTest1.cs new file mode 100644 index 0000000..3d160da --- /dev/null +++ b/PluginBuilder.Tests/UnitTest1.cs @@ -0,0 +1,53 @@ +using System.Threading.Tasks; +using PluginBuilder.Services; +using Xunit; +using Xunit.Abstractions; + +namespace PluginBuilder.Tests; + +public class UnitTest1 : UnitTestBase +{ + public UnitTest1(ITestOutputHelper logs) : base(logs) + { + + } + [Fact] + public async Task Test1() + { + await using var tester = await Start(); + + } + + [Theory] + [InlineData("test-6", true)] + [InlineData("test-6-", false)] + [InlineData("6test-6", false)] + [InlineData("-test-6", false)] + [InlineData("te", false)] + [InlineData("teqoeteqoeteqoeteqoeteqoeteqoee", false)] + [InlineData("teqoeteqoeteqoeteqoeteqoet", true)] + public void IsValidSlugTest(string slug, bool expected) + { + Assert.Equal(expected, PluginSlug.IsValidSlugName(slug)); + } + + [Fact] + public async Task CanPackPlugin() + { + await using var tester = Create(); + tester.ReuseDatabase = false; + await tester.Start(); + + var buildService = tester.GetService(); + using var conn = await tester.GetService().Open(); + await conn.NewPlugin("rockstar-stylist"); + + //https://github.com/Kukks/btcpayserver/tree/plugins/collection/Plugins/BTCPayServer.Plugins.RockstarStylist + await buildService.Build("rockstar-stylist", + new PluginBuildParameters("https://github.com/Kukks/btcpayserver") + { + PluginDirectory = "Plugins/BTCPayServer.Plugins.RockstarStylist", + GitRef = "plugins/collection" + }); + } +} diff --git a/PluginBuilder.Tests/UnitTestBase.cs b/PluginBuilder.Tests/UnitTestBase.cs new file mode 100644 index 0000000..7f02d1d --- /dev/null +++ b/PluginBuilder.Tests/UnitTestBase.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using Xunit.Abstractions; + +namespace PluginBuilder.Tests +{ + public class UnitTestBase + { + public UnitTestBase(ITestOutputHelper log) + { + Log = new XUnitLogger("Tests", log); + } + + public XUnitLogger Log { get; } + + + public async Task Start([CallerMemberName] string? caller = null) + { + ServerTester tester = Create(caller); + await tester.Start(); + return tester; + } + + public ServerTester Create([CallerMemberName] string? caller = null) + { + return new ServerTester(caller ?? "Default", Log); + } + } +} diff --git a/PluginBuilder.Tests/XUnitLogger.cs b/PluginBuilder.Tests/XUnitLogger.cs new file mode 100644 index 0000000..41e37c0 --- /dev/null +++ b/PluginBuilder.Tests/XUnitLogger.cs @@ -0,0 +1,82 @@ +#nullable disable +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Xunit.Abstractions; + +namespace PluginBuilder.Tests +{ + public class XUnitLogger : ILogger, ILoggerProvider, ILoggerFactory + { + public XUnitLogger(ITestOutputHelper log) + { + this.log = log; + } + string category; + public ITestOutputHelper log; + + public XUnitLogger(string category, ITestOutputHelper log) + { + this.category = category; + this.log = log; + } + public IDisposable BeginScope(TState state) + { + return null; + } + + public ILogger CreateLogger(string categoryName) + { + return new XUnitLogger(categoryName, log); + } + public ILogger CreateLogger() + { + return new Logger(this); + } + + public void Dispose() + { + + } + + public bool IsEnabled(LogLevel logLevel) + { + return true; + } + + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter) + { + log.WriteLine($"[{Simplified(category)}] {Simplified(logLevel)}: {formatter(state, exception)}"); + if (exception is Exception) + { + log.WriteLine($"Exception: {exception}"); + } + } + + private string Simplified(LogLevel logLevel) + { + switch (logLevel) + { + case LogLevel.Information: + return "Info"; + case LogLevel.Warning: + return "Warn"; + default: + return logLevel.ToString(); + } + } + + private string Simplified(string category) + { + return category.Split('.').Last(); + //return category; + } + + public void AddProvider(ILoggerProvider provider) + { + + } + } +} diff --git a/PluginBuilder.Tests/docker-compose.yml b/PluginBuilder.Tests/docker-compose.yml new file mode 100644 index 0000000..5a83275 --- /dev/null +++ b/PluginBuilder.Tests/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3" +services: + postgres: + image: postgres:15.0 + environment: + POSTGRES_HOST_AUTH_METHOD: trust + ports: + - "61932:5432" + expose: + - "5432" + + azureblob: + image: mcr.microsoft.com/azure-blob-storage + environment: + LOCAL_STORAGE_ACCOUNT_NAME: satoshi + LOCAL_STORAGE_ACCOUNT_KEY: Rxb41pUHRe+ibX5XS311tjXpjvu7mVi2xYJvtmq1j2jlUpN+fY/gkzyBMjqwzgj42geXGdYSbPEcu5i5wjSjPw== + ports: + - "32827:11002" diff --git a/PluginBuilder/ConfigurationExtensions.cs b/PluginBuilder/ConfigurationExtensions.cs new file mode 100644 index 0000000..cb1bf9d --- /dev/null +++ b/PluginBuilder/ConfigurationExtensions.cs @@ -0,0 +1,26 @@ +namespace PluginBuilder +{ + public class ConfigurationRequiredException : ConfigurationException + { + public ConfigurationRequiredException(string key) : base(key, $"Required environment variable") + { + } + } + public class ConfigurationException : Exception + { + public ConfigurationException(string key, string message) : base ($"[{key}] {message}") + { + Key = key; + } + public string Key { get; } + } + public static class ConfigurationExtensions + { + public static string GetRequired(this IConfiguration configuration, string key) + { + if (configuration[key] is string v && !string.IsNullOrWhiteSpace(v)) + return v; + throw new ConfigurationRequiredException(key); + } + } +} diff --git a/PluginBuilder/Controllers/HomeController.cs b/PluginBuilder/Controllers/HomeController.cs new file mode 100644 index 0000000..f86c7e2 --- /dev/null +++ b/PluginBuilder/Controllers/HomeController.cs @@ -0,0 +1,33 @@ +using Microsoft.AspNetCore.Mvc; +using PluginBuilder.Services; + +namespace PluginBuilder.Controllers +{ + public class HomeController : Controller + { + public DBConnectionFactory ConnectionFactory { get; } + public HomeController(DBConnectionFactory connectionFactory) + { + ConnectionFactory = connectionFactory; + } + [HttpGet("/")] + public IActionResult HomePage() + { + return View(); + } + + [HttpPost("/plugins/add")] + public IActionResult AddPlugin( + string name, + string repository, + string reference, + string csprojPath) + { + + // Wouter style: https://github.com/storefront-bvba/btcpayserver-kraken-plugin + // Dennis style: https://github.com/dennisreimann/btcpayserver + // Kukks sytle: https://github.com/Kukks/btcpayserver/tree/plugins/collection/Plugins + return View(); + } + } +} diff --git a/PluginBuilder/Data/Scripts/01.migrations.sql b/PluginBuilder/Data/Scripts/01.migrations.sql new file mode 100644 index 0000000..2bd7698 --- /dev/null +++ b/PluginBuilder/Data/Scripts/01.migrations.sql @@ -0,0 +1,3 @@ +CREATE TABLE migrations ( + script_name TEXT NOT NULL PRIMARY KEY, + executed_at timestamptz DEFAULT CURRENT_TIMESTAMP); diff --git a/PluginBuilder/Data/Scripts/02.Init.sql b/PluginBuilder/Data/Scripts/02.Init.sql new file mode 100644 index 0000000..efa6feb --- /dev/null +++ b/PluginBuilder/Data/Scripts/02.Init.sql @@ -0,0 +1,35 @@ +CREATE TABLE plugins +( + slug TEXT NOT NULL PRIMARY KEY +); + + +CREATE TABLE builds_ids +( + plugin_slug TEXT NOT NULL, + curr_id BIGINT NOT NULL, + PRIMARY KEY (plugin_slug), + FOREIGN KEY (plugin_slug) REFERENCES plugins (slug) ON DELETE CASCADE +); + +CREATE TABLE builds +( + plugin_slug TEXT NOT NULL, + id BIGINT NOT NULL, + state TEXT NOT NULL, + manifest_info JSONB, + build_info JSONB, + PRIMARY KEY (plugin_slug, id), + FOREIGN KEY (plugin_slug) REFERENCES plugins (slug) ON DELETE CASCADE +); + +CREATE TABLE versions +( + plugin_slug TEXT NOT NULL, + ver TEXT NOT NULL, + build_id BIGINT NOT NULL, + btcpay_min_ver INT[] NOT NULL, + PRIMARY KEY (plugin_slug, ver), + FOREIGN KEY (plugin_slug) REFERENCES plugins (slug) ON DELETE CASCADE + FOREIGN KEY (build_id) REFERENCES builds (id) ON DELETE CASCADE +); diff --git a/PluginBuilder/FullBuildId.cs b/PluginBuilder/FullBuildId.cs new file mode 100644 index 0000000..3ab63dd --- /dev/null +++ b/PluginBuilder/FullBuildId.cs @@ -0,0 +1,22 @@ +using System.Text.RegularExpressions; + +namespace PluginBuilder +{ + public record FullBuildId + { + public FullBuildId(PluginSlug PluginSlug, long BuildId) + { + ArgumentNullException.ThrowIfNull(PluginSlug); + if (BuildId < 0) + throw new ArgumentException("BuildId should be more than 0", nameof(BuildId)); + this.PluginSlug = PluginSlug; + this.BuildId = BuildId; + } + public PluginSlug PluginSlug { get; } + public long BuildId { get; } + public override string ToString() + { + return $"{PluginSlug}/{BuildId}"; + } + } +} diff --git a/PluginBuilder/HostedServices/AzureStartupHostedService.cs b/PluginBuilder/HostedServices/AzureStartupHostedService.cs new file mode 100644 index 0000000..1679128 --- /dev/null +++ b/PluginBuilder/HostedServices/AzureStartupHostedService.cs @@ -0,0 +1,24 @@ +using PluginBuilder.Services; + +namespace PluginBuilder.HostedServices +{ + public class AzureStartupHostedService : IHostedService + { + public AzureStartupHostedService(AzureStorageClient azureStorageClient) + { + AzureStorageClient = azureStorageClient; + } + + public AzureStorageClient AzureStorageClient { get; } + + public async Task StartAsync(CancellationToken cancellationToken) + { + await AzureStorageClient.EnsureDefaultContainerExists(cancellationToken); + } + + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + } +} diff --git a/PluginBuilder/HostedServices/DatabaseStartupHostedService.cs b/PluginBuilder/HostedServices/DatabaseStartupHostedService.cs new file mode 100644 index 0000000..3fb9c1c --- /dev/null +++ b/PluginBuilder/HostedServices/DatabaseStartupHostedService.cs @@ -0,0 +1,84 @@ +using System.Globalization; +using System.Text; +using Dapper; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using PluginBuilder.Services; + +namespace PluginBuilder.HostedServices +{ + public class DatabaseStartupHostedService : IHostedService + { + ILogger Logger { get; } + public DatabaseStartupHostedService(ILogger logger, DBConnectionFactory connectionFactory) + { + ConnectionFactory = connectionFactory; + Logger = logger; + } + + public DBConnectionFactory ConnectionFactory { get; } + + public async Task StartAsync(CancellationToken cancellationToken) + { +retry: + try + { + await using var conn = await ConnectionFactory.Open(); + await RunScripts(conn); + } + catch (Npgsql.NpgsqlException pgex) when (pgex.SqlState == "3D000") + { + var builder = new Npgsql.NpgsqlConnectionStringBuilder(ConnectionFactory.ConnectionString.ToString()); + var dbname = builder.Database; + Logger.LogInformation($"Database '{dbname}' doesn't exists, creating it..."); + builder.Database = null; + var conn2Str = builder.ToString(); + var conn2 = new Npgsql.NpgsqlConnection(conn2Str); + await conn2.OpenAsync(); + await conn2.ExecuteAsync($"CREATE DATABASE {dbname} TEMPLATE 'template0' LC_CTYPE 'C' LC_COLLATE 'C' ENCODING 'UTF8'"); + goto retry; + } + } + + private async Task RunScripts(Npgsql.NpgsqlConnection conn) + { + await using (conn) + { + HashSet executed; + try + { + executed = (await conn.QueryAsync("SELECT script_name FROM migrations")).ToHashSet(); + } + catch (Npgsql.NpgsqlException ex) when (ex.SqlState == "42P01") + { + executed = new HashSet(); + } + foreach (var resource in System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames() + .Where(n => n.EndsWith(".sql", System.StringComparison.InvariantCulture)) + .OrderBy(n => n)) + { + var parts = resource.Split('.'); + if (!int.TryParse(parts[^3], NumberStyles.Any, CultureInfo.InvariantCulture, out _)) + continue; + var scriptName = $"{parts[^3]}.{parts[^2]}"; + if (executed.Contains(scriptName)) + continue; + var stream = System.Reflection.Assembly.GetExecutingAssembly() + .GetManifestResourceStream(resource)!; + string content; + using (var reader = new StreamReader(stream, Encoding.UTF8)) + { + content = reader.ReadToEnd(); + } + Logger.LogInformation($"Execute script {scriptName}..."); + await conn.ExecuteAsync($"{content}; INSERT INTO migrations VALUES (@scriptName)", new { scriptName }); + } + } + } + + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + } +} diff --git a/PluginBuilder/HostedServices/DockerStartupHostedService.cs b/PluginBuilder/HostedServices/DockerStartupHostedService.cs new file mode 100644 index 0000000..b3b36d4 --- /dev/null +++ b/PluginBuilder/HostedServices/DockerStartupHostedService.cs @@ -0,0 +1,76 @@ +namespace PluginBuilder.HostedServices +{ + public class DockerStartupException : Exception + { + public DockerStartupException(string message) : base(message) + { + + } + } + public class DockerStartupHostedService : IHostedService + { + public DockerStartupHostedService(ILogger logger, IWebHostEnvironment env, ProcessRunner processRunner) + { + Logger = logger; + ProcessRunner = processRunner; + ContentRootPath = env.ContentRootPath; + } + + public ILogger Logger { get; } + public ProcessRunner ProcessRunner { get; } + public string ContentRootPath { get; } + + public async Task StartAsync(CancellationToken cancellationToken) + { + Logger.LogInformation("Building the PluginBuilder docker image"); + var result = await ProcessRunner.RunAsync(new ProcessSpec() + { + Executable = "docker", + Arguments = new[] + { + "build", + "-f", "PluginBuilder.Dockerfile", + "-t", "plugin-builder", + "." + }, + WorkingDirectory = ContentRootPath + }, cancellationToken); + if (result != 0) + throw new DockerStartupException("The build of PluginBuilder.Dockerfile failed"); + var output = new OutputCapture(); + await ProcessRunner.RunAsync(new ProcessSpec() + { + Executable = "docker", + Arguments = new[] + { + "volume", "ls", + "-f", "label=BTCPAY_PLUGIN_BUILD", + "--format", "{{ .Name }}" + }, + OutputCapture = output + }, cancellationToken); + if (result != 0) + throw new DockerStartupException("docker volume ls failed"); + if (output.Lines.Any()) + { + Logger.LogInformation("Cleaning dangling volumes"); + var args = new List(); + args.Add("volume"); + args.Add("rm"); + args.AddRange(output.Lines); + await ProcessRunner.RunAsync(new ProcessSpec() + { + Executable = "docker", + Arguments = args.ToArray() + }, cancellationToken); + if (result != 0) + throw new DockerStartupException("docker volume rm failed"); + } + } + + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + } +} diff --git a/PluginBuilder/NpgsqlConnectionExtensions.cs b/PluginBuilder/NpgsqlConnectionExtensions.cs new file mode 100644 index 0000000..a191ae1 --- /dev/null +++ b/PluginBuilder/NpgsqlConnectionExtensions.cs @@ -0,0 +1,51 @@ +using Dapper; +using Newtonsoft.Json.Linq; +using Npgsql; + +namespace PluginBuilder +{ + public static class NpgsqlConnectionExtensions + { + public static async Task NewPlugin(this NpgsqlConnection connection, PluginSlug pluginSlug) + { + await connection.ExecuteAsync("INSERT INTO plugins (slug) VALUES (@id);", + new + { + id = pluginSlug.ToString(), + }); + } + public static async Task UpdateBuild(this NpgsqlConnection connection, FullBuildId fullBuildId, string newState, JObject? buildInfo, JObject? manifestInfo = null) + { + await connection.ExecuteAsync( + "UPDATE builds " + + "SET state=@state, " + + "build_info=COALESCE(build_info || @build_info::JSONB, @build_info::JSONB, build_info), " + + "manifest_info=COALESCE(@manifest_info::JSONB, manifest_info) " + + "WHERE plugin_slug=@plugin_slug AND id=@buildId", + new + { + state = newState, + build_info = buildInfo?.ToString(), + manifest_info = manifestInfo?.ToString(), + plugin_slug = fullBuildId.PluginSlug.ToString(), + buildId = fullBuildId.BuildId + }); + } + public static Task NewBuild(this NpgsqlConnection connection, PluginSlug pluginSlug) + { + return connection.ExecuteScalarAsync("" + + "WITH cte AS " + + "( " + + " INSERT INTO builds_ids AS bi VALUES (@plugin_slug, 0)" + + " ON CONFLICT (plugin_slug) DO UPDATE SET curr_id=bi.curr_id+1 " + + " RETURNING curr_id " + + ") " + + "INSERT INTO builds (plugin_slug, id, state) VALUES (@plugin_slug, (SELECT * FROM cte), @state) RETURNING id;", + new + { + plugin_slug = pluginSlug.ToString(), + state = "queued" + }); + } + } +} diff --git a/PluginBuilder/PluginBuildParameters.cs b/PluginBuilder/PluginBuildParameters.cs new file mode 100644 index 0000000..13bbb95 --- /dev/null +++ b/PluginBuilder/PluginBuildParameters.cs @@ -0,0 +1,14 @@ +namespace PluginBuilder +{ + public class PluginBuildParameters + { + public PluginBuildParameters(string gitRepository) + { + GitRepository = gitRepository; + } + public string GitRepository { get; set; } + public string? GitRef { get; set; } + public string? PluginDirectory { get; set; } + public string? BuildConfig { get; set; } + } +} diff --git a/PluginBuilder/PluginBuilder.Dockerfile b/PluginBuilder/PluginBuilder.Dockerfile new file mode 100644 index 0000000..9f1128b --- /dev/null +++ b/PluginBuilder/PluginBuilder.Dockerfile @@ -0,0 +1,21 @@ +FROM mcr.microsoft.com/dotnet/sdk:6.0 + +RUN apt-get update && apt-get install -y git jq && rm -rf /var/lib/apt/lists/* + + +RUN useradd -r --create-home dotnet +USER dotnet + +WORKDIR /build-tools +ENV PLUGIN_PACKER_VERSION=https://github.com/btcpayserver/btcpayserver +RUN git clone --depth 1 -b v1.6.12 --single-branch https://github.com/btcpayserver/btcpayserver && \ + cd btcpayserver/BTCPayServer.PluginPacker && \ + dotnet build -c Release -o "/build-tools/PluginPacker" && \ + rm -rf /build-tools/btcpayserver + + +WORKDIR /out +WORKDIR /build +COPY --chown=dotnet:dotnet entrypoint.sh /entrypoint.sh + +CMD [ "/entrypoint.sh" ] diff --git a/PluginBuilder/PluginBuilder.csproj b/PluginBuilder/PluginBuilder.csproj new file mode 100644 index 0000000..86a6b12 --- /dev/null +++ b/PluginBuilder/PluginBuilder.csproj @@ -0,0 +1,43 @@ + + + + net6.0 + enable + enable + aspnet-PluginBuilder-4D3592EF-6E6A-41BD-960D-231C299188A2 + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + diff --git a/PluginBuilder/PluginSlug.cs b/PluginBuilder/PluginSlug.cs new file mode 100644 index 0000000..0ec4ce1 --- /dev/null +++ b/PluginBuilder/PluginSlug.cs @@ -0,0 +1,64 @@ +using System.Diagnostics.CodeAnalysis; +using System.Text.RegularExpressions; + +namespace PluginBuilder +{ + public record PluginSlug + { + static Regex SlugRegex = new Regex("^[a-z]{1,}[a-z0-9\\-]{0,}$"); + public static bool IsValidSlugName(string slug) + { + ArgumentNullException.ThrowIfNull(slug); + if (!SlugRegex.IsMatch(slug)) + return false; + if (slug[^1] == '-') + return false; + if (slug.Length > 30) + return false; + if (slug.Length < 4) + return false; + return true; + } + + public static bool TryParse(string str, [MaybeNullWhen(false)] out PluginSlug slug) + { + ArgumentNullException.ThrowIfNull(str); + if (!IsValidSlugName(str)) + { + slug = null; + return false; + } + slug = new PluginSlug(str, false); + return true; + } + public static PluginSlug Parse(string str) + { + if (TryParse(str, out var slug)) + return slug; + throw new FormatException("Invalid slug name"); + } + public PluginSlug(string slug) : this(slug, true) + { } + PluginSlug(string slug, bool check) + { + if (check) + { + if (!IsValidSlugName(slug)) + throw new ArgumentException("Invalid slug name", nameof(slug)); + } + this.slug = slug; + } + + + public static implicit operator PluginSlug(string str) + { + return new PluginSlug(str); + } + + readonly string slug; + public override string ToString() + { + return slug; + } + } +} diff --git a/PluginBuilder/ProcessRunner.cs b/PluginBuilder/ProcessRunner.cs new file mode 100644 index 0000000..19810c9 --- /dev/null +++ b/PluginBuilder/ProcessRunner.cs @@ -0,0 +1,294 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace PluginBuilder +{ + public interface IOutputCapture + { + void AddLine(string line); + } + public class OutputCapture : IOutputCapture + { + private readonly List _lines = new List(); + public IEnumerable Lines => _lines; + public void AddLine(string line) => _lines.Add(line); + public override string ToString() + { + return String.Join(Environment.NewLine, _lines); + } + } + public class ProcessSpec + { + public string? Executable { get; set; } + public string? WorkingDirectory { get; set; } + public ProcessSpecEnvironmentVariables EnvironmentVariables { get; } = new(); + + public IReadOnlyList? Arguments { get; set; } + public string? EscapedArguments { get; set; } + public IOutputCapture? OutputCapture { get; set; } + public IOutputCapture? ErrorCapture { get; set; } + + public DataReceivedEventHandler? OnOutput { get; set; } + public DataReceivedEventHandler? OnError { get; set; } + public string? Input { get; set; } + + public sealed class ProcessSpecEnvironmentVariables : Dictionary + { + public List DotNetStartupHooks { get; } = new(); + public List AspNetCoreHostingStartupAssemblies { get; } = new(); + } + } + public class ProcessRunner + { + private static readonly Func _getEnvironmentVariable = static key => Environment.GetEnvironmentVariable(key); + + public ILogger Logger { get; } + + public ProcessRunner(ILogger logger) + { + Logger = logger; + } + + // May not be necessary in the future. See https://github.com/dotnet/corefx/issues/12039 + public async Task RunAsync(ProcessSpec processSpec, CancellationToken cancellationToken) + { + ArgumentNullException.ThrowIfNull(processSpec, nameof(processSpec)); + + int exitCode; + + var stopwatch = new Stopwatch(); + + using (var process = CreateProcess(processSpec)) + using (var processState = new ProcessState(process)) + { + cancellationToken.Register(() => processState.TryKill()); + + var readOutput = false; + var readError = false; + if (processSpec.OutputCapture is not null) + { + readOutput = true; + process.OutputDataReceived += (_, a) => + { + if (!string.IsNullOrEmpty(a.Data)) + { + processSpec.OutputCapture.AddLine(a.Data); + } + }; + } + else if (processSpec.OnOutput != null) + { + readOutput = true; + process.OutputDataReceived += processSpec.OnOutput; + } + + if (processSpec.ErrorCapture is not null) + { + readError = true; + process.ErrorDataReceived += (_, a) => + { + if (!string.IsNullOrEmpty(a.Data)) + { + processSpec.ErrorCapture.AddLine(a.Data); + } + }; + } + else if (processSpec.OnError is not null) + { + readError = true; + process.ErrorDataReceived += processSpec.OnError; + } + + if (Logger.IsEnabled(LogLevel.Trace)) + { + readOutput = true; + readError = true; + process.OutputDataReceived += (s, a) => + { + // a.Data.EndsWith("\u001b[K") + Logger.LogInformation(a.Data); + }; + process.ErrorDataReceived += (s, a) => + { + Logger.LogWarning(a.Data); + }; + } + + + stopwatch.Start(); + process.Start(); + + if (readOutput) + { + process.BeginOutputReadLine(); + } + if (readError) + { + process.BeginErrorReadLine(); + } + + if (processSpec.Input is not null) + { + await process.StandardInput.WriteLineAsync(processSpec.Input); + await process.StandardInput.FlushAsync(); + process.StandardInput.Close(); + } + await processState.Task; + + exitCode = process.ExitCode; + stopwatch.Stop(); + } + + return exitCode; + } + + private Process CreateProcess(ProcessSpec processSpec) + { + var process = new Process + { + EnableRaisingEvents = true, + StartInfo = + { + FileName = processSpec.Executable, + UseShellExecute = false, + WorkingDirectory = processSpec.WorkingDirectory, + RedirectStandardOutput = processSpec.OutputCapture is not null || (processSpec.OnOutput is not null) || Logger.IsEnabled(LogLevel.Trace), + RedirectStandardError = processSpec.ErrorCapture is not null || (processSpec.OnError is not null) || Logger.IsEnabled(LogLevel.Trace), + RedirectStandardInput = processSpec.Input is not null + } + }; + + if (processSpec.EscapedArguments is not null) + { + process.StartInfo.Arguments = processSpec.EscapedArguments; + } + else if (processSpec.Arguments is not null) + { + for (var i = 0; i < processSpec.Arguments.Count; i++) + { + process.StartInfo.ArgumentList.Add(processSpec.Arguments[i]); + } + } + + foreach (var env in processSpec.EnvironmentVariables) + { + process.StartInfo.Environment.Add(env.Key, env.Value); + } + + SetEnvironmentVariable(process.StartInfo, "DOTNET_STARTUP_HOOKS", processSpec.EnvironmentVariables.DotNetStartupHooks, Path.PathSeparator, _getEnvironmentVariable); + SetEnvironmentVariable(process.StartInfo, "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES", processSpec.EnvironmentVariables.AspNetCoreHostingStartupAssemblies, ';', _getEnvironmentVariable); + + return process; + } + + internal static void SetEnvironmentVariable(ProcessStartInfo processStartInfo, string envVarName, List envVarValues, char separator, Func getEnvironmentVariable) + { + if (envVarValues is { Count: 0 }) + { + return; + } + + var existing = getEnvironmentVariable(envVarName); + if (processStartInfo.Environment.TryGetValue(envVarName, out var value)) + { + existing = CombineEnvironmentVariable(existing, value, separator); + } + + string result; + if (!string.IsNullOrEmpty(existing)) + { + result = existing + separator + string.Join(separator, envVarValues); + } + else + { + result = string.Join(separator, envVarValues); + } + + processStartInfo.EnvironmentVariables[envVarName] = result; + + static string? CombineEnvironmentVariable(string? a, string? b, char separator) + { + if (!string.IsNullOrEmpty(a)) + { + return !string.IsNullOrEmpty(b) ? (a + separator + b) : a; + } + + return b; + } + } + + private class ProcessState : IDisposable + { + private readonly Process _process; + private readonly TaskCompletionSource _tcs = new TaskCompletionSource(); + private volatile bool _disposed; + + public ProcessState(Process process) + { + _process = process; + _process.Exited += OnExited; + Task = _tcs.Task.ContinueWith(_ => + { + try + { + // We need to use two WaitForExit calls to ensure that all of the output/events are processed. Previously + // this code used Process.Exited, which could result in us missing some output due to the ordering of + // events. + // + // See the remarks here: https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.waitforexit#System_Diagnostics_Process_WaitForExit_System_Int32_ + if (!_process.WaitForExit(Int32.MaxValue)) + { + throw new TimeoutException(); + } + + _process.WaitForExit(); + } + catch (InvalidOperationException) + { + // suppress if this throws if no process is associated with this object anymore. + } + }); + } + + public Task Task { get; } + + public void TryKill() + { + if (_disposed) + { + return; + } + + try + { + if (_process is not null && !_process.HasExited) + { + _process.Kill(entireProcessTree: true); + } + } + catch (Exception) + { + } + } + + private void OnExited(object? sender, EventArgs args) + => _tcs.TrySetResult(); + + public void Dispose() + { + if (!_disposed) + { + TryKill(); + _disposed = true; + _process.Exited -= OnExited; + _process.Dispose(); + } + } + } + } +} diff --git a/PluginBuilder/Program.cs b/PluginBuilder/Program.cs new file mode 100644 index 0000000..eb7b780 --- /dev/null +++ b/PluginBuilder/Program.cs @@ -0,0 +1,60 @@ +using Microsoft.AspNetCore.Identity; +using PluginBuilder.HostedServices; +using PluginBuilder.Services; + +namespace PluginBuilder; + +public class Program +{ + public static Task Main(string[] args) + { + var host = new Program(); + return new Program().Start(args); + } + + public Task Start(string[]? args = null) + { + WebApplication app = CreateWebApplication(args); + return app.RunAsync(); + } + + public WebApplication CreateWebApplication(string[]? args = null) + { + WebApplicationBuilder builder = CreateWebApplicationBuilder(args); + var app = builder.Build(); + Configure(app); + return app; + } + + public WebApplicationBuilder CreateWebApplicationBuilder(string[]? args = null) + { + var builder = WebApplication.CreateBuilder(args ?? Array.Empty()); + builder.Configuration.AddEnvironmentVariables("PB_"); + AddServices(builder.Configuration, builder.Services); + return builder; + } + + public void Configure(WebApplication app) + { + app.UseStaticFiles(); + app.UseRouting(); + app.UseAuthentication(); + app.UseAuthorization(); + // app.MapControllerRoute( + //name: "default", + //pattern: "{controller=Home}/{action=Index}/{id?}"); + app.MapControllers(); + } + + public void AddServices(IConfiguration configuration, IServiceCollection services) + { + services.AddControllersWithViews(); + services.AddHostedService(); + services.AddHostedService(); + services.AddHostedService(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + } +} diff --git a/PluginBuilder/Properties/launchSettings.json b/PluginBuilder/Properties/launchSettings.json new file mode 100644 index 0000000..de81338 --- /dev/null +++ b/PluginBuilder/Properties/launchSettings.json @@ -0,0 +1,14 @@ +{ + "profiles": { + "Debug Profile": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7259;http://localhost:5001", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "PB_POSTGRES": "lo" + } + } + } +} diff --git a/PluginBuilder/Services/AzureStorageClient.cs b/PluginBuilder/Services/AzureStorageClient.cs new file mode 100644 index 0000000..0209734 --- /dev/null +++ b/PluginBuilder/Services/AzureStorageClient.cs @@ -0,0 +1,135 @@ +using Microsoft.WindowsAzure.Storage; +using Newtonsoft.Json.Linq; + +namespace PluginBuilder.Services +{ + public class AzureStorageClientException : Exception + { + public AzureStorageClientException(string message) : base(message) + { + + } + } + + /// + /// A wrapper around "az" utility inside a docker image + /// + /// While we could theorically use the Azure Storage library directly instead of this, + /// the files to upload on azure are stored in a docker volume, so using the library + /// would require us to copy the files to upload out of the docker volume. + /// + /// This wouldn't be ideal, as we would need to make sure to properly clean it up. + /// And we also don't have any datadir for this project. + /// + /// Another solution I tried was to directly use fetch the files via MountPoint of the docker volume + /// Sadly, on windows docker run on a VM, so the file system isn't local to the machine. + /// + public class AzureStorageClient + { + string scheme; + bool isLocalhost; + public AzureStorageClient(ProcessRunner processRunner, IConfiguration configuration) + { + ProcessRunner = processRunner; + StorageConnectionString = configuration.GetRequired("STORAGE_CONNECTION_STRING"); + if (!CloudStorageAccount.TryParse(StorageConnectionString, out var acc)) + throw new ConfigurationException("STORAGE_CONNECTION_STRING", "Invalid storage connection string"); + scheme = acc.BlobEndpoint.Scheme; + isLocalhost = acc.BlobEndpoint.Host == "localhost" || acc.BlobEndpoint.Host == "127.0.0.1"; + DefaultContainer = "artifacts"; + } + + public ProcessRunner ProcessRunner { get; } + public string StorageConnectionString { get; } + public string DefaultContainer { get; } + public async Task EnsureDefaultContainerExists(CancellationToken cancellationToken = default) + { + var error = new OutputCapture(); + var output = new OutputCapture(); + var code = await ProcessRunner.RunAsync(new ProcessSpec() + { + Executable = "docker", + Arguments = CreateArguments("az", "storage", "container", "create", "--name", DefaultContainer, "--public-access", "blob"), + ErrorCapture = error, + OutputCapture = output + }, cancellationToken); + if (code != 0) + throw new AzureStorageClientException($"Impossible to create container ({error})"); + return ToJson(output)["created"]!.Value(); + } + + public async Task Upload(string volume, string fileInVolume, string blobName) + { + var error = new OutputCapture(); + var output = new OutputCapture(); + var code = await ProcessRunner.RunAsync(new ProcessSpec() + { + Executable = "docker", + Arguments = CreateArguments( + new[] + { + "-v", $"{volume}:/out" + }, + new[] + { + "az", "storage", "blob", "upload", + "-f", $"/out/{fileInVolume}", "-c", DefaultContainer, + "-n", blobName, + "--content-type", "application/zip" + }), + ErrorCapture = error, + OutputCapture = output + }, default); + if (code != 0) + throw new AzureStorageClientException($"Impossible to upload ({error})"); + + error = new OutputCapture(); + output = new OutputCapture(); + code = await ProcessRunner.RunAsync(new ProcessSpec() + { + Executable = "docker", + Arguments = CreateArguments("az", "storage", "blob", "url", "--container-name", DefaultContainer, "--name", blobName, "--protocol", scheme), + ErrorCapture = error, + OutputCapture = output + }, default); + if (code != 0) + throw new AzureStorageClientException($"Impossible to get the public url of the blob ({error})"); + return ToString(output); + } + + private static JObject ToJson(OutputCapture output) + { + var txt = output.ToString(); + // Remove some crap at the end present for god knows why + txt = txt.Substring(0, txt.LastIndexOf('}') + 1); + return JObject.Parse(txt)!; + } + private static string ToString(OutputCapture output) + { + var txt = output.ToString(); + // Remove some crap at the end present for god knows why + txt = txt.Substring(0, txt.LastIndexOf('"') + 1); + return JValue.Parse(txt)!.Value()!; + } + + private string[] CreateArguments(params string[] args) + { + return CreateArguments(null, args); + } + private string[] CreateArguments(string[]? dockerArgs, string[] args) + { + List a = new List(); + a.AddRange(new[] { "run", "-ti", "--rm", "--env", $"AZURE_STORAGE_CONNECTION_STRING={StorageConnectionString}" }); + if (isLocalhost) + { + // Not needed in prod, but we need it in tests to connect to the azure containers running in docker-compose + a.AddRange(new[] { "--network", "host" }); + } + if (dockerArgs is not null) + a.AddRange(dockerArgs); + a.Add("mcr.microsoft.com/azure-cli:2.9.1"); + a.AddRange(args); + return a.ToArray(); + } + } +} diff --git a/PluginBuilder/Services/BuildService.cs b/PluginBuilder/Services/BuildService.cs new file mode 100644 index 0000000..ecc7a3b --- /dev/null +++ b/PluginBuilder/Services/BuildService.cs @@ -0,0 +1,139 @@ +using System.Security.Cryptography; +using Dapper; +using Microsoft.Extensions.FileProviders; +using Newtonsoft.Json.Linq; + +namespace PluginBuilder.Services +{ + public class BuildServiceException : Exception + { + public BuildServiceException(string message) : base(message) + { + + } + } + public class BuildService + { + public BuildService( + ILogger logger, + ProcessRunner processRunner, + DBConnectionFactory connectionFactory, + AzureStorageClient azureStorageClient) + { + Logger = logger; + ProcessRunner = processRunner; + ConnectionFactory = connectionFactory; + AzureStorageClient = azureStorageClient; + } + + public ILogger Logger { get; } + public ProcessRunner ProcessRunner { get; } + public DBConnectionFactory ConnectionFactory { get; } + public AzureStorageClient AzureStorageClient { get; } + + public async Task Build(PluginSlug pluginSlug, PluginBuildParameters buildParameters) + { + var fullBuildId = await CreateNewBuild(pluginSlug); + List args = new List(); + + // Create the volumes where the artifacts will be stored + args.AddRange(new[] { "volume", "create" }); + args.AddRange(new[] { "--label", $"BTCPAY_PLUGIN_BUILD={fullBuildId}" }); + var output = new OutputCapture(); + var code = await ProcessRunner.RunAsync(new ProcessSpec() + { + Executable = "docker", + Arguments = args.ToArray(), + OutputCapture = output + }, default); + if (code != 0) + throw new BuildServiceException("docker volume create failed"); + var volume = output.ToString().Trim(); + args.Clear(); + + // Then let's build by running our image plugin-builder (built in DockerStartupHostedService) + var info = new JObject(); + + args.Add("run"); + args.AddRange(new[] { "--env", $"GIT_REPO={buildParameters.GitRepository}" }); + info["gitRepository"] = buildParameters.GitRepository; + info["dockerVolume"] = volume; + if (buildParameters.GitRef != null) + { + args.AddRange(new[] { "--env", $"GIT_REF={buildParameters.GitRef}" }); + info["gitRef"] = buildParameters.GitRef; + } + if (buildParameters.PluginDirectory != null) + { + args.AddRange(new[] { "--env", $"PLUGIN_DIR={buildParameters.PluginDirectory}" }); + info["pluginDir"] = buildParameters.PluginDirectory; + } + if (buildParameters.BuildConfig != null) + { + args.AddRange(new[] { "--env", $"BUILD_CONFIG={buildParameters.BuildConfig}" }); + info["buildConfig"] = buildParameters.BuildConfig; + } + + args.AddRange(new[] { "-v", $"{volume}:/out" }); + args.AddRange(new[] { "-ti", "--rm" }); + args.Add("plugin-builder"); + await UpdateBuild(fullBuildId, "running", info); + JObject buildEnv; + try + { + code = await ProcessRunner.RunAsync(new ProcessSpec() + { + Executable = "docker", + Arguments = args.ToArray() + }, default); + if (code != 0) + throw new BuildServiceException("docker build failed"); + + string buildEnvStr = await ReadFileInVolume(volume, "build-env.json"); + buildEnv = JObject.Parse(buildEnvStr); + } + catch (Exception err) + { + await UpdateBuild(fullBuildId, "failed", new JObject() { ["error"] = err.Message }); + throw; + } + var pluginName = buildEnv["pluginName"]!.Value(); + string manifestStr = await ReadFileInVolume(volume, $"{pluginName}.btcpay.json"); + + var manifest = JObject.Parse(manifestStr); + await UpdateBuild(fullBuildId, "waiting-upload", buildEnv, manifest); + + await UpdateBuild(fullBuildId, "uploading", null, null); + var url = await AzureStorageClient.Upload(volume, $"{pluginName}.btcpay", $"{fullBuildId}/{pluginName}.btcpay"); + await UpdateBuild(fullBuildId, "uploaded", new JObject() { ["url"] = url }, null); + } + + private async Task ReadFileInVolume(string volume, string file) + { + var output = new OutputCapture(); + // Let's read the build-env.json + int code = await ProcessRunner.RunAsync(new ProcessSpec() + { + Executable = "docker", + Arguments = new[] { + "run", "-ti", "--rm", "-v", $"{volume}:/out", "plugin-builder", "cat", $"/out/{file}" }, + OutputCapture = output + }, default); + if (code != 0) + throw new BuildServiceException("docker run to read a file in volume"); + return output.ToString(); + } + + private async Task UpdateBuild(FullBuildId fullBuildId, string newState, JObject? buildInfo, JObject? manifestInfo = null) + { + await using var connection = await ConnectionFactory.Open(); + await connection.UpdateBuild(fullBuildId, newState, buildInfo, manifestInfo); + } + + private async Task CreateNewBuild(PluginSlug pluginSlug) + { + await using var connection = await ConnectionFactory.Open(); + return new FullBuildId(pluginSlug, await connection.NewBuild(pluginSlug)); + } + } +} diff --git a/PluginBuilder/Services/DBConnectionFactory.cs b/PluginBuilder/Services/DBConnectionFactory.cs new file mode 100644 index 0000000..0e3a030 --- /dev/null +++ b/PluginBuilder/Services/DBConnectionFactory.cs @@ -0,0 +1,46 @@ +using Npgsql; + +namespace PluginBuilder.Services +{ + public class DBConnectionFactory + { + public NpgsqlConnectionStringBuilder ConnectionString { get; } + public DBConnectionFactory(IConfiguration config) + { + try + { + ConnectionString = new NpgsqlConnectionStringBuilder(config.GetRequired("POSTGRES")); + } + catch (Exception ex) when (ex is not ConfigurationException) + { + throw new ConfigurationException("POSTGRES", ex.Message); + } + } + + public async Task Open(CancellationToken cancellationToken = default) + { + int maxRetries = 10; + int retries = maxRetries; +retry: + var conn = new Npgsql.NpgsqlConnection(ConnectionString.ToString()); + try + { + await conn.OpenAsync(cancellationToken); + } + catch (PostgresException ex) when (ex.IsTransient && retries > 0) + { + retries--; + await conn.DisposeAsync(); + await Task.Delay((maxRetries - retries) * 100, cancellationToken); + goto retry; + } + catch + { + conn.Dispose(); + throw; + } + return conn; + } + + } +} diff --git a/PluginBuilder/Views/Home/HomePage.cshtml b/PluginBuilder/Views/Home/HomePage.cshtml new file mode 100644 index 0000000..6a44955 --- /dev/null +++ b/PluginBuilder/Views/Home/HomePage.cshtml @@ -0,0 +1,33 @@ +@{ + Layout = null; +} + + + + + + + + + + + BTCPay Server - Plugin Builder + + + + + + diff --git a/PluginBuilder/Views/_ViewImports.cshtml b/PluginBuilder/Views/_ViewImports.cshtml new file mode 100644 index 0000000..b1712a5 --- /dev/null +++ b/PluginBuilder/Views/_ViewImports.cshtml @@ -0,0 +1,2 @@ +@using PluginBuilder +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/PluginBuilder/Views/_ViewStart.cshtml b/PluginBuilder/Views/_ViewStart.cshtml new file mode 100644 index 0000000..a5f1004 --- /dev/null +++ b/PluginBuilder/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} diff --git a/PluginBuilder/entrypoint.sh b/PluginBuilder/entrypoint.sh new file mode 100644 index 0000000..5445059 --- /dev/null +++ b/PluginBuilder/entrypoint.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +set -e + +git --version +dotnet --info + +: "${BUILD_CONFIG:=Release}" + +BRANCH_OPTS="" +[[ "$GIT_REF" ]] && BRANCH_OPTS="-b ${GIT_REF}" + +git clone --depth 1 --recurse-submodules $BRANCH_OPTS --single-branch "${GIT_REPO}" . +GIT_COMMIT="$(git rev-parse HEAD)" +GIT_COMMIT_DATE=$(git show -s --format=%ci) +# To UTC +GIT_COMMIT_DATE=$(date -d "$GIT_COMMIT_DATE" --iso-8601=seconds --utc) +[[ "$PLUGIN_DIR" ]] && cd "${PLUGIN_DIR}" +PLUGIN_NAME="$(ls *.csproj)" +PLUGIN_NAME="${PLUGIN_NAME/.csproj/}" +dotnet publish -c "${BUILD_CONFIG}" -o "/tmp/publish" + +# PluginPacker crash because of no gpg, but we don't use it anyway... +/build-tools/PluginPacker/BTCPayServer.PluginPacker "/tmp/publish" "${PLUGIN_NAME}" "/tmp/publish-package" || true +cp /tmp/publish-package/*/*/* /out +rm /out/SHA256SUMS.asc /out/SHA256SUMS + +BUILD_DATE=$(date --iso-8601=seconds --utc) +# To UTC +BUILD_DATE=$(date -d "$BUILD_DATE" --iso-8601=seconds --utc) +BUILD_HASH=($(sha256sum /out/${PLUGIN_NAME}.btcpay)) + +jq --null-input \ +--arg buildConfig "$BUILD_CONFIG" \ +--arg gitRef "$GIT_REF" \ +--arg gitRepository "$GIT_REPO" \ +--arg pluginDir "$PLUGIN_DIR" \ +--arg buildConfig "$BUILD_CONFIG" \ +--arg gitCommit "$GIT_COMMIT" \ +--arg gitCommitDate "$GIT_COMMIT_DATE" \ +--arg buildDate "$BUILD_DATE" \ +--arg buildHash "$BUILD_HASH" \ +--arg pluginName "$PLUGIN_NAME" \ +'{ +"pluginName": $pluginName, +"gitRepository": $gitRepository, +"gitRef": $gitRef, +"pluginDir": $pluginDir, +"buildConfig": $buildConfig, +"gitCommit": $gitCommit, +"gitCommitDate": $gitCommitDate, +"buildDate": $buildDate, +"buildHash": $buildHash +}' > /out/build-env.json + + + +# { +# "gitRepository": "https://github.com/Kukks/btcpayserver", +# "gitRef": "plugins/collection", +# "pluginDir": "Plugins/BTCPayServer.Plugins.AOPP", +# "gitCommit": "bed25814a7a47f7bf13b2a1cb9a2dcf544d268dd", +# "gitCommitDate": "2022-10-31T10:03:52+00:00", +# "buildDate": "2022-11-07T06:10:20+00:00", +# "buildHash": "f56cec255e2fc92c1b2c0d39546d87548daa98a7fa0e9f7a7f28f6dc129a31b6" +# } + +# ls /out/ +# BTCPayServer.Plugins.AOPP.btcpay BTCPayServer.Plugins.AOPP.btcpay.json build-env.json diff --git a/PluginBuilder/wwwroot/favicon.ico b/PluginBuilder/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b649905cd742d5f9f50e7274c80a610f7dac2d8f GIT binary patch literal 2090 zcmYLLc{tSDA09Pgh_Pf$ma$Zpdl@t&F~b-Jg^Y?ZmdqH2xRxPHwwi32Feq8N5lJ`M z%Ti;@nzj6F8KR7uxacEWmHU2j}J}RNF=BynY5276i}3Zi^UTB7|CY^4^Vu~ ztPd(fkdQe^;(etIQ|F2;F<r4w|ih6&vm03@@d3{pGp z)?I~rHyc^de>h7{f5Ur^fQoITqy)1o&4fQj`@8uwVz0+v*D?M&L7Dp4WCKzW8eaq> zm%Egq0ZBLViXpYxXJm8`1ly+H0C-9LvEQ*Fou+ZV^C7>+e^s^M5 zD=+)P%m1~*%2#sSK{Sf~Pk{{Cn2)+yp)J19cT4)#UN9&$t311NvZb;{6^?S}$TbFMp8} zsT63UxP-LcA_CIoONQfoOQx?l_<6BoT1t;)ZZ_I$XhlY_CoLu~)rnY@!}CpsmTCc_ z!h$2=DvW`vdtzOXYw#mZX;FOq%M&0Hy?ZS$m?Wtu7PJv6u`ZC-HCSqFeOs}3- z_@oq8IJaD%;$->=xEmTObV;+p>hQqLNiue1z-6T>HB;@ni)(IUqLyY_vFJv92Sa8A zT-tRrTzjDn+xoGwk>M(U3};8p|AANPb1S+7m_zpQVel|$#KBy&GSPmDgK_YG-Bb6L z1}*%o1^|5+8U>dc-rMnBO4on9ndVfvjjt*B0l2G7mB|x>F8466f9n-u5K5EV^Xs7t zQL{cwvJ+JwaM7{%)Xq?v@fFa0cW{Wqom$7x7KanA4z zm{s>m{!v1d(WPtA)J=4~Le6Cx|E_8Q& z)&sJ4wSNfg4Bl-4HZyRbu7#z8y;DM2=RT6+wz*<&H_LRHS}&cG=+=RrgNu^HC#=#A z9oAs9rX4Z1paOU@-6wKelsWE#Su+-92Eo=x70Nj24b4uJAPKfC-s8xZf_Mmy(L3TJ z#f4`yG`o2OxqcIkF(1!V%Afvrs2uOLlbRmy8lPBofNZ=Noof2d)FVBo*?a1;V(8tD zS16PMDM^ic`^bBm5-OI%7QPr2=4$7ZDQ&$OlB996=T!<`W&?v)`W`cfoR%9I?qu{& zyD6{e%L~v@I(I|Xy*l~OV~ozQm@jQG&h0y*7pYx zGec-Q{lvlxOnAnU#&P+h>zF=VKsLI#WY0(ka~n6?w^^+knBhNy^EK7*s?@=YZRpBS zqU{m49lH3@=_B3p53Y3&G&AKIpR1Lehi3Qr-_-t(t~2mHrSiKXNREMON(K0PE8A)o zm>uKT-?vFCS5IV)P9OK2|6drs$Bw4>-e*z#Yb6c}=Q+LLH E0S7bMbpQYW literal 0 HcmV?d00001 diff --git a/PluginBuilder/wwwroot/styles/btcpayserver-bootstrap.css b/PluginBuilder/wwwroot/styles/btcpayserver-bootstrap.css new file mode 100644 index 0000000..181213a --- /dev/null +++ b/PluginBuilder/wwwroot/styles/btcpayserver-bootstrap.css @@ -0,0 +1,11320 @@ +/*! + * Bootstrap v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --btcpay-font-sans-serif: var(--btcpay-font-family-base); + --btcpay-font-monospace: var(--btcpay-font-family-monospace); + --btcpay-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --btcpay-root-font-size: 16px; + --btcpay-body-font-family: var(--btcpay-font-family-base); + --btcpay-body-font-size: 0.875rem; + --btcpay-body-font-weight: var(--btcpay-font-weight-normal); + --btcpay-body-line-height: 1.6; + --btcpay-body-color: var(--btcpay-body-text); + --btcpay-body-bg: var(--btcpay-white); +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +:root { + font-size: var(--btcpay-root-font-size); +} + +body { + margin: 0; + font-family: var(--btcpay-body-font-family); + font-size: var(--btcpay-body-font-size); + font-weight: var(--btcpay-body-font-weight); + line-height: var(--btcpay-body-line-height); + color: var(--btcpay-body-color); + text-align: var(--btcpay-body-text-align); + background-color: var(--btcpay-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: var(--btcpay-black); +} + +hr { + margin: 1rem 0; + color: inherit; + background-color: currentColor; + border: 0; + opacity: 0.25; +} + +hr:not([size]) { + height: 3px; +} + +h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: var(--btcpay-font-weight-bold); + line-height: 1.2; +} + +h1, .h1 { + font-size: calc(1.34375rem + 1.125vw); +} + +@media (min-width: 1200px) { + h1, .h1 { + font-size: 2.1875rem; + } +} + +h2, .h2 { + font-size: calc(1.3rem + 0.6vw); +} + +@media (min-width: 1200px) { + h2, .h2 { + font-size: 1.75rem; + } +} + +h3, .h3 { + font-size: calc(1.27813rem + 0.3375vw); +} + +@media (min-width: 1200px) { + h3, .h3 { + font-size: 1.53125rem; + } +} + +h4, .h4 { + font-size: calc(1.25625rem + 0.075vw); +} + +@media (min-width: 1200px) { + h4, .h4 { + font-size: 1.3125rem; + } +} + +h5, .h5 { + font-size: 1.09375rem; +} + +h6, .h6 { + font-size: 0.875rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-bs-original-title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul { + padding-left: 2rem; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: var(--btcpay-font-weight-bold); +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small, .small { + font-size: 0.875em; +} + +mark, .mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: var(--btcpay-body-link); + text-decoration: none; +} + +a:hover { + color: var(--btcpay-body-link-accent); + text-decoration: none; +} + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: var(--btcpay-font-family-monospace); + font-size: 1em; + direction: ltr /* rtl:ignore */; + unicode-bidi: bidi-override; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; + color: var(--btcpay-pre-text); +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +code { + font-size: 0.875em; + color: var(--btcpay-code-text); + word-wrap: break-word; +} + +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 0.875em; + color: var(--btcpay-code-text); + background-color: var(--btcpay-code-bg); + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 1em; + font-weight: var(--btcpay-font-weight-bold); +} + +figure { + margin: 0 0 1rem; +} + +img, +svg { + vertical-align: middle; +} + +table { + caption-side: bottom; + border-collapse: collapse; +} + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--btcpay-body-text-muted); + text-align: left; +} + +th { + font-weight: var(--btcpay-font-weight-normal); + text-align: inherit; + text-align: -webkit-match-parent; +} + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +label { + display: inline-block; +} + +button { + border-radius: 0; +} + +button:focus:not(:focus-visible) { + outline: 0; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +select { + text-transform: none; +} + +[role="button"] { + cursor: pointer; +} + +select { + word-wrap: normal; +} + +select:disabled { + opacity: 1; +} + +[list]::-webkit-calendar-picker-indicator { + display: none; +} + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), +[type="submit"]:not(:disabled) { + cursor: pointer; +} + +::-moz-focus-inner { + padding: 0; + border-style: none; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} + +@media (min-width: 1200px) { + legend { + font-size: 1.5rem; + } +} + +legend + * { + clear: left; +} + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; +} + +::-webkit-inner-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-color-swatch-wrapper { + padding: 0; +} + +::-webkit-file-upload-button { + font: inherit; +} + +::file-selector-button { + font: inherit; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +iframe { + border: 0; +} + +summary { + display: list-item; + cursor: pointer; +} + +progress { + vertical-align: baseline; +} + +[hidden] { + display: none !important; +} + +.lead { + font-size: 1.09375rem; + font-weight: 300; +} + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .display-1 { + font-size: 5rem; + } +} + +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; + } +} + +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .display-3 { + font-size: 4rem; + } +} + +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; + } +} + +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .display-5 { + font-size: 3rem; + } +} + +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} + +@media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; + } +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.09375rem; +} + +.blockquote > :last-child { + margin-bottom: 0; +} + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: var(--btcpay-body-text-muted); +} + +.blockquote-footer::before { + content: "\2014\00A0"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: var(--btcpay-bg-tile); + border: 1px solid var(--btcpay-body-border-medium); + border-radius: var(--btcpay-border-radius); + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 0.875em; + color: var(--btcpay-secondary); +} + +.container, +.container-fluid, +.container-sm, +.container-md, +.container-lg, +.container-xl, +.container-xxl { + width: 100%; + padding-right: var(--btcpay-gutter-x, 0.75rem); + padding-left: var(--btcpay-gutter-x, 0.75rem); + 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; + } +} + +@media (min-width: 1400px) { + .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl { + max-width: 1320px; + } +} + +.row { + --btcpay-gutter-x: 1.5rem; + --btcpay-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--btcpay-gutter-y)); + margin-right: calc(-.5 * var(--btcpay-gutter-x)); + margin-left: calc(-.5 * var(--btcpay-gutter-x)); +} + +.row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--btcpay-gutter-x) * .5); + padding-left: calc(var(--btcpay-gutter-x) * .5); + margin-top: var(--btcpay-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.33333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.66667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-left: 8.33333%; +} + +.offset-2 { + margin-left: 16.66667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.33333%; +} + +.offset-5 { + margin-left: 41.66667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.33333%; +} + +.offset-8 { + margin-left: 66.66667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.33333%; +} + +.offset-11 { + margin-left: 91.66667%; +} + +.g-0, +.gx-0 { + --btcpay-gutter-x: 0; +} + +.g-0, +.gy-0 { + --btcpay-gutter-y: 0; +} + +.g-1, +.gx-1 { + --btcpay-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --btcpay-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --btcpay-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --btcpay-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --btcpay-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --btcpay-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --btcpay-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --btcpay-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --btcpay-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --btcpay-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.33333%; + } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.66667%; + } + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333%; + } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66667%; + } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333%; + } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66667%; + } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333%; + } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66667%; + } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333%; + } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66667%; + } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.33333%; + } + .offset-sm-2 { + margin-left: 16.66667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.33333%; + } + .offset-sm-5 { + margin-left: 41.66667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.33333%; + } + .offset-sm-8 { + margin-left: 66.66667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.33333%; + } + .offset-sm-11 { + margin-left: 91.66667%; + } + .g-sm-0, + .gx-sm-0 { + --btcpay-gutter-x: 0; + } + .g-sm-0, + .gy-sm-0 { + --btcpay-gutter-y: 0; + } + .g-sm-1, + .gx-sm-1 { + --btcpay-gutter-x: 0.25rem; + } + .g-sm-1, + .gy-sm-1 { + --btcpay-gutter-y: 0.25rem; + } + .g-sm-2, + .gx-sm-2 { + --btcpay-gutter-x: 0.5rem; + } + .g-sm-2, + .gy-sm-2 { + --btcpay-gutter-y: 0.5rem; + } + .g-sm-3, + .gx-sm-3 { + --btcpay-gutter-x: 1rem; + } + .g-sm-3, + .gy-sm-3 { + --btcpay-gutter-y: 1rem; + } + .g-sm-4, + .gx-sm-4 { + --btcpay-gutter-x: 1.5rem; + } + .g-sm-4, + .gy-sm-4 { + --btcpay-gutter-y: 1.5rem; + } + .g-sm-5, + .gx-sm-5 { + --btcpay-gutter-x: 3rem; + } + .g-sm-5, + .gy-sm-5 { + --btcpay-gutter-y: 3rem; + } +} + +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.33333%; + } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.66667%; + } + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333%; + } + .col-md-2 { + flex: 0 0 auto; + width: 16.66667%; + } + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333%; + } + .col-md-5 { + flex: 0 0 auto; + width: 41.66667%; + } + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333%; + } + .col-md-8 { + flex: 0 0 auto; + width: 66.66667%; + } + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333%; + } + .col-md-11 { + flex: 0 0 auto; + width: 91.66667%; + } + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.33333%; + } + .offset-md-2 { + margin-left: 16.66667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.33333%; + } + .offset-md-5 { + margin-left: 41.66667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.33333%; + } + .offset-md-8 { + margin-left: 66.66667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.33333%; + } + .offset-md-11 { + margin-left: 91.66667%; + } + .g-md-0, + .gx-md-0 { + --btcpay-gutter-x: 0; + } + .g-md-0, + .gy-md-0 { + --btcpay-gutter-y: 0; + } + .g-md-1, + .gx-md-1 { + --btcpay-gutter-x: 0.25rem; + } + .g-md-1, + .gy-md-1 { + --btcpay-gutter-y: 0.25rem; + } + .g-md-2, + .gx-md-2 { + --btcpay-gutter-x: 0.5rem; + } + .g-md-2, + .gy-md-2 { + --btcpay-gutter-y: 0.5rem; + } + .g-md-3, + .gx-md-3 { + --btcpay-gutter-x: 1rem; + } + .g-md-3, + .gy-md-3 { + --btcpay-gutter-y: 1rem; + } + .g-md-4, + .gx-md-4 { + --btcpay-gutter-x: 1.5rem; + } + .g-md-4, + .gy-md-4 { + --btcpay-gutter-y: 1.5rem; + } + .g-md-5, + .gx-md-5 { + --btcpay-gutter-x: 3rem; + } + .g-md-5, + .gy-md-5 { + --btcpay-gutter-y: 3rem; + } +} + +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.33333%; + } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.66667%; + } + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333%; + } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66667%; + } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333%; + } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66667%; + } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333%; + } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66667%; + } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333%; + } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66667%; + } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.33333%; + } + .offset-lg-2 { + margin-left: 16.66667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.33333%; + } + .offset-lg-5 { + margin-left: 41.66667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.33333%; + } + .offset-lg-8 { + margin-left: 66.66667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.33333%; + } + .offset-lg-11 { + margin-left: 91.66667%; + } + .g-lg-0, + .gx-lg-0 { + --btcpay-gutter-x: 0; + } + .g-lg-0, + .gy-lg-0 { + --btcpay-gutter-y: 0; + } + .g-lg-1, + .gx-lg-1 { + --btcpay-gutter-x: 0.25rem; + } + .g-lg-1, + .gy-lg-1 { + --btcpay-gutter-y: 0.25rem; + } + .g-lg-2, + .gx-lg-2 { + --btcpay-gutter-x: 0.5rem; + } + .g-lg-2, + .gy-lg-2 { + --btcpay-gutter-y: 0.5rem; + } + .g-lg-3, + .gx-lg-3 { + --btcpay-gutter-x: 1rem; + } + .g-lg-3, + .gy-lg-3 { + --btcpay-gutter-y: 1rem; + } + .g-lg-4, + .gx-lg-4 { + --btcpay-gutter-x: 1.5rem; + } + .g-lg-4, + .gy-lg-4 { + --btcpay-gutter-y: 1.5rem; + } + .g-lg-5, + .gx-lg-5 { + --btcpay-gutter-x: 3rem; + } + .g-lg-5, + .gy-lg-5 { + --btcpay-gutter-y: 3rem; + } +} + +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.33333%; + } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.66667%; + } + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333%; + } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66667%; + } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333%; + } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66667%; + } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333%; + } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66667%; + } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333%; + } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66667%; + } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.33333%; + } + .offset-xl-2 { + margin-left: 16.66667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.33333%; + } + .offset-xl-5 { + margin-left: 41.66667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.33333%; + } + .offset-xl-8 { + margin-left: 66.66667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.33333%; + } + .offset-xl-11 { + margin-left: 91.66667%; + } + .g-xl-0, + .gx-xl-0 { + --btcpay-gutter-x: 0; + } + .g-xl-0, + .gy-xl-0 { + --btcpay-gutter-y: 0; + } + .g-xl-1, + .gx-xl-1 { + --btcpay-gutter-x: 0.25rem; + } + .g-xl-1, + .gy-xl-1 { + --btcpay-gutter-y: 0.25rem; + } + .g-xl-2, + .gx-xl-2 { + --btcpay-gutter-x: 0.5rem; + } + .g-xl-2, + .gy-xl-2 { + --btcpay-gutter-y: 0.5rem; + } + .g-xl-3, + .gx-xl-3 { + --btcpay-gutter-x: 1rem; + } + .g-xl-3, + .gy-xl-3 { + --btcpay-gutter-y: 1rem; + } + .g-xl-4, + .gx-xl-4 { + --btcpay-gutter-x: 1.5rem; + } + .g-xl-4, + .gy-xl-4 { + --btcpay-gutter-y: 1.5rem; + } + .g-xl-5, + .gx-xl-5 { + --btcpay-gutter-x: 3rem; + } + .g-xl-5, + .gy-xl-5 { + --btcpay-gutter-y: 3rem; + } +} + +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.33333%; + } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.66667%; + } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333%; + } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66667%; + } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333%; + } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66667%; + } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333%; + } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66667%; + } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333%; + } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66667%; + } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xxl-0 { + margin-left: 0; + } + .offset-xxl-1 { + margin-left: 8.33333%; + } + .offset-xxl-2 { + margin-left: 16.66667%; + } + .offset-xxl-3 { + margin-left: 25%; + } + .offset-xxl-4 { + margin-left: 33.33333%; + } + .offset-xxl-5 { + margin-left: 41.66667%; + } + .offset-xxl-6 { + margin-left: 50%; + } + .offset-xxl-7 { + margin-left: 58.33333%; + } + .offset-xxl-8 { + margin-left: 66.66667%; + } + .offset-xxl-9 { + margin-left: 75%; + } + .offset-xxl-10 { + margin-left: 83.33333%; + } + .offset-xxl-11 { + margin-left: 91.66667%; + } + .g-xxl-0, + .gx-xxl-0 { + --btcpay-gutter-x: 0; + } + .g-xxl-0, + .gy-xxl-0 { + --btcpay-gutter-y: 0; + } + .g-xxl-1, + .gx-xxl-1 { + --btcpay-gutter-x: 0.25rem; + } + .g-xxl-1, + .gy-xxl-1 { + --btcpay-gutter-y: 0.25rem; + } + .g-xxl-2, + .gx-xxl-2 { + --btcpay-gutter-x: 0.5rem; + } + .g-xxl-2, + .gy-xxl-2 { + --btcpay-gutter-y: 0.5rem; + } + .g-xxl-3, + .gx-xxl-3 { + --btcpay-gutter-x: 1rem; + } + .g-xxl-3, + .gy-xxl-3 { + --btcpay-gutter-y: 1rem; + } + .g-xxl-4, + .gx-xxl-4 { + --btcpay-gutter-x: 1.5rem; + } + .g-xxl-4, + .gy-xxl-4 { + --btcpay-gutter-y: 1.5rem; + } + .g-xxl-5, + .gx-xxl-5 { + --btcpay-gutter-x: 3rem; + } + .g-xxl-5, + .gy-xxl-5 { + --btcpay-gutter-y: 3rem; + } +} + +.table { + --btcpay-table-bg: transparent; + --btcpay-table-accent-bg: transparent; + --btcpay-table-striped-color: var(--btcpay-body-text); + --btcpay-table-striped-bg: var(--btcpay-body-bg-striped); + --btcpay-table-active-color: var(--btcpay-body-text-active); + --btcpay-table-active-bg: var(--btcpay-body-bg-active); + --btcpay-table-hover-color: var(--btcpay-body-text-hover); + --btcpay-table-hover-bg: var(--btcpay-body-bg-hover); + width: 100%; + margin-bottom: 1rem; + color: var(--btcpay-body-text); + vertical-align: top; + border-color: var(--btcpay-body-border-light); +} + +.table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--btcpay-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--btcpay-table-accent-bg); +} + +.table > tbody { + vertical-align: inherit; +} + +.table > thead { + vertical-align: bottom; +} + +.table > :not(:first-child) { + border-top: 2px solid var(--btcpay-body-border-medium); +} + +.caption-top { + caption-side: top; +} + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.table-bordered > :not(caption) > * { + border-width: 1px 0; +} + +.table-bordered > :not(caption) > * > * { + border-width: 0 1px; +} + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} + +.table-borderless > :not(:first-child) { + border-top-width: 0; +} + +.table-striped > tbody > tr:nth-of-type(odd) > * { + --btcpay-table-accent-bg: var(--btcpay-table-striped-bg); + color: var(--btcpay-table-striped-color); +} + +.table-active { + --btcpay-table-accent-bg: var(--btcpay-table-active-bg); + color: var(--btcpay-table-active-color); +} + +.table-hover > tbody > tr:hover > * { + --btcpay-table-accent-bg: var(--btcpay-table-hover-bg); + color: var(--btcpay-table-hover-color); +} + +.table-primary { + --btcpay-table-bg: var(--btcpay-primary-dim-bg); + --btcpay-table-striped-bg: var(--btcpay-primary-dim-bg-striped); + --btcpay-table-striped-color: var(--btcpay-primary-dim-text-striped); + --btcpay-table-active-bg: var(--btcpay-primary-dim-bg-active); + --btcpay-table-active-color: var(--btcpay-primary-dim-text-active); + --btcpay-table-hover-bg: var(--btcpay-primary-dim-bg-hover); + --btcpay-table-hover-color: var(--btcpay-primary-dim-text-hover); + color: var(--btcpay-primary-dim-text); + border-color: var(--btcpay-primary-dim-border); +} + +.table-secondary { + --btcpay-table-bg: var(--btcpay-secondary-dim-bg); + --btcpay-table-striped-bg: var(--btcpay-secondary-dim-bg-striped); + --btcpay-table-striped-color: var(--btcpay-secondary-dim-text-striped); + --btcpay-table-active-bg: var(--btcpay-secondary-dim-bg-active); + --btcpay-table-active-color: var(--btcpay-secondary-dim-text-active); + --btcpay-table-hover-bg: var(--btcpay-secondary-dim-bg-hover); + --btcpay-table-hover-color: var(--btcpay-secondary-dim-text-hover); + color: var(--btcpay-secondary-dim-text); + border-color: var(--btcpay-secondary-dim-border); +} + +.table-success { + --btcpay-table-bg: var(--btcpay-success-dim-bg); + --btcpay-table-striped-bg: var(--btcpay-success-dim-bg-striped); + --btcpay-table-striped-color: var(--btcpay-success-dim-text-striped); + --btcpay-table-active-bg: var(--btcpay-success-dim-bg-active); + --btcpay-table-active-color: var(--btcpay-success-dim-text-active); + --btcpay-table-hover-bg: var(--btcpay-success-dim-bg-hover); + --btcpay-table-hover-color: var(--btcpay-success-dim-text-hover); + color: var(--btcpay-success-dim-text); + border-color: var(--btcpay-success-dim-border); +} + +.table-info { + --btcpay-table-bg: var(--btcpay-info-dim-bg); + --btcpay-table-striped-bg: var(--btcpay-info-dim-bg-striped); + --btcpay-table-striped-color: var(--btcpay-info-dim-text-striped); + --btcpay-table-active-bg: var(--btcpay-info-dim-bg-active); + --btcpay-table-active-color: var(--btcpay-info-dim-text-active); + --btcpay-table-hover-bg: var(--btcpay-info-dim-bg-hover); + --btcpay-table-hover-color: var(--btcpay-info-dim-text-hover); + color: var(--btcpay-info-dim-text); + border-color: var(--btcpay-info-dim-border); +} + +.table-warning { + --btcpay-table-bg: var(--btcpay-warning-dim-bg); + --btcpay-table-striped-bg: var(--btcpay-warning-dim-bg-striped); + --btcpay-table-striped-color: var(--btcpay-warning-dim-text-striped); + --btcpay-table-active-bg: var(--btcpay-warning-dim-bg-active); + --btcpay-table-active-color: var(--btcpay-warning-dim-text-active); + --btcpay-table-hover-bg: var(--btcpay-warning-dim-bg-hover); + --btcpay-table-hover-color: var(--btcpay-warning-dim-text-hover); + color: var(--btcpay-warning-dim-text); + border-color: var(--btcpay-warning-dim-border); +} + +.table-danger { + --btcpay-table-bg: var(--btcpay-danger-dim-bg); + --btcpay-table-striped-bg: var(--btcpay-danger-dim-bg-striped); + --btcpay-table-striped-color: var(--btcpay-danger-dim-text-striped); + --btcpay-table-active-bg: var(--btcpay-danger-dim-bg-active); + --btcpay-table-active-color: var(--btcpay-danger-dim-text-active); + --btcpay-table-hover-bg: var(--btcpay-danger-dim-bg-hover); + --btcpay-table-hover-color: var(--btcpay-danger-dim-text-hover); + color: var(--btcpay-danger-dim-text); + border-color: var(--btcpay-danger-dim-border); +} + +.table-light { + --btcpay-table-bg: var(--btcpay-light-dim-bg); + --btcpay-table-striped-bg: var(--btcpay-light-dim-bg-striped); + --btcpay-table-striped-color: var(--btcpay-light-dim-text-striped); + --btcpay-table-active-bg: var(--btcpay-light-dim-bg-active); + --btcpay-table-active-color: var(--btcpay-light-dim-text-active); + --btcpay-table-hover-bg: var(--btcpay-light-dim-bg-hover); + --btcpay-table-hover-color: var(--btcpay-light-dim-text-hover); + color: var(--btcpay-light-dim-text); + border-color: var(--btcpay-light-dim-border); +} + +.table-dark { + --btcpay-table-bg: var(--btcpay-dark-dim-bg); + --btcpay-table-striped-bg: var(--btcpay-dark-dim-bg-striped); + --btcpay-table-striped-color: var(--btcpay-dark-dim-text-striped); + --btcpay-table-active-bg: var(--btcpay-dark-dim-bg-active); + --btcpay-table-active-color: var(--btcpay-dark-dim-text-active); + --btcpay-table-hover-bg: var(--btcpay-dark-dim-bg-hover); + --btcpay-table-hover-color: var(--btcpay-dark-dim-text-hover); + color: var(--btcpay-dark-dim-text); + border-color: var(--btcpay-dark-dim-border); +} + +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +.form-label { + margin-bottom: 0.5rem; + color: var(--btcpay-form-text-label); +} + +.col-form-label { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.6; + color: var(--btcpay-form-text-label); +} + +.col-form-label-lg { + padding-top: calc(1rem + 1px); + padding-bottom: calc(1rem + 1px); + font-size: 1rem; +} + +.col-form-label-sm { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 0.75rem; +} + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--btcpay-form-text); +} + +.form-control { + display: block; + width: 100%; + padding: 0.5rem 0.75rem; + font-size: 0.875rem; + font-weight: var(--btcpay-font-weight-normal); + line-height: 1.6; + color: var(--btcpay-form-text); + background-color: var(--btcpay-form-bg); + background-clip: padding-box; + border: 1px solid var(--btcpay-form-border); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: var(--btcpay-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +.form-control[type="file"] { + overflow: hidden; +} + +.form-control[type="file"]:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.form-control:focus { + color: var(--btcpay-form-text); + background-color: var(--btcpay-form-bg); + border-color: var(--btcpay-form-border-focus); + outline: 0; + box-shadow: 0 0 0 1px var(--btcpay-form-border-focus) inset; +} + +.form-control::-webkit-date-and-time-value { + height: 1.6em; +} + +.form-control::-moz-placeholder { + color: var(--btcpay-body-text-muted); + opacity: 1; +} + +.form-control::placeholder { + color: var(--btcpay-body-text-muted); + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: var(--btcpay-form-bg-disabled); + border-color: var(--btcpay-form-border-disabled); + opacity: 1; +} + +.form-control::-webkit-file-upload-button { + padding: 0.5rem 0.75rem; + margin: -0.5rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: var(--btcpay-form-text); + background-color: var(--btcpay-form-bg-addon); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-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; + 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; +} + +.form-control::file-selector-button { + padding: 0.5rem 0.75rem; + margin: -0.5rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: var(--btcpay-form-text); + background-color: var(--btcpay-form-bg-addon); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + 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; +} + +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: var(--btcpay-form-bg-hover); +} + +.form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: var(--btcpay-form-bg-hover); +} + +.form-control::-webkit-file-upload-button { + padding: 0.5rem 0.75rem; + margin: -0.5rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: var(--btcpay-form-text); + background-color: var(--btcpay-form-bg-addon); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + -webkit-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; + 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; +} + +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: var(--btcpay-form-bg-hover); +} + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.5rem 0; + margin-bottom: 0; + line-height: 1.6; + color: var(--btcpay-body-text); + 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 { + min-height: calc(1.6em + 1rem + 2px); + padding: 0.5rem 0.75rem; + font-size: 0.75rem; + border-radius: 0.2rem; +} + +.form-control-sm::-webkit-file-upload-button { + padding: 0.5rem 0.75rem; + margin: -0.5rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; +} + +.form-control-sm::file-selector-button { + padding: 0.5rem 0.75rem; + margin: -0.5rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; +} + +.form-control-sm::-webkit-file-upload-button { + padding: 0.5rem 0.75rem; + margin: -0.5rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; +} + +.form-control-lg { + min-height: calc(1.6em + 2rem + 2px); + padding: 1rem 1.25rem; + font-size: 1rem; + border-radius: var(--btcpay-border-radius-l); +} + +.form-control-lg::-webkit-file-upload-button { + padding: 1rem 1.25rem; + margin: -1rem -1.25rem; + -webkit-margin-end: 1.25rem; + margin-inline-end: 1.25rem; +} + +.form-control-lg::file-selector-button { + padding: 1rem 1.25rem; + margin: -1rem -1.25rem; + -webkit-margin-end: 1.25rem; + margin-inline-end: 1.25rem; +} + +.form-control-lg::-webkit-file-upload-button { + padding: 1rem 1.25rem; + margin: -1rem -1.25rem; + -webkit-margin-end: 1.25rem; + margin-inline-end: 1.25rem; +} + +textarea.form-control { + min-height: calc(1.6em + 1rem + 2px); +} + +textarea.form-control-sm { + min-height: calc(1.6em + 1rem + 2px); +} + +textarea.form-control-lg { + min-height: calc(1.6em + 2rem + 2px); +} + +.form-control-color { + width: 3rem; + height: auto; + padding: 0.5rem; +} + +.form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} + +.form-control-color::-moz-color-swatch { + height: 1.6em; + border-radius: var(--btcpay-border-radius); +} + +.form-control-color::-webkit-color-swatch { + height: 1.6em; + border-radius: var(--btcpay-border-radius); +} + +.form-select { + display: block; + width: 100%; + padding: 0.5rem 2.25rem 0.5rem 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + font-size: 0.875rem; + font-weight: var(--btcpay-font-weight-normal); + line-height: 1.6; + color: var(--btcpay-form-text); + background-color: var(--btcpay-form-bg); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%236E7681' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: 1px solid var(--btcpay-form-border); + border-radius: var(--btcpay-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.form-select:focus { + border-color: var(--btcpay-form-border-focus); + outline: 0; + box-shadow: 0 0 0 1px var(--btcpay-form-border-focus) inset; +} + +.form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} + +.form-select:disabled { + background-color: var(--btcpay-form-bg-disabled); + border-color: var(--btcpay-form-border-disabled); +} + +.form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 var(--btcpay-form-text); +} + +.form-select-sm { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 0.75rem; + font-size: 0.75rem; + border-radius: 0.2rem; +} + +.form-select-lg { + padding-top: 1rem; + padding-bottom: 1rem; + padding-left: 1.25rem; + font-size: 1rem; + border-radius: var(--btcpay-border-radius-l); +} + +.form-check { + display: block; + min-height: 1.4rem; + padding-left: 2em; + margin-bottom: 1rem; +} + +.form-check .form-check-input { + float: left; + margin-left: -2em; +} + +.form-check-input { + width: 1.25em; + height: 1.25em; + margin-top: 0.175em; + vertical-align: top; + background-color: transparent; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: 2px solid var(--btcpay-form-border-check); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-print-color-adjust: exact; + color-adjust: exact; +} + +.form-check-input[type="checkbox"] { + border-radius: 0.25em; +} + +.form-check-input[type="radio"] { + border-radius: 50%; +} + +.form-check-input:active { + filter: brightness(90%); +} + +.form-check-input:focus { + border-color: var(--btcpay-form-border-focus); + outline: 0; + box-shadow: 0 0 0 2px var(--btcpay-form-shadow-focus); +} + +.form-check-input:checked { + background-color: var(--btcpay-primary); + border-color: var(--btcpay-primary-border); +} + +.form-check-input:checked[type="checkbox"] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e"); +} + +.form-check-input:checked[type="radio"] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} + +.form-check-input[type="checkbox"]:indeterminate { + background-color: var(--btcpay-primary); + border-color: var(--btcpay-primary-border); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} + +.form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} + +.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + opacity: 0.5; +} + +.form-switch { + padding-left: 3em; +} + +.form-switch .form-check-input { + width: 2.5em; + margin-left: -3em; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + background-position: left center; + border-radius: 2.5em; + transition: background-position 0.15s ease-in-out; +} + +.form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='var%28--btcpay-form-border-focus%29'/%3e%3c/svg%3e"); +} + +.form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.btn-check[disabled] + .btn, .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +.form-range { + width: 100%; + height: calc(1rem + 4px); + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.form-range:focus { + outline: 0; +} + +.form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px var(--btcpay-form-border-focus) inset; +} + +.form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px var(--btcpay-form-border-focus) inset; +} + +.form-range::-moz-focus-outer { + border: 0; +} + +.form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: var(--btcpay-primary); + 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; +} + +.form-range::-webkit-slider-thumb:active { + background-color: var(--btcpay-form-border-active); +} + +.form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--btcpay-form-border); + border-color: transparent; + border-radius: 1rem; +} + +.form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: var(--btcpay-primary); + 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; +} + +.form-range::-moz-range-thumb:active { + background-color: var(--btcpay-form-border-active); +} + +.form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--btcpay-form-border); + border-color: transparent; + border-radius: 1rem; +} + +.form-range:disabled { + pointer-events: none; +} + +.form-range:disabled::-webkit-slider-thumb { + background-color: var(--btcpay-form-bg-disabled); +} + +.form-range:disabled::-moz-range-thumb { + background-color: var(--btcpay-form-bg-disabled); +} + +.form-floating { + position: relative; +} + +.form-floating > .form-control, +.form-floating > .form-select { + height: calc(3.5rem + 2px); + line-height: 1.25; +} + +.form-floating > label { + position: absolute; color: var(--btcpay-form-text-addon); + top: 0; + left: 0; + height: 100%; + padding: 1rem 0.75rem; + pointer-events: none; + border: 1px solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} + +.form-floating > .form-control { + padding: 1rem 0.75rem; +} + +.form-floating > .form-control::-moz-placeholder { + color: transparent; +} + +.form-floating > .form-control::placeholder { + color: transparent; +} + +.form-floating > .form-control:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.form-floating > .form-control:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} + +.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.form-floating > .form-control:focus ~ label, +.form-floating > .form-control:not(:placeholder-shown) ~ label, +.form-floating > .form-select ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.form-floating > .form-control:-webkit-autofill ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} + +.input-group > .form-control, +.input-group > .form-select { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} + +.input-group > .form-control:focus, +.input-group > .form-select:focus { + z-index: 3; +} + +.input-group .btn { + position: relative; + z-index: 2; +} + +.input-group .btn:focus { + z-index: 3; +} + +.input-group-text { + display: flex; + align-items: center; + padding: 0.5rem 0.75rem; + font-size: 0.875rem; + font-weight: var(--btcpay-font-weight-normal); + line-height: 1.6; + color: var(--btcpay-form-text-addon); + text-align: center; + white-space: nowrap; + background-color: var(--btcpay-form-bg-addon); + border: 1px solid var(--btcpay-form-border); + border-radius: var(--btcpay-border-radius); +} + +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn { + padding: 1rem 1.25rem; + font-size: 1rem; + border-radius: var(--btcpay-border-radius-l); +} + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn { + padding: 0.5rem 0.75rem; + font-size: 0.75rem; + border-radius: 0.2rem; +} + +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; +} + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--btcpay-success); +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.75rem; + color: var(--btcpay-white); + background-color: rgba(var(--btcpay-success-rgb), 0.9); + border-radius: var(--btcpay-border-radius); +} + +.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: var(--btcpay-success-border); + padding-right: calc(1.6em + 1rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.4em + 0.25rem) center; + background-size: calc(0.8em + 0.5rem) calc(0.8em + 0.5rem); +} + +.was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: var(--btcpay-success-border); + box-shadow: 0 0 0 2px rgba(var(--btcpay-success-rgb), 0.25); +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.6em + 1rem); + background-position: top calc(0.4em + 0.25rem) right calc(0.4em + 0.25rem); +} + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: var(--btcpay-success-border); +} + +.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%236E7681' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.8em + 0.5rem) calc(0.8em + 0.5rem); +} + +.was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: var(--btcpay-success-border); + box-shadow: 0 0 0 2px rgba(var(--btcpay-success-rgb), 0.25); +} + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: var(--btcpay-success-border); +} + +.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: var(--btcpay-success); +} + +.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-success-rgb), 0.25); +} + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: var(--btcpay-success); +} + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: .5em; +} + +.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated +.input-group .form-select:valid, +.input-group .form-select.is-valid { + z-index: 1; +} + +.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated +.input-group .form-select:valid:focus, +.input-group .form-select.is-valid:focus { + z-index: 3; +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--btcpay-danger); +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.75rem; + color: var(--btcpay-white); + background-color: rgba(var(--btcpay-danger-rgb), 0.9); + border-radius: var(--btcpay-border-radius); +} + +.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: var(--btcpay-danger-border); + padding-right: calc(1.6em + 1rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.4em + 0.25rem) center; + background-size: calc(0.8em + 0.5rem) calc(0.8em + 0.5rem); +} + +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: var(--btcpay-danger-border); + box-shadow: 0 0 0 2px rgba(var(--btcpay-danger-rgb), 0.25); +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.6em + 1rem); + background-position: top calc(0.4em + 0.25rem) right calc(0.4em + 0.25rem); +} + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: var(--btcpay-danger-border); +} + +.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%236E7681' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.8em + 0.5rem) calc(0.8em + 0.5rem); +} + +.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: var(--btcpay-danger-border); + box-shadow: 0 0 0 2px rgba(var(--btcpay-danger-rgb), 0.25); +} + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: var(--btcpay-danger-border); +} + +.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: var(--btcpay-danger); +} + +.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-danger-rgb), 0.25); +} + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: var(--btcpay-danger); +} + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: .5em; +} + +.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated +.input-group .form-select:invalid, +.input-group .form-select.is-invalid { + z-index: 2; +} + +.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated +.input-group .form-select:invalid:focus, +.input-group .form-select.is-invalid:focus { + z-index: 3; +} + +.btn { + display: inline-block; + font-weight: var(--btcpay-font-weight-semibold); + line-height: 1.6; + color: var(--btcpay-body-text); + text-align: center; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.5rem 1.5rem; + font-size: 0.875rem; + border-radius: var(--btcpay-border-radius); + 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; +} + +.btn:hover { + color: var(--btcpay-body-text); +} + +.btn-check:focus + .btn, .btn:focus { + outline: 0; + box-shadow: 0 0 0 2px rgba(var(--btcpay-primary-rgb), 0.25); +} + +.btn:disabled, .btn.disabled, +fieldset:disabled .btn { + pointer-events: none; + opacity: 0.65; +} + +.btn-primary { + color: var(--btcpay-primary-text); + background-color: var(--btcpay-primary); + border-color: var(--btcpay-primary-border); +} + +.btn-primary:hover { + color: var(--btcpay-primary-text-hover); + background-color: var(--btcpay-primary-bg-hover); + border-color: var(--btcpay-primary-border-hover); +} + +.btn-check:focus + .btn-primary, .btn-primary:focus { + color: var(--btcpay-primary-text-hover); + background-color: var(--btcpay-primary-bg-hover); + border-color: var(--btcpay-primary-border-hover); + box-shadow: 0 0 0 2px var(--btcpay-primary-shadow); +} + +.btn-check:checked + .btn-primary, +.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, +.show > .btn-primary.dropdown-toggle { + color: var(--btcpay-primary-text-active); + background-color: var(--btcpay-primary-bg-active); + border-color: var(--btcpay-primary-border-active); +} + +.btn-check:checked + .btn-primary:focus, +.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 2px var(--btcpay-primary-shadow); +} + +.btn-primary:disabled, .btn-primary.disabled { + color: var(--btcpay-primary-text); + background-color: var(--btcpay-primary); + border-color: var(--btcpay-primary-border); +} + +.btn-secondary { + color: var(--btcpay-secondary-text); + background-color: var(--btcpay-secondary); + border-color: var(--btcpay-secondary-border); +} + +.btn-secondary:hover { + color: var(--btcpay-secondary-text-hover); + background-color: var(--btcpay-secondary-bg-hover); + border-color: var(--btcpay-secondary-border-hover); +} + +.btn-check:focus + .btn-secondary, .btn-secondary:focus { + color: var(--btcpay-secondary-text-hover); + background-color: var(--btcpay-secondary-bg-hover); + border-color: var(--btcpay-secondary-border-hover); + box-shadow: 0 0 0 2px var(--btcpay-secondary-shadow); +} + +.btn-check:checked + .btn-secondary, +.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, +.show > .btn-secondary.dropdown-toggle { + color: var(--btcpay-secondary-text-active); + background-color: var(--btcpay-secondary-bg-active); + border-color: var(--btcpay-secondary-border-active); +} + +.btn-check:checked + .btn-secondary:focus, +.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 2px var(--btcpay-secondary-shadow); +} + +.btn-secondary:disabled, .btn-secondary.disabled { + color: var(--btcpay-secondary-text); + background-color: var(--btcpay-secondary); + border-color: var(--btcpay-secondary-border); +} + +.btn-success { + color: var(--btcpay-success-text); + background-color: var(--btcpay-success); + border-color: var(--btcpay-success-border); +} + +.btn-success:hover { + color: var(--btcpay-success-text-hover); + background-color: var(--btcpay-success-bg-hover); + border-color: var(--btcpay-success-border-hover); +} + +.btn-check:focus + .btn-success, .btn-success:focus { + color: var(--btcpay-success-text-hover); + background-color: var(--btcpay-success-bg-hover); + border-color: var(--btcpay-success-border-hover); + box-shadow: 0 0 0 2px var(--btcpay-success-shadow); +} + +.btn-check:checked + .btn-success, +.btn-check:active + .btn-success, .btn-success:active, .btn-success.active, +.show > .btn-success.dropdown-toggle { + color: var(--btcpay-success-text-active); + background-color: var(--btcpay-success-bg-active); + border-color: var(--btcpay-success-border-active); +} + +.btn-check:checked + .btn-success:focus, +.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 2px var(--btcpay-success-shadow); +} + +.btn-success:disabled, .btn-success.disabled { + color: var(--btcpay-success-text); + background-color: var(--btcpay-success); + border-color: var(--btcpay-success-border); +} + +.btn-info { + color: var(--btcpay-info-text); + background-color: var(--btcpay-info); + border-color: var(--btcpay-info-border); +} + +.btn-info:hover { + color: var(--btcpay-info-text-hover); + background-color: var(--btcpay-info-bg-hover); + border-color: var(--btcpay-info-border-hover); +} + +.btn-check:focus + .btn-info, .btn-info:focus { + color: var(--btcpay-info-text-hover); + background-color: var(--btcpay-info-bg-hover); + border-color: var(--btcpay-info-border-hover); + box-shadow: 0 0 0 2px var(--btcpay-info-shadow); +} + +.btn-check:checked + .btn-info, +.btn-check:active + .btn-info, .btn-info:active, .btn-info.active, +.show > .btn-info.dropdown-toggle { + color: var(--btcpay-info-text-active); + background-color: var(--btcpay-info-bg-active); + border-color: var(--btcpay-info-border-hover); +} + +.btn-check:checked + .btn-info:focus, +.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 2px var(--btcpay-info-shadow); +} + +.btn-info:disabled, .btn-info.disabled { + color: var(--btcpay-info-text); + background-color: var(--btcpay-info); + border-color: var(--btcpay-info-border); +} + +.btn-warning { + color: var(--btcpay-warning-text); + background-color: var(--btcpay-warning); + border-color: var(--btcpay-warning-border); +} + +.btn-warning:hover { + color: var(--btcpay-warning-text-hover); + background-color: var(--btcpay-warning-bg-hover); + border-color: var(--btcpay-warning-border-hover); +} + +.btn-check:focus + .btn-warning, .btn-warning:focus { + color: var(--btcpay-warning-text-hover); + background-color: var(--btcpay-warning-bg-hover); + border-color: var(--btcpay-warning-border-hover); + box-shadow: 0 0 0 2px var(--btcpay-warning-shadow); +} + +.btn-check:checked + .btn-warning, +.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, +.show > .btn-warning.dropdown-toggle { + color: var(--btcpay-warning-text-active); + background-color: var(--btcpay-warning-bg-active); + border-color: var(--btcpay-warning-border-hover); +} + +.btn-check:checked + .btn-warning:focus, +.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 2px var(--btcpay-warning-shadow); +} + +.btn-warning:disabled, .btn-warning.disabled { + color: var(--btcpay-warning-text); + background-color: var(--btcpay-warning); + border-color: var(--btcpay-warning-border); +} + +.btn-danger { + color: var(--btcpay-danger-text); + background-color: var(--btcpay-danger); + border-color: var(--btcpay-danger-border); +} + +.btn-danger:hover { + color: var(--btcpay-danger-text-hover); + background-color: var(--btcpay-danger-bg-hover); + border-color: var(--btcpay-danger-border-hover); +} + +.btn-check:focus + .btn-danger, .btn-danger:focus { + color: var(--btcpay-danger-text-hover); + background-color: var(--btcpay-danger-bg-hover); + border-color: var(--btcpay-danger-border-hover); + box-shadow: 0 0 0 2px var(--btcpay-danger-shadow); +} + +.btn-check:checked + .btn-danger, +.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, +.show > .btn-danger.dropdown-toggle { + color: var(--btcpay-danger-text-active); + background-color: var(--btcpay-danger-bg-active); + border-color: var(--btcpay-danger-border-active); +} + +.btn-check:checked + .btn-danger:focus, +.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 2px var(--btcpay-danger-shadow); +} + +.btn-danger:disabled, .btn-danger.disabled { + color: var(--btcpay-danger-text); + background-color: var(--btcpay-danger); + border-color: var(--btcpay-danger-border); +} + +.btn-light { + color: var(--btcpay-light-text); + background-color: var(--btcpay-light); + border-color: var(--btcpay-light-border); +} + +.btn-light:hover { + color: var(--btcpay-light-text-hover); + background-color: var(--btcpay-light-bg-hover); + border-color: var(--btcpay-light-border-hover); +} + +.btn-check:focus + .btn-light, .btn-light:focus { + color: var(--btcpay-light-text-hover); + background-color: var(--btcpay-light-bg-hover); + border-color: var(--btcpay-light-border-hover); + box-shadow: 0 0 0 2px var(--btcpay-light-shadow); +} + +.btn-check:checked + .btn-light, +.btn-check:active + .btn-light, .btn-light:active, .btn-light.active, +.show > .btn-light.dropdown-toggle { + color: var(--btcpay-light-text-active); + background-color: var(--btcpay-light-bg-active); + border-color: var(--btcpay-light-border-hover); +} + +.btn-check:checked + .btn-light:focus, +.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 2px var(--btcpay-light-shadow); +} + +.btn-light:disabled, .btn-light.disabled { + color: var(--btcpay-light-text); + background-color: var(--btcpay-light); + border-color: var(--btcpay-light-border); +} + +.btn-dark { + color: var(--btcpay-dark-text); + background-color: var(--btcpay-dark); + border-color: var(--btcpay-dark-border); +} + +.btn-dark:hover { + color: var(--btcpay-dark-text-hover); + background-color: var(--btcpay-dark-bg-hover); + border-color: var(--btcpay-dark-border-hover); +} + +.btn-check:focus + .btn-dark, .btn-dark:focus { + color: var(--btcpay-dark-text-hover); + background-color: var(--btcpay-dark-bg-hover); + border-color: var(--btcpay-dark-border-hover); + box-shadow: 0 0 0 2px var(--btcpay-dark-shadow); +} + +.btn-check:checked + .btn-dark, +.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, +.show > .btn-dark.dropdown-toggle { + color: var(--btcpay-dark-text-active); + background-color: var(--btcpay-dark-bg-active); + border-color: var(--btcpay-dark-border-active); +} + +.btn-check:checked + .btn-dark:focus, +.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 2px var(--btcpay-dark-shadow); +} + +.btn-dark:disabled, .btn-dark.disabled { + color: var(--btcpay-dark-text); + background-color: var(--btcpay-dark); + border-color: var(--btcpay-dark-border); +} + +.btn-outline-primary { + color: var(--btcpay-primary); + border-color: var(--btcpay-primary-border); +} + +.btn-outline-primary:hover { + color: var(--btcpay-primary-text); + background-color: var(--btcpay-primary); + border-color: var(--btcpay-primary-border); +} + +.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-primary-rgb), 0.5); +} + +.btn-check:checked + .btn-outline-primary, +.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show { + color: var(--btcpay-primary-text); + background-color: var(--btcpay-primary); + border-color: var(--btcpay-primary-border); +} + +.btn-check:checked + .btn-outline-primary:focus, +.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-primary-rgb), 0.5); +} + +.btn-outline-primary:disabled, .btn-outline-primary.disabled { + color: var(--btcpay-primary); + background-color: transparent; +} + +.btn-outline-secondary { + color: var(--btcpay-secondary); + border-color: var(--btcpay-secondary-border); +} + +.btn-outline-secondary:hover { + color: var(--btcpay-secondary-text); + background-color: var(--btcpay-secondary); + border-color: var(--btcpay-secondary-border); +} + +.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-secondary-rgb), 0.5); +} + +.btn-check:checked + .btn-outline-secondary, +.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { + color: var(--btcpay-secondary-text); + background-color: var(--btcpay-secondary); + border-color: var(--btcpay-secondary-border); +} + +.btn-check:checked + .btn-outline-secondary:focus, +.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-secondary-rgb), 0.5); +} + +.btn-outline-secondary:disabled, .btn-outline-secondary.disabled { + color: var(--btcpay-secondary); + background-color: transparent; +} + +.btn-outline-success { + color: var(--btcpay-success); + border-color: var(--btcpay-success-border); +} + +.btn-outline-success:hover { + color: var(--btcpay-success-text); + background-color: var(--btcpay-success); + border-color: var(--btcpay-success-border); +} + +.btn-check:focus + .btn-outline-success, .btn-outline-success:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-success-rgb), 0.5); +} + +.btn-check:checked + .btn-outline-success, +.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show { + color: var(--btcpay-success-text); + background-color: var(--btcpay-success); + border-color: var(--btcpay-success-border); +} + +.btn-check:checked + .btn-outline-success:focus, +.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-success-rgb), 0.5); +} + +.btn-outline-success:disabled, .btn-outline-success.disabled { + color: var(--btcpay-success); + background-color: transparent; +} + +.btn-outline-info { + color: var(--btcpay-info); + border-color: var(--btcpay-info-border); +} + +.btn-outline-info:hover { + color: var(--btcpay-info-text); + background-color: var(--btcpay-info); + border-color: var(--btcpay-info-border); +} + +.btn-check:focus + .btn-outline-info, .btn-outline-info:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-info-rgb), 0.5); +} + +.btn-check:checked + .btn-outline-info, +.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show { + color: var(--btcpay-info-text); + background-color: var(--btcpay-info); + border-color: var(--btcpay-info-border); +} + +.btn-check:checked + .btn-outline-info:focus, +.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-info-rgb), 0.5); +} + +.btn-outline-info:disabled, .btn-outline-info.disabled { + color: var(--btcpay-info); + background-color: transparent; +} + +.btn-outline-warning { + color: var(--btcpay-warning); + border-color: var(--btcpay-warning-border); +} + +.btn-outline-warning:hover { + color: var(--btcpay-warning-text); + background-color: var(--btcpay-warning); + border-color: var(--btcpay-warning-border); +} + +.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-warning-rgb), 0.5); +} + +.btn-check:checked + .btn-outline-warning, +.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show { + color: var(--btcpay-warning-text); + background-color: var(--btcpay-warning); + border-color: var(--btcpay-warning-border); +} + +.btn-check:checked + .btn-outline-warning:focus, +.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-warning-rgb), 0.5); +} + +.btn-outline-warning:disabled, .btn-outline-warning.disabled { + color: var(--btcpay-warning); + background-color: transparent; +} + +.btn-outline-danger { + color: var(--btcpay-danger); + border-color: var(--btcpay-danger-border); +} + +.btn-outline-danger:hover { + color: var(--btcpay-danger-text); + background-color: var(--btcpay-danger); + border-color: var(--btcpay-danger-border); +} + +.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-danger-rgb), 0.5); +} + +.btn-check:checked + .btn-outline-danger, +.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show { + color: var(--btcpay-danger-text); + background-color: var(--btcpay-danger); + border-color: var(--btcpay-danger-border); +} + +.btn-check:checked + .btn-outline-danger:focus, +.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-danger-rgb), 0.5); +} + +.btn-outline-danger:disabled, .btn-outline-danger.disabled { + color: var(--btcpay-danger); + background-color: transparent; +} + +.btn-outline-light { + color: var(--btcpay-light); + border-color: var(--btcpay-light-border); +} + +.btn-outline-light:hover { + color: var(--btcpay-light-text); + background-color: var(--btcpay-light); + border-color: var(--btcpay-light-border); +} + +.btn-check:focus + .btn-outline-light, .btn-outline-light:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-light-rgb), 0.5); +} + +.btn-check:checked + .btn-outline-light, +.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show { + color: var(--btcpay-light-text); + background-color: var(--btcpay-light); + border-color: var(--btcpay-light-border); +} + +.btn-check:checked + .btn-outline-light:focus, +.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-light-rgb), 0.5); +} + +.btn-outline-light:disabled, .btn-outline-light.disabled { + color: var(--btcpay-light); + background-color: transparent; +} + +.btn-outline-dark { + color: var(--btcpay-dark); + border-color: var(--btcpay-dark-border); +} + +.btn-outline-dark:hover { + color: var(--btcpay-dark-text); + background-color: var(--btcpay-dark); + border-color: var(--btcpay-dark-border); +} + +.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-dark-rgb), 0.5); +} + +.btn-check:checked + .btn-outline-dark, +.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show { + color: var(--btcpay-dark-text); + background-color: var(--btcpay-dark); + border-color: var(--btcpay-dark-border); +} + +.btn-check:checked + .btn-outline-dark:focus, +.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus { + box-shadow: 0 0 0 2px rgba(var(--btcpay-dark-rgb), 0.5); +} + +.btn-outline-dark:disabled, .btn-outline-dark.disabled { + color: var(--btcpay-dark); + background-color: transparent; +} + +.btn-link { + font-weight: var(--btcpay-font-weight-normal); + color: var(--btcpay-body-link); + text-decoration: none; +} + +.btn-link:hover { + color: var(--btcpay-body-link-accent); + text-decoration: none; +} + +.btn-link:focus { + text-decoration: none; +} + +.btn-link:disabled, .btn-link.disabled { + color: var(--btcpay-body-text-muted); +} + +.btn-lg, .btn-group-lg > .btn { + padding: 1rem 2rem; + font-size: 1rem; + border-radius: var(--btcpay-border-radius-l); +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.5rem 1.5rem; + font-size: 0.75rem; + border-radius: 0.2rem; +} + +.fade { + transition: opacity 0.15s linear; +} + +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +.collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} + +.dropup, +.dropend, +.dropdown, +.dropstart { + 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; + z-index: 1000; + display: none; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0; + font-size: 0.875rem; + color: var(--btcpay-body-text); + text-align: left; + list-style: none; + background-color: var(--btcpay-body-bg); + background-clip: padding-box; + border: 1px solid var(--btcpay-body-border-medium); + border-radius: var(--btcpay-border-radius); +} + +.dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: 0.125rem; +} + +.dropdown-menu-start { + --bs-position: start; +} + +.dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.dropdown-menu-end { + --bs-position: end; +} + +.dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; + } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-sm-end { + --bs-position: end; + } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; + } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-md-end { + --bs-position: end; + } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; + } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-lg-end { + --bs-position: end; + } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; + } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xl-end { + --bs-position: end; + } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; + } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xxl-end { + --bs-position: end; + } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} + +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 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; +} + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} + +.dropend .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; +} + +.dropend .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} + +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.dropstart .dropdown-toggle::after { + display: none; +} + +.dropstart .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; +} + +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid var(--btcpay-body-border-medium); +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1rem; + clear: both; + font-weight: var(--btcpay-font-weight-normal); + color: var(--btcpay-body-text); + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.dropdown-item:hover, .dropdown-item:focus { + color: var(--btcpay-body-text); + background-color: var(--btcpay-body-bg-hover); +} + +.dropdown-item.active, .dropdown-item:active { + color: var(--btcpay-body-text-active); + text-decoration: none; + background-color: var(--btcpay-body-bg-active); +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: var(--btcpay-body-text-muted); + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 0.75rem; + color: var(--btcpay-secondary); + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1rem; + color: var(--btcpay-body-text); +} + +.dropdown-menu-dark { + color: var(--btcpay-white); + background-color: var(--btcpay-bg-tile); + border-color: var(--btcpay-neutral-900); +} + +.dropdown-menu-dark .dropdown-item { + color: var(--btcpay-white); +} + +.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus { + color: var(--btcpay-white); + background-color: rgba(255, 255, 255, 0.15); +} + +.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active { + color: var(--btcpay-body-text-active); + background-color: var(--btcpay-body-bg-active); +} + +.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled { + color: var(--btcpay-body-text-muted); +} + +.dropdown-menu-dark .dropdown-divider { + border-color: var(--btcpay-body-border-medium); +} + +.dropdown-menu-dark .dropdown-item-text { + color: var(--btcpay-white); +} + +.dropdown-menu-dark .dropdown-header { + color: var(--btcpay-neutral-500); +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} + +.btn-group > .btn-check:checked + .btn, +.btn-group > .btn-check:focus + .btn, +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn-check:checked + .btn, +.btn-group-vertical > .btn-check:focus + .btn, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + 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:nth-child(n + 3), +.btn-group > :not(.btn-check) + .btn, +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 1.125rem; + padding-left: 1.125rem; +} + +.dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after, +.dropend .dropdown-toggle-split::after { + margin-left: 0; +} + +.dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 1.125rem; + padding-left: 1.125rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 1.5rem; + padding-left: 1.5rem; +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn: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 ~ .btn, +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; + color: var(--btcpay-nav-link); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} + +.nav-link:hover, .nav-link:focus { + color: var(--btcpay-nav-link-accent); +} + +.nav-link.disabled { + color: var(--btcpay-body-text-muted); + pointer-events: none; + cursor: default; +} + +.nav-tabs { + border-bottom: 1px solid var(--btcpay-body-border-medium); +} + +.nav-tabs .nav-link { + margin-bottom: -1px; + background: none; + border: 1px solid transparent; + border-top-left-radius: var(--btcpay-border-radius); + border-top-right-radius: var(--btcpay-border-radius); +} + +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: var(--btcpay-body-border-medium); + isolation: isolate; +} + +.nav-tabs .nav-link.disabled { + color: var(--btcpay-body-text-muted); + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: var(--btcpay-body-text-active); + background-color: var(--btcpay-body-bg-active); + border-color: var(--btcpay-body-border-medium); +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills .nav-link { + background: none; + border: 0; + border-radius: var(--btcpay-border-radius); +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: var(--btcpay-white); + background-color: var(--btcpay-primary); +} + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding-top: 1rem; + padding-bottom: 1rem; +} + +.navbar > .container, +.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} + +.navbar-brand { + padding-top: 0.4rem; + padding-bottom: 0.4rem; + margin-right: 1rem; + font-size: 1rem; + white-space: nowrap; +} + +.navbar-nav { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} + +.navbar-nav .dropdown-menu { + position: static; +} + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: var(--btcpay-border-radius); + transition: box-shadow 0.15s ease-in-out; +} + +.navbar-toggler:hover { + text-decoration: none; +} + +.navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 2px; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.navbar-nav-scroll { + max-height: var(--btcpay-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } + .navbar-expand-sm .offcanvas-header { + display: none; + } + .navbar-expand-sm .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; + } + .navbar-expand-sm .offcanvas-top, + .navbar-expand-sm .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } + .navbar-expand-md .offcanvas-header { + display: none; + } + .navbar-expand-md .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; + } + .navbar-expand-md .offcanvas-top, + .navbar-expand-md .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } + .navbar-expand-lg .offcanvas-header { + display: none; + } + .navbar-expand-lg .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; + } + .navbar-expand-lg .offcanvas-top, + .navbar-expand-lg .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } + .navbar-expand-xl .offcanvas-header { + display: none; + } + .navbar-expand-xl .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; + } + .navbar-expand-xl .offcanvas-top, + .navbar-expand-xl .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xxl .navbar-toggler { + display: none; + } + .navbar-expand-xxl .offcanvas-header { + display: none; + } + .navbar-expand-xxl .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; + } + .navbar-expand-xxl .offcanvas-top, + .navbar-expand-xxl .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; + } + .navbar-expand-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} + +.navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} + +.navbar-expand .navbar-nav { + flex-direction: row; +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} + +.navbar-expand .navbar-nav-scroll { + overflow: visible; +} + +.navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} + +.navbar-expand .navbar-toggler { + display: none; +} + +.navbar-expand .offcanvas-header { + display: none; +} + +.navbar-expand .offcanvas { + position: inherit; + bottom: 0; + z-index: 1000; + flex-grow: 1; + visibility: visible !important; + background-color: transparent; + border-right: 0; + border-left: 0; + transition: none; + transform: none; +} + +.navbar-expand .offcanvas-top, +.navbar-expand .offcanvas-bottom { + height: auto; + border-top: 0; + border-bottom: 0; +} + +.navbar-expand .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 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.55); +} + +.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 .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.55); + 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' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.55); +} + +.navbar-light .navbar-text a, +.navbar-light .navbar-text a:hover, +.navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-brand { + color: var(--btcpay-white); +} + +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: var(--btcpay-white); +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.55); +} + +.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 .nav-link.active { + color: var(--btcpay-white); +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.55); + 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' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.55); +} + +.navbar-dark .navbar-text a, +.navbar-dark .navbar-text a:hover, +.navbar-dark .navbar-text a:focus { + color: var(--btcpay-white); +} + +.card { + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: var(--btcpay-bg-tile); + background-clip: border-box; + border: 1px solid var(--btcpay-body-border-medium); + border-radius: 8px; +} + +.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: 7px; + border-top-right-radius: 7px; +} + +.card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: 7px; + border-bottom-left-radius: 7px; +} + +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} + +.card-body { + flex: 1 1 auto; + padding: 1rem 1rem; + color: var(--btcpay-body-text); +} + +.card-title { + margin-bottom: 0.5rem; +} + +.card-subtitle { + margin-top: -0.25rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link + .card-link { + margin-left: 1rem; +} + +.card-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + color: var(--btcpay-body-text); + background-color: var(--btcpay-body-bg-light); + border-bottom: 1px solid var(--btcpay-body-border-medium); +} + +.card-header:first-child { + border-radius: 7px 7px 0 0; +} + +.card-footer { + padding: 0.5rem 1rem; + color: var(--btcpay-body-text); + background-color: var(--btcpay-body-bg-light); + border-top: 1px solid var(--btcpay-body-border-medium); +} + +.card-footer:last-child { + border-radius: 0 0 7px 7px; +} + +.card-header-tabs { + margin-right: -0.5rem; + margin-bottom: -0.5rem; + margin-left: -0.5rem; + border-bottom: 0; +} + +.card-header-tabs .nav-link.active { + background-color: var(--btcpay-bg-tile); + border-bottom-color: var(--btcpay-bg-tile); +} + +.card-header-pills { + margin-right: -0.5rem; + margin-left: -0.5rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1rem; + border-radius: 7px; +} + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; +} + +.card-img, +.card-img-top { + border-top-left-radius: 7px; + border-top-right-radius: 7px; +} + +.card-img, +.card-img-bottom { + border-bottom-right-radius: 7px; + border-bottom-left-radius: 7px; +} + +.card-group > .card { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; + } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-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; + } +} + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: 1.5rem 0; + font-size: 0.875rem; + color: var(--btcpay-body-text); + text-align: left; + background-color: transparent; + border: 0; + border-radius: 0; + overflow-anchor: none; + 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, border-radius 0.15s ease; +} + +.accordion-button:not(.collapsed) { + color: var(--btcpay-body-text); + background-color: transparent; + box-shadow: inset 0 0 0 transparent; +} + +.accordion-button:not(.collapsed)::after { + background-image: none; + transform: rotate(-180deg); +} + +.accordion-button::after { + flex-shrink: 0; + width: 1.25rem; + height: 1.25rem; + margin-left: auto; + content: ""; + background-image: none; + background-repeat: no-repeat; + background-size: 1.25rem; + transition: transform 0.2s ease-in-out; +} + +.accordion-button:hover { + z-index: 2; +} + +.accordion-button:focus { + z-index: 3; + border-color: transparent; + outline: 0; + box-shadow: none; +} + +.accordion-header { + margin-bottom: 0; +} + +.accordion-item { + background-color: transparent; + border: 0 solid transparent; +} + +.accordion-item:first-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.accordion-item:first-of-type .accordion-button { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.accordion-item:not(:first-of-type) { + border-top: 0; +} + +.accordion-item:last-of-type { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.accordion-body { + padding: 1rem 0; +} + +.accordion-flush .accordion-collapse { + border-width: 0; +} + +.accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.accordion-flush .accordion-item:first-child { + border-top: 0; +} + +.accordion-flush .accordion-item:last-child { + border-bottom: 0; +} + +.accordion-flush .accordion-item .accordion-button { + border-radius: 0; +} + +.breadcrumb { + display: flex; + flex-wrap: wrap; + padding: 0 0; + margin-bottom: 1rem; + list-style: none; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} + +.breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: 0.5rem; + color: var(--btcpay-secondary); + content: var(--btcpay-breadcrumb-divider, "/") /* rtl: var(--btcpay-breadcrumb-divider, "/") */; +} + +.breadcrumb-item.active { + color: var(--btcpay-secondary); +} + +.pagination { + display: flex; + padding-left: 0; + list-style: none; +} + +.page-link { + position: relative; + display: block; + color: var(--btcpay-body-link); + background-color: var(--btcpay-body-bg-light); + border: 1px solid var(--btcpay-body-border-light); + 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; +} + +.page-link:hover { + z-index: 2; + color: var(--btcpay-body-link); + background-color: var(--btcpay-body-bg-hover); + border-color: var(--btcpay-body-border-light); +} + +.page-link:focus { + z-index: 3; + color: var(--btcpay-body-link); + background-color: var(--btcpay-body-bg-hover); + outline: 0; + box-shadow: 0 0 0 2px var(--btcpay-body-shadow); +} + +.page-item:not(:first-child) .page-link { + margin-left: -1px; +} + +.page-item.active .page-link { + z-index: 3; + color: var(--btcpay-body-text-active); + background-color: var(--btcpay-body-bg-active); + border-color: var(--btcpay-body-border-medium); +} + +.page-item.disabled .page-link { + color: var(--btcpay-body-text-muted); + pointer-events: none; + background-color: var(--btcpay-body-bg-light); + border-color: var(--btcpay-body-border-light); +} + +.page-link { + padding: 0.375rem 0.75rem; +} + +.page-item:first-child .page-link { + border-top-left-radius: var(--btcpay-border-radius); + border-bottom-left-radius: var(--btcpay-border-radius); +} + +.page-item:last-child .page-link { + border-top-right-radius: var(--btcpay-border-radius); + border-bottom-right-radius: var(--btcpay-border-radius); +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1rem; +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: var(--btcpay-border-radius-l); + border-bottom-left-radius: var(--btcpay-border-radius-l); +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: var(--btcpay-border-radius-l); + border-bottom-right-radius: var(--btcpay-border-radius-l); +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.75rem; +} + +.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.5em 0.75em; + font-size: 0.75em; + font-weight: var(--btcpay-font-weight-semibold); + line-height: 1; + color: var(--btcpay-white); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--btcpay-border-radius); +} + +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.alert { + position: relative; + padding: 1rem 1rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: var(--btcpay-border-radius); +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: var(--btcpay-font-weight-normal); +} + +.alert-dismissible { + padding-right: 3rem; +} + +.alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.alert-primary { + color: var(--btcpay-primary-text); + background-color: var(--btcpay-primary); + border-color: var(--btcpay-primary-border); +} + +.alert-primary .alert-link { + color: inherit; +} + +.alert-secondary { + color: var(--btcpay-secondary-text); + background-color: var(--btcpay-secondary); + border-color: var(--btcpay-secondary-border); +} + +.alert-secondary .alert-link { + color: inherit; +} + +.alert-success { + color: var(--btcpay-success-text); + background-color: var(--btcpay-success); + border-color: var(--btcpay-success-border); +} + +.alert-success .alert-link { + color: inherit; +} + +.alert-info { + color: var(--btcpay-info-text); + background-color: var(--btcpay-info); + border-color: var(--btcpay-info-border); +} + +.alert-info .alert-link { + color: inherit; +} + +.alert-warning { + color: var(--btcpay-warning-text); + background-color: var(--btcpay-warning); + border-color: var(--btcpay-warning-border); +} + +.alert-warning .alert-link { + color: inherit; +} + +.alert-danger { + color: var(--btcpay-danger-text); + background-color: var(--btcpay-danger); + border-color: var(--btcpay-danger-border); +} + +.alert-danger .alert-link { + color: inherit; +} + +.alert-light { + color: var(--btcpay-light-text); + background-color: var(--btcpay-light); + border-color: var(--btcpay-light-border); +} + +.alert-light .alert-link { + color: inherit; +} + +.alert-dark { + color: var(--btcpay-dark-text); + background-color: var(--btcpay-dark); + border-color: var(--btcpay-dark-border); +} + +.alert-dark .alert-link { + color: inherit; +} + +@-webkit-keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} + +.progress { + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.65625rem; + background-color: var(--btcpay-neutral-200); + border-radius: var(--btcpay-border-radius); +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--btcpay-white); + text-align: center; + white-space: nowrap; + background-color: var(--btcpay-primary); + transition: width 0.6s ease; +} + +.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: 1s linear infinite progress-bar-stripes; + animation: 1s linear infinite progress-bar-stripes; +} + +.list-group { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--btcpay-border-radius); +} + +.list-group-numbered { + list-style-type: none; + counter-reset: section; +} + +.list-group-numbered > li::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.list-group-item-action { + width: 100%; + color: var(--btcpay-body-text); + text-align: inherit; +} + +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: var(--btcpay-body-text); + text-decoration: none; + background-color: var(--btcpay-body-bg-hover); +} + +.list-group-item-action:active { + color: var(--btcpay-body-text); + background-color: var(--btcpay-body-bg-medium); +} + +.list-group-item { + position: relative; + display: block; + padding: 0.5rem 1rem; + color: var(--btcpay-body-text); + background-color: var(--btcpay-body-bg); + border: 1px solid var(--btcpay-body-border-medium); +} + +.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: var(--btcpay-body-text-muted); + pointer-events: none; + background-color: var(--btcpay-body-bg); +} + +.list-group-item.active { + z-index: 2; + color: var(--btcpay-body-text); + background-color: var(--btcpay-body-bg-medium); + border-color: var(--btcpay-body-border-medium); +} + +.list-group-item + .list-group-item { + border-top-width: 0; +} + +.list-group-item + .list-group-item.active { + margin-top: -1px; + border-top-width: 1px; +} + +.list-group-horizontal { + flex-direction: row; +} + +.list-group-horizontal > .list-group-item:first-child { + border-bottom-left-radius: var(--btcpay-border-radius); + border-top-right-radius: 0; +} + +.list-group-horizontal > .list-group-item:last-child { + border-top-right-radius: var(--btcpay-border-radius); + border-bottom-left-radius: 0; +} + +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} + +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; +} + +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item:first-child { + border-bottom-left-radius: var(--btcpay-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-sm > .list-group-item:last-child { + border-top-right-radius: var(--btcpay-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item:first-child { + border-bottom-left-radius: var(--btcpay-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-md > .list-group-item:last-child { + border-top-right-radius: var(--btcpay-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item:first-child { + border-bottom-left-radius: var(--btcpay-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-lg > .list-group-item:last-child { + border-top-right-radius: var(--btcpay-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item:first-child { + border-bottom-left-radius: var(--btcpay-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-xl > .list-group-item:last-child { + border-top-right-radius: var(--btcpay-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; + } + .list-group-horizontal-xxl > .list-group-item:first-child { + border-bottom-left-radius: var(--btcpay-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item:last-child { + border-top-right-radius: var(--btcpay-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +.list-group-flush { + border-radius: 0; +} + +.list-group-flush > .list-group-item { + border-width: 0 0 1px; +} + +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + color: var(--btcpay-primary-dim-text); + background-color: var(--btcpay-primary-dim-bg); +} + +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: var(--btcpay-primary-dim-text); + background-color: var(--btcpay-primary-dim-bg-hover); +} + +.list-group-item-primary.list-group-item-action.active { + color: var(--btcpay-primary-dim-text-active); + background-color: var(--btcpay-primary-dim-bg-active); + border-color: var(--btcpay-primary-dim-border-active); +} + +.list-group-item-secondary { + color: var(--btcpay-secondary-dim-text); + background-color: var(--btcpay-secondary-dim-bg); +} + +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: var(--btcpay-secondary-dim-text); + background-color: var(--btcpay-secondary-dim-bg-hover); +} + +.list-group-item-secondary.list-group-item-action.active { + color: var(--btcpay-secondary-dim-text-active); + background-color: var(--btcpay-secondary-dim-bg-active); + border-color: var(--btcpay-secondary-dim-border-active); +} + +.list-group-item-success { + color: var(--btcpay-success-dim-text); + background-color: var(--btcpay-success-dim-bg); +} + +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: var(--btcpay-success-dim-text); + background-color: var(--btcpay-success-dim-bg-hover); +} + +.list-group-item-success.list-group-item-action.active { + color: var(--btcpay-success-dim-text-active); + background-color: var(--btcpay-success-dim-bg-active); + border-color: var(--btcpay-success-dim-border-active); +} + +.list-group-item-info { + color: var(--btcpay-info-dim-text); + background-color: var(--btcpay-info-dim-bg); +} + +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: var(--btcpay-info-dim-text); + background-color: var(--btcpay-info-dim-bg-hover); +} + +.list-group-item-info.list-group-item-action.active { + color: var(--btcpay-info-dim-text-active); + background-color: var(--btcpay-info-dim-bg-active); + border-color: var(--btcpay-info-dim-border-active); +} + +.list-group-item-warning { + color: var(--btcpay-warning-dim-text); + background-color: var(--btcpay-warning-dim-bg); +} + +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: var(--btcpay-warning-dim-text); + background-color: var(--btcpay-warning-dim-bg-hover); +} + +.list-group-item-warning.list-group-item-action.active { + color: var(--btcpay-warning-dim-text-active); + background-color: var(--btcpay-warning-dim-bg-active); + border-color: var(--btcpay-warning-dim-border-active); +} + +.list-group-item-danger { + color: var(--btcpay-danger-dim-text); + background-color: var(--btcpay-danger-dim-bg); +} + +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: var(--btcpay-danger-dim-text); + background-color: var(--btcpay-danger-dim-bg-hover); +} + +.list-group-item-danger.list-group-item-action.active { + color: var(--btcpay-danger-dim-text-active); + background-color: var(--btcpay-danger-dim-bg-active); + border-color: var(--btcpay-danger-dim-border-active); +} + +.list-group-item-light { + color: var(--btcpay-light-dim-text); + background-color: var(--btcpay-light-dim-bg); +} + +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: var(--btcpay-light-dim-text); + background-color: var(--btcpay-light-dim-bg-hover); +} + +.list-group-item-light.list-group-item-action.active { + color: var(--btcpay-light-dim-text-active); + background-color: var(--btcpay-light-dim-bg-active); + border-color: var(--btcpay-light-dim-border-active); +} + +.list-group-item-dark { + color: var(--btcpay-dark-dim-text); + background-color: var(--btcpay-dark-dim-bg); +} + +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: var(--btcpay-dark-dim-text); + background-color: var(--btcpay-dark-dim-bg-hover); +} + +.list-group-item-dark.list-group-item-action.active { + color: var(--btcpay-dark-dim-text-active); + background-color: var(--btcpay-dark-dim-bg-active); + border-color: var(--btcpay-dark-dim-border-active); +} + +.btn-close { + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: var(--btcpay-body-text); + background: transparent none center/1em auto no-repeat; + border: 0; + border-radius: var(--btcpay-border-radius); + opacity: 0.5; +} + +.btn-close:hover { + color: var(--btcpay-body-text); + text-decoration: none; + opacity: 0.75; +} + +.btn-close:focus { + outline: 0; + box-shadow: 0 0 0 2px rgba(var(--btcpay-primary-rgb), 0.25); + opacity: 1; +} + +.btn-close:disabled, .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: 0.25; +} + +.btn-close-white { + filter: invert(1) grayscale(100%) brightness(200%); +} + +.toast { + width: 350px; + max-width: 100%; + font-size: 0.875rem; + color: var(--btcpay-body-text); + pointer-events: auto; + background-color: var(--btcpay-bg-tile); + background-clip: padding-box; + border: 1px solid var(--btcpay-body-border-medium); + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05); + border-radius: var(--btcpay-border-radius); +} + +.toast.showing { + opacity: 0; +} + +.toast:not(.show) { + display: none; +} + +.toast-container { + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} + +.toast-container > :not(:last-child) { + margin-bottom: 0.75rem; +} + +.toast-header { + display: flex; + align-items: center; + padding: 0.5rem 0.75rem; + color: var(--btcpay-body-text-muted); + background-color: var(--btcpay-body-bg-light); + background-clip: padding-box; + border-bottom: 1px solid var(--btcpay-body-bg-light); + border-top-left-radius: calc(var(--btcpay-border-radius) - 1px); + border-top-right-radius: calc(var(--btcpay-border-radius) - 1px); +} + +.toast-header .btn-close { + margin-right: -0.375rem; + margin-left: 0.75rem; +} + +.toast-body { + padding: 0.75rem; + word-wrap: break-word; +} + +.modal { + position: fixed; + top: 0; + left: 0; + z-index: 1055; + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +.modal.fade .modal-dialog { + transition: transform 0.3s cubic-bezier(0.175, 0.855, 0.32, 1.275); + transform: translate(0, -0.5rem); +} + +.modal.show .modal-dialog { + transform: none; +} + +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.modal-dialog-scrollable { + height: calc(100% - 1rem); +} + +.modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} + +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - 1rem); +} + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--btcpay-body-text); + pointer-events: auto; + background-color: var(--btcpay-bg-tile); + background-clip: padding-box; + border: 1px solid var(--btcpay-body-border-medium); + border-radius: var(--btcpay-border-radius-l); + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + width: 100vw; + height: 100vh; + background-color: var(--btcpay-black); +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.85; +} + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid var(--btcpay-body-border-light); + border-top-left-radius: calc(var(--btcpay-border-radius-l) - 1px); + border-top-right-radius: calc(var(--btcpay-border-radius-l) - 1px); +} + +.modal-header .btn-close { + padding: 0.5rem 0.5rem; + margin: -0.5rem -0.5rem -0.5rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.6; +} + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: flex; + flex-wrap: wrap; + flex-shrink: 0; + align-items: center; + justify-content: flex-end; + padding: 0.75rem; + border-top: 1px solid var(--btcpay-body-border-light); + border-bottom-right-radius: calc(var(--btcpay-border-radius-l) - 1px); + border-bottom-left-radius: calc(var(--btcpay-border-radius-l) - 1px); +} + +.modal-footer > * { + margin: 0.25rem; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-scrollable { + height: calc(100% - 3.5rem); + } + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + max-width: 800px; + } +} + +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } +} + +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} + +.modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} + +.modal-fullscreen .modal-header { + border-radius: 0; +} + +.modal-fullscreen .modal-body { + overflow-y: auto; +} + +.modal-fullscreen .modal-footer { + border-radius: 0; +} + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } +} + +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-md-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } +} + +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } +} + +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } +} + +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-header { + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } +} + +.tooltip { + position: absolute; + z-index: 1080; + display: block; + margin: 0; + font-family: var(--btcpay-font-family-base); + font-style: normal; + font-weight: var(--btcpay-font-weight-normal); + line-height: 1.6; + 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.75rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip .tooltip-arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} + +.tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^="top"] { + padding: 0.4rem 0; +} + +.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow { + bottom: 0; +} + +.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before { + top: -1px; + border-width: 0.4rem 0.4rem 0; + border-top-color: var(--btcpay-black); +} + +.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^="right"] { + padding: 0 0.4rem; +} + +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before { + right: -1px; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: var(--btcpay-black); +} + +.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^="bottom"] { + padding: 0.4rem 0; +} + +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow { + top: 0; +} + +.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: var(--btcpay-black); +} + +.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^="left"] { + padding: 0 0.4rem; +} + +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before { + left: -1px; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: var(--btcpay-black); +} + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: var(--btcpay-white); + text-align: center; + background-color: var(--btcpay-black); + border-radius: var(--btcpay-border-radius); +} + +.popover { + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + z-index: 1070; + display: block; + max-width: 276px; + font-family: var(--btcpay-font-family-base); + font-style: normal; + font-weight: var(--btcpay-font-weight-normal); + line-height: 1.6; + 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.75rem; + word-wrap: break-word; + background-color: var(--btcpay-bg-tile); + background-clip: padding-box; + border: 1px solid var(--btcpay-body-border-medium); + border-radius: var(--btcpay-border-radius-l); +} + +.popover .popover-arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; +} + +.popover .popover-arrow::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow { + bottom: calc(-0.5rem - 1px); +} + +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: var(--btcpay-body-border-medium); +} + +.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: var(--btcpay-bg-tile); +} + +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow { + left: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} + +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: var(--btcpay-body-border-medium); +} + +.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: var(--btcpay-bg-tile); +} + +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow { + top: calc(-0.5rem - 1px); +} + +.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: var(--btcpay-body-border-medium); +} + +.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: var(--btcpay-bg-tile); +} + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f0f0f0; +} + +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow { + right: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; +} + +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: var(--btcpay-body-border-medium); +} + +.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: var(--btcpay-bg-tile); +} + +.popover-header { + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 0.875rem; + background-color: var(--btcpay-bg-tile); + border-bottom: 1px solid var(--btcpay-body-border-medium); + border-top-left-radius: calc(var(--btcpay-border-radius-l) - 1px); + border-top-right-radius: calc(var(--btcpay-border-radius-l) - 1px); +} + +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 1rem 1rem; + color: var(--btcpay-body-text); +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +/* rtl:begin:ignore */ +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); +} + +/* rtl:end:ignore */ +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} + +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: var(--btcpay-white); + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: var(--btcpay-white); + 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: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +/* rtl:options: { + "autoRename": true, + "stringMap":[ { + "name" : "prev-next", + "search" : "prev", + "replace" : "next" + } ] +} */ +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: var(--btcpay-white); + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} + +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: var(--btcpay-white); + text-align: center; +} + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} + +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: var(--btcpay-black); +} + +.carousel-dark .carousel-caption { + color: var(--btcpay-black); +} + +@-webkit-keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} + +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: -0.125em; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: 0.75s linear infinite spinner-border; + animation: 0.75s linear infinite spinner-border; +} + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: -0.125em; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: 0.75s linear infinite spinner-grow; + animation: 0.75s linear infinite spinner-grow; +} + +.spinner-grow-sm { + width: 1rem; + height: 1rem; +} + +.offcanvas { + position: fixed; + bottom: 0; + z-index: 1045; + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--btcpay-body-text); + visibility: hidden; + background-color: var(--btcpay-black); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; +} + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: var(--btcpay-black); +} + +.offcanvas-backdrop.fade { + opacity: 0; +} + +.offcanvas-backdrop.show { + opacity: 1; +} + +.offcanvas-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.5rem 0; +} + +.offcanvas-header .btn-close { + padding: 0.25rem 0; + margin-top: -0.25rem; + margin-right: 0; + margin-bottom: -0.25rem; +} + +.offcanvas-title { + margin-bottom: 0; + line-height: 1.6; +} + +.offcanvas-body { + flex-grow: 1; + padding: 0.5rem 0; + overflow-y: auto; +} + +.offcanvas-start { + top: 0; + left: 0; + width: 100vw; + border-right: 0 solid rgba(0, 0, 0, 0.2); + transform: translateX(-100%); +} + +.offcanvas-end { + top: 0; + right: 0; + width: 100vw; + border-left: 0 solid rgba(0, 0, 0, 0.2); + transform: translateX(100%); +} + +.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: auto; + max-height: 100%; + border-bottom: 0 solid rgba(0, 0, 0, 0.2); + transform: translateY(-100%); +} + +.offcanvas-bottom { + right: 0; + left: 0; + height: auto; + max-height: 100%; + border-top: 0 solid rgba(0, 0, 0, 0.2); + transform: translateY(100%); +} + +.offcanvas.show { + transform: none; +} + +.placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentColor; + opacity: 0.5; +} + +.placeholder.btn::before { + display: inline-block; + content: ""; +} + +.placeholder-xs { + min-height: .6em; +} + +.placeholder-sm { + min-height: .8em; +} + +.placeholder-lg { + min-height: 1.2em; +} + +.placeholder-glow .placeholder { + -webkit-animation: placeholder-glow 2s ease-in-out infinite; + animation: placeholder-glow 2s ease-in-out infinite; +} + +@-webkit-keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} + +.placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + -webkit-animation: placeholder-wave 2s linear infinite; + animation: placeholder-wave 2s linear infinite; +} + +@-webkit-keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} + +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.link-primary { + color: var(--btcpay-primary); +} + +.link-primary:hover, .link-primary:focus { + color: var(--btcpay-primary-text-hover); +} + +.link-secondary { + color: var(--btcpay-secondary); +} + +.link-secondary:hover, .link-secondary:focus { + color: var(--btcpay-secondary-text-hover); +} + +.link-success { + color: var(--btcpay-success); +} + +.link-success:hover, .link-success:focus { + color: var(--btcpay-success-text-hover); +} + +.link-info { + color: var(--btcpay-info); +} + +.link-info:hover, .link-info:focus { + color: var(--btcpay-info-text-hover); +} + +.link-warning { + color: var(--btcpay-warning); +} + +.link-warning:hover, .link-warning:focus { + color: var(--btcpay-warning-text-hover); +} + +.link-danger { + color: var(--btcpay-danger); +} + +.link-danger:hover, .link-danger:focus { + color: var(--btcpay-danger-text-hover); +} + +.link-light { + color: var(--btcpay-light); +} + +.link-light:hover, .link-light:focus { + color: var(--btcpay-light-text-hover); +} + +.link-dark { + color: var(--btcpay-body-text); +} + +.link-dark:hover, .link-dark:focus { + color: var(--btcpay-dark-text-hover); +} + +.ratio { + position: relative; + width: 100%; +} + +.ratio::before { + display: block; + padding-top: var(--btcpay-aspect-ratio); + content: ""; +} + +.ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ratio-1x1 { + --btcpay-aspect-ratio: 100%; +} + +.ratio-4x3 { + --btcpay-aspect-ratio: calc(3 / 4 * 100%); +} + +.ratio-16x9 { + --btcpay-aspect-ratio: calc(9 / 16 * 100%); +} + +.ratio-21x9 { + --btcpay-aspect-ratio: calc(9 / 21 * 100%); +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +@media (min-width: 768px) { + .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +@media (min-width: 992px) { + .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +@media (min-width: 1200px) { + .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +@media (min-width: 1400px) { + .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.vr { + display: inline-block; + align-self: stretch; + width: 1px; + min-height: 1em; + background-color: currentColor; + opacity: 0.25; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.float-start { + float: left !important; +} + +.float-end { + float: right !important; +} + +.float-none { + float: none !important; +} + +.opacity-0 { + opacity: 0 !important; +} + +.opacity-25 { + opacity: 0.25 !important; +} + +.opacity-50 { + opacity: 0.5 !important; +} + +.opacity-75 { + opacity: 0.75 !important; +} + +.opacity-100 { + opacity: 1 !important; +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} + +.overflow-visible { + overflow: visible !important; +} + +.overflow-scroll { + overflow: scroll !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.shadow { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05) !important; +} + +.shadow-sm { + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08) !important; +} + +.shadow-lg { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.top-0 { + top: 0 !important; +} + +.top-50 { + top: 50% !important; +} + +.top-100 { + top: 100% !important; +} + +.bottom-0 { + bottom: 0 !important; +} + +.bottom-50 { + bottom: 50% !important; +} + +.bottom-100 { + bottom: 100% !important; +} + +.start-0 { + left: 0 !important; +} + +.start-50 { + left: 50% !important; +} + +.start-100 { + left: 100% !important; +} + +.end-0 { + right: 0 !important; +} + +.end-50 { + right: 50% !important; +} + +.end-100 { + right: 100% !important; +} + +.translate-middle { + transform: translate(-50%, -50%) !important; +} + +.translate-middle-x { + transform: translateX(-50%) !important; +} + +.translate-middle-y { + transform: translateY(-50%) !important; +} + +.border { + border: 1px solid var(--btcpay-body-border-light) !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top { + border-top: 1px solid var(--btcpay-body-border-light) !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-end { + border-right: 1px solid var(--btcpay-body-border-light) !important; +} + +.border-end-0 { + border-right: 0 !important; +} + +.border-bottom { + border-bottom: 1px solid var(--btcpay-body-border-light) !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-start { + border-left: 1px solid var(--btcpay-body-border-light) !important; +} + +.border-start-0 { + border-left: 0 !important; +} + +.border-primary { + border-color: var(--btcpay-primary-border) !important; +} + +.border-secondary { + border-color: var(--btcpay-secondary-border) !important; +} + +.border-success { + border-color: var(--btcpay-success-border) !important; +} + +.border-info { + border-color: var(--btcpay-info-border) !important; +} + +.border-warning { + border-color: var(--btcpay-warning-border) !important; +} + +.border-danger { + border-color: var(--btcpay-danger-border) !important; +} + +.border-light { + border-color: var(--btcpay-light-border) !important; +} + +.border-dark { + border-color: var(--btcpay-dark-border) !important; +} + +.border-white { + border-color: var(--btcpay-white); +} + +.border-1 { + border-width: 1px !important; +} + +.border-2 { + border-width: 2px !important; +} + +.border-3 { + border-width: 3px !important; +} + +.border-4 { + border-width: 4px !important; +} + +.border-5 { + border-width: 5px !important; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.vw-100 { + width: 100vw !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.vh-100 { + height: 100vh !important; +} + +.min-vh-100 { + min-height: 100vh !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.gap-0 { + gap: 0 !important; +} + +.gap-1 { + gap: 0.25rem !important; +} + +.gap-2 { + gap: 0.5rem !important; +} + +.gap-3 { + gap: 1rem !important; +} + +.gap-4 { + gap: 1.5rem !important; +} + +.gap-5 { + gap: 3rem !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-right: 0 !important; +} + +.me-1 { + margin-right: 0.25rem !important; +} + +.me-2 { + margin-right: 0.5rem !important; +} + +.me-3 { + margin-right: 1rem !important; +} + +.me-4 { + margin-right: 1.5rem !important; +} + +.me-5 { + margin-right: 3rem !important; +} + +.me-auto { + margin-right: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-left: 0 !important; +} + +.ms-1 { + margin-left: 0.25rem !important; +} + +.ms-2 { + margin-left: 0.5rem !important; +} + +.ms-3 { + margin-left: 1rem !important; +} + +.ms-4 { + margin-left: 1.5rem !important; +} + +.ms-5 { + margin-left: 3rem !important; +} + +.ms-auto { + margin-left: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-right: 0 !important; +} + +.pe-1 { + padding-right: 0.25rem !important; +} + +.pe-2 { + padding-right: 0.5rem !important; +} + +.pe-3 { + padding-right: 1rem !important; +} + +.pe-4 { + padding-right: 1.5rem !important; +} + +.pe-5 { + padding-right: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-left: 0 !important; +} + +.ps-1 { + padding-left: 0.25rem !important; +} + +.ps-2 { + padding-left: 0.5rem !important; +} + +.ps-3 { + padding-left: 1rem !important; +} + +.ps-4 { + padding-left: 1.5rem !important; +} + +.ps-5 { + padding-left: 3rem !important; +} + +.font-monospace { + font-family: var(--btcpay-font-monospace) !important; +} + +.fs-1 { + font-size: calc(1.34375rem + 1.125vw) !important; +} + +.fs-2 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.fs-3 { + font-size: calc(1.27813rem + 0.3375vw) !important; +} + +.fs-4 { + font-size: calc(1.25625rem + 0.075vw) !important; +} + +.fs-5 { + font-size: 1.09375rem !important; +} + +.fs-6 { + font-size: 0.875rem !important; +} + +.fst-italic { + font-style: italic !important; +} + +.fst-normal { + font-style: normal !important; +} + +.fw-light { + font-weight: 300 !important; +} + +.fw-lighter { + font-weight: lighter !important; +} + +.fw-normal { + font-weight: var(--btcpay-font-weight-normal) !important; +} + +.fw-bold { + font-weight: var(--btcpay-font-weight-bold) !important; +} + +.fw-bolder { + font-weight: bolder !important; +} + +.lh-1 { + line-height: 1 !important; +} + +.lh-sm { + line-height: 1.25 !important; +} + +.lh-base { + line-height: 1.6 !important; +} + +.lh-lg { + line-height: 2 !important; +} + +.text-start { + text-align: left !important; +} + +.text-end { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-decoration-underline { + text-decoration: underline !important; +} + +.text-decoration-line-through { + text-decoration: line-through !important; +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.text-wrap { + white-space: normal !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +/* rtl:end:remove */ +.text-primary { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-primary-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-secondary { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-secondary-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-success { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-success-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-info { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-info-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-warning { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-warning-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-danger { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-danger-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-light { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-light-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-dark { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-dark-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-black { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-black-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-white { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-white-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-body { + --btcpay-text-opacity: 1; + color: rgba(var(--btcpay-body-text-rgb), var(--btcpay-text-opacity)) !important; +} + +.text-muted { + --btcpay-text-opacity: 1; + color: var(--btcpay-body-text-muted) !important; +} + +.text-black-50 { + --btcpay-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + --btcpay-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-reset { + --btcpay-text-opacity: 1; + color: inherit !important; +} + +.text-opacity-25 { + --btcpay-text-opacity: 0.25; +} + +.text-opacity-50 { + --btcpay-text-opacity: 0.5; +} + +.text-opacity-75 { + --btcpay-text-opacity: 0.75; +} + +.text-opacity-100 { + --btcpay-text-opacity: 1; +} + +.bg-primary { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-primary-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-secondary { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-secondary-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-success { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-success-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-info { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-info-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-warning { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-warning-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-danger { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-danger-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-light { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-light-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-dark { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-dark-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-black { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-black-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-white { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-white-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-body { + --btcpay-bg-opacity: 1; + background-color: rgba(var(--btcpay-body-bg-rgb), var(--btcpay-bg-opacity)) !important; +} + +.bg-transparent { + --btcpay-bg-opacity: 1; + background-color: transparent !important; +} + +.bg-opacity-10 { + --btcpay-bg-opacity: 0.1; +} + +.bg-opacity-25 { + --btcpay-bg-opacity: 0.25; +} + +.bg-opacity-50 { + --btcpay-bg-opacity: 0.5; +} + +.bg-opacity-75 { + --btcpay-bg-opacity: 0.75; +} + +.bg-opacity-100 { + --btcpay-bg-opacity: 1; +} + +.bg-gradient { + background-image: var(--btcpay-gradient) !important; +} + +.user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} + +.user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} + +.user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; +} + +.pe-none { + pointer-events: none !important; +} + +.pe-auto { + pointer-events: auto !important; +} + +.rounded { + border-radius: var(--btcpay-border-radius) !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.rounded-1 { + border-radius: 0.2rem !important; +} + +.rounded-2 { + border-radius: var(--btcpay-border-radius) !important; +} + +.rounded-3 { + border-radius: var(--btcpay-border-radius-l) !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-pill { + border-radius: 50rem !important; +} + +.rounded-top { + border-top-left-radius: var(--btcpay-border-radius) !important; + border-top-right-radius: var(--btcpay-border-radius) !important; +} + +.rounded-end { + border-top-right-radius: var(--btcpay-border-radius) !important; + border-bottom-right-radius: var(--btcpay-border-radius) !important; +} + +.rounded-bottom { + border-bottom-right-radius: var(--btcpay-border-radius) !important; + border-bottom-left-radius: var(--btcpay-border-radius) !important; +} + +.rounded-start { + border-bottom-left-radius: var(--btcpay-border-radius) !important; + border-top-left-radius: var(--btcpay-border-radius) !important; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; + } + .float-sm-end { + float: right !important; + } + .float-sm-none { + float: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-grid { + display: grid !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } + .d-sm-none { + display: none !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .gap-sm-0 { + gap: 0 !important; + } + .gap-sm-1 { + gap: 0.25rem !important; + } + .gap-sm-2 { + gap: 0.5rem !important; + } + .gap-sm-3 { + gap: 1rem !important; + } + .gap-sm-4 { + gap: 1.5rem !important; + } + .gap-sm-5 { + gap: 3rem !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } + .order-sm-first { + order: -1 !important; + } + .order-sm-0 { + order: 0 !important; + } + .order-sm-1 { + order: 1 !important; + } + .order-sm-2 { + order: 2 !important; + } + .order-sm-3 { + order: 3 !important; + } + .order-sm-4 { + order: 4 !important; + } + .order-sm-5 { + order: 5 !important; + } + .order-sm-last { + order: 6 !important; + } + .m-sm-0 { + margin: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-sm-0 { + margin-top: 0 !important; + } + .mt-sm-1 { + margin-top: 0.25rem !important; + } + .mt-sm-2 { + margin-top: 0.5rem !important; + } + .mt-sm-3 { + margin-top: 1rem !important; + } + .mt-sm-4 { + margin-top: 1.5rem !important; + } + .mt-sm-5 { + margin-top: 3rem !important; + } + .mt-sm-auto { + margin-top: auto !important; + } + .me-sm-0 { + margin-right: 0 !important; + } + .me-sm-1 { + margin-right: 0.25rem !important; + } + .me-sm-2 { + margin-right: 0.5rem !important; + } + .me-sm-3 { + margin-right: 1rem !important; + } + .me-sm-4 { + margin-right: 1.5rem !important; + } + .me-sm-5 { + margin-right: 3rem !important; + } + .me-sm-auto { + margin-right: auto !important; + } + .mb-sm-0 { + margin-bottom: 0 !important; + } + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .mb-sm-3 { + margin-bottom: 1rem !important; + } + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .mb-sm-5 { + margin-bottom: 3rem !important; + } + .mb-sm-auto { + margin-bottom: auto !important; + } + .ms-sm-0 { + margin-left: 0 !important; + } + .ms-sm-1 { + margin-left: 0.25rem !important; + } + .ms-sm-2 { + margin-left: 0.5rem !important; + } + .ms-sm-3 { + margin-left: 1rem !important; + } + .ms-sm-4 { + margin-left: 1.5rem !important; + } + .ms-sm-5 { + margin-left: 3rem !important; + } + .ms-sm-auto { + margin-left: auto !important; + } + .p-sm-0 { + padding: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-sm-0 { + padding-top: 0 !important; + } + .pt-sm-1 { + padding-top: 0.25rem !important; + } + .pt-sm-2 { + padding-top: 0.5rem !important; + } + .pt-sm-3 { + padding-top: 1rem !important; + } + .pt-sm-4 { + padding-top: 1.5rem !important; + } + .pt-sm-5 { + padding-top: 3rem !important; + } + .pe-sm-0 { + padding-right: 0 !important; + } + .pe-sm-1 { + padding-right: 0.25rem !important; + } + .pe-sm-2 { + padding-right: 0.5rem !important; + } + .pe-sm-3 { + padding-right: 1rem !important; + } + .pe-sm-4 { + padding-right: 1.5rem !important; + } + .pe-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-0 { + padding-bottom: 0 !important; + } + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .pb-sm-3 { + padding-bottom: 1rem !important; + } + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .pb-sm-5 { + padding-bottom: 3rem !important; + } + .ps-sm-0 { + padding-left: 0 !important; + } + .ps-sm-1 { + padding-left: 0.25rem !important; + } + .ps-sm-2 { + padding-left: 0.5rem !important; + } + .ps-sm-3 { + padding-left: 1rem !important; + } + .ps-sm-4 { + padding-left: 1.5rem !important; + } + .ps-sm-5 { + padding-left: 3rem !important; + } + .text-sm-start { + text-align: left !important; + } + .text-sm-end { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .float-md-start { + float: left !important; + } + .float-md-end { + float: right !important; + } + .float-md-none { + float: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-grid { + display: grid !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } + .d-md-none { + display: none !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .gap-md-0 { + gap: 0 !important; + } + .gap-md-1 { + gap: 0.25rem !important; + } + .gap-md-2 { + gap: 0.5rem !important; + } + .gap-md-3 { + gap: 1rem !important; + } + .gap-md-4 { + gap: 1.5rem !important; + } + .gap-md-5 { + gap: 3rem !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } + .order-md-first { + order: -1 !important; + } + .order-md-0 { + order: 0 !important; + } + .order-md-1 { + order: 1 !important; + } + .order-md-2 { + order: 2 !important; + } + .order-md-3 { + order: 3 !important; + } + .order-md-4 { + order: 4 !important; + } + .order-md-5 { + order: 5 !important; + } + .order-md-last { + order: 6 !important; + } + .m-md-0 { + margin: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-md-0 { + margin-top: 0 !important; + } + .mt-md-1 { + margin-top: 0.25rem !important; + } + .mt-md-2 { + margin-top: 0.5rem !important; + } + .mt-md-3 { + margin-top: 1rem !important; + } + .mt-md-4 { + margin-top: 1.5rem !important; + } + .mt-md-5 { + margin-top: 3rem !important; + } + .mt-md-auto { + margin-top: auto !important; + } + .me-md-0 { + margin-right: 0 !important; + } + .me-md-1 { + margin-right: 0.25rem !important; + } + .me-md-2 { + margin-right: 0.5rem !important; + } + .me-md-3 { + margin-right: 1rem !important; + } + .me-md-4 { + margin-right: 1.5rem !important; + } + .me-md-5 { + margin-right: 3rem !important; + } + .me-md-auto { + margin-right: auto !important; + } + .mb-md-0 { + margin-bottom: 0 !important; + } + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .mb-md-3 { + margin-bottom: 1rem !important; + } + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .mb-md-5 { + margin-bottom: 3rem !important; + } + .mb-md-auto { + margin-bottom: auto !important; + } + .ms-md-0 { + margin-left: 0 !important; + } + .ms-md-1 { + margin-left: 0.25rem !important; + } + .ms-md-2 { + margin-left: 0.5rem !important; + } + .ms-md-3 { + margin-left: 1rem !important; + } + .ms-md-4 { + margin-left: 1.5rem !important; + } + .ms-md-5 { + margin-left: 3rem !important; + } + .ms-md-auto { + margin-left: auto !important; + } + .p-md-0 { + padding: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-md-0 { + padding-top: 0 !important; + } + .pt-md-1 { + padding-top: 0.25rem !important; + } + .pt-md-2 { + padding-top: 0.5rem !important; + } + .pt-md-3 { + padding-top: 1rem !important; + } + .pt-md-4 { + padding-top: 1.5rem !important; + } + .pt-md-5 { + padding-top: 3rem !important; + } + .pe-md-0 { + padding-right: 0 !important; + } + .pe-md-1 { + padding-right: 0.25rem !important; + } + .pe-md-2 { + padding-right: 0.5rem !important; + } + .pe-md-3 { + padding-right: 1rem !important; + } + .pe-md-4 { + padding-right: 1.5rem !important; + } + .pe-md-5 { + padding-right: 3rem !important; + } + .pb-md-0 { + padding-bottom: 0 !important; + } + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .pb-md-3 { + padding-bottom: 1rem !important; + } + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .pb-md-5 { + padding-bottom: 3rem !important; + } + .ps-md-0 { + padding-left: 0 !important; + } + .ps-md-1 { + padding-left: 0.25rem !important; + } + .ps-md-2 { + padding-left: 0.5rem !important; + } + .ps-md-3 { + padding-left: 1rem !important; + } + .ps-md-4 { + padding-left: 1.5rem !important; + } + .ps-md-5 { + padding-left: 3rem !important; + } + .text-md-start { + text-align: left !important; + } + .text-md-end { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .float-lg-start { + float: left !important; + } + .float-lg-end { + float: right !important; + } + .float-lg-none { + float: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-grid { + display: grid !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } + .d-lg-none { + display: none !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .gap-lg-0 { + gap: 0 !important; + } + .gap-lg-1 { + gap: 0.25rem !important; + } + .gap-lg-2 { + gap: 0.5rem !important; + } + .gap-lg-3 { + gap: 1rem !important; + } + .gap-lg-4 { + gap: 1.5rem !important; + } + .gap-lg-5 { + gap: 3rem !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } + .order-lg-first { + order: -1 !important; + } + .order-lg-0 { + order: 0 !important; + } + .order-lg-1 { + order: 1 !important; + } + .order-lg-2 { + order: 2 !important; + } + .order-lg-3 { + order: 3 !important; + } + .order-lg-4 { + order: 4 !important; + } + .order-lg-5 { + order: 5 !important; + } + .order-lg-last { + order: 6 !important; + } + .m-lg-0 { + margin: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-lg-0 { + margin-top: 0 !important; + } + .mt-lg-1 { + margin-top: 0.25rem !important; + } + .mt-lg-2 { + margin-top: 0.5rem !important; + } + .mt-lg-3 { + margin-top: 1rem !important; + } + .mt-lg-4 { + margin-top: 1.5rem !important; + } + .mt-lg-5 { + margin-top: 3rem !important; + } + .mt-lg-auto { + margin-top: auto !important; + } + .me-lg-0 { + margin-right: 0 !important; + } + .me-lg-1 { + margin-right: 0.25rem !important; + } + .me-lg-2 { + margin-right: 0.5rem !important; + } + .me-lg-3 { + margin-right: 1rem !important; + } + .me-lg-4 { + margin-right: 1.5rem !important; + } + .me-lg-5 { + margin-right: 3rem !important; + } + .me-lg-auto { + margin-right: auto !important; + } + .mb-lg-0 { + margin-bottom: 0 !important; + } + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .mb-lg-3 { + margin-bottom: 1rem !important; + } + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .mb-lg-5 { + margin-bottom: 3rem !important; + } + .mb-lg-auto { + margin-bottom: auto !important; + } + .ms-lg-0 { + margin-left: 0 !important; + } + .ms-lg-1 { + margin-left: 0.25rem !important; + } + .ms-lg-2 { + margin-left: 0.5rem !important; + } + .ms-lg-3 { + margin-left: 1rem !important; + } + .ms-lg-4 { + margin-left: 1.5rem !important; + } + .ms-lg-5 { + margin-left: 3rem !important; + } + .ms-lg-auto { + margin-left: auto !important; + } + .p-lg-0 { + padding: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-lg-0 { + padding-top: 0 !important; + } + .pt-lg-1 { + padding-top: 0.25rem !important; + } + .pt-lg-2 { + padding-top: 0.5rem !important; + } + .pt-lg-3 { + padding-top: 1rem !important; + } + .pt-lg-4 { + padding-top: 1.5rem !important; + } + .pt-lg-5 { + padding-top: 3rem !important; + } + .pe-lg-0 { + padding-right: 0 !important; + } + .pe-lg-1 { + padding-right: 0.25rem !important; + } + .pe-lg-2 { + padding-right: 0.5rem !important; + } + .pe-lg-3 { + padding-right: 1rem !important; + } + .pe-lg-4 { + padding-right: 1.5rem !important; + } + .pe-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-0 { + padding-bottom: 0 !important; + } + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .pb-lg-3 { + padding-bottom: 1rem !important; + } + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .pb-lg-5 { + padding-bottom: 3rem !important; + } + .ps-lg-0 { + padding-left: 0 !important; + } + .ps-lg-1 { + padding-left: 0.25rem !important; + } + .ps-lg-2 { + padding-left: 0.5rem !important; + } + .ps-lg-3 { + padding-left: 1rem !important; + } + .ps-lg-4 { + padding-left: 1.5rem !important; + } + .ps-lg-5 { + padding-left: 3rem !important; + } + .text-lg-start { + text-align: left !important; + } + .text-lg-end { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; + } + .float-xl-end { + float: right !important; + } + .float-xl-none { + float: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-grid { + display: grid !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } + .d-xl-none { + display: none !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .gap-xl-0 { + gap: 0 !important; + } + .gap-xl-1 { + gap: 0.25rem !important; + } + .gap-xl-2 { + gap: 0.5rem !important; + } + .gap-xl-3 { + gap: 1rem !important; + } + .gap-xl-4 { + gap: 1.5rem !important; + } + .gap-xl-5 { + gap: 3rem !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } + .order-xl-first { + order: -1 !important; + } + .order-xl-0 { + order: 0 !important; + } + .order-xl-1 { + order: 1 !important; + } + .order-xl-2 { + order: 2 !important; + } + .order-xl-3 { + order: 3 !important; + } + .order-xl-4 { + order: 4 !important; + } + .order-xl-5 { + order: 5 !important; + } + .order-xl-last { + order: 6 !important; + } + .m-xl-0 { + margin: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xl-0 { + margin-top: 0 !important; + } + .mt-xl-1 { + margin-top: 0.25rem !important; + } + .mt-xl-2 { + margin-top: 0.5rem !important; + } + .mt-xl-3 { + margin-top: 1rem !important; + } + .mt-xl-4 { + margin-top: 1.5rem !important; + } + .mt-xl-5 { + margin-top: 3rem !important; + } + .mt-xl-auto { + margin-top: auto !important; + } + .me-xl-0 { + margin-right: 0 !important; + } + .me-xl-1 { + margin-right: 0.25rem !important; + } + .me-xl-2 { + margin-right: 0.5rem !important; + } + .me-xl-3 { + margin-right: 1rem !important; + } + .me-xl-4 { + margin-right: 1.5rem !important; + } + .me-xl-5 { + margin-right: 3rem !important; + } + .me-xl-auto { + margin-right: auto !important; + } + .mb-xl-0 { + margin-bottom: 0 !important; + } + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xl-3 { + margin-bottom: 1rem !important; + } + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xl-5 { + margin-bottom: 3rem !important; + } + .mb-xl-auto { + margin-bottom: auto !important; + } + .ms-xl-0 { + margin-left: 0 !important; + } + .ms-xl-1 { + margin-left: 0.25rem !important; + } + .ms-xl-2 { + margin-left: 0.5rem !important; + } + .ms-xl-3 { + margin-left: 1rem !important; + } + .ms-xl-4 { + margin-left: 1.5rem !important; + } + .ms-xl-5 { + margin-left: 3rem !important; + } + .ms-xl-auto { + margin-left: auto !important; + } + .p-xl-0 { + padding: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xl-0 { + padding-top: 0 !important; + } + .pt-xl-1 { + padding-top: 0.25rem !important; + } + .pt-xl-2 { + padding-top: 0.5rem !important; + } + .pt-xl-3 { + padding-top: 1rem !important; + } + .pt-xl-4 { + padding-top: 1.5rem !important; + } + .pt-xl-5 { + padding-top: 3rem !important; + } + .pe-xl-0 { + padding-right: 0 !important; + } + .pe-xl-1 { + padding-right: 0.25rem !important; + } + .pe-xl-2 { + padding-right: 0.5rem !important; + } + .pe-xl-3 { + padding-right: 1rem !important; + } + .pe-xl-4 { + padding-right: 1.5rem !important; + } + .pe-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-0 { + padding-bottom: 0 !important; + } + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xl-3 { + padding-bottom: 1rem !important; + } + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xl-5 { + padding-bottom: 3rem !important; + } + .ps-xl-0 { + padding-left: 0 !important; + } + .ps-xl-1 { + padding-left: 0.25rem !important; + } + .ps-xl-2 { + padding-left: 0.5rem !important; + } + .ps-xl-3 { + padding-left: 1rem !important; + } + .ps-xl-4 { + padding-left: 1.5rem !important; + } + .ps-xl-5 { + padding-left: 3rem !important; + } + .text-xl-start { + text-align: left !important; + } + .text-xl-end { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; + } + .float-xxl-end { + float: right !important; + } + .float-xxl-none { + float: none !important; + } + .d-xxl-inline { + display: inline !important; + } + .d-xxl-inline-block { + display: inline-block !important; + } + .d-xxl-block { + display: block !important; + } + .d-xxl-grid { + display: grid !important; + } + .d-xxl-table { + display: table !important; + } + .d-xxl-table-row { + display: table-row !important; + } + .d-xxl-table-cell { + display: table-cell !important; + } + .d-xxl-flex { + display: flex !important; + } + .d-xxl-inline-flex { + display: inline-flex !important; + } + .d-xxl-none { + display: none !important; + } + .flex-xxl-fill { + flex: 1 1 auto !important; + } + .flex-xxl-row { + flex-direction: row !important; + } + .flex-xxl-column { + flex-direction: column !important; + } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .gap-xxl-0 { + gap: 0 !important; + } + .gap-xxl-1 { + gap: 0.25rem !important; + } + .gap-xxl-2 { + gap: 0.5rem !important; + } + .gap-xxl-3 { + gap: 1rem !important; + } + .gap-xxl-4 { + gap: 1.5rem !important; + } + .gap-xxl-5 { + gap: 3rem !important; + } + .justify-content-xxl-start { + justify-content: flex-start !important; + } + .justify-content-xxl-end { + justify-content: flex-end !important; + } + .justify-content-xxl-center { + justify-content: center !important; + } + .justify-content-xxl-between { + justify-content: space-between !important; + } + .justify-content-xxl-around { + justify-content: space-around !important; + } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + .align-items-xxl-start { + align-items: flex-start !important; + } + .align-items-xxl-end { + align-items: flex-end !important; + } + .align-items-xxl-center { + align-items: center !important; + } + .align-items-xxl-baseline { + align-items: baseline !important; + } + .align-items-xxl-stretch { + align-items: stretch !important; + } + .align-content-xxl-start { + align-content: flex-start !important; + } + .align-content-xxl-end { + align-content: flex-end !important; + } + .align-content-xxl-center { + align-content: center !important; + } + .align-content-xxl-between { + align-content: space-between !important; + } + .align-content-xxl-around { + align-content: space-around !important; + } + .align-content-xxl-stretch { + align-content: stretch !important; + } + .align-self-xxl-auto { + align-self: auto !important; + } + .align-self-xxl-start { + align-self: flex-start !important; + } + .align-self-xxl-end { + align-self: flex-end !important; + } + .align-self-xxl-center { + align-self: center !important; + } + .align-self-xxl-baseline { + align-self: baseline !important; + } + .align-self-xxl-stretch { + align-self: stretch !important; + } + .order-xxl-first { + order: -1 !important; + } + .order-xxl-0 { + order: 0 !important; + } + .order-xxl-1 { + order: 1 !important; + } + .order-xxl-2 { + order: 2 !important; + } + .order-xxl-3 { + order: 3 !important; + } + .order-xxl-4 { + order: 4 !important; + } + .order-xxl-5 { + order: 5 !important; + } + .order-xxl-last { + order: 6 !important; + } + .m-xxl-0 { + margin: 0 !important; + } + .m-xxl-1 { + margin: 0.25rem !important; + } + .m-xxl-2 { + margin: 0.5rem !important; + } + .m-xxl-3 { + margin: 1rem !important; + } + .m-xxl-4 { + margin: 1.5rem !important; + } + .m-xxl-5 { + margin: 3rem !important; + } + .m-xxl-auto { + margin: auto !important; + } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xxl-0 { + margin-top: 0 !important; + } + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + .mt-xxl-3 { + margin-top: 1rem !important; + } + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + .mt-xxl-5 { + margin-top: 3rem !important; + } + .mt-xxl-auto { + margin-top: auto !important; + } + .me-xxl-0 { + margin-right: 0 !important; + } + .me-xxl-1 { + margin-right: 0.25rem !important; + } + .me-xxl-2 { + margin-right: 0.5rem !important; + } + .me-xxl-3 { + margin-right: 1rem !important; + } + .me-xxl-4 { + margin-right: 1.5rem !important; + } + .me-xxl-5 { + margin-right: 3rem !important; + } + .me-xxl-auto { + margin-right: auto !important; + } + .mb-xxl-0 { + margin-bottom: 0 !important; + } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + .mb-xxl-auto { + margin-bottom: auto !important; + } + .ms-xxl-0 { + margin-left: 0 !important; + } + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + .ms-xxl-3 { + margin-left: 1rem !important; + } + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + .ms-xxl-5 { + margin-left: 3rem !important; + } + .ms-xxl-auto { + margin-left: auto !important; + } + .p-xxl-0 { + padding: 0 !important; + } + .p-xxl-1 { + padding: 0.25rem !important; + } + .p-xxl-2 { + padding: 0.5rem !important; + } + .p-xxl-3 { + padding: 1rem !important; + } + .p-xxl-4 { + padding: 1.5rem !important; + } + .p-xxl-5 { + padding: 3rem !important; + } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xxl-0 { + padding-top: 0 !important; + } + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + .pt-xxl-3 { + padding-top: 1rem !important; + } + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + .pt-xxl-5 { + padding-top: 3rem !important; + } + .pe-xxl-0 { + padding-right: 0 !important; + } + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + .pe-xxl-3 { + padding-right: 1rem !important; + } + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + .pe-xxl-5 { + padding-right: 3rem !important; + } + .pb-xxl-0 { + padding-bottom: 0 !important; + } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + .ps-xxl-0 { + padding-left: 0 !important; + } + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + .ps-xxl-3 { + padding-left: 1rem !important; + } + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + .ps-xxl-5 { + padding-left: 3rem !important; + } + .text-xxl-start { + text-align: left !important; + } + .text-xxl-end { + text-align: right !important; + } + .text-xxl-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.1875rem !important; + } + .fs-2 { + font-size: 1.75rem !important; + } + .fs-3 { + font-size: 1.53125rem !important; + } + .fs-4 { + font-size: 1.3125rem !important; + } +} + +@media print { + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-grid { + display: grid !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: flex !important; + } + .d-print-inline-flex { + display: inline-flex !important; + } + .d-print-none { + display: none !important; + } +} + +.form-select, +.form-control { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05); +} + +.form-check-input { + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +[list] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%236E7681' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; +} + +[list]::-webkit-calendar-picker-indicator { + display: none !important; +} + +[list]::-webkit-list-button { + content: none; +} +/* Scrollbar - first works on Firefox, rest on WebKit-based browsers */ +* { + --btcpay-scrollbar-width: 0.375rem; + --btcpay-scrollbar-color: var(--btcpay-neutral-500); + --btcpay-scrollbar-bg: transparent; + scrollbar-width: var(--btcpay-scrollbar-width); + scrollbar-color: var(--btcpay-scrollbar-color) var(--btcpay-scrollbar-bg); +} + +*::-webkit-scrollbar { + width: var(--btcpay-scrollbar-width); +} + +*::-webkit-scrollbar-track { + background: var(--btcpay-scrollbar-bg); +} + +*::-webkit-scrollbar-thumb { + background-color: var(--btcpay-scrollbar-color); + border-radius: 1rem; + border: 1rem solid var(--btcpay-scrollbar-bg); +} + +html { + position: relative; + min-height: 100%; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a, +.btn-link { + transition-duration: 0.2s; + transition-property: background, color; +} + +a.nav-link { + background: var(--btcpay-nav-bg); + border-left-color: var(--btcpay-nav-border); +} + +a.nav-link:focus, +a.nav-link:hover { + text-decoration: none; + border-left-color: var(--btcpay-nav-border-hover); + background: var(--btcpay-nav-bg-hover); +} + +main p > a { + font-weight: var(--btcpay-font-weight-semibold); +} + +code { + background: var(--btcpay-code-bg); +} + +pre { + border-radius: var(--btcpay-border-radius); +} + +pre, +pre code { + background: var(--btcpay-pre-bg); +} + +pre.text-wrap, +pre:not(.text-wrap) code { + padding: var(--btcpay-space-m) !important; +} + +ol:not([class]) { + padding-left: 1.125em; +} + +ul:not([class]) { + padding-left: 1em; +} + +ul:not([class]) li { + padding-top: 0.2em; + padding-bottom: 0.2em; +} + +.text-secondary { + color: var(--btcpay-body-text-muted) !important; +} + +/* Modals */ +.modal-content { + box-shadow: 0 20px 20px rgba(0, 0, 0, .15); +} + +/* Accordion */ +.accordion-item + .accordion-item { + border-top: 1px solid var(--btcpay-body-border-light); +} + +.accordion-button::after { + content: none; +} + +.accordion-button svg.icon { + flex-shrink: 0; + width: 24px; + height: 24px; + margin-left: auto; + transition: transform 0.2s ease-in-out; +} + +.accordion-button:not(.collapsed) svg.icon { + transform: rotate(-180deg); +} + +.accordion-body { + padding-top: 0; +} + +/* Alert */ +.alert code { + color: inherit; +} + +.alert hr { + display: block; + width: unset; + height: 1px; + background: none; +} + +.alert-link { + text-decoration: underline; +} + +.alert-dismissible .btn-close { + color: inherit; + padding: 1.25rem; +} + +/* Breadcrumb */ +.breadcrumb { + background-color: transparent; + border-radius: 0; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 1rem; +} + +.breadcrumb-item + .breadcrumb-item::before { + color: var(--btcpay-neutral-600); + content: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSIxMCIgdmlld0JveD0iMCAwIDcgMTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQuMzg3MzkgNC4zMTYyOFY1LjYyMUwzLjczNDM5IDQuOTY5MjZMNC4zODczOSA0LjMxNzUxVjQuMzE2MjhaTTAuMDAxMjMxMzkgMS4zMDM0OUwxLjMwNTk5IDBMNi4zMTU1NyA1TDEuMzA1OTkgMTBMMCA4LjY5NjUxTDMuNzAxMTMgNUwwIDEuMzAzNDlIMC4wMDEyMzEzOVoiIGZpbGw9IiM4RDhEOEYiLz48L3N2Zz4K"); +} + +/* Button */ +.btn-outline-secondary { + color: var(--btcpay-secondary-text); +} + +.btn-outline-secondary:hover { + color: var(--btcpay-secondary-text-hover); + border-color: var(--btcpay-secondary-border-hover); +} + +.btn-outline-secondary:active { + color: var(--btcpay-secondary-text-active); +} + +.btn .icon { + --btn-icon-size: 1.25em; + height: var(--btn-icon-size); + width: var(--btn-icon-size); +} + +.btn.rounded-circle { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0; + height: 2.857em; + width: 2.857em; +} + +.btn-sm.rounded-circle { + height: 2.666em; + width: 2.666em; +} + +.btn-lg.rounded-circle { + height: 3.5em; + width: 3.5em; +} + +.btn-close .icon { + position: relative; + top: -0.4rem; + display: inline-block; + width: 1rem; + height: 1rem; +} + +.dropdown-toggle-split { + padding-right: 1rem; + padding-left: 1rem; +} + +.font-monospace { + font-size: 0.95rem; +} + +input.w-auto, +select.w-auto, +textarea.w-auto { + max-width: 100%; + flex-grow: 0 !important; +} + +/* Prevent form zoom on mobile Safari */ +@supports (-webkit-overflow-scrolling: touch) { + input.form-control, + textarea.form-control, + select.form-select { + font-size: var(--btcpay-root-font-size); + } +} + +/* Fix for small table showing unnecessary scrollbars */ +.table-responsive .table-sm { + width: 100% !important; +} + +/* Pull tables out of the grid by their horizontal column padding */ +main *:not([class^="table-responsive"]) > .table { + width: calc(100% + 1rem); + margin: 1.5rem -0.5rem; +} + +main [class^="table-responsive"] { + width: calc(100% + 1rem); + margin: 1.5rem -0.5rem; +} + +/* Fix table group border width */ +.table > :not(:first-child) { + border-top-width: 1px; +} + +.table > :not(caption) > *:last-child > * { + border-bottom-width: 0; +} + +.table > thead:not(caption) > * > th { + color: var(--btcpay-body-text-muted); +} + +/* custom utility classes */ +.bg-tile { + background-color: var(--btcpay-bg-tile); +} + +.fw-semibold { + font-weight: var(--btcpay-font-weight-semibold) !important; +} + +.cursor-pointer { + cursor: pointer; +} + +.w-100px { + width: 100px; +} +.w-125px { + width: 125px; +} +.w-150px { + width: 150px; +} +.w-175px { + width: 175px; +} +.w-200px { + width: 200px; +} +.w-225px { + width: 225px; +} +.w-250px { + width: 250px; +} +.w-275px { + width: 275px; +} +.w-300px { + width: 300px; +} +.w-325px { + width: 325px; +} +.w-350px { + width: 350px; +} + +/* Chrome, Safari, Edge, Opera */ +input[type="number"].hide-number-spin::-webkit-outer-spin-button, +input[type="number"].hide-number-spin::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Firefox */ +input[type="number"].hide-number-spin { + -moz-appearance: textfield; +} + +/* custom bg and border classes */ +.bg-medium { + background-color: var(--btcpay-body-bg-medium); +} + +.border-medium { + border-color: var(--btcpay-body-border-medium); +} + +/* set color for text on background */ +.bg-primary { + color: var(--btcpay-primary-text); +} +.bg-secondary { + color: var(--btcpay-secondary-text); +} +.bg-success { + color: var(--btcpay-success-text); +} +.bg-info { + color: var(--btcpay-info-text); +} +.bg-warning { + color: var(--btcpay-warning-text); +} +.bg-danger { + color: var(--btcpay-danger-text); +} +.bg-light { + color: var(--btcpay-light-text); +} +.bg-dark { + color: var(--btcpay-dark-text); +} +.bg-body { + color: var(--btcpay-body-text); +} +.bg-white { + color: var(--btcpay-black); +} +.bg-black { + color: var(--btcpay-white); +} + +/* Forms */ +.form-group { + margin-bottom: 1.5rem; +} + +.form-select:not(:disabled,.disabled,.is-valid,.is-invalid):hover, +.form-control:not(:disabled,.disabled,.is-valid,.is-invalid):hover, +.form-check-input:not(:disabled,.disabled,.is-valid,.is-invalid):hover { + border-color: var(--btcpay-form-border-hover); +} + +[data-required]::after { + content: " *"; + color: var(--btcpay-danger); +} + +/* Custom space utils, as Bootstrap has a different spacing scale for > M */ +.pt-l { + padding-top: var(--btcpay-space-l); +} +.pt-xl { + padding-top: var(--btcpay-space-xl); +} +.pb-l { + padding-bottom: var(--btcpay-space-l); +} +.pb-xl { + padding-bottom: var(--btcpay-space-xl); +} +.mt-l { + margin-top: var(--btcpay-space-l); +} +.mt-xl { + margin-top: var(--btcpay-space-xl); +} +.mb-l { + margin-bottom: var(--btcpay-space-l); +} +.mb-xl { + margin-bottom: var(--btcpay-space-xl); +} + +/* Negative margin utils (only include bare minimum) */ +.mt-n1 { + margin-top: -0.25rem !important; +} +.mt-n2 { + margin-top: -0.5rem !important; +} +.mt-n3 { + margin-top: -1rem !important; +} +.mt-n4 { + margin-top: -1.5rem !important; +} +.mt-n5 { + margin-top: -3rem !important; +} +.me-n1 { + margin-right: -0.25rem !important; +} +.me-n2 { + margin-right: -0.5rem !important; +} +.me-n3 { + margin-right: -1rem !important; +} +.me-n4 { + margin-right: -1.5rem !important; +} +.me-n5 { + margin-right: -3rem !important; +} +.mb-n1 { + margin-bottom: -0.25rem !important; +} +.mb-n2 { + margin-bottom: -0.5rem !important; +} +.mb-n3 { + margin-bottom: -1rem !important; +} +.mb-n4 { + margin-bottom: -1.5rem !important; +} +.mb-n5 { + margin-bottom: -3rem !important; +} +.ms-n1 { + margin-left: -0.25rem !important; +} +.ms-n2 { + margin-left: -0.5rem !important; +} +.ms-n3 { + margin-left: -1rem !important; +} +.ms-n4 { + margin-left: -1.5rem !important; +} +.ms-n5 { + margin-left: -3rem !important; +} + +@media (min-width: 992px) { + .mt-lg-n1 { + margin-top: -0.25rem !important; + } + .mt-lg-n2 { + margin-top: -0.5rem !important; + } + .mt-lg-n3 { + margin-top: -1rem !important; + } + .mt-lg-n4 { + margin-top: -1.5rem !important; + } + .mt-lg-n5 { + margin-top: -3rem !important; + } + .me-lg-n1 { + margin-right: -0.25rem !important; + } + .me-lg-n2 { + margin-right: -0.5rem !important; + } + .me-lg-n3 { + margin-right: -1rem !important; + } + .me-lg-n4 { + margin-right: -1.5rem !important; + } + .me-lg-n5 { + margin-right: -3rem !important; + } + .mb-lg-n1 { + margin-bottom: -0.25rem !important; + } + .mb-lg-n2 { + margin-bottom: -0.5rem !important; + } + .mb-lg-n3 { + margin-bottom: -1rem !important; + } + .mb-lg-n4 { + margin-bottom: -1.5rem !important; + } + .mb-lg-n5 { + margin-bottom: -3rem !important; + } + .ms-lg-n1 { + margin-left: -0.25rem !important; + } + .ms-lg-n2 { + margin-left: -0.5rem !important; + } + .ms-lg-n3 { + margin-left: -1rem !important; + } + .ms-lg-n4 { + margin-left: -1.5rem !important; + } + .ms-lg-n5 { + margin-left: -3rem !important; + } +} + +.btcpay-pills input { + display: none; +} +.btcpay-pills label, +.btcpay-pill { + display: inline-block; + padding: var(--btcpay-space-s) 1.5rem; + color: var(--btcpay-body-link); + background: transparent; + font-weight: var(--btcpay-font-weight-semibold); + margin-right: var(--btcpay-space-m); + border: 1px solid var(--btcpay-secondary-border); + cursor: pointer; + border-radius: 5rem; + text-decoration: none; + 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; +} +.btcpay-pills input:not(:checked):not([disabled]) + label:hover, +.btcpay-pill:hover { + color: var(--btcpay-body-link); + border-color: var(--btcpay-secondary-border-hover); + text-decoration: none; +} +.btcpay-pills input { + display: none; +} +.btcpay-pills input:checked + label, +.btcpay-pill.active { + color: var(--btcpay-body-text-active); + background: var(--btcpay-body-bg-active); + border-color: var(--btcpay-body-bg-active); +} +.btcpay-pills input[disabled] + label, +.btcpay-pill.disabled { + color: var(--btcpay-body-text-muted) !important; + border-color: var(--btcpay-secondary-border) !important; + opacity: .5 !important; +} + +.btcpay-status { + display: inline-flex; + flex-shrink: 0; + align-items: center; + justify-content: center; + border: .25em solid transparent; + border-radius: 50%; + width: 19px; + height: 19px; +} +.btcpay-status:before { + content: ''; + border-radius: 50%; + width: 9px; + height: 9px; +} +.btcpay-status--enabled { + background-color: rgba(0, 182, 52, .25); +} +.btcpay-status--enabled:before { + background-color: #00B634; +} +.btcpay-status--pending { + background-color: rgba(143, 151, 158, .25); +} +.btcpay-status--pending:before { + background-color: var(--btcpay-neutral-500); +} +.btcpay-status--disabled { + background-color: rgba(251, 56, 61, .25); +} +.btcpay-status--disabled:before { + background-color: #FB383D; +} + +.btcpay-toggle { + --border-size: 2px; + --toggle-width: 40px; + --toggle-height: 24px; + --switch-size: calc(var(--toggle-height) - 2 * var(--border-size)); + + position: relative; + display: inline-block; + width: var(--toggle-width); + height: var(--toggle-height); + flex-shrink: 0; + border: 0; + border-radius: calc(var(--toggle-height) / 2); + background: var(--btcpay-toggle-bg); + font-size: 0; + cursor: pointer; +} + +.btcpay-toggle:hover { + background: var(--btcpay-toggle-bg-hover); +} + +input.btcpay-toggle { + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; +} + +input.btcpay-toggle:checked, +.btcpay-toggle.btcpay-toggle--active { + background: var(--btcpay-toggle-bg-active); +} + +input.btcpay-toggle:checked:hover, +.btcpay-toggle.btcpay-toggle--active:hover { + background: var(--btcpay-toggle-bg-active-hover); +} + +.btcpay-toggle::after { + content: ""; + position: absolute; + border-radius: 50%; + top: var(--border-size); + left: var(--border-size); + width: var(--switch-size); + height: var(--switch-size); + background-color: var(--btcpay-white); +} + +.btcpay-toggle, +.btcpay-toggle::after { + transition: all 0.2s; +} + +input.btcpay-toggle:checked::after, +.btcpay-toggle.btcpay-toggle--active::after { + left: calc(var(--toggle-width) - var(--switch-size) - var(--border-size)); +} + +label + input.btcpay-toggle { + position: relative; + top: .45rem; +} + +.btcpay-toggle:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} + +/* Bootstrap Responsive Helper */ +html[data-devenv]:before { + display: inline-block; + position: fixed; + z-index: 1000; + right: 0; + bottom: 0; + background: var(--btcpay-bg-tile); + color: var(--btcpay-secondary-text); + opacity: .7; + padding: 4px 5px 3px 7px; + font-size: 10px; + border-top-left-radius: 4px; +} + +@media (max-width: 575px) { html[data-devenv]:before { content: 'XS'; } } +@media (min-width: 576px) and (max-width: 767px) { html[data-devenv]:before { content: 'SM'; } } +@media (min-width: 768px) and (max-width: 991px) { html[data-devenv]:before { content: 'MD'; } } +@media (min-width: 992px) and (max-width: 1199px) { html[data-devenv]:before { content: 'LG'; } } +@media (min-width: 1200px) and (max-width: 1399px) { html[data-devenv]:before { content: 'XL'; } } +@media (min-width: 1400px) { html[data-devenv]:before { content: 'XXL'; } } +@media print { html[data-devenv]:before { content: none; } } diff --git a/PluginBuilder/wwwroot/styles/btcpayserver-main.css b/PluginBuilder/wwwroot/styles/btcpayserver-main.css new file mode 100644 index 0000000..3bfaccf --- /dev/null +++ b/PluginBuilder/wwwroot/styles/btcpayserver-main.css @@ -0,0 +1,943 @@ +/* cyrillic-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWyV9hmIqOjjg.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWyV9hvIqOjjg.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWyV9hnIqOjjg.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWyV9hoIqOjjg.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWyV9hkIqOjjg.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWyV9hlIqOjjg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWyV9hrIqM.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(https://fonts.gstatic.com/s/opensans/v15/mem6YaGs126MiZpBA-UFUK0Udc1UAw.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(https://fonts.gstatic.com/s/opensans/v15/mem6YaGs126MiZpBA-UFUK0ddc1UAw.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(https://fonts.gstatic.com/s/opensans/v15/mem6YaGs126MiZpBA-UFUK0Vdc1UAw.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(https://fonts.gstatic.com/s/opensans/v15/mem6YaGs126MiZpBA-UFUK0adc1UAw.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(https://fonts.gstatic.com/s/opensans/v15/mem6YaGs126MiZpBA-UFUK0Wdc1UAw.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(https://fonts.gstatic.com/s/opensans/v15/mem6YaGs126MiZpBA-UFUK0Xdc1UAw.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url(https://fonts.gstatic.com/s/opensans/v15/mem6YaGs126MiZpBA-UFUK0Zdc0.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKXGUdhmIqOjjg.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKXGUdhvIqOjjg.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKXGUdhnIqOjjg.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKXGUdhoIqOjjg.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKXGUdhkIqOjjg.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKXGUdhlIqOjjg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKXGUdhrIqM.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWiUNhmIqOjjg.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWiUNhvIqOjjg.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWiUNhnIqOjjg.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWiUNhoIqOjjg.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWiUNhkIqOjjg.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWiUNhlIqOjjg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWiUNhrIqM.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKW-U9hmIqOjjg.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKW-U9hvIqOjjg.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKW-U9hnIqOjjg.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKW-U9hoIqOjjg.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKW-U9hkIqOjjg.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKW-U9hlIqOjjg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKW-U9hrIqM.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OX-hpOqc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OVuhpOqc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OXuhpOqc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OUehpOqc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OXehpOqc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OXOhpOqc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OUuhp.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFWJ0bbck.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFUZ0bbck.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFWZ0bbck.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFVp0bbck.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFWp0bbck.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFW50bbck.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFVZ0b.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UNirkOX-hpOqc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UNirkOVuhpOqc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UNirkOXuhpOqc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UNirkOUehpOqc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UNirkOXehpOqc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UNirkOXOhpOqc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UNirkOUuhp.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN7rgOX-hpOqc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN7rgOVuhpOqc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN7rgOXuhpOqc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN7rgOUehpOqc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN7rgOXehpOqc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN7rgOXOhpOqc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN7rgOUuhp.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* cyrillic-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN8rsOX-hpOqc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +/* cyrillic */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN8rsOVuhpOqc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +/* greek-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN8rsOXuhpOqc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} + +/* greek */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN8rsOUehpOqc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} + +/* vietnamese */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN8rsOXehpOqc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; +} + +/* latin-ext */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN8rsOXOhpOqc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* latin */ + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url(https://fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN8rsOUuhp.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: reduce) { + * { + -webkit-animation: none !important; + animation: none !important; + transition: none !important; + } +} + +body { + font-family: var(--btcpay-font-family-base); + font-size: var(--btcpay-font-size-base); + font-weight: var(--btcpay-font-weight-normal); + line-height: 1.6; + color: var(--btcpay-body-text); + background-color: var(--btcpay-body-bg); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: var(--btcpay-font-family-monospace); + border-radius: var(--btcpay-border-radius); + padding: var(--btcpay-space-xs); + color: var(--btcpay-code-text); + background-color: var(--btcpay-code-bg); +} + +pre { + font-family: var(--btcpay-font-family-monospace); + border-radius: var(--btcpay-border-radius); + color: var(--btcpay-pre-text); + background-color: var(--btcpay-pre-bg); +} + +pre code { + padding: var(--btcpay-space-m) !important; + background: var(--btcpay-pre-bg); +} + +a { + color: var(--btcpay-body-link); +} + +a:focus, +a:hover { + color: var(--btcpay-body-link-accent); +} + +/* components */ + +.btcpay-header { + color: var(--btcpay-header-text); + background-color: var(--btcpay-header-bg); +} + +.btcpay-header a { + color: var(--btcpay-header-link); + text-decoration: none; + } + +.btcpay-header a:focus, + .btcpay-header a:hover { + color: var(--btcpay-header-link-accent); + } + +.btcpay-header-columns { + display: flex; + flex-wrap: wrap; + width: 100%; + align-items: center; + justify-content: space-between; +} + +.btcpay-header-logo { + height: 45px; +} + +.btcpay-pills input { + display: none; +} + +.btcpay-pills label, +.btcpay-pill { + display: inline-block; + padding: var(--btcpay-space-s) 1.5rem; + color: var(--btcpay-body-link); + background: transparent; + font-weight: var(--btcpay-font-weight-semibold); + margin-right: var(--btcpay-space-m); + border: 1px solid var(--btcpay-secondary-border); + cursor: pointer; + border-radius: 5rem; + text-decoration: none; + 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; +} + +.btcpay-pills input:not(:checked):not([disabled]) + label:hover, +.btcpay-pill:hover { + color: var(--btcpay-body-link); + border-color: var(--btcpay-secondary-border-hover); + text-decoration: none; +} + +.btcpay-pills input { + display: none; +} + +.btcpay-pills input:checked + label, +.btcpay-pill.active { + color: var(--btcpay-body-text-active); + background: var(--btcpay-body-bg-active); + border-color: var(--btcpay-body-bg-active); +} + +.btcpay-pills input[disabled] + label, +.btcpay-pill.disabled { + color: var(--btcpay-body-text-muted) !important; + border-color: var(--btcpay-secondary-border) !important; + opacity: .5 !important; +} + +.btcpay-theme-switch { + --btcpay-theme-switch-light-color: var(--btcpay-white); + --btcpay-theme-switch-dark-color: var(--btcpay-neutral-900); + --btcpay-theme-switch-icon-size: 1.25rem; + display: inline-flex; + align-items: center; + justify-content: center; + color: var(--btcpay-white); + background: none; + cursor: pointer; + height: 40px; + width: 40px; + border: 0; +} + +.btcpay-theme-switch svg { + height: var(--btcpay-theme-switch-icon-size); + width: var(--btcpay-theme-switch-icon-size); + } + +.btcpay-theme-switch path { + stroke-width: .5px; + fill: none; + } + +.btcpay-theme-switch:hover .btcpay-theme-switch-light, .btcpay-theme-switch:focus .btcpay-theme-switch-light { + fill: var(--btcpay-theme-switch-light-color); + } + +.btcpay-theme-switch:hover .btcpay-theme-switch-dark, .btcpay-theme-switch:focus .btcpay-theme-switch-dark { + fill: var(--btcpay-theme-switch-dark-color); + } + +.btcpay-theme-switch-dark { + display: inline-block; + stroke: var(--btcpay-theme-switch-dark-color); +} + +[data-btcpay-theme="dark"]:root .btcpay-theme-switch-dark { + display: none; +} + +@media (prefers-color-scheme: dark) { + +:root:not([data-btcpay-theme="dark"]) .btcpay-theme-switch-dark { + display: inline-block; +} + } + +.btcpay-theme-switch-light { + display: none; + stroke: var(--btcpay-theme-switch-light-color); +} + +[data-btcpay-theme="dark"]:root .btcpay-theme-switch-light { + display: inline-block; +} + +@media (prefers-color-scheme: dark) { + +:root:not([data-btcpay-theme="light"]) .btcpay-theme-switch-light { + display: inline-block; +} + } + +.btcpay-footer { + color: var(--btcpay-footer-text); + background-color: var(--btcpay-footer-bg); +} + +.btcpay-footer a { + color: var(--btcpay-footer-link); + text-decoration: none; + } + +.btcpay-footer a:focus, + .btcpay-footer a:hover { + color: var(--btcpay-footer-link-accent); + } + +.btcpay-footer-columns { + display: flex; + flex-wrap: wrap; + width: 100%; +} + +.btcpay-footer-columns > * { + flex: 1 1 100%; + margin-bottom: var(--btcpay-space-m); + } + +.btcpay-footer-columns h4, + .btcpay-footer-columns h5, + .btcpay-footer-columns h6 { + margin: var(--btcpay-space-m) 0; + font-weight: var(--btcpay-font-weight-bold); + } + +.btcpay-footer-columns ul { + margin: 0; + padding: 0; + list-style: none; + } + +.btcpay-footer-columns ul li { + padding: var(--btcpay-space-xs) 0; + } + +@media (min-width: 576px) { + .btcpay-footer-columns > * { + flex: 1; + } + .btcpay-footer-columns > * + * { + margin-left: var(--btcpay-space-m); + } +} diff --git a/PluginBuilder/wwwroot/styles/btcpayserver-variables.css b/PluginBuilder/wwwroot/styles/btcpayserver-variables.css new file mode 100644 index 0000000..9903139 --- /dev/null +++ b/PluginBuilder/wwwroot/styles/btcpayserver-variables.css @@ -0,0 +1,578 @@ +:root { + --btcpay-border-radius: .25rem; + --btcpay-border-radius-l: .5rem; + --btcpay-border-radius-xl: 1rem; + --btcpay-border-radius-xxl: 1.5rem; + --btcpay-transition-duration-fast: .2s; + --btcpay-transition-duration-default: .3s; + --btcpay-transition-duration-slow: .5s; + --btcpay-brand-primary: #51b13e; + --btcpay-brand-secondary: #CEDC21; + --btcpay-brand-tertiary: #1e7a44; + --btcpay-brand-dark: #0F3B21; + --btcpay-white: #ffffff; + --btcpay-white-rgb: 255, 255, 255; + --btcpay-black: #000000; + --btcpay-black-rgb: 0, 0, 0; + --btcpay-neutral-light-100: #f8f9fa; + --btcpay-neutral-light-200: #e9ecef; + --btcpay-neutral-light-300: #dee2e6; + --btcpay-neutral-light-400: #ced4da; + --btcpay-neutral-light-500: #8f979e; + --btcpay-neutral-light-600: #6c757d; + --btcpay-neutral-light-700: #495057; + --btcpay-neutral-light-800: #343a40; + --btcpay-neutral-light-900: #292929; + --btcpay-neutral-light-rgb: 143,151,158; + --btcpay-neutral-dark-100: #F0F6FC; + --btcpay-neutral-dark-200: #C9D1D9; + --btcpay-neutral-dark-300: #B1BAC4; + --btcpay-neutral-dark-400: #8B949E; + --btcpay-neutral-dark-500: #6E7681; + --btcpay-neutral-dark-600: #484F58; + --btcpay-neutral-dark-700: #30363D; + --btcpay-neutral-dark-800: #21262D; + --btcpay-neutral-dark-900: #161B22; + --btcpay-neutral-dark-rgb: 110,118,129; + --btcpay-primary-100: #c7e6c1; + --btcpay-primary-200: #b5dead; + --btcpay-primary-300: #9dd392; + --btcpay-primary-400: #7cc46e; + --btcpay-primary-500: #44a431; + --btcpay-primary-600: #389725; + --btcpay-primary-700: #2e8a1b; + --btcpay-primary-800: #247d12; + --btcpay-primary-900: #1c710b; + --btcpay-primary-rgb: 68,164,49; + --btcpay-green-100: #EEFAEB; + --btcpay-green-200: #C7E8C0; + --btcpay-green-300: #A0D695; + --btcpay-green-400: #78C369; + --btcpay-green-500: #51B13E; + --btcpay-green-600: #419437; + --btcpay-green-700: #307630; + --btcpay-green-800: #205928; + --btcpay-green-900: #0F3B21; + --btcpay-green-rgb: 81,177,62; + --btcpay-blue-100: #b5e1e8; + --btcpay-blue-200: #9dd7e1; + --btcpay-blue-300: #7ccad7; + --btcpay-blue-400: #51b9c9; + --btcpay-blue-500: #17a2b8; + --btcpay-blue-600: #03899e; + --btcpay-blue-700: #007d91; + --btcpay-blue-800: #007284; + --btcpay-blue-900: #006778; + --btcpay-blue-rgb: 23,162,184; + --btcpay-yellow-100: #FFFAF0; + --btcpay-yellow-200: #FFF2D9; + --btcpay-yellow-300: #FFE3AC; + --btcpay-yellow-400: #FFCF70; + --btcpay-yellow-500: #FFC043; + --btcpay-yellow-600: #BC8B2C; + --btcpay-yellow-700: #997328; + --btcpay-yellow-800: #674D1B; + --btcpay-yellow-900: #543D10; + --btcpay-yellow-rgb: 255,192,67; + --btcpay-red-100: #FFEFED; + --btcpay-red-200: #FED7D2; + --btcpay-red-300: #F1998E; + --btcpay-red-400: #E85C4A; + --btcpay-red-500: #E11900; + --btcpay-red-600: #AB1300; + --btcpay-red-700: #870F00; + --btcpay-red-800: #5A0A00; + --btcpay-red-900: #420105; + --btcpay-red-rgb: 225,25,0; + --btcpay-purple-100: #F4F1FA; + --btcpay-purple-200: #E3DDF2; + --btcpay-purple-300: #C1B5E3; + --btcpay-purple-400: #957FCE; + --btcpay-purple-500: #7356BF; + --btcpay-purple-600: #574191; + --btcpay-purple-700: #453473; + --btcpay-purple-800: #2E224C; + --btcpay-purple-900: #1A1033; + --btcpay-purple-rgb: 115,86,191; + --btcpay-orange-100: #FFF3EF; + --btcpay-orange-200: #FFE1D6; + --btcpay-orange-300: #FABDA5; + --btcpay-orange-400: #FA9269; + --btcpay-orange-500: #FF6937; + --btcpay-orange-600: #C14F29; + --btcpay-orange-700: #9A3F21; + --btcpay-orange-800: #672A16; + --btcpay-orange-900: #3D1300; + --btcpay-orange-rgb: 255,105,55; + --btcpay-brown-100: #F6F0EA; + --btcpay-brown-200: #EBE0DB; + --btcpay-brown-300: #D2BBB0; + --btcpay-brown-400: #B18977; + --btcpay-brown-500: #99644C; + --btcpay-brown-600: #744C3A; + --btcpay-brown-700: #5C3C2E; + --btcpay-brown-800: #3D281E; + --btcpay-brown-900: #241914; + --btcpay-brown-rgb: 153,100,76; + --btcpay-pink-100: #FFEDF9; + --btcpay-pink-200: #FFCEE5; + --btcpay-pink-300: #FFACD6; + --btcpay-pink-400: #FE82C2; + --btcpay-pink-500: #F162AF; + --btcpay-pink-600: #BB4183; + --btcpay-pink-700: #7D2457; + --btcpay-pink-800: #5E103E; + --btcpay-pink-900: #4A042E; + --btcpay-pink-rgb: 241,98,175; + --btcpay-space-xs: 4px; + --btcpay-space-s: 8px; + --btcpay-space-m: 16px; + --btcpay-space-l: 32px; + --btcpay-space-xl: 64px; + --btcpay-space-xxl: 80px; + --btcpay-font-family-base: "Open Sans", "Helvetica Neue", Arial, sans-serif; + --btcpay-font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --btcpay-font-size-xs: 10px; + --btcpay-font-size-s: 12px; + --btcpay-font-size-m: 14px; + --btcpay-font-size-l: 18px; + --btcpay-font-size-xl: 36px; + --btcpay-font-size-xxl: 45px; + --btcpay-font-weight-normal: 400; + --btcpay-font-weight-semibold: 600; + --btcpay-font-weight-bold: 700; + --btcpay-neutral-100: var(--btcpay-neutral-light-100); + --btcpay-neutral-200: var(--btcpay-neutral-light-200); + --btcpay-neutral-300: var(--btcpay-neutral-light-300); + --btcpay-neutral-400: var(--btcpay-neutral-light-400); + --btcpay-neutral-500: var(--btcpay-neutral-light-500); + --btcpay-neutral-600: var(--btcpay-neutral-light-600); + --btcpay-neutral-700: var(--btcpay-neutral-light-700); + --btcpay-neutral-800: var(--btcpay-neutral-light-800); + --btcpay-neutral-900: var(--btcpay-neutral-light-900); + --btcpay-font-size-base: var(--btcpay-font-size-m); + --btcpay-bg-tile: var(--btcpay-white); + --btcpay-bg-dark: var(--btcpay-brand-dark); + --btcpay-body-bg: var(--btcpay-neutral-100); + --btcpay-body-bg-light: var(--btcpay-white); + --btcpay-body-bg-medium: var(--btcpay-neutral-200); + --btcpay-body-bg-striped: var(--btcpay-neutral-200); + --btcpay-body-bg-hover: var(--btcpay-white); + --btcpay-body-bg-active: var(--btcpay-primary); + --btcpay-body-bg-rgb: 248, 249, 250; + --btcpay-body-border-light: var(--btcpay-neutral-200); + --btcpay-body-border-medium: var(--btcpay-neutral-300); + --btcpay-body-text: var(--btcpay-neutral-900); + --btcpay-body-text-striped: var(--btcpay-body-text); + --btcpay-body-text-hover: var(--btcpay-body-text); + --btcpay-body-text-active: var(--btcpay-white); + --btcpay-body-text-muted: var(--btcpay-neutral-500); + --btcpay-body-text-rgb: 41, 41, 41; + --btcpay-body-link: var(--btcpay-primary); + --btcpay-body-link-accent: var(--btcpay-primary-accent); + --btcpay-body-shadow: rgba(25, 135, 84, 0.33); + --btcpay-wizard-bg: var(--btcpay-body-bg); + --btcpay-wizard-text: var(--btcpay-body-text); + --btcpay-header-bg: var(--btcpay-white); + --btcpay-header-text: var(--btcpay-body-text); + --btcpay-header-link: var(--btcpay-header-text); + --btcpay-header-link-accent: var(--btcpay-primary); + --btcpay-header-link-active: var(--btcpay-primary); + --btcpay-nav-link: var(--btcpay-neutral-600); + --btcpay-nav-link-accent: var(--btcpay-neutral-700); + --btcpay-nav-link-active: var(--btcpay-neutral-900); + --btcpay-nav-bg: transparent; + --btcpay-nav-bg-hover: transparent; + --btcpay-nav-bg-active: transparent; + --btcpay-nav-border: transparent; + --btcpay-nav-border-hover: transparent; + --btcpay-nav-border-active: var(--btcpay-primary); + --btcpay-form-bg: var(--btcpay-white); + --btcpay-form-bg-hover: var(--btcpay-form-bg); + --btcpay-form-bg-addon: var(--btcpay-neutral-300); + --btcpay-form-bg-disabled: var(--btcpay-neutral-200); + --btcpay-form-text: var(--btcpay-neutral-900); + --btcpay-form-text-label: var(--btcpay-neutral-700); + --btcpay-form-text-addon: var(--btcpay-neutral-700); + --btcpay-form-border: var(--btcpay-neutral-300); + --btcpay-form-border-check: var(--btcpay-neutral-400); + --btcpay-form-border-hover: var(--btcpay-primary); + --btcpay-form-border-focus: var(--btcpay-primary); + --btcpay-form-border-active: var(--btcpay-form-border); + --btcpay-form-border-disabled: var(--btcpay-form-border); + --btcpay-form-shadow-size: 2px; + --btcpay-form-shadow-focus: var(--btcpay-primary-shadow); + --btcpay-form-shadow-valid: var(--btcpay-success-shadow); + --btcpay-form-shadow-invalid: var(--btcpay-danger-shadow); + --btcpay-toggle-bg: var(--btcpay-neutral-500); + --btcpay-toggle-bg-hover: var(--btcpay-neutral-600); + --btcpay-toggle-bg-active: var(--btcpay-primary); + --btcpay-toggle-bg-active-hover: var(--btcpay-primary-600); + --btcpay-footer-bg: var(--btcpay-body-bg); + --btcpay-footer-text: var(--btcpay-neutral-500); + --btcpay-footer-link: var(--btcpay-neutral-500); + --btcpay-footer-link-accent: var(--btcpay-neutral-600); + --btcpay-code-text: var(--btcpay-body-text); + --btcpay-code-bg: transparent; + --btcpay-pre-text: var(--btcpay-white); + --btcpay-pre-bg: var(--btcpay-neutral-900); + --btcpay-primary: var(--btcpay-brand-primary); + --btcpay-primary-accent: var(--btcpay-brand-tertiary); + --btcpay-primary-text: var(--btcpay-white); + --btcpay-primary-text-hover: var(--btcpay-white); + --btcpay-primary-text-active: var(--btcpay-white); + --btcpay-primary-bg-hover: var(--btcpay-primary-accent); + --btcpay-primary-bg-active: var(--btcpay-primary-accent); + --btcpay-primary-border: var(--btcpay-primary); + --btcpay-primary-border-hover: var(--btcpay-primary-bg-hover); + --btcpay-primary-border-active: var(--btcpay-primary-bg-active); + --btcpay-primary-dim-bg: var(--btcpay-primary-500); + --btcpay-primary-dim-bg-striped: var(--btcpay-primary-400); + --btcpay-primary-dim-bg-hover: var(--btcpay-primary-600); + --btcpay-primary-dim-bg-active: var(--btcpay-primary-700); + --btcpay-primary-dim-border: var(--btcpay-primary-dim-bg); + --btcpay-primary-dim-border-active: var(--btcpay-primary-dim-bg-active); + --btcpay-primary-dim-text: var(--btcpay-white); + --btcpay-primary-dim-text-striped: var(--btcpay-primary-dim-text); + --btcpay-primary-dim-text-hover: var(--btcpay-primary-dim-text); + --btcpay-primary-dim-text-active: var(--btcpay-primary-900); + --btcpay-primary-shadow: rgba(81, 177, 62, 0.5); + --btcpay-primary-rgb: 81, 177, 62; + --btcpay-secondary: var(--btcpay-white); + --btcpay-secondary-accent: var(--btcpay-secondary); + --btcpay-secondary-text: var(--btcpay-primary); + --btcpay-secondary-text-hover: var(--btcpay-primary); + --btcpay-secondary-text-active: var(--btcpay-brand-dark); + --btcpay-secondary-bg-hover: var(--btcpay-secondary-accent); + --btcpay-secondary-bg-active: var(--btcpay-secondary-accent); + --btcpay-secondary-border: var(--btcpay-neutral-300); + --btcpay-secondary-border-hover: var(--btcpay-primary); + --btcpay-secondary-border-active: var(--btcpay-neutral-500); + --btcpay-secondary-dim-bg: var(--btcpay-neutral-200); + --btcpay-secondary-dim-bg-striped: var(--btcpay-neutral-300); + --btcpay-secondary-dim-bg-hover: var(--btcpay-neutral-300); + --btcpay-secondary-dim-bg-active: var(--btcpay-neutral-400); + --btcpay-secondary-dim-border: var(--btcpay-secondary-dim-bg); + --btcpay-secondary-dim-border-active: var(--btcpay-secondary-dim-bg-active); + --btcpay-secondary-dim-text: var(--btcpay-neutral-800); + --btcpay-secondary-dim-text-striped: var(--btcpay-secondary-dim-text); + --btcpay-secondary-dim-text-hover: var(--btcpay-secondary-dim-text); + --btcpay-secondary-dim-text-active: var(--btcpay-neutral-900); + --btcpay-secondary-shadow: rgba(130, 138, 145, 0.33); + --btcpay-secondary-rgb: 255, 255, 255; + --btcpay-success: var(--btcpay-green-500); + --btcpay-success-accent: var(--btcpay-green-700); + --btcpay-success-text: var(--btcpay-white); + --btcpay-success-text-hover: var(--btcpay-white); + --btcpay-success-text-active: var(--btcpay-white); + --btcpay-success-bg-hover: var(--btcpay-success-accent); + --btcpay-success-bg-active: var(--btcpay-success-accent); + --btcpay-success-border: var(--btcpay-success); + --btcpay-success-border-hover: var(--btcpay-success-bg-hover); + --btcpay-success-border-active: var(--btcpay-success-bg-active); + --btcpay-success-dim-bg: var(--btcpay-green-100); + --btcpay-success-dim-bg-striped: var(--btcpay-green-200); + --btcpay-success-dim-bg-hover: var(--btcpay-green-200); + --btcpay-success-dim-bg-active: var(--btcpay-green-300); + --btcpay-success-dim-border: var(--btcpay-success-dim-bg); + --btcpay-success-dim-border-active: var(--btcpay-success-dim-bg-active); + --btcpay-success-dim-text: var(--btcpay-green-800); + --btcpay-success-dim-text-striped: var(--btcpay-success-dim-text); + --btcpay-success-dim-text-hover: var(--btcpay-success-dim-text); + --btcpay-success-dim-text-active: var(--btcpay-green-900); + --btcpay-success-shadow: rgba(60, 153, 110, 0.33); + --btcpay-success-rgb: var(--btcpay-green-rgb); + --btcpay-info: var(--btcpay-blue-500); + --btcpay-info-accent: var(--btcpay-blue-700); + --btcpay-info-text: var(--btcpay-white); + --btcpay-info-text-hover: var(--btcpay-white); + --btcpay-info-text-active: var(--btcpay-white); + --btcpay-info-bg-hover: var(--btcpay-info-accent); + --btcpay-info-bg-active: var(--btcpay-info-accent); + --btcpay-info-border: var(--btcpay-info); + --btcpay-info-border-hover: var(--btcpay-info-bg-hover); + --btcpay-info-border-active: var(--btcpay-info-bg-active); + --btcpay-info-dim-bg: var(--btcpay-blue-100); + --btcpay-info-dim-bg-striped: var(--btcpay-blue-200); + --btcpay-info-dim-bg-hover: var(--btcpay-blue-200); + --btcpay-info-dim-bg-active: var(--btcpay-blue-300); + --btcpay-info-dim-border: var(--btcpay-info-dim-bg); + --btcpay-info-dim-border-active: var(--btcpay-info-dim-bg-active); + --btcpay-info-dim-text: var(--btcpay-blue-800); + --btcpay-info-dim-text-striped: var(--btcpay-info-dim-text); + --btcpay-info-dim-text-hover: var(--btcpay-info-dim-text); + --btcpay-info-dim-text-active: var(--btcpay-blue-900); + --btcpay-info-shadow: rgba(11, 172, 204, 0.33); + --btcpay-info-rgb: var(--btcpay-blue-rgb); + --btcpay-warning: var(--btcpay-yellow-500); + --btcpay-warning-accent: var(--btcpay-yellow-700); + --btcpay-warning-text: var(--btcpay-neutral-900); + --btcpay-warning-text-hover: var(--btcpay-neutral-900); + --btcpay-warning-text-active: var(--btcpay-neutral-900); + --btcpay-warning-bg-hover: var(--btcpay-warning-accent); + --btcpay-warning-bg-active: var(--btcpay-warning-accent); + --btcpay-warning-border: var(--btcpay-warning); + --btcpay-warning-border-hover: var(--btcpay-warning-bg-hover); + --btcpay-warning-border-active: var(--btcpay-warning-bg-active); + --btcpay-warning-dim-bg: var(--btcpay-yellow-100); + --btcpay-warning-dim-bg-striped: var(--btcpay-yellow-200); + --btcpay-warning-dim-bg-hover: var(--btcpay-yellow-200); + --btcpay-warning-dim-bg-active: var(--btcpay-yellow-300); + --btcpay-warning-dim-border: var(--btcpay-warning-dim-bg); + --btcpay-warning-dim-border-active: var(--btcpay-warning-dim-bg-active); + --btcpay-warning-dim-text: var(--btcpay-neutral-800); + --btcpay-warning-dim-text-striped: var(--btcpay-warning-dim-text); + --btcpay-warning-dim-text-hover: var(--btcpay-warning-dim-text); + --btcpay-warning-dim-text-active: var(--btcpay-yellow-900); + --btcpay-warning-shadow: rgba(217, 164, 6, 0.33); + --btcpay-warning-rgb: var(--btcpay-yellow-rgb); + --btcpay-danger: var(--btcpay-red-500); + --btcpay-danger-accent: var(--btcpay-red-700); + --btcpay-danger-text: var(--btcpay-white); + --btcpay-danger-text-hover: var(--btcpay-white); + --btcpay-danger-text-active: var(--btcpay-white); + --btcpay-danger-bg-hover: var(--btcpay-danger-accent); + --btcpay-danger-bg-active: var(--btcpay-danger-accent); + --btcpay-danger-border: var(--btcpay-danger); + --btcpay-danger-border-hover: var(--btcpay-danger-bg-hover); + --btcpay-danger-border-active: var(--btcpay-danger-bg-active); + --btcpay-danger-dim-bg: var(--btcpay-red-100); + --btcpay-danger-dim-bg-striped: var(--btcpay-red-200); + --btcpay-danger-dim-bg-hover: var(--btcpay-red-200); + --btcpay-danger-dim-bg-active: var(--btcpay-red-300); + --btcpay-danger-dim-border: var(--btcpay-danger-dim-bg); + --btcpay-danger-dim-border-active: var(--btcpay-danger-dim-bg-active); + --btcpay-danger-dim-text: var(--btcpay-red-800); + --btcpay-danger-dim-text-striped: var(--btcpay-danger-dim-text); + --btcpay-danger-dim-text-hover: var(--btcpay-danger-dim-text); + --btcpay-danger-dim-text-active: var(--btcpay-red-900); + --btcpay-danger-shadow: rgba(225, 83, 97, 0.33); + --btcpay-danger-rgb: var(--btcpay-red-rgb); + --btcpay-light: var(--btcpay-neutral-200); + --btcpay-light-accent: var(--btcpay-neutral-400); + --btcpay-light-text: var(--btcpay-neutral-800); + --btcpay-light-text-hover: var(--btcpay-neutral-800); + --btcpay-light-text-active: var(--btcpay-neutral-800); + --btcpay-light-bg-hover: var(--btcpay-light-accent); + --btcpay-light-bg-active: var(--btcpay-light-accent); + --btcpay-light-border: var(--btcpay-light); + --btcpay-light-border-hover: var(--btcpay-light-bg-hover); + --btcpay-light-border-active: var(--btcpay-light-bg-active); + --btcpay-light-dim-bg: var(--btcpay-white); + --btcpay-light-dim-bg-striped: var(--btcpay-neutral-200); + --btcpay-light-dim-bg-hover: var(--btcpay-neutral-200); + --btcpay-light-dim-bg-active: var(--btcpay-neutral-300); + --btcpay-light-dim-border: var(--btcpay-light-dim-bg); + --btcpay-light-dim-border-active: var(--btcpay-light-dim-bg-active); + --btcpay-light-dim-text: var(--btcpay-neutral-800); + --btcpay-light-dim-text-striped: var(--btcpay-light-dim-text); + --btcpay-light-dim-text-hover: var(--btcpay-light-dim-text); + --btcpay-light-dim-text-active: var(--btcpay-neutral-900); + --btcpay-light-shadow: rgba(211, 212, 213, 0.33); + --btcpay-light-rgb: 233, 236, 239; + --btcpay-dark: var(--btcpay-neutral-800); + --btcpay-dark-accent: var(--btcpay-black); + --btcpay-dark-text: var(--btcpay-neutral-200); + --btcpay-dark-text-hover: var(--btcpay-neutral-200); + --btcpay-dark-text-active: var(--btcpay-neutral-200); + --btcpay-dark-bg-hover: var(--btcpay-dark-accent); + --btcpay-dark-bg-active: var(--btcpay-dark-accent); + --btcpay-dark-border: var(--btcpay-dark); + --btcpay-dark-border-hover: var(--btcpay-dark-bg-hover); + --btcpay-dark-border-active: var(--btcpay-dark-bg-active); + --btcpay-dark-dim-bg: var(--btcpay-neutral-900); + --btcpay-dark-dim-bg-striped: var(--btcpay-neutral-900); + --btcpay-dark-dim-bg-hover: var(--btcpay-neutral-800); + --btcpay-dark-dim-bg-active: var(--btcpay-neutral-700); + --btcpay-dark-dim-border: var(--btcpay-dark-dim-bg); + --btcpay-dark-dim-border-active: var(--btcpay-dark-dim-bg-active); + --btcpay-dark-dim-text: var(--btcpay-neutral-200); + --btcpay-dark-dim-text-striped: var(--btcpay-dark-dim-text); + --btcpay-dark-dim-text-hover: var(--btcpay-dark-dim-text); + --btcpay-dark-dim-text-active: var(--btcpay-neutral-100); + --btcpay-dark-shadow: rgba(66, 70, 73, 0.33); + --btcpay-dark-rgb: 33, 38, 45; +} + +:root[data-theme="dark"], +:root[data-btcpay-theme="dark"] { + --btcpay-neutral-100: var(--btcpay-neutral-dark-100); + --btcpay-neutral-200: var(--btcpay-neutral-dark-200); + --btcpay-neutral-300: var(--btcpay-neutral-dark-300); + --btcpay-neutral-400: var(--btcpay-neutral-dark-400); + --btcpay-neutral-500: var(--btcpay-neutral-dark-500); + --btcpay-neutral-600: var(--btcpay-neutral-dark-600); + --btcpay-neutral-700: var(--btcpay-neutral-dark-700); + --btcpay-neutral-800: var(--btcpay-neutral-dark-800); + --btcpay-neutral-900: var(--btcpay-neutral-dark-900); + --btcpay-neutral-950: #0D1117; + --btcpay-bg-dark: var(--btcpay-neutral-950); + --btcpay-bg-tile: var(--btcpay-bg-dark); + --btcpay-body-bg: var(--btcpay-neutral-900); + --btcpay-body-bg-light: var(--btcpay-neutral-950); + --btcpay-body-bg-medium: var(--btcpay-neutral-800); + --btcpay-body-bg-striped: var(--btcpay-neutral-800); + --btcpay-body-bg-hover: var(--btcpay-neutral-950); + --btcpay-body-bg-rgb: 41, 41, 41; + --btcpay-body-border-light: var(--btcpay-neutral-800); + --btcpay-body-border-medium: var(--btcpay-neutral-700); + --btcpay-body-text: var(--btcpay-white); + --btcpay-body-text-rgb: 255, 255, 255; + --btcpay-body-link-accent: var(--btcpay-primary-300); + --btcpay-form-bg: var(--btcpay-neutral-950); + --btcpay-form-bg-addon: var(--btcpay-neutral-700); + --btcpay-form-bg-disabled: var(--btcpay-neutral-800); + --btcpay-form-text: var(--btcpay-neutral-200); + --btcpay-form-text-label: var(--btcpay-neutral-100); + --btcpay-form-text-addon: var(--btcpay-neutral-300); + --btcpay-form-border: var(--btcpay-neutral-800); + --btcpay-form-border-check: var(--btcpay-neutral-600); + --btcpay-header-bg: var(--btcpay-bg-dark); + --btcpay-nav-link: var(--btcpay-neutral-500); + --btcpay-nav-link-accent: var(--btcpay-neutral-300); + --btcpay-nav-link-active: var(--btcpay-white); + --btcpay-footer-text: var(--btcpay-neutral-400); + --btcpay-footer-link: var(--btcpay-neutral-400); + --btcpay-footer-link-accent: var(--btcpay-neutral-200); + --btcpay-pre-bg: var(--btcpay-bg-dark); + --btcpay-secondary: transparent; + --btcpay-secondary-text-active: var(--btcpay-primary); + --btcpay-secondary-border: var(--btcpay-neutral-700); + --btcpay-secondary-rgb: 22, 27, 34; + --btcpay-light: var(--btcpay-neutral-800); + --btcpay-light-accent: var(--btcpay-black); + --btcpay-light-text: var(--btcpay-neutral-200); + --btcpay-light-text-hover: var(--btcpay-neutral-200); + --btcpay-light-text-active: var(--btcpay-neutral-200); + --btcpay-light-bg-hover: var(--btcpay-light-accent); + --btcpay-light-bg-active: var(--btcpay-light-accent); + --btcpay-light-border: var(--btcpay-light); + --btcpay-light-border-hover: var(--btcpay-light-bg-hover); + --btcpay-light-border-active: var(--btcpay-light-bg-active); + --btcpay-light-dim-bg: var(--btcpay-neutral-950); + --btcpay-light-dim-bg-striped: var(--btcpay-neutral-900); + --btcpay-light-dim-bg-hover: var(--btcpay-neutral-800); + --btcpay-light-dim-bg-active: var(--btcpay-neutral-700); + --btcpay-light-dim-border: var(--btcpay-light-dim-bg); + --btcpay-light-dim-border-active: var(--btcpay-light-dim-bg-active); + --btcpay-light-dim-text: var(--btcpay-neutral-200); + --btcpay-light-dim-text-striped: var(--btcpay-light-dim-text); + --btcpay-light-dim-text-hover: var(--btcpay-light-dim-text); + --btcpay-light-dim-text-active: var(--btcpay-neutral-100); + --btcpay-light-shadow: rgba(66, 70, 73, 0.33); + --btcpay-light-rgb: 33, 38, 45; + --btcpay-dark: var(--btcpay-neutral-200); + --btcpay-dark-accent: var(--btcpay-neutral-400); + --btcpay-dark-text: var(--btcpay-neutral-800); + --btcpay-dark-text-hover: var(--btcpay-neutral-800); + --btcpay-dark-text-active: var(--btcpay-neutral-800); + --btcpay-dark-bg-hover: var(--btcpay-dark-accent); + --btcpay-dark-bg-active: var(--btcpay-dark-accent); + --btcpay-dark-border: var(--btcpay-dark); + --btcpay-dark-border-hover: var(--btcpay-dark-bg-hover); + --btcpay-dark-border-active: var(--btcpay-dark-bg-active); + --btcpay-dark-dim-bg: var(--btcpay-white); + --btcpay-dark-dim-bg-striped: var(--btcpay-neutral-200); + --btcpay-dark-dim-bg-hover: var(--btcpay-neutral-200); + --btcpay-dark-dim-bg-active: var(--btcpay-neutral-300); + --btcpay-dark-dim-border: var(--btcpay-dark-dim-bg); + --btcpay-dark-dim-border-active: var(--btcpay-dark-dim-bg-active); + --btcpay-dark-dim-text: var(--btcpay-neutral-800); + --btcpay-dark-dim-text-striped: var(--btcpay-dark-dim-text); + --btcpay-dark-dim-text-hover: var(--btcpay-dark-dim-text); + --btcpay-dark-dim-text-active: var(--btcpay-neutral-900); + --btcpay-dark-shadow: rgba(211, 212, 213, 0.33); + --btcpay-dark-rgb: 201, 209, 217; +} + +@media (prefers-color-scheme: dark) { + :root:not([data-btcpay-theme],[data-theme]) { + --btcpay-neutral-100: var(--btcpay-neutral-dark-100); + --btcpay-neutral-200: var(--btcpay-neutral-dark-200); + --btcpay-neutral-300: var(--btcpay-neutral-dark-300); + --btcpay-neutral-400: var(--btcpay-neutral-dark-400); + --btcpay-neutral-500: var(--btcpay-neutral-dark-500); + --btcpay-neutral-600: var(--btcpay-neutral-dark-600); + --btcpay-neutral-700: var(--btcpay-neutral-dark-700); + --btcpay-neutral-800: var(--btcpay-neutral-dark-800); + --btcpay-neutral-900: var(--btcpay-neutral-dark-900); + --btcpay-neutral-950: #0D1117; + --btcpay-bg-dark: var(--btcpay-neutral-950); + --btcpay-bg-tile: var(--btcpay-bg-dark); + --btcpay-body-bg: var(--btcpay-neutral-900); + --btcpay-body-bg-light: var(--btcpay-neutral-950); + --btcpay-body-bg-medium: var(--btcpay-neutral-800); + --btcpay-body-bg-striped: var(--btcpay-neutral-800); + --btcpay-body-bg-hover: var(--btcpay-neutral-950); + --btcpay-body-bg-rgb: 41, 41, 41; + --btcpay-body-border-light: var(--btcpay-neutral-800); + --btcpay-body-border-medium: var(--btcpay-neutral-700); + --btcpay-body-text: var(--btcpay-white); + --btcpay-body-text-rgb: 255, 255, 255; + --btcpay-body-link-accent: var(--btcpay-primary-300); + --btcpay-form-bg: var(--btcpay-neutral-950); + --btcpay-form-bg-addon: var(--btcpay-neutral-700); + --btcpay-form-bg-disabled: var(--btcpay-neutral-800); + --btcpay-form-text: var(--btcpay-neutral-200); + --btcpay-form-text-label: var(--btcpay-neutral-100); + --btcpay-form-text-addon: var(--btcpay-neutral-300); + --btcpay-form-border: var(--btcpay-neutral-800); + --btcpay-form-border-check: var(--btcpay-neutral-600); + --btcpay-header-bg: var(--btcpay-bg-dark); + --btcpay-nav-link: var(--btcpay-neutral-500); + --btcpay-nav-link-accent: var(--btcpay-neutral-300); + --btcpay-nav-link-active: var(--btcpay-white); + --btcpay-footer-text: var(--btcpay-neutral-400); + --btcpay-footer-link: var(--btcpay-neutral-400); + --btcpay-footer-link-accent: var(--btcpay-neutral-200); + --btcpay-pre-bg: var(--btcpay-bg-dark); + --btcpay-secondary: transparent; + --btcpay-secondary-text-active: var(--btcpay-primary); + --btcpay-secondary-border: var(--btcpay-neutral-700); + --btcpay-secondary-rgb: 22, 27, 34; + --btcpay-light: var(--btcpay-neutral-800); + --btcpay-light-accent: var(--btcpay-black); + --btcpay-light-text: var(--btcpay-neutral-200); + --btcpay-light-text-hover: var(--btcpay-neutral-200); + --btcpay-light-text-active: var(--btcpay-neutral-200); + --btcpay-light-bg-hover: var(--btcpay-light-accent); + --btcpay-light-bg-active: var(--btcpay-light-accent); + --btcpay-light-border: var(--btcpay-light); + --btcpay-light-border-hover: var(--btcpay-light-bg-hover); + --btcpay-light-border-active: var(--btcpay-light-bg-active); + --btcpay-light-dim-bg: var(--btcpay-neutral-950); + --btcpay-light-dim-bg-striped: var(--btcpay-neutral-900); + --btcpay-light-dim-bg-hover: var(--btcpay-neutral-800); + --btcpay-light-dim-bg-active: var(--btcpay-neutral-700); + --btcpay-light-dim-border: var(--btcpay-light-dim-bg); + --btcpay-light-dim-border-active: var(--btcpay-light-dim-bg-active); + --btcpay-light-dim-text: var(--btcpay-neutral-200); + --btcpay-light-dim-text-striped: var(--btcpay-light-dim-text); + --btcpay-light-dim-text-hover: var(--btcpay-light-dim-text); + --btcpay-light-dim-text-active: var(--btcpay-neutral-100); + --btcpay-light-shadow: rgba(66, 70, 73, 0.33); + --btcpay-light-rgb: 33, 38, 45; + --btcpay-dark: var(--btcpay-neutral-200); + --btcpay-dark-accent: var(--btcpay-neutral-400); + --btcpay-dark-text: var(--btcpay-neutral-800); + --btcpay-dark-text-hover: var(--btcpay-neutral-800); + --btcpay-dark-text-active: var(--btcpay-neutral-800); + --btcpay-dark-bg-hover: var(--btcpay-dark-accent); + --btcpay-dark-bg-active: var(--btcpay-dark-accent); + --btcpay-dark-border: var(--btcpay-dark); + --btcpay-dark-border-hover: var(--btcpay-dark-bg-hover); + --btcpay-dark-border-active: var(--btcpay-dark-bg-active); + --btcpay-dark-dim-bg: var(--btcpay-white); + --btcpay-dark-dim-bg-striped: var(--btcpay-neutral-200); + --btcpay-dark-dim-bg-hover: var(--btcpay-neutral-200); + --btcpay-dark-dim-bg-active: var(--btcpay-neutral-300); + --btcpay-dark-dim-border: var(--btcpay-dark-dim-bg); + --btcpay-dark-dim-border-active: var(--btcpay-dark-dim-bg-active); + --btcpay-dark-dim-text: var(--btcpay-neutral-800); + --btcpay-dark-dim-text-striped: var(--btcpay-dark-dim-text); + --btcpay-dark-dim-text-hover: var(--btcpay-dark-dim-text); + --btcpay-dark-dim-text-active: var(--btcpay-neutral-900); + --btcpay-dark-shadow: rgba(211, 212, 213, 0.33); + --btcpay-dark-rgb: 201, 209, 217; + } +} diff --git a/PluginBuilder/wwwroot/svg/logo.svg b/PluginBuilder/wwwroot/svg/logo.svg new file mode 100644 index 0000000..acbadfe --- /dev/null +++ b/PluginBuilder/wwwroot/svg/logo.svg @@ -0,0 +1,10 @@ + diff --git a/README.md b/README.md new file mode 100644 index 0000000..406e00d --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# Introduction + +This project hosts a server with a front end which can be used to build BTCPay Server plugins and store the binaries on some storage. + +## Prerequisite: + +It assumes you installed docker on your system. + +## Configuration + +All parameters are configured via environment variables. + +* `PB_POSTGRES`: Connection to a postgres database (example: `User ID=postgres;Include Error Detail=true;Host=127.0.0.1;Port=61932;Database=blah`) \ No newline at end of file diff --git a/btcpayserver-plugin-builder.sln b/btcpayserver-plugin-builder.sln new file mode 100644 index 0000000..a82c978 --- /dev/null +++ b/btcpayserver-plugin-builder.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginBuilder.Tests", "PluginBuilder.Tests\PluginBuilder.Tests.csproj", "{973D71D2-B713-4A95-A98C-D714FFB98AC6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginBuilder", "PluginBuilder\PluginBuilder.csproj", "{A1928D9E-3939-42A7-BC39-01D7F2746C7B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluginBuilder.Targets", "PluginBuilder.Targets\PluginBuilder.Targets.csproj", "{D76DBE30-BEA4-4AF0-9CF4-D0781E127D2A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {973D71D2-B713-4A95-A98C-D714FFB98AC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {973D71D2-B713-4A95-A98C-D714FFB98AC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {973D71D2-B713-4A95-A98C-D714FFB98AC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {973D71D2-B713-4A95-A98C-D714FFB98AC6}.Release|Any CPU.Build.0 = Release|Any CPU + {A1928D9E-3939-42A7-BC39-01D7F2746C7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1928D9E-3939-42A7-BC39-01D7F2746C7B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1928D9E-3939-42A7-BC39-01D7F2746C7B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1928D9E-3939-42A7-BC39-01D7F2746C7B}.Release|Any CPU.Build.0 = Release|Any CPU + {D76DBE30-BEA4-4AF0-9CF4-D0781E127D2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D76DBE30-BEA4-4AF0-9CF4-D0781E127D2A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D76DBE30-BEA4-4AF0-9CF4-D0781E127D2A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D76DBE30-BEA4-4AF0-9CF4-D0781E127D2A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal