diff --git a/.gitignore b/.gitignore index cefdb845..3175fdb1 100644 --- a/.gitignore +++ b/.gitignore @@ -166,3 +166,6 @@ orleans.codegen.cs # Ignore AI plugin config files: /app/.idea/.idea.MindWork AI Studio/.idea/AugmentWebviewStateStore.xml + +# Ignore GitHub Copilot migration files: +**/copilot.data.migration.*.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..58e2b866 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,15 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/contentModel.xml +/modules.xml +/projectSettingsUpdater.xml +/.idea.mindwork-ai-studio.iml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 00000000..df87cf95 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/indexLayout.xml b/.idea/indexLayout.xml new file mode 100644 index 00000000..7b08163c --- /dev/null +++ b/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 14aba589..689378d2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,7 +13,7 @@ MindWork AI Studio is a cross-platform desktop application for interacting with - **Providers:** Multi-provider architecture supporting OpenAI, Anthropic, Google, Mistral, Perplexity, self-hosted models, and others - **Plugin System:** Lua-based plugin system for language packs, configuration, and future assistant plugins -## Building and Running +## Building ### Prerequisites - .NET 9 SDK @@ -22,39 +22,16 @@ MindWork AI Studio is a cross-platform desktop application for interacting with - Tauri prerequisites (platform-specific dependencies) - **Note:** Development on Linux is discouraged due to complex Tauri dependencies that vary by distribution -### One-Time Setup +### Build ```bash cd app/Build dotnet run build ``` This builds the .NET app as a Tauri "sidecar" binary, which is required even for development. -### Development Workflow -Run these commands in separate terminals: - -**Terminal 1 - Start Rust runtime:** -```bash -cd runtime -cargo tauri dev --no-watch -``` - -**Terminal 2 - Start .NET app:** -```bash -cd "app/MindWork AI Studio" -dotnet run -``` - -The app will start in the Tauri window. Hot reload is supported for .NET code changes. - -### Building for Production -```bash -cd app/Build -dotnet run build -``` -Creates a release build for the current platform and architecture. Output is in `runtime/target/release/`. ### Running Tests -Currently no automated test suite exists in the repository. +Currently, no automated test suite exists in the repository. ## Architecture Details @@ -125,6 +102,14 @@ Plugins can configure: - Preview features visibility - Preselected profiles - Chat templates +- etc. + +When adding configuration options, update: +- `app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs`: In method `TryProcessConfiguration` register new options. +- `app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs`: In method `LoadAll` check for leftover configuration. +- The corresponding data class in `app/MindWork AI Studio/Settings/DataModel/` to call `ManagedConfiguration.Register(...)`, when adding config options (in contrast to complex config. objects) +- `app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObject.cs` for parsing logic of complex configuration objects. +- `app/MindWork AI Studio/Plugins/configuration/plugin.lua` to document the new configuration option. ## RAG (Retrieval-Augmented Generation) diff --git a/LICENSE.md b/LICENSE.md index 1a963dc7..ce1a351d 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -6,7 +6,7 @@ FSL-1.1-MIT ## Notice -Copyright 2025 Thorsten Sommer +Copyright 2026 Thorsten Sommer ## Terms and Conditions diff --git a/README.md b/README.md index e8489aef..30536bcd 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,8 @@ Since March 2025: We have started developing the plugin system. There will be la +- v26.1.1: Added the option to attach files, including images, to chat templates; added support for source code file attachments in chats and document analysis; added a preview feature for recording your own voice for transcription; fixed various bugs in provider dialogs and profile selection. +- v0.10.0: Added support for newer models like Mistral 3 & GPT 5.2, OpenRouter as LLM and embedding provider, the possibility to use file attachments in chats, and support for images as input. - v0.9.51: Added support for [Perplexity](https://www.perplexity.ai/); citations added so that LLMs can provide source references (e.g., some OpenAI models, Perplexity); added support for OpenAI's Responses API so that all text LLMs from OpenAI now work in MindWork AI Studio, including Deep Research models; web searches are now possible (some OpenAI models, Perplexity). - v0.9.50: Added support for self-hosted LLMs using [vLLM](https://blog.vllm.ai/2023/06/20/vllm.html). - v0.9.46: Released our plugin system, a German language plugin, early support for enterprise environments, and configuration plugins. Additionally, we added the Pandoc integration for future data processing and file generation. @@ -89,8 +91,6 @@ Since March 2025: We have started developing the plugin system. There will be la - v0.9.31: Added Helmholtz & GWDG as LLM providers. This is a huge improvement for many researchers out there who can use these providers for free. We added DeepSeek as a provider as well. - v0.9.29: Added agents to support the RAG process (selecting the best data sources & validating retrieved data as part of the augmentation process) - v0.9.26+: Added RAG for external data sources using our [ERI interface](https://mindworkai.org/#eri---external-retrieval-interface) as a preview feature. -- v0.9.25: Added [xAI](https://x.ai/) as a new provider. xAI provides their Grok models for generating content. -- v0.9.23: Added support for OpenAI `o` models (`o1`, `o1-mini`, `o3`, etc.); added also an [ERI](https://github.com/MindWorkAI/ERI) server coding assistant as a preview feature behind the RAG feature flag. Your own ERI server can be used to gain access to, e.g., your enterprise data from within AI Studio. @@ -114,6 +114,7 @@ MindWork AI Studio is a free desktop app for macOS, Windows, and Linux. It provi - [xAI](https://x.ai/) (Grok) - [DeepSeek](https://www.deepseek.com/en) - [Alibaba Cloud](https://www.alibabacloud.com) (Qwen) + - [OpenRouter](https://openrouter.ai/) - [Hugging Face](https://huggingface.co/) using their [inference providers](https://huggingface.co/docs/inference-providers/index) such as Cerebras, Nebius, Sambanova, Novita, Hyperbolic, Together AI, Fireworks, Hugging Face - Self-hosted models using [llama.cpp](https://github.com/ggerganov/llama.cpp), [ollama](https://github.com/ollama/ollama), [LM Studio](https://lmstudio.ai/), and [vLLM](https://github.com/vllm-project/vllm) - [Groq](https://groq.com/) diff --git a/app/Build/Commands/PrepareAction.cs b/app/Build/Commands/PrepareAction.cs index 2f2ffcb2..5b383492 100644 --- a/app/Build/Commands/PrepareAction.cs +++ b/app/Build/Commands/PrepareAction.cs @@ -3,8 +3,10 @@ namespace Build.Commands; public enum PrepareAction { NONE, - - PATCH, - MINOR, - MAJOR, + + BUILD, + MONTH, + YEAR, + + SET, } \ No newline at end of file diff --git a/app/Build/Commands/UpdateMetadataCommands.cs b/app/Build/Commands/UpdateMetadataCommands.cs index cc5b6783..5ec929ab 100644 --- a/app/Build/Commands/UpdateMetadataCommands.cs +++ b/app/Build/Commands/UpdateMetadataCommands.cs @@ -13,13 +13,32 @@ namespace Build.Commands; public sealed partial class UpdateMetadataCommands { [Command("release", Description = "Prepare & build the next release")] - public async Task Release(PrepareAction action) + public async Task Release( + [Option("action", ['a'], Description = "The release action: patch, minor, or major")] PrepareAction action = PrepareAction.NONE, + [Option("version", ['v'], Description = "Set a specific version directly, e.g., 26.1.2")] string? version = null) { if(!Environment.IsWorkingDirectoryValid()) return; - + + // Validate parameters: either action or version must be specified, but not both: + if (action == PrepareAction.NONE && string.IsNullOrWhiteSpace(version)) + { + Console.WriteLine("- Error: You must specify either --action (-a) or --version (-v)."); + return; + } + + if (action != PrepareAction.NONE && !string.IsNullOrWhiteSpace(version)) + { + Console.WriteLine("- Error: You cannot specify both --action and --version. Please use only one."); + return; + } + + // If version is specified, use SET action: + if (!string.IsNullOrWhiteSpace(version)) + action = PrepareAction.SET; + // Prepare the metadata for the next release: - await this.PerformPrepare(action, true); + await this.PerformPrepare(action, true, version); // Build once to allow the Rust compiler to read the changed metadata // and to update all .NET artifacts: @@ -53,11 +72,30 @@ public sealed partial class UpdateMetadataCommands } [Command("prepare", Description = "Prepare the metadata for the next release")] - public async Task Prepare(PrepareAction action) + public async Task Prepare( + [Option("action", ['a'], Description = "The release action: patch, minor, or major")] PrepareAction action = PrepareAction.NONE, + [Option("version", ['v'], Description = "Set a specific version directly, e.g., 26.1.2")] string? version = null) { if(!Environment.IsWorkingDirectoryValid()) return; + // Validate parameters: either action or version must be specified, but not both: + if (action == PrepareAction.NONE && string.IsNullOrWhiteSpace(version)) + { + Console.WriteLine("- Error: You must specify either --action (-a) or --version (-v)."); + return; + } + + if (action != PrepareAction.NONE && !string.IsNullOrWhiteSpace(version)) + { + Console.WriteLine("- Error: You cannot specify both --action and --version. Please use only one."); + return; + } + + // If version is specified, use SET action: + if (!string.IsNullOrWhiteSpace(version)) + action = PrepareAction.SET; + Console.WriteLine("=============================="); Console.Write("- Are you trying to prepare a new release? (y/n) "); var userAnswer = Console.ReadLine(); @@ -66,18 +104,18 @@ public sealed partial class UpdateMetadataCommands Console.WriteLine("- Please use the 'release' command instead"); return; } - - await this.PerformPrepare(action, false); + + await this.PerformPrepare(action, false, version); } - private async Task PerformPrepare(PrepareAction action, bool internalCall) + private async Task PerformPrepare(PrepareAction action, bool internalCall, string? version = null) { if(internalCall) Console.WriteLine("=============================="); - + Console.WriteLine("- Prepare the metadata for the next release ..."); - - var appVersion = await this.UpdateAppVersion(action); + + var appVersion = await this.UpdateAppVersion(action, version); if (!string.IsNullOrWhiteSpace(appVersion.VersionText)) { var buildNumber = await this.IncreaseBuildNumber(); @@ -90,7 +128,7 @@ public sealed partial class UpdateMetadataCommands await this.UpdateTauriVersion(); await this.UpdateProjectCommitHash(); await this.UpdateLicenceYear(Path.GetFullPath(Path.Combine(Environment.GetAIStudioDirectory(), "..", "..", "LICENSE.md"))); - await this.UpdateLicenceYear(Path.GetFullPath(Path.Combine(Environment.GetAIStudioDirectory(), "Pages", "About.razor.cs"))); + await this.UpdateLicenceYear(Path.GetFullPath(Path.Combine(Environment.GetAIStudioDirectory(), "Pages", "Information.razor.cs"))); Console.WriteLine(); } } @@ -242,17 +280,6 @@ public sealed partial class UpdateMetadataCommands var pathChangelogs = Path.Combine(Environment.GetAIStudioDirectory(), "wwwroot", "changelog"); var nextBuildNumber = currentBuildNumber + 1; - // - // We assume that most of the time, there will be patch releases: - // - var nextMajor = currentAppVersion.Major; - var nextMinor = currentAppVersion.Minor; - var nextPatch = currentAppVersion.Patch + 1; - - var nextAppVersion = $"{nextMajor}.{nextMinor}.{nextPatch}"; - var nextChangelogFilename = $"v{nextAppVersion}.md"; - var nextChangelogFilePath = Path.Combine(pathChangelogs, nextChangelogFilename); - // // Regarding the next build time: We assume that the next release will take place in one week from now. // Thus, we check how many days this month has left. In the end, we want to predict the year and month @@ -262,6 +289,19 @@ public sealed partial class UpdateMetadataCommands var nextBuildYear = (DateTime.Today + TimeSpan.FromDays(7)).Year; var nextBuildTimeString = $"{nextBuildYear}-{nextBuildMonth:00}-xx xx:xx UTC"; + // + // We assume that most of the time, there will be patch releases: + // + // skipping the first 2 digits for major version + var nextBuildYearShort = nextBuildYear - 2000; + var nextMajor = nextBuildYearShort; + var nextMinor = nextBuildMonth; + var nextPatch = currentAppVersion.Major != nextBuildYearShort || currentAppVersion.Minor != nextBuildMonth ? 1 : currentAppVersion.Patch + 1; + + var nextAppVersion = $"{nextMajor}.{nextMinor}.{nextPatch}"; + var nextChangelogFilename = $"v{nextAppVersion}.md"; + var nextChangelogFilePath = Path.Combine(pathChangelogs, nextChangelogFilename); + var changelogHeader = $""" # v{nextAppVersion}, build {nextBuildNumber} ({nextBuildTimeString}) @@ -368,49 +408,69 @@ public sealed partial class UpdateMetadataCommands await File.WriteAllLinesAsync(pathMetadata, lines, Environment.UTF8_NO_BOM); } - private async Task UpdateAppVersion(PrepareAction action) + private async Task UpdateAppVersion(PrepareAction action, string? version = null) { const int APP_VERSION_INDEX = 0; - + if (action == PrepareAction.NONE) { Console.WriteLine("- No action specified. Skipping app version update."); return new(string.Empty, 0, 0, 0); } - + var pathMetadata = Environment.GetMetadataPath(); var lines = await File.ReadAllLinesAsync(pathMetadata, Encoding.UTF8); var currentAppVersionLine = lines[APP_VERSION_INDEX].Trim(); - var currentAppVersion = AppVersionRegex().Match(currentAppVersionLine); - var currentPatch = int.Parse(currentAppVersion.Groups["patch"].Value); - var currentMinor = int.Parse(currentAppVersion.Groups["minor"].Value); - var currentMajor = int.Parse(currentAppVersion.Groups["major"].Value); - - switch (action) + + int newMajor, newMinor, newPatch; + if (action == PrepareAction.SET && !string.IsNullOrWhiteSpace(version)) { - case PrepareAction.PATCH: - currentPatch++; - break; - - case PrepareAction.MINOR: - currentPatch = 0; - currentMinor++; - break; - - case PrepareAction.MAJOR: - currentPatch = 0; - currentMinor = 0; - currentMajor++; - break; + // Parse the provided version string: + var versionMatch = AppVersionRegex().Match(version); + if (!versionMatch.Success) + { + Console.WriteLine($"- Error: Invalid version format '{version}'. Expected format: major.minor.patch (e.g., 26.1.2)"); + return new(string.Empty, 0, 0, 0); + } + + newMajor = int.Parse(versionMatch.Groups["major"].Value); + newMinor = int.Parse(versionMatch.Groups["minor"].Value); + newPatch = int.Parse(versionMatch.Groups["patch"].Value); } - - var updatedAppVersion = $"{currentMajor}.{currentMinor}.{currentPatch}"; + else + { + // Parse current version and increment based on action: + var currentAppVersion = AppVersionRegex().Match(currentAppVersionLine); + newPatch = int.Parse(currentAppVersion.Groups["patch"].Value); + newMinor = int.Parse(currentAppVersion.Groups["minor"].Value); + newMajor = int.Parse(currentAppVersion.Groups["major"].Value); + + switch (action) + { + case PrepareAction.BUILD: + newPatch++; + break; + + case PrepareAction.MONTH: + newPatch = 1; + newMinor++; + break; + + case PrepareAction.YEAR: + newPatch = 1; + newMinor = 1; + newMajor++; + break; + } + } + + var updatedAppVersion = $"{newMajor}.{newMinor}.{newPatch}"; Console.WriteLine($"- Updating app version from '{currentAppVersionLine}' to '{updatedAppVersion}'."); - + lines[APP_VERSION_INDEX] = updatedAppVersion; await File.WriteAllLinesAsync(pathMetadata, lines, Environment.UTF8_NO_BOM); - - return new(updatedAppVersion, currentMajor, currentMinor, currentPatch); + + return new(updatedAppVersion, newMajor, newMinor, newPatch); } private async Task UpdateLicenceYear(string licenceFilePath) diff --git a/app/MindWork AI Studio.sln.DotSettings b/app/MindWork AI Studio.sln.DotSettings index a304dae6..51ce5109 100644 --- a/app/MindWork AI Studio.sln.DotSettings +++ b/app/MindWork AI Studio.sln.DotSettings @@ -6,6 +6,7 @@ GWDG HF IERI + IMIME LLM LM MSG @@ -18,10 +19,12 @@ URL I18N True + True True True True True + True True True True diff --git a/app/MindWork AI Studio/Agents/AgentDataSourceSelection.cs b/app/MindWork AI Studio/Agents/AgentDataSourceSelection.cs index 778fafb9..f7947462 100644 --- a/app/MindWork AI Studio/Agents/AgentDataSourceSelection.cs +++ b/app/MindWork AI Studio/Agents/AgentDataSourceSelection.cs @@ -159,7 +159,9 @@ public sealed class AgentDataSourceSelection (ILogger ContentText text => text.Text, // Image prompts may be empty, e.g., when the image is too large: - ContentImage image => await image.AsBase64(token), + ContentImage image => await image.TryAsBase64(token) is (success: true, { } base64Image) + ? base64Image + : string.Empty, // Other content types are not supported yet: _ => string.Empty, diff --git a/app/MindWork AI Studio/Agents/AgentRetrievalContextValidation.cs b/app/MindWork AI Studio/Agents/AgentRetrievalContextValidation.cs index 7496301f..ee2437d9 100644 --- a/app/MindWork AI Studio/Agents/AgentRetrievalContextValidation.cs +++ b/app/MindWork AI Studio/Agents/AgentRetrievalContextValidation.cs @@ -219,7 +219,9 @@ public sealed class AgentRetrievalContextValidation (ILogger text.Text, // Image prompts may be empty, e.g., when the image is too large: - ContentImage image => await image.AsBase64(token), + ContentImage image => await image.TryAsBase64(token) is (success: true, { } base64Image) + ? base64Image + : string.Empty, // Other content types are not supported yet: _ => string.Empty, diff --git a/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs b/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs index de346761..87d451fb 100644 --- a/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs +++ b/app/MindWork AI Studio/Assistants/AssistantBase.razor.cs @@ -217,12 +217,13 @@ public abstract partial class AssistantBase : AssistantLowerBase wher return chatId; } - protected DateTimeOffset AddUserRequest(string request, bool hideContentFromUser = false) + protected DateTimeOffset AddUserRequest(string request, bool hideContentFromUser = false, params List attachments) { var time = DateTimeOffset.Now; this.lastUserPrompt = new ContentText { Text = request, + FileAttachments = attachments, }; this.chatThread!.Blocks.Add(new ContentBlock diff --git a/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor b/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor index 4b68618a..64d549a9 100644 --- a/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor +++ b/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor @@ -103,7 +103,7 @@ else @T("Documents for the analysis") - + diff --git a/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor.cs b/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor.cs index 994bafa8..d0265178 100644 --- a/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor.cs +++ b/app/MindWork AI Studio/Assistants/DocumentAnalysis/DocumentAnalysisAssistant.razor.cs @@ -1,3 +1,5 @@ +using System.Text; + using AIStudio.Chat; using AIStudio.Dialogs; using AIStudio.Dialogs.Settings; @@ -34,11 +36,13 @@ public partial class DocumentAnalysisAssistant : AssistantBaseCore - this.loadedDocumentPaths.Count > 1 - ? $"Your task is to analyze {this.loadedDocumentPaths.Count} DOCUMENTS. Different DOCUMENTS are divided by a horizontal rule in markdown formatting followed by the name of the document." - : "Your task is to analyze a single document."; + private string GetDocumentTaskDescription() + { + var numDocuments = this.loadedDocumentPaths.Count(x => x is { Exists: true, IsImage: false }); + var numImages = this.loadedDocumentPaths.Count(x => x is { Exists: true, IsImage: true }); + + return (numDocuments, numImages) switch + { + (0, 1) => "Your task is to analyze a single image file attached as a document.", + (0, > 1) => $"Your task is to analyze {numImages} image file(s) attached as documents.", + + (1, 0) => "Your task is to analyze a single DOCUMENT.", + (1, 1) => "Your task is to analyze a single DOCUMENT and 1 image file attached as a document.", + (1, > 1) => $"Your task is to analyze a single DOCUMENT and {numImages} image file(s) attached as documents.", + + (> 0, 0) => $"Your task is to analyze {numDocuments} DOCUMENTS. Different DOCUMENTS are divided by a horizontal rule in markdown formatting followed by the name of the document.", + (> 0, 1) => $"Your task is to analyze {numDocuments} DOCUMENTS and 1 image file attached as a document. Different DOCUMENTS are divided by a horizontal rule in Markdown formatting followed by the name of the document.", + (> 0, > 0) => $"Your task is to analyze {numDocuments} DOCUMENTS and {numImages} image file(s) attached as documents. Different DOCUMENTS are divided by a horizontal rule in Markdown formatting followed by the name of the document.", + + _ => "Your task is to analyze a single DOCUMENT." + }; + } protected override IReadOnlyList FooterButtons => []; @@ -185,7 +206,7 @@ public partial class DocumentAnalysisAssistant : AssistantBaseCore loadedDocumentPaths = []; + private HashSet loadedDocumentPaths = []; private bool IsNoPolicySelectedOrProtected => this.selectedPolicy is null || this.selectedPolicy.IsProtected; @@ -327,31 +348,68 @@ public partial class DocumentAnalysisAssistant : AssistantBaseCore(); - var count = 1; + var documents = this.loadedDocumentPaths.Where(n => n is { Exists: true, IsImage: false }).ToList(); + var sb = new StringBuilder(); - foreach (var documentPath in this.loadedDocumentPaths) + if (documents.Count > 0) { - var fileContent = await this.RustService.ReadArbitraryFileData(documentPath, int.MaxValue); - - documentSections.Add($""" - ## DOCUMENT {count}: - File path: {documentPath} - Content: - ``` - {fileContent} - ``` + sb.AppendLine(""" + # DOCUMENTS: - --- - """); - count++; + """); } - return $""" - # DOCUMENTS: + var numDocuments = 1; + foreach (var document in documents) + { + if (document.IsForbidden) + { + this.Logger.LogWarning($"Skipping forbidden file: '{document.FilePath}'."); + continue; + } - {string.Join("\n", documentSections)} - """; + var fileContent = await this.RustService.ReadArbitraryFileData(document.FilePath, int.MaxValue); + sb.AppendLine($""" + + ## DOCUMENT {numDocuments}: + File path: {document.FilePath} + Content: + ``` + {fileContent} + ``` + + --- + + """); + numDocuments++; + } + + var numImages = this.loadedDocumentPaths.Count(x => x is { IsImage: true, Exists: true }); + if (numImages > 0) + { + if (documents.Count == 0) + { + sb.AppendLine($""" + + There are {numImages} image file(s) attached as documents. + Please consider them as documents as well and use them to + answer accordingly. + + """); + } + else + { + sb.AppendLine($""" + + Additionally, there are {numImages} image file(s) attached. + Please consider them as documents as well and use them to + answer accordingly. + + """); + } + } + + return sb.ToString(); } private async Task Analyze() @@ -364,7 +422,9 @@ public partial class DocumentAnalysisAssistant : AssistantBaseCore n is { Exists: true, IsImage: true }).ToList()); await this.AddAIResponseAsync(userRequest); } diff --git a/app/MindWork AI Studio/Assistants/I18N/AssistantI18N.razor.cs b/app/MindWork AI Studio/Assistants/I18N/AssistantI18N.razor.cs index 28c00568..a00ff8b4 100644 --- a/app/MindWork AI Studio/Assistants/I18N/AssistantI18N.razor.cs +++ b/app/MindWork AI Studio/Assistants/I18N/AssistantI18N.razor.cs @@ -56,10 +56,18 @@ public partial class AssistantI18N : AssistantBaseCore [ new ButtonData { + #if DEBUG + Text = T("Write Lua code to language plugin file"), + #else Text = T("Copy Lua code to clipboard"), + #endif Icon = Icons.Material.Filled.Extension, Color = Color.Default, + #if DEBUG + AsyncAction = async () => await this.WriteToPluginFile(), + #else AsyncAction = async () => await this.RustService.CopyText2Clipboard(this.Snackbar, this.finalLuaCode.ToString()), + #endif DisabledActionParam = () => this.finalLuaCode.Length == 0, }, ]; @@ -368,10 +376,71 @@ public partial class AssistantI18N : AssistantBaseCore { this.finalLuaCode.Clear(); LuaTable.Create(ref this.finalLuaCode, "UI_TEXT_CONTENT", this.localizedContent, commentContent, this.cancellationTokenSource!.Token); - + // Next, we must remove the `root::` prefix from the keys: this.finalLuaCode.Replace("""UI_TEXT_CONTENT["root::""", """ UI_TEXT_CONTENT[" """); } + + #if DEBUG + private async Task WriteToPluginFile() + { + if (this.selectedLanguagePlugin is null) + { + this.Snackbar.Add(T("No language plugin selected."), Severity.Error); + return; + } + + if (this.finalLuaCode.Length == 0) + { + this.Snackbar.Add(T("No Lua code generated yet."), Severity.Error); + return; + } + + try + { + // Determine the plugin file path based on the selected language plugin: + var pluginDirectory = Path.Join(Environment.CurrentDirectory, "Plugins", "languages"); + var pluginId = this.selectedLanguagePluginId.ToString(); + var ietfTag = this.selectedLanguagePlugin.IETFTag.ToLowerInvariant(); + var pluginFolderName = $"{ietfTag}-{pluginId}"; + var pluginFilePath = Path.Join(pluginDirectory, pluginFolderName, "plugin.lua"); + + if (!File.Exists(pluginFilePath)) + { + this.Logger.LogError("Plugin file not found: {PluginFilePath}.", pluginFilePath); + this.Snackbar.Add(T("Plugin file not found."), Severity.Error); + return; + } + + // Read the existing plugin file: + var existingContent = await File.ReadAllTextAsync(pluginFilePath); + + // Find the position of "UI_TEXT_CONTENT = {}": + const string MARKER = "UI_TEXT_CONTENT = {}"; + var markerIndex = existingContent.IndexOf(MARKER, StringComparison.Ordinal); + + if (markerIndex == -1) + { + this.Logger.LogError("Could not find 'UI_TEXT_CONTENT = {{}}' marker in plugin file: {PluginFilePath}", pluginFilePath); + this.Snackbar.Add(T("Could not find 'UI_TEXT_CONTENT = {}' marker in plugin file."), Severity.Error); + return; + } + + // Keep everything before the marker and replace everything from the marker onwards: + var metadataSection = existingContent[..markerIndex]; + var newContent = metadataSection + this.finalLuaCode; + + // Write the updated content back to the file: + await File.WriteAllTextAsync(pluginFilePath, newContent); + this.Snackbar.Add(T("Successfully updated plugin file."), Severity.Success); + } + catch (Exception ex) + { + this.Logger.LogError(ex, "Error writing to plugin file."); + this.Snackbar.Add(T("Error writing to plugin file."), Severity.Error); + } + } + #endif } \ No newline at end of file diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua index 8a4bd3d9..1ec8c022 100644 --- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua +++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua @@ -1042,21 +1042,36 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1214535771"] = "Rem -- Added Content ({0} entries) UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1258080997"] = "Added Content ({0} entries)" +-- No Lua code generated yet. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1365137848"] = "No Lua code generated yet." + -- Localized Content ({0} entries of {1}) UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1492071634"] = "Localized Content ({0} entries of {1})" -- Select the language plugin used for comparision. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1523568309"] = "Select the language plugin used for comparision." +-- Successfully updated plugin file. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1524590750"] = "Successfully updated plugin file." + -- Was not able to load the language plugin for comparison ({0}). Please select a valid, loaded & running language plugin. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1893011391"] = "Was not able to load the language plugin for comparison ({0}). Please select a valid, loaded & running language plugin." +-- No language plugin selected. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T237325294"] = "No language plugin selected." + -- Target language UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T237828418"] = "Target language" +-- Write Lua code to language plugin file +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T253827221"] = "Write Lua code to language plugin file" + -- Language plugin used for comparision UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T263317578"] = "Language plugin used for comparision" +-- Plugin file not found. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T2938065913"] = "Plugin file not found." + -- Localize AI Studio & generate the Lua code UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T3055634395"] = "Localize AI Studio & generate the Lua code" @@ -1087,6 +1102,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T453060723"] = "The -- The selected language plugin for comparison uses the IETF tag '{0}' which does not match the selected target language '{1}'. Please select a valid, loaded & running language plugin which matches the target language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T458999393"] = "The selected language plugin for comparison uses the IETF tag '{0}' which does not match the selected target language '{1}'. Please select a valid, loaded & running language plugin which matches the target language." +-- Could not find 'UI_TEXT_CONTENT = {}' marker in plugin file. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T628596031"] = "Could not find 'UI_TEXT_CONTENT = {}' marker in plugin file." + -- Please provide a custom language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T656744944"] = "Please provide a custom language." @@ -1096,6 +1114,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T851515643"] = "Plea -- Localization UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T897888480"] = "Localization" +-- Error writing to plugin file. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T948564909"] = "Error writing to plugin file." + -- Your icon source UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ICONFINDER::ASSISTANTICONFINDER::T1302165948"] = "Your icon source" @@ -1492,36 +1513,45 @@ UI_TEXT_CONTENT["AISTUDIO::CHAT::CONTENTBLOCKCOMPONENT::T4188329028"] = "No, kee -- Export Chat to Microsoft Word UI_TEXT_CONTENT["AISTUDIO::CHAT::CONTENTBLOCKCOMPONENT::T861873672"] = "Export Chat to Microsoft Word" +-- The local image file does not exist. Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T255679918"] = "The local image file does not exist. Skipping the image." + +-- Failed to download the image from the URL. Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T2996654916"] = "Failed to download the image from the URL. Skipping the image." + +-- The local image file is too large (>10 MB). Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T3219823625"] = "The local image file is too large (>10 MB). Skipping the image." + +-- The image at the URL is too large (>10 MB). Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T349928509"] = "The image at the URL is too large (>10 MB). Skipping the image." + -- Open Settings UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ASSISTANTBLOCK::T1172211894"] = "Open Settings" +-- Click the paperclip to attach files, or click the number to see your attached files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1358313858"] = "Click the paperclip to attach files, or click the number to see your attached files." + +-- Drop files here to attach them. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T143112277"] = "Drop files here to attach them." + +-- Click here to attach files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1875575968"] = "Click here to attach files." + -- Drag and drop files into the marked area or click here to attach documents: UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T230755331"] = "Drag and drop files into the marked area or click here to attach documents:" +-- Select files to attach +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T2495931372"] = "Select files to attach" + -- Document Preview UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T285154968"] = "Document Preview" --- Videos are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T2928927510"] = "Videos are not supported yet" - --- Images are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T298062956"] = "Images are not supported yet" - --- Click to attach files -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3521845090"] = "Click to attach files" - -- Clear file list UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3759696136"] = "Clear file list" -- Add file UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T4014053962"] = "Add file" --- Executables are not allowed -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T4167762413"] = "Executables are not allowed" - --- Select a file to attach -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T595772870"] = "Select a file to attach" - -- Changelog UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHANGELOG::T3017574265"] = "Changelog" @@ -1822,21 +1852,12 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T900237532"] = "Provid -- Failed to load file content UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T1989554334"] = "Failed to load file content" --- Videos are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T2928927510"] = "Videos are not supported yet" - --- Images are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T298062956"] = "Images are not supported yet" - -- Use file content as input UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T3499386973"] = "Use file content as input" -- Select file to read its content UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T354817589"] = "Select file to read its content" --- Executables are not allowed -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T4167762413"] = "Executables are not allowed" - -- The content is cleaned using an LLM agent: the main content is extracted, advertisements and other irrelevant things are attempted to be removed; relative links are attempted to be converted into absolute links so that they can be used. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READWEBCONTENT::T1164201762"] = "The content is cleaned using an LLM agent: the main content is extracted, advertisements and other irrelevant things are attempted to be removed; relative links are attempted to be converted into absolute links so that they can be used." @@ -2002,6 +2023,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1599198973"] -- Would you like to set one of your profiles as the default for the entire app? When you configure a different profile for an assistant, it will always take precedence. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1666052109"] = "Would you like to set one of your profiles as the default for the entire app? When you configure a different profile for an assistant, it will always take precedence." +-- Select a transcription provider for transcribing your voice. Without a selected provider, dictation and transcription features will be disabled. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1834486728"] = "Select a transcription provider for transcribing your voice. Without a selected provider, dictation and transcription features will be disabled." + -- Select the language behavior for the app. The default is to use the system language. You might want to choose a language manually? UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T186780842"] = "Select the language behavior for the app. The default is to use the system language. You might want to choose a language manually?" @@ -2014,6 +2038,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1898060643"] -- Select the language for the app. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1907446663"] = "Select the language for the app." +-- Disable dictation and transcription +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T215381891"] = "Disable dictation and transcription" + -- Language behavior UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2341504363"] = "Language behavior" @@ -2044,6 +2071,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T4004501229"] -- When enabled, spellchecking will be active in all input fields. Depending on your operating system, errors may not be visually highlighted, but right-clicking may still offer possible corrections. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T4067492921"] = "When enabled, spellchecking will be active in all input fields. Depending on your operating system, errors may not be visually highlighted, but right-clicking may still offer possible corrections." +-- Select a transcription provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T4174666315"] = "Select a transcription provider" + -- Navigation bar behavior UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T602293588"] = "Navigation bar behavior" @@ -2086,24 +2116,30 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T24199 -- Name UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T266367750"] = "Name" +-- Configured Embedding Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T305753126"] = "Configured Embedding Providers" + -- This helps AI Studio understand and compare things in a way that's similar to how humans do. When you're working on something, AI Studio can automatically identify related documents and data by comparing their digital fingerprints. For instance, if you're writing about customer service, AI Studio can instantly find other documents in your data that discuss similar topics or experiences, even if they use different words. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3251217940"] = "This helps AI Studio understand and compare things in a way that's similar to how humans do. When you're working on something, AI Studio can automatically identify related documents and data by comparing their digital fingerprints. For instance, if you're writing about customer service, AI Studio can instantly find other documents in your data that discuss similar topics or experiences, even if they use different words." -- Edit UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3267849393"] = "Edit" --- Configured Embeddings -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3526613453"] = "Configured Embeddings" - -- Actions UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3865031940"] = "Actions" +-- This embedding provider is managed by your organization. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T4062656589"] = "This embedding provider is managed by your organization." + -- No embeddings configured yet. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T4068015588"] = "No embeddings configured yet." -- Edit Embedding Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T4264602229"] = "Edit Embedding Provider" +-- Configure Embedding Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T488419116"] = "Configure Embedding Providers" + -- Delete Embedding Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T511304264"] = "Delete Embedding Provider" @@ -2113,9 +2149,6 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T78223 -- Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T900237532"] = "Provider" --- Configure Embeddings -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T970042679"] = "Configure Embeddings" - -- Show provider's confidence level? UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1052533048"] = "Show provider's confidence level?" @@ -2134,6 +2167,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T172585 -- Add Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1806589097"] = "Add Provider" +-- Configure LLM Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1810190350"] = "Configure LLM Providers" + -- Edit LLM Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1868766523"] = "Edit LLM Provider" @@ -2167,8 +2203,8 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T284206 -- No providers configured yet. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T2911731076"] = "No providers configured yet." --- Configure Providers -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3027859089"] = "Configure Providers" +-- Configured LLM Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3019870540"] = "Configured LLM Providers" -- as selected by provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3082210376"] = "as selected by provider" @@ -2191,9 +2227,6 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T361241 -- No, do not enforce a minimum confidence level UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3642102079"] = "No, do not enforce a minimum confidence level" --- Configured Providers -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3850871263"] = "Configured Providers" - -- Actions UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3865031940"] = "Actions" @@ -2221,6 +2254,57 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T853225 -- Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T900237532"] = "Provider" +-- No transcription provider configured yet. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1079350363"] = "No transcription provider configured yet." + +-- Edit Transcription Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1317362918"] = "Edit Transcription Provider" + +-- Delete +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1469573738"] = "Delete" + +-- Add transcription provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1645238629"] = "Add transcription provider" + +-- Add Transcription Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T2066315685"] = "Add Transcription Provider" + +-- Model +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T2189814010"] = "Model" + +-- Name +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T266367750"] = "Name" + +-- Edit +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T3267849393"] = "Edit" + +-- Delete Transcription Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T370103955"] = "Delete Transcription Provider" + +-- Actions +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T3865031940"] = "Actions" + +-- Configure Transcription Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T4073110625"] = "Configure Transcription Providers" + +-- Configured Transcription Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T4210863523"] = "Configured Transcription Providers" + +-- With the support of transcription models, MindWork AI Studio can convert human speech into text. This is useful, for example, when you need to dictate text. You can choose from dedicated transcription models, but not multimodal LLMs (large language models) that can handle both speech and text. The configuration of multimodal models is done in the 'Configure providers' section. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T584860404"] = "With the support of transcription models, MindWork AI Studio can convert human speech into text. This is useful, for example, when you need to dictate text. You can choose from dedicated transcription models, but not multimodal LLMs (large language models) that can handle both speech and text. The configuration of multimodal models is done in the 'Configure providers' section." + +-- This transcription provider is managed by your organization. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T756131076"] = "This transcription provider is managed by your organization." + +-- Open Dashboard +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T78223861"] = "Open Dashboard" + +-- Are you sure you want to delete the transcription provider '{0}'? +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T789660305"] = "Are you sure you want to delete the transcription provider '{0}'?" + +-- Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T900237532"] = "Provider" + -- Copy {0} to the clipboard UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::TEXTINFOLINE::T2206391442"] = "Copy {0} to the clipboard" @@ -2302,6 +2386,33 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VISION::T428040679"] = "Content creation" -- Useful assistants UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VISION::T586430036"] = "Useful assistants" +-- Failed to create the transcription provider. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T1689988905"] = "Failed to create the transcription provider." + +-- Stop recording and start transcription +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T224155287"] = "Stop recording and start transcription" + +-- Start recording your voice for a transcription +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T2372624045"] = "Start recording your voice for a transcription" + +-- Transcription in progress... +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T2851219233"] = "Transcription in progress..." + +-- The configured transcription provider was not found. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T331613105"] = "The configured transcription provider was not found." + +-- The configured transcription provider does not meet the minimum confidence level. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T3834149033"] = "The configured transcription provider does not meet the minimum confidence level." + +-- An error occurred during transcription. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T588743762"] = "An error occurred during transcription." + +-- No transcription provider is configured. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T663630295"] = "No transcription provider is configured." + +-- The transcription result is empty. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T974954792"] = "The transcription result is empty." + -- Are you sure you want to delete the chat '{0}' in the workspace '{1}'? UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::WORKSPACES::T1016188706"] = "Are you sure you want to delete the chat '{0}' in the workspace '{1}'?" @@ -2422,6 +2533,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2147062613"] = "Profile -- Add messages of an example conversation (user prompt followed by assistant prompt) to demonstrate the desired interaction pattern. These examples help the AI understand your expectations by showing it the correct format, style, and content of responses before it receives actual user inputs. UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2292424657"] = "Add messages of an example conversation (user prompt followed by assistant prompt) to demonstrate the desired interaction pattern. These examples help the AI understand your expectations by showing it the correct format, style, and content of responses before it receives actual user inputs." +-- File Attachments +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2294745309"] = "File Attachments" + -- Role UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2418769465"] = "Role" @@ -2461,6 +2575,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3016903701"] = "The nam -- Image content UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3094908719"] = "Image content" +-- You can attach files that will be automatically included when using this chat template. These files will be added to the first message sent in any chat using this template. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3108503534"] = "You can attach files that will be automatically included when using this chat template. These files will be added to the first message sent in any chat using this template." + -- Are you unsure which system prompt to use? You might start with the default system prompt that AI Studio uses for all chats. UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3127437308"] = "Are you unsure which system prompt to use? You might start with the default system prompt that AI Studio uses for all chats." @@ -2953,6 +3070,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T1373123357"] = "Markdo -- Load file UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T2129302565"] = "Load file" +-- Image View +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T2199753423"] = "Image View" + -- See how we load your file. Review the content before we process it further. UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T3271853346"] = "See how we load your file. Review the content before we process it further." @@ -2971,6 +3091,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T652739927"] = "This is -- File Path UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T729508546"] = "File Path" +-- The specified file could not be found. The file have been moved, deleted, renamed, or is otherwise inaccessible. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T973777830"] = "The specified file could not be found. The file have been moved, deleted, renamed, or is otherwise inaccessible." + -- Embedding Name UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGMETHODDIALOG::T1427271797"] = "Embedding Name" @@ -3067,9 +3190,6 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2189814010"] = "Mo -- (Optional) API Key UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2331453405"] = "(Optional) API Key" --- Currently, we cannot query the embedding models of self-hosted systems. Therefore, enter the model name manually. -UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2615586687"] = "Currently, we cannot query the embedding models of self-hosted systems. Therefore, enter the model name manually." - -- Add UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2646845972"] = "Add" @@ -3079,6 +3199,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2810182573"] = "No -- Instance Name UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2842060373"] = "Instance Name" +-- Currently, we cannot query the embedding models for the selected provider and/or host. Therefore, please enter the model name manually. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T290547799"] = "Currently, we cannot query the embedding models for the selected provider and/or host. Therefore, please enter the model name manually." + -- Model selection UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T416738168"] = "Model selection" @@ -3289,6 +3412,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3361153305"] = "Show Expert -- Show available models UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3763891899"] = "Show available models" +-- Currently, we cannot query the models for the selected provider and/or host. Therefore, please enter the model name manually. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T4116737656"] = "Currently, we cannot query the models for the selected provider and/or host. Therefore, please enter the model name manually." + -- Model selection UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T416738168"] = "Model selection" @@ -3415,6 +3541,33 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T900713019"] = "Canc -- Embeddings UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T951463987"] = "Embeddings" +-- Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T1746160064"] = "Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon." + +-- There aren't any file attachments available right now. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T2111340711"] = "There aren't any file attachments available right now." + +-- Document Preview +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T285154968"] = "Document Preview" + +-- The file was deleted, renamed, or moved. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3083729256"] = "The file was deleted, renamed, or moved." + +-- Your attached file. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3154198222"] = "Your attached file." + +-- Preview what we send to the AI. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3160778981"] = "Preview what we send to the AI." + +-- Close +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3448155331"] = "Close" + +-- Your attached files +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3909191077"] = "Your attached files" + +-- Remove this attachment. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3933470258"] = "Remove this attachment." + -- There is no social event UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGAGENDA::T1222800281"] = "There is no social event" @@ -4438,6 +4591,60 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T4030229154"] = "Your Inp -- Cancel UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T900713019"] = "Cancel" +-- Failed to store the API key in the operating system. The message was: {0}. Please try again. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1122745046"] = "Failed to store the API key in the operating system. The message was: {0}. Please try again." + +-- API Key +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1324664716"] = "API Key" + +-- Create account +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1356621346"] = "Create account" + +-- Currently, we cannot query the transcription models for the selected provider and/or host. Therefore, please enter the model name manually. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1381635232"] = "Currently, we cannot query the transcription models for the selected provider and/or host. Therefore, please enter the model name manually." + +-- Hostname +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1727440780"] = "Hostname" + +-- Load +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1756340745"] = "Load" + +-- Update +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1847791252"] = "Update" + +-- Failed to load the API key from the operating system. The message was: {0}. You might ignore this message and provide the API key again. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1870831108"] = "Failed to load the API key from the operating system. The message was: {0}. You might ignore this message and provide the API key again." + +-- Model +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2189814010"] = "Model" + +-- (Optional) API Key +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2331453405"] = "(Optional) API Key" + +-- Add +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2646845972"] = "Add" + +-- No models loaded or available. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2810182573"] = "No models loaded or available." + +-- Instance Name +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2842060373"] = "Instance Name" + +-- Please enter a transcription model name. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T3703662664"] = "Please enter a transcription model name." + +-- Model selection +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T416738168"] = "Model selection" + +-- Host +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T808120719"] = "Host" + +-- Provider +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T900237532"] = "Provider" + +-- Cancel +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T900713019"] = "Cancel" + -- Install now UI_TEXT_CONTENT["AISTUDIO::DIALOGS::UPDATEDIALOG::T2366359512"] = "Install now" @@ -4456,9 +4663,6 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1258653480"] = "Settings" -- Home UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1391791790"] = "Home" --- About -UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1491113694"] = "About" - -- Are you sure you want to leave the chat page? All unsaved changes will be lost. UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1563130494"] = "Are you sure you want to leave the chat page? All unsaved changes will be lost." @@ -4489,252 +4693,12 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2979224202"] = "Writer" -- Show details UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T3692372066"] = "Show details" +-- Information +UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4256323669"] = "Information" + -- Chat UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T578410699"] = "Chat" --- Startup log file -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1019424746"] = "Startup log file" - --- About MindWork AI Studio -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1020427799"] = "About MindWork AI Studio" - --- Browse AI Studio's source code on GitHub — we welcome your contributions. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1107156991"] = "Browse AI Studio's source code on GitHub — we welcome your contributions." - --- This is a private AI Studio installation. It runs without an enterprise configuration. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1209549230"] = "This is a private AI Studio installation. It runs without an enterprise configuration." - --- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is not yet available. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1282228996"] = "AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is not yet available." - --- This library is used to read PDF files. This is necessary, e.g., for using PDFs as a data source for a chat. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1388816916"] = "This library is used to read PDF files. This is necessary, e.g., for using PDFs as a data source for a chat." - --- Database version -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1420062548"] = "Database version" - --- This library is used to extend the MudBlazor library. It provides additional components that are not part of the MudBlazor library. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1421513382"] = "This library is used to extend the MudBlazor library. It provides additional components that are not part of the MudBlazor library." - --- We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T162898512"] = "We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library." - --- Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1629800076"] = "Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor." - --- AI Studio creates a log file at startup, in which events during startup are recorded. After startup, another log file is created that records all events that occur during the use of the app. This includes any errors that may occur. Depending on when an error occurs (at startup or during use), the contents of these log files can be helpful for troubleshooting. Sensitive information such as passwords is not included in the log files. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1630237140"] = "AI Studio creates a log file at startup, in which events during startup are recorded. After startup, another log file is created that records all events that occur during the use of the app. This includes any errors that may occur. Depending on when an error occurs (at startup or during use), the contents of these log files can be helpful for troubleshooting. Sensitive information such as passwords is not included in the log files." - --- This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1772678682"] = "This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant." - --- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1806897624"] = "By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents." - --- Pandoc Installation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T185447014"] = "Pandoc Installation" - --- Copies the configuration plugin ID to the clipboard -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1859295819"] = "Copies the configuration plugin ID to the clipboard" - --- Check for updates -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1890416390"] = "Check for updates" - --- Vision -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1892426825"] = "Vision" - --- In order to use any LLM, each user must store their so-called API key for each LLM provider. This key must be kept secure, similar to a password. The safest way to do this is offered by operating systems like macOS, Windows, and Linux: They have mechanisms to store such data, if available, on special security hardware. Since this is currently not possible in .NET, we use this Rust library. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1915240766"] = "In order to use any LLM, each user must store their so-called API key for each LLM provider. This key must be kept secure, similar to a password. The safest way to do this is offered by operating systems like macOS, Windows, and Linux: They have mechanisms to store such data, if available, on special security hardware. Since this is currently not possible in .NET, we use this Rust library." - --- This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1924365263"] = "This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant." - --- We use Rocket to implement the runtime API. This is necessary because the runtime must be able to communicate with the user interface (IPC). Rocket is a great framework for implementing web APIs in Rust. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1943216839"] = "We use Rocket to implement the runtime API. This is necessary because the runtime must be able to communicate with the user interface (IPC). Rocket is a great framework for implementing web APIs in Rust." - --- Copies the following to the clipboard -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2029659664"] = "Copies the following to the clipboard" - --- Copies the server URL to the clipboard -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2037899437"] = "Copies the server URL to the clipboard" - --- This library is used to determine the file type of a file. This is necessary, e.g., when we want to stream a file. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2173617769"] = "This library is used to determine the file type of a file. This is necessary, e.g., when we want to stream a file." - --- For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2174764529"] = "For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose." - --- OK -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2246359087"] = "OK" - --- Configuration server: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2272122662"] = "Configuration server:" - --- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2273492381"] = "We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose." - --- AI Studio runs with an enterprise configuration using a configuration plugin, without central configuration management. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2280402765"] = "AI Studio runs with an enterprise configuration using a configuration plugin, without central configuration management." - --- Configuration plugin ID: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2301484629"] = "Configuration plugin ID:" - --- The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2329884315"] = "The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK." - --- Used PDFium version -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2368247719"] = "Used PDFium version" - --- installation provided by the system -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2371107659"] = "installation provided by the system" - --- Installed Pandoc version: Pandoc is not installed or not available. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2374031539"] = "Installed Pandoc version: Pandoc is not installed or not available." - --- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557014401"] = "This library is used to determine the language of the operating system. This is necessary to set the language of the user interface." - --- Used Open Source Projects -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557066213"] = "Used Open Source Projects" - --- Build time -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T260228112"] = "Build time" - --- To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2644379659"] = "To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system." - --- Usage log file -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2689995864"] = "Usage log file" - --- Logbook -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2706940196"] = "Logbook" - --- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2726131107"] = "This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read." - --- Determine Pandoc version, please wait... -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2765814390"] = "Determine Pandoc version, please wait..." - --- Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2777988282"] = "Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor." - --- Show Details -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T27924674"] = "Show Details" - --- View our project roadmap and help shape AI Studio's future development. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2829971158"] = "View our project roadmap and help shape AI Studio's future development." - --- Used .NET runtime -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2840227993"] = "Used .NET runtime" - --- Explanation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2840582448"] = "Explanation" - --- The .NET backend cannot be started as a desktop app. Therefore, I use a second backend in Rust, which I call runtime. With Rust as the runtime, Tauri can be used to realize a typical desktop app. Thanks to Rust, this app can be offered for Windows, macOS, and Linux desktops. Rust is a great language for developing safe and high-performance software. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2868174483"] = "The .NET backend cannot be started as a desktop app. Therefore, I use a second backend in Rust, which I call runtime. With Rust as the runtime, Tauri can be used to realize a typical desktop app. Thanks to Rust, this app can be offered for Windows, macOS, and Linux desktops. Rust is a great language for developing safe and high-performance software." - --- Changelog -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3017574265"] = "Changelog" - --- Enterprise configuration ID: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3092349641"] = "Enterprise configuration ID:" - --- Connect AI Studio to your organization's data with our External Retrieval Interface (ERI). -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T313276297"] = "Connect AI Studio to your organization's data with our External Retrieval Interface (ERI)." - --- Have feature ideas? Submit suggestions for future AI Studio enhancements. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3178730036"] = "Have feature ideas? Submit suggestions for future AI Studio enhancements." - --- Hide Details -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3183837919"] = "Hide Details" - --- Update Pandoc -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3249965383"] = "Update Pandoc" - --- Discover MindWork AI's mission and vision on our official homepage. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3294830584"] = "Discover MindWork AI's mission and vision on our official homepage." - --- User-language provided by the OS -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3334355246"] = "User-language provided by the OS" - --- The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3405978777"] = "The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.:" - --- Used Rust compiler -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3440211747"] = "Used Rust compiler" - --- Tauri is used to host the Blazor user interface. It is a great project that allows the creation of desktop applications using web technologies. I love Tauri! -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3494984593"] = "Tauri is used to host the Blazor user interface. It is a great project that allows the creation of desktop applications using web technologies. I love Tauri!" - --- Motivation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3563271893"] = "Motivation" - --- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3722989559"] = "This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat." - --- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is active. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3741877842"] = "AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is active." - --- this version does not met the requirements -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3813932670"] = "this version does not met the requirements" - --- This library is used to access the Windows registry. We use this for Windows enterprise environments to read the desired configuration. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3874337003"] = "This library is used to access the Windows registry. We use this for Windows enterprise environments to read the desired configuration." - --- Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3908558992"] = "Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json." - --- Installed Pandoc version -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3983971016"] = "Installed Pandoc version" - --- Check Pandoc Installation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3986423270"] = "Check Pandoc Installation" - --- Versions -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4010195468"] = "Versions" - --- This library is used to create asynchronous streams in Rust. It allows us to work with streams of data that can be produced asynchronously, making it easier to handle events or data that arrive over time. We use this, e.g., to stream arbitrary data from the file system to the embedding system. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4079152443"] = "This library is used to create asynchronous streams in Rust. It allows us to work with streams of data that can be produced asynchronously, making it easier to handle events or data that arrive over time. We use this, e.g., to stream arbitrary data from the file system to the embedding system." - --- Community & Code -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4158546761"] = "Community & Code" - --- We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4184485147"] = "We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant." - --- When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4229014037"] = "When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project." - --- This is a library providing the foundations for asynchronous programming in Rust. It includes key trait definitions like Stream, as well as utilities like join!, select!, and various futures combinator methods which enable expressive asynchronous control flow. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T566998575"] = "This is a library providing the foundations for asynchronous programming in Rust. It includes key trait definitions like Stream, as well as utilities like join!, select!, and various futures combinator methods which enable expressive asynchronous control flow." - --- Used .NET SDK -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T585329785"] = "Used .NET SDK" - --- Did you find a bug or are you experiencing issues? Report your concern here. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T639371534"] = "Did you find a bug or are you experiencing issues? Report your concern here." - --- This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T64689067"] = "This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible." - --- Copies the config ID to the clipboard -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T788846912"] = "Copies the config ID to the clipboard" - --- installed by AI Studio -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T833849470"] = "installed by AI Studio" - --- We use this library to be able to read PowerPoint files. This allows us to insert content from slides into prompts and take PowerPoint files into account in RAG processes. We thank Nils Kruthoff for his work on this Rust crate. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T855925638"] = "We use this library to be able to read PowerPoint files. This allows us to insert content from slides into prompts and take PowerPoint files into account in RAG processes. We thank Nils Kruthoff for his work on this Rust crate." - --- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T870640199"] = "For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose." - --- Qdrant is a vector similarity search engine and vector database. It provides a production-ready service with a convenient API to store, search, and manage points—vectors with an additional payload Qdrant is tailored to extended filtering support. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T95576615"] = "Qdrant is a vector similarity search engine and vector database. It provides a production-ready service with a convenient API to store, search, and manage points—vectors with an additional payload Qdrant is tailored to extended filtering support." - --- Install Pandoc -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T986578435"] = "Install Pandoc" - -- Get coding and debugging support from an LLM. UI_TEXT_CONTENT["AISTUDIO::PAGES::ASSISTANTS::T1243850917"] = "Get coding and debugging support from an LLM." @@ -4903,9 +4867,6 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1702902297"] = "Introduction" -- Vision UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1892426825"] = "Vision" --- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities. -UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T2183503084"] = "You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities." - -- Let's get started UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T2331588413"] = "Let's get started" @@ -4930,6 +4891,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3341379752"] = "Cost-effective" -- Flexibility UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3723223888"] = "Flexibility" +-- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities. +UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3892227145"] = "You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities." + -- Privacy UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3959064551"] = "Privacy" @@ -4951,6 +4915,240 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T873851215"] = "Here's what makes MindWo -- The app is free to use, both for personal and commercial purposes. UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T91074375"] = "The app is free to use, both for personal and commercial purposes." +-- Startup log file +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1019424746"] = "Startup log file" + +-- Browse AI Studio's source code on GitHub — we welcome your contributions. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1107156991"] = "Browse AI Studio's source code on GitHub — we welcome your contributions." + +-- This is a private AI Studio installation. It runs without an enterprise configuration. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1209549230"] = "This is a private AI Studio installation. It runs without an enterprise configuration." + +-- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is not yet available. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1282228996"] = "AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is not yet available." + +-- This library is used to read PDF files. This is necessary, e.g., for using PDFs as a data source for a chat. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1388816916"] = "This library is used to read PDF files. This is necessary, e.g., for using PDFs as a data source for a chat." + +-- This library is used to extend the MudBlazor library. It provides additional components that are not part of the MudBlazor library. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1421513382"] = "This library is used to extend the MudBlazor library. It provides additional components that are not part of the MudBlazor library." + +-- We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T162898512"] = "We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library." + +-- Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1629800076"] = "Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor." + +-- AI Studio creates a log file at startup, in which events during startup are recorded. After startup, another log file is created that records all events that occur during the use of the app. This includes any errors that may occur. Depending on when an error occurs (at startup or during use), the contents of these log files can be helpful for troubleshooting. Sensitive information such as passwords is not included in the log files. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1630237140"] = "AI Studio creates a log file at startup, in which events during startup are recorded. After startup, another log file is created that records all events that occur during the use of the app. This includes any errors that may occur. Depending on when an error occurs (at startup or during use), the contents of these log files can be helpful for troubleshooting. Sensitive information such as passwords is not included in the log files." + +-- This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1772678682"] = "This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant." + +-- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1806897624"] = "By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents." + +-- Pandoc Installation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T185447014"] = "Pandoc Installation" + +-- Copies the configuration plugin ID to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1859295819"] = "Copies the configuration plugin ID to the clipboard" + +-- Check for updates +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1890416390"] = "Check for updates" + +-- Vision +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1892426825"] = "Vision" + +-- In order to use any LLM, each user must store their so-called API key for each LLM provider. This key must be kept secure, similar to a password. The safest way to do this is offered by operating systems like macOS, Windows, and Linux: They have mechanisms to store such data, if available, on special security hardware. Since this is currently not possible in .NET, we use this Rust library. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1915240766"] = "In order to use any LLM, each user must store their so-called API key for each LLM provider. This key must be kept secure, similar to a password. The safest way to do this is offered by operating systems like macOS, Windows, and Linux: They have mechanisms to store such data, if available, on special security hardware. Since this is currently not possible in .NET, we use this Rust library." + +-- This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1924365263"] = "This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant." + +-- We use Rocket to implement the runtime API. This is necessary because the runtime must be able to communicate with the user interface (IPC). Rocket is a great framework for implementing web APIs in Rust. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1943216839"] = "We use Rocket to implement the runtime API. This is necessary because the runtime must be able to communicate with the user interface (IPC). Rocket is a great framework for implementing web APIs in Rust." + +-- Copies the server URL to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2037899437"] = "Copies the server URL to the clipboard" + +-- This library is used to determine the file type of a file. This is necessary, e.g., when we want to stream a file. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2173617769"] = "This library is used to determine the file type of a file. This is necessary, e.g., when we want to stream a file." + +-- For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2174764529"] = "For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose." + +-- OK +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2246359087"] = "OK" + +-- Configuration server: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2272122662"] = "Configuration server:" + +-- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2273492381"] = "We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose." + +-- AI Studio runs with an enterprise configuration using a configuration plugin, without central configuration management. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2280402765"] = "AI Studio runs with an enterprise configuration using a configuration plugin, without central configuration management." + +-- Configuration plugin ID: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2301484629"] = "Configuration plugin ID:" + +-- The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2329884315"] = "The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK." + +-- Used PDFium version +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2368247719"] = "Used PDFium version" + +-- installation provided by the system +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2371107659"] = "installation provided by the system" + +-- Installed Pandoc version: Pandoc is not installed or not available. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2374031539"] = "Installed Pandoc version: Pandoc is not installed or not available." + +-- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2557014401"] = "This library is used to determine the language of the operating system. This is necessary to set the language of the user interface." + +-- Used Open Source Projects +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2557066213"] = "Used Open Source Projects" + +-- Build time +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T260228112"] = "Build time" + +-- To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2644379659"] = "To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system." + +-- Usage log file +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2689995864"] = "Usage log file" + +-- Logbook +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2706940196"] = "Logbook" + +-- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2726131107"] = "This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read." + +-- Determine Pandoc version, please wait... +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2765814390"] = "Determine Pandoc version, please wait..." + +-- Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2777988282"] = "Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor." + +-- Show Details +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T27924674"] = "Show Details" + +-- View our project roadmap and help shape AI Studio's future development. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2829971158"] = "View our project roadmap and help shape AI Studio's future development." + +-- Used .NET runtime +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2840227993"] = "Used .NET runtime" + +-- Explanation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2840582448"] = "Explanation" + +-- The .NET backend cannot be started as a desktop app. Therefore, I use a second backend in Rust, which I call runtime. With Rust as the runtime, Tauri can be used to realize a typical desktop app. Thanks to Rust, this app can be offered for Windows, macOS, and Linux desktops. Rust is a great language for developing safe and high-performance software. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2868174483"] = "The .NET backend cannot be started as a desktop app. Therefore, I use a second backend in Rust, which I call runtime. With Rust as the runtime, Tauri can be used to realize a typical desktop app. Thanks to Rust, this app can be offered for Windows, macOS, and Linux desktops. Rust is a great language for developing safe and high-performance software." + +-- Changelog +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3017574265"] = "Changelog" + +-- Enterprise configuration ID: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3092349641"] = "Enterprise configuration ID:" + +-- Connect AI Studio to your organization's data with our External Retrieval Interface (ERI). +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T313276297"] = "Connect AI Studio to your organization's data with our External Retrieval Interface (ERI)." + +-- Have feature ideas? Submit suggestions for future AI Studio enhancements. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3178730036"] = "Have feature ideas? Submit suggestions for future AI Studio enhancements." + +-- Hide Details +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3183837919"] = "Hide Details" + +-- Update Pandoc +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3249965383"] = "Update Pandoc" + +-- Discover MindWork AI's mission and vision on our official homepage. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3294830584"] = "Discover MindWork AI's mission and vision on our official homepage." + +-- User-language provided by the OS +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3334355246"] = "User-language provided by the OS" + +-- The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3405978777"] = "The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.:" + +-- Information about MindWork AI Studio +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3433065373"] = "Information about MindWork AI Studio" + +-- Used Rust compiler +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3440211747"] = "Used Rust compiler" + +-- Tauri is used to host the Blazor user interface. It is a great project that allows the creation of desktop applications using web technologies. I love Tauri! +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3494984593"] = "Tauri is used to host the Blazor user interface. It is a great project that allows the creation of desktop applications using web technologies. I love Tauri!" + +-- Motivation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3563271893"] = "Motivation" + +-- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3722989559"] = "This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat." + +-- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is active. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3741877842"] = "AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is active." + +-- this version does not met the requirements +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3813932670"] = "this version does not met the requirements" + +-- This library is used to access the Windows registry. We use this for Windows enterprise environments to read the desired configuration. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3874337003"] = "This library is used to access the Windows registry. We use this for Windows enterprise environments to read the desired configuration." + +-- Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3908558992"] = "Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json." + +-- Installed Pandoc version +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3983971016"] = "Installed Pandoc version" + +-- Check Pandoc Installation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3986423270"] = "Check Pandoc Installation" + +-- Versions +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4010195468"] = "Versions" + +-- This library is used to create asynchronous streams in Rust. It allows us to work with streams of data that can be produced asynchronously, making it easier to handle events or data that arrive over time. We use this, e.g., to stream arbitrary data from the file system to the embedding system. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4079152443"] = "This library is used to create asynchronous streams in Rust. It allows us to work with streams of data that can be produced asynchronously, making it easier to handle events or data that arrive over time. We use this, e.g., to stream arbitrary data from the file system to the embedding system." + +-- Community & Code +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4158546761"] = "Community & Code" + +-- We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4184485147"] = "We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant." + +-- When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4229014037"] = "When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project." + +-- This is a library providing the foundations for asynchronous programming in Rust. It includes key trait definitions like Stream, as well as utilities like join!, select!, and various futures combinator methods which enable expressive asynchronous control flow. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T566998575"] = "This is a library providing the foundations for asynchronous programming in Rust. It includes key trait definitions like Stream, as well as utilities like join!, select!, and various futures combinator methods which enable expressive asynchronous control flow." + +-- Used .NET SDK +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T585329785"] = "Used .NET SDK" + +-- Did you find a bug or are you experiencing issues? Report your concern here. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T639371534"] = "Did you find a bug or are you experiencing issues? Report your concern here." + +-- This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T64689067"] = "This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible." + +-- Copies the config ID to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T788846912"] = "Copies the config ID to the clipboard" + +-- installed by AI Studio +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T833849470"] = "installed by AI Studio" + +-- We use this library to be able to read PowerPoint files. This allows us to insert content from slides into prompts and take PowerPoint files into account in RAG processes. We thank Nils Kruthoff for his work on this Rust crate. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T855925638"] = "We use this library to be able to read PowerPoint files. This allows us to insert content from slides into prompts and take PowerPoint files into account in RAG processes. We thank Nils Kruthoff for his work on this Rust crate." + +-- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T870640199"] = "For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose." + +-- Install Pandoc +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T986578435"] = "Install Pandoc" + -- Disable plugin UI_TEXT_CONTENT["AISTUDIO::PAGES::PLUGINS::T1430375822"] = "Disable plugin" @@ -5149,6 +5347,9 @@ UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T3424652889"] = "Un -- no model selected UI_TEXT_CONTENT["AISTUDIO::PROVIDER::MODEL::T2234274832"] = "no model selected" +-- Model as configured by whisper.cpp +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::SELFHOSTED::PROVIDERSELFHOSTED::T3313940770"] = "Model as configured by whisper.cpp" + -- Use no chat template UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CHATTEMPLATE::T4258819635"] = "Use no chat template" @@ -5323,6 +5524,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2708 -- Unknown preview feature UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2722827307"] = "Unknown preview feature" +-- Transcription: Preview of our speech to text system where you can transcribe recordings and audio files into text +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T714355911"] = "Transcription: Preview of our speech to text system where you can transcribe recordings and audio files into text" + -- Use no data sources, when sending an assistant result to a chat UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1223925477"] = "Use no data sources, when sending an assistant result to a chat" @@ -5887,6 +6091,12 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T377 -- Executable Files UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2217313358"] = "Executable Files" +-- All Source Code Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2460199369"] = "All Source Code Files" + +-- All Audio Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2575722901"] = "All Audio Files" + -- All Video Files UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2850789856"] = "All Video Files" @@ -6016,6 +6226,30 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T878007824"] -- Please enter the secret necessary for authentication. UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T968385876"] = "Please enter the secret necessary for authentication." +-- Unsupported image format +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T1398282880"] = "Unsupported image format" + +-- File has no extension +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T1555980031"] = "File has no extension" + +-- Audio files are not supported yet +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T2919730669"] = "Audio files are not supported yet" + +-- Videos are not supported yet +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T2928927510"] = "Videos are not supported yet" + +-- Images are not supported yet +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T298062956"] = "Images are not supported yet" + +-- Images are not supported at this place +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T305247150"] = "Images are not supported at this place" + +-- Executables are not allowed +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T4167762413"] = "Executables are not allowed" + +-- Images are not supported by the selected provider and model +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T999194030"] = "Images are not supported by the selected provider and model" + -- The hostname is not a valid HTTP(S) URL. UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL." diff --git a/app/MindWork AI Studio/Chat/ChatThread.cs b/app/MindWork AI Studio/Chat/ChatThread.cs index da01b153..134c555f 100644 --- a/app/MindWork AI Studio/Chat/ChatThread.cs +++ b/app/MindWork AI Studio/Chat/ChatThread.cs @@ -238,7 +238,7 @@ public sealed record ChatThread { var (contentData, contentType) = block.Content switch { - ContentImage image => (await image.AsBase64(token), Tools.ERIClient.DataModel.ContentType.IMAGE), + ContentImage image => (await image.TryAsBase64(token) is (success: true, { } base64Image) ? base64Image : string.Empty, Tools.ERIClient.DataModel.ContentType.IMAGE), ContentText text => (text.Text, Tools.ERIClient.DataModel.ContentType.TEXT), _ => (string.Empty, Tools.ERIClient.DataModel.ContentType.UNKNOWN), diff --git a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor index 90f889bd..7c09ae78 100644 --- a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor +++ b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor @@ -20,7 +20,8 @@ { - + } @@ -107,9 +108,21 @@ break; case ContentType.IMAGE: - if (this.Content is ContentImage { SourceType: ContentImageSource.URL or ContentImageSource.LOCAL_PATH } imageContent) + if (this.Content is ContentImage imageContent) { - + var imageSrc = imageContent.SourceType switch + { + ContentImageSource.BASE64 => ImageHelpers.ToDataUrl(imageContent.Source), + ContentImageSource.URL => imageContent.Source, + ContentImageSource.LOCAL_PATH => imageContent.Source, + + _ => string.Empty + }; + + if (!string.IsNullOrWhiteSpace(imageSrc)) + { + + } } break; diff --git a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs index efa9c31b..e29a016d 100644 --- a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs +++ b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs @@ -1,4 +1,5 @@ using AIStudio.Components; +using AIStudio.Dialogs; using AIStudio.Tools.Services; using Microsoft.AspNetCore.Components; @@ -188,4 +189,9 @@ public partial class ContentBlockComponent : MSGComponentBase await this.EditLastUserBlockFunc(this.Content); } + private async Task OpenAttachmentsDialog() + { + var result = await ReviewAttachmentsDialog.OpenDialogAsync(this.DialogService, this.Content.FileAttachments.ToHashSet()); + this.Content.FileAttachments = result.ToList(); + } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Chat/ContentImage.cs b/app/MindWork AI Studio/Chat/ContentImage.cs index 6026e554..0eb36442 100644 --- a/app/MindWork AI Studio/Chat/ContentImage.cs +++ b/app/MindWork AI Studio/Chat/ContentImage.cs @@ -1,6 +1,7 @@ using System.Text.Json.Serialization; using AIStudio.Provider; +using AIStudio.Tools.Validation; namespace AIStudio.Chat; @@ -31,7 +32,7 @@ public sealed class ContentImage : IContent, IImageSource public List Sources { get; set; } = []; /// - public List FileAttachments { get; set; } = []; + public List FileAttachments { get; set; } = []; /// public Task CreateFromProviderAsync(IProvider provider, Model chatModel, IContent? lastUserPrompt, ChatThread? chatChatThread, CancellationToken token = default) @@ -46,10 +47,29 @@ public sealed class ContentImage : IContent, IImageSource InitialRemoteWait = this.InitialRemoteWait, IsStreaming = this.IsStreaming, SourceType = this.SourceType, + Sources = [..this.Sources], + FileAttachments = [..this.FileAttachments], }; #endregion + /// + /// Creates a ContentImage from a local file path. + /// + /// The path to the image file. + /// A new ContentImage instance if the file is valid, null otherwise. + public static async Task CreateFromFileAsync(string filePath) + { + if (!await FileExtensionValidation.IsImageExtensionValidWithNotifyAsync(filePath)) + return null; + + return new ContentImage + { + SourceType = ContentImageSource.LOCAL_PATH, + Source = filePath, + }; + } + /// /// The type of the image source. /// diff --git a/app/MindWork AI Studio/Chat/ContentText.cs b/app/MindWork AI Studio/Chat/ContentText.cs index c697a03d..3a9b8f9d 100644 --- a/app/MindWork AI Studio/Chat/ContentText.cs +++ b/app/MindWork AI Studio/Chat/ContentText.cs @@ -42,7 +42,7 @@ public sealed class ContentText : IContent public List Sources { get; set; } = []; /// - public List FileAttachments { get; set; } = []; + public List FileAttachments { get; set; } = []; /// public async Task CreateFromProviderAsync(IProvider provider, Model chatModel, IContent? lastUserPrompt, ChatThread? chatThread, CancellationToken token = default) @@ -149,24 +149,24 @@ public sealed class ContentText : IContent #endregion - public async Task PrepareContentForAI() + public async Task PrepareTextContentForAI() { var sb = new StringBuilder(); sb.AppendLine(this.Text); if(this.FileAttachments.Count > 0) { - // Filter out files that no longer exist - var existingFiles = this.FileAttachments.Where(File.Exists).ToList(); + // Get the list of existing documents: + var existingDocuments = this.FileAttachments.Where(x => x.Type is FileAttachmentType.DOCUMENT && x.Exists).ToList(); - // Log warning for missing files - var missingFiles = this.FileAttachments.Except(existingFiles).ToList(); - if (missingFiles.Count > 0) - foreach (var missingFile in missingFiles) - LOGGER.LogWarning("File attachment no longer exists and will be skipped: '{MissingFile}'", missingFile); - - // Only proceed if there are existing files - if (existingFiles.Count > 0) + // Log warning for missing files: + var missingDocuments = this.FileAttachments.Except(existingDocuments).Where(x => x.Type is FileAttachmentType.DOCUMENT).ToList(); + if (missingDocuments.Count > 0) + foreach (var missingDocument in missingDocuments) + LOGGER.LogWarning("File attachment no longer exists and will be skipped: '{MissingDocument}'.", missingDocument.FilePath); + + // Only proceed if there are existing, allowed documents: + if (existingDocuments.Count > 0) { // Check Pandoc availability once before processing file attachments var pandocState = await Pandoc.CheckAvailabilityAsync(Program.RUST_SERVICE, showMessages: true, showSuccessMessage: false); @@ -179,16 +179,30 @@ public sealed class ContentText : IContent { sb.AppendLine(); sb.AppendLine("The following files are attached to this message:"); - foreach(var file in existingFiles) + foreach(var document in existingDocuments) { + if (document.IsForbidden) + { + LOGGER.LogWarning("File attachment '{FilePath}' has a forbidden file type and will be skipped.", document.FilePath); + continue; + } + sb.AppendLine(); sb.AppendLine("---------------------------------------"); - sb.AppendLine($"File path: {file}"); + sb.AppendLine($"File path: {document.FilePath}"); sb.AppendLine("File content:"); sb.AppendLine("````"); - sb.AppendLine(await Program.RUST_SERVICE.ReadArbitraryFileData(file, int.MaxValue)); + sb.AppendLine(await Program.RUST_SERVICE.ReadArbitraryFileData(document.FilePath, int.MaxValue)); sb.AppendLine("````"); } + + var numImages = this.FileAttachments.Count(x => x is { IsImage: true, Exists: true }); + if (numImages > 0) + { + sb.AppendLine(); + sb.AppendLine($"Additionally, there are {numImages} image file(s) attached to this message. "); + sb.AppendLine("Please consider them as part of the message content and use them to answer accordingly."); + } } } } diff --git a/app/MindWork AI Studio/Chat/FileAttachment.cs b/app/MindWork AI Studio/Chat/FileAttachment.cs new file mode 100644 index 00000000..1208303f --- /dev/null +++ b/app/MindWork AI Studio/Chat/FileAttachment.cs @@ -0,0 +1,105 @@ +using System.Text.Json.Serialization; + +using AIStudio.Tools.Rust; + +namespace AIStudio.Chat; + +/// +/// Represents an immutable file attachment with details about its type, name, path, and size. +/// +/// The type of the file attachment. +/// The name of the file, including extension. +/// The full path to the file, including the filename and extension. +/// The size of the file in bytes. +[JsonPolymorphic(TypeDiscriminatorPropertyName = "$type")] +[JsonDerivedType(typeof(FileAttachment), typeDiscriminator: "file")] +[JsonDerivedType(typeof(FileAttachmentImage), typeDiscriminator: "image")] +public record FileAttachment(FileAttachmentType Type, string FileName, string FilePath, long FileSizeBytes) +{ + /// + /// Gets a value indicating whether the file type is forbidden and should not be attached. + /// + /// + /// The state is determined once during construction and does not change. + /// + public bool IsForbidden { get; } = Type == FileAttachmentType.FORBIDDEN; + + /// + /// Gets a value indicating whether the file type is valid and allowed to be attached. + /// + /// + /// The state is determined once during construction and does not change. + /// + public bool IsValid { get; } = Type != FileAttachmentType.FORBIDDEN; + + /// + /// Gets a value indicating whether the file type is an image. + /// + /// + /// The state is determined once during construction and does not change. + /// + public bool IsImage { get; } = Type == FileAttachmentType.IMAGE; + + /// + /// Gets the file path for loading the file from the web browser-side (Blazor). + /// + public string FilePathAsUrl { get; } = FileHandler.CreateFileUrl(FilePath); + + /// + /// Gets a value indicating whether the file still exists on the file system. + /// + /// + /// This property checks the file system each time it is accessed. + /// + public bool Exists => File.Exists(this.FilePath); + + /// + /// Creates a FileAttachment from a file path by automatically determining the type, + /// extracting the filename, and reading the file size. + /// + /// The full path to the file. + /// A FileAttachment instance with populated properties. + public static FileAttachment FromPath(string filePath) + { + var fileName = Path.GetFileName(filePath); + var fileSize = File.Exists(filePath) ? new FileInfo(filePath).Length : 0; + var type = DetermineFileType(filePath); + + return type switch + { + FileAttachmentType.DOCUMENT => new FileAttachment(type, fileName, filePath, fileSize), + FileAttachmentType.IMAGE => new FileAttachmentImage(fileName, filePath, fileSize), + + _ => new FileAttachment(type, fileName, filePath, fileSize), + }; + } + + /// + /// Determines the file attachment type based on the file extension. + /// Uses centrally defined file type filters from . + /// + /// The file path to analyze. + /// The corresponding FileAttachmentType. + private static FileAttachmentType DetermineFileType(string filePath) + { + var extension = Path.GetExtension(filePath).TrimStart('.').ToLowerInvariant(); + + // Check if it's an image file: + if (FileTypeFilter.AllImages.FilterExtensions.Contains(extension)) + return FileAttachmentType.IMAGE; + + // Check if it's an audio file: + if (FileTypeFilter.AllAudio.FilterExtensions.Contains(extension)) + return FileAttachmentType.AUDIO; + + // Check if it's an allowed document file (PDF, Text, or Office): + if (FileTypeFilter.PDF.FilterExtensions.Contains(extension) || + FileTypeFilter.Text.FilterExtensions.Contains(extension) || + FileTypeFilter.AllOffice.FilterExtensions.Contains(extension) || + FileTypeFilter.AllSourceCode.FilterExtensions.Contains(extension)) + return FileAttachmentType.DOCUMENT; + + // All other file types are forbidden: + return FileAttachmentType.FORBIDDEN; + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Chat/FileAttachmentImage.cs b/app/MindWork AI Studio/Chat/FileAttachmentImage.cs new file mode 100644 index 00000000..81b46f20 --- /dev/null +++ b/app/MindWork AI Studio/Chat/FileAttachmentImage.cs @@ -0,0 +1,17 @@ +namespace AIStudio.Chat; + +public record FileAttachmentImage(string FileName, string FilePath, long FileSizeBytes) : FileAttachment(FileAttachmentType.IMAGE, FileName, FilePath, FileSizeBytes), IImageSource +{ + /// + /// The type of the image source. + /// + /// + /// Is the image source a URL, a local file path, a base64 string, etc.? + /// + public ContentImageSource SourceType { get; init; } = ContentImageSource.LOCAL_PATH; + + /// + /// The image source. + /// + public string Source { get; set; } = FilePath; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Chat/FileAttachmentType.cs b/app/MindWork AI Studio/Chat/FileAttachmentType.cs new file mode 100644 index 00000000..11185e94 --- /dev/null +++ b/app/MindWork AI Studio/Chat/FileAttachmentType.cs @@ -0,0 +1,27 @@ +namespace AIStudio.Chat; + +/// +/// Represents different types of file attachments. +/// +public enum FileAttachmentType +{ + /// + /// Document file types, such as .pdf, .docx, .txt, etc. + /// + DOCUMENT, + + /// + /// All image file types, such as .jpg, .png, .gif, etc. + /// + IMAGE, + + /// + /// All audio file types, such as .mp3, .wav, .aac, etc. + /// + AUDIO, + + /// + /// Forbidden file types that should not be attached, such as executables. + /// + FORBIDDEN, +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Chat/IContent.cs b/app/MindWork AI Studio/Chat/IContent.cs index 883a1b6c..dea453f8 100644 --- a/app/MindWork AI Studio/Chat/IContent.cs +++ b/app/MindWork AI Studio/Chat/IContent.cs @@ -50,10 +50,10 @@ public interface IContent /// /// Represents a collection of file attachments associated with the content. - /// This property contains a list of file paths that are appended + /// This property contains a list of file attachments that are appended /// to the content to provide additional context or resources. /// - public List FileAttachments { get; set; } + public List FileAttachments { get; set; } /// /// Uses the provider to create the content. diff --git a/app/MindWork AI Studio/Chat/IImageSourceExtensions.cs b/app/MindWork AI Studio/Chat/IImageSourceExtensions.cs index 836df531..c6461643 100644 --- a/app/MindWork AI Studio/Chat/IImageSourceExtensions.cs +++ b/app/MindWork AI Studio/Chat/IImageSourceExtensions.cs @@ -1,28 +1,91 @@ +using AIStudio.Tools.MIME; +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Chat; public static class IImageSourceExtensions { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(IImageSourceExtensions).Namespace, nameof(IImageSourceExtensions)); + + public static MIMEType DetermineMimeType(this IImageSource image) + { + switch (image.SourceType) + { + case ContentImageSource.BASE64: + { + // Try to detect the mime type from the base64 string: + var base64Data = image.Source; + if (base64Data.StartsWith("data:", StringComparison.OrdinalIgnoreCase)) + { + var mimeEnd = base64Data.IndexOf(';'); + if (mimeEnd > 5) + return Builder.FromTextRepresentation(base64Data[5..mimeEnd]); + } + + // Fallback: + return Builder.Create().UseApplication().UseSubtype(ApplicationSubtype.OCTET_STREAM).Build(); + } + + case ContentImageSource.URL: + { + // Try to detect the mime type from the URL extension: + var uri = new Uri(image.Source); + var extension = Path.GetExtension(uri.AbsolutePath).ToLowerInvariant(); + return DeriveMIMETypeFromExtension(extension); + } + + case ContentImageSource.LOCAL_PATH: + { + var extension = Path.GetExtension(image.Source).ToLowerInvariant(); + return DeriveMIMETypeFromExtension(extension); + } + + default: + return Builder.Create().UseApplication().UseSubtype(ApplicationSubtype.OCTET_STREAM).Build(); + } + } + + private static MIMEType DeriveMIMETypeFromExtension(string extension) + { + var imageBuilder = Builder.Create().UseImage(); + return extension switch + { + ".png" => imageBuilder.UseSubtype(ImageSubtype.PNG).Build(), + ".jpg" or ".jpeg" => imageBuilder.UseSubtype(ImageSubtype.JPEG).Build(), + ".gif" => imageBuilder.UseSubtype(ImageSubtype.GIF).Build(), + ".webp" => imageBuilder.UseSubtype(ImageSubtype.WEBP).Build(), + ".tiff" or ".tif" => imageBuilder.UseSubtype(ImageSubtype.TIFF).Build(), + ".heic" or ".heif" => imageBuilder.UseSubtype(ImageSubtype.HEIC).Build(), + + _ => Builder.Create().UseApplication().UseSubtype(ApplicationSubtype.OCTET_STREAM).Build() + }; + } + /// /// Read the image content as a base64 string. /// /// /// The images are directly converted to base64 strings. The maximum /// size of the image is around 10 MB. If the image is larger, the method - /// returns an empty string. - /// + /// returns an empty string.
+ ///
/// As of now, this method does no sort of image processing. LLMs usually /// do not work with arbitrary image sizes. In the future, we might have - /// to resize the images before sending them to the model. + /// to resize the images before sending them to the model.
+ ///
+ /// Note as well that this method returns just the base64 string without + /// any data URI prefix (like "data:image/png;base64,"). The caller has + /// to take care of that if needed. ///
/// The image source. /// The cancellation token. /// The image content as a base64 string; might be empty. - public static async Task AsBase64(this IImageSource image, CancellationToken token = default) + public static async Task<(bool success, string base64Content)> TryAsBase64(this IImageSource image, CancellationToken token = default) { switch (image.SourceType) { case ContentImageSource.BASE64: - return image.Source; + return (success: true, image.Source); case ContentImageSource.URL: { @@ -33,13 +96,17 @@ public static class IImageSourceExtensions // Read the length of the content: var lengthBytes = response.Content.Headers.ContentLength; if(lengthBytes > 10_000_000) - return string.Empty; - + { + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.ImageNotSupported, TB("The image at the URL is too large (>10 MB). Skipping the image."))); + return (success: false, string.Empty); + } + var bytes = await response.Content.ReadAsByteArrayAsync(token); - return Convert.ToBase64String(bytes); + return (success: true, Convert.ToBase64String(bytes)); } - return string.Empty; + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.ImageNotSupported, TB("Failed to download the image from the URL. Skipping the image."))); + return (success: false, string.Empty); } case ContentImageSource.LOCAL_PATH: @@ -48,16 +115,20 @@ public static class IImageSourceExtensions // Read the content length: var length = new FileInfo(image.Source).Length; if(length > 10_000_000) - return string.Empty; - + { + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.ImageNotSupported, TB("The local image file is too large (>10 MB). Skipping the image."))); + return (success: false, string.Empty); + } + var bytes = await File.ReadAllBytesAsync(image.Source, token); - return Convert.ToBase64String(bytes); + return (success: true, Convert.ToBase64String(bytes)); } - return string.Empty; + await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.ImageNotSupported, TB("The local image file does not exist. Skipping the image."))); + return (success: false, string.Empty); default: - return string.Empty; + return (success: false, string.Empty); } } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Chat/ListContentBlockExtensions.cs b/app/MindWork AI Studio/Chat/ListContentBlockExtensions.cs index f5e8c0ab..5da41e80 100644 --- a/app/MindWork AI Studio/Chat/ListContentBlockExtensions.cs +++ b/app/MindWork AI Studio/Chat/ListContentBlockExtensions.cs @@ -1,4 +1,8 @@ -namespace AIStudio.Chat; +using AIStudio.Provider; +using AIStudio.Provider.OpenAI; +using AIStudio.Settings; + +namespace AIStudio.Chat; public static class ListContentBlockExtensions { @@ -6,20 +10,171 @@ public static class ListContentBlockExtensions /// Processes a list of content blocks by transforming them into a collection of message results asynchronously. ///
/// The list of content blocks to process. - /// A function that transforms each content block into a message result asynchronously. - /// The type of the result produced by the transformation function. + /// A function that transforms each content block into a message result asynchronously. + /// The selected LLM provider. + /// The selected model. + /// A factory function to create text sub-content. + /// A factory function to create image sub-content. /// An asynchronous task that resolves to a list of transformed results. - public static async Task> BuildMessages(this List blocks, Func> transformer) + public static async Task> BuildMessagesAsync( + this List blocks, + LLMProviders selectedProvider, + Model selectedModel, + Func roleTransformer, + Func textSubContentFactory, + Func> imageSubContentFactory) { - var messages = blocks - .Where(n => n.ContentType is ContentType.TEXT && !string.IsNullOrWhiteSpace((n.Content as ContentText)?.Text)) - .Select(transformer) - .ToList(); + var capabilities = selectedProvider.GetModelCapabilities(selectedModel); + var canProcessImages = capabilities.Contains(Capability.MULTIPLE_IMAGE_INPUT) || + capabilities.Contains(Capability.SINGLE_IMAGE_INPUT); - // Await all messages: - await Task.WhenAll(messages); + var messageTaskList = new List>(blocks.Count); + foreach (var block in blocks) + { + switch (block.Content) + { + // The prompt may or may not contain image(s), but the provider/model cannot process images. + // Thus, we treat it as a regular text message. + case ContentText text when block.ContentType is ContentType.TEXT && !string.IsNullOrWhiteSpace(text.Text) && !canProcessImages: + messageTaskList.Add(CreateTextMessageAsync(block, text)); + break; + + // The regular case for text content without images: + case ContentText text when block.ContentType is ContentType.TEXT && !string.IsNullOrWhiteSpace(text.Text) && !text.FileAttachments.ContainsImages(): + messageTaskList.Add(CreateTextMessageAsync(block, text)); + break; + + // Text prompt with images as attachments, and the provider/model can process images: + case ContentText text when block.ContentType is ContentType.TEXT && !string.IsNullOrWhiteSpace(text.Text) && text.FileAttachments.ContainsImages(): + messageTaskList.Add(CreateMultimodalMessageAsync(block, text, textSubContentFactory, imageSubContentFactory)); + break; + } + } + // Await all messages: + await Task.WhenAll(messageTaskList); + // Select all results: - return messages.Select(n => n.Result).ToList(); + return messageTaskList.Select(n => n.Result).ToList(); + + // Local function to create a text message asynchronously. + Task CreateTextMessageAsync(ContentBlock block, ContentText text) + { + return Task.Run(async () => new TextMessage + { + Role = roleTransformer(block.Role), + Content = await text.PrepareTextContentForAI(), + } as IMessageBase); + } + + // Local function to create a multimodal message asynchronously. + Task CreateMultimodalMessageAsync( + ContentBlock block, + ContentText text, + Func innerTextSubContentFactory, + Func> innerImageSubContentFactory) + { + return Task.Run(async () => + { + var imagesTasks = text.FileAttachments + .Where(x => x is { IsImage: true, Exists: true }) + .Cast() + .Select(innerImageSubContentFactory) + .ToList(); + + Task.WaitAll(imagesTasks); + var images = imagesTasks.Select(t => t.Result).ToList(); + + return new MultimodalMessage + { + Role = roleTransformer(block.Role), + Content = + [ + innerTextSubContentFactory(await text.PrepareTextContentForAI()), + ..images, + ] + } as IMessageBase; + }); + } } + + /// + /// Processes a list of content blocks using direct image URL format to create message results asynchronously. + /// + /// The list of content blocks to process. + /// The selected LLM provider. + /// The selected model. + /// An asynchronous task that resolves to a list of transformed message results. + /// + /// Uses direct image URL format where the image data is placed directly in the image_url field: + /// + /// { "type": "image_url", "image_url": "data:image/jpeg;base64,..." } + /// + /// This format is used by OpenAI, Mistral, and Ollama. + /// + public static async Task> BuildMessagesUsingDirectImageUrlAsync( + this List blocks, + LLMProviders selectedProvider, + Model selectedModel) => await blocks.BuildMessagesAsync( + selectedProvider, + selectedModel, + StandardRoleTransformer, + StandardTextSubContentFactory, + DirectImageSubContentFactory); + + /// + /// Processes a list of content blocks using nested image URL format to create message results asynchronously. + /// + /// The list of content blocks to process. + /// The selected LLM provider. + /// The selected model. + /// An asynchronous task that resolves to a list of transformed message results. + /// + /// Uses nested image URL format where the image data is wrapped in an object: + /// + /// { "type": "image_url", "image_url": { "url": "data:image/jpeg;base64,..." } } + /// + /// This format is used by LM Studio, VLLM, llama.cpp, and other OpenAI-compatible providers. + /// + public static async Task> BuildMessagesUsingNestedImageUrlAsync( + this List blocks, + LLMProviders selectedProvider, + Model selectedModel) => await blocks.BuildMessagesAsync( + selectedProvider, + selectedModel, + StandardRoleTransformer, + StandardTextSubContentFactory, + NestedImageSubContentFactory); + + private static ISubContent StandardTextSubContentFactory(string text) => new SubContentText + { + Text = text, + }; + + private static async Task DirectImageSubContentFactory(FileAttachmentImage attachment) => new SubContentImageUrl + { + ImageUrl = await attachment.TryAsBase64() is (true, var base64Content) + ? $"data:{attachment.DetermineMimeType()};base64,{base64Content}" + : string.Empty, + }; + + private static async Task NestedImageSubContentFactory(FileAttachmentImage attachment) => new SubContentImageUrlNested + { + ImageUrl = new SubContentImageUrlData + { + Url = await attachment.TryAsBase64() is (true, var base64Content) + ? $"data:{attachment.DetermineMimeType()};base64,{base64Content}" + : string.Empty, + }, + }; + + private static string StandardRoleTransformer(ChatRole role) => role switch + { + ChatRole.USER => "user", + ChatRole.AI => "assistant", + ChatRole.AGENT => "assistant", + ChatRole.SYSTEM => "system", + + _ => "user", + }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Chat/ListFileAttachmentExtensions.cs b/app/MindWork AI Studio/Chat/ListFileAttachmentExtensions.cs new file mode 100644 index 00000000..497c965d --- /dev/null +++ b/app/MindWork AI Studio/Chat/ListFileAttachmentExtensions.cs @@ -0,0 +1,6 @@ +namespace AIStudio.Chat; + +public static class ListFileAttachmentExtensions +{ + public static bool ContainsImages(this List attachments) => attachments.Any(attachment => attachment.IsImage); +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/AssistantBlock.razor b/app/MindWork AI Studio/Components/AssistantBlock.razor index 754a9e24..372fae7e 100644 --- a/app/MindWork AI Studio/Components/AssistantBlock.razor +++ b/app/MindWork AI Studio/Components/AssistantBlock.razor @@ -1,30 +1,33 @@ @inherits MSGComponentBase @typeparam TSettings - - - - - - - @this.Name +@if (this.IsVisible) +{ + + + + + + + @this.Name + + + + + + + + @this.Description - - - - - - @this.Description - - - - - - - @this.ButtonText - - - - - \ No newline at end of file + + + + + @this.ButtonText + + + + + +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/AssistantBlock.razor.cs b/app/MindWork AI Studio/Components/AssistantBlock.razor.cs index ef0e7a4d..69dfe49b 100644 --- a/app/MindWork AI Studio/Components/AssistantBlock.razor.cs +++ b/app/MindWork AI Studio/Components/AssistantBlock.razor.cs @@ -1,3 +1,5 @@ +using AIStudio.Settings.DataModel; + using Microsoft.AspNetCore.Components; using DialogOptions = AIStudio.Dialogs.DialogOptions; @@ -8,32 +10,38 @@ public partial class AssistantBlock : MSGComponentBase where TSetting { [Parameter] public string Name { get; set; } = string.Empty; - + [Parameter] public string Description { get; set; } = string.Empty; - + [Parameter] public string Icon { get; set; } = Icons.Material.Filled.DisabledByDefault; - + [Parameter] public string ButtonText { get; set; } = "Start"; - + [Parameter] public string Link { get; set; } = string.Empty; - + + [Parameter] + public Tools.Components Component { get; set; } = Tools.Components.NONE; + + [Parameter] + public PreviewFeatures RequiredPreviewFeature { get; set; } = PreviewFeatures.NONE; + [Inject] private MudTheme ColorTheme { get; init; } = null!; - + [Inject] private IDialogService DialogService { get; init; } = null!; private async Task OpenSettingsDialog() { var dialogParameters = new DialogParameters(); - + await this.DialogService.ShowAsync(T("Open Settings"), dialogParameters, DialogOptions.FULLSCREEN); } - + private string BorderColor => this.SettingsManager.IsDarkMode switch { true => this.ColorTheme.GetCurrentPalette(this.SettingsManager).GrayLight, @@ -41,4 +49,6 @@ public partial class AssistantBlock : MSGComponentBase where TSetting }; private string BlockStyle => $"border-width: 2px; border-color: {this.BorderColor}; border-radius: 12px; border-style: solid; max-width: 20em;"; + + private bool IsVisible => this.SettingsManager.IsAssistantVisible(this.Component, assistantName: this.Name, requiredPreviewFeature: this.RequiredPreviewFeature); } \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/AttachDocuments.razor b/app/MindWork AI Studio/Components/AttachDocuments.razor index 37e5deea..bc66f9c2 100644 --- a/app/MindWork AI Studio/Components/AttachDocuments.razor +++ b/app/MindWork AI Studio/Components/AttachDocuments.razor @@ -3,28 +3,49 @@ @if (this.UseSmallForm) {
- @{ - var fileInfos = this.DocumentPaths.Select(file => new FileInfo(file)).ToList(); - } - @if (fileInfos.Any()) + @if (this.isDraggingOver) { - + Overlap="true" + Class="cursor-pointer" + OnClick="@this.OpenAttachmentsDialog"> + + + } + else if (this.DocumentPaths.Any()) + { + + + + + + } else { - + + OnClick="@this.AddFilesManually"/> }
@@ -47,9 +68,9 @@ else
- @foreach (var fileInfo in this.DocumentPaths.Select(file => new FileInfo(file))) + @foreach (var fileAttachment in this.DocumentPaths) { - + }
diff --git a/app/MindWork AI Studio/Components/AttachDocuments.razor.cs b/app/MindWork AI Studio/Components/AttachDocuments.razor.cs index 7d5aab76..acfc0dd2 100644 --- a/app/MindWork AI Studio/Components/AttachDocuments.razor.cs +++ b/app/MindWork AI Studio/Components/AttachDocuments.razor.cs @@ -1,6 +1,9 @@ +using AIStudio.Chat; using AIStudio.Dialogs; +using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Rust; using AIStudio.Tools.Services; +using AIStudio.Tools.Validation; using Microsoft.AspNetCore.Components; @@ -10,17 +13,31 @@ using DialogOptions = Dialogs.DialogOptions; public partial class AttachDocuments : MSGComponentBase { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AttachDocuments).Namespace, nameof(AttachDocuments)); + [Parameter] public string Name { get; set; } = string.Empty; + /// + /// On which layer to register the drop area. Higher layers have priority over lower layers. + /// [Parameter] - public HashSet DocumentPaths { get; set; } = []; + public int Layer { get; set; } + /// + /// When true, pause catching dropped files. Default is false. + /// [Parameter] - public EventCallback> DocumentPathsChanged { get; set; } - + public bool PauseCatchingDrops { get; set; } + [Parameter] - public Func, Task> OnChange { get; set; } = _ => Task.CompletedTask; + public HashSet DocumentPaths { get; set; } = []; + + [Parameter] + public EventCallback> DocumentPathsChanged { get; set; } + + [Parameter] + public Func, Task> OnChange { get; set; } = _ => Task.CompletedTask; /// /// Catch all documents that are hovered over the AI Studio window and not only over the drop zone. @@ -31,6 +48,18 @@ public partial class AttachDocuments : MSGComponentBase [Parameter] public bool UseSmallForm { get; set; } + /// + /// When true, validate media file types before attaching. Default is true. That means that + /// the user cannot attach unsupported media file types when the provider or model does not + /// support them. Set it to false in order to disable this validation. This is useful for places + /// where the user might want to prepare a template. + /// + [Parameter] + public bool ValidateMediaFileTypes { get; set; } = true; + + [Parameter] + public AIStudio.Settings.Provider? Provider { get; set; } + [Inject] private ILogger Logger { get; set; } = null!; @@ -39,14 +68,25 @@ public partial class AttachDocuments : MSGComponentBase [Inject] private IDialogService DialogService { get; init; } = null!; - + + [Inject] + private PandocAvailabilityService PandocAvailabilityService { get; init; } = null!; + private const Placement TOOLBAR_TOOLTIP_PLACEMENT = Placement.Top; + private static readonly string DROP_FILES_HERE_TEXT = TB("Drop files here to attach them."); + + private uint numDropAreasAboveThis; + private bool isComponentHovered; + private bool isDraggingOver; #region Overrides of MSGComponentBase protected override async Task OnInitializedAsync() { - this.ApplyFilters([], [ Event.TAURI_EVENT_RECEIVED ]); + this.ApplyFilters([], [ Event.TAURI_EVENT_RECEIVED, Event.REGISTER_FILE_DROP_AREA, Event.UNREGISTER_FILE_DROP_AREA ]); + + // Register this drop area: + await this.MessageBus.SendMessage(this, Event.REGISTER_FILE_DROP_AREA, this.Layer); await base.OnInitializedAsync(); } @@ -54,34 +94,101 @@ public partial class AttachDocuments : MSGComponentBase { switch (triggeredEvent) { + case Event.REGISTER_FILE_DROP_AREA when sendingComponent != this: + { + if(data is int layer && layer > this.Layer) + { + this.numDropAreasAboveThis++; + this.PauseCatchingDrops = true; + } + + break; + } + + case Event.UNREGISTER_FILE_DROP_AREA when sendingComponent != this: + { + if(data is int layer && layer > this.Layer) + { + if(this.numDropAreasAboveThis > 0) + this.numDropAreasAboveThis--; + + if(this.numDropAreasAboveThis is 0) + this.PauseCatchingDrops = false; + } + + break; + } + case Event.TAURI_EVENT_RECEIVED when data is TauriEvent { EventType: TauriEventType.FILE_DROP_HOVERED }: + if(this.PauseCatchingDrops) + return; + if(!this.isComponentHovered && !this.CatchAllDocuments) { this.Logger.LogDebug("Attach documents component '{Name}' is not hovered, ignoring file drop hovered event.", this.Name); return; } + this.isDraggingOver = true; this.SetDragClass(); this.StateHasChanged(); break; + case Event.TAURI_EVENT_RECEIVED when data is TauriEvent { EventType: TauriEventType.FILE_DROP_CANCELED }: + if(this.PauseCatchingDrops) + return; + + this.isDraggingOver = false; + this.StateHasChanged(); + break; + + case Event.TAURI_EVENT_RECEIVED when data is TauriEvent { EventType: TauriEventType.WINDOW_NOT_FOCUSED }: + if(this.PauseCatchingDrops) + return; + + this.isDraggingOver = false; + this.isComponentHovered = false; + this.ClearDragClass(); + this.StateHasChanged(); + break; + case Event.TAURI_EVENT_RECEIVED when data is TauriEvent { EventType: TauriEventType.FILE_DROP_DROPPED, Payload: var paths }: + if(this.PauseCatchingDrops) + return; + if(!this.isComponentHovered && !this.CatchAllDocuments) { this.Logger.LogDebug("Attach documents component '{Name}' is not hovered, ignoring file drop dropped event.", this.Name); return; } - + + // Ensure that Pandoc is installed and ready: + var pandocState = await this.PandocAvailabilityService.EnsureAvailabilityAsync( + showSuccessMessage: false, + showDialog: true); + + // If Pandoc is not available (user cancelled installation), abort file drop: + if (!pandocState.IsAvailable) + { + this.Logger.LogWarning("The user cancelled the Pandoc installation or Pandoc is not available. Aborting file drop."); + this.isDraggingOver = false; + this.ClearDragClass(); + this.StateHasChanged(); + return; + } + foreach (var path in paths) { - if(!await this.IsFileExtensionValid(path)) + if(!await FileExtensionValidation.IsExtensionValidWithNotifyAsync(FileExtensionValidation.UseCase.ATTACHING_CONTENT, path, this.ValidateMediaFileTypes, this.Provider)) continue; - - this.DocumentPaths.Add(path); + + this.DocumentPaths.Add(FileAttachment.FromPath(path)); } await this.DocumentPathsChanged.InvokeAsync(this.DocumentPaths); await this.OnChange(this.DocumentPaths); + this.isDraggingOver = false; + this.ClearDragClass(); this.StateHasChanged(); break; } @@ -93,47 +200,42 @@ public partial class AttachDocuments : MSGComponentBase private string dragClass = DEFAULT_DRAG_CLASS; - private bool isComponentHovered; - private async Task AddFilesManually() { - var selectedFile = await this.RustService.SelectFile(T("Select a file to attach")); - if (selectedFile.UserCancelled) + // Ensure that Pandoc is installed and ready: + var pandocState = await this.PandocAvailabilityService.EnsureAvailabilityAsync( + showSuccessMessage: false, + showDialog: true); + + // If Pandoc is not available (user cancelled installation), abort file selection: + if (!pandocState.IsAvailable) + { + this.Logger.LogWarning("The user cancelled the Pandoc installation or Pandoc is not available. Aborting file selection."); + return; + } + + var selectFiles = await this.RustService.SelectFiles(T("Select files to attach")); + if (selectFiles.UserCancelled) return; - if (!File.Exists(selectedFile.SelectedFilePath)) - return; + foreach (var selectedFilePath in selectFiles.SelectedFilePaths) + { + if (!File.Exists(selectedFilePath)) + continue; - if (!await this.IsFileExtensionValid(selectedFile.SelectedFilePath)) - return; + if (!await FileExtensionValidation.IsExtensionValidWithNotifyAsync(FileExtensionValidation.UseCase.ATTACHING_CONTENT, selectedFilePath, this.ValidateMediaFileTypes, this.Provider)) + continue; - this.DocumentPaths.Add(selectedFile.SelectedFilePath); + this.DocumentPaths.Add(FileAttachment.FromPath(selectedFilePath)); + } + await this.DocumentPathsChanged.InvokeAsync(this.DocumentPaths); await this.OnChange(this.DocumentPaths); } - - private async Task IsFileExtensionValid(string selectedFile) + + private async Task OpenAttachmentsDialog() { - var ext = Path.GetExtension(selectedFile).TrimStart('.'); - if (Array.Exists(FileTypeFilter.Executables.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase))) - { - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.AppBlocking, this.T("Executables are not allowed"))); - return false; - } - - if (Array.Exists(FileTypeFilter.AllImages.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase))) - { - await MessageBus.INSTANCE.SendWarning(new(Icons.Material.Filled.ImageNotSupported, this.T("Images are not supported yet"))); - return false; - } - - if (Array.Exists(FileTypeFilter.AllVideos.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase))) - { - await MessageBus.INSTANCE.SendWarning(new(Icons.Material.Filled.FeaturedVideo, this.T("Videos are not supported yet"))); - return false; - } - - return true; + this.DocumentPaths = await ReviewAttachmentsDialog.OpenDialogAsync(this.DialogService, this.DocumentPaths); } private async Task ClearAllFiles() @@ -149,6 +251,9 @@ public partial class AttachDocuments : MSGComponentBase private void OnMouseEnter(EventArgs _) { + if(this.PauseCatchingDrops) + return; + this.Logger.LogDebug("Attach documents component '{Name}' is hovered.", this.Name); this.isComponentHovered = true; this.SetDragClass(); @@ -157,29 +262,32 @@ public partial class AttachDocuments : MSGComponentBase private void OnMouseLeave(EventArgs _) { + if(this.PauseCatchingDrops) + return; + this.Logger.LogDebug("Attach documents component '{Name}' is no longer hovered.", this.Name); this.isComponentHovered = false; this.ClearDragClass(); this.StateHasChanged(); } - private async Task RemoveDocumentPathFromDocumentPaths(FileInfo file) + private async Task RemoveDocument(FileAttachment fileAttachment) { - this.DocumentPaths.Remove(file.ToString()); - + this.DocumentPaths.Remove(fileAttachment); + await this.DocumentPathsChanged.InvokeAsync(this.DocumentPaths); await this.OnChange(this.DocumentPaths); } /// - /// The user might want to check what we actually extract from his file and therefore give the LLM as an input. + /// The user might want to check what we actually extract from his file and therefore give the LLM as an input. /// - /// The file to check. - private async Task InvestigateFile(FileInfo file) + /// The file to check. + private async Task InvestigateFile(FileAttachment fileAttachment) { var dialogParameters = new DialogParameters { - { x => x.FilePath, file.FullName }, + { x => x.Document, fileAttachment }, }; await this.DialogService.ShowAsync(T("Document Preview"), dialogParameters, DialogOptions.FULLSCREEN); diff --git a/app/MindWork AI Studio/Components/Changelog.Logs.cs b/app/MindWork AI Studio/Components/Changelog.Logs.cs index f3550906..785c789d 100644 --- a/app/MindWork AI Studio/Components/Changelog.Logs.cs +++ b/app/MindWork AI Studio/Components/Changelog.Logs.cs @@ -13,6 +13,8 @@ public partial class Changelog public static readonly Log[] LOGS = [ + new (231, "v26.1.1, build 231 (2026-01-11 15:53 UTC)", "v26.1.1.md"), + new (230, "v0.10.0, build 230 (2025-12-31 14:04 UTC)", "v0.10.0.md"), new (229, "v0.9.54, build 229 (2025-11-24 18:28 UTC)", "v0.9.54.md"), new (228, "v0.9.53, build 228 (2025-11-14 13:14 UTC)", "v0.9.53.md"), new (227, "v0.9.52, build 227 (2025-10-24 06:00 UTC)", "v0.9.52.md"), diff --git a/app/MindWork AI Studio/Components/ChatComponent.razor b/app/MindWork AI Studio/Components/ChatComponent.razor index 6a8e4ad9..9d8f0072 100644 --- a/app/MindWork AI Studio/Components/ChatComponent.razor +++ b/app/MindWork AI Studio/Components/ChatComponent.razor @@ -59,46 +59,42 @@ && this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_OVERLAY) { - + } @if (this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is WorkspaceStorageBehavior.STORE_CHATS_MANUALLY) { - + } - + @if (!string.IsNullOrWhiteSpace(this.currentWorkspaceName)) { - + } + - @if (this.isPandocAvailable) - { - - } - @if (this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is WorkspaceStorageBehavior.STORE_CHATS_AUTOMATICALLY) { - + } @if (this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is not WorkspaceStorageBehavior.DISABLE_WORKSPACES) { - + } @@ -110,7 +106,7 @@ @if (this.isStreaming && this.cancellationTokenSource is not null) { - + } diff --git a/app/MindWork AI Studio/Components/ChatComponent.razor.cs b/app/MindWork AI Studio/Components/ChatComponent.razor.cs index 502e6966..f6110e41 100644 --- a/app/MindWork AI Studio/Components/ChatComponent.razor.cs +++ b/app/MindWork AI Studio/Components/ChatComponent.razor.cs @@ -3,7 +3,6 @@ using AIStudio.Dialogs; using AIStudio.Provider; using AIStudio.Settings; using AIStudio.Settings.DataModel; -using AIStudio.Tools.Services; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; @@ -38,9 +37,6 @@ public partial class ChatComponent : MSGComponentBase, IAsyncDisposable [Inject] private IDialogService DialogService { get; init; } = null!; - [Inject] - private PandocAvailabilityService PandocAvailabilityService { get; init; } = null!; - private const Placement TOOLBAR_TOOLTIP_PLACEMENT = Placement.Top; private static readonly Dictionary USER_INPUT_ATTRIBUTES = new(); @@ -61,8 +57,7 @@ public partial class ChatComponent : MSGComponentBase, IAsyncDisposable private string currentWorkspaceName = string.Empty; private Guid currentWorkspaceId = Guid.Empty; private CancellationTokenSource? cancellationTokenSource; - private HashSet chatDocumentPaths = []; - private bool isPandocAvailable; + private HashSet chatDocumentPaths = []; // Unfortunately, we need the input field reference to blur the focus away. Without // this, we cannot clear the input field. @@ -84,7 +79,11 @@ public partial class ChatComponent : MSGComponentBase, IAsyncDisposable // Get the preselected chat template: this.currentChatTemplate = this.SettingsManager.GetPreselectedChatTemplate(Tools.Components.CHAT); this.userInput = this.currentChatTemplate.PredefinedUserPrompt; - + + // Apply template's file attachments, if any: + foreach (var attachment in this.currentChatTemplate.FileAttachments) + this.chatDocumentPaths.Add(attachment); + // // Check for deferred messages of the kind 'SEND_TO_CHAT', // aka the user sends an assistant result to the chat: @@ -204,9 +203,6 @@ public partial class ChatComponent : MSGComponentBase, IAsyncDisposable // Select the correct provider: await this.SelectProviderWhenLoadingChat(); - // Check if Pandoc is available (no dialog or messages): - this.isPandocAvailable = await this.PandocAvailabilityService.IsAvailableAsync(); - await base.OnInitializedAsync(); } @@ -336,7 +332,12 @@ public partial class ChatComponent : MSGComponentBase, IAsyncDisposable this.currentChatTemplate = chatTemplate; if(!string.IsNullOrWhiteSpace(this.currentChatTemplate.PredefinedUserPrompt)) this.userInput = this.currentChatTemplate.PredefinedUserPrompt; - + + // Apply template's file attachments (replaces existing): + this.chatDocumentPaths.Clear(); + foreach (var attachment in this.currentChatTemplate.FileAttachments) + this.chatDocumentPaths.Add(attachment); + if(this.ChatThread is null) return; @@ -472,7 +473,7 @@ public partial class ChatComponent : MSGComponentBase, IAsyncDisposable lastUserPrompt = new ContentText { Text = this.userInput, - FileAttachments = this.chatDocumentPaths.ToList(), + FileAttachments = [..this.chatDocumentPaths.Where(x => x.IsValid)], }; // @@ -685,9 +686,14 @@ public partial class ChatComponent : MSGComponentBase, IAsyncDisposable Blocks = this.currentChatTemplate == ChatTemplate.NO_CHAT_TEMPLATE ? [] : this.currentChatTemplate.ExampleConversation.Select(x => x.DeepClone()).ToList(), }; } - + this.userInput = this.currentChatTemplate.PredefinedUserPrompt; - + + // Apply template's file attachments: + this.chatDocumentPaths.Clear(); + foreach (var attachment in this.currentChatTemplate.FileAttachments) + this.chatDocumentPaths.Add(attachment); + // Now, we have to reset the data source options as well: this.ApplyStandardDataSourceOptions(); @@ -941,10 +947,17 @@ public partial class ChatComponent : MSGComponentBase, IAsyncDisposable if (this.cancellationTokenSource is not null) { - if(!this.cancellationTokenSource.IsCancellationRequested) - await this.cancellationTokenSource.CancelAsync(); + try + { + if(!this.cancellationTokenSource.IsCancellationRequested) + await this.cancellationTokenSource.CancelAsync(); - this.cancellationTokenSource.Dispose(); + this.cancellationTokenSource.Dispose(); + } + catch + { + // ignored + } } } diff --git a/app/MindWork AI Studio/Components/ChatTemplateSelection.razor b/app/MindWork AI Studio/Components/ChatTemplateSelection.razor index 624520de..edfb9b41 100644 --- a/app/MindWork AI Studio/Components/ChatTemplateSelection.razor +++ b/app/MindWork AI Studio/Components/ChatTemplateSelection.razor @@ -7,7 +7,7 @@ @if (this.CurrentChatTemplate != ChatTemplate.NO_CHAT_TEMPLATE) { - @this.CurrentChatTemplate.Name + @this.CurrentChatTemplate.GetSafeName() } else @@ -16,14 +16,14 @@ } - + - + @foreach (var chatTemplate in this.SettingsManager.ConfigurationData.ChatTemplates.GetAllChatTemplates()) { - - @chatTemplate.Name + + @chatTemplate.GetSafeName() } diff --git a/app/MindWork AI Studio/Components/DataSourceSelection.razor.cs b/app/MindWork AI Studio/Components/DataSourceSelection.razor.cs index 5715d52f..0727092f 100644 --- a/app/MindWork AI Studio/Components/DataSourceSelection.razor.cs +++ b/app/MindWork AI Studio/Components/DataSourceSelection.razor.cs @@ -65,7 +65,7 @@ public partial class DataSourceSelection : MSGComponentBase this.aiBasedSourceSelection = this.DataSourceOptions.AutomaticDataSourceSelection; this.aiBasedValidation = this.DataSourceOptions.AutomaticValidation; this.areDataSourcesEnabled = !this.DataSourceOptions.DisableDataSources; - this.waitingForDataSources = this.areDataSourcesEnabled; + this.waitingForDataSources = this.areDataSourcesEnabled && this.SelectionMode is not DataSourceSelectionMode.CONFIGURATION_MODE; // // Preselect the data sources. Right now, we cannot filter @@ -181,7 +181,10 @@ public partial class DataSourceSelection : MSGComponentBase { if(this.DataSourceOptions.DisableDataSources) return; - + + if(this.SelectionMode is DataSourceSelectionMode.CONFIGURATION_MODE) + return; + this.waitingForDataSources = true; this.StateHasChanged(); diff --git a/app/MindWork AI Studio/Components/ProfileSelection.razor b/app/MindWork AI Studio/Components/ProfileSelection.razor index cab52e9b..02105589 100644 --- a/app/MindWork AI Studio/Components/ProfileSelection.razor +++ b/app/MindWork AI Studio/Components/ProfileSelection.razor @@ -6,7 +6,7 @@ @if (this.CurrentProfile != Profile.NO_PROFILE) { - @this.CurrentProfile.Name + @this.CurrentProfile.GetSafeName() } else @@ -15,12 +15,12 @@ } - + @foreach (var profile in this.SettingsManager.ConfigurationData.Profiles.GetAllProfiles()) { - - @profile.Name + + @profile.GetSafeName() } diff --git a/app/MindWork AI Studio/Components/ReadFileContent.razor.cs b/app/MindWork AI Studio/Components/ReadFileContent.razor.cs index e40d8088..5db85e21 100644 --- a/app/MindWork AI Studio/Components/ReadFileContent.razor.cs +++ b/app/MindWork AI Studio/Components/ReadFileContent.razor.cs @@ -1,5 +1,5 @@ -using AIStudio.Tools.Rust; using AIStudio.Tools.Services; +using AIStudio.Tools.Validation; using Microsoft.AspNetCore.Components; @@ -30,6 +30,18 @@ public partial class ReadFileContent : MSGComponentBase private async Task SelectFile() { + // Ensure that Pandoc is installed and ready: + var pandocState = await this.PandocAvailabilityService.EnsureAvailabilityAsync( + showSuccessMessage: false, + showDialog: true); + + // Check if Pandoc is available after the check / installation: + if (!pandocState.IsAvailable) + { + this.Logger.LogWarning("The user cancelled the Pandoc installation or Pandoc is not available. Aborting file selection."); + return; + } + var selectedFile = await this.RustService.SelectFile(T("Select file to read its content")); if (selectedFile.UserCancelled) { @@ -43,33 +55,12 @@ public partial class ReadFileContent : MSGComponentBase return; } - var ext = Path.GetExtension(selectedFile.SelectedFilePath).TrimStart('.'); - if (Array.Exists(FileTypeFilter.Executables.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase))) + if (!await FileExtensionValidation.IsExtensionValidWithNotifyAsync(FileExtensionValidation.UseCase.DIRECTLY_LOADING_CONTENT, selectedFile.SelectedFilePath)) { - this.Logger.LogWarning("User attempted to load executable file: {FilePath} with extension: {Extension}", selectedFile.SelectedFilePath, ext); - await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.AppBlocking, T("Executables are not allowed"))); + this.Logger.LogWarning("User attempted to load unsupported file: {FilePath}", selectedFile.SelectedFilePath); return; } - if (Array.Exists(FileTypeFilter.AllImages.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase))) - { - this.Logger.LogWarning("User attempted to load image file: {FilePath} with extension: {Extension}", selectedFile.SelectedFilePath, ext); - await MessageBus.INSTANCE.SendWarning(new(Icons.Material.Filled.ImageNotSupported, T("Images are not supported yet"))); - return; - } - - if (Array.Exists(FileTypeFilter.AllVideos.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase))) - { - this.Logger.LogWarning("User attempted to load video file: {FilePath} with extension: {Extension}", selectedFile.SelectedFilePath, ext); - await MessageBus.INSTANCE.SendWarning(new(Icons.Material.Filled.FeaturedVideo, this.T("Videos are not supported yet"))); - return; - } - - // Ensure that Pandoc is installed and ready: - await this.PandocAvailabilityService.EnsureAvailabilityAsync( - showSuccessMessage: false, - showDialog: true); - try { var fileContent = await UserFile.LoadFileData(selectedFile.SelectedFilePath, this.RustService, this.DialogService); diff --git a/app/MindWork AI Studio/Components/SecretInputField.razor b/app/MindWork AI Studio/Components/SecretInputField.razor index c1e9ddba..36945cab 100644 --- a/app/MindWork AI Studio/Components/SecretInputField.razor +++ b/app/MindWork AI Studio/Components/SecretInputField.razor @@ -15,6 +15,6 @@ UserAttributes="@SPELLCHECK_ATTRIBUTES"/> - + \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor b/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor index 58e9e828..0a5c89c8 100644 --- a/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor @@ -29,4 +29,9 @@ + + @if (PreviewFeatures.PRE_SPEECH_TO_TEXT_2026.IsEnabled(this.SettingsManager)) + { + + } \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor.cs b/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor.cs index 07e69709..2fbb61ed 100644 --- a/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor.cs +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelApp.razor.cs @@ -1,9 +1,23 @@ +using AIStudio.Provider; +using AIStudio.Settings; using AIStudio.Settings.DataModel; namespace AIStudio.Components.Settings; public partial class SettingsPanelApp : SettingsPanelBase { + private IEnumerable> GetFilteredTranscriptionProviders() + { + yield return new(T("Disable dictation and transcription"), string.Empty); + + var minimumLevel = this.SettingsManager.GetMinimumConfidenceLevel(Tools.Components.APP_SETTINGS); + foreach (var provider in this.SettingsManager.ConfigurationData.TranscriptionProviders) + { + if (provider.UsedLLMProvider.GetConfidence(this.SettingsManager).Level >= minimumLevel) + yield return new(provider.Name, provider.Id); + } + } + private void UpdatePreviewFeatures(PreviewVisibility previewVisibility) { this.SettingsManager.ConfigurationData.App.PreviewVisibility = previewVisibility; diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor b/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor index 69bcfb97..4ffc743f 100644 --- a/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor @@ -4,10 +4,10 @@ @if (PreviewFeatures.PRE_RAG_2024.IsEnabled(this.SettingsManager)) { - + - @T("Configured Embeddings") + @T("Configured Embedding Providers") @T("Embeddings are a way to represent words, sentences, entire documents, or even images and videos as digital fingerprints. Just like each person has a unique fingerprint, embedding models create unique digital patterns that capture the meaning and characteristics of the content they analyze. When two things are similar in meaning or content, their digital fingerprints will look very similar. For example, the fingerprints for 'happy' and 'joyful' would be more alike than those for 'happy' and 'sad'.") @@ -35,19 +35,28 @@ @context.Num @context.Name @context.UsedLLMProvider.ToName() - @this.GetEmbeddingProviderModelName(context) - + @GetEmbeddingProviderModelName(context) + - - - - - - - - - - + + @if (context.IsEnterpriseConfiguration) + { + + + + } + else + { + + + + + + + + + + } diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor.cs b/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor.cs index ec8a2316..50ebeb13 100644 --- a/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor.cs +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelEmbeddings.razor.cs @@ -15,7 +15,7 @@ public partial class SettingsPanelEmbeddings : SettingsPanelBase [Parameter] public EventCallback>> AvailableEmbeddingProvidersChanged { get; set; } - private string GetEmbeddingProviderModelName(EmbeddingProvider provider) + private static string GetEmbeddingProviderModelName(EmbeddingProvider provider) { const int MAX_LENGTH = 36; var modelName = provider.Model.ToString(); @@ -100,13 +100,13 @@ public partial class SettingsPanelEmbeddings : SettingsPanelBase if (dialogResult is null || dialogResult.Canceled) return; - var deleteSecretResponse = await this.RustService.DeleteAPIKey(provider); + var deleteSecretResponse = await this.RustService.DeleteAPIKey(provider, SecretStoreType.EMBEDDING_PROVIDER); if(deleteSecretResponse.Success) { this.SettingsManager.ConfigurationData.EmbeddingProviders.Remove(provider); await this.SettingsManager.StoreSettings(); } - + await this.UpdateEmbeddingProviders(); await this.MessageBus.SendMessage(this, Event.CONFIGURATION_CHANGED); } diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor b/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor index 616149d0..f9567086 100644 --- a/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor @@ -3,9 +3,9 @@ @using AIStudio.Provider.SelfHosted @inherits SettingsPanelBase - + - @T("Configured Providers") + @T("Configured LLM Providers") @T("What we call a provider is the combination of an LLM provider such as OpenAI and a model like GPT-4o. You can configure as many providers as you want. This way, you can use the appropriate model for each task. As an LLM provider, you can also choose local providers. However, to use this app, you must configure at least one provider.") @@ -32,11 +32,11 @@ @if (context.UsedLLMProvider is not LLMProviders.SELF_HOSTED) { - @this.GetLLMProviderModelName(context) + @GetLLMProviderModelName(context) } - else if (context.UsedLLMProvider is LLMProviders.SELF_HOSTED && context.Host is not Host.LLAMACPP) + else if (context.UsedLLMProvider is LLMProviders.SELF_HOSTED && context.Host is not Host.LLAMA_CPP) { - @this.GetLLMProviderModelName(context) + @GetLLMProviderModelName(context) } else { @@ -57,10 +57,10 @@ - + - + } diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor.cs b/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor.cs index af506e5e..035543dc 100644 --- a/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor.cs +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelProviders.razor.cs @@ -107,7 +107,7 @@ public partial class SettingsPanelProviders : SettingsPanelBase if (dialogResult is null || dialogResult.Canceled) return; - var deleteSecretResponse = await this.RustService.DeleteAPIKey(provider); + var deleteSecretResponse = await this.RustService.DeleteAPIKey(provider, SecretStoreType.LLM_PROVIDER); if(deleteSecretResponse.Success) { this.SettingsManager.ConfigurationData.Providers.Remove(provider); @@ -134,7 +134,7 @@ public partial class SettingsPanelProviders : SettingsPanelBase await this.MessageBus.SendMessage(this, Event.CONFIGURATION_CHANGED); } - private string GetLLMProviderModelName(AIStudio.Settings.Provider provider) + private static string GetLLMProviderModelName(AIStudio.Settings.Provider provider) { const int MAX_LENGTH = 36; var modelName = provider.Model.ToString(); diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelTranscription.razor b/app/MindWork AI Studio/Components/Settings/SettingsPanelTranscription.razor new file mode 100644 index 00000000..82421e94 --- /dev/null +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelTranscription.razor @@ -0,0 +1,73 @@ +@using AIStudio.Provider +@using AIStudio.Settings.DataModel +@inherits SettingsPanelBase + +@if (PreviewFeatures.PRE_SPEECH_TO_TEXT_2026.IsEnabled(this.SettingsManager)) +{ + + + + @T("Configured Transcription Providers") + + + @T("With the support of transcription models, MindWork AI Studio can convert human speech into text. This is useful, for example, when you need to dictate text. You can choose from dedicated transcription models, but not multimodal LLMs (large language models) that can handle both speech and text. The configuration of multimodal models is done in the 'Configure providers' section.") + + + + + + + + + + + + # + @T("Name") + @T("Provider") + @T("Model") + @T("Actions") + + + @context.Num + @context.Name + @context.UsedLLMProvider.ToName() + @GetTranscriptionProviderModelName(context) + + + + @if (context.IsEnterpriseConfiguration) + { + + + + } + else + { + + + + + + + + + + } + + + + + + @if (this.SettingsManager.ConfigurationData.TranscriptionProviders.Count == 0) + { + + @T("No transcription provider configured yet.") + + } + + + @T("Add transcription provider") + + +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Settings/SettingsPanelTranscription.razor.cs b/app/MindWork AI Studio/Components/Settings/SettingsPanelTranscription.razor.cs new file mode 100644 index 00000000..d564d5cd --- /dev/null +++ b/app/MindWork AI Studio/Components/Settings/SettingsPanelTranscription.razor.cs @@ -0,0 +1,122 @@ +using AIStudio.Dialogs; +using AIStudio.Settings; + +using Microsoft.AspNetCore.Components; + +using DialogOptions = AIStudio.Dialogs.DialogOptions; + +namespace AIStudio.Components.Settings; + +public partial class SettingsPanelTranscription : SettingsPanelBase +{ + [Parameter] + public List> AvailableTranscriptionProviders { get; set; } = new(); + + [Parameter] + public EventCallback>> AvailableTranscriptionProvidersChanged { get; set; } + + private static string GetTranscriptionProviderModelName(TranscriptionProvider provider) + { + const int MAX_LENGTH = 36; + var modelName = provider.Model.ToString(); + return modelName.Length > MAX_LENGTH ? "[...] " + modelName[^Math.Min(MAX_LENGTH, modelName.Length)..] : modelName; + } + + #region Overrides of ComponentBase + + protected override async Task OnInitializedAsync() + { + await this.UpdateTranscriptionProviders(); + await base.OnInitializedAsync(); + } + + #endregion + + private async Task AddTranscriptionProvider() + { + var dialogParameters = new DialogParameters + { + { x => x.IsEditing, false }, + }; + + var dialogReference = await this.DialogService.ShowAsync(T("Add Transcription Provider"), dialogParameters, DialogOptions.FULLSCREEN); + var dialogResult = await dialogReference.Result; + if (dialogResult is null || dialogResult.Canceled) + return; + + var addedTranscription = (TranscriptionProvider)dialogResult.Data!; + addedTranscription = addedTranscription with { Num = this.SettingsManager.ConfigurationData.NextTranscriptionNum++ }; + + this.SettingsManager.ConfigurationData.TranscriptionProviders.Add(addedTranscription); + await this.UpdateTranscriptionProviders(); + + await this.SettingsManager.StoreSettings(); + await this.MessageBus.SendMessage(this, Event.CONFIGURATION_CHANGED); + } + + private async Task EditTranscriptionProvider(TranscriptionProvider transcriptionProvider) + { + var dialogParameters = new DialogParameters + { + { x => x.DataNum, transcriptionProvider.Num }, + { x => x.DataId, transcriptionProvider.Id }, + { x => x.DataName, transcriptionProvider.Name }, + { x => x.DataLLMProvider, transcriptionProvider.UsedLLMProvider }, + { x => x.DataModel, transcriptionProvider.Model }, + { x => x.DataHostname, transcriptionProvider.Hostname }, + { x => x.IsSelfHosted, transcriptionProvider.IsSelfHosted }, + { x => x.IsEditing, true }, + { x => x.DataHost, transcriptionProvider.Host }, + }; + + var dialogReference = await this.DialogService.ShowAsync(T("Edit Transcription Provider"), dialogParameters, DialogOptions.FULLSCREEN); + var dialogResult = await dialogReference.Result; + if (dialogResult is null || dialogResult.Canceled) + return; + + var editedTranscriptionProvider = (TranscriptionProvider)dialogResult.Data!; + + // Set the provider number if it's not set. This is important for providers + // added before we started saving the provider number. + if(editedTranscriptionProvider.Num == 0) + editedTranscriptionProvider = editedTranscriptionProvider with { Num = this.SettingsManager.ConfigurationData.NextTranscriptionNum++ }; + + this.SettingsManager.ConfigurationData.TranscriptionProviders[this.SettingsManager.ConfigurationData.TranscriptionProviders.IndexOf(transcriptionProvider)] = editedTranscriptionProvider; + await this.UpdateTranscriptionProviders(); + + await this.SettingsManager.StoreSettings(); + await this.MessageBus.SendMessage(this, Event.CONFIGURATION_CHANGED); + } + + private async Task DeleteTranscriptionProvider(TranscriptionProvider provider) + { + var dialogParameters = new DialogParameters + { + { x => x.Message, string.Format(T("Are you sure you want to delete the transcription provider '{0}'?"), provider.Name) }, + }; + + var dialogReference = await this.DialogService.ShowAsync(T("Delete Transcription Provider"), dialogParameters, DialogOptions.FULLSCREEN); + var dialogResult = await dialogReference.Result; + if (dialogResult is null || dialogResult.Canceled) + return; + + var deleteSecretResponse = await this.RustService.DeleteAPIKey(provider, SecretStoreType.TRANSCRIPTION_PROVIDER); + if(deleteSecretResponse.Success) + { + this.SettingsManager.ConfigurationData.TranscriptionProviders.Remove(provider); + await this.SettingsManager.StoreSettings(); + } + + await this.UpdateTranscriptionProviders(); + await this.MessageBus.SendMessage(this, Event.CONFIGURATION_CHANGED); + } + + private async Task UpdateTranscriptionProviders() + { + this.AvailableTranscriptionProviders.Clear(); + foreach (var provider in this.SettingsManager.ConfigurationData.TranscriptionProviders) + this.AvailableTranscriptionProviders.Add(new (provider.Name, provider.Id)); + + await this.AvailableTranscriptionProvidersChanged.InvokeAsync(this.AvailableTranscriptionProviders); + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/VoiceRecorder.razor b/app/MindWork AI Studio/Components/VoiceRecorder.razor new file mode 100644 index 00000000..fb7a1334 --- /dev/null +++ b/app/MindWork AI Studio/Components/VoiceRecorder.razor @@ -0,0 +1,23 @@ +@using AIStudio.Settings.DataModel + +@namespace AIStudio.Components +@inherits MSGComponentBase + +@if (PreviewFeatures.PRE_SPEECH_TO_TEXT_2026.IsEnabled(this.SettingsManager) && !string.IsNullOrWhiteSpace(this.SettingsManager.ConfigurationData.App.UseTranscriptionProvider)) +{ + + @if (this.isTranscribing) + { + + } + else + { + + } + +} diff --git a/app/MindWork AI Studio/Components/VoiceRecorder.razor.cs b/app/MindWork AI Studio/Components/VoiceRecorder.razor.cs new file mode 100644 index 00000000..4ea00180 --- /dev/null +++ b/app/MindWork AI Studio/Components/VoiceRecorder.razor.cs @@ -0,0 +1,321 @@ +using AIStudio.Provider; +using AIStudio.Tools.MIME; +using AIStudio.Tools.Services; + +using Microsoft.AspNetCore.Components; + +namespace AIStudio.Components; + +public partial class VoiceRecorder : MSGComponentBase +{ + [Inject] + private ILogger Logger { get; init; } = null!; + + [Inject] + private IJSRuntime JsRuntime { get; init; } = null!; + + [Inject] + private RustService RustService { get; init; } = null!; + + [Inject] + private ISnackbar Snackbar { get; init; } = null!; + + private uint numReceivedChunks; + private bool isRecording; + private bool isTranscribing; + private FileStream? currentRecordingStream; + private string? currentRecordingPath; + private string? currentRecordingMimeType; + private string? finalRecordingPath; + private DotNetObjectReference? dotNetReference; + + private string Tooltip => this.isTranscribing + ? T("Transcription in progress...") + : this.isRecording + ? T("Stop recording and start transcription") + : T("Start recording your voice for a transcription"); + + private async Task OnRecordingToggled(bool toggled) + { + if (toggled) + { + var mimeTypes = GetPreferredMimeTypes( + Builder.Create().UseAudio().UseSubtype(AudioSubtype.OGG).Build(), + Builder.Create().UseAudio().UseSubtype(AudioSubtype.AAC).Build(), + Builder.Create().UseAudio().UseSubtype(AudioSubtype.MP3).Build(), + Builder.Create().UseAudio().UseSubtype(AudioSubtype.AIFF).Build(), + Builder.Create().UseAudio().UseSubtype(AudioSubtype.WAV).Build(), + Builder.Create().UseAudio().UseSubtype(AudioSubtype.FLAC).Build() + ); + + this.Logger.LogInformation("Starting audio recording with preferred MIME types: '{PreferredMimeTypes}'.", string.Join(", ", mimeTypes)); + + // Create a DotNetObjectReference to pass to JavaScript: + this.dotNetReference = DotNetObjectReference.Create(this); + + // Initialize the file stream for writing chunks: + await this.InitializeRecordingStream(); + + var mimeTypeStrings = mimeTypes.ToStringArray(); + var actualMimeType = await this.JsRuntime.InvokeAsync("audioRecorder.start", this.dotNetReference, mimeTypeStrings); + + // Store the MIME type for later use: + this.currentRecordingMimeType = actualMimeType; + + this.Logger.LogInformation("Audio recording started with MIME type: '{ActualMimeType}'.", actualMimeType); + this.isRecording = true; + } + else + { + var result = await this.JsRuntime.InvokeAsync("audioRecorder.stop"); + if (result.ChangedMimeType) + this.Logger.LogWarning("The recorded audio MIME type was changed to '{ResultMimeType}'.", result.MimeType); + + // Close and finalize the recording stream: + await this.FinalizeRecordingStream(); + + this.isRecording = false; + this.StateHasChanged(); + + // Start transcription if we have a recording and a configured provider: + if (this.finalRecordingPath is not null) + await this.TranscribeRecordingAsync(); + } + } + + private static MIMEType[] GetPreferredMimeTypes(params MIMEType[] mimeTypes) + { + // Default list if no parameters provided: + if (mimeTypes.Length is 0) + { + var audioBuilder = Builder.Create().UseAudio(); + return + [ + audioBuilder.UseSubtype(AudioSubtype.WEBM).Build(), + audioBuilder.UseSubtype(AudioSubtype.OGG).Build(), + audioBuilder.UseSubtype(AudioSubtype.MP4).Build(), + audioBuilder.UseSubtype(AudioSubtype.MPEG).Build(), + ]; + } + + return mimeTypes; + } + + private async Task InitializeRecordingStream() + { + this.numReceivedChunks = 0; + var dataDirectory = await this.RustService.GetDataDirectory(); + var recordingDirectory = Path.Combine(dataDirectory, "audioRecordings"); + if (!Directory.Exists(recordingDirectory)) + Directory.CreateDirectory(recordingDirectory); + + var fileName = $"recording_{DateTime.UtcNow:yyyyMMdd_HHmmss}.audio"; + this.currentRecordingPath = Path.Combine(recordingDirectory, fileName); + this.currentRecordingStream = new FileStream(this.currentRecordingPath, FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 8192, useAsync: true); + + this.Logger.LogInformation("Initialized audio recording stream: '{RecordingPath}'.", this.currentRecordingPath); + } + + [JSInvokable] + public async Task OnAudioChunkReceived(byte[] chunkBytes) + { + if (this.currentRecordingStream is null) + { + this.Logger.LogWarning("Received audio chunk but no recording stream is active."); + return; + } + + try + { + this.numReceivedChunks++; + await this.currentRecordingStream.WriteAsync(chunkBytes); + await this.currentRecordingStream.FlushAsync(); + + this.Logger.LogDebug("Wrote {ByteCount} bytes to recording stream.", chunkBytes.Length); + } + catch (Exception ex) + { + this.Logger.LogError(ex, "Error writing audio chunk to stream."); + } + } + + private async Task FinalizeRecordingStream() + { + this.finalRecordingPath = null; + if (this.currentRecordingStream is not null) + { + await this.currentRecordingStream.FlushAsync(); + await this.currentRecordingStream.DisposeAsync(); + this.currentRecordingStream = null; + + // Rename the file with the correct extension based on MIME type: + if (this.currentRecordingPath is not null && this.currentRecordingMimeType is not null) + { + var extension = GetFileExtension(this.currentRecordingMimeType); + var newPath = Path.ChangeExtension(this.currentRecordingPath, extension); + + if (File.Exists(this.currentRecordingPath)) + { + File.Move(this.currentRecordingPath, newPath, overwrite: true); + this.finalRecordingPath = newPath; + this.Logger.LogInformation("Finalized audio recording over {NumChunks} streamed audio chunks to the file '{RecordingPath}'.", this.numReceivedChunks, newPath); + } + } + } + + this.currentRecordingPath = null; + this.currentRecordingMimeType = null; + + // Dispose the .NET reference: + this.dotNetReference?.Dispose(); + this.dotNetReference = null; + } + + private static string GetFileExtension(string mimeType) + { + var baseMimeType = mimeType.Split(';')[0].Trim().ToLowerInvariant(); + return baseMimeType switch + { + "audio/webm" => ".webm", + "audio/ogg" => ".ogg", + "audio/mp4" => ".m4a", + "audio/mpeg" => ".mp3", + "audio/wav" => ".wav", + "audio/x-wav" => ".wav", + _ => ".audio" // Fallback + }; + } + + private async Task TranscribeRecordingAsync() + { + if (this.finalRecordingPath is null) + return; + + this.isTranscribing = true; + this.StateHasChanged(); + + try + { + // Get the configured transcription provider ID: + var transcriptionProviderId = this.SettingsManager.ConfigurationData.App.UseTranscriptionProvider; + if (string.IsNullOrWhiteSpace(transcriptionProviderId)) + { + this.Logger.LogWarning("No transcription provider is configured."); + await this.MessageBus.SendError(new(Icons.Material.Filled.VoiceChat, this.T("No transcription provider is configured."))); + return; + } + + // Find the transcription provider in the list of configured providers: + var transcriptionProviderSettings = this.SettingsManager.ConfigurationData.TranscriptionProviders + .FirstOrDefault(x => x.Id == transcriptionProviderId); + + if (transcriptionProviderSettings is null) + { + this.Logger.LogWarning("The configured transcription provider with ID '{ProviderId}' was not found.", transcriptionProviderId); + await this.MessageBus.SendError(new(Icons.Material.Filled.VoiceChat, this.T("The configured transcription provider was not found."))); + return; + } + + // Check the confidence level: + var minimumLevel = this.SettingsManager.GetMinimumConfidenceLevel(Tools.Components.NONE); + var providerConfidence = transcriptionProviderSettings.UsedLLMProvider.GetConfidence(this.SettingsManager); + if (providerConfidence.Level < minimumLevel) + { + this.Logger.LogWarning( + "The configured transcription provider '{ProviderName}' has a confidence level of '{ProviderLevel}', which is below the minimum required level of '{MinimumLevel}'.", + transcriptionProviderSettings.Name, + providerConfidence.Level, + minimumLevel); + await this.MessageBus.SendError(new(Icons.Material.Filled.VoiceChat, this.T("The configured transcription provider does not meet the minimum confidence level."))); + return; + } + + // Create the provider instance: + var provider = transcriptionProviderSettings.CreateProvider(); + if (provider.Provider is LLMProviders.NONE) + { + this.Logger.LogError("Failed to create the transcription provider instance."); + await this.MessageBus.SendError(new(Icons.Material.Filled.VoiceChat, this.T("Failed to create the transcription provider."))); + return; + } + + // Call the transcription API: + this.Logger.LogInformation("Starting transcription with provider '{ProviderName}' and model '{ModelName}'.", transcriptionProviderSettings.Name, transcriptionProviderSettings.Model.DisplayName); + var transcribedText = await provider.TranscribeAudioAsync(transcriptionProviderSettings.Model, this.finalRecordingPath, this.SettingsManager); + + if (string.IsNullOrWhiteSpace(transcribedText)) + { + this.Logger.LogWarning("The transcription result is empty."); + await this.MessageBus.SendWarning(new(Icons.Material.Filled.VoiceChat, this.T("The transcription result is empty."))); + return; + } + + // Remove trailing and leading whitespace: + transcribedText = transcribedText.Trim(); + + // Replace line breaks with spaces: + transcribedText = transcribedText.Replace("\r", " ").Replace("\n", " "); + + // Replace two spaces with a single space: + transcribedText = transcribedText.Replace(" ", " "); + + this.Logger.LogInformation("Transcription completed successfully. Result length: {Length} characters.", transcribedText.Length); + + // Play the transcription done sound effect: + await this.JsRuntime.InvokeVoidAsync("playSound", "/sounds/transcription_done.ogg"); + + // Copy the transcribed text to the clipboard: + await this.RustService.CopyText2Clipboard(this.Snackbar, transcribedText); + + // Delete the recording file: + try + { + if (File.Exists(this.finalRecordingPath)) + { + File.Delete(this.finalRecordingPath); + this.Logger.LogInformation("Deleted the recording file '{RecordingPath}'.", this.finalRecordingPath); + } + } + catch (Exception ex) + { + this.Logger.LogError(ex, "Failed to delete the recording file '{RecordingPath}'.", this.finalRecordingPath); + } + } + catch (Exception ex) + { + this.Logger.LogError(ex, "An error occurred during transcription."); + await this.MessageBus.SendError(new(Icons.Material.Filled.VoiceChat, this.T("An error occurred during transcription."))); + } + finally + { + this.finalRecordingPath = null; + this.isTranscribing = false; + this.StateHasChanged(); + } + } + + private sealed class AudioRecordingResult + { + public string MimeType { get; init; } = string.Empty; + + public bool ChangedMimeType { get; init; } + } + + #region Overrides of MSGComponentBase + + protected override void DisposeResources() + { + // Clean up recording resources if still active: + if (this.currentRecordingStream is not null) + { + this.currentRecordingStream.Dispose(); + this.currentRecordingStream = null; + } + + this.dotNetReference?.Dispose(); + this.dotNetReference = null; + base.DisposeResources(); + } + + #endregion +} diff --git a/app/MindWork AI Studio/Components/Workspaces.razor b/app/MindWork AI Studio/Components/Workspaces.razor index 9083af84..bdeb52ae 100644 --- a/app/MindWork AI Studio/Components/Workspaces.razor +++ b/app/MindWork AI Studio/Components/Workspaces.razor @@ -12,7 +12,7 @@ case TreeItemData treeItem: @if (treeItem.Type is TreeItemType.CHAT) { - +
@@ -28,15 +28,15 @@
- + - + - +
@@ -53,11 +53,11 @@
- + - +
@@ -82,7 +82,7 @@
  • - + @treeButton.Text
    diff --git a/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor b/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor index 0de3cd9d..0a72ef07 100644 --- a/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor +++ b/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor @@ -77,7 +77,22 @@ UserAttributes="@SPELLCHECK_ATTRIBUTES" HelperText="@T("Tell the AI your predefined user input.")" /> - + + + @T("File Attachments") + + + @T("You can attach files that will be automatically included when using this chat template. These files will be added to the first message sent in any chat using this template.") + + + @T("Profile Usage") diff --git a/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor.cs b/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor.cs index 3f9378ef..0aa16ddf 100644 --- a/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/ChatTemplateDialog.razor.cs @@ -50,7 +50,10 @@ public partial class ChatTemplateDialog : MSGComponentBase [Parameter] public IReadOnlyCollection ExampleConversation { get; init; } = []; - [Parameter] + [Parameter] + public IReadOnlyCollection FileAttachments { get; init; } = []; + + [Parameter] public bool AllowProfileUsage { get; set; } = true; [Parameter] @@ -71,6 +74,7 @@ public partial class ChatTemplateDialog : MSGComponentBase private bool dataIsValid; private List dataExampleConversation = []; + private HashSet fileAttachments = []; private string[] dataIssues = []; private string dataEditingPreviousName = string.Empty; private bool isInlineEditOnGoing; @@ -95,6 +99,7 @@ public partial class ChatTemplateDialog : MSGComponentBase { this.dataEditingPreviousName = this.DataName.ToLowerInvariant(); this.dataExampleConversation = this.ExampleConversation.Select(n => n.DeepClone()).ToList(); + this.fileAttachments = [..this.FileAttachments]; } if (this.CreateFromExistingChatThread && this.ExistingChatThread is not null) @@ -128,6 +133,7 @@ public partial class ChatTemplateDialog : MSGComponentBase SystemPrompt = this.DataSystemPrompt, PredefinedUserPrompt = this.PredefinedUserPrompt, ExampleConversation = this.dataExampleConversation, + FileAttachments = [..this.fileAttachments], AllowProfileUsage = this.AllowProfileUsage, EnterpriseConfigurationPluginId = Guid.Empty, diff --git a/app/MindWork AI Studio/Dialogs/DataSourceLocalDirectoryDialog.razor.cs b/app/MindWork AI Studio/Dialogs/DataSourceLocalDirectoryDialog.razor.cs index 019312da..0137f068 100644 --- a/app/MindWork AI Studio/Dialogs/DataSourceLocalDirectoryDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/DataSourceLocalDirectoryDialog.razor.cs @@ -96,7 +96,7 @@ public partial class DataSourceLocalDirectoryDialog : MSGComponentBase #endregion - private bool SelectedCloudEmbedding => !this.SettingsManager.ConfigurationData.EmbeddingProviders.FirstOrDefault(x => x.Id == this.dataEmbeddingId).IsSelfHosted; + private bool SelectedCloudEmbedding => !this.SettingsManager.ConfigurationData.EmbeddingProviders.FirstOrDefault(x => x.Id == this.dataEmbeddingId)?.IsSelfHosted ?? false; private DataSourceLocalDirectory CreateDataSource() => new() { diff --git a/app/MindWork AI Studio/Dialogs/DataSourceLocalDirectoryInfoDialog.razor.cs b/app/MindWork AI Studio/Dialogs/DataSourceLocalDirectoryInfoDialog.razor.cs index 73bc8dc6..b56bf06a 100644 --- a/app/MindWork AI Studio/Dialogs/DataSourceLocalDirectoryInfoDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/DataSourceLocalDirectoryInfoDialog.razor.cs @@ -27,7 +27,7 @@ public partial class DataSourceLocalDirectoryInfoDialog : MSGComponentBase, IAsy protected override async Task OnInitializedAsync() { - this.embeddingProvider = this.SettingsManager.ConfigurationData.EmbeddingProviders.FirstOrDefault(x => x.Id == this.DataSource.EmbeddingId); + this.embeddingProvider = this.SettingsManager.ConfigurationData.EmbeddingProviders.FirstOrDefault(x => x.Id == this.DataSource.EmbeddingId) ?? EmbeddingProvider.NONE; this.directoryInfo = new DirectoryInfo(this.DataSource.Path); if (this.directoryInfo.Exists) @@ -46,7 +46,7 @@ public partial class DataSourceLocalDirectoryInfoDialog : MSGComponentBase, IAsy private readonly CancellationTokenSource cts = new(); - private EmbeddingProvider embeddingProvider; + private EmbeddingProvider embeddingProvider = EmbeddingProvider.NONE; private DirectoryInfo directoryInfo = null!; private long directorySizeBytes; private long directorySizeNumFiles; diff --git a/app/MindWork AI Studio/Dialogs/DataSourceLocalFileDialog.razor.cs b/app/MindWork AI Studio/Dialogs/DataSourceLocalFileDialog.razor.cs index 76d93c35..324b0d71 100644 --- a/app/MindWork AI Studio/Dialogs/DataSourceLocalFileDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/DataSourceLocalFileDialog.razor.cs @@ -96,7 +96,7 @@ public partial class DataSourceLocalFileDialog : MSGComponentBase #endregion - private bool SelectedCloudEmbedding => !this.SettingsManager.ConfigurationData.EmbeddingProviders.FirstOrDefault(x => x.Id == this.dataEmbeddingId).IsSelfHosted; + private bool SelectedCloudEmbedding => !this.SettingsManager.ConfigurationData.EmbeddingProviders.FirstOrDefault(x => x.Id == this.dataEmbeddingId)?.IsSelfHosted ?? false; private DataSourceLocalFile CreateDataSource() => new() { diff --git a/app/MindWork AI Studio/Dialogs/DataSourceLocalFileInfoDialog.razor.cs b/app/MindWork AI Studio/Dialogs/DataSourceLocalFileInfoDialog.razor.cs index 0601c182..68f31aff 100644 --- a/app/MindWork AI Studio/Dialogs/DataSourceLocalFileInfoDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/DataSourceLocalFileInfoDialog.razor.cs @@ -18,14 +18,14 @@ public partial class DataSourceLocalFileInfoDialog : MSGComponentBase protected override async Task OnInitializedAsync() { - this.embeddingProvider = this.SettingsManager.ConfigurationData.EmbeddingProviders.FirstOrDefault(x => x.Id == this.DataSource.EmbeddingId); + this.embeddingProvider = this.SettingsManager.ConfigurationData.EmbeddingProviders.FirstOrDefault(x => x.Id == this.DataSource.EmbeddingId) ?? EmbeddingProvider.NONE; this.fileInfo = new FileInfo(this.DataSource.FilePath); await base.OnInitializedAsync(); } #endregion - private EmbeddingProvider embeddingProvider; + private EmbeddingProvider embeddingProvider = EmbeddingProvider.NONE; private FileInfo fileInfo = null!; private bool IsCloudEmbedding => !this.embeddingProvider.IsSelfHosted; diff --git a/app/MindWork AI Studio/Dialogs/DocumentCheckDialog.razor b/app/MindWork AI Studio/Dialogs/DocumentCheckDialog.razor index 88e5353f..f3b75837 100644 --- a/app/MindWork AI Studio/Dialogs/DocumentCheckDialog.razor +++ b/app/MindWork AI Studio/Dialogs/DocumentCheckDialog.razor @@ -6,7 +6,7 @@ @T("See how we load your file. Review the content before we process it further.") - @if (string.IsNullOrWhiteSpace(this.FilePath)) + @if (this.Document is null) { } @@ -14,7 +14,7 @@ { } - - - -
    - -
    -
    -
    - - - -
    - + @if (!this.Document?.Exists ?? false) + { + + @T("The specified file could not be found. The file have been moved, deleted, renamed, or is otherwise inaccessible.") + + } + else + { + + @if (this.Document?.IsImage ?? false) + { + + + + } + else + { + + +
    + +
    +
    +
    + + + + } +
    + } - + @T("Close") diff --git a/app/MindWork AI Studio/Dialogs/DocumentCheckDialog.razor.cs b/app/MindWork AI Studio/Dialogs/DocumentCheckDialog.razor.cs index 39abd602..4bf306f1 100644 --- a/app/MindWork AI Studio/Dialogs/DocumentCheckDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/DocumentCheckDialog.razor.cs @@ -1,4 +1,5 @@ -using AIStudio.Components; +using AIStudio.Chat; +using AIStudio.Components; using AIStudio.Tools.Services; using Microsoft.AspNetCore.Components; @@ -13,7 +14,7 @@ public partial class DocumentCheckDialog : MSGComponentBase private IMudDialogInstance MudDialog { get; set; } = null!; [Parameter] - public string FilePath { get; set; } = string.Empty; + public FileAttachment? Document { get; set; } private void Close() => this.MudDialog.Cancel(); @@ -27,27 +28,30 @@ public partial class DocumentCheckDialog : MSGComponentBase private IDialogService DialogService { get; init; } = null!; [Inject] - private ILogger Logger { get; init; } = null!; + private ILogger Logger { get; init; } = null!; protected override async Task OnAfterRenderAsync(bool firstRender) { - if (firstRender && !string.IsNullOrWhiteSpace(this.FilePath)) + if (firstRender && this.Document is not null) { try { - var fileContent = await UserFile.LoadFileData(this.FilePath, this.RustService, this.DialogService); - this.FileContent = fileContent; - this.StateHasChanged(); + if (!this.Document.IsImage) + { + var fileContent = await UserFile.LoadFileData(this.Document.FilePath, this.RustService, this.DialogService); + this.FileContent = fileContent; + } } catch (Exception ex) { - this.Logger.LogError(ex, "Failed to load file content from '{FilePath}'", this.FilePath); + this.Logger.LogError(ex, "Failed to load file content from '{FilePath}'", this.Document); this.FileContent = string.Empty; - this.StateHasChanged(); } + + this.StateHasChanged(); } else if (firstRender) - this.Logger.LogWarning("Document check dialog opened without a valid file path"); + this.Logger.LogWarning("Document check dialog opened without a valid file path."); } private CodeBlockTheme CodeColorPalette => this.SettingsManager.IsDarkMode ? CodeBlockTheme.Dark : CodeBlockTheme.Default; diff --git a/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor b/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor index c79c80dd..aaf2cec7 100644 --- a/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor +++ b/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor @@ -10,7 +10,7 @@ @foreach (LLMProviders provider in Enum.GetValues(typeof(LLMProviders))) { - if (provider.ProvideEmbeddings() || provider is LLMProviders.NONE) + if (provider.ProvideEmbeddingAPI() || provider is LLMProviders.NONE) { @provider.ToName() @@ -25,7 +25,7 @@ @if (this.DataLLMProvider.IsAPIKeyNeeded(this.DataHost)) { - + } @if (this.DataLLMProvider.IsHostnameNeeded()) @@ -47,7 +47,7 @@ @foreach (Host host in Enum.GetValues(typeof(Host))) { - if (host.AreEmbeddingsSupported()) + if (host.IsEmbeddingSupported()) { @host.Name() @@ -71,12 +71,12 @@ AdornmentColor="Color.Info" Validation="@this.ValidateManuallyModel" UserAttributes="@SPELLCHECK_ATTRIBUTES" - HelperText="@T("Currently, we cannot query the embedding models of self-hosted systems. Therefore, enter the model name manually.")" + HelperText="@T("Currently, we cannot query the embedding models for the selected provider and/or host. Therefore, please enter the model name manually.")" /> } else { - + @T("Load") @if(this.availableModels.Count is 0) diff --git a/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor.cs b/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor.cs index d586a213..8a0180c5 100644 --- a/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor.cs @@ -129,6 +129,8 @@ public partial class EmbeddingProviderDialog : MSGComponentBase, ISecretId IsSelfHosted = this.DataLLMProvider is LLMProviders.SELF_HOSTED, Hostname = cleanedHostname.EndsWith('/') ? cleanedHostname[..^1] : cleanedHostname, Host = this.DataHost, + IsEnterpriseConfiguration = false, + EnterpriseConfigurationPluginId = Guid.Empty, }; } @@ -136,6 +138,9 @@ public partial class EmbeddingProviderDialog : MSGComponentBase, ISecretId protected override async Task OnInitializedAsync() { + // Call the base initialization first so that the I18N is ready: + await base.OnInitializedAsync(); + // Configure the spellchecking for the instance name input: this.SettingsManager.InjectSpellchecking(SPELLCHECK_ATTRIBUTES); @@ -162,7 +167,7 @@ public partial class EmbeddingProviderDialog : MSGComponentBase, ISecretId } // Load the API key: - var requestedSecret = await this.RustService.GetAPIKey(this, isTrying: this.DataLLMProvider is LLMProviders.SELF_HOSTED); + var requestedSecret = await this.RustService.GetAPIKey(this, SecretStoreType.EMBEDDING_PROVIDER, isTrying: this.DataLLMProvider is LLMProviders.SELF_HOSTED); if (requestedSecret.Success) this.dataAPIKey = await requestedSecret.Secret.Decrypt(this.encryption); else @@ -177,8 +182,6 @@ public partial class EmbeddingProviderDialog : MSGComponentBase, ISecretId await this.ReloadModels(); } - - await base.OnInitializedAsync(); } protected override async Task OnAfterRenderAsync(bool firstRender) @@ -195,7 +198,7 @@ public partial class EmbeddingProviderDialog : MSGComponentBase, ISecretId #region Implementation of ISecretId - public string SecretId => this.DataId; + public string SecretId => this.DataLLMProvider.ToName(); public string SecretName => this.DataName; @@ -216,7 +219,7 @@ public partial class EmbeddingProviderDialog : MSGComponentBase, ISecretId if (!string.IsNullOrWhiteSpace(this.dataAPIKey)) { // Store the API key in the OS secure storage: - var storeResponse = await this.RustService.SetAPIKey(this, this.dataAPIKey); + var storeResponse = await this.RustService.SetAPIKey(this, this.dataAPIKey, SecretStoreType.EMBEDDING_PROVIDER); if (!storeResponse.Success) { this.dataAPIKeyStorageIssue = string.Format(T("Failed to store the API key in the operating system. The message was: {0}. Please try again."), storeResponse.Issue); @@ -237,6 +240,16 @@ public partial class EmbeddingProviderDialog : MSGComponentBase, ISecretId } private void Cancel() => this.MudDialog.Cancel(); + + private async Task OnAPIKeyChanged(string apiKey) + { + this.dataAPIKey = apiKey; + if (!string.IsNullOrWhiteSpace(this.dataAPIKeyStorageIssue)) + { + this.dataAPIKeyStorageIssue = string.Empty; + await this.form.Validate(); + } + } private async Task ReloadModels() { diff --git a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor index e4c22f18..b424202d 100644 --- a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor +++ b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor @@ -22,7 +22,7 @@ @if (this.DataLLMProvider.IsAPIKeyNeeded(this.DataHost)) { - + } @if (this.DataLLMProvider.IsHostnameNeeded()) @@ -44,9 +44,12 @@ @foreach (Host host in Enum.GetValues(typeof(Host))) { - - @host.Name() - + @if (host.IsChatSupported()) + { + + @host.Name() + + } } } @@ -84,11 +87,12 @@ AdornmentColor="Color.Info" Validation="@this.ValidateManuallyModel" UserAttributes="@SPELLCHECK_ATTRIBUTES" + HelperText="@T("Currently, we cannot query the models for the selected provider and/or host. Therefore, please enter the model name manually.")" /> } else { - + @T("Load models") @if(this.availableModels.Count is 0) diff --git a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs index 0c3d2b1f..f00a43d5 100644 --- a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs @@ -147,6 +147,9 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId protected override async Task OnInitializedAsync() { + // Call the base initialization first so that the I18N is ready: + await base.OnInitializedAsync(); + // Configure the spellchecking for the instance name input: this.SettingsManager.InjectSpellchecking(SPELLCHECK_ATTRIBUTES); @@ -177,7 +180,7 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId } // Load the API key: - var requestedSecret = await this.RustService.GetAPIKey(this, isTrying: this.DataLLMProvider is LLMProviders.SELF_HOSTED); + var requestedSecret = await this.RustService.GetAPIKey(this, SecretStoreType.LLM_PROVIDER, isTrying: this.DataLLMProvider is LLMProviders.SELF_HOSTED); if (requestedSecret.Success) this.dataAPIKey = await requestedSecret.Secret.Decrypt(this.encryption); else @@ -192,8 +195,6 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId await this.ReloadModels(); } - - await base.OnInitializedAsync(); } protected override async Task OnAfterRenderAsync(bool firstRender) @@ -232,7 +233,7 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId if (!string.IsNullOrWhiteSpace(this.dataAPIKey)) { // Store the API key in the OS secure storage: - var storeResponse = await this.RustService.SetAPIKey(this, this.dataAPIKey); + var storeResponse = await this.RustService.SetAPIKey(this, this.dataAPIKey, SecretStoreType.LLM_PROVIDER); if (!storeResponse.Success) { this.dataAPIKeyStorageIssue = string.Format(T("Failed to store the API key in the operating system. The message was: {0}. Please try again."), storeResponse.Issue); @@ -253,6 +254,16 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId } private void Cancel() => this.MudDialog.Cancel(); + + private async Task OnAPIKeyChanged(string apiKey) + { + this.dataAPIKey = apiKey; + if (!string.IsNullOrWhiteSpace(this.dataAPIKeyStorageIssue)) + { + this.dataAPIKeyStorageIssue = string.Empty; + await this.form.Validate(); + } + } private async Task ReloadModels() { diff --git a/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor b/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor new file mode 100644 index 00000000..bb9d8b9f --- /dev/null +++ b/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor @@ -0,0 +1,100 @@ +@inherits MSGComponentBase + + + + + @T("Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon.") + + + + +
    + @if (!this.DocumentPaths.Any()) + { + + @T("There aren't any file attachments available right now.") + + } + + @{ + var currentFolder = string.Empty; + foreach (var fileAttachment in this.DocumentPaths) + { + var folderPath = Path.GetDirectoryName(fileAttachment.FilePath); + if (folderPath != currentFolder) + { + currentFolder = folderPath; + + + + @folderPath: + + + } + + @if (fileAttachment.Exists) + { + +
    + + + + + @fileAttachment.FileName + + + +
    + + + + + + + + + + +
    + } + else + { + +
    + + + + + @fileAttachment.FileName + + + +
    + + + + + + + + +
    + } + } + } +
    +
    + + + @T("Close") + + +
    \ No newline at end of file diff --git a/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor.cs b/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor.cs new file mode 100644 index 00000000..aa12f128 --- /dev/null +++ b/app/MindWork AI Studio/Dialogs/ReviewAttachmentsDialog.razor.cs @@ -0,0 +1,63 @@ +using AIStudio.Chat; +using AIStudio.Components; +using AIStudio.Tools.PluginSystem; + +using Microsoft.AspNetCore.Components; + +namespace AIStudio.Dialogs; + +public partial class ReviewAttachmentsDialog : MSGComponentBase +{ + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ReviewAttachmentsDialog).Namespace, nameof(ReviewAttachmentsDialog)); + + [CascadingParameter] + private IMudDialogInstance MudDialog { get; set; } = null!; + + [Parameter] + public HashSet DocumentPaths { get; set; } = new(); + + [Inject] + private IDialogService DialogService { get; set; } = null!; + + private void Close() => this.MudDialog.Close(DialogResult.Ok(this.DocumentPaths)); + + public static async Task> OpenDialogAsync(IDialogService dialogService, params HashSet documentPaths) + { + var dialogParameters = new DialogParameters + { + { x => x.DocumentPaths, documentPaths } + }; + + var dialogReference = await dialogService.ShowAsync(TB("Your attached files"), dialogParameters, DialogOptions.FULLSCREEN); + var dialogResult = await dialogReference.Result; + if (dialogResult is null || dialogResult.Canceled) + return documentPaths; + + if (dialogResult.Data is null) + return documentPaths; + + return dialogResult.Data as HashSet ?? documentPaths; + } + + private void DeleteAttachment(FileAttachment fileAttachment) + { + if (this.DocumentPaths.Remove(fileAttachment)) + { + this.StateHasChanged(); + } + } + + /// + /// The user might want to check what we actually extract from his file and therefore give the LLM as an input. + /// + /// The file to check. + private async Task InvestigateFile(FileAttachment fileAttachment) + { + var dialogParameters = new DialogParameters + { + { x => x.Document, fileAttachment }, + }; + + await this.DialogService.ShowAsync(T("Document Preview"), dialogParameters, DialogOptions.FULLSCREEN); + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogChatTemplate.razor b/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogChatTemplate.razor index bb1fb816..060dc0ee 100644 --- a/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogChatTemplate.razor +++ b/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogChatTemplate.razor @@ -41,10 +41,10 @@ { - + - + } diff --git a/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogChatTemplate.razor.cs b/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogChatTemplate.razor.cs index 2708ab4f..579fff22 100644 --- a/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogChatTemplate.razor.cs +++ b/app/MindWork AI Studio/Dialogs/Settings/SettingsDialogChatTemplate.razor.cs @@ -65,6 +65,7 @@ public partial class SettingsDialogChatTemplate : SettingsDialogBase { x => x.PredefinedUserPrompt, chatTemplate.PredefinedUserPrompt }, { x => x.IsEditing, true }, { x => x.ExampleConversation, chatTemplate.ExampleConversation }, + { x => x.FileAttachments, chatTemplate.FileAttachments }, { x => x.AllowProfileUsage, chatTemplate.AllowProfileUsage }, }; diff --git a/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor b/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor new file mode 100644 index 00000000..0a2aa3bb --- /dev/null +++ b/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor @@ -0,0 +1,140 @@ +@using AIStudio.Provider +@using AIStudio.Provider.SelfHosted +@inherits MSGComponentBase + + + + + + @* ReSharper disable once CSharpWarnings::CS8974 *@ + + @foreach (LLMProviders provider in Enum.GetValues(typeof(LLMProviders))) + { + if (provider.ProvideTranscriptionAPI() || provider is LLMProviders.NONE) + { + + @provider.ToName() + + } + } + + + @T("Create account") + + + + @if (this.DataLLMProvider.IsAPIKeyNeeded(this.DataHost)) + { + + } + + @if (this.DataLLMProvider.IsHostnameNeeded()) + { + + } + + @if (this.DataLLMProvider.IsHostNeeded()) + { + + @foreach (Host host in Enum.GetValues(typeof(Host))) + { + if (host.IsTranscriptionSupported()) + { + + @host.Name() + + } + } + + } + + + + @if (this.DataLLMProvider.IsTranscriptionModelProvidedManually(this.DataHost)) + { + + } + else + { + + @T("Load") + + @if(this.availableModels.Count is 0) + { + + @T("No models loaded or available.") + + } + else + { + + @foreach (var model in this.availableModels) + { + + @model + + } + + } + } + + + + @* ReSharper disable once CSharpWarnings::CS8974 *@ + + + + + + + + @T("Cancel") + + + @if(this.IsEditing) + { + @T("Update") + } + else + { + @T("Add") + } + + + \ No newline at end of file diff --git a/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs b/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs new file mode 100644 index 00000000..e2f4110d --- /dev/null +++ b/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs @@ -0,0 +1,285 @@ +using AIStudio.Components; +using AIStudio.Provider; +using AIStudio.Settings; +using AIStudio.Tools.Services; +using AIStudio.Tools.Validation; + +using Microsoft.AspNetCore.Components; + +using Host = AIStudio.Provider.SelfHosted.Host; + +namespace AIStudio.Dialogs; + +public partial class TranscriptionProviderDialog : MSGComponentBase, ISecretId +{ + [CascadingParameter] + private IMudDialogInstance MudDialog { get; set; } = null!; + + /// + /// The transcription provider's number in the list. + /// + [Parameter] + public uint DataNum { get; set; } + + /// + /// The transcription provider's ID. + /// + [Parameter] + public string DataId { get; set; } = Guid.NewGuid().ToString(); + + /// + /// The user chosen name. + /// + [Parameter] + public string DataName { get; set; } = string.Empty; + + /// + /// The chosen hostname for self-hosted providers. + /// + [Parameter] + public string DataHostname { get; set; } = string.Empty; + + /// + /// The host to use, e.g., llama.cpp. + /// + [Parameter] + public Host DataHost { get; set; } = Host.NONE; + + /// + /// Is this provider self-hosted? + /// + [Parameter] + public bool IsSelfHosted { get; set; } + + /// + /// The provider to use. + /// + [Parameter] + public LLMProviders DataLLMProvider { get; set; } = LLMProviders.NONE; + + /// + /// The transcription model to use. + /// + [Parameter] + public Model DataModel { get; set; } + + /// + /// Should the dialog be in editing mode? + /// + [Parameter] + public bool IsEditing { get; init; } + + [Inject] + private RustService RustService { get; init; } = null!; + + private static readonly Dictionary SPELLCHECK_ATTRIBUTES = new(); + + /// + /// The list of used instance names. We need this to check for uniqueness. + /// + private List UsedInstanceNames { get; set; } = []; + + private bool dataIsValid; + private string[] dataIssues = []; + private string dataAPIKey = string.Empty; + private string dataManuallyModel = string.Empty; + private string dataAPIKeyStorageIssue = string.Empty; + private string dataEditingPreviousInstanceName = string.Empty; + + // We get the form reference from Blazor code to validate it manually: + private MudForm form = null!; + + private readonly List availableModels = new(); + private readonly Encryption encryption = Program.ENCRYPTION; + private readonly ProviderValidation providerValidation; + + public TranscriptionProviderDialog() + { + this.providerValidation = new() + { + GetProvider = () => this.DataLLMProvider, + GetAPIKeyStorageIssue = () => this.dataAPIKeyStorageIssue, + GetPreviousInstanceName = () => this.dataEditingPreviousInstanceName, + GetUsedInstanceNames = () => this.UsedInstanceNames, + GetHost = () => this.DataHost, + }; + } + + private TranscriptionProvider CreateTranscriptionProviderSettings() + { + var cleanedHostname = this.DataHostname.Trim(); + Model model = default; + if(this.DataLLMProvider is LLMProviders.SELF_HOSTED) + { + switch (this.DataHost) + { + case Host.OLLAMA: + model = new Model(this.dataManuallyModel, null); + break; + + case Host.VLLM: + case Host.LM_STUDIO: + case Host.WHISPER_CPP: + model = this.DataModel; + break; + } + } + else + model = this.DataModel; + + return new() + { + Num = this.DataNum, + Id = this.DataId, + Name = this.DataName, + UsedLLMProvider = this.DataLLMProvider, + Model = model, + IsSelfHosted = this.DataLLMProvider is LLMProviders.SELF_HOSTED, + Hostname = cleanedHostname.EndsWith('/') ? cleanedHostname[..^1] : cleanedHostname, + Host = this.DataHost, + IsEnterpriseConfiguration = false, + EnterpriseConfigurationPluginId = Guid.Empty, + }; + } + + #region Overrides of ComponentBase + + protected override async Task OnInitializedAsync() + { + // Call the base initialization first so that the I18N is ready: + await base.OnInitializedAsync(); + + // Configure the spellchecking for the instance name input: + this.SettingsManager.InjectSpellchecking(SPELLCHECK_ATTRIBUTES); + + // Load the used instance names: + this.UsedInstanceNames = this.SettingsManager.ConfigurationData.TranscriptionProviders.Select(x => x.Name.ToLowerInvariant()).ToList(); + + // When editing, we need to load the data: + if(this.IsEditing) + { + this.dataEditingPreviousInstanceName = this.DataName.ToLowerInvariant(); + + // When using self-hosted models, we must copy the model name: + if (this.DataLLMProvider is LLMProviders.SELF_HOSTED) + this.dataManuallyModel = this.DataModel.Id; + + // + // We cannot load the API key for self-hosted providers: + // + if (this.DataLLMProvider is LLMProviders.SELF_HOSTED && this.DataHost is not Host.OLLAMA) + { + await this.ReloadModels(); + await base.OnInitializedAsync(); + return; + } + + // Load the API key: + var requestedSecret = await this.RustService.GetAPIKey(this, SecretStoreType.TRANSCRIPTION_PROVIDER, isTrying: this.DataLLMProvider is LLMProviders.SELF_HOSTED); + if (requestedSecret.Success) + this.dataAPIKey = await requestedSecret.Secret.Decrypt(this.encryption); + else + { + this.dataAPIKey = string.Empty; + if (this.DataLLMProvider is not LLMProviders.SELF_HOSTED) + { + this.dataAPIKeyStorageIssue = string.Format(T("Failed to load the API key from the operating system. The message was: {0}. You might ignore this message and provide the API key again."), requestedSecret.Issue); + await this.form.Validate(); + } + } + + await this.ReloadModels(); + } + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + // Reset the validation when not editing and on the first render. + // We don't want to show validation errors when the user opens the dialog. + if(!this.IsEditing && firstRender) + this.form.ResetValidation(); + + await base.OnAfterRenderAsync(firstRender); + } + + #endregion + + #region Implementation of ISecretId + + public string SecretId => this.DataLLMProvider.ToName(); + + public string SecretName => this.DataName; + + #endregion + + private async Task Store() + { + await this.form.Validate(); + this.dataAPIKeyStorageIssue = string.Empty; + + // When the data is not valid, we don't store it: + if (!this.dataIsValid) + return; + + // Use the data model to store the provider. + // We just return this data to the parent component: + var addedProviderSettings = this.CreateTranscriptionProviderSettings(); + if (!string.IsNullOrWhiteSpace(this.dataAPIKey)) + { + // Store the API key in the OS secure storage: + var storeResponse = await this.RustService.SetAPIKey(this, this.dataAPIKey, SecretStoreType.TRANSCRIPTION_PROVIDER); + if (!storeResponse.Success) + { + this.dataAPIKeyStorageIssue = string.Format(T("Failed to store the API key in the operating system. The message was: {0}. Please try again."), storeResponse.Issue); + await this.form.Validate(); + return; + } + } + + this.MudDialog.Close(DialogResult.Ok(addedProviderSettings)); + } + + private string? ValidateManuallyModel(string manuallyModel) + { + if (this.DataLLMProvider is LLMProviders.SELF_HOSTED && string.IsNullOrWhiteSpace(manuallyModel)) + return T("Please enter a transcription model name."); + + return null; + } + + private void Cancel() => this.MudDialog.Cancel(); + + private async Task OnAPIKeyChanged(string apiKey) + { + this.dataAPIKey = apiKey; + if (!string.IsNullOrWhiteSpace(this.dataAPIKeyStorageIssue)) + { + this.dataAPIKeyStorageIssue = string.Empty; + await this.form.Validate(); + } + } + + private async Task ReloadModels() + { + var currentTranscriptionProviderSettings = this.CreateTranscriptionProviderSettings(); + var provider = currentTranscriptionProviderSettings.CreateProvider(); + if(provider is NoProvider) + return; + + var models = await provider.GetTranscriptionModels(this.dataAPIKey); + + // Order descending by ID means that the newest models probably come first: + var orderedModels = models.OrderByDescending(n => n.Id); + + this.availableModels.Clear(); + this.availableModels.AddRange(orderedModels); + } + + private string APIKeyText => this.DataLLMProvider switch + { + LLMProviders.SELF_HOSTED => T("(Optional) API Key"), + _ => T("API Key"), + }; + + private bool IsNoneProvider => this.DataLLMProvider is LLMProviders.NONE; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/FileHandler.cs b/app/MindWork AI Studio/FileHandler.cs new file mode 100644 index 00000000..5fd18896 --- /dev/null +++ b/app/MindWork AI Studio/FileHandler.cs @@ -0,0 +1,80 @@ +using Microsoft.AspNetCore.StaticFiles; + +namespace AIStudio; + +internal static class FileHandler +{ + private const string ENDPOINT = "/local/file"; + + private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(nameof(FileHandler)); + + internal static string CreateFileUrl(string filePath) + { + var encodedPath = Uri.EscapeDataString(filePath); + return $"{ENDPOINT}?path={encodedPath}"; + } + + internal static async Task HandlerAsync(HttpContext context, Func nextHandler) + { + var requestPath = context.Request.Path.Value; + if (string.IsNullOrWhiteSpace(requestPath) || !requestPath.Equals(ENDPOINT, StringComparison.Ordinal)) + { + await nextHandler(); + return; + } + + // Extract the file path from the query parameter: + // Format: /local/file?path={url-encoded-path} + if (!context.Request.Query.TryGetValue("path", out var pathValues) || pathValues.Count == 0) + { + context.Response.StatusCode = StatusCodes.Status400BadRequest; + LOGGER.LogWarning("No file path provided in the request. Using ?path={{url-encoded-path}} format."); + return; + } + + // The query parameter is automatically URL-decoded by ASP.NET Core: + var filePath = pathValues[0]; + if (string.IsNullOrWhiteSpace(filePath)) + { + context.Response.StatusCode = StatusCodes.Status400BadRequest; + LOGGER.LogWarning("Empty file path provided in the request."); + return; + } + + // Security check: Prevent path traversal attacks: + var fullPath = Path.GetFullPath(filePath); + if (fullPath != filePath && !filePath.StartsWith('/')) + { + // On Windows, absolute paths may differ, so we do an additional check + // to ensure no path traversal sequences are present: + if (filePath.Contains("..")) + { + context.Response.StatusCode = StatusCodes.Status403Forbidden; + LOGGER.LogWarning("Path traversal attempt detected: {FilePath}", filePath); + return; + } + } + + // Check if the file exists: + if (!File.Exists(filePath)) + { + context.Response.StatusCode = StatusCodes.Status404NotFound; + LOGGER.LogWarning("Requested file not found: '{FilePath}'", filePath); + return; + } + + // Determine the content type: + var contentTypeProvider = new FileExtensionContentTypeProvider(); + if (!contentTypeProvider.TryGetContentType(filePath, out var contentType)) + contentType = "application/octet-stream"; + + // Set response headers: + context.Response.ContentType = contentType; + context.Response.Headers.ContentDisposition = $"inline; filename=\"{Path.GetFileName(filePath)}\""; + + // Stream the file to the response: + await using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 64 * 1024, useAsync: true); + context.Response.ContentLength = fileStream.Length; + await fileStream.CopyToAsync(context.Response.Body); + } +} diff --git a/app/MindWork AI Studio/Layout/MainLayout.razor b/app/MindWork AI Studio/Layout/MainLayout.razor index 23937719..908411f9 100644 --- a/app/MindWork AI Studio/Layout/MainLayout.razor +++ b/app/MindWork AI Studio/Layout/MainLayout.razor @@ -1,4 +1,6 @@ @using AIStudio.Settings.DataModel +@using AIStudio.Components + @using Microsoft.AspNetCore.Components.Routing @using MudBlazor @@ -20,12 +22,20 @@ } + + + + + + + + } else { - + @foreach (var navBarItem in this.navItems) { @@ -41,6 +51,14 @@ } } + + + + + + + + } } diff --git a/app/MindWork AI Studio/Layout/MainLayout.razor.cs b/app/MindWork AI Studio/Layout/MainLayout.razor.cs index 840e8608..fc89f248 100644 --- a/app/MindWork AI Studio/Layout/MainLayout.razor.cs +++ b/app/MindWork AI Studio/Layout/MainLayout.razor.cs @@ -264,7 +264,7 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan yield return new(T("Plugins"), Icons.Material.TwoTone.Extension, palette.DarkLighten, palette.GrayLight, Routes.PLUGINS, false); yield return new(T("Supporters"), Icons.Material.Filled.Favorite, palette.Error.Value, "#801a00", Routes.SUPPORTERS, false); - yield return new(T("About"), Icons.Material.Filled.Info, palette.DarkLighten, palette.GrayLight, Routes.ABOUT, false); + yield return new(T("Information"), Icons.Material.Filled.Info, palette.DarkLighten, palette.GrayLight, Routes.ABOUT, false); yield return new(T("Settings"), Icons.Material.Filled.Settings, palette.DarkLighten, palette.GrayLight, Routes.SETTINGS, false); } @@ -341,7 +341,7 @@ public partial class MainLayout : LayoutComponentBase, IMessageBusReceiver, ILan await this.MessageBus.SendMessage(this, Event.COLOR_THEME_CHANGED); this.StateHasChanged(); } - + #region Implementation of IDisposable public void Dispose() diff --git a/app/MindWork AI Studio/MindWork AI Studio.csproj b/app/MindWork AI Studio/MindWork AI Studio.csproj index 572c3504..9d660047 100644 --- a/app/MindWork AI Studio/MindWork AI Studio.csproj +++ b/app/MindWork AI Studio/MindWork AI Studio.csproj @@ -47,10 +47,10 @@ - + - + @@ -62,12 +62,6 @@ - - - true - - - diff --git a/app/MindWork AI Studio/Pages/Assistants.razor b/app/MindWork AI Studio/Pages/Assistants.razor index 1cd72a5f..250aa06c 100644 --- a/app/MindWork AI Studio/Pages/Assistants.razor +++ b/app/MindWork AI Studio/Pages/Assistants.razor @@ -9,60 +9,88 @@ - - - @T("General") - - - - - - - - - - @T("Business") - - - - - @if (PreviewFeatures.PRE_DOCUMENT_ANALYSIS_2025.IsEnabled(this.SettingsManager)) - { - - } - - - - - - - + @if (this.SettingsManager.IsAnyCategoryAssistantVisible("General", + (Components.TEXT_SUMMARIZER_ASSISTANT, PreviewFeatures.NONE), + (Components.TRANSLATION_ASSISTANT, PreviewFeatures.NONE), + (Components.GRAMMAR_SPELLING_ASSISTANT, PreviewFeatures.NONE), + (Components.REWRITE_ASSISTANT, PreviewFeatures.NONE), + (Components.SYNONYMS_ASSISTANT, PreviewFeatures.NONE) + )) + { + + @T("General") + + + + + + + + + } - - @T("Learning") - - - - - - - @T("Software Engineering") - - - - @if (PreviewFeatures.PRE_RAG_2024.IsEnabled(this.SettingsManager)) - { - - } - - - - @T("AI Studio Development") - - - - + @if (this.SettingsManager.IsAnyCategoryAssistantVisible("Business", + (Components.EMAIL_ASSISTANT, PreviewFeatures.NONE), + (Components.DOCUMENT_ANALYSIS_ASSISTANT, PreviewFeatures.PRE_DOCUMENT_ANALYSIS_2025), + (Components.MY_TASKS_ASSISTANT, PreviewFeatures.NONE), + (Components.AGENDA_ASSISTANT, PreviewFeatures.NONE), + (Components.JOB_POSTING_ASSISTANT, PreviewFeatures.NONE), + (Components.LEGAL_CHECK_ASSISTANT, PreviewFeatures.NONE), + (Components.ICON_FINDER_ASSISTANT, PreviewFeatures.NONE) + )) + { + + @T("Business") + + + + + + + + + + + } + + @if (this.SettingsManager.IsAnyCategoryAssistantVisible("Learning", + (Components.BIAS_DAY_ASSISTANT, PreviewFeatures.NONE) + )) + { + + @T("Learning") + + + + + } + + @if (this.SettingsManager.IsAnyCategoryAssistantVisible("Software Engineering", + (Components.CODING_ASSISTANT, PreviewFeatures.NONE), + (Components.ERI_ASSISTANT, PreviewFeatures.PRE_RAG_2024) + )) + { + + @T("Software Engineering") + + + + + + } + + @if (this.SettingsManager.IsAnyCategoryAssistantVisible("AI Studio Development", + (Components.I18N_ASSISTANT, PreviewFeatures.NONE) + )) + { + + @T("AI Studio Development") + + + + + } - \ No newline at end of file + diff --git a/app/MindWork AI Studio/Pages/Chat.razor b/app/MindWork AI Studio/Pages/Chat.razor index d2b96e94..c69304bb 100644 --- a/app/MindWork AI Studio/Pages/Chat.razor +++ b/app/MindWork AI Studio/Pages/Chat.razor @@ -16,9 +16,17 @@ } - - - + + @if (this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is WorkspaceStorageBehavior.DISABLE_WORKSPACES) + { + + + + } + + + + @@ -36,10 +44,10 @@ @T("Your workspaces") - + - + @@ -59,7 +67,7 @@ - + @@ -85,13 +93,13 @@ - + @T("Your workspaces") - + @@ -125,9 +133,9 @@ - + - + diff --git a/app/MindWork AI Studio/Pages/Home.razor.cs b/app/MindWork AI Studio/Pages/Home.razor.cs index bdd46e06..7facd6e3 100644 --- a/app/MindWork AI Studio/Pages/Home.razor.cs +++ b/app/MindWork AI Studio/Pages/Home.razor.cs @@ -31,7 +31,7 @@ public partial class Home : MSGComponentBase { this.itemsAdvantages = [ new(this.T("Free of charge"), this.T("The app is free to use, both for personal and commercial purposes.")), - new(this.T("Independence"), this.T("You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.")), + new(this.T("Independence"), this.T("You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.")), new(this.T("Assistants"), this.T("You just want to quickly translate a text? AI Studio has so-called assistants for such and other tasks. No prompting is necessary when working with these assistants.")), new(this.T("Unrestricted usage"), this.T("Unlike services like ChatGPT, which impose limits after intensive use, MindWork AI Studio offers unlimited usage through the providers API.")), new(this.T("Cost-effective"), this.T("You only pay for what you use, which can be cheaper than monthly subscription services like ChatGPT Plus, especially if used infrequently. But beware, here be dragons: For extremely intensive usage, the API costs can be significantly higher. Unfortunately, providers currently do not offer a way to display current costs in the app. Therefore, check your account with the respective provider to see how your costs are developing. When available, use prepaid and set a cost limit.")), diff --git a/app/MindWork AI Studio/Pages/About.razor b/app/MindWork AI Studio/Pages/Information.razor similarity index 99% rename from app/MindWork AI Studio/Pages/About.razor rename to app/MindWork AI Studio/Pages/Information.razor index b442a833..acaf8567 100644 --- a/app/MindWork AI Studio/Pages/About.razor +++ b/app/MindWork AI Studio/Pages/Information.razor @@ -4,7 +4,7 @@
    - @T("About MindWork AI Studio") + @T("Information about MindWork AI Studio") diff --git a/app/MindWork AI Studio/Pages/About.razor.cs b/app/MindWork AI Studio/Pages/Information.razor.cs similarity index 98% rename from app/MindWork AI Studio/Pages/About.razor.cs rename to app/MindWork AI Studio/Pages/Information.razor.cs index 5f3c2fce..42349201 100644 --- a/app/MindWork AI Studio/Pages/About.razor.cs +++ b/app/MindWork AI Studio/Pages/Information.razor.cs @@ -16,14 +16,14 @@ using DialogOptions = AIStudio.Dialogs.DialogOptions; namespace AIStudio.Pages; -public partial class About : MSGComponentBase +public partial class Information : MSGComponentBase { [Inject] private RustService RustService { get; init; } = null!; - + [Inject] private IDialogService DialogService { get; init; } = null!; - + [Inject] private ISnackbar Snackbar { get; init; } = null!; @@ -36,7 +36,7 @@ public partial class About : MSGComponentBase private static readonly MetaDataLibrariesAttribute META_DATA_LIBRARIES = ASSEMBLY.GetCustomAttribute()!; private static readonly MetaDataDatabasesAttribute META_DATA_DATABASES = ASSEMBLY.GetCustomAttribute()!; - private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(About).Namespace, nameof(About)); + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(Information).Namespace, nameof(Information)); private string osLanguage = string.Empty; @@ -211,7 +211,7 @@ public partial class About : MSGComponentBase ## Notice - Copyright 2025 Thorsten Sommer + Copyright 2026 Thorsten Sommer ## Terms and Conditions diff --git a/app/MindWork AI Studio/Pages/Settings.razor b/app/MindWork AI Studio/Pages/Settings.razor index da1f837d..70201807 100644 --- a/app/MindWork AI Studio/Pages/Settings.razor +++ b/app/MindWork AI Studio/Pages/Settings.razor @@ -12,18 +12,23 @@ @if (PreviewFeatures.PRE_RAG_2024.IsEnabled(this.SettingsManager)) { - + } - + @if (PreviewFeatures.PRE_SPEECH_TO_TEXT_2026.IsEnabled(this.SettingsManager)) + { + + } + + @if (PreviewFeatures.PRE_RAG_2024.IsEnabled(this.SettingsManager)) { - - + + } - +
    \ No newline at end of file diff --git a/app/MindWork AI Studio/Pages/Settings.razor.cs b/app/MindWork AI Studio/Pages/Settings.razor.cs index 89c7338b..561ebb46 100644 --- a/app/MindWork AI Studio/Pages/Settings.razor.cs +++ b/app/MindWork AI Studio/Pages/Settings.razor.cs @@ -9,6 +9,7 @@ public partial class Settings : MSGComponentBase { private List> availableLLMProviders = new(); private List> availableEmbeddingProviders = new(); + private List> availableTranscriptionProviders = new(); #region Overrides of ComponentBase diff --git a/app/MindWork AI Studio/Plugins/configuration/plugin.lua b/app/MindWork AI Studio/Plugins/configuration/plugin.lua index c4e5f08c..9708c666 100644 --- a/app/MindWork AI Studio/Plugins/configuration/plugin.lua +++ b/app/MindWork AI Studio/Plugins/configuration/plugin.lua @@ -53,11 +53,11 @@ CONFIG["LLM_PROVIDERS"][#CONFIG["LLM_PROVIDERS"]+1] = { ["Id"] = "00000000-0000-0000-0000-000000000000", ["InstanceName"] = "", ["UsedLLMProvider"] = "SELF_HOSTED", - + -- Allowed values for Host are: LM_STUDIO, LLAMACPP, OLLAMA, and VLLM ["Host"] = "OLLAMA", ["Hostname"] = "", - + -- Optional: Additional parameters for the API. -- Please refer to the documentation of the selected host for details. -- Might be something like ... \"temperature\": 0.5 ... for one parameter. @@ -70,6 +70,42 @@ CONFIG["LLM_PROVIDERS"][#CONFIG["LLM_PROVIDERS"]+1] = { } } +-- Transcription providers for voice-to-text functionality: +CONFIG["TRANSCRIPTION_PROVIDERS"] = {} + +-- An example of a transcription provider configuration: +-- CONFIG["TRANSCRIPTION_PROVIDERS"][#CONFIG["TRANSCRIPTION_PROVIDERS"]+1] = { +-- ["Id"] = "00000000-0000-0000-0000-000000000000", +-- ["Name"] = "", +-- ["UsedLLMProvider"] = "SELF_HOSTED", +-- +-- -- Allowed values for Host are: LM_STUDIO, LLAMACPP, OLLAMA, VLLM, and WHISPER_CPP +-- ["Host"] = "WHISPER_CPP", +-- ["Hostname"] = "", +-- ["Model"] = { +-- ["Id"] = "", +-- ["DisplayName"] = "", +-- } +-- } + +-- Embedding providers for local RAG (Retrieval-Augmented Generation) functionality: +CONFIG["EMBEDDING_PROVIDERS"] = {} + +-- An example of an embedding provider configuration: +-- CONFIG["EMBEDDING_PROVIDERS"][#CONFIG["EMBEDDING_PROVIDERS"]+1] = { +-- ["Id"] = "00000000-0000-0000-0000-000000000000", +-- ["Name"] = "", +-- ["UsedLLMProvider"] = "SELF_HOSTED", +-- +-- -- Allowed values for Host are: LM_STUDIO, LLAMACPP, OLLAMA, and VLLM +-- ["Host"] = "OLLAMA", +-- ["Hostname"] = "", +-- ["Model"] = { +-- ["Id"] = "", +-- ["DisplayName"] = "", +-- } +-- } + CONFIG["SETTINGS"] = {} -- Configure the update check interval: @@ -101,6 +137,22 @@ CONFIG["SETTINGS"] = {} -- Please note: using an empty string ("") will lock the preselected profile selection, even though no valid preselected profile is found. -- CONFIG["SETTINGS"]["DataApp.PreselectedProfile"] = "00000000-0000-0000-0000-000000000000" +-- Configure the transcription provider for voice-to-text functionality. +-- It must be one of the transcription provider IDs defined in CONFIG["TRANSCRIPTION_PROVIDERS"]. +-- Without a selected transcription provider, dictation and transcription features will be disabled. +-- Please note: using an empty string ("") will lock the selection and disable dictation/transcription. +-- CONFIG["SETTINGS"]["DataApp.UseTranscriptionProvider"] = "00000000-0000-0000-0000-000000000000" + +-- Configure which assistants should be hidden from the UI. +-- Allowed values are: +-- GRAMMAR_SPELLING_ASSISTANT, ICON_FINDER_ASSISTANT, REWRITE_ASSISTANT, +-- TRANSLATION_ASSISTANT, AGENDA_ASSISTANT, CODING_ASSISTANT, +-- TEXT_SUMMARIZER_ASSISTANT, EMAIL_ASSISTANT, LEGAL_CHECK_ASSISTANT, +-- SYNONYMS_ASSISTANT, MY_TASKS_ASSISTANT, JOB_POSTING_ASSISTANT, +-- BIAS_DAY_ASSISTANT, ERI_ASSISTANT, DOCUMENT_ANALYSIS_ASSISTANT, +-- I18N_ASSISTANT +-- CONFIG["SETTINGS"]["DataApp.HiddenAssistants"] = { "ERI_ASSISTANT", "I18N_ASSISTANT" } + -- Example chat templates for this configuration: CONFIG["CHAT_TEMPLATES"] = {} @@ -125,6 +177,33 @@ CONFIG["CHAT_TEMPLATES"][#CONFIG["CHAT_TEMPLATES"]+1] = { } } +-- An example chat template with file attachments: +-- This template automatically attaches specified files when the user selects it. +CONFIG["CHAT_TEMPLATES"][#CONFIG["CHAT_TEMPLATES"]+1] = { + ["Id"] = "00000000-0000-0000-0000-000000000001", + ["Name"] = "Document Analysis Template", + ["SystemPrompt"] = "You are an expert document analyst. Please analyze the attached documents and provide insights.", + ["PredefinedUserPrompt"] = "Please analyze the attached company guidelines and summarize the key points.", + ["AllowProfileUsage"] = true, + -- Optional: Pre-attach files that will be automatically included when using this template. + -- These files will be loaded when the user selects this chat template. + -- Note: File paths must be absolute paths and accessible to all users. + ["FileAttachments"] = { + "G:\\Company\\Documents\\Guidelines.pdf", + "G:\\Company\\Documents\\CompanyPolicies.docx" + }, + ["ExampleConversation"] = { + { + ["Role"] = "USER", + ["Content"] = "I have attached the company documents for analysis." + }, + { + ["Role"] = "AI", + ["Content"] = "Thank you. I'll analyze the documents and provide a comprehensive summary." + } + } +} + -- Profiles for this configuration: CONFIG["PROFILES"] = {} diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua index e6f60d7d..ebab2f8c 100644 --- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua @@ -49,7 +49,7 @@ LANG_NAME = "Deutsch (Deutschland)" UI_TEXT_CONTENT = {} -- Objective -UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::AGENDA::ASSISTANTAGENDA::T1121586136"] = "Ziel" +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::AGENDA::ASSISTANTAGENDA::T1121586136"] = "Zielsetzung" -- Describe the topic of the meeting, seminar, etc. Is it about quantum computing, software engineering, or is it a general business meeting? UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::AGENDA::ASSISTANTAGENDA::T12079368"] = "Beschreiben Sie das Thema des Treffens, Seminars usw. Geht es um Quantencomputing, Softwareentwicklung oder handelt es sich um ein allgemeines Geschäftstreffen?" @@ -1044,21 +1044,36 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1214535771"] = "Ent -- Added Content ({0} entries) UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1258080997"] = "Hinzugefügte Inhalte ({0} Einträge)" +-- No Lua code generated yet. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1365137848"] = "Es wurde kein Lua-Code generiert." + -- Localized Content ({0} entries of {1}) UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1492071634"] = "Lokalisierte Inhalte ({0} von {1} Einträgen)" -- Select the language plugin used for comparision. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1523568309"] = "Wählen Sie das Sprach-Plugin für den Vergleich aus." +-- Successfully updated plugin file. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1524590750"] = "Plugin-Datei erfolgreich aktualisiert." + -- Was not able to load the language plugin for comparison ({0}). Please select a valid, loaded & running language plugin. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1893011391"] = "Das Sprach-Plugin für den Vergleich konnte nicht geladen werden ({0}). Bitte wählen Sie ein gültiges, geladenes und laufendes Sprach-Plugin." +-- No language plugin selected. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T237325294"] = "Kein Sprach-Plugin ausgewählt." + -- Target language UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T237828418"] = "Zielsprache" +-- Write Lua code to language plugin file +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T253827221"] = "Lua-Code für Sprach-Plugin-Datei schreiben" + -- Language plugin used for comparision UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T263317578"] = "Sprach-Plugin für den Vergleich" +-- Plugin file not found. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T2938065913"] = "Plugin-Datei nicht gefunden." + -- Localize AI Studio & generate the Lua code UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T3055634395"] = "Lokalisiere AI Studio & generiere den Lua-Code" @@ -1089,6 +1104,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T453060723"] = "Die -- The selected language plugin for comparison uses the IETF tag '{0}' which does not match the selected target language '{1}'. Please select a valid, loaded & running language plugin which matches the target language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T458999393"] = "Das ausgewählte Sprach-Plugin für den Vergleich verwendet das IETF-Tag „{0}“, das nicht mit der ausgewählten Zielsprache „{1}“ übereinstimmt. Bitte wähle ein gültiges, geladenes und laufendes Sprach-Plugin aus, das mit der Zielsprache übereinstimmt." +-- Could not find 'UI_TEXT_CONTENT = {}' marker in plugin file. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T628596031"] = "Konnte den 'UI_TEXT_CONTENT = {}'-Marker in der Plugin-Datei nicht finden." + -- Please provide a custom language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T656744944"] = "Bitte geben Sie eine benutzerdefinierte Sprache an." @@ -1098,6 +1116,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T851515643"] = "Bitt -- Localization UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T897888480"] = "Lokalisierung" +-- Error writing to plugin file. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T948564909"] = "Fehler beim Schreiben in die Plugin-Datei." + -- Your icon source UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ICONFINDER::ASSISTANTICONFINDER::T1302165948"] = "Ihre Icons-Quelle" @@ -1494,36 +1515,45 @@ UI_TEXT_CONTENT["AISTUDIO::CHAT::CONTENTBLOCKCOMPONENT::T4188329028"] = "Nein, b -- Export Chat to Microsoft Word UI_TEXT_CONTENT["AISTUDIO::CHAT::CONTENTBLOCKCOMPONENT::T861873672"] = "Chat in Microsoft Word exportieren" +-- The local image file does not exist. Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T255679918"] = "Die lokale Bilddatei existiert nicht. Das Bild wird übersprungen." + +-- Failed to download the image from the URL. Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T2996654916"] = "Das Bild konnte nicht von der URL heruntergeladen werden. Das Bild wird übersprungen." + +-- The local image file is too large (>10 MB). Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T3219823625"] = "Die lokale Bilddatei ist zu groß (>10 MB). Das Bild wird übersprungen." + +-- The image at the URL is too large (>10 MB). Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T349928509"] = "Das Bild unter der URL ist zu groß (>10 MB). Das Bild wird übersprungen." + -- Open Settings UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ASSISTANTBLOCK::T1172211894"] = "Einstellungen öffnen" +-- Click the paperclip to attach files, or click the number to see your attached files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1358313858"] = "Klicken Sie auf die Büroklammer, um Dateien anzuhängen, oder klicken Sie auf die Zahl, um Ihre angehängten Dateien anzuzeigen." + +-- Drop files here to attach them. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T143112277"] = "Dateien hier ablegen, um sie anzuhängen." + +-- Click here to attach files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1875575968"] = "Klicken Sie hier, um Dateien anzuhängen." + -- Drag and drop files into the marked area or click here to attach documents: UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T230755331"] = "Ziehen Sie Dateien in den markierten Bereich oder klicken Sie hier, um Dokumente anzuhängen:" +-- Select files to attach +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T2495931372"] = "Dateien zum Anhängen auswählen" + -- Document Preview UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T285154968"] = "Dokumentenvorschau" --- Videos are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T2928927510"] = "Videos werden noch nicht unterstützt." - --- Images are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T298062956"] = "Bilder werden noch nicht unterstützt." - --- Click to attach files -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3521845090"] = "Klicken, um Dateien anzuhängen" - -- Clear file list UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3759696136"] = "Dateiliste löschen" -- Add file UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T4014053962"] = "Datei hinzufügen" --- Executables are not allowed -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T4167762413"] = "Ausführbare Dateien sind nicht erlaubt" - --- Select a file to attach -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T595772870"] = "Datei zum Anhängen auswählen" - -- Changelog UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHANGELOG::T3017574265"] = "Änderungsprotokoll" @@ -1824,21 +1854,12 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T900237532"] = "Anbiet -- Failed to load file content UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T1989554334"] = "Laden des Dateiinhalts fehlgeschlagen" --- Videos are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T2928927510"] = "Videos werden noch nicht unterstützt." - --- Images are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T298062956"] = "Bilder werden derzeit nicht unterstützt" - -- Use file content as input UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T3499386973"] = "Dokumenteninhalt als Eingabe verwenden" -- Select file to read its content UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T354817589"] = "Datei auswählen, um den Inhalt zu lesen" --- Executables are not allowed -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T4167762413"] = "Ausführbare Dateien sind nicht erlaubt" - -- The content is cleaned using an LLM agent: the main content is extracted, advertisements and other irrelevant things are attempted to be removed; relative links are attempted to be converted into absolute links so that they can be used. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READWEBCONTENT::T1164201762"] = "Der Inhalt wird mithilfe eines LLM-Agents bereinigt: Der Hauptinhalt wird extrahiert, Werbung und andere irrelevante Elemente werden nach Möglichkeit entfernt. Relative Links werden nach Möglichkeit in absolute Links umgewandelt, damit sie verwendet werden können." @@ -2004,6 +2025,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1599198973"] -- Would you like to set one of your profiles as the default for the entire app? When you configure a different profile for an assistant, it will always take precedence. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1666052109"] = "Möchten Sie eines ihrer Profile als Standard für die gesamte App festlegen? Wenn Sie einem Assistenten ein anderes Profil zuweisen, hat dieses immer Vorrang." +-- Select a transcription provider for transcribing your voice. Without a selected provider, dictation and transcription features will be disabled. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1834486728"] = "Wählen Sie für die Transkription Ihrer Stimme einen Anbieter für Transkriptionen aus. Ohne einen ausgewählten Anbieter wird die Diktier- und Transkriptions-Funktion deaktiviert." + -- Select the language behavior for the app. The default is to use the system language. You might want to choose a language manually? UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T186780842"] = "Wählen Sie das Sprachverhalten für die App aus. Standardmäßig wird die Systemsprache verwendet. Möchten Sie die Sprache manuell einstellen?" @@ -2016,6 +2040,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1898060643"] -- Select the language for the app. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1907446663"] = "Wählen Sie die Sprache für die App aus." +-- Disable dictation and transcription +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T215381891"] = "Diktieren und Transkribieren deaktivieren" + -- Language behavior UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2341504363"] = "Sprachverhalten" @@ -2046,6 +2073,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T4004501229"] -- When enabled, spellchecking will be active in all input fields. Depending on your operating system, errors may not be visually highlighted, but right-clicking may still offer possible corrections. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T4067492921"] = "Wenn aktiviert, ist die Rechtschreibprüfung in allen Eingabefeldern aktiv. Je nach Betriebssystem werden Fehler möglicherweise nicht visuell hervorgehoben, aber ein Rechtsklick kann dennoch Korrekturvorschläge anzeigen." +-- Select a transcription provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T4174666315"] = "Wählen Sie einen Transkriptionsanbieter aus" + -- Navigation bar behavior UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T602293588"] = "Verhalten der Navigationsleiste" @@ -2088,24 +2118,30 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T24199 -- Name UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T266367750"] = "Name" +-- Configured Embedding Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T305753126"] = "Konfigurierte Anbieter für Einbettungen" + -- This helps AI Studio understand and compare things in a way that's similar to how humans do. When you're working on something, AI Studio can automatically identify related documents and data by comparing their digital fingerprints. For instance, if you're writing about customer service, AI Studio can instantly find other documents in your data that discuss similar topics or experiences, even if they use different words. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3251217940"] = "Dies hilft AI Studio, Dinge auf eine Art und Weise zu verstehen und zu vergleichen, die der menschlichen Denkweise ähnelt. Wenn Sie an etwas arbeiten, kann AI Studio automatisch verwandte Dokumente und Daten erkennen, indem es ihre digitalen Fingerabdrücke vergleicht. Wenn Sie zum Beispiel über Kundenservice schreiben, kann AI Studio sofort andere Dokumente in ihren Daten finden, die über ähnliche Themen oder Erfahrungen sprechen – selbst wenn sie andere Begriffe verwenden." -- Edit UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3267849393"] = "Bearbeiten" --- Configured Embeddings -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3526613453"] = "Konfigurierte Einbettungen" - -- Actions UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3865031940"] = "Aktionen" +-- This embedding provider is managed by your organization. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T4062656589"] = "Dieser Einbettungsanbieter wird von Ihrer Organisation verwaltet." + -- No embeddings configured yet. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T4068015588"] = "Es wurden bislang keine Einbettungen konfiguriert." -- Edit Embedding Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T4264602229"] = "Einbettungsanbieter bearbeiten" +-- Configure Embedding Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T488419116"] = "Anbieter für Einbettungen konfigurieren" + -- Delete Embedding Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T511304264"] = "Einbettungsanbieter löschen" @@ -2115,9 +2151,6 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T78223 -- Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T900237532"] = "Anbieter" --- Configure Embeddings -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T970042679"] = "Einbettungen konfigurieren" - -- Show provider's confidence level? UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1052533048"] = "Anzeigen, wie sicher sich der Anbieter ist?" @@ -2136,6 +2169,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T172585 -- Add Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1806589097"] = "Anbieter hinzufügen" +-- Configure LLM Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1810190350"] = "Anbieter für LLM konfigurieren" + -- Edit LLM Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1868766523"] = "LLM-Anbieter bearbeiten" @@ -2169,8 +2205,8 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T284206 -- No providers configured yet. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T2911731076"] = "Noch keine Anbieter konfiguriert." --- Configure Providers -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3027859089"] = "Anbieter konfigurieren" +-- Configured LLM Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3019870540"] = "Konfigurierte Anbieter für LLM" -- as selected by provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3082210376"] = "wie vom Anbieter ausgewählt" @@ -2193,9 +2229,6 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T361241 -- No, do not enforce a minimum confidence level UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3642102079"] = "Nein, kein Mindestvertrauensniveau erzwingen" --- Configured Providers -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3850871263"] = "Konfigurierte Anbieter" - -- Actions UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3865031940"] = "Aktionen" @@ -2223,6 +2256,57 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T853225 -- Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T900237532"] = "Anbieter" +-- No transcription provider configured yet. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1079350363"] = "Es ist bisher kein Anbieter für Transkriptionen konfiguriert." + +-- Edit Transcription Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1317362918"] = "Anbieter für Transkriptionen bearbeiten" + +-- Delete +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1469573738"] = "Löschen" + +-- Add transcription provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1645238629"] = "Anbieter für Transkriptionen hinzufügen" + +-- Add Transcription Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T2066315685"] = "Anbieter für Transkriptionen hinzufügen" + +-- Model +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T2189814010"] = "Modell" + +-- Name +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T266367750"] = "Name" + +-- Edit +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T3267849393"] = "Bearbeiten" + +-- Delete Transcription Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T370103955"] = "Anbieter für Transkriptionen löschen" + +-- Actions +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T3865031940"] = "Aktionen" + +-- Configure Transcription Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T4073110625"] = "Anbieter für Transkriptionen konfigurieren" + +-- Configured Transcription Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T4210863523"] = "Konfigurierte Anbieter für Transkriptionen" + +-- This transcription provider is managed by your organization. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T756131076"] = "Dieser Anbieter für Transkriptionen wird von Ihrer Organisation verwaltet." + +-- Open Dashboard +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T78223861"] = "Dashboard öffnen" + +-- Are you sure you want to delete the transcription provider '{0}'? +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T789660305"] = "Möchten Sie den Anbieter für Transkriptionen „{0}“ wirklich löschen?" + +-- With the support of transcription models, MindWork AI Studio can convert human speech into text. This is useful, for example, when you need to dictate text. You can choose from dedicated transcription models, but not multimodal LLMs (large language models) that can handle both speech and text. The configuration of multimodal models is done in the \"Configure providers\" section. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T584860404"] = "Mit Unterstützung von Modellen für Transkriptionen kann MindWork AI Studio menschliche Sprache in Text umwandeln. Das ist zum Beispiel hilfreich, wenn Sie Texte diktieren möchten. Sie können aus speziellen Modellen für Transkriptionen wählen, jedoch nicht aus multimodalen LLMs (Large Language Models), die sowohl Sprache als auch Text verarbeiten können. Die Einrichtung multimodaler Modelle erfolgt im Abschnitt „Anbieter für LLM konfigurieren“." + +-- Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T900237532"] = "Anbieter" + -- Copy {0} to the clipboard UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::TEXTINFOLINE::T2206391442"] = "Kopiere {0} in die Zwischenablage" @@ -2304,6 +2388,33 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VISION::T428040679"] = "Erstellung von In -- Useful assistants UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VISION::T586430036"] = "Nützliche Assistenten" +-- Failed to create the transcription provider. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T1689988905"] = "Der Anbieter für die Transkription konnte nicht erstellt werden." + +-- Stop recording and start transcription +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T224155287"] = "Aufnahme beenden und Transkription starten" + +-- Start recording your voice for a transcription +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T2372624045"] = "Beginnen Sie mit der Aufnahme Ihrer Stimme für eine Transkription" + +-- Transcription in progress... +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T2851219233"] = "Transkription läuft …" + +-- The configured transcription provider was not found. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T331613105"] = "Der konfigurierte Anbieter für die Transkription wurde nicht gefunden." + +-- The configured transcription provider does not meet the minimum confidence level. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T3834149033"] = "Der konfigurierte Anbieter für die Transkription erfüllt nicht das erforderliche Mindestmaß an Vertrauenswürdigkeit." + +-- An error occurred during transcription. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T588743762"] = "Während der Transkription ist ein Fehler aufgetreten." + +-- No transcription provider is configured. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T663630295"] = "Es ist kein Anbieter für die Transkription konfiguriert." + +-- The transcription result is empty. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T974954792"] = "Das Ergebnis der Transkription ist leer." + -- Are you sure you want to delete the chat '{0}' in the workspace '{1}'? UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::WORKSPACES::T1016188706"] = "Möchten Sie den Chat „{0}“ im Arbeitsbereich „{1}“ wirklich löschen?" @@ -2424,6 +2535,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2147062613"] = "Profiln -- Add messages of an example conversation (user prompt followed by assistant prompt) to demonstrate the desired interaction pattern. These examples help the AI understand your expectations by showing it the correct format, style, and content of responses before it receives actual user inputs. UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2292424657"] = "Fügen Sie Nachrichten einer Beispiel-Konversation hinzu (Nutzereingabe, gefolgt von einer Antwort des Assistenten), um das gewünschte Interaktionsmuster zu demonstrieren. Diese Beispiele helfen der KI, ihre Erwartungen zu verstehen, indem Sie das korrekte Format, den Stil und den Inhalt von Antworten zeigen, bevor tatsächliche Nutzereingaben erfolgen." +-- File Attachments +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2294745309"] = "Dateianhänge" + -- Role UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2418769465"] = "Rolle" @@ -2463,6 +2577,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3016903701"] = "Der Nam -- Image content UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3094908719"] = "Bildinhalt" +-- You can attach files that will be automatically included when using this chat template. These files will be added to the first message sent in any chat using this template. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3108503534"] = "Sie können Dateien anhängen, die bei Verwendung dieser Chat-Vorlage automatisch einbezogen werden. Diese Dateien werden der ersten Nachricht hinzugefügt, die in einem Chat gesendet wird, der diese Vorlage verwendet." + -- Are you unsure which system prompt to use? You might start with the default system prompt that AI Studio uses for all chats. UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3127437308"] = "Sind Sie unsicher, welchen System-Prompt Sie verwenden sollen? Sie können mit dem Standard-System-Prompt beginnen, den AI Studio für alle Chats verwendet." @@ -2955,6 +3072,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T1373123357"] = "Markdo -- Load file UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T2129302565"] = "Datei laden" +-- Image View +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T2199753423"] = "Bildansicht" + -- See how we load your file. Review the content before we process it further. UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T3271853346"] = "So wird Ihre Datei geladen. Überprüfen Sie den Inhalt, bevor wir ihn weiterverarbeiten." @@ -2973,6 +3093,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T652739927"] = "Dies is -- File Path UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T729508546"] = "Dateipfad" +-- The specified file could not be found. The file have been moved, deleted, renamed, or is otherwise inaccessible. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T973777830"] = "Die angegebene Datei konnte nicht gefunden werden. Die Datei wurde möglicherweise verschoben, gelöscht, umbenannt oder ist anderweitig nicht zugänglich." + -- Embedding Name UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGMETHODDIALOG::T1427271797"] = "Name der Einbettung" @@ -3069,9 +3192,6 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2189814010"] = "Mo -- (Optional) API Key UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2331453405"] = "(Optional) API-Schlüssel" --- Currently, we cannot query the embedding models of self-hosted systems. Therefore, enter the model name manually. -UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2615586687"] = "Derzeit können wir die Einbettungs-Modelle von selbst gehosteten Systemen nicht abfragen. Bitte geben Sie daher den Modellnamen manuell ein." - -- Add UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2646845972"] = "Hinzufügen" @@ -3081,6 +3201,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2810182573"] = "Ke -- Instance Name UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2842060373"] = "Instanzname" +-- Currently, we cannot query the embedding models for the selected provider and/or host. Therefore, please enter the model name manually. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T290547799"] = "Derzeit können wir die Einbettungs-Modelle für den ausgewählten Anbieter und/oder Host nicht abfragen. Bitte geben Sie daher den Modellnamen manuell ein." + -- Model selection UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T416738168"] = "Modellauswahl" @@ -3291,6 +3414,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3361153305"] = "Experten-Ei -- Show available models UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3763891899"] = "Verfügbare Modelle anzeigen" +-- Currently, we cannot query the models for the selected provider and/or host. Therefore, please enter the model name manually. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T4116737656"] = "Derzeit können wir die Modelle für den ausgewählten Anbieter und/oder Host nicht abfragen. Bitte geben Sie daher den Modellnamen manuell ein." + -- Model selection UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T416738168"] = "Modellauswahl" @@ -3417,6 +3543,33 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T900713019"] = "Abbr -- Embeddings UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T951463987"] = "Einbettungen" +-- Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T1746160064"] = "Hier sehen Sie alle angehängten Dateien. Dateien, die nicht mehr gefunden werden können (gelöscht, umbenannt oder verschoben), sind mit einem Warnsymbol und einem durchgestrichenen Namen markiert. Sie können jeden Anhang über das Papierkorbsymbol entfernen." + +-- There aren't any file attachments right now. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T2111340711"] = "Derzeit sind keine Dateianhänge vorhanden." + +-- Document Preview +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T285154968"] = "Dokumentvorschau" + +-- The file was deleted, renamed, or moved. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3083729256"] = "Die Datei wurde gelöscht, umbenannt oder verschoben." + +-- Your attached file. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3154198222"] = "Ihre angehängte Datei." + +-- Preview what we send to the AI. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3160778981"] = "Vorschau dessen, was wir an die KI senden." + +-- Close +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3448155331"] = "Schließen" + +-- Your attached files +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3909191077"] = "Ihre angehängten Dateien" + +-- Remove this attachment. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3933470258"] = "Diesen Anhang entfernen." + -- There is no social event UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGAGENDA::T1222800281"] = "Es gibt keine gesellschaftliche Veranstaltung." @@ -4440,6 +4593,60 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T4030229154"] = "Ihre Ein -- Cancel UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T900713019"] = "Abbrechen" +-- Failed to store the API key in the operating system. The message was: {0}. Please try again. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1122745046"] = "Der API-Schlüssel konnte nicht im Betriebssystem gespeichert werden. Die Meldung lautete: '{0}'. Bitte versuchen Sie es erneut." + +-- API Key +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1324664716"] = "API-Schlüssel" + +-- Create account +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1356621346"] = "Konto erstellen" + +-- Currently, we cannot query the transcription models for the selected provider and/or host. Therefore, please enter the model name manually. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1381635232"] = "Derzeit können wir die Modelle für Transkriptionen für den ausgewählten Anbieter und/oder Host nicht abfragen. Bitte geben Sie daher den Modellnamen manuell ein." + +-- Hostname +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1727440780"] = "Hostname" + +-- Load +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1756340745"] = "Laden" + +-- Update +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1847791252"] = "Aktualisieren" + +-- Failed to load the API key from the operating system. The message was: {0}. You might ignore this message and provide the API key again. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1870831108"] = "Der API-Schlüssel konnte nicht aus dem Betriebssystem geladen werden. Die Meldung lautete: '{0}'. Sie können diese Meldung ignorieren und den API-Schlüssel erneut eingeben." + +-- Model +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2189814010"] = "Modell" + +-- (Optional) API Key +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2331453405"] = "(Optional) API-Schlüssel" + +-- Add +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2646845972"] = "Hinzufügen" + +-- No models loaded or available. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2810182573"] = "Keine Modelle geladen oder verfügbar." + +-- Instance Name +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2842060373"] = "Instanzname" + +-- Please enter a transcription model name. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T3703662664"] = "Bitte geben Sie den Namen eines Transkriptionsmodells ein." + +-- Model selection +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T416738168"] = "Modellauswahl" + +-- Host +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T808120719"] = "Host" + +-- Provider +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T900237532"] = "Anbieter" + +-- Cancel +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T900713019"] = "Abbrechen" + -- Install now UI_TEXT_CONTENT["AISTUDIO::DIALOGS::UPDATEDIALOG::T2366359512"] = "Jetzt installieren" @@ -4458,9 +4665,6 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1258653480"] = "Einstellungen" -- Home UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1391791790"] = "Startseite" --- About -UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1491113694"] = "Über AI Studio" - -- Are you sure you want to leave the chat page? All unsaved changes will be lost. UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1563130494"] = "Sind Sie sicher, dass Sie die Chat-Seite verlassen möchten? Alle nicht gespeicherten Änderungen gehen verloren." @@ -4491,243 +4695,12 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2979224202"] = "Schreiben" -- Show details UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T3692372066"] = "Details anzeigen" +-- Information +UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4256323669"] = "Information" + -- Chat UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T578410699"] = "Chat" --- Startup log file -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1019424746"] = "Startprotokolldatei" - --- About MindWork AI Studio -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1020427799"] = "Über MindWork AI Studio" - --- Browse AI Studio's source code on GitHub — we welcome your contributions. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1107156991"] = "Sehen Sie sich den Quellcode von AI Studio auf GitHub an – wir freuen uns über ihre Beiträge." - --- This is a private AI Studio installation. It runs without an enterprise configuration. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1209549230"] = "Dies ist eine private AI Studio-Installation. Sie läuft ohne Unternehmenskonfiguration." - --- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is not yet available. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1282228996"] = "AI Studio läuft mit einer Unternehmenskonfiguration und einem Konfigurationsserver. Das Konfigurations-Plugin ist noch nicht verfügbar." - --- This library is used to read PDF files. This is necessary, e.g., for using PDFs as a data source for a chat. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1388816916"] = "Diese Bibliothek wird verwendet, um PDF-Dateien zu lesen. Das ist zum Beispiel notwendig, um PDFs als Datenquelle für einen Chat zu nutzen." - --- This library is used to extend the MudBlazor library. It provides additional components that are not part of the MudBlazor library. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1421513382"] = "Diese Bibliothek wird verwendet, um die MudBlazor-Bibliothek zu erweitern. Sie stellt zusätzliche Komponenten bereit, die nicht Teil der MudBlazor-Bibliothek sind." - --- We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T162898512"] = "Wir verwenden Lua als Sprache für Plugins. Lua-CSharp ermöglicht die Kommunikation zwischen Lua-Skripten und AI Studio in beide Richtungen. Vielen Dank an Yusuke Nakada für diese großartige Bibliothek." - --- Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1629800076"] = "Basierend auf .NET, ASP.NET Core und Blazor wird MudBlazor als Bibliothek für das Design und die Entwicklung der Benutzeroberfläche verwendet. Es ist ein großartiges Projekt, das die Entwicklung fortschrittlicher Benutzeroberflächen mit Blazor erheblich beschleunigt." - --- AI Studio creates a log file at startup, in which events during startup are recorded. After startup, another log file is created that records all events that occur during the use of the app. This includes any errors that may occur. Depending on when an error occurs (at startup or during use), the contents of these log files can be helpful for troubleshooting. Sensitive information such as passwords is not included in the log files. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1630237140"] = "AI Studio erstellt beim Start eine Protokolldatei, in der Ereignisse während des Starts aufgezeichnet werden. Nach dem Start wird eine weitere Protokolldatei erstellt, die alle Ereignisse während der Nutzung der App dokumentiert. Dazu gehören auch eventuell auftretende Fehler. Je nachdem, wann ein Fehler auftritt (beim Start oder während der Nutzung), können die Inhalte dieser Protokolldateien bei der Fehlerbehebung hilfreich sein. Sensible Informationen wie Passwörter werden nicht in den Protokolldateien gespeichert." - --- This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1772678682"] = "Diese Bibliothek wird verwendet, um die Unterschiede zwischen zwei Texten anzuzeigen. Das ist zum Beispiel für den Grammatik- und Rechtschreibassistenten notwendig." - --- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1806897624"] = "Wenn Sie auf den jeweiligen Pfad klicken, wird dieser in die Zwischenablage kopiert. Sie können diese Dateien mit einem Texteditor öffnen, um ihren Inhalt anzusehen." - --- Pandoc Installation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T185447014"] = "Pandoc-Installation" - --- Copies the configuration plugin ID to the clipboard -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1859295819"] = "Kopiert die Konfigurations-Plugin-ID in die Zwischenablage" - --- Check for updates -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1890416390"] = "Nach Updates suchen" - --- Vision -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1892426825"] = "Vision" - --- In order to use any LLM, each user must store their so-called API key for each LLM provider. This key must be kept secure, similar to a password. The safest way to do this is offered by operating systems like macOS, Windows, and Linux: They have mechanisms to store such data, if available, on special security hardware. Since this is currently not possible in .NET, we use this Rust library. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1915240766"] = "Um ein beliebiges LLM nutzen zu können, muss jeder User seinen sogenannten API-Schlüssel für jeden LLM-Anbieter speichern. Dieser Schlüssel muss sicher aufbewahrt werden – ähnlich wie ein Passwort. Die sicherste Methode hierfür bieten Betriebssysteme wie macOS, Windows und Linux: Sie verfügen über Mechanismen, solche Daten – sofern vorhanden – auf spezieller Sicherheits-Hardware zu speichern. Da dies derzeit in .NET nicht möglich ist, verwenden wir diese Rust-Bibliothek." - --- This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1924365263"] = "Diese Bibliothek wird verwendet, um HTML in Markdown umzuwandeln. Das ist zum Beispiel notwendig, wenn Sie eine URL als Eingabe für einen Assistenten angeben." - --- We use Rocket to implement the runtime API. This is necessary because the runtime must be able to communicate with the user interface (IPC). Rocket is a great framework for implementing web APIs in Rust. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1943216839"] = "Wir verwenden Rocket zur Implementierung der Runtime-API. Dies ist notwendig, da die Runtime mit der Benutzeroberfläche (IPC) kommunizieren muss. Rocket ist ein ausgezeichnetes Framework zur Umsetzung von Web-APIs in Rust." - --- Copies the server URL to the clipboard -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2037899437"] = "Kopiert die Server-URL in die Zwischenablage" - --- This library is used to determine the file type of a file. This is necessary, e.g., when we want to stream a file. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2173617769"] = "Diese Bibliothek wird verwendet, um den Dateityp einer Datei zu bestimmen. Das ist zum Beispiel notwendig, wenn wir eine Datei streamen möchten." - --- For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2174764529"] = "Für die sichere Kommunikation zwischen der Benutzeroberfläche und der Laufzeit müssen wir Zertifikate erstellen. Diese Rust-Bibliothek eignet sich hervorragend dafür." - --- OK -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2246359087"] = "OK" - --- Configuration server: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2272122662"] = "Konfigurationsserver:" - --- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2273492381"] = "Wir müssen Zufallszahlen erzeugen, z. B. um die Kommunikation zwischen der Benutzeroberfläche und der Laufzeitumgebung abzusichern. Die rand-Bibliothek eignet sich dafür hervorragend." - --- AI Studio runs with an enterprise configuration using a configuration plugin, without central configuration management. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2280402765"] = "AI Studio läuft mit einer Unternehmenskonfiguration über ein Konfigurations-Plugin, ohne zentrale Konfigurationsverwaltung." - --- Configuration plugin ID: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2301484629"] = "Konfigurations-Plugin-ID:" - --- The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2329884315"] = "Die Programmiersprache C# wird für die Umsetzung der Benutzeroberfläche und des Backends verwendet. Für die Entwicklung der Benutzeroberfläche mit C# kommt die Blazor-Technologie aus ASP.NET Core zum Einsatz. Alle diese Technologien sind im .NET SDK integriert." - --- Used PDFium version -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2368247719"] = "Verwendete PDFium-Version" - --- installation provided by the system -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2371107659"] = "Installation vom System bereitgestellt" - --- Installed Pandoc version: Pandoc is not installed or not available. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2374031539"] = "Installierte Pandoc-Version: Pandoc ist nicht installiert oder nicht verfügbar." - --- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557014401"] = "Diese Bibliothek wird verwendet, um die Sprache des Betriebssystems zu erkennen. Dies ist notwendig, um die Sprache der Benutzeroberfläche einzustellen." - --- Used Open Source Projects -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557066213"] = "Verwendete Open-Source-Projekte" - --- Build time -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T260228112"] = "Build-Zeit" - --- To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2644379659"] = "Um die Antworten des LLM in anderen Apps nutzen zu können, verwenden wir häufig die Zwischenablage des jeweiligen Betriebssystems. Leider gibt es in .NET keine Lösung, die auf allen Betriebssystemen funktioniert. Deshalb habe ich mich für diese Bibliothek in Rust entschieden. So funktioniert die Datenübertragung zu anderen Apps auf jedem System." - --- Usage log file -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2689995864"] = "Nutzungsprotokolldatei" - --- Logbook -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2706940196"] = "Protokolldateien" - --- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2726131107"] = "Diese Komponente wird verwendet, um Markdown-Text darzustellen. Das ist wichtig, weil das LLM häufig mit im Markdown-Format formatiertem Text antwortet. Dadurch können wir die Antworten besser lesbar anzeigen." - --- Determine Pandoc version, please wait... -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2765814390"] = "Pandoc-Version wird ermittelt, bitte warten …" - --- Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2777988282"] = "Code in der Programmiersprache Rust kann als synchron oder asynchron spezifiziert werden. Im Gegensatz zu .NET und der Sprache C# kann Rust asynchronen Code jedoch nicht von selbst ausführen. Dafür benötigt Rust Unterstützung in Form eines Executors. Tokio ist ein solcher Executor." - --- Show Details -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T27924674"] = "Details anzeigen" - --- View our project roadmap and help shape AI Studio's future development. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2829971158"] = "Sehen Sie sich unsere Roadmap an und helfen Sie mit, die zukünftige Entwicklung von AI Studio mitzugestalten." - --- Used .NET runtime -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2840227993"] = "Verwendete .NET-Laufzeit" - --- Explanation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2840582448"] = "Erklärung" - --- The .NET backend cannot be started as a desktop app. Therefore, I use a second backend in Rust, which I call runtime. With Rust as the runtime, Tauri can be used to realize a typical desktop app. Thanks to Rust, this app can be offered for Windows, macOS, and Linux desktops. Rust is a great language for developing safe and high-performance software. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2868174483"] = "Das .NET-Backend kann nicht als Desktop-App gestartet werden. Deshalb verwende ich ein zweites Backend in Rust, das ich „Runtime“ nenne. Mit Rust als Runtime kann Tauri genutzt werden, um eine typische Desktop-App zu realisieren. Dank Rust kann diese App für Windows-, macOS- und Linux-Desktops angeboten werden. Rust ist eine großartige Sprache für die Entwicklung sicherer und leistungsstarker Software." - --- Changelog -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3017574265"] = "Änderungsprotokoll" - --- Enterprise configuration ID: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3092349641"] = "Unternehmenskonfigurations-ID:" - --- Connect AI Studio to your organization's data with our External Retrieval Interface (ERI). -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T313276297"] = "Verbinden Sie AI Studio mit den Daten ihrer Organisation über unsere Schnittstelle für externe Datenabfrage (ERI)." - --- Have feature ideas? Submit suggestions for future AI Studio enhancements. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3178730036"] = "Haben Sie Ideen für neue Funktionen? Senden Sie uns Vorschläge für zukünftige Verbesserungen von AI Studio." - --- Hide Details -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3183837919"] = "Details ausblenden" - --- Update Pandoc -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3249965383"] = "Pandoc aktualisieren" - --- Discover MindWork AI's mission and vision on our official homepage. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3294830584"] = "Entdecken Sie die Mission und Vision von MindWork AI auf unserer offiziellen Homepage." - --- User-language provided by the OS -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3334355246"] = "Vom Betriebssystem bereitgestellte Sprache" - --- The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3405978777"] = "Die folgende Liste zeigt die Versionen von MindWork AI Studio und des verwendeten Compilers, den Build-Zeitpunkt und weitere Informationen:" - --- Used Rust compiler -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3440211747"] = "Verwendeter Rust-Compiler" - --- Tauri is used to host the Blazor user interface. It is a great project that allows the creation of desktop applications using web technologies. I love Tauri! -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3494984593"] = "Tauri wird verwendet, um die Blazor-Benutzeroberfläche bereitzustellen. Es ist ein großartiges Projekt, das die Erstellung von Desktop-Anwendungen mit Webtechnologien ermöglicht. Ich liebe Tauri!" - --- Motivation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3563271893"] = "Motivation" - --- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3722989559"] = "Diese Bibliothek wird verwendet, um Excel- und OpenDocument-Tabellendateien zu lesen. Dies ist zum Beispiel notwendig, wenn Tabellen als Datenquelle für einen Chat verwendet werden sollen." - --- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is active. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3741877842"] = "AI Studio läuft mit einer Unternehmenskonfiguration und einem Konfigurationsserver. Das Konfigurations-Plugin ist aktiv." - --- this version does not met the requirements -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3813932670"] = "diese Version erfüllt die Anforderungen nicht" - --- This library is used to access the Windows registry. We use this for Windows enterprise environments to read the desired configuration. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3874337003"] = "Diese Bibliothek wird verwendet, um auf die Windows-Registry zuzugreifen. Wir nutzen sie in Windows-Unternehmensumgebungen, um die gewünschte Konfiguration auszulesen." - --- Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3908558992"] = "Jetzt haben wir mehrere Systeme, einige entwickelt in .NET und andere in Rust. Das Datenformat JSON ist dafür zuständig, Daten zwischen beiden Welten zu übersetzen (dies nennt man Serialisierung und Deserialisierung von Daten). In der Rust-Welt übernimmt Serde diese Aufgabe. Das Pendant in der .NET-Welt ist ein fester Bestandteil von .NET und findet sich in System.Text.Json." - --- Installed Pandoc version -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3983971016"] = "Installierte Pandoc-Version" - --- Check Pandoc Installation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3986423270"] = "Pandoc-Installation prüfen" - --- Versions -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4010195468"] = "Versionen" - --- This library is used to create asynchronous streams in Rust. It allows us to work with streams of data that can be produced asynchronously, making it easier to handle events or data that arrive over time. We use this, e.g., to stream arbitrary data from the file system to the embedding system. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4079152443"] = "Diese Bibliothek wird verwendet, um asynchrone Datenströme in Rust zu erstellen. Sie ermöglicht es uns, mit Datenströmen zu arbeiten, die asynchron bereitgestellt werden, wodurch sich Ereignisse oder Daten, die nach und nach eintreffen, leichter verarbeiten lassen. Wir nutzen dies zum Beispiel, um beliebige Daten aus dem Dateisystem an das Einbettungssystem zu übertragen." - --- Community & Code -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4158546761"] = "Community & Code" - --- We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4184485147"] = "Wir verwenden das HtmlAgilityPack, um Inhalte aus dem Internet zu extrahieren. Das ist zum Beispiel notwendig, wenn Sie eine URL als Eingabe für einen Assistenten angeben." - --- When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4229014037"] = "Beim Übertragen sensibler Daten zwischen der Rust-Laufzeitumgebung und der .NET-Anwendung verschlüsseln wir die Daten. Dafür verwenden wir einige Bibliotheken aus dem Rust Crypto-Projekt: cipher, aes, cbc, pbkdf2, hmac und sha2. Wir sind dankbar für die großartige Arbeit des Rust Crypto-Projekts." - --- This is a library providing the foundations for asynchronous programming in Rust. It includes key trait definitions like Stream, as well as utilities like join!, select!, and various futures combinator methods which enable expressive asynchronous control flow. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T566998575"] = "Dies ist eine Bibliothek, die die Grundlagen für asynchrones Programmieren in Rust bereitstellt. Sie enthält zentrale Trait-Definitionen wie Stream sowie Hilfsfunktionen wie join!, select! und verschiedene Methoden zur Kombination von Futures, die einen ausdrucksstarken asynchronen Kontrollfluss ermöglichen." - --- Used .NET SDK -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T585329785"] = "Verwendetes .NET SDK" - --- Did you find a bug or are you experiencing issues? Report your concern here. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T639371534"] = "Haben Sie einen Fehler gefunden oder Probleme festgestellt? Melden Sie Ihr Anliegen hier." - --- This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T64689067"] = "Diese Rust-Bibliothek wird verwendet, um die Nachrichten der App im Terminal auszugeben. Das ist während der Entwicklung und Fehlersuche hilfreich. Diese Funktion ist zunächst unsichtbar; werden App über das Terminal gestartet, werden die Nachrichten sichtbar." - --- Copies the config ID to the clipboard -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T788846912"] = "Kopiert die Konfigurations-ID in die Zwischenablage" - --- installed by AI Studio -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T833849470"] = "installiert von AI Studio" - --- We use this library to be able to read PowerPoint files. This allows us to insert content from slides into prompts and take PowerPoint files into account in RAG processes. We thank Nils Kruthoff for his work on this Rust crate. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T855925638"] = "Wir verwenden diese Bibliothek, um PowerPoint-Dateien lesen zu können. So ist es möglich, Inhalte aus Folien in Prompts einzufügen und PowerPoint-Dateien in RAG-Prozessen zu berücksichtigen. Wir danken Nils Kruthoff für seine Arbeit an diesem Rust-Crate." - --- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T870640199"] = "Für einige Datenübertragungen müssen wir die Daten in Base64 kodieren. Diese Rust-Bibliothek eignet sich dafür hervorragend." - --- Install Pandoc -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T986578435"] = "Pandoc installieren" - -- Get coding and debugging support from an LLM. UI_TEXT_CONTENT["AISTUDIO::PAGES::ASSISTANTS::T1243850917"] = "Erhalten Sie Unterstützung beim Programmieren und Debuggen durch ein KI-Modell." @@ -4896,9 +4869,6 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1702902297"] = "Einführung" -- Vision UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1892426825"] = "Vision" --- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities. -UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T2183503084"] = "Sie sind an keinen einzelnen Anbieter gebunden. Stattdessen können Sie den Anbieter wählen, der am besten zu ihren Bedürfnissen passt. Derzeit unterstützen wir OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), Hugging Face und selbst gehostete Modelle mit vLLM, llama.cpp, ollama, LM Studio, Groq oder Fireworks. Für Wissenschaftler und Mitarbeiter von Forschungseinrichtungen unterstützen wir auch die KI-Dienste von Helmholtz und GWDG. Diese sind über föderierte Anmeldungen wie eduGAIN für alle 18 Helmholtz-Zentren, die Max-Planck-Gesellschaft, die meisten deutschen und viele internationale Universitäten verfügbar." - -- Let's get started UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T2331588413"] = "Los geht's" @@ -4923,6 +4893,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3341379752"] = "Kosteneffizient" -- Flexibility UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3723223888"] = "Flexibilität" +-- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities. +UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3892227145"] = "Sie sind an keinen einzelnen Anbieter gebunden. Stattdessen können Sie den Anbieter wählen, der am besten zu ihren Bedürfnissen passt. Derzeit unterstützen wir OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hugging Face und selbst gehostete Modelle mit vLLM, llama.cpp, ollama, LM Studio, Groq oder Fireworks. Für Wissenschaftler und Mitarbeiter von Forschungseinrichtungen unterstützen wir auch die KI-Dienste von Helmholtz und GWDG. Diese sind über föderierte Anmeldungen wie eduGAIN für alle 18 Helmholtz-Zentren, die Max-Planck-Gesellschaft, die meisten deutschen und viele internationale Universitäten verfügbar." + -- Privacy UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3959064551"] = "Datenschutz" @@ -4944,6 +4917,240 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T873851215"] = "Das zeichnet MindWork AI -- The app is free to use, both for personal and commercial purposes. UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T91074375"] = "Die App ist sowohl für private als auch für kommerzielle Zwecke kostenlos nutzbar." +-- Startup log file +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1019424746"] = "Startprotokolldatei" + +-- Browse AI Studio's source code on GitHub — we welcome your contributions. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1107156991"] = "Sehen Sie sich den Quellcode von AI Studio auf GitHub an – wir freuen uns über ihre Beiträge." + +-- This is a private AI Studio installation. It runs without an enterprise configuration. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1209549230"] = "Dies ist eine private AI Studio-Installation. Sie läuft ohne Unternehmenskonfiguration." + +-- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is not yet available. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1282228996"] = "AI Studio läuft mit einer Unternehmenskonfiguration und einem Konfigurationsserver. Das Konfigurations-Plugin ist noch nicht verfügbar." + +-- This library is used to read PDF files. This is necessary, e.g., for using PDFs as a data source for a chat. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1388816916"] = "Diese Bibliothek wird verwendet, um PDF-Dateien zu lesen. Das ist zum Beispiel notwendig, um PDFs als Datenquelle für einen Chat zu nutzen." + +-- This library is used to extend the MudBlazor library. It provides additional components that are not part of the MudBlazor library. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1421513382"] = "Diese Bibliothek wird verwendet, um die MudBlazor-Bibliothek zu erweitern. Sie stellt zusätzliche Komponenten bereit, die nicht Teil der MudBlazor-Bibliothek sind." + +-- We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T162898512"] = "Wir verwenden Lua als Sprache für Plugins. Lua-CSharp ermöglicht die Kommunikation zwischen Lua-Skripten und AI Studio in beide Richtungen. Vielen Dank an Yusuke Nakada für diese großartige Bibliothek." + +-- Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1629800076"] = "Basierend auf .NET, ASP.NET Core und Blazor wird MudBlazor als Bibliothek für das Design und die Entwicklung der Benutzeroberfläche verwendet. Es ist ein großartiges Projekt, das die Entwicklung fortschrittlicher Benutzeroberflächen mit Blazor erheblich beschleunigt." + +-- AI Studio creates a log file at startup, in which events during startup are recorded. After startup, another log file is created that records all events that occur during the use of the app. This includes any errors that may occur. Depending on when an error occurs (at startup or during use), the contents of these log files can be helpful for troubleshooting. Sensitive information such as passwords is not included in the log files. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1630237140"] = "AI Studio erstellt beim Start eine Protokolldatei, in der Ereignisse während des Starts aufgezeichnet werden. Nach dem Start wird eine weitere Protokolldatei erstellt, die alle Ereignisse während der Nutzung der App dokumentiert. Dazu gehören auch eventuell auftretende Fehler. Je nachdem, wann ein Fehler auftritt (beim Start oder während der Nutzung), können die Inhalte dieser Protokolldateien bei der Fehlerbehebung hilfreich sein. Sensible Informationen wie Passwörter werden nicht in den Protokolldateien gespeichert." + +-- This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1772678682"] = "Diese Bibliothek wird verwendet, um die Unterschiede zwischen zwei Texten anzuzeigen. Das ist zum Beispiel für den Grammatik- und Rechtschreibassistenten notwendig." + +-- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1806897624"] = "Wenn Sie auf den jeweiligen Pfad klicken, wird dieser in die Zwischenablage kopiert. Sie können diese Dateien mit einem Texteditor öffnen, um ihren Inhalt anzusehen." + +-- Pandoc Installation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T185447014"] = "Pandoc-Installation" + +-- Copies the configuration plugin ID to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1859295819"] = "Kopiert die Konfigurations-Plugin-ID in die Zwischenablage" + +-- Check for updates +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1890416390"] = "Nach Updates suchen" + +-- Vision +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1892426825"] = "Vision" + +-- In order to use any LLM, each user must store their so-called API key for each LLM provider. This key must be kept secure, similar to a password. The safest way to do this is offered by operating systems like macOS, Windows, and Linux: They have mechanisms to store such data, if available, on special security hardware. Since this is currently not possible in .NET, we use this Rust library. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1915240766"] = "Um ein beliebiges LLM nutzen zu können, muss jeder User seinen sogenannten API-Schlüssel für jeden LLM-Anbieter speichern. Dieser Schlüssel muss sicher aufbewahrt werden – ähnlich wie ein Passwort. Die sicherste Methode hierfür bieten Betriebssysteme wie macOS, Windows und Linux: Sie verfügen über Mechanismen, solche Daten – sofern vorhanden – auf spezieller Sicherheits-Hardware zu speichern. Da dies derzeit in .NET nicht möglich ist, verwenden wir diese Rust-Bibliothek." + +-- This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1924365263"] = "Diese Bibliothek wird verwendet, um HTML in Markdown umzuwandeln. Das ist zum Beispiel notwendig, wenn Sie eine URL als Eingabe für einen Assistenten angeben." + +-- We use Rocket to implement the runtime API. This is necessary because the runtime must be able to communicate with the user interface (IPC). Rocket is a great framework for implementing web APIs in Rust. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1943216839"] = "Wir verwenden Rocket zur Implementierung der Runtime-API. Dies ist notwendig, da die Runtime mit der Benutzeroberfläche (IPC) kommunizieren muss. Rocket ist ein ausgezeichnetes Framework zur Umsetzung von Web-APIs in Rust." + +-- Copies the server URL to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2037899437"] = "Kopiert die Server-URL in die Zwischenablage" + +-- This library is used to determine the file type of a file. This is necessary, e.g., when we want to stream a file. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2173617769"] = "Diese Bibliothek wird verwendet, um den Dateityp einer Datei zu bestimmen. Das ist zum Beispiel notwendig, wenn wir eine Datei streamen möchten." + +-- For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2174764529"] = "Für die sichere Kommunikation zwischen der Benutzeroberfläche und der Laufzeit müssen wir Zertifikate erstellen. Diese Rust-Bibliothek eignet sich hervorragend dafür." + +-- OK +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2246359087"] = "OK" + +-- Configuration server: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2272122662"] = "Konfigurationsserver:" + +-- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2273492381"] = "Wir müssen Zufallszahlen erzeugen, z. B. um die Kommunikation zwischen der Benutzeroberfläche und der Laufzeitumgebung abzusichern. Die rand-Bibliothek eignet sich dafür hervorragend." + +-- AI Studio runs with an enterprise configuration using a configuration plugin, without central configuration management. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2280402765"] = "AI Studio läuft mit einer Unternehmenskonfiguration über ein Konfigurations-Plugin, ohne zentrale Konfigurationsverwaltung." + +-- Configuration plugin ID: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2301484629"] = "Konfigurations-Plugin-ID:" + +-- The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2329884315"] = "Die Programmiersprache C# wird für die Umsetzung der Benutzeroberfläche und des Backends verwendet. Für die Entwicklung der Benutzeroberfläche mit C# kommt die Blazor-Technologie aus ASP.NET Core zum Einsatz. Alle diese Technologien sind im .NET SDK integriert." + +-- Used PDFium version +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2368247719"] = "Verwendete PDFium-Version" + +-- installation provided by the system +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2371107659"] = "Installation vom System bereitgestellt" + +-- Installed Pandoc version: Pandoc is not installed or not available. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2374031539"] = "Installierte Pandoc-Version: Pandoc ist nicht installiert oder nicht verfügbar." + +-- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2557014401"] = "Diese Bibliothek wird verwendet, um die Sprache des Betriebssystems zu erkennen. Dies ist notwendig, um die Sprache der Benutzeroberfläche einzustellen." + +-- Used Open Source Projects +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2557066213"] = "Verwendete Open-Source-Projekte" + +-- Build time +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T260228112"] = "Build-Zeit" + +-- To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2644379659"] = "Um die Antworten des LLM in anderen Apps nutzen zu können, verwenden wir häufig die Zwischenablage des jeweiligen Betriebssystems. Leider gibt es in .NET keine Lösung, die auf allen Betriebssystemen funktioniert. Deshalb habe ich mich für diese Bibliothek in Rust entschieden. So funktioniert die Datenübertragung zu anderen Apps auf jedem System." + +-- Usage log file +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2689995864"] = "Nutzungsprotokolldatei" + +-- Logbook +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2706940196"] = "Protokolldateien" + +-- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2726131107"] = "Diese Komponente wird verwendet, um Markdown-Text darzustellen. Das ist wichtig, weil das LLM häufig mit im Markdown-Format formatiertem Text antwortet. Dadurch können wir die Antworten besser lesbar anzeigen." + +-- Determine Pandoc version, please wait... +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2765814390"] = "Pandoc-Version wird ermittelt, bitte warten …" + +-- Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2777988282"] = "Code in der Programmiersprache Rust kann als synchron oder asynchron spezifiziert werden. Im Gegensatz zu .NET und der Sprache C# kann Rust asynchronen Code jedoch nicht von selbst ausführen. Dafür benötigt Rust Unterstützung in Form eines Executors. Tokio ist ein solcher Executor." + +-- Show Details +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T27924674"] = "Details anzeigen" + +-- View our project roadmap and help shape AI Studio's future development. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2829971158"] = "Sehen Sie sich unsere Roadmap an und helfen Sie mit, die zukünftige Entwicklung von AI Studio mitzugestalten." + +-- Used .NET runtime +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2840227993"] = "Verwendete .NET-Laufzeit" + +-- Explanation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2840582448"] = "Erklärung" + +-- The .NET backend cannot be started as a desktop app. Therefore, I use a second backend in Rust, which I call runtime. With Rust as the runtime, Tauri can be used to realize a typical desktop app. Thanks to Rust, this app can be offered for Windows, macOS, and Linux desktops. Rust is a great language for developing safe and high-performance software. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2868174483"] = "Das .NET-Backend kann nicht als Desktop-App gestartet werden. Deshalb verwende ich ein zweites Backend in Rust, das ich „Runtime“ nenne. Mit Rust als Runtime kann Tauri genutzt werden, um eine typische Desktop-App zu realisieren. Dank Rust kann diese App für Windows-, macOS- und Linux-Desktops angeboten werden. Rust ist eine großartige Sprache für die Entwicklung sicherer und leistungsstarker Software." + +-- Changelog +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3017574265"] = "Änderungsprotokoll" + +-- Enterprise configuration ID: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3092349641"] = "Unternehmenskonfigurations-ID:" + +-- Connect AI Studio to your organization's data with our External Retrieval Interface (ERI). +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T313276297"] = "Verbinden Sie AI Studio mit den Daten ihrer Organisation über unsere Schnittstelle für externe Datenabfrage (ERI)." + +-- Have feature ideas? Submit suggestions for future AI Studio enhancements. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3178730036"] = "Haben Sie Ideen für neue Funktionen? Senden Sie uns Vorschläge für zukünftige Verbesserungen von AI Studio." + +-- Hide Details +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3183837919"] = "Details ausblenden" + +-- Update Pandoc +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3249965383"] = "Pandoc aktualisieren" + +-- Discover MindWork AI's mission and vision on our official homepage. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3294830584"] = "Entdecken Sie die Mission und Vision von MindWork AI auf unserer offiziellen Homepage." + +-- User-language provided by the OS +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3334355246"] = "Vom Betriebssystem bereitgestellte Sprache" + +-- The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3405978777"] = "Die folgende Liste zeigt die Versionen von MindWork AI Studio und des verwendeten Compilers, den Build-Zeitpunkt und weitere Informationen:" + +-- Information about MindWork AI Studio +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3433065373"] = "Informationen über MindWork AI Studio" + +-- Used Rust compiler +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3440211747"] = "Verwendeter Rust-Compiler" + +-- Tauri is used to host the Blazor user interface. It is a great project that allows the creation of desktop applications using web technologies. I love Tauri! +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3494984593"] = "Tauri wird verwendet, um die Blazor-Benutzeroberfläche bereitzustellen. Es ist ein großartiges Projekt, das die Erstellung von Desktop-Anwendungen mit Webtechnologien ermöglicht. Ich liebe Tauri!" + +-- Motivation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3563271893"] = "Motivation" + +-- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3722989559"] = "Diese Bibliothek wird verwendet, um Excel- und OpenDocument-Tabellendateien zu lesen. Dies ist zum Beispiel notwendig, wenn Tabellen als Datenquelle für einen Chat verwendet werden sollen." + +-- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is active. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3741877842"] = "AI Studio läuft mit einer Unternehmenskonfiguration und einem Konfigurationsserver. Das Konfigurations-Plugin ist aktiv." + +-- this version does not met the requirements +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3813932670"] = "diese Version erfüllt die Anforderungen nicht" + +-- This library is used to access the Windows registry. We use this for Windows enterprise environments to read the desired configuration. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3874337003"] = "Diese Bibliothek wird verwendet, um auf die Windows-Registry zuzugreifen. Wir nutzen sie in Windows-Unternehmensumgebungen, um die gewünschte Konfiguration auszulesen." + +-- Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3908558992"] = "Jetzt haben wir mehrere Systeme, einige entwickelt in .NET und andere in Rust. Das Datenformat JSON ist dafür zuständig, Daten zwischen beiden Welten zu übersetzen (dies nennt man Serialisierung und Deserialisierung von Daten). In der Rust-Welt übernimmt Serde diese Aufgabe. Das Pendant in der .NET-Welt ist ein fester Bestandteil von .NET und findet sich in System.Text.Json." + +-- Installed Pandoc version +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3983971016"] = "Installierte Pandoc-Version" + +-- Check Pandoc Installation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3986423270"] = "Pandoc-Installation prüfen" + +-- Versions +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4010195468"] = "Versionen" + +-- This library is used to create asynchronous streams in Rust. It allows us to work with streams of data that can be produced asynchronously, making it easier to handle events or data that arrive over time. We use this, e.g., to stream arbitrary data from the file system to the embedding system. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4079152443"] = "Diese Bibliothek wird verwendet, um asynchrone Datenströme in Rust zu erstellen. Sie ermöglicht es uns, mit Datenströmen zu arbeiten, die asynchron bereitgestellt werden, wodurch sich Ereignisse oder Daten, die nach und nach eintreffen, leichter verarbeiten lassen. Wir nutzen dies zum Beispiel, um beliebige Daten aus dem Dateisystem an das Einbettungssystem zu übertragen." + +-- Community & Code +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4158546761"] = "Community & Code" + +-- We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4184485147"] = "Wir verwenden das HtmlAgilityPack, um Inhalte aus dem Internet zu extrahieren. Das ist zum Beispiel notwendig, wenn Sie eine URL als Eingabe für einen Assistenten angeben." + +-- When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4229014037"] = "Beim Übertragen sensibler Daten zwischen der Rust-Laufzeitumgebung und der .NET-Anwendung verschlüsseln wir die Daten. Dafür verwenden wir einige Bibliotheken aus dem Rust Crypto-Projekt: cipher, aes, cbc, pbkdf2, hmac und sha2. Wir sind dankbar für die großartige Arbeit des Rust Crypto-Projekts." + +-- This is a library providing the foundations for asynchronous programming in Rust. It includes key trait definitions like Stream, as well as utilities like join!, select!, and various futures combinator methods which enable expressive asynchronous control flow. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T566998575"] = "Dies ist eine Bibliothek, die die Grundlagen für asynchrones Programmieren in Rust bereitstellt. Sie enthält zentrale Trait-Definitionen wie Stream sowie Hilfsfunktionen wie join!, select! und verschiedene Methoden zur Kombination von Futures, die einen ausdrucksstarken asynchronen Kontrollfluss ermöglichen." + +-- Used .NET SDK +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T585329785"] = "Verwendetes .NET SDK" + +-- Did you find a bug or are you experiencing issues? Report your concern here. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T639371534"] = "Haben Sie einen Fehler gefunden oder Probleme festgestellt? Melden Sie Ihr Anliegen hier." + +-- This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T64689067"] = "Diese Rust-Bibliothek wird verwendet, um die Nachrichten der App im Terminal auszugeben. Das ist während der Entwicklung und Fehlersuche hilfreich. Diese Funktion ist zunächst unsichtbar; werden App über das Terminal gestartet, werden die Nachrichten sichtbar." + +-- Copies the config ID to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T788846912"] = "Kopiert die Konfigurations-ID in die Zwischenablage" + +-- installed by AI Studio +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T833849470"] = "installiert von AI Studio" + +-- We use this library to be able to read PowerPoint files. This allows us to insert content from slides into prompts and take PowerPoint files into account in RAG processes. We thank Nils Kruthoff for his work on this Rust crate. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T855925638"] = "Wir verwenden diese Bibliothek, um PowerPoint-Dateien lesen zu können. So ist es möglich, Inhalte aus Folien in Prompts einzufügen und PowerPoint-Dateien in RAG-Prozessen zu berücksichtigen. Wir danken Nils Kruthoff für seine Arbeit an diesem Rust-Crate." + +-- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T870640199"] = "Für einige Datenübertragungen müssen wir die Daten in Base64 kodieren. Diese Rust-Bibliothek eignet sich dafür hervorragend." + +-- Install Pandoc +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T986578435"] = "Pandoc installieren" + -- Disable plugin UI_TEXT_CONTENT["AISTUDIO::PAGES::PLUGINS::T1430375822"] = "Plugin deaktivieren" @@ -5142,6 +5349,9 @@ UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T3424652889"] = "Un -- no model selected UI_TEXT_CONTENT["AISTUDIO::PROVIDER::MODEL::T2234274832"] = "Kein Modell ausgewählt" +-- Model as configured by whisper.cpp +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::SELFHOSTED::PROVIDERSELFHOSTED::T3313940770"] = "Modell wie in whisper.cpp konfiguriert" + -- Use no chat template UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CHATTEMPLATE::T4258819635"] = "Keine Chat-Vorlage verwenden" @@ -5316,6 +5526,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2708 -- Unknown preview feature UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2722827307"] = "Unbekannte Vorschau-Funktion" +-- Transcription: Preview of our speech to text system where you can transcribe recordings and audio files into text +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T714355911"] = "Transkription: Vorschau unseres Sprache-zu-Text-Systems, mit dem Sie Aufnahmen und Audiodateien in Text transkribieren können" + -- Use no data sources, when sending an assistant result to a chat UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1223925477"] = "Keine Datenquellen vorauswählen, wenn ein Ergebnis von einem Assistenten an einen neuen Chat gesendet wird" @@ -5880,6 +6093,12 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T377 -- Executable Files UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2217313358"] = "Ausführbare Dateien" +-- All Source Code Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2460199369"] = "Alle Quellcodedateien" + +-- All Audio Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2575722901"] = "Alle Audiodateien" + -- All Video Files UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2850789856"] = "Alle Videodateien" @@ -6009,6 +6228,30 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T878007824"] -- Please enter the secret necessary for authentication. UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T968385876"] = "Bitte geben Sie das für die Authentifizierung benötigte Geheimnis ein." +-- Unsupported image format +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T1398282880"] = "Nicht unterstütztes Bildformat" + +-- File has no extension +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T1555980031"] = "Datei hat keine Erweiterung" + +-- Audio files are not supported yet +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T2919730669"] = "Audio-Dateien werden noch nicht unterstützt." + +-- Videos are not supported yet +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T2928927510"] = "Videos werden noch nicht unterstützt." + +-- Images are not supported yet +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T298062956"] = "Bilder werden derzeit nicht unterstützt." + +-- Images are not supported at this place +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T305247150"] = "Bilder werden an dieser Stelle nicht unterstützt." + +-- Executables are not allowed +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T4167762413"] = "Ausführbare Dateien sind nicht erlaubt" + +-- Images are not supported by the selected provider and model +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T999194030"] = "Bilder werden vom ausgewählten Anbieter und Modell nicht unterstützt." + -- The hostname is not a valid HTTP(S) URL. UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1013354736"] = "Der Hostname ist keine gültige HTTP(S)-URL." @@ -6047,5 +6290,3 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::WORKSPACEBEHAVIOUR::T1307384014"] = "Unbenannt -- Delete Chat UI_TEXT_CONTENT["AISTUDIO::TOOLS::WORKSPACEBEHAVIOUR::T2244038752"] = "Chat löschen" - - diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua index d6c147ec..6e0ba76c 100644 --- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua +++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua @@ -1044,21 +1044,36 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1214535771"] = "Rem -- Added Content ({0} entries) UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1258080997"] = "Added Content ({0} entries)" +-- No Lua code generated yet. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1365137848"] = "No Lua code generated yet." + -- Localized Content ({0} entries of {1}) UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1492071634"] = "Localized Content ({0} entries of {1})" -- Select the language plugin used for comparision. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1523568309"] = "Select the language plugin used for comparision." +-- Successfully updated plugin file. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1524590750"] = "Successfully updated plugin file." + -- Was not able to load the language plugin for comparison ({0}). Please select a valid, loaded & running language plugin. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T1893011391"] = "Was not able to load the language plugin for comparison ({0}). Please select a valid, loaded & running language plugin." +-- No language plugin selected. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T237325294"] = "No language plugin selected." + -- Target language UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T237828418"] = "Target language" +-- Write Lua code to language plugin file +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T253827221"] = "Write Lua code to language plugin file" + -- Language plugin used for comparision UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T263317578"] = "Language plugin used for comparision" +-- Plugin file not found. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T2938065913"] = "Plugin file not found." + -- Localize AI Studio & generate the Lua code UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T3055634395"] = "Localize AI Studio & generate the Lua code" @@ -1089,6 +1104,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T453060723"] = "The -- The selected language plugin for comparison uses the IETF tag '{0}' which does not match the selected target language '{1}'. Please select a valid, loaded & running language plugin which matches the target language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T458999393"] = "The selected language plugin for comparison uses the IETF tag '{0}' which does not match the selected target language '{1}'. Please select a valid, loaded & running language plugin which matches the target language." +-- Could not find 'UI_TEXT_CONTENT = {}' marker in plugin file. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T628596031"] = "Could not find 'UI_TEXT_CONTENT = {}' marker in plugin file." + -- Please provide a custom language. UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T656744944"] = "Please provide a custom language." @@ -1098,6 +1116,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T851515643"] = "Plea -- Localization UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T897888480"] = "Localization" +-- Error writing to plugin file. +UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::I18N::ASSISTANTI18N::T948564909"] = "Error writing to plugin file." + -- Your icon source UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ICONFINDER::ASSISTANTICONFINDER::T1302165948"] = "Your icon source" @@ -1494,36 +1515,45 @@ UI_TEXT_CONTENT["AISTUDIO::CHAT::CONTENTBLOCKCOMPONENT::T4188329028"] = "No, kee -- Export Chat to Microsoft Word UI_TEXT_CONTENT["AISTUDIO::CHAT::CONTENTBLOCKCOMPONENT::T861873672"] = "Export Chat to Microsoft Word" +-- The local image file does not exist. Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T255679918"] = "The local image file does not exist. Skipping the image." + +-- Failed to download the image from the URL. Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T2996654916"] = "Failed to download the image from the URL. Skipping the image." + +-- The local image file is too large (>10 MB). Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T3219823625"] = "The local image file is too large (>10 MB). Skipping the image." + +-- The image at the URL is too large (>10 MB). Skipping the image. +UI_TEXT_CONTENT["AISTUDIO::CHAT::IIMAGESOURCEEXTENSIONS::T349928509"] = "The image at the URL is too large (>10 MB). Skipping the image." + -- Open Settings UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ASSISTANTBLOCK::T1172211894"] = "Open Settings" +-- Click the paperclip to attach files, or click the number to see your attached files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1358313858"] = "Click the paperclip to attach files, or click the number to see your attached files." + +-- Drop files here to attach them. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T143112277"] = "Drop files here to attach them." + +-- Click here to attach files. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T1875575968"] = "Click here to attach files." + -- Drag and drop files into the marked area or click here to attach documents: UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T230755331"] = "Drag and drop files into the marked area or click here to attach documents:" +-- Select files to attach +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T2495931372"] = "Select files to attach" + -- Document Preview UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T285154968"] = "Document Preview" --- Videos are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T2928927510"] = "Videos are not supported yet" - --- Images are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T298062956"] = "Images are not supported yet" - --- Click to attach files -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3521845090"] = "Click to attach files" - -- Clear file list UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T3759696136"] = "Clear file list" -- Add file UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T4014053962"] = "Add file" --- Executables are not allowed -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T4167762413"] = "Executables are not allowed" - --- Select a file to attach -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ATTACHDOCUMENTS::T595772870"] = "Select a file to attach" - -- Changelog UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHANGELOG::T3017574265"] = "Changelog" @@ -1824,21 +1854,12 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::PROVIDERSELECTION::T900237532"] = "Provid -- Failed to load file content UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T1989554334"] = "Failed to load file content" --- Videos are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T2928927510"] = "Videos are not supported yet" - --- Images are not supported yet -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T298062956"] = "Images are not supported yet" - -- Use file content as input UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T3499386973"] = "Use file content as input" -- Select file to read its content UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T354817589"] = "Select file to read its content" --- Executables are not allowed -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READFILECONTENT::T4167762413"] = "Executables are not allowed" - -- The content is cleaned using an LLM agent: the main content is extracted, advertisements and other irrelevant things are attempted to be removed; relative links are attempted to be converted into absolute links so that they can be used. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::READWEBCONTENT::T1164201762"] = "The content is cleaned using an LLM agent: the main content is extracted, advertisements and other irrelevant things are attempted to be removed; relative links are attempted to be converted into absolute links so that they can be used." @@ -2004,6 +2025,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1599198973"] -- Would you like to set one of your profiles as the default for the entire app? When you configure a different profile for an assistant, it will always take precedence. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1666052109"] = "Would you like to set one of your profiles as the default for the entire app? When you configure a different profile for an assistant, it will always take precedence." +-- Select a transcription provider for transcribing your voice. Without a selected provider, dictation and transcription features will be disabled. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1834486728"] = "Select a transcription provider for transcribing your voice. Without a selected provider, dictation and transcription features will be disabled." + -- Select the language behavior for the app. The default is to use the system language. You might want to choose a language manually? UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T186780842"] = "Select the language behavior for the app. The default is to use the system language. You might want to choose a language manually?" @@ -2016,6 +2040,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1898060643"] -- Select the language for the app. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T1907446663"] = "Select the language for the app." +-- Disable dictation and transcription +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T215381891"] = "Disable dictation and transcription" + -- Language behavior UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T2341504363"] = "Language behavior" @@ -2046,6 +2073,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T4004501229"] -- When enabled, spellchecking will be active in all input fields. Depending on your operating system, errors may not be visually highlighted, but right-clicking may still offer possible corrections. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T4067492921"] = "When enabled, spellchecking will be active in all input fields. Depending on your operating system, errors may not be visually highlighted, but right-clicking may still offer possible corrections." +-- Select a transcription provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T4174666315"] = "Select a transcription provider" + -- Navigation bar behavior UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELAPP::T602293588"] = "Navigation bar behavior" @@ -2088,24 +2118,30 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T24199 -- Name UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T266367750"] = "Name" +-- Configured Embedding Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T305753126"] = "Configured Embedding Providers" + -- This helps AI Studio understand and compare things in a way that's similar to how humans do. When you're working on something, AI Studio can automatically identify related documents and data by comparing their digital fingerprints. For instance, if you're writing about customer service, AI Studio can instantly find other documents in your data that discuss similar topics or experiences, even if they use different words. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3251217940"] = "This helps AI Studio understand and compare things in a way that's similar to how humans do. When you're working on something, AI Studio can automatically identify related documents and data by comparing their digital fingerprints. For instance, if you're writing about customer service, AI Studio can instantly find other documents in your data that discuss similar topics or experiences, even if they use different words." -- Edit UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3267849393"] = "Edit" --- Configured Embeddings -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3526613453"] = "Configured Embeddings" - -- Actions UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T3865031940"] = "Actions" +-- This embedding provider is managed by your organization. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T4062656589"] = "This embedding provider is managed by your organization." + -- No embeddings configured yet. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T4068015588"] = "No embeddings configured yet." -- Edit Embedding Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T4264602229"] = "Edit Embedding Provider" +-- Configure Embedding Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T488419116"] = "Configure Embedding Providers" + -- Delete Embedding Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T511304264"] = "Delete Embedding Provider" @@ -2115,9 +2151,6 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T78223 -- Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T900237532"] = "Provider" --- Configure Embeddings -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELEMBEDDINGS::T970042679"] = "Configure Embeddings" - -- Show provider's confidence level? UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1052533048"] = "Show provider's confidence level?" @@ -2136,6 +2169,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T172585 -- Add Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1806589097"] = "Add Provider" +-- Configure LLM Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1810190350"] = "Configure LLM Providers" + -- Edit LLM Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T1868766523"] = "Edit LLM Provider" @@ -2169,8 +2205,8 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T284206 -- No providers configured yet. UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T2911731076"] = "No providers configured yet." --- Configure Providers -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3027859089"] = "Configure Providers" +-- Configured LLM Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3019870540"] = "Configured LLM Providers" -- as selected by provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3082210376"] = "as selected by provider" @@ -2193,9 +2229,6 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T361241 -- No, do not enforce a minimum confidence level UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3642102079"] = "No, do not enforce a minimum confidence level" --- Configured Providers -UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3850871263"] = "Configured Providers" - -- Actions UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T3865031940"] = "Actions" @@ -2223,6 +2256,57 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T853225 -- Provider UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELPROVIDERS::T900237532"] = "Provider" +-- No transcription provider configured yet. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1079350363"] = "No transcription provider configured yet." + +-- Edit Transcription Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1317362918"] = "Edit Transcription Provider" + +-- Delete +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1469573738"] = "Delete" + +-- Add transcription provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T1645238629"] = "Add transcription provider" + +-- Add Transcription Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T2066315685"] = "Add Transcription Provider" + +-- Model +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T2189814010"] = "Model" + +-- Name +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T266367750"] = "Name" + +-- Edit +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T3267849393"] = "Edit" + +-- Delete Transcription Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T370103955"] = "Delete Transcription Provider" + +-- Actions +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T3865031940"] = "Actions" + +-- Configure Transcription Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T4073110625"] = "Configure Transcription Providers" + +-- Configured Transcription Providers +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T4210863523"] = "Configured Transcription Providers" + +-- With the support of transcription models, MindWork AI Studio can convert human speech into text. This is useful, for example, when you need to dictate text. You can choose from dedicated transcription models, but not multimodal LLMs (large language models) that can handle both speech and text. The configuration of multimodal models is done in the 'Configure providers' section. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T584860404"] = "With the support of transcription models, MindWork AI Studio can convert human speech into text. This is useful, for example, when you need to dictate text. You can choose from dedicated transcription models, but not multimodal LLMs (large language models) that can handle both speech and text. The configuration of multimodal models is done in the 'Configure LLM providers' section." + +-- This transcription provider is managed by your organization. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T756131076"] = "This transcription provider is managed by your organization." + +-- Open Dashboard +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T78223861"] = "Open Dashboard" + +-- Are you sure you want to delete the transcription provider '{0}'? +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T789660305"] = "Are you sure you want to delete the transcription provider '{0}'?" + +-- Provider +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::SETTINGS::SETTINGSPANELTRANSCRIPTION::T900237532"] = "Provider" + -- Copy {0} to the clipboard UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::TEXTINFOLINE::T2206391442"] = "Copy {0} to the clipboard" @@ -2304,6 +2388,33 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VISION::T428040679"] = "Content creation" -- Useful assistants UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VISION::T586430036"] = "Useful assistants" +-- Failed to create the transcription provider. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T1689988905"] = "Failed to create the transcription provider." + +-- Stop recording and start transcription +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T224155287"] = "Stop recording and start transcription" + +-- Start recording your voice for a transcription +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T2372624045"] = "Start recording your voice for a transcription" + +-- Transcription in progress... +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T2851219233"] = "Transcription in progress..." + +-- The configured transcription provider was not found. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T331613105"] = "The configured transcription provider was not found." + +-- The configured transcription provider does not meet the minimum confidence level. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T3834149033"] = "The configured transcription provider does not meet the minimum confidence level." + +-- An error occurred during transcription. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T588743762"] = "An error occurred during transcription." + +-- No transcription provider is configured. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T663630295"] = "No transcription provider is configured." + +-- The transcription result is empty. +UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::VOICERECORDER::T974954792"] = "The transcription result is empty." + -- Are you sure you want to delete the chat '{0}' in the workspace '{1}'? UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::WORKSPACES::T1016188706"] = "Are you sure you want to delete the chat '{0}' in the workspace '{1}'?" @@ -2424,6 +2535,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2147062613"] = "Profile -- Add messages of an example conversation (user prompt followed by assistant prompt) to demonstrate the desired interaction pattern. These examples help the AI understand your expectations by showing it the correct format, style, and content of responses before it receives actual user inputs. UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2292424657"] = "Add messages of an example conversation (user prompt followed by assistant prompt) to demonstrate the desired interaction pattern. These examples help the AI understand your expectations by showing it the correct format, style, and content of responses before it receives actual user inputs." +-- File Attachments +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2294745309"] = "File Attachments" + -- Role UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T2418769465"] = "Role" @@ -2463,6 +2577,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3016903701"] = "The nam -- Image content UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3094908719"] = "Image content" +-- You can attach files that will be automatically included when using this chat template. These files will be added to the first message sent in any chat using this template. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3108503534"] = "You can attach files that will be automatically included when using this chat template. These files will be added to the first message sent in any chat using this template." + -- Are you unsure which system prompt to use? You might start with the default system prompt that AI Studio uses for all chats. UI_TEXT_CONTENT["AISTUDIO::DIALOGS::CHATTEMPLATEDIALOG::T3127437308"] = "Are you unsure which system prompt to use? You might start with the default system prompt that AI Studio uses for all chats." @@ -2955,6 +3072,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T1373123357"] = "Markdo -- Load file UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T2129302565"] = "Load file" +-- Image View +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T2199753423"] = "Image View" + -- See how we load your file. Review the content before we process it further. UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T3271853346"] = "See how we load your file. Review the content before we process it further." @@ -2973,6 +3093,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T652739927"] = "This is -- File Path UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T729508546"] = "File Path" +-- The specified file could not be found. The file have been moved, deleted, renamed, or is otherwise inaccessible. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DOCUMENTCHECKDIALOG::T973777830"] = "The specified file could not be found. The file have been moved, deleted, renamed, or is otherwise inaccessible." + -- Embedding Name UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGMETHODDIALOG::T1427271797"] = "Embedding Name" @@ -3069,9 +3192,6 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2189814010"] = "Mo -- (Optional) API Key UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2331453405"] = "(Optional) API Key" --- Currently, we cannot query the embedding models of self-hosted systems. Therefore, enter the model name manually. -UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2615586687"] = "Currently, we cannot query the embedding models of self-hosted systems. Therefore, enter the model name manually." - -- Add UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2646845972"] = "Add" @@ -3081,6 +3201,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2810182573"] = "No -- Instance Name UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T2842060373"] = "Instance Name" +-- Currently, we cannot query the embedding models for the selected provider and/or host. Therefore, please enter the model name manually. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T290547799"] = "Currently, we cannot query the embedding models for the selected provider and/or host. Therefore, please enter the model name manually." + -- Model selection UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T416738168"] = "Model selection" @@ -3291,6 +3414,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3361153305"] = "Show Expert -- Show available models UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3763891899"] = "Show available models" +-- Currently, we cannot query the models for the selected provider and/or host. Therefore, please enter the model name manually. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T4116737656"] = "Currently, we cannot query the models for the selected provider and/or host. Therefore, please enter the model name manually." + -- Model selection UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T416738168"] = "Model selection" @@ -3417,6 +3543,33 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T900713019"] = "Canc -- Embeddings UI_TEXT_CONTENT["AISTUDIO::DIALOGS::RETRIEVALPROCESSDIALOG::T951463987"] = "Embeddings" +-- Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T1746160064"] = "Here you can see all attached files. Files that can no longer be found (deleted, renamed, or moved) are marked with a warning icon and a strikethrough name. You can remove any attachment using the trash can icon." + +-- There aren't any file attachments right now. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T2111340711"] = "There aren't any file attachments right now." + +-- Document Preview +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T285154968"] = "Document Preview" + +-- The file was deleted, renamed, or moved. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3083729256"] = "The file was deleted, renamed, or moved." + +-- Your attached file. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3154198222"] = "Your attached file." + +-- Preview what we send to the AI. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3160778981"] = "Preview what we send to the AI." + +-- Close +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3448155331"] = "Close" + +-- Your attached files +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3909191077"] = "Your attached files" + +-- Remove this attachment. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::REVIEWATTACHMENTSDIALOG::T3933470258"] = "Remove this attachment." + -- There is no social event UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGAGENDA::T1222800281"] = "There is no social event" @@ -4440,6 +4593,60 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T4030229154"] = "Your Inp -- Cancel UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T900713019"] = "Cancel" +-- Failed to store the API key in the operating system. The message was: {0}. Please try again. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1122745046"] = "Failed to store the API key in the operating system. The message was: {0}. Please try again." + +-- API Key +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1324664716"] = "API Key" + +-- Create account +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1356621346"] = "Create account" + +-- Currently, we cannot query the transcription models for the selected provider and/or host. Therefore, please enter the model name manually. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1381635232"] = "Currently, we cannot query the transcription models for the selected provider and/or host. Therefore, please enter the model name manually." + +-- Hostname +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1727440780"] = "Hostname" + +-- Load +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1756340745"] = "Load" + +-- Update +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1847791252"] = "Update" + +-- Failed to load the API key from the operating system. The message was: {0}. You might ignore this message and provide the API key again. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1870831108"] = "Failed to load the API key from the operating system. The message was: {0}. You might ignore this message and provide the API key again." + +-- Model +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2189814010"] = "Model" + +-- (Optional) API Key +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2331453405"] = "(Optional) API Key" + +-- Add +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2646845972"] = "Add" + +-- No models loaded or available. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2810182573"] = "No models loaded or available." + +-- Instance Name +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T2842060373"] = "Instance Name" + +-- Please enter a transcription model name. +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T3703662664"] = "Please enter a transcription model name." + +-- Model selection +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T416738168"] = "Model selection" + +-- Host +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T808120719"] = "Host" + +-- Provider +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T900237532"] = "Provider" + +-- Cancel +UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T900713019"] = "Cancel" + -- Install now UI_TEXT_CONTENT["AISTUDIO::DIALOGS::UPDATEDIALOG::T2366359512"] = "Install now" @@ -4458,9 +4665,6 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1258653480"] = "Settings" -- Home UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1391791790"] = "Home" --- About -UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1491113694"] = "About" - -- Are you sure you want to leave the chat page? All unsaved changes will be lost. UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T1563130494"] = "Are you sure you want to leave the chat page? All unsaved changes will be lost." @@ -4491,243 +4695,12 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2979224202"] = "Writing" -- Show details UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T3692372066"] = "Show details" +-- Information +UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T4256323669"] = "Information" + -- Chat UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T578410699"] = "Chat" --- Startup log file -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1019424746"] = "Startup log file" - --- About MindWork AI Studio -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1020427799"] = "About MindWork AI Studio" - --- Browse AI Studio's source code on GitHub — we welcome your contributions. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1107156991"] = "Browse AI Studio's source code on GitHub — we welcome your contributions." - --- This is a private AI Studio installation. It runs without an enterprise configuration. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1209549230"] = "This is a private AI Studio installation. It runs without an enterprise configuration." - --- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is not yet available. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1282228996"] = "AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is not yet available." - --- This library is used to read PDF files. This is necessary, e.g., for using PDFs as a data source for a chat. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1388816916"] = "This library is used to read PDF files. This is necessary, e.g., for using PDFs as a data source for a chat." - --- This library is used to extend the MudBlazor library. It provides additional components that are not part of the MudBlazor library. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1421513382"] = "This library is used to extend the MudBlazor library. It provides additional components that are not part of the MudBlazor library." - --- We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T162898512"] = "We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library." - --- Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1629800076"] = "Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor." - --- AI Studio creates a log file at startup, in which events during startup are recorded. After startup, another log file is created that records all events that occur during the use of the app. This includes any errors that may occur. Depending on when an error occurs (at startup or during use), the contents of these log files can be helpful for troubleshooting. Sensitive information such as passwords is not included in the log files. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1630237140"] = "AI Studio creates a log file at startup, in which events during startup are recorded. After startup, another log file is created that records all events that occur during the use of the app. This includes any errors that may occur. Depending on when an error occurs (at startup or during use), the contents of these log files can be helpful for troubleshooting. Sensitive information such as passwords is not included in the log files." - --- This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1772678682"] = "This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant." - --- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1806897624"] = "By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents." - --- Pandoc Installation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T185447014"] = "Pandoc Installation" - --- Copies the configuration plugin ID to the clipboard -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1859295819"] = "Copies the configuration plugin ID to the clipboard" - --- Check for updates -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1890416390"] = "Check for updates" - --- Vision -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1892426825"] = "Vision" - --- In order to use any LLM, each user must store their so-called API key for each LLM provider. This key must be kept secure, similar to a password. The safest way to do this is offered by operating systems like macOS, Windows, and Linux: They have mechanisms to store such data, if available, on special security hardware. Since this is currently not possible in .NET, we use this Rust library. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1915240766"] = "In order to use any LLM, each user must store their so-called API key for each LLM provider. This key must be kept secure, similar to a password. The safest way to do this is offered by operating systems like macOS, Windows, and Linux: They have mechanisms to store such data, if available, on special security hardware. Since this is currently not possible in .NET, we use this Rust library." - --- This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1924365263"] = "This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant." - --- We use Rocket to implement the runtime API. This is necessary because the runtime must be able to communicate with the user interface (IPC). Rocket is a great framework for implementing web APIs in Rust. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1943216839"] = "We use Rocket to implement the runtime API. This is necessary because the runtime must be able to communicate with the user interface (IPC). Rocket is a great framework for implementing web APIs in Rust." - --- Copies the server URL to the clipboard -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2037899437"] = "Copies the server URL to the clipboard" - --- This library is used to determine the file type of a file. This is necessary, e.g., when we want to stream a file. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2173617769"] = "This library is used to determine the file type of a file. This is necessary, e.g., when we want to stream a file." - --- For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2174764529"] = "For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose." - --- OK -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2246359087"] = "OK" - --- Configuration server: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2272122662"] = "Configuration server:" - --- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2273492381"] = "We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose." - --- AI Studio runs with an enterprise configuration using a configuration plugin, without central configuration management. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2280402765"] = "AI Studio runs with an enterprise configuration using a configuration plugin, without central configuration management." - --- Configuration plugin ID: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2301484629"] = "Configuration plugin ID:" - --- The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2329884315"] = "The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK." - --- Used PDFium version -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2368247719"] = "Used PDFium version" - --- installation provided by the system -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2371107659"] = "installation provided by the system" - --- Installed Pandoc version: Pandoc is not installed or not available. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2374031539"] = "Installed Pandoc version: Pandoc is not installed or not available." - --- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557014401"] = "This library is used to determine the language of the operating system. This is necessary to set the language of the user interface." - --- Used Open Source Projects -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557066213"] = "Used Open Source Projects" - --- Build time -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T260228112"] = "Build time" - --- To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2644379659"] = "To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system." - --- Usage log file -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2689995864"] = "Usage log file" - --- Logbook -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2706940196"] = "Logbook" - --- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2726131107"] = "This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read." - --- Determine Pandoc version, please wait... -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2765814390"] = "Determine Pandoc version, please wait..." - --- Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2777988282"] = "Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor." - --- Show Details -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T27924674"] = "Show Details" - --- View our project roadmap and help shape AI Studio's future development. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2829971158"] = "View our project roadmap and help shape AI Studio's future development." - --- Used .NET runtime -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2840227993"] = "Used .NET runtime" - --- Explanation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2840582448"] = "Explanation" - --- The .NET backend cannot be started as a desktop app. Therefore, I use a second backend in Rust, which I call runtime. With Rust as the runtime, Tauri can be used to realize a typical desktop app. Thanks to Rust, this app can be offered for Windows, macOS, and Linux desktops. Rust is a great language for developing safe and high-performance software. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2868174483"] = "The .NET backend cannot be started as a desktop app. Therefore, I use a second backend in Rust, which I call runtime. With Rust as the runtime, Tauri can be used to realize a typical desktop app. Thanks to Rust, this app can be offered for Windows, macOS, and Linux desktops. Rust is a great language for developing safe and high-performance software." - --- Changelog -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3017574265"] = "Changelog" - --- Enterprise configuration ID: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3092349641"] = "Enterprise configuration ID:" - --- Connect AI Studio to your organization's data with our External Retrieval Interface (ERI). -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T313276297"] = "Connect AI Studio to your organization's data with our External Retrieval Interface (ERI)." - --- Have feature ideas? Submit suggestions for future AI Studio enhancements. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3178730036"] = "Have feature ideas? Submit suggestions for future AI Studio enhancements." - --- Hide Details -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3183837919"] = "Hide Details" - --- Update Pandoc -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3249965383"] = "Update Pandoc" - --- Discover MindWork AI's mission and vision on our official homepage. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3294830584"] = "Discover MindWork AI's mission and vision on our official homepage." - --- User-language provided by the OS -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3334355246"] = "User-language provided by the OS" - --- The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3405978777"] = "The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.:" - --- Used Rust compiler -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3440211747"] = "Used Rust compiler" - --- Tauri is used to host the Blazor user interface. It is a great project that allows the creation of desktop applications using web technologies. I love Tauri! -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3494984593"] = "Tauri is used to host the Blazor user interface. It is a great project that allows the creation of desktop applications using web technologies. I love Tauri!" - --- Motivation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3563271893"] = "Motivation" - --- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3722989559"] = "This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat." - --- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is active. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3741877842"] = "AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is active." - --- this version does not met the requirements -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3813932670"] = "this version does not met the requirements" - --- This library is used to access the Windows registry. We use this for Windows enterprise environments to read the desired configuration. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3874337003"] = "This library is used to access the Windows registry. We use this for Windows enterprise environments to read the desired configuration." - --- Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3908558992"] = "Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json." - --- Installed Pandoc version -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3983971016"] = "Installed Pandoc version" - --- Check Pandoc Installation -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3986423270"] = "Check Pandoc Installation" - --- Versions -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4010195468"] = "Versions" - --- This library is used to create asynchronous streams in Rust. It allows us to work with streams of data that can be produced asynchronously, making it easier to handle events or data that arrive over time. We use this, e.g., to stream arbitrary data from the file system to the embedding system. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4079152443"] = "This library is used to create asynchronous streams in Rust. It allows us to work with streams of data that can be produced asynchronously, making it easier to handle events or data that arrive over time. We use this, e.g., to stream arbitrary data from the file system to the embedding system." - --- Community & Code -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4158546761"] = "Community & Code" - --- We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4184485147"] = "We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant." - --- When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4229014037"] = "When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project." - --- This is a library providing the foundations for asynchronous programming in Rust. It includes key trait definitions like Stream, as well as utilities like join!, select!, and various futures combinator methods which enable expressive asynchronous control flow. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T566998575"] = "This is a library providing the foundations for asynchronous programming in Rust. It includes key trait definitions like Stream, as well as utilities like join!, select!, and various futures combinator methods which enable expressive asynchronous control flow." - --- Used .NET SDK -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T585329785"] = "Used .NET SDK" - --- Did you find a bug or are you experiencing issues? Report your concern here. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T639371534"] = "Did you find a bug or are you experiencing issues? Report your concern here." - --- This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T64689067"] = "This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible." - --- Copies the config ID to the clipboard -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T788846912"] = "Copies the config ID to the clipboard" - --- installed by AI Studio -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T833849470"] = "installed by AI Studio" - --- We use this library to be able to read PowerPoint files. This allows us to insert content from slides into prompts and take PowerPoint files into account in RAG processes. We thank Nils Kruthoff for his work on this Rust crate. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T855925638"] = "We use this library to be able to read PowerPoint files. This allows us to insert content from slides into prompts and take PowerPoint files into account in RAG processes. We thank Nils Kruthoff for his work on this Rust crate." - --- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose. -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T870640199"] = "For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose." - --- Install Pandoc -UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T986578435"] = "Install Pandoc" - -- Get coding and debugging support from an LLM. UI_TEXT_CONTENT["AISTUDIO::PAGES::ASSISTANTS::T1243850917"] = "Get coding and debugging support from an LLM." @@ -4896,9 +4869,6 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1702902297"] = "Introduction" -- Vision UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1892426825"] = "Vision" --- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities. -UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T2183503084"] = "You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities." - -- Let's get started UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T2331588413"] = "Let's get started" @@ -4923,6 +4893,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3341379752"] = "Cost-effective" -- Flexibility UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3723223888"] = "Flexibility" +-- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities. +UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3892227145"] = "You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hugging Face, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, Groq, or Fireworks. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities." + -- Privacy UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3959064551"] = "Privacy" @@ -4944,6 +4917,240 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T873851215"] = "Here's what makes MindWo -- The app is free to use, both for personal and commercial purposes. UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T91074375"] = "The app is free to use, both for personal and commercial purposes." +-- Startup log file +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1019424746"] = "Startup log file" + +-- Browse AI Studio's source code on GitHub — we welcome your contributions. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1107156991"] = "Browse AI Studio's source code on GitHub — we welcome your contributions." + +-- This is a private AI Studio installation. It runs without an enterprise configuration. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1209549230"] = "This is a private AI Studio installation. It runs without an enterprise configuration." + +-- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is not yet available. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1282228996"] = "AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is not yet available." + +-- This library is used to read PDF files. This is necessary, e.g., for using PDFs as a data source for a chat. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1388816916"] = "This library is used to read PDF files. This is necessary, e.g., for using PDFs as a data source for a chat." + +-- This library is used to extend the MudBlazor library. It provides additional components that are not part of the MudBlazor library. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1421513382"] = "This library is used to extend the MudBlazor library. It provides additional components that are not part of the MudBlazor library." + +-- We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T162898512"] = "We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library." + +-- Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1629800076"] = "Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor." + +-- AI Studio creates a log file at startup, in which events during startup are recorded. After startup, another log file is created that records all events that occur during the use of the app. This includes any errors that may occur. Depending on when an error occurs (at startup or during use), the contents of these log files can be helpful for troubleshooting. Sensitive information such as passwords is not included in the log files. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1630237140"] = "AI Studio creates a log file at startup, in which events during startup are recorded. After startup, another log file is created that records all events that occur during the use of the app. This includes any errors that may occur. Depending on when an error occurs (at startup or during use), the contents of these log files can be helpful for troubleshooting. Sensitive information such as passwords is not included in the log files." + +-- This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1772678682"] = "This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant." + +-- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1806897624"] = "By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents." + +-- Pandoc Installation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T185447014"] = "Pandoc Installation" + +-- Copies the configuration plugin ID to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1859295819"] = "Copies the configuration plugin ID to the clipboard" + +-- Check for updates +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1890416390"] = "Check for updates" + +-- Vision +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1892426825"] = "Vision" + +-- In order to use any LLM, each user must store their so-called API key for each LLM provider. This key must be kept secure, similar to a password. The safest way to do this is offered by operating systems like macOS, Windows, and Linux: They have mechanisms to store such data, if available, on special security hardware. Since this is currently not possible in .NET, we use this Rust library. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1915240766"] = "In order to use any LLM, each user must store their so-called API key for each LLM provider. This key must be kept secure, similar to a password. The safest way to do this is offered by operating systems like macOS, Windows, and Linux: They have mechanisms to store such data, if available, on special security hardware. Since this is currently not possible in .NET, we use this Rust library." + +-- This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1924365263"] = "This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant." + +-- We use Rocket to implement the runtime API. This is necessary because the runtime must be able to communicate with the user interface (IPC). Rocket is a great framework for implementing web APIs in Rust. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T1943216839"] = "We use Rocket to implement the runtime API. This is necessary because the runtime must be able to communicate with the user interface (IPC). Rocket is a great framework for implementing web APIs in Rust." + +-- Copies the server URL to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2037899437"] = "Copies the server URL to the clipboard" + +-- This library is used to determine the file type of a file. This is necessary, e.g., when we want to stream a file. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2173617769"] = "This library is used to determine the file type of a file. This is necessary, e.g., when we want to stream a file." + +-- For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2174764529"] = "For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose." + +-- OK +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2246359087"] = "OK" + +-- Configuration server: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2272122662"] = "Configuration server:" + +-- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2273492381"] = "We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose." + +-- AI Studio runs with an enterprise configuration using a configuration plugin, without central configuration management. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2280402765"] = "AI Studio runs with an enterprise configuration using a configuration plugin, without central configuration management." + +-- Configuration plugin ID: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2301484629"] = "Configuration plugin ID:" + +-- The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2329884315"] = "The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK." + +-- Used PDFium version +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2368247719"] = "Used PDFium version" + +-- installation provided by the system +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2371107659"] = "installation provided by the system" + +-- Installed Pandoc version: Pandoc is not installed or not available. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2374031539"] = "Installed Pandoc version: Pandoc is not installed or not available." + +-- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2557014401"] = "This library is used to determine the language of the operating system. This is necessary to set the language of the user interface." + +-- Used Open Source Projects +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2557066213"] = "Used Open Source Projects" + +-- Build time +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T260228112"] = "Build time" + +-- To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2644379659"] = "To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system." + +-- Usage log file +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2689995864"] = "Usage log file" + +-- Logbook +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2706940196"] = "Logbook" + +-- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2726131107"] = "This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read." + +-- Determine Pandoc version, please wait... +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2765814390"] = "Determine Pandoc version, please wait..." + +-- Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2777988282"] = "Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor." + +-- Show Details +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T27924674"] = "Show Details" + +-- View our project roadmap and help shape AI Studio's future development. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2829971158"] = "View our project roadmap and help shape AI Studio's future development." + +-- Used .NET runtime +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2840227993"] = "Used .NET runtime" + +-- Explanation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2840582448"] = "Explanation" + +-- The .NET backend cannot be started as a desktop app. Therefore, I use a second backend in Rust, which I call runtime. With Rust as the runtime, Tauri can be used to realize a typical desktop app. Thanks to Rust, this app can be offered for Windows, macOS, and Linux desktops. Rust is a great language for developing safe and high-performance software. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T2868174483"] = "The .NET backend cannot be started as a desktop app. Therefore, I use a second backend in Rust, which I call runtime. With Rust as the runtime, Tauri can be used to realize a typical desktop app. Thanks to Rust, this app can be offered for Windows, macOS, and Linux desktops. Rust is a great language for developing safe and high-performance software." + +-- Changelog +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3017574265"] = "Changelog" + +-- Enterprise configuration ID: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3092349641"] = "Enterprise configuration ID:" + +-- Connect AI Studio to your organization's data with our External Retrieval Interface (ERI). +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T313276297"] = "Connect AI Studio to your organization's data with our External Retrieval Interface (ERI)." + +-- Have feature ideas? Submit suggestions for future AI Studio enhancements. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3178730036"] = "Have feature ideas? Submit suggestions for future AI Studio enhancements." + +-- Hide Details +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3183837919"] = "Hide Details" + +-- Update Pandoc +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3249965383"] = "Update Pandoc" + +-- Discover MindWork AI's mission and vision on our official homepage. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3294830584"] = "Discover MindWork AI's mission and vision on our official homepage." + +-- User-language provided by the OS +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3334355246"] = "User-language provided by the OS" + +-- The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3405978777"] = "The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.:" + +-- Information about MindWork AI Studio +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3433065373"] = "Information about MindWork AI Studio" + +-- Used Rust compiler +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3440211747"] = "Used Rust compiler" + +-- Tauri is used to host the Blazor user interface. It is a great project that allows the creation of desktop applications using web technologies. I love Tauri! +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3494984593"] = "Tauri is used to host the Blazor user interface. It is a great project that allows the creation of desktop applications using web technologies. I love Tauri!" + +-- Motivation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3563271893"] = "Motivation" + +-- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3722989559"] = "This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat." + +-- AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is active. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3741877842"] = "AI Studio runs with an enterprise configuration and a configuration server. The configuration plugin is active." + +-- this version does not met the requirements +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3813932670"] = "this version does not met the requirements" + +-- This library is used to access the Windows registry. We use this for Windows enterprise environments to read the desired configuration. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3874337003"] = "This library is used to access the Windows registry. We use this for Windows enterprise environments to read the desired configuration." + +-- Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3908558992"] = "Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json." + +-- Installed Pandoc version +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3983971016"] = "Installed Pandoc version" + +-- Check Pandoc Installation +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T3986423270"] = "Check Pandoc Installation" + +-- Versions +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4010195468"] = "Versions" + +-- This library is used to create asynchronous streams in Rust. It allows us to work with streams of data that can be produced asynchronously, making it easier to handle events or data that arrive over time. We use this, e.g., to stream arbitrary data from the file system to the embedding system. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4079152443"] = "This library is used to create asynchronous streams in Rust. It allows us to work with streams of data that can be produced asynchronously, making it easier to handle events or data that arrive over time. We use this, e.g., to stream arbitrary data from the file system to the embedding system." + +-- Community & Code +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4158546761"] = "Community & Code" + +-- We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4184485147"] = "We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant." + +-- When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T4229014037"] = "When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project." + +-- This is a library providing the foundations for asynchronous programming in Rust. It includes key trait definitions like Stream, as well as utilities like join!, select!, and various futures combinator methods which enable expressive asynchronous control flow. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T566998575"] = "This is a library providing the foundations for asynchronous programming in Rust. It includes key trait definitions like Stream, as well as utilities like join!, select!, and various futures combinator methods which enable expressive asynchronous control flow." + +-- Used .NET SDK +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T585329785"] = "Used .NET SDK" + +-- Did you find a bug or are you experiencing issues? Report your concern here. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T639371534"] = "Did you find a bug or are you experiencing issues? Report your concern here." + +-- This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T64689067"] = "This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible." + +-- Copies the config ID to the clipboard +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T788846912"] = "Copies the config ID to the clipboard" + +-- installed by AI Studio +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T833849470"] = "installed by AI Studio" + +-- We use this library to be able to read PowerPoint files. This allows us to insert content from slides into prompts and take PowerPoint files into account in RAG processes. We thank Nils Kruthoff for his work on this Rust crate. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T855925638"] = "We use this library to be able to read PowerPoint files. This allows us to insert content from slides into prompts and take PowerPoint files into account in RAG processes. We thank Nils Kruthoff for his work on this Rust crate." + +-- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose. +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T870640199"] = "For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose." + +-- Install Pandoc +UI_TEXT_CONTENT["AISTUDIO::PAGES::INFORMATION::T986578435"] = "Install Pandoc" + -- Disable plugin UI_TEXT_CONTENT["AISTUDIO::PAGES::PLUGINS::T1430375822"] = "Disable plugin" @@ -5142,6 +5349,9 @@ UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T3424652889"] = "Un -- no model selected UI_TEXT_CONTENT["AISTUDIO::PROVIDER::MODEL::T2234274832"] = "no model selected" +-- Model as configured by whisper.cpp +UI_TEXT_CONTENT["AISTUDIO::PROVIDER::SELFHOSTED::PROVIDERSELFHOSTED::T3313940770"] = "Model as configured by whisper.cpp" + -- Use no chat template UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CHATTEMPLATE::T4258819635"] = "Use no chat template" @@ -5316,6 +5526,9 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2708 -- Unknown preview feature UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2722827307"] = "Unknown preview feature" +-- Transcription: Preview of our speech to text system where you can transcribe recordings and audio files into text +UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T714355911"] = "Transcription: Preview of our speech to text system where you can transcribe recordings and audio files into text" + -- Use no data sources, when sending an assistant result to a chat UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1223925477"] = "Use no data sources, when sending an assistant result to a chat" @@ -5880,6 +6093,12 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T377 -- Executable Files UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2217313358"] = "Executable Files" +-- All Source Code Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2460199369"] = "All Source Code Files" + +-- All Audio Files +UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2575722901"] = "All Audio Files" + -- All Video Files UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T2850789856"] = "All Video Files" @@ -6009,6 +6228,30 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T878007824"] -- Please enter the secret necessary for authentication. UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T968385876"] = "Please enter the secret necessary for authentication." +-- Unsupported image format +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T1398282880"] = "Unsupported image format" + +-- File has no extension +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T1555980031"] = "File has no extension" + +-- Audio files are not supported yet +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T2919730669"] = "Audio files are not supported yet" + +-- Videos are not supported yet +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T2928927510"] = "Videos are not supported yet" + +-- Images are not supported yet +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T298062956"] = "Images are not supported yet" + +-- Images are not supported at this place +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T305247150"] = "Images are not supported at this place" + +-- Executables are not allowed +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T4167762413"] = "Executables are not allowed" + +-- Images are not supported by the selected provider and model +UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::FILEEXTENSIONVALIDATION::T999194030"] = "Images are not supported by the selected provider and model" + -- The hostname is not a valid HTTP(S) URL. UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL." @@ -6047,4 +6290,3 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::WORKSPACEBEHAVIOUR::T1307384014"] = "Unnamed w -- Delete Chat UI_TEXT_CONTENT["AISTUDIO::TOOLS::WORKSPACEBEHAVIOUR::T2244038752"] = "Delete Chat" - diff --git a/app/MindWork AI Studio/Program.cs b/app/MindWork AI Studio/Program.cs index 4c495bb3..0dbab2ca 100644 --- a/app/MindWork AI Studio/Program.cs +++ b/app/MindWork AI Studio/Program.cs @@ -119,7 +119,6 @@ internal sealed class Program var databaseClient = new QdrantClientImplementation("Qdrant", qdrantInfo.Path, qdrantInfo.PortHttp, qdrantInfo.PortGrpc, qdrantInfo.Fingerprint, qdrantInfo.ApiToken); var builder = WebApplication.CreateBuilder(); - builder.WebHost.ConfigureKestrel(kestrelServerOptions => { kestrelServerOptions.ConfigureEndpointDefaults(listenOptions => @@ -223,6 +222,7 @@ internal sealed class Program var rustLogger = app.Services.GetRequiredService>(); rust.SetLogger(rustLogger); rust.SetEncryptor(encryption); + TerminalLogger.SetRustService(rust); RUST_SERVICE = rust; ENCRYPTION = encryption; @@ -233,6 +233,7 @@ internal sealed class Program programLogger.LogInformation("Initialize internal file system."); app.Use(Redirect.HandlerContentAsync); + app.Use(FileHandler.HandlerAsync); #if DEBUG app.UseStaticFiles(); diff --git a/app/MindWork AI Studio/Provider/AlibabaCloud/ProviderAlibabaCloud.cs b/app/MindWork AI Studio/Provider/AlibabaCloud/ProviderAlibabaCloud.cs index 78618db2..2c763678 100644 --- a/app/MindWork AI Studio/Provider/AlibabaCloud/ProviderAlibabaCloud.cs +++ b/app/MindWork AI Studio/Provider/AlibabaCloud/ProviderAlibabaCloud.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.AlibabaCloud; -public sealed class ProviderAlibabaCloud() : BaseProvider("https://dashscope-intl.aliyuncs.com/compatible-mode/v1/", LOGGER) +public sealed class ProviderAlibabaCloud() : BaseProvider(LLMProviders.ALIBABA_CLOUD, "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -25,12 +25,12 @@ public sealed class ProviderAlibabaCloud() : BaseProvider("https://dashscope-int public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -40,24 +40,7 @@ public sealed class ProviderAlibabaCloud() : BaseProvider("https://dashscope-int var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel); // Prepare the AlibabaCloud HTTP chat request: var alibabaCloudChatRequest = JsonSerializer.Serialize(new ChatCompletionAPIRequest @@ -97,6 +80,12 @@ public sealed class ProviderAlibabaCloud() : BaseProvider("https://dashscope-int yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + return Task.FromResult(string.Empty); + } /// public override Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) @@ -128,7 +117,7 @@ public sealed class ProviderAlibabaCloud() : BaseProvider("https://dashscope-int new Model("qwen2.5-vl-3b-instruct", "Qwen2.5-VL 3b"), }; - return this.LoadModels(["q"],token, apiKeyProvisional).ContinueWith(t => t.Result.Concat(additionalModels).OrderBy(x => x.Id).AsEnumerable(), token); + return this.LoadModels(["q"], SecretStoreType.LLM_PROVIDER, token, apiKeyProvisional).ContinueWith(t => t.Result.Concat(additionalModels).OrderBy(x => x.Id).AsEnumerable(), token); } /// @@ -146,18 +135,27 @@ public sealed class ProviderAlibabaCloud() : BaseProvider("https://dashscope-int new Model("text-embedding-v3", "text-embedding-v3"), }; - return this.LoadModels(["text-embedding-"], token, apiKeyProvisional).ContinueWith(t => t.Result.Concat(additionalModels).OrderBy(x => x.Id).AsEnumerable(), token); + return this.LoadModels(["text-embedding-"], SecretStoreType.EMBEDDING_PROVIDER, token, apiKeyProvisional).ContinueWith(t => t.Result.Concat(additionalModels).OrderBy(x => x.Id).AsEnumerable(), token); } - - + + #region Overrides of BaseProvider + + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } + + #endregion + #endregion - private async Task> LoadModels(string[] prefixes, CancellationToken token, string? apiKeyProvisional = null) + private async Task> LoadModels(string[] prefixes, SecretStoreType storeType, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs b/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs index f7103bd7..d6df3990 100644 --- a/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs +++ b/app/MindWork AI Studio/Provider/Anthropic/ChatRequest.cs @@ -1,5 +1,4 @@ using System.Text.Json.Serialization; -using AIStudio.Provider.OpenAI; namespace AIStudio.Provider.Anthropic; @@ -13,7 +12,7 @@ namespace AIStudio.Provider.Anthropic; /// The system prompt for the chat completion. public readonly record struct ChatRequest( string Model, - IList Messages, + IList Messages, int MaxTokens, bool Stream, string System diff --git a/app/MindWork AI Studio/Provider/Anthropic/ISubContentImageSource.cs b/app/MindWork AI Studio/Provider/Anthropic/ISubContentImageSource.cs new file mode 100644 index 00000000..84015bdd --- /dev/null +++ b/app/MindWork AI Studio/Provider/Anthropic/ISubContentImageSource.cs @@ -0,0 +1,9 @@ +namespace AIStudio.Provider.Anthropic; + +public interface ISubContentImageSource +{ + /// + /// The type of the sub-content image. + /// + public SubContentImageType Type { get; } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/Anthropic/ProviderAnthropic.cs b/app/MindWork AI Studio/Provider/Anthropic/ProviderAnthropic.cs index 4ea73e77..539c4427 100644 --- a/app/MindWork AI Studio/Provider/Anthropic/ProviderAnthropic.cs +++ b/app/MindWork AI Studio/Provider/Anthropic/ProviderAnthropic.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.Anthropic; -public sealed class ProviderAnthropic() : BaseProvider("https://api.anthropic.com/v1/", LOGGER) +public sealed class ProviderAnthropic() : BaseProvider(LLMProviders.ANTHROPIC, "https://api.anthropic.com/v1/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -23,7 +23,7 @@ public sealed class ProviderAnthropic() : BaseProvider("https://api.anthropic.co public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; @@ -31,9 +31,11 @@ public sealed class ProviderAnthropic() : BaseProvider("https://api.anthropic.co var apiParameters = this.ParseAdditionalApiParameters("system"); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message - { - Role = n.Role switch + var messages = await chatThread.Blocks.BuildMessagesAsync( + this.Provider, chatModel, + + // Anthropic-specific role mapping: + role => role switch { ChatRole.USER => "user", ChatRole.AI => "assistant", @@ -41,13 +43,26 @@ public sealed class ProviderAnthropic() : BaseProvider("https://api.anthropic.co _ => "user", }, - - Content = n.Content switch + + // Anthropic uses the standard text sub-content: + text => new SubContentText { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, + Text = text, + }, + + // Anthropic-specific image sub-content: + async attachment => new SubContentImage + { + Source = new SubContentBase64Image + { + Data = await attachment.TryAsBase64(token: token) is (true, var base64Content) + ? base64Content + : string.Empty, + + MediaType = attachment.DetermineMimeType(), + } } - }); + ); // Prepare the Anthropic HTTP chat request: var chatRequest = JsonSerializer.Serialize(new ChatRequest @@ -92,6 +107,12 @@ public sealed class ProviderAnthropic() : BaseProvider("https://api.anthropic.co yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + return Task.FromResult(string.Empty); + } /// public override Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) @@ -106,7 +127,7 @@ public sealed class ProviderAnthropic() : BaseProvider("https://api.anthropic.co new Model("claude-3-opus-latest", "Claude 3 Opus (Latest)"), }; - return this.LoadModels(token, apiKeyProvisional).ContinueWith(t => t.Result.Concat(additionalModels).OrderBy(x => x.Id).AsEnumerable(), token); + return this.LoadModels(SecretStoreType.LLM_PROVIDER, token, apiKeyProvisional).ContinueWith(t => t.Result.Concat(additionalModels).OrderBy(x => x.Id).AsEnumerable(), token); } /// @@ -121,14 +142,20 @@ public sealed class ProviderAnthropic() : BaseProvider("https://api.anthropic.co return Task.FromResult(Enumerable.Empty()); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } + #endregion - private async Task> LoadModels(CancellationToken token, string? apiKeyProvisional = null) + private async Task> LoadModels(SecretStoreType storeType, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Provider/Anthropic/SubContentBase64Image.cs b/app/MindWork AI Studio/Provider/Anthropic/SubContentBase64Image.cs new file mode 100644 index 00000000..8123c814 --- /dev/null +++ b/app/MindWork AI Studio/Provider/Anthropic/SubContentBase64Image.cs @@ -0,0 +1,10 @@ +namespace AIStudio.Provider.Anthropic; + +public record SubContentBase64Image : ISubContentImageSource +{ + public SubContentImageType Type => SubContentImageType.BASE64; + + public string MediaType { get; init; } = string.Empty; + + public string Data { get; init; } = string.Empty; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/Anthropic/SubContentImage.cs b/app/MindWork AI Studio/Provider/Anthropic/SubContentImage.cs new file mode 100644 index 00000000..074f5db0 --- /dev/null +++ b/app/MindWork AI Studio/Provider/Anthropic/SubContentImage.cs @@ -0,0 +1,10 @@ +using AIStudio.Provider.OpenAI; + +namespace AIStudio.Provider.Anthropic; + +public record SubContentImage(SubContentType Type, ISubContentImageSource Source) : ISubContent +{ + public SubContentImage() : this(SubContentType.IMAGE, new SubContentImageUrl()) + { + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/Anthropic/SubContentImageSourceConverter.cs b/app/MindWork AI Studio/Provider/Anthropic/SubContentImageSourceConverter.cs new file mode 100644 index 00000000..11c61ad2 --- /dev/null +++ b/app/MindWork AI Studio/Provider/Anthropic/SubContentImageSourceConverter.cs @@ -0,0 +1,32 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace AIStudio.Provider.Anthropic; + +/// +/// Custom JSON converter for the ISubContentImageSource interface to handle polymorphic serialization. +/// +/// +/// This converter ensures that when serializing ISubContentImageSource objects, all properties +/// of the concrete implementation (e.g., SubContentBase64Image, SubContentImageUrl) are serialized, +/// not just the properties defined in the ISubContentImageSource interface. +/// +public sealed class SubContentImageSourceConverter : JsonConverter +{ + private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); + + public override ISubContentImageSource? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + // Deserialization is not needed for request objects, as sub-content image sources are only serialized + // when sending requests to LLM providers. + LOGGER.LogError("Deserializing ISubContentImageSource is not supported. This converter is only used for serializing request messages."); + return null; + } + + public override void Write(Utf8JsonWriter writer, ISubContentImageSource value, JsonSerializerOptions options) + { + // Serialize the actual concrete type (e.g., SubContentBase64Image, SubContentImageUrl) instead of just the ISubContentImageSource interface. + // This ensures all properties of the concrete type are included in the JSON output. + JsonSerializer.Serialize(writer, value, value.GetType(), options); + } +} diff --git a/app/MindWork AI Studio/Provider/Anthropic/SubContentImageType.cs b/app/MindWork AI Studio/Provider/Anthropic/SubContentImageType.cs new file mode 100644 index 00000000..e94c2224 --- /dev/null +++ b/app/MindWork AI Studio/Provider/Anthropic/SubContentImageType.cs @@ -0,0 +1,7 @@ +namespace AIStudio.Provider.Anthropic; + +public enum SubContentImageType +{ + URL, + BASE64 +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/Anthropic/SubContentImageUrl.cs b/app/MindWork AI Studio/Provider/Anthropic/SubContentImageUrl.cs new file mode 100644 index 00000000..0247a40c --- /dev/null +++ b/app/MindWork AI Studio/Provider/Anthropic/SubContentImageUrl.cs @@ -0,0 +1,8 @@ +namespace AIStudio.Provider.Anthropic; + +public record SubContentImageUrl : ISubContentImageSource +{ + public SubContentImageType Type => SubContentImageType.URL; + + public string Url { get; init; } = string.Empty; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/BaseProvider.cs b/app/MindWork AI Studio/Provider/BaseProvider.cs index 00b4aa26..3e207da5 100644 --- a/app/MindWork AI Studio/Provider/BaseProvider.cs +++ b/app/MindWork AI Studio/Provider/BaseProvider.cs @@ -1,13 +1,21 @@ using System.Net; +using System.Net.Http.Headers; using System.Runtime.CompilerServices; using System.Text.Json; +using System.Text.Json.Serialization; using AIStudio.Chat; +using AIStudio.Provider.Anthropic; using AIStudio.Provider.OpenAI; +using AIStudio.Provider.SelfHosted; using AIStudio.Settings; +using AIStudio.Tools.MIME; using AIStudio.Tools.PluginSystem; +using AIStudio.Tools.Rust; using AIStudio.Tools.Services; +using Host = AIStudio.Provider.SelfHosted.Host; + namespace AIStudio.Provider; /// @@ -40,18 +48,28 @@ public abstract class BaseProvider : IProvider, ISecretId protected static readonly JsonSerializerOptions JSON_SERIALIZER_OPTIONS = new() { PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower, - Converters = { new AnnotationConverter() }, + Converters = + { + new JsonStringEnumConverter(JsonNamingPolicy.SnakeCaseLower), + new AnnotationConverter(), + new MessageBaseConverter(), + new SubContentConverter(), + new SubContentImageSourceConverter(), + new SubContentImageUrlConverter(), + }, AllowTrailingCommas = false }; /// /// Constructor for the base provider. /// + /// The provider enum value. /// The base URL for the provider. /// The logger to use. - protected BaseProvider(string url, ILogger logger) + protected BaseProvider(LLMProviders provider, string url, ILogger logger) { this.logger = logger; + this.Provider = provider; // Set the base URL: this.httpClient.BaseAddress = new(url); @@ -59,6 +77,9 @@ public abstract class BaseProvider : IProvider, ISecretId #region Handling of IProvider, which all providers must implement + /// + public LLMProviders Provider { get; } + /// public abstract string Id { get; } @@ -74,6 +95,9 @@ public abstract class BaseProvider : IProvider, ISecretId /// public abstract IAsyncEnumerable StreamImageCompletion(Model imageModel, string promptPositive, string promptNegative = FilterOperator.String.Empty, ImageURL referenceImageURL = default, CancellationToken token = default); + /// + public abstract Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default); + /// public abstract Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default); @@ -82,6 +106,9 @@ public abstract class BaseProvider : IProvider, ISecretId /// public abstract Task> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default); + + /// + public abstract Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default); #endregion @@ -130,7 +157,7 @@ public abstract class BaseProvider : IProvider, ISecretId if (nextResponse.StatusCode is HttpStatusCode.Forbidden) { await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Block, string.Format(TB("Tried to communicate with the LLM provider '{0}'. You might not be able to use this provider from your location. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); - this.logger.LogError("Failed request with status code {ResposeStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); + this.logger.LogError("Failed request with status code {ResponseStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); errorMessage = nextResponse.ReasonPhrase; break; } @@ -138,7 +165,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(nextResponse.StatusCode is HttpStatusCode.BadRequest) { await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The required message format might be changed. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); - this.logger.LogError("Failed request with status code {ResposeStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); + this.logger.LogError("Failed request with status code {ResponseStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); errorMessage = nextResponse.ReasonPhrase; break; } @@ -146,7 +173,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(nextResponse.StatusCode is HttpStatusCode.NotFound) { await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. Something was not found. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); - this.logger.LogError("Failed request with status code {ResposeStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); + this.logger.LogError("Failed request with status code {ResponseStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); errorMessage = nextResponse.ReasonPhrase; break; } @@ -154,7 +181,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(nextResponse.StatusCode is HttpStatusCode.Unauthorized) { await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Key, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The API key might be invalid. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); - this.logger.LogError("Failed request with status code {ResposeStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); + this.logger.LogError("Failed request with status code {ResponseStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); errorMessage = nextResponse.ReasonPhrase; break; } @@ -162,7 +189,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(nextResponse.StatusCode is HttpStatusCode.InternalServerError) { await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The server might be down or having issues. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); - this.logger.LogError("Failed request with status code {ResposeStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); + this.logger.LogError("Failed request with status code {ResponseStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); errorMessage = nextResponse.ReasonPhrase; break; } @@ -170,7 +197,7 @@ public abstract class BaseProvider : IProvider, ISecretId if(nextResponse.StatusCode is HttpStatusCode.ServiceUnavailable) { await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The provider is overloaded. The message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase))); - this.logger.LogError("Failed request with status code {ResposeStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); + this.logger.LogError("Failed request with status code {ResponseStatusCode} (message = '{ResponseReasonPhrase}', error body = '{ErrorBody}').", nextResponse.StatusCode, nextResponse.ReasonPhrase, errorBody); errorMessage = nextResponse.ReasonPhrase; break; } @@ -518,6 +545,78 @@ public abstract class BaseProvider : IProvider, ISecretId streamReader.Dispose(); } + protected async Task PerformStandardTranscriptionRequest(RequestedSecret requestedSecret, Model transcriptionModel, string audioFilePath, Host host = Host.NONE, CancellationToken token = default) + { + try + { + using var form = new MultipartFormDataContent(); + var mimeType = Builder.FromFilename(audioFilePath); + + await using var fileStream = File.OpenRead(audioFilePath); + using var fileContent = new StreamContent(fileStream); + fileContent.Headers.ContentType = new MediaTypeHeaderValue(mimeType); + + form.Add(fileContent, "file", Path.GetFileName(audioFilePath)); + form.Add(new StringContent(transcriptionModel.Id), "model"); + + using var request = new HttpRequestMessage(HttpMethod.Post, host.TranscriptionURL()); + request.Content = form; + + // Handle the authorization header based on the provider: + switch (this.Provider) + { + case LLMProviders.SELF_HOSTED: + if(requestedSecret.Success) + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", await requestedSecret.Secret.Decrypt(ENCRYPTION)); + + break; + + case LLMProviders.FIREWORKS: + if(!requestedSecret.Success) + { + this.logger.LogError("No valid API key available for transcription request."); + return string.Empty; + } + + request.Headers.Add("Authorization", await requestedSecret.Secret.Decrypt(ENCRYPTION)); + break; + + default: + if(!requestedSecret.Success) + { + this.logger.LogError("No valid API key available for transcription request."); + return string.Empty; + } + + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", await requestedSecret.Secret.Decrypt(ENCRYPTION)); + break; + } + + using var response = await this.httpClient.SendAsync(request, token); + var responseBody = response.Content.ReadAsStringAsync(token).Result; + + if (!response.IsSuccessStatusCode) + { + this.logger.LogError("Transcription request failed with status code {ResponseStatusCode} and body: '{ResponseBody}'.", response.StatusCode, responseBody); + return string.Empty; + } + + var transcriptionResponse = JsonSerializer.Deserialize(responseBody, JSON_SERIALIZER_OPTIONS); + if(transcriptionResponse is null) + { + this.logger.LogError("Was not able to deserialize the transcription response."); + return string.Empty; + } + + return transcriptionResponse.Text; + } + catch (Exception e) + { + this.logger.LogError("Failed to perform transcription request: '{Message}'.", e.Message); + return string.Empty; + } + } + /// /// Parse and convert API parameters from a provided JSON string into a dictionary, /// optionally merging additional parameters and removing specific keys. diff --git a/app/MindWork AI Studio/Provider/DeepSeek/ProviderDeepSeek.cs b/app/MindWork AI Studio/Provider/DeepSeek/ProviderDeepSeek.cs index 991d6a2e..f5e1016d 100644 --- a/app/MindWork AI Studio/Provider/DeepSeek/ProviderDeepSeek.cs +++ b/app/MindWork AI Studio/Provider/DeepSeek/ProviderDeepSeek.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.DeepSeek; -public sealed class ProviderDeepSeek() : BaseProvider("https://api.deepseek.com/", LOGGER) +public sealed class ProviderDeepSeek() : BaseProvider(LLMProviders.DEEP_SEEK, "https://api.deepseek.com/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -25,12 +25,12 @@ public sealed class ProviderDeepSeek() : BaseProvider("https://api.deepseek.com/ public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -40,24 +40,7 @@ public sealed class ProviderDeepSeek() : BaseProvider("https://api.deepseek.com/ var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var messages = await chatThread.Blocks.BuildMessagesUsingDirectImageUrlAsync(this.Provider, chatModel); // Prepare the DeepSeek HTTP chat request: var deepSeekChatRequest = JsonSerializer.Serialize(new ChatCompletionAPIRequest @@ -97,11 +80,17 @@ public sealed class ProviderDeepSeek() : BaseProvider("https://api.deepseek.com/ yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + return Task.FromResult(string.Empty); + } /// public override Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) { - return this.LoadModels(token, apiKeyProvisional); + return this.LoadModels(SecretStoreType.LLM_PROVIDER, token, apiKeyProvisional); } /// @@ -116,15 +105,20 @@ public sealed class ProviderDeepSeek() : BaseProvider("https://api.deepseek.com/ return Task.FromResult(Enumerable.Empty()); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } #endregion - private async Task> LoadModels(CancellationToken token, string? apiKeyProvisional = null) + private async Task> LoadModels(SecretStoreType storeType, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Provider/Fireworks/ChatRequest.cs b/app/MindWork AI Studio/Provider/Fireworks/ChatRequest.cs index 55154ece..54963feb 100644 --- a/app/MindWork AI Studio/Provider/Fireworks/ChatRequest.cs +++ b/app/MindWork AI Studio/Provider/Fireworks/ChatRequest.cs @@ -10,7 +10,7 @@ namespace AIStudio.Provider.Fireworks; /// Whether to stream the chat completion. public readonly record struct ChatRequest( string Model, - IList Messages, + IList Messages, bool Stream ) { diff --git a/app/MindWork AI Studio/Provider/Fireworks/Message.cs b/app/MindWork AI Studio/Provider/Fireworks/Message.cs deleted file mode 100644 index 2b0055bd..00000000 --- a/app/MindWork AI Studio/Provider/Fireworks/Message.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace AIStudio.Provider.Fireworks; - -/// -/// Chat message model. -/// -/// The text content of the message. -/// The role of the message. -public readonly record struct Message(string Content, string Role); \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/Fireworks/ProviderFireworks.cs b/app/MindWork AI Studio/Provider/Fireworks/ProviderFireworks.cs index 20c79188..25fc2611 100644 --- a/app/MindWork AI Studio/Provider/Fireworks/ProviderFireworks.cs +++ b/app/MindWork AI Studio/Provider/Fireworks/ProviderFireworks.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.Fireworks; -public class ProviderFireworks() : BaseProvider("https://api.fireworks.ai/inference/v1/", LOGGER) +public class ProviderFireworks() : BaseProvider(LLMProviders.FIREWORKS, "https://api.fireworks.ai/inference/v1/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -25,12 +25,12 @@ public class ProviderFireworks() : BaseProvider("https://api.fireworks.ai/infere public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -40,24 +40,7 @@ public class ProviderFireworks() : BaseProvider("https://api.fireworks.ai/infere var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel); // Prepare the Fireworks HTTP chat request: var fireworksChatRequest = JsonSerializer.Serialize(new ChatRequest @@ -98,6 +81,13 @@ public class ProviderFireworks() : BaseProvider("https://api.fireworks.ai/infere yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override async Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.TRANSCRIPTION_PROVIDER); + return await this.PerformStandardTranscriptionRequest(requestedSecret, transcriptionModel, audioFilePath, token: token); + } /// public override Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) @@ -117,5 +107,17 @@ public class ProviderFireworks() : BaseProvider("https://api.fireworks.ai/infere return Task.FromResult(Enumerable.Empty()); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + // Source: https://docs.fireworks.ai/api-reference/audio-transcriptions#param-model + return Task.FromResult>( + new List + { + new("whisper-v3", "Whisper v3"), + // new("whisper-v3-turbo", "Whisper v3 Turbo"), // does not work + }); + } + #endregion } \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/GWDG/ProviderGWDG.cs b/app/MindWork AI Studio/Provider/GWDG/ProviderGWDG.cs index b1cb291c..28af268f 100644 --- a/app/MindWork AI Studio/Provider/GWDG/ProviderGWDG.cs +++ b/app/MindWork AI Studio/Provider/GWDG/ProviderGWDG.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.GWDG; -public sealed class ProviderGWDG() : BaseProvider("https://chat-ai.academiccloud.de/v1/", LOGGER) +public sealed class ProviderGWDG() : BaseProvider(LLMProviders.GWDG, "https://chat-ai.academiccloud.de/v1/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -25,12 +25,12 @@ public sealed class ProviderGWDG() : BaseProvider("https://chat-ai.academiccloud public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -40,24 +40,7 @@ public sealed class ProviderGWDG() : BaseProvider("https://chat-ai.academiccloud var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel); // Prepare the GWDG HTTP chat request: var gwdgChatRequest = JsonSerializer.Serialize(new ChatCompletionAPIRequest @@ -97,11 +80,18 @@ public sealed class ProviderGWDG() : BaseProvider("https://chat-ai.academiccloud yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override async Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.TRANSCRIPTION_PROVIDER); + return await this.PerformStandardTranscriptionRequest(requestedSecret, transcriptionModel, audioFilePath, token: token); + } /// public override async Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) { - var models = await this.LoadModels(token, apiKeyProvisional); + var models = await this.LoadModels(SecretStoreType.LLM_PROVIDER, token, apiKeyProvisional); return models.Where(model => !model.Id.StartsWith("e5-mistral-7b-instruct", StringComparison.InvariantCultureIgnoreCase)); } @@ -114,18 +104,29 @@ public sealed class ProviderGWDG() : BaseProvider("https://chat-ai.academiccloud /// public override async Task> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default) { - var models = await this.LoadModels(token, apiKeyProvisional); + var models = await this.LoadModels(SecretStoreType.EMBEDDING_PROVIDER, token, apiKeyProvisional); return models.Where(model => model.Id.StartsWith("e5-", StringComparison.InvariantCultureIgnoreCase)); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + // Source: https://docs.hpc.gwdg.de/services/saia/index.html#voice-to-text + return Task.FromResult>( + new List + { + new("whisper-large-v2", "Whisper v2 Large"), + }); + } + #endregion - private async Task> LoadModels(CancellationToken token, string? apiKeyProvisional = null) + private async Task> LoadModels(SecretStoreType storeType, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Provider/Google/ChatRequest.cs b/app/MindWork AI Studio/Provider/Google/ChatRequest.cs index 4fcd03cc..1a898c3a 100644 --- a/app/MindWork AI Studio/Provider/Google/ChatRequest.cs +++ b/app/MindWork AI Studio/Provider/Google/ChatRequest.cs @@ -1,5 +1,4 @@ using System.Text.Json.Serialization; -using AIStudio.Provider.OpenAI; namespace AIStudio.Provider.Google; @@ -11,7 +10,7 @@ namespace AIStudio.Provider.Google; /// Whether to stream the chat completion. public readonly record struct ChatRequest( string Model, - IList Messages, + IList Messages, bool Stream ) { diff --git a/app/MindWork AI Studio/Provider/Google/ProviderGoogle.cs b/app/MindWork AI Studio/Provider/Google/ProviderGoogle.cs index 7ce3f24e..55490992 100644 --- a/app/MindWork AI Studio/Provider/Google/ProviderGoogle.cs +++ b/app/MindWork AI Studio/Provider/Google/ProviderGoogle.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.Google; -public class ProviderGoogle() : BaseProvider("https://generativelanguage.googleapis.com/v1beta/", LOGGER) +public class ProviderGoogle() : BaseProvider(LLMProviders.GOOGLE, "https://generativelanguage.googleapis.com/v1beta/openai/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -25,12 +25,12 @@ public class ProviderGoogle() : BaseProvider("https://generativelanguage.googlea public override async IAsyncEnumerable StreamChatCompletion(Provider.Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -40,24 +40,7 @@ public class ProviderGoogle() : BaseProvider("https://generativelanguage.googlea var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel); // Prepare the Google HTTP chat request: var geminiChatRequest = JsonSerializer.Serialize(new ChatRequest @@ -99,10 +82,16 @@ public class ProviderGoogle() : BaseProvider("https://generativelanguage.googlea } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + /// + public override Task TranscribeAudioAsync(Provider.Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + return Task.FromResult(string.Empty); + } + /// public override async Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) { - var modelResponse = await this.LoadModels(token, apiKeyProvisional); + var modelResponse = await this.LoadModels(SecretStoreType.LLM_PROVIDER, token, apiKeyProvisional); if(modelResponse == default) return []; @@ -119,7 +108,7 @@ public class ProviderGoogle() : BaseProvider("https://generativelanguage.googlea public override async Task> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default) { - var modelResponse = await this.LoadModels(token, apiKeyProvisional); + var modelResponse = await this.LoadModels(SecretStoreType.EMBEDDING_PROVIDER, token, apiKeyProvisional); if(modelResponse == default) return []; @@ -129,15 +118,20 @@ public class ProviderGoogle() : BaseProvider("https://generativelanguage.googlea .Select(n => new Provider.Model(n.Name.Replace("models/", string.Empty), n.DisplayName)); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } #endregion - private async Task LoadModels(CancellationToken token, string? apiKeyProvisional = null) + private async Task LoadModels(SecretStoreType storeType, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Provider/Groq/ChatRequest.cs b/app/MindWork AI Studio/Provider/Groq/ChatRequest.cs index e45683fe..2e7668f1 100644 --- a/app/MindWork AI Studio/Provider/Groq/ChatRequest.cs +++ b/app/MindWork AI Studio/Provider/Groq/ChatRequest.cs @@ -1,5 +1,4 @@ using System.Text.Json.Serialization; -using AIStudio.Provider.OpenAI; namespace AIStudio.Provider.Groq; @@ -12,7 +11,7 @@ namespace AIStudio.Provider.Groq; /// The seed for the chat completion. public readonly record struct ChatRequest( string Model, - IList Messages, + IList Messages, bool Stream, int Seed ) diff --git a/app/MindWork AI Studio/Provider/Groq/ProviderGroq.cs b/app/MindWork AI Studio/Provider/Groq/ProviderGroq.cs index 45473d82..e66cec3e 100644 --- a/app/MindWork AI Studio/Provider/Groq/ProviderGroq.cs +++ b/app/MindWork AI Studio/Provider/Groq/ProviderGroq.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.Groq; -public class ProviderGroq() : BaseProvider("https://api.groq.com/openai/v1/", LOGGER) +public class ProviderGroq() : BaseProvider(LLMProviders.GROQ, "https://api.groq.com/openai/v1/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -25,12 +25,12 @@ public class ProviderGroq() : BaseProvider("https://api.groq.com/openai/v1/", LO public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -40,24 +40,7 @@ public class ProviderGroq() : BaseProvider("https://api.groq.com/openai/v1/", LO var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel); // Prepare the OpenAI HTTP chat request: var groqChatRequest = JsonSerializer.Serialize(new ChatRequest @@ -98,17 +81,23 @@ public class ProviderGroq() : BaseProvider("https://api.groq.com/openai/v1/", LO yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + return Task.FromResult(string.Empty); + } /// public override Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) { - return this.LoadModels(token, apiKeyProvisional); + return this.LoadModels(SecretStoreType.LLM_PROVIDER, token, apiKeyProvisional); } /// public override Task> GetImageModels(string? apiKeyProvisional = null, CancellationToken token = default) { - return Task.FromResult>(Array.Empty()); + return Task.FromResult>([]); } /// @@ -117,14 +106,20 @@ public class ProviderGroq() : BaseProvider("https://api.groq.com/openai/v1/", LO return Task.FromResult(Enumerable.Empty()); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } + #endregion - private async Task> LoadModels(CancellationToken token, string? apiKeyProvisional = null) + private async Task> LoadModels(SecretStoreType storeType, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Provider/Helmholtz/ProviderHelmholtz.cs b/app/MindWork AI Studio/Provider/Helmholtz/ProviderHelmholtz.cs index 3f7b405b..cf4359ea 100644 --- a/app/MindWork AI Studio/Provider/Helmholtz/ProviderHelmholtz.cs +++ b/app/MindWork AI Studio/Provider/Helmholtz/ProviderHelmholtz.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.Helmholtz; -public sealed class ProviderHelmholtz() : BaseProvider("https://api.helmholtz-blablador.fz-juelich.de/v1/", LOGGER) +public sealed class ProviderHelmholtz() : BaseProvider(LLMProviders.HELMHOLTZ, "https://api.helmholtz-blablador.fz-juelich.de/v1/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -25,12 +25,12 @@ public sealed class ProviderHelmholtz() : BaseProvider("https://api.helmholtz-bl public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -40,24 +40,7 @@ public sealed class ProviderHelmholtz() : BaseProvider("https://api.helmholtz-bl var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel); // Prepare the Helmholtz HTTP chat request: var helmholtzChatRequest = JsonSerializer.Serialize(new ChatCompletionAPIRequest @@ -97,11 +80,17 @@ public sealed class ProviderHelmholtz() : BaseProvider("https://api.helmholtz-bl yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + return Task.FromResult(string.Empty); + } /// public override async Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) { - var models = await this.LoadModels(token, apiKeyProvisional); + var models = await this.LoadModels(SecretStoreType.LLM_PROVIDER, token, apiKeyProvisional); return models.Where(model => !model.Id.StartsWith("text-", StringComparison.InvariantCultureIgnoreCase) && !model.Id.StartsWith("alias-embedding", StringComparison.InvariantCultureIgnoreCase)); } @@ -115,21 +104,27 @@ public sealed class ProviderHelmholtz() : BaseProvider("https://api.helmholtz-bl /// public override async Task> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default) { - var models = await this.LoadModels(token, apiKeyProvisional); + var models = await this.LoadModels(SecretStoreType.EMBEDDING_PROVIDER, token, apiKeyProvisional); return models.Where(model => model.Id.StartsWith("alias-embedding", StringComparison.InvariantCultureIgnoreCase) || model.Id.StartsWith("text-", StringComparison.InvariantCultureIgnoreCase) || model.Id.Contains("gritlm", StringComparison.InvariantCultureIgnoreCase)); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } + #endregion - private async Task> LoadModels(CancellationToken token, string? apiKeyProvisional = null) + private async Task> LoadModels(SecretStoreType storeType, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Provider/HuggingFace/ProviderHuggingFace.cs b/app/MindWork AI Studio/Provider/HuggingFace/ProviderHuggingFace.cs index 31522b5c..685dea10 100644 --- a/app/MindWork AI Studio/Provider/HuggingFace/ProviderHuggingFace.cs +++ b/app/MindWork AI Studio/Provider/HuggingFace/ProviderHuggingFace.cs @@ -13,9 +13,9 @@ public sealed class ProviderHuggingFace : BaseProvider { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); - public ProviderHuggingFace(HFInferenceProvider hfProvider, Model model) : base($"https://router.huggingface.co/{hfProvider.Endpoints(model)}", LOGGER) + public ProviderHuggingFace(HFInferenceProvider hfProvider, Model model) : base(LLMProviders.HUGGINGFACE, $"https://router.huggingface.co/{hfProvider.Endpoints(model)}", LOGGER) { - LOGGER.LogInformation($"We use the inferende provider '{hfProvider}'. Thus we use the base URL 'https://router.huggingface.co/{hfProvider.Endpoints(model)}'."); + LOGGER.LogInformation($"We use the inference provider '{hfProvider}'. Thus we use the base URL 'https://router.huggingface.co/{hfProvider.Endpoints(model)}'."); } #region Implementation of IProvider @@ -30,12 +30,12 @@ public sealed class ProviderHuggingFace : BaseProvider public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -45,24 +45,7 @@ public sealed class ProviderHuggingFace : BaseProvider var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var message = await chatThread.Blocks.BuildMessages(async n => new Message - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var message = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel); // Prepare the HuggingFace HTTP chat request: var huggingfaceChatRequest = JsonSerializer.Serialize(new ChatCompletionAPIRequest @@ -102,6 +85,12 @@ public sealed class ProviderHuggingFace : BaseProvider yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + return Task.FromResult(string.Empty); + } /// public override Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) @@ -121,5 +110,11 @@ public sealed class ProviderHuggingFace : BaseProvider return Task.FromResult(Enumerable.Empty()); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } + #endregion } \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/IMessage.cs b/app/MindWork AI Studio/Provider/IMessage.cs new file mode 100644 index 00000000..2a8c9e2f --- /dev/null +++ b/app/MindWork AI Studio/Provider/IMessage.cs @@ -0,0 +1,15 @@ +namespace AIStudio.Provider; + +/// +/// Standard interface for messages exchanged with AI models. +/// +/// The type of the message content. +public interface IMessage : IMessageBase +{ + /// + /// Gets the main content of the message exchanged with the AI model. + /// The content encapsulates the core information or data being transmitted, + /// and its type can vary based on the specific implementation or use case. + /// + public T Content { get; init; } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/IMessageBase.cs b/app/MindWork AI Studio/Provider/IMessageBase.cs new file mode 100644 index 00000000..8f67cc8b --- /dev/null +++ b/app/MindWork AI Studio/Provider/IMessageBase.cs @@ -0,0 +1,14 @@ +namespace AIStudio.Provider; + +/// +/// The none-generic base interface for messages exchanged with AI models. +/// +public interface IMessageBase +{ + /// + /// Gets the role of the entity sending or receiving the message. + /// This property typically identifies whether the entity is acting + /// as a user, assistant, or system in the context of the interaction. + /// + public string Role { get; init; } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/IProvider.cs b/app/MindWork AI Studio/Provider/IProvider.cs index e883fec8..5c390074 100644 --- a/app/MindWork AI Studio/Provider/IProvider.cs +++ b/app/MindWork AI Studio/Provider/IProvider.cs @@ -8,6 +8,11 @@ namespace AIStudio.Provider; /// public interface IProvider { + /// + /// The provider type. + /// + public LLMProviders Provider { get; } + /// /// The provider's ID. /// @@ -45,6 +50,16 @@ public interface IProvider /// The image completion stream. public IAsyncEnumerable StreamImageCompletion(Model imageModel, string promptPositive, string promptNegative = FilterOperator.String.Empty, ImageURL referenceImageURL = default, CancellationToken token = default); + /// + /// Transcribe an audio file. + /// + /// The model to use for transcription. + /// The audio file path. + /// The settings manager instance to use. + /// The cancellation token. + /// >The transcription result. + public Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default); + /// /// Load all possible text models that can be used with this provider. /// @@ -69,4 +84,11 @@ public interface IProvider /// The list of embedding models. public Task> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default); + /// + /// Load all possible transcription models that can be used with this provider. + /// + /// The provisional API key to use. Useful when the user is adding a new provider. When null, the stored API key is used. + /// >The cancellation token. + /// >The list of transcription models. + public Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default); } \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/LLMProviders.cs b/app/MindWork AI Studio/Provider/LLMProviders.cs index f23cd876..6a560036 100644 --- a/app/MindWork AI Studio/Provider/LLMProviders.cs +++ b/app/MindWork AI Studio/Provider/LLMProviders.cs @@ -15,7 +15,8 @@ public enum LLMProviders DEEP_SEEK = 11, ALIBABA_CLOUD = 12, PERPLEXITY = 14, - + OPEN_ROUTER = 15, + FIREWORKS = 5, GROQ = 6, HUGGINGFACE = 13, diff --git a/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs b/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs index 52fe30a1..ea548923 100644 --- a/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs +++ b/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs @@ -9,6 +9,7 @@ using AIStudio.Provider.Helmholtz; using AIStudio.Provider.HuggingFace; using AIStudio.Provider.Mistral; using AIStudio.Provider.OpenAI; +using AIStudio.Provider.OpenRouter; using AIStudio.Provider.Perplexity; using AIStudio.Provider.SelfHosted; using AIStudio.Provider.X; @@ -42,7 +43,8 @@ public static class LLMProvidersExtensions LLMProviders.DEEP_SEEK => "DeepSeek", LLMProviders.ALIBABA_CLOUD => "Alibaba Cloud", LLMProviders.PERPLEXITY => "Perplexity", - + LLMProviders.OPEN_ROUTER => "OpenRouter", + LLMProviders.GROQ => "Groq", LLMProviders.FIREWORKS => "Fireworks.ai", LLMProviders.HUGGINGFACE => "Hugging Face", @@ -92,7 +94,9 @@ public static class LLMProvidersExtensions LLMProviders.ALIBABA_CLOUD => Confidence.CHINA_NO_TRAINING.WithRegion("Asia").WithSources("https://www.alibabacloud.com/help/en/model-studio/support/faq-about-alibaba-cloud-model-studio").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)), LLMProviders.PERPLEXITY => Confidence.USA_NO_TRAINING.WithRegion("America, U.S.").WithSources("https://www.perplexity.ai/hub/legal/perplexity-api-terms-of-service").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)), - + + LLMProviders.OPEN_ROUTER => Confidence.USA_HUB.WithRegion("America, U.S.").WithSources("https://openrouter.ai/privacy", "https://openrouter.ai/terms").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)), + LLMProviders.SELF_HOSTED => Confidence.SELF_HOSTED.WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)), LLMProviders.HELMHOLTZ => Confidence.GDPR_NO_TRAINING.WithRegion("Europe, Germany").WithSources("https://helmholtz.cloud/services/?serviceID=d7d5c597-a2f6-4bd1-b71e-4d6499d98570").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)), @@ -106,7 +110,7 @@ public static class LLMProvidersExtensions /// /// The provider to check. /// True if the provider supports embeddings; otherwise, false. - public static bool ProvideEmbeddings(this LLMProviders llmProvider) => llmProvider switch + public static bool ProvideEmbeddingAPI(this LLMProviders llmProvider) => llmProvider switch { // // Providers that support embeddings: @@ -128,7 +132,45 @@ public static class LLMProvidersExtensions LLMProviders.DEEP_SEEK => false, LLMProviders.HUGGINGFACE => false, LLMProviders.PERPLEXITY => false, + LLMProviders.OPEN_ROUTER => true, + + // + // Self-hosted providers are treated as a special case anyway. + // + LLMProviders.SELF_HOSTED => true, + _ => false, + }; + + public static bool ProvideTranscriptionAPI(this LLMProviders llmProvider) => llmProvider switch + { + // + // Providers that support transcription: + // + LLMProviders.OPEN_AI => true, + LLMProviders.MISTRAL => true, + LLMProviders.FIREWORKS => true, + LLMProviders.GWDG => true, + + // + // Providers that support transcription but provide no OpenAI-compatible API yet: + // + LLMProviders.ALIBABA_CLOUD => false, + LLMProviders.GOOGLE => false, + + // + // Providers that do not support transcription: + // + LLMProviders.OPEN_ROUTER => false, + LLMProviders.GROQ => false, + LLMProviders.ANTHROPIC => false, + LLMProviders.X => false, + LLMProviders.DEEP_SEEK => false, + LLMProviders.HUGGINGFACE => false, + LLMProviders.PERPLEXITY => false, + + LLMProviders.HELMHOLTZ => false, + // // Self-hosted providers are treated as a special case anyway. // @@ -157,6 +199,16 @@ public static class LLMProvidersExtensions return embeddingProviderSettings.UsedLLMProvider.CreateProvider(embeddingProviderSettings.Name, embeddingProviderSettings.Host, embeddingProviderSettings.Hostname, embeddingProviderSettings.Model, HFInferenceProvider.NONE); } + /// + /// Creates a new provider instance based on the speech provider value. + /// + /// The speech provider settings. + /// The provider instance. + public static IProvider CreateProvider(this TranscriptionProvider transcriptionProviderSettings) + { + return transcriptionProviderSettings.UsedLLMProvider.CreateProvider(transcriptionProviderSettings.Name, transcriptionProviderSettings.Host, transcriptionProviderSettings.Hostname, transcriptionProviderSettings.Model, HFInferenceProvider.NONE); + } + private static IProvider CreateProvider(this LLMProviders provider, string instanceName, Host host, string hostname, Model model, HFInferenceProvider inferenceProvider, string expertProviderApiParameter = "") { try @@ -171,7 +223,8 @@ public static class LLMProvidersExtensions LLMProviders.DEEP_SEEK => new ProviderDeepSeek { InstanceName = instanceName, AdditionalJsonApiParameters = expertProviderApiParameter }, LLMProviders.ALIBABA_CLOUD => new ProviderAlibabaCloud { InstanceName = instanceName, AdditionalJsonApiParameters = expertProviderApiParameter }, LLMProviders.PERPLEXITY => new ProviderPerplexity { InstanceName = instanceName, AdditionalJsonApiParameters = expertProviderApiParameter }, - + LLMProviders.OPEN_ROUTER => new ProviderOpenRouter { InstanceName = instanceName, AdditionalJsonApiParameters = expertProviderApiParameter }, + LLMProviders.GROQ => new ProviderGroq { InstanceName = instanceName, AdditionalJsonApiParameters = expertProviderApiParameter }, LLMProviders.FIREWORKS => new ProviderFireworks { InstanceName = instanceName, AdditionalJsonApiParameters = expertProviderApiParameter }, LLMProviders.HUGGINGFACE => new ProviderHuggingFace(inferenceProvider, model) { InstanceName = instanceName, AdditionalJsonApiParameters = expertProviderApiParameter }, @@ -201,7 +254,8 @@ public static class LLMProvidersExtensions LLMProviders.DEEP_SEEK => "https://platform.deepseek.com/sign_up", LLMProviders.ALIBABA_CLOUD => "https://account.alibabacloud.com/register/intl_register.htm", LLMProviders.PERPLEXITY => "https://www.perplexity.ai/account/api", - + LLMProviders.OPEN_ROUTER => "https://openrouter.ai/keys", + LLMProviders.GROQ => "https://console.groq.com/", LLMProviders.FIREWORKS => "https://fireworks.ai/login", LLMProviders.HUGGINGFACE => "https://huggingface.co/login", @@ -224,8 +278,9 @@ public static class LLMProvidersExtensions LLMProviders.DEEP_SEEK => "https://platform.deepseek.com/usage", LLMProviders.ALIBABA_CLOUD => "https://usercenter2-intl.aliyun.com/billing", LLMProviders.PERPLEXITY => "https://www.perplexity.ai/account/api/", + LLMProviders.OPEN_ROUTER => "https://openrouter.ai/activity", LLMProviders.HUGGINGFACE => "https://huggingface.co/settings/billing", - + _ => string.Empty, }; @@ -241,8 +296,9 @@ public static class LLMProvidersExtensions LLMProviders.DEEP_SEEK => true, LLMProviders.ALIBABA_CLOUD => true, LLMProviders.PERPLEXITY => true, + LLMProviders.OPEN_ROUTER => true, LLMProviders.HUGGINGFACE => true, - + _ => false, }; @@ -265,6 +321,11 @@ public static class LLMProvidersExtensions LLMProviders.SELF_HOSTED => host is not Host.LM_STUDIO, _ => false, }; + + public static bool IsTranscriptionModelProvidedManually(this LLMProviders provider, Host host) => provider switch + { + _ => false, + }; public static bool IsHostNeeded(this LLMProviders provider) => provider switch { @@ -288,7 +349,8 @@ public static class LLMProvidersExtensions LLMProviders.DEEP_SEEK => true, LLMProviders.ALIBABA_CLOUD => true, LLMProviders.PERPLEXITY => true, - + LLMProviders.OPEN_ROUTER => true, + LLMProviders.GROQ => true, LLMProviders.FIREWORKS => true, LLMProviders.HELMHOLTZ => true, @@ -310,7 +372,8 @@ public static class LLMProvidersExtensions LLMProviders.DEEP_SEEK => true, LLMProviders.ALIBABA_CLOUD => true, LLMProviders.PERPLEXITY => true, - + LLMProviders.OPEN_ROUTER => true, + LLMProviders.GROQ => true, LLMProviders.FIREWORKS => true, LLMProviders.HELMHOLTZ => true, @@ -327,13 +390,14 @@ public static class LLMProvidersExtensions switch (host) { case Host.NONE: - case Host.LLAMACPP: + case Host.LLAMA_CPP: default: return false; case Host.OLLAMA: case Host.LM_STUDIO: case Host.VLLM: + case Host.WHISPER_CPP: return true; } } diff --git a/app/MindWork AI Studio/Provider/MessageBaseConverter.cs b/app/MindWork AI Studio/Provider/MessageBaseConverter.cs new file mode 100644 index 00000000..7707736e --- /dev/null +++ b/app/MindWork AI Studio/Provider/MessageBaseConverter.cs @@ -0,0 +1,32 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace AIStudio.Provider; + +/// +/// Custom JSON converter for the IMessageBase interface to handle polymorphic serialization. +/// +/// +/// This converter ensures that when serializing IMessageBase objects, all properties +/// of the concrete implementation (e.g., TextMessage) are serialized, not just the +/// properties defined in the IMessageBase interface. +/// +public sealed class MessageBaseConverter : JsonConverter +{ + private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); + + public override IMessageBase? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + // Deserialization is not needed for request objects, as messages are only serialized + // when sending requests to LLM providers. + LOGGER.LogError("Deserializing IMessageBase is not supported. This converter is only used for serializing request messages."); + return null; + } + + public override void Write(Utf8JsonWriter writer, IMessageBase value, JsonSerializerOptions options) + { + // Serialize the actual concrete type (e.g., TextMessage) instead of just the IMessageBase interface. + // This ensures all properties of the concrete type are included in the JSON output. + JsonSerializer.Serialize(writer, value, value.GetType(), options); + } +} diff --git a/app/MindWork AI Studio/Provider/Mistral/ChatRequest.cs b/app/MindWork AI Studio/Provider/Mistral/ChatRequest.cs index b12dd15d..01a45a89 100644 --- a/app/MindWork AI Studio/Provider/Mistral/ChatRequest.cs +++ b/app/MindWork AI Studio/Provider/Mistral/ChatRequest.cs @@ -12,7 +12,7 @@ namespace AIStudio.Provider.Mistral; /// Whether to inject a safety prompt before all conversations. public readonly record struct ChatRequest( string Model, - IList Messages, + IList Messages, bool Stream, int RandomSeed, bool SafePrompt = false diff --git a/app/MindWork AI Studio/Provider/Mistral/ProviderMistral.cs b/app/MindWork AI Studio/Provider/Mistral/ProviderMistral.cs index bd999b92..0755f349 100644 --- a/app/MindWork AI Studio/Provider/Mistral/ProviderMistral.cs +++ b/app/MindWork AI Studio/Provider/Mistral/ProviderMistral.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.Mistral; -public sealed class ProviderMistral() : BaseProvider("https://api.mistral.ai/v1/", LOGGER) +public sealed class ProviderMistral() : BaseProvider(LLMProviders.MISTRAL, "https://api.mistral.ai/v1/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -23,12 +23,12 @@ public sealed class ProviderMistral() : BaseProvider("https://api.mistral.ai/v1/ public override async IAsyncEnumerable StreamChatCompletion(Provider.Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new RegularMessage + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -38,24 +38,7 @@ public sealed class ProviderMistral() : BaseProvider("https://api.mistral.ai/v1/ var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new RegularMessage - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var messages = await chatThread.Blocks.BuildMessagesUsingDirectImageUrlAsync(this.Provider, chatModel); // Prepare the Mistral HTTP chat request: var mistralChatRequest = JsonSerializer.Serialize(new ChatRequest @@ -98,11 +81,18 @@ public sealed class ProviderMistral() : BaseProvider("https://api.mistral.ai/v1/ yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override async Task TranscribeAudioAsync(Provider.Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.TRANSCRIPTION_PROVIDER); + return await this.PerformStandardTranscriptionRequest(requestedSecret, transcriptionModel, audioFilePath, token: token); + } /// public override async Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) { - var modelResponse = await this.LoadModelList(apiKeyProvisional, token); + var modelResponse = await this.LoadModelList(SecretStoreType.LLM_PROVIDER, apiKeyProvisional, token); if(modelResponse == default) return []; @@ -116,7 +106,7 @@ public sealed class ProviderMistral() : BaseProvider("https://api.mistral.ai/v1/ /// public override async Task> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default) { - var modelResponse = await this.LoadModelList(apiKeyProvisional, token); + var modelResponse = await this.LoadModelList(SecretStoreType.EMBEDDING_PROVIDER, apiKeyProvisional, token); if(modelResponse == default) return []; @@ -130,14 +120,25 @@ public sealed class ProviderMistral() : BaseProvider("https://api.mistral.ai/v1/ return Task.FromResult(Enumerable.Empty()); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + // Source: https://docs.mistral.ai/capabilities/audio_transcription + return Task.FromResult>( + new List + { + new("voxtral-mini-latest", "Voxtral Mini Latest"), + }); + } + #endregion - private async Task LoadModelList(string? apiKeyProvisional, CancellationToken token) + private async Task LoadModelList(SecretStoreType storeType, string? apiKeyProvisional, CancellationToken token) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Provider/Mistral/RegularMessage.cs b/app/MindWork AI Studio/Provider/Mistral/RegularMessage.cs deleted file mode 100644 index df5bdcd3..00000000 --- a/app/MindWork AI Studio/Provider/Mistral/RegularMessage.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace AIStudio.Provider.Mistral; - -/// -/// Regulat chat message model. -/// -/// The text content of the message. -/// The role of the message. -public readonly record struct RegularMessage(string Content, string Role); \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/NoProvider.cs b/app/MindWork AI Studio/Provider/NoProvider.cs index b87820ca..a650ac34 100644 --- a/app/MindWork AI Studio/Provider/NoProvider.cs +++ b/app/MindWork AI Studio/Provider/NoProvider.cs @@ -9,6 +9,8 @@ public class NoProvider : IProvider { #region Implementation of IProvider + public LLMProviders Provider => LLMProviders.NONE; + public string Id => "none"; public string InstanceName { get; set; } = "None"; @@ -21,6 +23,8 @@ public class NoProvider : IProvider public Task> GetImageModels(string? apiKeyProvisional = null, CancellationToken token = default) => Task.FromResult>([]); public Task> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default) => Task.FromResult>([]); + + public Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) => Task.FromResult>([]); public async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatChatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { @@ -34,6 +38,8 @@ public class NoProvider : IProvider yield break; } + public Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) => Task.FromResult(string.Empty); + public IReadOnlyCollection GetModelCapabilities(Model model) => [ Capability.NONE ]; #endregion diff --git a/app/MindWork AI Studio/Provider/OpenAI/ChatCompletionAPIRequest.cs b/app/MindWork AI Studio/Provider/OpenAI/ChatCompletionAPIRequest.cs index 51805910..bd9c08e7 100644 --- a/app/MindWork AI Studio/Provider/OpenAI/ChatCompletionAPIRequest.cs +++ b/app/MindWork AI Studio/Provider/OpenAI/ChatCompletionAPIRequest.cs @@ -10,7 +10,7 @@ namespace AIStudio.Provider.OpenAI; /// Whether to stream the chat completion. public record ChatCompletionAPIRequest( string Model, - IList Messages, + IList Messages, bool Stream ) { diff --git a/app/MindWork AI Studio/Provider/OpenAI/ISubContent.cs b/app/MindWork AI Studio/Provider/OpenAI/ISubContent.cs new file mode 100644 index 00000000..165d07b1 --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenAI/ISubContent.cs @@ -0,0 +1,12 @@ +namespace AIStudio.Provider.OpenAI; + +/// +/// Contract for sub-content in multimodal messages. +/// +public interface ISubContent +{ + /// + /// The type of the sub-content. + /// + public SubContentType Type { get; init; } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/OpenAI/ISubContentImageUrl.cs b/app/MindWork AI Studio/Provider/OpenAI/ISubContentImageUrl.cs new file mode 100644 index 00000000..b2f9b51d --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenAI/ISubContentImageUrl.cs @@ -0,0 +1,19 @@ +namespace AIStudio.Provider.OpenAI; + +/// +/// Contract for nested image URL sub-content. +/// +/// +/// Some providers use a nested object format for image URLs: +/// +/// { "type": "image_url", "image_url": { "url": "data:image/jpeg;base64,..." } } +/// +/// This interface represents the inner object with the "url" property. +/// +public interface ISubContentImageUrl +{ + /// + /// The URL or base64-encoded data URI of the image. + /// + public string Url { get; init; } +} diff --git a/app/MindWork AI Studio/Provider/OpenAI/Message.cs b/app/MindWork AI Studio/Provider/OpenAI/Message.cs deleted file mode 100644 index 508645b0..00000000 --- a/app/MindWork AI Studio/Provider/OpenAI/Message.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace AIStudio.Provider.OpenAI; - -/// -/// Chat message model. -/// -/// The text content of the message. -/// The role of the message. -public readonly record struct Message(string Content, string Role); \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/OpenAI/MultimodalMessage.cs b/app/MindWork AI Studio/Provider/OpenAI/MultimodalMessage.cs new file mode 100644 index 00000000..8b7ff8e0 --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenAI/MultimodalMessage.cs @@ -0,0 +1,13 @@ +namespace AIStudio.Provider.OpenAI; + +/// +/// A multimodal chat message model that can contain various types of content. +/// +/// The list of sub-contents in the message. +/// The role of the message. +public record MultimodalMessage(List Content, string Role) : IMessage> +{ + public MultimodalMessage() : this([], string.Empty) + { + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/OpenAI/ProviderOpenAI.cs b/app/MindWork AI Studio/Provider/OpenAI/ProviderOpenAI.cs index 89da7b7d..c4a213db 100644 --- a/app/MindWork AI Studio/Provider/OpenAI/ProviderOpenAI.cs +++ b/app/MindWork AI Studio/Provider/OpenAI/ProviderOpenAI.cs @@ -11,7 +11,7 @@ namespace AIStudio.Provider.OpenAI; /// /// The OpenAI provider. /// -public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/", LOGGER) +public sealed class ProviderOpenAI() : BaseProvider(LLMProviders.OPEN_AI, "https://api.openai.com/v1/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -27,7 +27,7 @@ public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/" public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; @@ -59,7 +59,7 @@ public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/" }; // Read the model capabilities: - var modelCapabilities = ProviderExtensions.GetModelCapabilitiesOpenAI(chatModel); + var modelCapabilities = this.Provider.GetModelCapabilities(chatModel); // Check if we are using the Responses API or the Chat Completion API: var usingResponsesAPI = modelCapabilities.Contains(Capability.RESPONSES_API); @@ -70,7 +70,7 @@ public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/" LOGGER.LogInformation("Using the system prompt role '{SystemPromptRole}' and the '{RequestPath}' API for model '{ChatModelId}'.", systemPromptRole, requestPath, chatModel.Id); // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = systemPromptRole, Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -90,9 +90,11 @@ public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/" var apiParameters = this.ParseAdditionalApiParameters("input", "store", "tools"); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message - { - Role = n.Role switch + var messages = await chatThread.Blocks.BuildMessagesAsync( + this.Provider, chatModel, + + // OpenAI-specific role mapping: + role => role switch { ChatRole.USER => "user", ChatRole.AI => "assistant", @@ -102,12 +104,46 @@ public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/" _ => "user", }, - Content = n.Content switch + // OpenAI's text sub-content depends on the model, whether we are using + // the Responses API or the Chat Completion API: + text => usingResponsesAPI switch { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + // Responses API uses INPUT_TEXT: + true => new SubContentInputText + { + Text = text, + }, + + // Chat Completion API uses TEXT: + false => new SubContentText + { + Text = text, + }, + }, + + // OpenAI's image sub-content depends on the model as well, + // whether we are using the Responses API or the Chat Completion API: + async attachment => usingResponsesAPI switch + { + // Responses API uses INPUT_IMAGE: + true => new SubContentInputImage + { + ImageUrl = await attachment.TryAsBase64(token: token) is (true, var base64Content) + ? $"data:{attachment.DetermineMimeType()};base64,{base64Content}" + : string.Empty, + }, + + // Chat Completion API uses IMAGE_URL: + false => new SubContentImageUrlNested + { + ImageUrl = new SubContentImageUrlData + { + Url = await attachment.TryAsBase64(token: token) is (true, var base64Content) + ? $"data:{attachment.DetermineMimeType()};base64,{base64Content}" + : string.Empty, + }, + } + }); // // Create the request: either for the Responses API or the Chat Completion API @@ -119,9 +155,7 @@ public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/" { Model = chatModel.Id, - // Build the messages: - // - First of all the system prompt - // - Then none-empty user and AI messages + // All messages go into the messages field: Messages = [systemPrompt, ..messages], // Right now, we only support streaming completions: @@ -134,27 +168,8 @@ public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/" { Model = chatModel.Id, - // Build the messages: - // - First of all the system prompt - // - Then none-empty user and AI messages - Input = [systemPrompt, ..chatThread.Blocks.Where(n => n.ContentType is ContentType.TEXT && !string.IsNullOrWhiteSpace((n.Content as ContentText)?.Text)).Select(n => new Message - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => systemPromptRole, - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => text.Text, - _ => string.Empty, - } - }).ToList()], + // All messages go into the input field: + Input = [systemPrompt, ..messages], // Right now, we only support streaming completions: Stream = true, @@ -170,7 +185,7 @@ public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/" }, JSON_SERIALIZER_OPTIONS), }; - + async Task RequestBuilder() { // Build the HTTP post request: @@ -202,11 +217,18 @@ public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/" } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override async Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.TRANSCRIPTION_PROVIDER); + return await this.PerformStandardTranscriptionRequest(requestedSecret, transcriptionModel, audioFilePath, token: token); + } /// public override async Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) { - var models = await this.LoadModels(["chatgpt-", "gpt-", "o1-", "o3-", "o4-"], token, apiKeyProvisional); + var models = await this.LoadModels(SecretStoreType.LLM_PROVIDER, ["chatgpt-", "gpt-", "o1-", "o3-", "o4-"], token, apiKeyProvisional); return models.Where(model => !model.Id.Contains("image", StringComparison.OrdinalIgnoreCase) && !model.Id.Contains("realtime", StringComparison.OrdinalIgnoreCase) && !model.Id.Contains("audio", StringComparison.OrdinalIgnoreCase) && @@ -217,23 +239,31 @@ public sealed class ProviderOpenAI() : BaseProvider("https://api.openai.com/v1/" /// public override Task> GetImageModels(string? apiKeyProvisional = null, CancellationToken token = default) { - return this.LoadModels(["dall-e-", "gpt-image"], token, apiKeyProvisional); + return this.LoadModels(SecretStoreType.IMAGE_PROVIDER, ["dall-e-", "gpt-image"], token, apiKeyProvisional); } /// public override Task> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default) { - return this.LoadModels(["text-embedding-"], token, apiKeyProvisional); + return this.LoadModels(SecretStoreType.EMBEDDING_PROVIDER, ["text-embedding-"], token, apiKeyProvisional); + } + + /// + public override async Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + var models = await this.LoadModels(SecretStoreType.TRANSCRIPTION_PROVIDER, ["whisper-", "gpt-"], token, apiKeyProvisional); + return models.Where(model => model.Id.StartsWith("whisper-", StringComparison.InvariantCultureIgnoreCase) || + model.Id.Contains("-transcribe", StringComparison.InvariantCultureIgnoreCase)); } #endregion - private async Task> LoadModels(string[] prefixes, CancellationToken token, string? apiKeyProvisional = null) + private async Task> LoadModels(SecretStoreType storeType, string[] prefixes, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Provider/OpenAI/ResponsesAPIRequest.cs b/app/MindWork AI Studio/Provider/OpenAI/ResponsesAPIRequest.cs index e3c9541b..deb315d6 100644 --- a/app/MindWork AI Studio/Provider/OpenAI/ResponsesAPIRequest.cs +++ b/app/MindWork AI Studio/Provider/OpenAI/ResponsesAPIRequest.cs @@ -12,7 +12,7 @@ namespace AIStudio.Provider.OpenAI; /// The tools to use for the request. public record ResponsesAPIRequest( string Model, - IList Input, + IList Input, bool Stream, bool Store, IList Tools) diff --git a/app/MindWork AI Studio/Provider/OpenAI/SubContentImageUrl.cs b/app/MindWork AI Studio/Provider/OpenAI/SubContentImageUrl.cs new file mode 100644 index 00000000..fe190fb8 --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenAI/SubContentImageUrl.cs @@ -0,0 +1,11 @@ +namespace AIStudio.Provider.OpenAI; + +/// +/// Image sub-content for multimodal messages. +/// +public record SubContentImageUrl(SubContentType Type, string ImageUrl) : ISubContent +{ + public SubContentImageUrl() : this(SubContentType.IMAGE_URL, string.Empty) + { + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/OpenAI/SubContentImageUrlData.cs b/app/MindWork AI Studio/Provider/OpenAI/SubContentImageUrlData.cs new file mode 100644 index 00000000..af0ffc9e --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenAI/SubContentImageUrlData.cs @@ -0,0 +1,17 @@ +namespace AIStudio.Provider.OpenAI; + +/// +/// Represents the inner object of a nested image URL sub-content. +/// +/// +/// This record is used when the provider expects the format: +/// +/// { "type": "image_url", "image_url": { "url": "data:image/jpeg;base64,..." } } +/// +/// This class represents the inner { "url": "..." } part. +/// +public record SubContentImageUrlData : ISubContentImageUrl +{ + /// + public string Url { get; init; } = string.Empty; +} diff --git a/app/MindWork AI Studio/Provider/OpenAI/SubContentImageUrlNested.cs b/app/MindWork AI Studio/Provider/OpenAI/SubContentImageUrlNested.cs new file mode 100644 index 00000000..297a73fe --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenAI/SubContentImageUrlNested.cs @@ -0,0 +1,18 @@ +namespace AIStudio.Provider.OpenAI; + +/// +/// Image sub-content for multimodal messages using nested URL format. +/// +/// +/// This record is used when the provider expects the format: +/// +/// { "type": "image_url", "image_url": { "url": "data:image/jpeg;base64,..." } } +/// +/// Used by LM Studio, VLLM, and other OpenAI-compatible providers. +/// +public record SubContentImageUrlNested(SubContentType Type, ISubContentImageUrl ImageUrl) : ISubContent +{ + public SubContentImageUrlNested() : this(SubContentType.IMAGE_URL, new SubContentImageUrlData()) + { + } +} diff --git a/app/MindWork AI Studio/Provider/OpenAI/SubContentInputImage.cs b/app/MindWork AI Studio/Provider/OpenAI/SubContentInputImage.cs new file mode 100644 index 00000000..21144952 --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenAI/SubContentInputImage.cs @@ -0,0 +1,14 @@ +namespace AIStudio.Provider.OpenAI; + +/// +/// Image input sub-content for multimodal messages. +/// +/// +/// Right now, this is used only by OpenAI in its responses API. +/// +public record SubContentInputImage(SubContentType Type, string ImageUrl) : ISubContent +{ + public SubContentInputImage() : this(SubContentType.INPUT_IMAGE, string.Empty) + { + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/OpenAI/SubContentInputText.cs b/app/MindWork AI Studio/Provider/OpenAI/SubContentInputText.cs new file mode 100644 index 00000000..30fb51d8 --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenAI/SubContentInputText.cs @@ -0,0 +1,14 @@ +namespace AIStudio.Provider.OpenAI; + +/// +/// Text input sub-content for multimodal messages. +/// +/// +/// Right now, this is used only by OpenAI in its responses API. +/// +public record SubContentInputText(SubContentType Type, string Text) : ISubContent +{ + public SubContentInputText() : this(SubContentType.INPUT_TEXT, string.Empty) + { + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/OpenAI/SubContentText.cs b/app/MindWork AI Studio/Provider/OpenAI/SubContentText.cs new file mode 100644 index 00000000..f94dd710 --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenAI/SubContentText.cs @@ -0,0 +1,11 @@ +namespace AIStudio.Provider.OpenAI; + +/// +/// Text sub-content for multimodal messages. +/// +public record SubContentText(SubContentType Type, string Text) : ISubContent +{ + public SubContentText() : this(SubContentType.TEXT, string.Empty) + { + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/OpenAI/TextMessage.cs b/app/MindWork AI Studio/Provider/OpenAI/TextMessage.cs new file mode 100644 index 00000000..0e75f87f --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenAI/TextMessage.cs @@ -0,0 +1,13 @@ +namespace AIStudio.Provider.OpenAI; + +/// +/// Standard text-based chat message model. +/// +/// The text content of the message. +/// The role of the message. +public record TextMessage(string Content, string Role) : IMessage +{ + public TextMessage() : this(string.Empty, string.Empty) + { + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/OpenRouter/OpenRouterModel.cs b/app/MindWork AI Studio/Provider/OpenRouter/OpenRouterModel.cs new file mode 100644 index 00000000..7cd47a59 --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenRouter/OpenRouterModel.cs @@ -0,0 +1,8 @@ +namespace AIStudio.Provider.OpenRouter; + +/// +/// A data model for an OpenRouter model from the API. +/// +/// The model's ID. +/// The model's human-readable display name. +public readonly record struct OpenRouterModel(string Id, string? Name); diff --git a/app/MindWork AI Studio/Provider/OpenRouter/OpenRouterModelsResponse.cs b/app/MindWork AI Studio/Provider/OpenRouter/OpenRouterModelsResponse.cs new file mode 100644 index 00000000..0680c4e6 --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenRouter/OpenRouterModelsResponse.cs @@ -0,0 +1,7 @@ +namespace AIStudio.Provider.OpenRouter; + +/// +/// A data model for the response from the OpenRouter models endpoint. +/// +/// The list of models. +public readonly record struct OpenRouterModelsResponse(IList Data); diff --git a/app/MindWork AI Studio/Provider/OpenRouter/ProviderOpenRouter.cs b/app/MindWork AI Studio/Provider/OpenRouter/ProviderOpenRouter.cs new file mode 100644 index 00000000..e627ee4c --- /dev/null +++ b/app/MindWork AI Studio/Provider/OpenRouter/ProviderOpenRouter.cs @@ -0,0 +1,197 @@ +using System.Net.Http.Headers; +using System.Runtime.CompilerServices; +using System.Text; +using System.Text.Json; + +using AIStudio.Chat; +using AIStudio.Provider.OpenAI; +using AIStudio.Settings; + +namespace AIStudio.Provider.OpenRouter; + +public sealed class ProviderOpenRouter() : BaseProvider(LLMProviders.OPEN_ROUTER, "https://openrouter.ai/api/v1/", LOGGER) +{ + private const string PROJECT_WEBSITE = "https://github.com/MindWorkAI/AI-Studio"; + private const string PROJECT_NAME = "MindWork AI Studio"; + + private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); + + #region Implementation of IProvider + + /// + public override string Id => LLMProviders.OPEN_ROUTER.ToName(); + + /// + public override string InstanceName { get; set; } = "OpenRouter"; + + /// + public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) + { + // Get the API key: + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); + if(!requestedSecret.Success) + yield break; + + // Prepare the system prompt: + var systemPrompt = new TextMessage + { + Role = "system", + Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), + }; + + // Parse the API parameters: + var apiParameters = this.ParseAdditionalApiParameters(); + + // Build the list of messages: + var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel); + + // Prepare the OpenRouter HTTP chat request: + var openRouterChatRequest = JsonSerializer.Serialize(new ChatCompletionAPIRequest + { + Model = chatModel.Id, + + // Build the messages: + // - First of all the system prompt + // - Then none-empty user and AI messages + Messages = [systemPrompt, ..messages], + + // Right now, we only support streaming completions: + Stream = true, + AdditionalApiParameters = apiParameters + }, JSON_SERIALIZER_OPTIONS); + + async Task RequestBuilder() + { + // Build the HTTP post request: + var request = new HttpRequestMessage(HttpMethod.Post, "chat/completions"); + + // Set the authorization header: + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", await requestedSecret.Secret.Decrypt(ENCRYPTION)); + + // Set custom headers for project identification: + request.Headers.Add("HTTP-Referer", PROJECT_WEBSITE); + request.Headers.Add("X-Title", PROJECT_NAME); + + // Set the content: + request.Content = new StringContent(openRouterChatRequest, Encoding.UTF8, "application/json"); + return request; + } + + await foreach (var content in this.StreamChatCompletionInternal("OpenRouter", RequestBuilder, token)) + yield return content; + } + + #pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously + /// + public override async IAsyncEnumerable StreamImageCompletion(Model imageModel, string promptPositive, string promptNegative = FilterOperator.String.Empty, ImageURL referenceImageURL = default, [EnumeratorCancellation] CancellationToken token = default) + { + yield break; + } + #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + return Task.FromResult(string.Empty); + } + + /// + public override Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return this.LoadModels(SecretStoreType.LLM_PROVIDER, token, apiKeyProvisional); + } + + /// + public override Task> GetImageModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } + + /// + public override Task> GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return this.LoadEmbeddingModels(token, apiKeyProvisional); + } + + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } + + #endregion + + private async Task> LoadModels(SecretStoreType storeType, CancellationToken token, string? apiKeyProvisional = null) + { + var secretKey = apiKeyProvisional switch + { + not null => apiKeyProvisional, + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch + { + { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), + _ => null, + } + }; + + if (secretKey is null) + return []; + + using var request = new HttpRequestMessage(HttpMethod.Get, "models"); + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secretKey); + + // Set custom headers for project identification: + request.Headers.Add("HTTP-Referer", PROJECT_WEBSITE); + request.Headers.Add("X-Title", PROJECT_NAME); + + using var response = await this.httpClient.SendAsync(request, token); + if(!response.IsSuccessStatusCode) + return []; + + var modelResponse = await response.Content.ReadFromJsonAsync(token); + + // Filter out non-text models (image, audio, embedding models) and convert to Model + return modelResponse.Data + .Where(n => + !n.Id.Contains("whisper", StringComparison.OrdinalIgnoreCase) && + !n.Id.Contains("dall-e", StringComparison.OrdinalIgnoreCase) && + !n.Id.Contains("tts", StringComparison.OrdinalIgnoreCase) && + !n.Id.Contains("embedding", StringComparison.OrdinalIgnoreCase) && + !n.Id.Contains("moderation", StringComparison.OrdinalIgnoreCase) && + !n.Id.Contains("stable-diffusion", StringComparison.OrdinalIgnoreCase) && + !n.Id.Contains("flux", StringComparison.OrdinalIgnoreCase) && + !n.Id.Contains("midjourney", StringComparison.OrdinalIgnoreCase)) + .Select(n => new Model(n.Id, n.Name)); + } + + private async Task> LoadEmbeddingModels(CancellationToken token, string? apiKeyProvisional = null) + { + var secretKey = apiKeyProvisional switch + { + not null => apiKeyProvisional, + _ => await RUST_SERVICE.GetAPIKey(this, SecretStoreType.EMBEDDING_PROVIDER) switch + { + { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), + _ => null, + } + }; + + if (secretKey is null) + return []; + + using var request = new HttpRequestMessage(HttpMethod.Get, "embeddings/models"); + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secretKey); + + // Set custom headers for project identification: + request.Headers.Add("HTTP-Referer", PROJECT_WEBSITE); + request.Headers.Add("X-Title", PROJECT_NAME); + + using var response = await this.httpClient.SendAsync(request, token); + if(!response.IsSuccessStatusCode) + return []; + + var modelResponse = await response.Content.ReadFromJsonAsync(token); + + // Convert all embedding models to Model + return modelResponse.Data.Select(n => new Model(n.Id, n.Name)); + } +} diff --git a/app/MindWork AI Studio/Provider/Perplexity/ProviderPerplexity.cs b/app/MindWork AI Studio/Provider/Perplexity/ProviderPerplexity.cs index 3687ad7b..6ecfc69f 100644 --- a/app/MindWork AI Studio/Provider/Perplexity/ProviderPerplexity.cs +++ b/app/MindWork AI Studio/Provider/Perplexity/ProviderPerplexity.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.Perplexity; -public sealed class ProviderPerplexity() : BaseProvider("https://api.perplexity.ai/", LOGGER) +public sealed class ProviderPerplexity() : BaseProvider(LLMProviders.PERPLEXITY, "https://api.perplexity.ai/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -34,12 +34,12 @@ public sealed class ProviderPerplexity() : BaseProvider("https://api.perplexity. public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -49,24 +49,7 @@ public sealed class ProviderPerplexity() : BaseProvider("https://api.perplexity. var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message() - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel); // Prepare the Perplexity HTTP chat request: var perplexityChatRequest = JsonSerializer.Serialize(new ChatCompletionAPIRequest @@ -105,6 +88,12 @@ public sealed class ProviderPerplexity() : BaseProvider("https://api.perplexity. yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + + /// + public override Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + return Task.FromResult(string.Empty); + } /// public override Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) @@ -124,6 +113,12 @@ public sealed class ProviderPerplexity() : BaseProvider("https://api.perplexity. return Task.FromResult(Enumerable.Empty()); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } + #endregion private Task> LoadModels() => Task.FromResult>(KNOWN_MODELS); diff --git a/app/MindWork AI Studio/Provider/SelfHosted/ChatRequest.cs b/app/MindWork AI Studio/Provider/SelfHosted/ChatRequest.cs index 4791692c..e1da56bd 100644 --- a/app/MindWork AI Studio/Provider/SelfHosted/ChatRequest.cs +++ b/app/MindWork AI Studio/Provider/SelfHosted/ChatRequest.cs @@ -10,7 +10,7 @@ namespace AIStudio.Provider.SelfHosted; /// Whether to stream the chat completion. public readonly record struct ChatRequest( string Model, - IList Messages, + IList Messages, bool Stream ) { diff --git a/app/MindWork AI Studio/Provider/SelfHosted/Host.cs b/app/MindWork AI Studio/Provider/SelfHosted/Host.cs index d922ccd5..d0dde806 100644 --- a/app/MindWork AI Studio/Provider/SelfHosted/Host.cs +++ b/app/MindWork AI Studio/Provider/SelfHosted/Host.cs @@ -5,7 +5,8 @@ public enum Host NONE, LM_STUDIO, - LLAMACPP, + LLAMA_CPP, + WHISPER_CPP, OLLAMA, VLLM, } \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/SelfHosted/HostExtensions.cs b/app/MindWork AI Studio/Provider/SelfHosted/HostExtensions.cs index 3478d9e5..6c475273 100644 --- a/app/MindWork AI Studio/Provider/SelfHosted/HostExtensions.cs +++ b/app/MindWork AI Studio/Provider/SelfHosted/HostExtensions.cs @@ -7,7 +7,8 @@ public static class HostExtensions Host.NONE => "None", Host.LM_STUDIO => "LM Studio", - Host.LLAMACPP => "llama.cpp", + Host.LLAMA_CPP => "llama.cpp", + Host.WHISPER_CPP => "whisper.cpp", Host.OLLAMA => "ollama", Host.VLLM => "vLLM", @@ -24,7 +25,28 @@ public static class HostExtensions _ => "chat/completions", }; - public static bool AreEmbeddingsSupported(this Host host) + public static string TranscriptionURL(this Host host) => host switch + { + _ => "audio/transcriptions", + }; + + public static bool IsChatSupported(this Host host) + { + switch (host) + { + case Host.WHISPER_CPP: + return false; + + default: + case Host.OLLAMA: + case Host.VLLM: + case Host.LM_STUDIO: + case Host.LLAMA_CPP: + return true; + } + } + + public static bool IsEmbeddingSupported(this Host host) { switch (host) { @@ -34,7 +56,23 @@ public static class HostExtensions return true; default: - case Host.LLAMACPP: + case Host.LLAMA_CPP: + return false; + } + } + + public static bool IsTranscriptionSupported(this Host host) + { + switch (host) + { + case Host.OLLAMA: + case Host.VLLM: + case Host.WHISPER_CPP: + return true; + + default: + case Host.LM_STUDIO: + case Host.LLAMA_CPP: return false; } } diff --git a/app/MindWork AI Studio/Provider/SelfHosted/Message.cs b/app/MindWork AI Studio/Provider/SelfHosted/Message.cs deleted file mode 100644 index e4ecc70a..00000000 --- a/app/MindWork AI Studio/Provider/SelfHosted/Message.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace AIStudio.Provider.SelfHosted; - -/// -/// Chat message model. -/// -/// The text content of the message. -/// The role of the message. -public readonly record struct Message(string Content, string Role); \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/SelfHosted/ProviderSelfHosted.cs b/app/MindWork AI Studio/Provider/SelfHosted/ProviderSelfHosted.cs index 4389099e..d63ec0d1 100644 --- a/app/MindWork AI Studio/Provider/SelfHosted/ProviderSelfHosted.cs +++ b/app/MindWork AI Studio/Provider/SelfHosted/ProviderSelfHosted.cs @@ -6,12 +6,15 @@ using System.Text.Json; using AIStudio.Chat; using AIStudio.Provider.OpenAI; using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; namespace AIStudio.Provider.SelfHosted; -public sealed class ProviderSelfHosted(Host host, string hostname) : BaseProvider($"{hostname}{host.BaseURL()}", LOGGER) +public sealed class ProviderSelfHosted(Host host, string hostname) : BaseProvider(LLMProviders.SELF_HOSTED, $"{hostname}{host.BaseURL()}", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); + + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ProviderSelfHosted).Namespace, nameof(ProviderSelfHosted)); #region Implementation of IProvider @@ -23,10 +26,10 @@ public sealed class ProviderSelfHosted(Host host, string hostname) : BaseProvide public override async IAsyncEnumerable StreamChatCompletion(Provider.Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this, isTrying: true); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER, isTrying: true); // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -34,26 +37,15 @@ public sealed class ProviderSelfHosted(Host host, string hostname) : BaseProvide // Parse the API parameters: var apiParameters = this.ParseAdditionalApiParameters(); - - // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message + + // Build the list of messages. The image format depends on the host: + // - Ollama uses the direct image URL format: { "type": "image_url", "image_url": "data:..." } + // - LM Studio, vLLM, and llama.cpp use the nested image URL format: { "type": "image_url", "image_url": { "url": "data:..." } } + var messages = host switch { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + Host.OLLAMA => await chatThread.Blocks.BuildMessagesUsingDirectImageUrlAsync(this.Provider, chatModel), + _ => await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel), + }; // Prepare the OpenAI HTTP chat request: var providerChatRequest = JsonSerializer.Serialize(new ChatRequest @@ -96,13 +88,20 @@ public sealed class ProviderSelfHosted(Host host, string hostname) : BaseProvide } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously + /// + public override async Task TranscribeAudioAsync(Provider.Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.TRANSCRIPTION_PROVIDER, isTrying: true); + return await this.PerformStandardTranscriptionRequest(requestedSecret, transcriptionModel, audioFilePath, host, token); + } + public override async Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) { try { switch (host) { - case Host.LLAMACPP: + case Host.LLAMA_CPP: // Right now, llama.cpp only supports one model. // There is no API to list the model(s). return [ new Provider.Model("as configured by llama.cpp", null) ]; @@ -110,7 +109,7 @@ public sealed class ProviderSelfHosted(Host host, string hostname) : BaseProvide case Host.LM_STUDIO: case Host.OLLAMA: case Host.VLLM: - return await this.LoadModels(["embed"], [], token, apiKeyProvisional); + return await this.LoadModels( SecretStoreType.LLM_PROVIDER, ["embed"], [], token, apiKeyProvisional); } return []; @@ -137,7 +136,7 @@ public sealed class ProviderSelfHosted(Host host, string hostname) : BaseProvide case Host.LM_STUDIO: case Host.OLLAMA: case Host.VLLM: - return await this.LoadModels([], ["embed"], token, apiKeyProvisional); + return await this.LoadModels( SecretStoreType.EMBEDDING_PROVIDER, [], ["embed"], token, apiKeyProvisional); } return []; @@ -149,14 +148,43 @@ public sealed class ProviderSelfHosted(Host host, string hostname) : BaseProvide } } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + try + { + switch (host) + { + case Host.WHISPER_CPP: + return Task.FromResult>( + new List + { + new("loaded-model", TB("Model as configured by whisper.cpp")), + }); + + case Host.OLLAMA: + case Host.VLLM: + return this.LoadModels(SecretStoreType.TRANSCRIPTION_PROVIDER, [], [], token, apiKeyProvisional); + + default: + return Task.FromResult(Enumerable.Empty()); + } + } + catch (Exception e) + { + LOGGER.LogError(e, "Failed to load transcription models from self-hosted provider."); + return Task.FromResult(Enumerable.Empty()); + } + } + #endregion - private async Task> LoadModels(string[] ignorePhrases, string[] filterPhrases, CancellationToken token, string? apiKeyProvisional = null) + private async Task> LoadModels(SecretStoreType storeType, string[] ignorePhrases, string[] filterPhrases, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this, isTrying: true) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType, isTrying: true) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Provider/SubContentConverter.cs b/app/MindWork AI Studio/Provider/SubContentConverter.cs new file mode 100644 index 00000000..cd257a3d --- /dev/null +++ b/app/MindWork AI Studio/Provider/SubContentConverter.cs @@ -0,0 +1,34 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +using AIStudio.Provider.OpenAI; + +namespace AIStudio.Provider; + +/// +/// Custom JSON converter for the ISubContent interface to handle polymorphic serialization. +/// +/// +/// This converter ensures that when serializing ISubContent objects, all properties +/// of the concrete implementation (e.g., SubContentText, SubContentImageUrl) are serialized, +/// not just the properties defined in the ISubContent interface. +/// +public sealed class SubContentConverter : JsonConverter +{ + private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); + + public override ISubContent? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + // Deserialization is not needed for request objects, as sub-content is only serialized + // when sending requests to LLM providers. + LOGGER.LogError("Deserializing ISubContent is not supported. This converter is only used for serializing request messages."); + return null; + } + + public override void Write(Utf8JsonWriter writer, ISubContent value, JsonSerializerOptions options) + { + // Serialize the actual concrete type (e.g., SubContentText, SubContentImageUrl) instead of just the ISubContent interface. + // This ensures all properties of the concrete type are included in the JSON output. + JsonSerializer.Serialize(writer, value, value.GetType(), options); + } +} diff --git a/app/MindWork AI Studio/Provider/SubContentImageUrlConverter.cs b/app/MindWork AI Studio/Provider/SubContentImageUrlConverter.cs new file mode 100644 index 00000000..d6df6878 --- /dev/null +++ b/app/MindWork AI Studio/Provider/SubContentImageUrlConverter.cs @@ -0,0 +1,34 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +using AIStudio.Provider.OpenAI; + +namespace AIStudio.Provider; + +/// +/// Custom JSON converter for the ISubContentImageUrl interface to handle polymorphic serialization. +/// +/// +/// This converter ensures that when serializing ISubContentImageUrl objects, all properties +/// of the concrete implementation (e.g., SubContentImageUrlData) are serialized, +/// not just the properties defined in the ISubContentImageUrl interface. +/// +public sealed class SubContentImageUrlConverter : JsonConverter +{ + private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); + + public override ISubContentImageUrl? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + // Deserialization is not needed for request objects, as sub-content image URLs are only serialized + // when sending requests to LLM providers. + LOGGER.LogError("Deserializing ISubContentImageUrl is not supported. This converter is only used for serializing request messages."); + return null; + } + + public override void Write(Utf8JsonWriter writer, ISubContentImageUrl value, JsonSerializerOptions options) + { + // Serialize the actual concrete type (e.g., SubContentImageUrlData) instead of just the ISubContentImageUrl interface. + // This ensures all properties of the concrete type are included in the JSON output. + JsonSerializer.Serialize(writer, value, value.GetType(), options); + } +} diff --git a/app/MindWork AI Studio/Provider/SubContentType.cs b/app/MindWork AI Studio/Provider/SubContentType.cs new file mode 100644 index 00000000..cca2d802 --- /dev/null +++ b/app/MindWork AI Studio/Provider/SubContentType.cs @@ -0,0 +1,39 @@ +namespace AIStudio.Provider; + +/// +/// Sub content types for OpenAI-compatible API interactions when using multimodal messages. +/// +public enum SubContentType +{ + /// + /// Default type for user prompts in multimodal messages. This type is supported across all providers. + /// + TEXT, + + /// + /// Right now only supported by OpenAI and it's responses API. Even other providers that support multimodal messages + /// and the responses API do not support this type. They use TEXT instead. + /// + INPUT_TEXT, + + /// + /// Right now only supported by OpenAI and it's responses API. Even other providers that support multimodal messages + /// and the responses API do not support this type. They use IMAGE_URL instead. + /// + INPUT_IMAGE, + + /// + /// Default type for images in multimodal messages. This type is supported across all providers. + /// + IMAGE_URL, + + /// + /// The image type is used exclusively by Anthropic's messages API. + /// + IMAGE, + + /// + /// Right now only supported by OpenAI (responses & chat completion API), Google (chat completions API), and Mistral (chat completions API). + /// + INPUT_AUDIO, +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Provider/TranscriptionResponse.cs b/app/MindWork AI Studio/Provider/TranscriptionResponse.cs new file mode 100644 index 00000000..7ba1f587 --- /dev/null +++ b/app/MindWork AI Studio/Provider/TranscriptionResponse.cs @@ -0,0 +1,3 @@ +namespace AIStudio.Provider; + +public sealed record TranscriptionResponse(string Text); diff --git a/app/MindWork AI Studio/Provider/X/ProviderX.cs b/app/MindWork AI Studio/Provider/X/ProviderX.cs index e8a0b2e7..82d92c2a 100644 --- a/app/MindWork AI Studio/Provider/X/ProviderX.cs +++ b/app/MindWork AI Studio/Provider/X/ProviderX.cs @@ -9,7 +9,7 @@ using AIStudio.Settings; namespace AIStudio.Provider.X; -public sealed class ProviderX() : BaseProvider("https://api.x.ai/v1/", LOGGER) +public sealed class ProviderX() : BaseProvider(LLMProviders.X, "https://api.x.ai/v1/", LOGGER) { private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); @@ -25,12 +25,12 @@ public sealed class ProviderX() : BaseProvider("https://api.x.ai/v1/", LOGGER) public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default) { // Get the API key: - var requestedSecret = await RUST_SERVICE.GetAPIKey(this); + var requestedSecret = await RUST_SERVICE.GetAPIKey(this, SecretStoreType.LLM_PROVIDER); if(!requestedSecret.Success) yield break; // Prepare the system prompt: - var systemPrompt = new Message + var systemPrompt = new TextMessage { Role = "system", Content = chatThread.PrepareSystemPrompt(settingsManager, chatThread), @@ -40,24 +40,7 @@ public sealed class ProviderX() : BaseProvider("https://api.x.ai/v1/", LOGGER) var apiParameters = this.ParseAdditionalApiParameters(); // Build the list of messages: - var messages = await chatThread.Blocks.BuildMessages(async n => new Message() - { - Role = n.Role switch - { - ChatRole.USER => "user", - ChatRole.AI => "assistant", - ChatRole.AGENT => "assistant", - ChatRole.SYSTEM => "system", - - _ => "user", - }, - - Content = n.Content switch - { - ContentText text => await text.PrepareContentForAI(), - _ => string.Empty, - } - }); + var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.Provider, chatModel); // Prepare the xAI HTTP chat request: var xChatRequest = JsonSerializer.Serialize(new ChatCompletionAPIRequest @@ -98,11 +81,17 @@ public sealed class ProviderX() : BaseProvider("https://api.x.ai/v1/", LOGGER) yield break; } #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously - + + /// + public override Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default) + { + return Task.FromResult(string.Empty); + } + /// public override async Task> GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default) { - var models = await this.LoadModels(["grok-"], token, apiKeyProvisional); + var models = await this.LoadModels(SecretStoreType.LLM_PROVIDER, ["grok-"], token, apiKeyProvisional); return models.Where(n => !n.Id.Contains("-image", StringComparison.OrdinalIgnoreCase)); } @@ -118,14 +107,20 @@ public sealed class ProviderX() : BaseProvider("https://api.x.ai/v1/", LOGGER) return Task.FromResult>([]); } + /// + public override Task> GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default) + { + return Task.FromResult(Enumerable.Empty()); + } + #endregion - private async Task> LoadModels(string[] prefixes, CancellationToken token, string? apiKeyProvisional = null) + private async Task> LoadModels(SecretStoreType storeType, string[] prefixes, CancellationToken token, string? apiKeyProvisional = null) { var secretKey = apiKeyProvisional switch { not null => apiKeyProvisional, - _ => await RUST_SERVICE.GetAPIKey(this) switch + _ => await RUST_SERVICE.GetAPIKey(this, storeType) switch { { Success: true } result => await result.Secret.Decrypt(ENCRYPTION), _ => null, diff --git a/app/MindWork AI Studio/Settings/ChatTemplate.cs b/app/MindWork AI Studio/Settings/ChatTemplate.cs index 38f3623d..5f3c597a 100644 --- a/app/MindWork AI Studio/Settings/ChatTemplate.cs +++ b/app/MindWork AI Studio/Settings/ChatTemplate.cs @@ -12,11 +12,12 @@ public record ChatTemplate( string SystemPrompt, string PredefinedUserPrompt, List ExampleConversation, + List FileAttachments, bool AllowProfileUsage, bool IsEnterpriseConfiguration = false, Guid EnterpriseConfigurationPluginId = default) : ConfigurationBaseObject { - public ChatTemplate() : this(0, Guid.Empty.ToString(), string.Empty, string.Empty, string.Empty, [], false) + public ChatTemplate() : this(0, Guid.Empty.ToString(), string.Empty, string.Empty, string.Empty, [], [], false) { } @@ -26,12 +27,13 @@ public record ChatTemplate( public static readonly ChatTemplate NO_CHAT_TEMPLATE = new() { - Name = TB("Use no chat template"), + Name = TB("Use no chat template"), // Cannot be localized due to being a static readonly field SystemPrompt = string.Empty, PredefinedUserPrompt = string.Empty, Id = Guid.Empty.ToString(), Num = uint.MaxValue, ExampleConversation = [], + FileAttachments = [], AllowProfileUsage = true, EnterpriseConfigurationPluginId = Guid.Empty, IsEnterpriseConfiguration = false, @@ -43,9 +45,26 @@ public record ChatTemplate( /// Returns a string that represents the profile in a human-readable format. ///
  • /// A string that represents the profile in a human-readable format. - public override string ToString() => this.Name; + public override string ToString() => this.GetSafeName(); #endregion + + /// + /// Gets the name of this chat template. If it is the NO_CHAT_TEMPLATE, it returns a localized string. + /// + /// + /// Why not using the Name property directly? Because the Name property of NO_CHAT_TEMPLATE cannot be + /// localized because it is a static readonly field. So we need this method to return a localized + /// string instead. + /// + /// The name of this chat template. + public string GetSafeName() + { + if(this == NO_CHAT_TEMPLATE) + return TB("Use no chat template"); + + return this.Name; + } public string ToSystemPrompt() { @@ -83,7 +102,9 @@ public record ChatTemplate( var allowProfileUsage = false; if (table.TryGetValue("AllowProfileUsage", out var allowProfileValue) && allowProfileValue.TryRead(out var allow)) allowProfileUsage = allow; - + + var fileAttachments = ParseFileAttachments(idx, table); + template = new ChatTemplate { Num = 0, @@ -92,6 +113,7 @@ public record ChatTemplate( SystemPrompt = systemPrompt, PredefinedUserPrompt = predefinedUserPrompt, ExampleConversation = ParseExampleConversation(idx, table), + FileAttachments = fileAttachments, AllowProfileUsage = allowProfileUsage, IsEnterpriseConfiguration = true, EnterpriseConfigurationPluginId = configPluginId, @@ -146,4 +168,26 @@ public record ChatTemplate( return exampleConversation; } + + private static List ParseFileAttachments(int idx, LuaTable table) + { + var fileAttachments = new List(); + if (!table.TryGetValue("FileAttachments", out var fileAttValue) || !fileAttValue.TryRead(out var fileAttTable)) + return fileAttachments; + + var numAttachments = fileAttTable.ArrayLength; + for (var attachmentNum = 1; attachmentNum <= numAttachments; attachmentNum++) + { + var attachmentValue = fileAttTable[attachmentNum]; + if (!attachmentValue.TryRead(out var filePath)) + { + LOGGER.LogWarning("The FileAttachments entry {AttachmentNum} in chat template {IdxChatTemplate} is not a valid string.", attachmentNum, idx); + continue; + } + + fileAttachments.Add(FileAttachment.FromPath(filePath)); + } + + return fileAttachments; + } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/ConfigurableAssistant.cs b/app/MindWork AI Studio/Settings/ConfigurableAssistant.cs new file mode 100644 index 00000000..f1076d9e --- /dev/null +++ b/app/MindWork AI Studio/Settings/ConfigurableAssistant.cs @@ -0,0 +1,30 @@ +namespace AIStudio.Settings; + +/// +/// Enum representing assistants that can be hidden via configuration plugin. +/// +public enum ConfigurableAssistant +{ + NONE = 0, + UNKNOWN = 1, + + GRAMMAR_SPELLING_ASSISTANT, + ICON_FINDER_ASSISTANT, + REWRITE_ASSISTANT, + TRANSLATION_ASSISTANT, + AGENDA_ASSISTANT, + CODING_ASSISTANT, + TEXT_SUMMARIZER_ASSISTANT, + EMAIL_ASSISTANT, + LEGAL_CHECK_ASSISTANT, + SYNONYMS_ASSISTANT, + MY_TASKS_ASSISTANT, + JOB_POSTING_ASSISTANT, + BIAS_DAY_ASSISTANT, + ERI_ASSISTANT, + DOCUMENT_ANALYSIS_ASSISTANT, + + // ReSharper disable InconsistentNaming + I18N_ASSISTANT, + // ReSharper restore InconsistentNaming +} diff --git a/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs b/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs index 5004dc43..3aa9342b 100644 --- a/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs +++ b/app/MindWork AI Studio/Settings/ConfigurationSelectDataFactory.cs @@ -203,11 +203,17 @@ public static class ConfigurationSelectDataFactory foreach (var profile in profiles.GetAllProfiles()) yield return new(profile.Name, profile.Id); } + + public static IEnumerable> GetTranscriptionProvidersData(IEnumerable transcriptionProviders) + { + foreach (var provider in transcriptionProviders) + yield return new(provider.Name, provider.Id); + } public static IEnumerable> GetChatTemplatesData(IEnumerable chatTemplates) { foreach (var chatTemplate in chatTemplates.GetAllChatTemplates()) - yield return new(chatTemplate.Name, chatTemplate.Id); + yield return new(chatTemplate.GetSafeName(), chatTemplate.Id); } public static IEnumerable> GetConfidenceSchemesData() diff --git a/app/MindWork AI Studio/Settings/DataModel/Data.cs b/app/MindWork AI Studio/Settings/DataModel/Data.cs index c07ab3d6..622d737e 100644 --- a/app/MindWork AI Studio/Settings/DataModel/Data.cs +++ b/app/MindWork AI Studio/Settings/DataModel/Data.cs @@ -25,6 +25,11 @@ public sealed class Data /// A collection of embedding providers configured. /// public List EmbeddingProviders { get; init; } = []; + + /// + /// A collection of speech providers configured. + /// + public List TranscriptionProviders { get; init; } = []; /// /// A collection of data sources configured. @@ -52,9 +57,14 @@ public sealed class Data public uint NextProviderNum { get; set; } = 1; /// - /// The next embedding number to use. + /// The next embedding provider number to use. /// public uint NextEmbeddingNum { get; set; } = 1; + + /// + /// The next transcription provider number to use. + /// + public uint NextTranscriptionNum { get; set; } = 1; /// /// The next data source number to use. diff --git a/app/MindWork AI Studio/Settings/DataModel/DataApp.cs b/app/MindWork AI Studio/Settings/DataModel/DataApp.cs index a6029cda..d2ac4bb7 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataApp.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataApp.cs @@ -77,8 +77,18 @@ public sealed class DataApp(Expression>? configSelection = n /// public string PreselectedChatTemplate { get; set; } = string.Empty; + /// + /// Which transcription provider should be used? + /// + public string UseTranscriptionProvider { get; set; } = ManagedConfiguration.Register(configSelection, n => n.UseTranscriptionProvider, string.Empty); + /// /// Should the user be allowed to add providers? /// public bool AllowUserToAddProvider { get; set; } = ManagedConfiguration.Register(configSelection, n => n.AllowUserToAddProvider, true); + + /// + /// List of assistants that should be hidden from the UI. + /// + public HashSet HiddenAssistants { get; set; } = ManagedConfiguration.Register(configSelection, n => n.HiddenAssistants, []); } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/DataModel/DataSourceERI_V1.cs b/app/MindWork AI Studio/Settings/DataModel/DataSourceERI_V1.cs index cc836bcf..cbc3839c 100644 --- a/app/MindWork AI Studio/Settings/DataModel/DataSourceERI_V1.cs +++ b/app/MindWork AI Studio/Settings/DataModel/DataSourceERI_V1.cs @@ -74,7 +74,9 @@ public readonly record struct DataSourceERI_V1 : IERIDataSource LatestUserPrompt = lastUserPrompt switch { ContentText text => text.Text, - ContentImage image => await image.AsBase64(token), + ContentImage image => await image.TryAsBase64(token) is (success: true, { } base64Image) + ? base64Image + : string.Empty, _ => string.Empty }, diff --git a/app/MindWork AI Studio/Settings/DataModel/PreviewFeatures.cs b/app/MindWork AI Studio/Settings/DataModel/PreviewFeatures.cs index 49aad8d0..e58ecdca 100644 --- a/app/MindWork AI Studio/Settings/DataModel/PreviewFeatures.cs +++ b/app/MindWork AI Studio/Settings/DataModel/PreviewFeatures.cs @@ -2,6 +2,8 @@ namespace AIStudio.Settings.DataModel; public enum PreviewFeatures { + NONE = 0, + // // Important: Never delete any enum value from this list. // We must be able to deserialize old settings files that may contain these values. @@ -12,4 +14,5 @@ public enum PreviewFeatures PRE_PLUGINS_2025, PRE_READ_PDF_2025, PRE_DOCUMENT_ANALYSIS_2025, + PRE_SPEECH_TO_TEXT_2026, } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/DataModel/PreviewFeaturesExtensions.cs b/app/MindWork AI Studio/Settings/DataModel/PreviewFeaturesExtensions.cs index e80495b2..00399f0b 100644 --- a/app/MindWork AI Studio/Settings/DataModel/PreviewFeaturesExtensions.cs +++ b/app/MindWork AI Studio/Settings/DataModel/PreviewFeaturesExtensions.cs @@ -14,6 +14,7 @@ public static class PreviewFeaturesExtensions PreviewFeatures.PRE_PLUGINS_2025 => TB("Plugins: Preview of our plugin system where you can extend the functionality of the app"), PreviewFeatures.PRE_READ_PDF_2025 => TB("Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files"), PreviewFeatures.PRE_DOCUMENT_ANALYSIS_2025 => TB("Document Analysis: Preview of our document analysis system where you can analyze and extract information from documents"), + PreviewFeatures.PRE_SPEECH_TO_TEXT_2026 => TB("Transcription: Preview of our speech to text system where you can transcribe recordings and audio files into text"), _ => TB("Unknown preview feature") }; diff --git a/app/MindWork AI Studio/Settings/DataModel/PreviewVisibilityExtensions.cs b/app/MindWork AI Studio/Settings/DataModel/PreviewVisibilityExtensions.cs index bd648b24..53612acc 100644 --- a/app/MindWork AI Studio/Settings/DataModel/PreviewVisibilityExtensions.cs +++ b/app/MindWork AI Studio/Settings/DataModel/PreviewVisibilityExtensions.cs @@ -21,6 +21,7 @@ public static class PreviewVisibilityExtensions { features.Add(PreviewFeatures.PRE_RAG_2024); features.Add(PreviewFeatures.PRE_DOCUMENT_ANALYSIS_2025); + features.Add(PreviewFeatures.PRE_SPEECH_TO_TEXT_2026); } if (visibility >= PreviewVisibility.EXPERIMENTAL) diff --git a/app/MindWork AI Studio/Settings/EmbeddingProvider.cs b/app/MindWork AI Studio/Settings/EmbeddingProvider.cs index 126a0be2..c5e48d4f 100644 --- a/app/MindWork AI Studio/Settings/EmbeddingProvider.cs +++ b/app/MindWork AI Studio/Settings/EmbeddingProvider.cs @@ -1,32 +1,134 @@ using System.Text.Json.Serialization; using AIStudio.Provider; +using AIStudio.Tools.PluginSystem; + +using Lua; using Host = AIStudio.Provider.SelfHosted.Host; namespace AIStudio.Settings; -public readonly record struct EmbeddingProvider( +public sealed record EmbeddingProvider( uint Num, string Id, string Name, LLMProviders UsedLLMProvider, Model Model, bool IsSelfHosted = false, + bool IsEnterpriseConfiguration = false, + Guid EnterpriseConfigurationPluginId = default, string Hostname = "http://localhost:1234", - Host Host = Host.NONE) : ISecretId + Host Host = Host.NONE) : ConfigurationBaseObject, ISecretId { + private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); + + public static readonly EmbeddingProvider NONE = new(); + + public EmbeddingProvider() : this( + 0, + Guid.Empty.ToString(), + string.Empty, + LLMProviders.NONE, + default, + false, + false, + Guid.Empty) + { + } + public override string ToString() => this.Name; - + #region Implementation of ISecretId - + /// [JsonIgnore] public string SecretId => this.Id; - + /// [JsonIgnore] public string SecretName => this.Name; - + #endregion + + public static bool TryParseEmbeddingProviderTable(int idx, LuaTable table, Guid configPluginId, out ConfigurationBaseObject provider) + { + provider = NONE; + if (!table.TryGetValue("Id", out var idValue) || !idValue.TryRead(out var idText) || !Guid.TryParse(idText, out var id)) + { + LOGGER.LogWarning($"The configured embedding provider {idx} does not contain a valid ID. The ID must be a valid GUID."); + return false; + } + + if (!table.TryGetValue("Name", out var nameValue) || !nameValue.TryRead(out var name)) + { + LOGGER.LogWarning($"The configured embedding provider {idx} does not contain a valid name."); + return false; + } + + if (!table.TryGetValue("UsedLLMProvider", out var usedLLMProviderValue) || !usedLLMProviderValue.TryRead(out var usedLLMProviderText) || !Enum.TryParse(usedLLMProviderText, true, out var usedLLMProvider)) + { + LOGGER.LogWarning($"The configured embedding provider {idx} does not contain a valid LLM provider enum value."); + return false; + } + + if (!table.TryGetValue("Host", out var hostValue) || !hostValue.TryRead(out var hostText) || !Enum.TryParse(hostText, true, out var host)) + { + LOGGER.LogWarning($"The configured embedding provider {idx} does not contain a valid host enum value."); + return false; + } + + if (!table.TryGetValue("Hostname", out var hostnameValue) || !hostnameValue.TryRead(out var hostname)) + { + LOGGER.LogWarning($"The configured embedding provider {idx} does not contain a valid hostname."); + return false; + } + + if (!table.TryGetValue("Model", out var modelValue) || !modelValue.TryRead(out var modelTable)) + { + LOGGER.LogWarning($"The configured embedding provider {idx} does not contain a valid model table."); + return false; + } + + if (!TryReadModelTable(idx, modelTable, out var model)) + { + LOGGER.LogWarning($"The configured embedding provider {idx} does not contain a valid model configuration."); + return false; + } + + provider = new EmbeddingProvider + { + Num = 0, + Id = id.ToString(), + Name = name, + UsedLLMProvider = usedLLMProvider, + Model = model, + IsSelfHosted = usedLLMProvider is LLMProviders.SELF_HOSTED, + IsEnterpriseConfiguration = true, + EnterpriseConfigurationPluginId = configPluginId, + Hostname = hostname, + Host = host, + }; + + return true; + } + + private static bool TryReadModelTable(int idx, LuaTable table, out Model model) + { + model = default; + if (!table.TryGetValue("Id", out var idValue) || !idValue.TryRead(out var id)) + { + LOGGER.LogWarning($"The configured embedding provider {idx} does not contain a valid model ID."); + return false; + } + + if (!table.TryGetValue("DisplayName", out var displayNameValue) || !displayNameValue.TryRead(out var displayName)) + { + LOGGER.LogWarning($"The configured embedding provider {idx} does not contain a valid model display name."); + return false; + } + + model = new(id, displayName); + return true; + } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/Profile.cs b/app/MindWork AI Studio/Settings/Profile.cs index 2e9dc80a..8b9d8080 100644 --- a/app/MindWork AI Studio/Settings/Profile.cs +++ b/app/MindWork AI Studio/Settings/Profile.cs @@ -22,7 +22,7 @@ public record Profile( public static readonly Profile NO_PROFILE = new() { - Name = TB("Use no profile"), + Name = TB("Use no profile"), // Cannot be localized due to being a static readonly field NeedToKnow = string.Empty, Actions = string.Empty, Id = Guid.Empty.ToString(), @@ -39,6 +39,23 @@ public record Profile( #endregion + /// + /// Gets the name of this profile. If it is the NO_PROFILE, it returns a localized string. + /// + /// + /// Why not using the Name property directly? Because the Name property of NO_PROFILE cannot be + /// localized because it is a static readonly field. So we need this method to return a localized + /// string instead. + /// + /// The name of this profile. + public string GetSafeName() + { + if(this == NO_PROFILE) + return TB("Use no profile"); + + return this.Name; + } + public string ToSystemPrompt() { if(this.Num == uint.MaxValue) diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.Alibaba.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.Alibaba.cs index c7e1a20e..c57aeeed 100644 --- a/app/MindWork AI Studio/Settings/ProviderExtensions.Alibaba.cs +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.Alibaba.cs @@ -4,7 +4,7 @@ namespace AIStudio.Settings; public static partial class ProviderExtensions { - public static List GetModelCapabilitiesAlibaba(Model model) + private static List GetModelCapabilitiesAlibaba(Model model) { var modelName = model.Id.ToLowerInvariant().AsSpan(); diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.Anthropic.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.Anthropic.cs index 3bf2f0b5..64bc8753 100644 --- a/app/MindWork AI Studio/Settings/ProviderExtensions.Anthropic.cs +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.Anthropic.cs @@ -4,7 +4,7 @@ namespace AIStudio.Settings; public static partial class ProviderExtensions { - public static List GetModelCapabilitiesAnthropic(Model model) + private static List GetModelCapabilitiesAnthropic(Model model) { var modelName = model.Id.ToLowerInvariant().AsSpan(); diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.DeepSeek.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.DeepSeek.cs index 0d3428e9..9089596b 100644 --- a/app/MindWork AI Studio/Settings/ProviderExtensions.DeepSeek.cs +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.DeepSeek.cs @@ -4,7 +4,7 @@ namespace AIStudio.Settings; public static partial class ProviderExtensions { - public static List GetModelCapabilitiesDeepSeek(Model model) + private static List GetModelCapabilitiesDeepSeek(Model model) { var modelName = model.Id.ToLowerInvariant().AsSpan(); diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.Google.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.Google.cs index 379370c1..1931bc8f 100644 --- a/app/MindWork AI Studio/Settings/ProviderExtensions.Google.cs +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.Google.cs @@ -4,7 +4,7 @@ namespace AIStudio.Settings; public static partial class ProviderExtensions { - public static List GetModelCapabilitiesGoogle(Model model) + private static List GetModelCapabilitiesGoogle(Model model) { var modelName = model.Id.ToLowerInvariant().AsSpan(); diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.Mistral.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.Mistral.cs index 545dada8..3d0150c9 100644 --- a/app/MindWork AI Studio/Settings/ProviderExtensions.Mistral.cs +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.Mistral.cs @@ -4,7 +4,7 @@ namespace AIStudio.Settings; public static partial class ProviderExtensions { - public static List GetModelCapabilitiesMistral(Model model) + private static List GetModelCapabilitiesMistral(Model model) { var modelName = model.Id.ToLowerInvariant().AsSpan(); diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.OpenAI.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.OpenAI.cs index ed17e399..a65c1534 100644 --- a/app/MindWork AI Studio/Settings/ProviderExtensions.OpenAI.cs +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.OpenAI.cs @@ -4,7 +4,7 @@ namespace AIStudio.Settings; public static partial class ProviderExtensions { - public static List GetModelCapabilitiesOpenAI(Model model) + private static List GetModelCapabilitiesOpenAI(Model model) { var modelName = model.Id.ToLowerInvariant().AsSpan(); @@ -143,6 +143,17 @@ public static partial class ProviderExtensions Capability.RESPONSES_API, Capability.CHAT_COMPLETION_API, ]; + if(modelName is "gpt-5.2" || modelName.StartsWith("gpt-5.2-")) + return + [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, Capability.IMAGE_OUTPUT, + + Capability.FUNCTION_CALLING, Capability.OPTIONAL_REASONING, + Capability.WEB_SEARCH, + Capability.RESPONSES_API, Capability.CHAT_COMPLETION_API, + ]; + return [ Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.OpenRouter.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.OpenRouter.cs new file mode 100644 index 00000000..7677cca8 --- /dev/null +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.OpenRouter.cs @@ -0,0 +1,249 @@ +using AIStudio.Provider; + +namespace AIStudio.Settings; + +public static partial class ProviderExtensions +{ + private static List GetModelCapabilitiesOpenRouter(Model model) + { + var modelName = model.Id.ToLowerInvariant().AsSpan(); + + // + // OpenRouter model IDs follow the pattern: "provider/model-name" + // Examples: + // - openai/gpt-4o + // - anthropic/claude-3-5-sonnet + // - google/gemini-pro-1.5 + // - meta-llama/llama-3.1-405b-instruct + // + // We need to detect capabilities based on both provider and model name. + // + + // + // OpenAI models via OpenRouter: + // + if (modelName.IndexOf("openai/") is not -1) + { + // Reasoning models (o1, o3, o4 series) + if (modelName.IndexOf("/o1") is not -1 || + modelName.IndexOf("/o3") is not -1 || + modelName.IndexOf("/o4") is not -1) + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.ALWAYS_REASONING, + Capability.CHAT_COMPLETION_API, + ]; + + // GPT-4o and GPT-5 series with multimodal + if (modelName.IndexOf("/gpt-4o") is not -1 || + modelName.IndexOf("/gpt-5") is not -1 || + modelName.IndexOf("/chatgpt-4o") is not -1) + return [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + + // Standard GPT-4 + if (modelName.IndexOf("/gpt-4") is not -1) + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + + // GPT-3.5 + if (modelName.IndexOf("/gpt-3.5") is not -1 || + modelName.IndexOf("/gpt-3") is not -1) + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.CHAT_COMPLETION_API, + ]; + } + + // + // Anthropic models via OpenRouter: + // + if (modelName.IndexOf("anthropic/") is not -1) + { + // Claude 3.5 and newer with vision + if (modelName.IndexOf("/claude-3.5") is not -1 || + modelName.IndexOf("/claude-3-5") is not -1) + return [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + + // Claude 3 Opus/Sonnet with vision + if (modelName.IndexOf("/claude-3-opus") is not -1 || + modelName.IndexOf("/claude-3-sonnet") is not -1) + return [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + + // Other Claude 3 models + if (modelName.IndexOf("/claude-3") is not -1) + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.CHAT_COMPLETION_API, + ]; + } + + // + // Google models via OpenRouter: + // + if (modelName.IndexOf("google/") is not -1) + { + // Gemini models with multimodal + if (modelName.IndexOf("/gemini") is not -1) + return [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + } + + // + // xAI Grok models via OpenRouter: + // + if (modelName.IndexOf("x-ai/") is not -1 || modelName.IndexOf("/grok") is not -1) + { + if (modelName.IndexOf("-vision") is not -1) + return [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, + Capability.CHAT_COMPLETION_API, + ]; + + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + } + + // + // DeepSeek models via OpenRouter: + // + if (modelName.IndexOf("/deepseek") is not -1) + { + if (modelName.IndexOf("-r1") is not -1 || modelName.IndexOf(" r1") is not -1) + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.ALWAYS_REASONING, + Capability.CHAT_COMPLETION_API, + ]; + + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.CHAT_COMPLETION_API, + ]; + } + + // + // Mistral models via OpenRouter: + // + if (modelName.IndexOf("/mistral") is not -1 || modelName.IndexOf("/pixtral") is not -1) + { + if (modelName.IndexOf("/pixtral") is not -1) + return [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + } + + // + // Meta Llama models via OpenRouter: + // + if (modelName.IndexOf("/llama") is not -1) + { + // Llama 4 with vision + if (modelName.IndexOf("/llama-4") is not -1 || + modelName.IndexOf("/llama4") is not -1) + return [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + + // Vision models + if (modelName.IndexOf("-vision") is not -1) + return [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, + Capability.CHAT_COMPLETION_API, + ]; + + // Llama 3.1+ with function calling + if (modelName.IndexOf("/llama-3.") is not -1 || + modelName.IndexOf("/llama3.") is not -1) + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + + // Default Llama + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.CHAT_COMPLETION_API, + ]; + } + + // + // Qwen models via OpenRouter: + // + if (modelName.IndexOf("/qwen") is not -1 || modelName.IndexOf("/qwq") is not -1) + { + if (modelName.IndexOf("/qwq") is not -1) + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.ALWAYS_REASONING, + Capability.CHAT_COMPLETION_API, + ]; + + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.CHAT_COMPLETION_API, + ]; + } + + // + // Default for unknown models: + // Assume basic text input/output with chat completion + // + return [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + Capability.CHAT_COMPLETION_API, + ]; + } +} diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.OpenSource.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.OpenSource.cs index afd47cfd..fefa87dc 100644 --- a/app/MindWork AI Studio/Settings/ProviderExtensions.OpenSource.cs +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.OpenSource.cs @@ -4,7 +4,7 @@ namespace AIStudio.Settings; public static partial class ProviderExtensions { - public static List GetModelCapabilitiesOpenSource(Model model) + private static List GetModelCapabilitiesOpenSource(Model model) { var modelName = model.Id.ToLowerInvariant().AsSpan(); @@ -102,6 +102,15 @@ public static partial class ProviderExtensions Capability.CHAT_COMPLETION_API, ]; + if(modelName.IndexOf("-vl-") is not -1) + return [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, + + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + return [ Capability.TEXT_INPUT, Capability.TEXT_OUTPUT, Capability.CHAT_COMPLETION_API, @@ -159,7 +168,8 @@ public static partial class ProviderExtensions Capability.CHAT_COMPLETION_API, ]; - if (modelName.IndexOf("3.1") is not -1) + if (modelName.IndexOf("3.1") is not -1 || + modelName.IndexOf("3.2") is not -1) return [ Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, @@ -241,6 +251,43 @@ public static partial class ProviderExtensions ]; } + // + // Z AI / GLM models: + // + if (modelName.IndexOf("glm") is not -1) + { + if(modelName.IndexOf("v") is not -1) + return + [ + Capability.TEXT_INPUT, Capability.MULTIPLE_IMAGE_INPUT, + Capability.TEXT_OUTPUT, + + Capability.OPTIONAL_REASONING, + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + + if (modelName.IndexOf("glm-4-") is not -1) + return + [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + + Capability.FUNCTION_CALLING, + Capability.CHAT_COMPLETION_API, + ]; + + return + [ + Capability.TEXT_INPUT, + Capability.TEXT_OUTPUT, + + Capability.FUNCTION_CALLING, + Capability.OPTIONAL_REASONING, + Capability.CHAT_COMPLETION_API, + ]; + } + // Default: return [ Capability.TEXT_INPUT, Capability.TEXT_OUTPUT, diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.Perplexity.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.Perplexity.cs index da873009..d73ba8c5 100644 --- a/app/MindWork AI Studio/Settings/ProviderExtensions.Perplexity.cs +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.Perplexity.cs @@ -4,7 +4,7 @@ namespace AIStudio.Settings; public static partial class ProviderExtensions { - public static List GetModelCapabilitiesPerplexity(Model model) + private static List GetModelCapabilitiesPerplexity(Model model) { var modelName = model.Id.ToLowerInvariant().AsSpan(); diff --git a/app/MindWork AI Studio/Settings/ProviderExtensions.cs b/app/MindWork AI Studio/Settings/ProviderExtensions.cs index 002295c3..8ce0ab2a 100644 --- a/app/MindWork AI Studio/Settings/ProviderExtensions.cs +++ b/app/MindWork AI Studio/Settings/ProviderExtensions.cs @@ -4,25 +4,39 @@ namespace AIStudio.Settings; public static partial class ProviderExtensions { - public static List GetModelCapabilities(this Provider provider) => provider.UsedLLMProvider switch + /// + /// Get the capabilities of the model used by the configured provider. + /// + /// The configured provider. + /// The capabilities of the configured model. + public static List GetModelCapabilities(this Provider provider) => provider.UsedLLMProvider.GetModelCapabilities(provider.Model); + + /// + /// Get the capabilities of a model for a specific provider. + /// + /// The LLM provider. + /// The model to get the capabilities for. + /// >The capabilities of the model. + public static List GetModelCapabilities(this LLMProviders provider, Model model) => provider switch { - LLMProviders.OPEN_AI => GetModelCapabilitiesOpenAI(provider.Model), - LLMProviders.MISTRAL => GetModelCapabilitiesMistral(provider.Model), - LLMProviders.ANTHROPIC => GetModelCapabilitiesAnthropic(provider.Model), - LLMProviders.GOOGLE => GetModelCapabilitiesGoogle(provider.Model), - LLMProviders.X => GetModelCapabilitiesOpenSource(provider.Model), - LLMProviders.DEEP_SEEK => GetModelCapabilitiesDeepSeek(provider.Model), - LLMProviders.ALIBABA_CLOUD => GetModelCapabilitiesAlibaba(provider.Model), - LLMProviders.PERPLEXITY => GetModelCapabilitiesPerplexity(provider.Model), - - LLMProviders.GROQ => GetModelCapabilitiesOpenSource(provider.Model), - LLMProviders.FIREWORKS => GetModelCapabilitiesOpenSource(provider.Model), - LLMProviders.HUGGINGFACE => GetModelCapabilitiesOpenSource(provider.Model), + LLMProviders.OPEN_AI => GetModelCapabilitiesOpenAI(model), + LLMProviders.MISTRAL => GetModelCapabilitiesMistral(model), + LLMProviders.ANTHROPIC => GetModelCapabilitiesAnthropic(model), + LLMProviders.GOOGLE => GetModelCapabilitiesGoogle(model), + LLMProviders.X => GetModelCapabilitiesOpenSource(model), + LLMProviders.DEEP_SEEK => GetModelCapabilitiesDeepSeek(model), + LLMProviders.ALIBABA_CLOUD => GetModelCapabilitiesAlibaba(model), + LLMProviders.PERPLEXITY => GetModelCapabilitiesPerplexity(model), + LLMProviders.OPEN_ROUTER => GetModelCapabilitiesOpenRouter(model), + + LLMProviders.GROQ => GetModelCapabilitiesOpenSource(model), + LLMProviders.FIREWORKS => GetModelCapabilitiesOpenSource(model), + LLMProviders.HUGGINGFACE => GetModelCapabilitiesOpenSource(model), - LLMProviders.HELMHOLTZ => GetModelCapabilitiesOpenSource(provider.Model), - LLMProviders.GWDG => GetModelCapabilitiesOpenSource(provider.Model), + LLMProviders.HELMHOLTZ => GetModelCapabilitiesOpenSource(model), + LLMProviders.GWDG => GetModelCapabilitiesOpenSource(model), - LLMProviders.SELF_HOSTED => GetModelCapabilitiesOpenSource(provider.Model), + LLMProviders.SELF_HOSTED => GetModelCapabilitiesOpenSource(model), _ => [] }; diff --git a/app/MindWork AI Studio/Settings/SettingsManager.cs b/app/MindWork AI Studio/Settings/SettingsManager.cs index 04bce7b3..3b4ea704 100644 --- a/app/MindWork AI Studio/Settings/SettingsManager.cs +++ b/app/MindWork AI Studio/Settings/SettingsManager.cs @@ -263,7 +263,7 @@ public sealed class SettingsManager if (preselection != Profile.NO_PROFILE) return preselection; - preselection = this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id.Equals(this.ConfigurationData.App.PreselectedProfile, StringComparison.InvariantCultureIgnoreCase)); + preselection = this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id.Equals(this.ConfigurationData.App.PreselectedProfile, StringComparison.OrdinalIgnoreCase)); return preselection ?? Profile.NO_PROFILE; } @@ -273,7 +273,7 @@ public sealed class SettingsManager if (preselection != ChatTemplate.NO_CHAT_TEMPLATE) return preselection; - preselection = this.ConfigurationData.ChatTemplates.FirstOrDefault(x => x.Id.Equals(this.ConfigurationData.App.PreselectedChatTemplate, StringComparison.InvariantCultureIgnoreCase)); + preselection = this.ConfigurationData.ChatTemplates.FirstOrDefault(x => x.Id.Equals(this.ConfigurationData.App.PreselectedChatTemplate, StringComparison.OrdinalIgnoreCase)); return preselection ?? ChatTemplate.NO_CHAT_TEMPLATE; } diff --git a/app/MindWork AI Studio/Settings/TranscriptionProvider.cs b/app/MindWork AI Studio/Settings/TranscriptionProvider.cs new file mode 100644 index 00000000..02b20792 --- /dev/null +++ b/app/MindWork AI Studio/Settings/TranscriptionProvider.cs @@ -0,0 +1,134 @@ +using System.Text.Json.Serialization; + +using AIStudio.Provider; +using AIStudio.Tools.PluginSystem; + +using Lua; + +using Host = AIStudio.Provider.SelfHosted.Host; + +namespace AIStudio.Settings; + +public sealed record TranscriptionProvider( + uint Num, + string Id, + string Name, + LLMProviders UsedLLMProvider, + Model Model, + bool IsSelfHosted = false, + bool IsEnterpriseConfiguration = false, + Guid EnterpriseConfigurationPluginId = default, + string Hostname = "http://localhost:1234", + Host Host = Host.NONE) : ConfigurationBaseObject, ISecretId +{ + private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); + + public static readonly TranscriptionProvider NONE = new(); + + public TranscriptionProvider() : this( + 0, + Guid.Empty.ToString(), + string.Empty, + LLMProviders.NONE, + default, + false, + false, + Guid.Empty) + { + } + + public override string ToString() => this.Name; + + #region Implementation of ISecretId + + /// + [JsonIgnore] + public string SecretId => this.Id; + + /// + [JsonIgnore] + public string SecretName => this.Name; + + #endregion + + public static bool TryParseTranscriptionProviderTable(int idx, LuaTable table, Guid configPluginId, out ConfigurationBaseObject provider) + { + provider = NONE; + if (!table.TryGetValue("Id", out var idValue) || !idValue.TryRead(out var idText) || !Guid.TryParse(idText, out var id)) + { + LOGGER.LogWarning($"The configured transcription provider {idx} does not contain a valid ID. The ID must be a valid GUID."); + return false; + } + + if (!table.TryGetValue("Name", out var nameValue) || !nameValue.TryRead(out var name)) + { + LOGGER.LogWarning($"The configured transcription provider {idx} does not contain a valid name."); + return false; + } + + if (!table.TryGetValue("UsedLLMProvider", out var usedLLMProviderValue) || !usedLLMProviderValue.TryRead(out var usedLLMProviderText) || !Enum.TryParse(usedLLMProviderText, true, out var usedLLMProvider)) + { + LOGGER.LogWarning($"The configured transcription provider {idx} does not contain a valid LLM provider enum value."); + return false; + } + + if (!table.TryGetValue("Host", out var hostValue) || !hostValue.TryRead(out var hostText) || !Enum.TryParse(hostText, true, out var host)) + { + LOGGER.LogWarning($"The configured transcription provider {idx} does not contain a valid host enum value."); + return false; + } + + if (!table.TryGetValue("Hostname", out var hostnameValue) || !hostnameValue.TryRead(out var hostname)) + { + LOGGER.LogWarning($"The configured transcription provider {idx} does not contain a valid hostname."); + return false; + } + + if (!table.TryGetValue("Model", out var modelValue) || !modelValue.TryRead(out var modelTable)) + { + LOGGER.LogWarning($"The configured transcription provider {idx} does not contain a valid model table."); + return false; + } + + if (!TryReadModelTable(idx, modelTable, out var model)) + { + LOGGER.LogWarning($"The configured transcription provider {idx} does not contain a valid model configuration."); + return false; + } + + provider = new TranscriptionProvider + { + Num = 0, + Id = id.ToString(), + Name = name, + UsedLLMProvider = usedLLMProvider, + Model = model, + IsSelfHosted = usedLLMProvider is LLMProviders.SELF_HOSTED, + IsEnterpriseConfiguration = true, + EnterpriseConfigurationPluginId = configPluginId, + Hostname = hostname, + Host = host, + }; + + return true; + } + + private static bool TryReadModelTable(int idx, LuaTable table, out Model model) + { + model = default; + if (!table.TryGetValue("Id", out var idValue) || !idValue.TryRead(out var id)) + { + LOGGER.LogWarning($"The configured transcription provider {idx} does not contain a valid model ID."); + return false; + } + + if (!table.TryGetValue("DisplayName", out var displayNameValue) || !displayNameValue.TryRead(out var displayName)) + { + LOGGER.LogWarning($"The configured transcription provider {idx} does not contain a valid model display name."); + return false; + } + + model = new(id, displayName); + return true; + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/AssistantVisibilityExtensions.cs b/app/MindWork AI Studio/Tools/AssistantVisibilityExtensions.cs new file mode 100644 index 00000000..cb4e7fdc --- /dev/null +++ b/app/MindWork AI Studio/Tools/AssistantVisibilityExtensions.cs @@ -0,0 +1,100 @@ +using AIStudio.Settings; +using AIStudio.Settings.DataModel; + +namespace AIStudio.Tools; + +/// +/// Extension methods for checking assistant visibility based on configuration and preview features. +/// +public static class AssistantVisibilityExtensions +{ + private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(nameof(AssistantVisibilityExtensions)); + + /// + /// Checks if an assistant should be visible based on configuration and optional preview feature requirements. + /// + /// The settings manager to check configuration against. + /// Whether to log visibility decisions. + /// The name of the assistant to check (for logging purposes). + /// The assistant component to check. + /// Optional preview feature that must be enabled for the assistant to be visible. + /// True if the assistant should be visible, false otherwise. + public static bool IsAssistantVisible(this SettingsManager settingsManager, Components component, bool withLogging = true, string assistantName = "", PreviewFeatures requiredPreviewFeature = PreviewFeatures.NONE) + { + withLogging = withLogging && !string.IsNullOrWhiteSpace(assistantName); + + // Check if a preview feature is required and enabled: + if (requiredPreviewFeature != PreviewFeatures.NONE && !requiredPreviewFeature.IsEnabled(settingsManager)) + { + if(withLogging) + LOGGER.LogInformation("Assistant '{AssistantName}' is not visible because the required preview feature '{PreviewFeature}' is not enabled.", assistantName, requiredPreviewFeature); + + return false; + } + + // If no component is specified, it's always visible: + if (component is Components.NONE) + { + if(withLogging) + LOGGER.LogWarning("Assistant '{AssistantName}' is visible because no component is specified.", assistantName); + + return true; + } + + // Map Components enum to ConfigurableAssistant enum: + var configurableAssistant = component switch + { + Components.GRAMMAR_SPELLING_ASSISTANT => ConfigurableAssistant.GRAMMAR_SPELLING_ASSISTANT, + Components.ICON_FINDER_ASSISTANT => ConfigurableAssistant.ICON_FINDER_ASSISTANT, + Components.REWRITE_ASSISTANT => ConfigurableAssistant.REWRITE_ASSISTANT, + Components.TRANSLATION_ASSISTANT => ConfigurableAssistant.TRANSLATION_ASSISTANT, + Components.AGENDA_ASSISTANT => ConfigurableAssistant.AGENDA_ASSISTANT, + Components.CODING_ASSISTANT => ConfigurableAssistant.CODING_ASSISTANT, + Components.TEXT_SUMMARIZER_ASSISTANT => ConfigurableAssistant.TEXT_SUMMARIZER_ASSISTANT, + Components.EMAIL_ASSISTANT => ConfigurableAssistant.EMAIL_ASSISTANT, + Components.LEGAL_CHECK_ASSISTANT => ConfigurableAssistant.LEGAL_CHECK_ASSISTANT, + Components.SYNONYMS_ASSISTANT => ConfigurableAssistant.SYNONYMS_ASSISTANT, + Components.MY_TASKS_ASSISTANT => ConfigurableAssistant.MY_TASKS_ASSISTANT, + Components.JOB_POSTING_ASSISTANT => ConfigurableAssistant.JOB_POSTING_ASSISTANT, + Components.BIAS_DAY_ASSISTANT => ConfigurableAssistant.BIAS_DAY_ASSISTANT, + Components.ERI_ASSISTANT => ConfigurableAssistant.ERI_ASSISTANT, + Components.DOCUMENT_ANALYSIS_ASSISTANT => ConfigurableAssistant.DOCUMENT_ANALYSIS_ASSISTANT, + Components.I18N_ASSISTANT => ConfigurableAssistant.I18N_ASSISTANT, + + _ => ConfigurableAssistant.UNKNOWN, + }; + + // If the component doesn't map to a configurable assistant, it's always visible: + if (configurableAssistant is ConfigurableAssistant.UNKNOWN) + { + if(withLogging) + LOGGER.LogWarning("Assistant '{AssistantName}' is visible because its component '{Component}' does not map to a configurable assistant.", assistantName, component); + + return true; + } + + // Check if the assistant is hidden by any configuration plugin: + var isHidden = settingsManager.ConfigurationData.App.HiddenAssistants.Contains(configurableAssistant); + if (isHidden && withLogging) + LOGGER.LogInformation("Assistant '{AssistantName}' is hidden based on the configuration.", assistantName); + + return !isHidden; + } + + /// + /// Checks if any assistant in a category should be visible. + /// + /// The settings manager to check configuration against. + /// The name of the assistant category (for logging purposes). + /// The assistants in the category with their optional preview feature requirements. + /// True if at least one assistant in the category should be visible, false otherwise. + public static bool IsAnyCategoryAssistantVisible(this SettingsManager settingsManager, string categoryName, params (Components Component, PreviewFeatures RequiredPreviewFeature)[] assistants) + { + foreach (var (component, requiredPreviewFeature) in assistants) + if (settingsManager.IsAssistantVisible(component, withLogging: false, requiredPreviewFeature: requiredPreviewFeature)) + return true; + + LOGGER.LogInformation("No assistants in category '{CategoryName}' are visible.", categoryName); + return false; + } +} diff --git a/app/MindWork AI Studio/Tools/DropLayers.cs b/app/MindWork AI Studio/Tools/DropLayers.cs new file mode 100644 index 00000000..8f1a370b --- /dev/null +++ b/app/MindWork AI Studio/Tools/DropLayers.cs @@ -0,0 +1,11 @@ +namespace AIStudio.Tools; + +public static class DropLayers +{ + public const int ROOT = 0; + + public const int PAGES = 10; + public const int ASSISTANTS = 20; + + public const int DIALOGS = 100; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/Event.cs b/app/MindWork AI Studio/Tools/Event.cs index 9f612f04..0590c5c7 100644 --- a/app/MindWork AI Studio/Tools/Event.cs +++ b/app/MindWork AI Studio/Tools/Event.cs @@ -34,6 +34,10 @@ public enum Event // RAG events: RAG_AUTO_DATA_SOURCES_SELECTED, + // File attachment events: + REGISTER_FILE_DROP_AREA, + UNREGISTER_FILE_DROP_AREA, + // Send events: SEND_TO_GRAMMAR_SPELLING_ASSISTANT, SEND_TO_ICON_FINDER_ASSISTANT, diff --git a/app/MindWork AI Studio/Tools/ImageHelpers.cs b/app/MindWork AI Studio/Tools/ImageHelpers.cs new file mode 100644 index 00000000..21227a4b --- /dev/null +++ b/app/MindWork AI Studio/Tools/ImageHelpers.cs @@ -0,0 +1,62 @@ +namespace AIStudio.Tools; + +/// +/// Helper methods for image handling, particularly for Base64 images. +/// +public static class ImageHelpers +{ + /// + /// Detects the MIME type of an image from its Base64-encoded header. + /// + /// The Base64-encoded image string. + /// The detected MIME type (e.g., "image/png", "image/jpeg"). + public static string DetectMimeType(ReadOnlySpan base64ImageString) + { + if (base64ImageString.IsWhiteSpace() || base64ImageString.Length < 10) + return "image"; // Fallback + + var header = base64ImageString[..Math.Min(20, base64ImageString.Length)]; + + // + // See https://en.wikipedia.org/wiki/List_of_file_signatures + // + + // PNG: iVBORw0KGgo + if (header.StartsWith("iVBORw0KGgo", StringComparison.Ordinal)) + return "image/png"; + + // JPEG: /9j/ + if (header.StartsWith("/9j/", StringComparison.Ordinal)) + return "image/jpeg"; + + // GIF: R0lGOD + if (header.StartsWith("R0lGOD", StringComparison.Ordinal)) + return "image/gif"; + + // WebP: UklGR + if (header.StartsWith("UklGR", StringComparison.Ordinal)) + return "image/webp"; + + // BMP: Qk + if (header.StartsWith("Qk", StringComparison.Ordinal)) + return "image/bmp"; + + // Default fallback: + return "image"; + } + + /// + /// Converts a Base64 string to a data URL suitable for use in HTML img src attributes. + /// + /// The Base64-encoded image string. + /// Optional MIME type. If not provided, it will be auto-detected. + /// A data URL in the format "data:image/type;base64,..." + public static string ToDataUrl(string base64String, string? mimeType = null) + { + if (string.IsNullOrEmpty(base64String)) + return string.Empty; + + var detectedMimeType = mimeType ?? DetectMimeType(base64String); + return $"data:{detectedMimeType};base64,{base64String}"; + } +} diff --git a/app/MindWork AI Studio/Tools/MIME/ApplicationBuilder.cs b/app/MindWork AI Studio/Tools/MIME/ApplicationBuilder.cs new file mode 100644 index 00000000..2f452274 --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/ApplicationBuilder.cs @@ -0,0 +1,67 @@ +namespace AIStudio.Tools.MIME; + +public class ApplicationBuilder : ISubtype +{ + private const BaseType BASE_TYPE = BaseType.APPLICATION; + + private ApplicationBuilder() + { + } + + public static ApplicationBuilder Create() => new(); + + private ApplicationSubtype subtype; + + public ApplicationBuilder UseSubtype(string subType) + { + this.subtype = subType.ToLowerInvariant() switch + { + "vnd.ms-excel" => ApplicationSubtype.EXCEL_OLD, + "vnd.ms-word" => ApplicationSubtype.WORD_OLD, + "vnd.ms-powerpoint" => ApplicationSubtype.POWERPOINT_OLD, + + "vnd.openxmlformats-officedocument.spreadsheetml.sheet" => ApplicationSubtype.EXCEL, + "vnd.openxmlformats-officedocument.wordprocessingml.document" => ApplicationSubtype.WORD, + "vnd.openxmlformats-officedocument.presentationml.presentation" => ApplicationSubtype.POWERPOINT, + + "octet-stream" => ApplicationSubtype.OCTET_STREAM, + + "json" => ApplicationSubtype.JSON, + "xml" => ApplicationSubtype.XML, + "pdf" => ApplicationSubtype.PDF, + "zip" => ApplicationSubtype.ZIP, + + "x-www-form-urlencoded" => ApplicationSubtype.X_WWW_FORM_URLENCODED, + _ => throw new ArgumentOutOfRangeException(nameof(subType), "Unsupported MIME application subtype.") + }; + + return this; + } + + public ApplicationBuilder UseSubtype(ApplicationSubtype subType) + { + this.subtype = subType; + return this; + } + + #region Implementation of IMIMESubtype + + public MIMEType Build() => new() + { + Type = this, + TextRepresentation = this.subtype switch + { + ApplicationSubtype.EXCEL_OLD => $"{BASE_TYPE}/vnd.ms-excel".ToLowerInvariant(), + ApplicationSubtype.WORD_OLD => $"{BASE_TYPE}/vnd.ms-word".ToLowerInvariant(), + ApplicationSubtype.POWERPOINT_OLD => $"{BASE_TYPE}/vnd.ms-powerpoint".ToLowerInvariant(), + + ApplicationSubtype.EXCEL => $"{BASE_TYPE}/vnd.openxmlformats-officedocument.spreadsheetml.sheet".ToLowerInvariant(), + ApplicationSubtype.WORD => $"{BASE_TYPE}/vnd.openxmlformats-officedocument.wordprocessingml.document".ToLowerInvariant(), + ApplicationSubtype.POWERPOINT => $"{BASE_TYPE}/vnd.openxmlformats-officedocument.presentationml.presentation".ToLowerInvariant(), + + _ => $"{BASE_TYPE}/{this.subtype}".ToLowerInvariant() + } + }; + + #endregion +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/ApplicationSubtype.cs b/app/MindWork AI Studio/Tools/MIME/ApplicationSubtype.cs new file mode 100644 index 00000000..4224815e --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/ApplicationSubtype.cs @@ -0,0 +1,21 @@ +namespace AIStudio.Tools.MIME; + +public enum ApplicationSubtype +{ + OCTET_STREAM, + + JSON, + XML, + PDF, + ZIP, + X_WWW_FORM_URLENCODED, + + WORD_OLD, + WORD, + + EXCEL_OLD, + EXCEL, + + POWERPOINT_OLD, + POWERPOINT, +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/AudioBuilder.cs b/app/MindWork AI Studio/Tools/MIME/AudioBuilder.cs new file mode 100644 index 00000000..86e371fb --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/AudioBuilder.cs @@ -0,0 +1,51 @@ +namespace AIStudio.Tools.MIME; + +public class AudioBuilder : ISubtype +{ + private const BaseType BASE_TYPE = BaseType.AUDIO; + + private AudioBuilder() + { + } + + public static AudioBuilder Create() => new(); + + private AudioSubtype subtype; + + public AudioBuilder UseSubtype(string subType) + { + this.subtype = subType.ToLowerInvariant() switch + { + "mpeg" => AudioSubtype.MPEG, + "wav" => AudioSubtype.WAV, + "ogg" => AudioSubtype.OGG, + "aac" => AudioSubtype.AAC, + "flac" => AudioSubtype.FLAC, + "webm" => AudioSubtype.WEBM, + "mp4" => AudioSubtype.MP4, + "mp3" => AudioSubtype.MP3, + "m4a" => AudioSubtype.M4A, + "aiff" => AudioSubtype.AIFF, + + _ => throw new ArgumentException("Unsupported MIME audio subtype.", nameof(subType)) + }; + + return this; + } + + public AudioBuilder UseSubtype(AudioSubtype subType) + { + this.subtype = subType; + return this; + } + + #region Implementation of IMIMESubtype + + public MIMEType Build() => new() + { + Type = this, + TextRepresentation = $"{BASE_TYPE}/{this.subtype}".ToLowerInvariant() + }; + + #endregion +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/AudioSubtype.cs b/app/MindWork AI Studio/Tools/MIME/AudioSubtype.cs new file mode 100644 index 00000000..80ccba24 --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/AudioSubtype.cs @@ -0,0 +1,16 @@ +namespace AIStudio.Tools.MIME; + +public enum AudioSubtype +{ + WAV, + MP3, + OGG, + AAC, + FLAC, + // ReSharper disable once InconsistentNaming + M4A, + MPEG, + MP4, + WEBM, + AIFF +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/BaseType.cs b/app/MindWork AI Studio/Tools/MIME/BaseType.cs new file mode 100644 index 00000000..76443f82 --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/BaseType.cs @@ -0,0 +1,10 @@ +namespace AIStudio.Tools.MIME; + +public enum BaseType +{ + APPLICATION, + AUDIO, + IMAGE, + VIDEO, + TEXT, +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/Builder.cs b/app/MindWork AI Studio/Tools/MIME/Builder.cs new file mode 100644 index 00000000..97f86fef --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/Builder.cs @@ -0,0 +1,120 @@ +namespace AIStudio.Tools.MIME; + +public class Builder +{ + private Builder() + { + } + + public static Builder Create() => new(); + + public static MIMEType FromFilename(string filenameOrPath) + { + var extension = Path.GetExtension(filenameOrPath); + if (string.IsNullOrEmpty(extension)) + throw new ArgumentException("Filename or path does not have a valid extension.", nameof(filenameOrPath)); + + extension = extension.TrimStart('.').ToLowerInvariant(); + + var builder = Create(); + return extension switch + { + // Application types + "pdf" => builder.UseApplication().UseSubtype(ApplicationSubtype.PDF).Build(), + "zip" => builder.UseApplication().UseSubtype(ApplicationSubtype.ZIP).Build(), + "doc" => builder.UseApplication().UseSubtype(ApplicationSubtype.WORD_OLD).Build(), + "docx" => builder.UseApplication().UseSubtype(ApplicationSubtype.WORD).Build(), + "xls" => builder.UseApplication().UseSubtype(ApplicationSubtype.EXCEL_OLD).Build(), + "xlsx" => builder.UseApplication().UseSubtype(ApplicationSubtype.EXCEL).Build(), + "ppt" => builder.UseApplication().UseSubtype(ApplicationSubtype.POWERPOINT_OLD).Build(), + "pptx" => builder.UseApplication().UseSubtype(ApplicationSubtype.POWERPOINT).Build(), + "json" => builder.UseApplication().UseSubtype(ApplicationSubtype.JSON).Build(), + "xml" => builder.UseApplication().UseSubtype(ApplicationSubtype.XML).Build(), + + // Text types + "txt" => builder.UseText().UseSubtype(TextSubtype.PLAIN).Build(), + "html" or "htm" => builder.UseText().UseSubtype(TextSubtype.HTML).Build(), + "css" => builder.UseText().UseSubtype(TextSubtype.CSS).Build(), + "csv" => builder.UseText().UseSubtype(TextSubtype.CSV).Build(), + "js" => builder.UseText().UseSubtype(TextSubtype.JAVASCRIPT).Build(), + "md" or "markdown" => builder.UseText().UseSubtype(TextSubtype.MARKDOWN).Build(), + + // Audio types + "wav" => builder.UseAudio().UseSubtype(AudioSubtype.WAV).Build(), + "mp3" => builder.UseAudio().UseSubtype(AudioSubtype.MP3).Build(), + "ogg" => builder.UseAudio().UseSubtype(AudioSubtype.OGG).Build(), + "aac" => builder.UseAudio().UseSubtype(AudioSubtype.AAC).Build(), + "flac" => builder.UseAudio().UseSubtype(AudioSubtype.FLAC).Build(), + "m4a" => builder.UseAudio().UseSubtype(AudioSubtype.M4A).Build(), + "aiff" or "aif" => builder.UseAudio().UseSubtype(AudioSubtype.AIFF).Build(), + "mpga" => builder.UseAudio().UseSubtype(AudioSubtype.MPEG).Build(), + "webm" => builder.UseAudio().UseSubtype(AudioSubtype.WEBM).Build(), + + // Image types + "jpg" or "jpeg" => builder.UseImage().UseSubtype(ImageSubtype.JPEG).Build(), + "png" => builder.UseImage().UseSubtype(ImageSubtype.PNG).Build(), + "gif" => builder.UseImage().UseSubtype(ImageSubtype.GIF).Build(), + "tiff" or "tif" => builder.UseImage().UseSubtype(ImageSubtype.TIFF).Build(), + "webp" => builder.UseImage().UseSubtype(ImageSubtype.WEBP).Build(), + "svg" => builder.UseImage().UseSubtype(ImageSubtype.SVG).Build(), + "heic" => builder.UseImage().UseSubtype(ImageSubtype.HEIC).Build(), + + // Video types + "mp4" => builder.UseVideo().UseSubtype(VideoSubtype.MP4).Build(), + "avi" => builder.UseVideo().UseSubtype(VideoSubtype.AVI).Build(), + "mov" => builder.UseVideo().UseSubtype(VideoSubtype.MOV).Build(), + "mkv" => builder.UseVideo().UseSubtype(VideoSubtype.MKV).Build(), + "mpeg" or "mpg" => builder.UseVideo().UseSubtype(VideoSubtype.MPEG).Build(), + + _ => throw new ArgumentException($"Unsupported file extension: '.{extension}'.", nameof(filenameOrPath)) + }; + } + + public static MIMEType FromTextRepresentation(string textRepresentation) + { + var parts = textRepresentation.Split('/'); + if (parts.Length != 2) + throw new ArgumentException("Invalid MIME type format.", nameof(textRepresentation)); + + var baseType = parts[0].ToLowerInvariant(); + var subType = parts[1].ToLowerInvariant(); + + var builder = Create(); + + switch (baseType) + { + case "application": + var appBuilder = builder.UseApplication(); + return appBuilder.UseSubtype(subType).Build(); + + case "text": + var textBuilder = builder.UseText(); + return textBuilder.UseSubtype(subType).Build(); + + case "audio": + var audioBuilder = builder.UseAudio(); + return audioBuilder.UseSubtype(subType).Build(); + + case "image": + var imageBuilder = builder.UseImage(); + return imageBuilder.UseSubtype(subType).Build(); + + case "video": + var videoBuilder = builder.UseVideo(); + return videoBuilder.UseSubtype(subType).Build(); + + default: + throw new ArgumentException("Unsupported base type.", nameof(textRepresentation)); + } + } + + public ApplicationBuilder UseApplication() => ApplicationBuilder.Create(); + + public TextBuilder UseText() => TextBuilder.Create(); + + public AudioBuilder UseAudio() => AudioBuilder.Create(); + + public ImageBuilder UseImage() => ImageBuilder.Create(); + + public VideoBuilder UseVideo() => VideoBuilder.Create(); +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/ISubtype.cs b/app/MindWork AI Studio/Tools/MIME/ISubtype.cs new file mode 100644 index 00000000..517f6a3e --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/ISubtype.cs @@ -0,0 +1,6 @@ +namespace AIStudio.Tools.MIME; + +public interface ISubtype +{ + public MIMEType Build(); +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/ImageBuilder.cs b/app/MindWork AI Studio/Tools/MIME/ImageBuilder.cs new file mode 100644 index 00000000..b59cca4f --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/ImageBuilder.cs @@ -0,0 +1,48 @@ +namespace AIStudio.Tools.MIME; + +public class ImageBuilder : ISubtype +{ + private const BaseType BASE_TYPE = BaseType.IMAGE; + + private ImageBuilder() + { + } + + public static ImageBuilder Create() => new(); + + private ImageSubtype subtype; + + public ImageBuilder UseSubtype(string subType) + { + this.subtype = subType.ToLowerInvariant() switch + { + "jpeg" or "jpg" => ImageSubtype.JPEG, + "png" => ImageSubtype.PNG, + "gif" => ImageSubtype.GIF, + "webp" => ImageSubtype.WEBP, + "tiff" or "tif" => ImageSubtype.TIFF, + "svg+xml" or "svg" => ImageSubtype.SVG, + "heic" => ImageSubtype.HEIC, + + _ => throw new ArgumentException("Unsupported MIME image subtype.", nameof(subType)) + }; + + return this; + } + + public ImageBuilder UseSubtype(ImageSubtype subType) + { + this.subtype = subType; + return this; + } + + #region Implementation of IMIMESubtype + + public MIMEType Build() => new() + { + Type = this, + TextRepresentation = $"{BASE_TYPE}/{this.subtype}".ToLowerInvariant() + }; + + #endregion +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/ImageSubtype.cs b/app/MindWork AI Studio/Tools/MIME/ImageSubtype.cs new file mode 100644 index 00000000..73b11896 --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/ImageSubtype.cs @@ -0,0 +1,12 @@ +namespace AIStudio.Tools.MIME; + +public enum ImageSubtype +{ + JPEG, + PNG, + GIF, + TIFF, + WEBP, + SVG, + HEIC, +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/MIMEType.cs b/app/MindWork AI Studio/Tools/MIME/MIMEType.cs new file mode 100644 index 00000000..adf45e6d --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/MIMEType.cs @@ -0,0 +1,16 @@ +namespace AIStudio.Tools.MIME; + +public record MIMEType +{ + public required ISubtype Type { get; init; } + + public required string TextRepresentation { get; init; } + + #region Overrides of Object + + public override string ToString() => this.TextRepresentation; + + #endregion + + public static implicit operator string(MIMEType mimeType) => mimeType.TextRepresentation; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/MIMETypeExtensions.cs b/app/MindWork AI Studio/Tools/MIME/MIMETypeExtensions.cs new file mode 100644 index 00000000..cfcd9053 --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/MIMETypeExtensions.cs @@ -0,0 +1,15 @@ +namespace AIStudio.Tools.MIME; + +public static class MIMETypeExtensions +{ + public static string[] ToStringArray(this MIMEType[] mimeTypes) + { + var result = new string[mimeTypes.Length]; + for (var i = 0; i < mimeTypes.Length; i++) + { + result[i] = mimeTypes[i]; + } + + return result; + } +} diff --git a/app/MindWork AI Studio/Tools/MIME/TextBuilder.cs b/app/MindWork AI Studio/Tools/MIME/TextBuilder.cs new file mode 100644 index 00000000..c4848dbf --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/TextBuilder.cs @@ -0,0 +1,49 @@ +namespace AIStudio.Tools.MIME; + +public class TextBuilder : ISubtype +{ + private const BaseType BASE_TYPE = BaseType.TEXT; + + private TextBuilder() + { + } + + public static TextBuilder Create() => new(); + + private TextSubtype subtype; + + public TextBuilder UseSubtype(string subType) + { + this.subtype = subType.ToLowerInvariant() switch + { + "plain" => TextSubtype.PLAIN, + "html" => TextSubtype.HTML, + "css" => TextSubtype.CSS, + "csv" => TextSubtype.CSV, + "javascript" => TextSubtype.JAVASCRIPT, + "xml" => TextSubtype.XML, + "markdown" => TextSubtype.MARKDOWN, + "json" => TextSubtype.JSON, + + _ => throw new ArgumentException("Unsupported MIME text subtype.", nameof(subType)) + }; + + return this; + } + + public TextBuilder UseSubtype(TextSubtype subType) + { + this.subtype = subType; + return this; + } + + #region Implementation of IMIMESubtype + + public MIMEType Build() => new() + { + Type = this, + TextRepresentation = $"{BASE_TYPE}/{this.subtype}".ToLowerInvariant() + }; + + #endregion +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/TextSubtype.cs b/app/MindWork AI Studio/Tools/MIME/TextSubtype.cs new file mode 100644 index 00000000..c3d34829 --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/TextSubtype.cs @@ -0,0 +1,13 @@ +namespace AIStudio.Tools.MIME; + +public enum TextSubtype +{ + PLAIN, + HTML, + CSS, + CSV, + JAVASCRIPT, + XML, + JSON, + MARKDOWN, +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/VideoBuilder.cs b/app/MindWork AI Studio/Tools/MIME/VideoBuilder.cs new file mode 100644 index 00000000..6d23d8b3 --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/VideoBuilder.cs @@ -0,0 +1,46 @@ +namespace AIStudio.Tools.MIME; + +public class VideoBuilder : ISubtype +{ + private const BaseType BASE_TYPE = BaseType.VIDEO; + + private VideoBuilder() + { + } + + public static VideoBuilder Create() => new(); + + private VideoSubtype subtype; + + public VideoBuilder UseSubtype(string subType) + { + this.subtype = subType.ToLowerInvariant() switch + { + "mp4" => VideoSubtype.MP4, + "webm" => VideoSubtype.WEBM, + "avi" => VideoSubtype.AVI, + "mov" => VideoSubtype.MOV, + "mkv" => VideoSubtype.MKV, + + _ => throw new ArgumentException("Unsupported MIME video subtype.", nameof(subType)) + }; + + return this; + } + + public VideoBuilder UseSubtype(VideoSubtype subType) + { + this.subtype = subType; + return this; + } + + #region Implementation of IMIMESubtype + + public MIMEType Build() => new() + { + Type = this, + TextRepresentation = $"{BASE_TYPE}/{this.subtype}".ToLowerInvariant() + }; + + #endregion +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/MIME/VideoSubtype.cs b/app/MindWork AI Studio/Tools/MIME/VideoSubtype.cs new file mode 100644 index 00000000..cf152b1b --- /dev/null +++ b/app/MindWork AI Studio/Tools/MIME/VideoSubtype.cs @@ -0,0 +1,11 @@ +namespace AIStudio.Tools.MIME; + +public enum VideoSubtype +{ + MP4, + AVI, + MOV, + MKV, + WEBM, + MPEG, +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs index afa97c14..814aa971 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfiguration.cs @@ -67,9 +67,18 @@ public sealed class PluginConfiguration(bool isInternal, LuaState state, PluginT // Config: enabled preview features ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.EnabledPreviewFeatures, this.Id, settingsTable, dryRun); + // Config: hide some assistants? + ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.HiddenAssistants, this.Id, settingsTable, dryRun); + // Handle configured LLM providers: PluginConfigurationObject.TryParse(PluginConfigurationObjectType.LLM_PROVIDER, x => x.Providers, x => x.NextProviderNum, mainTable, this.Id, ref this.configObjects, dryRun); - + + // Handle configured transcription providers: + PluginConfigurationObject.TryParse(PluginConfigurationObjectType.TRANSCRIPTION_PROVIDER, x => x.TranscriptionProviders, x => x.NextTranscriptionNum, mainTable, this.Id, ref this.configObjects, dryRun); + + // Handle configured embedding providers: + PluginConfigurationObject.TryParse(PluginConfigurationObjectType.EMBEDDING_PROVIDER, x => x.EmbeddingProviders, x => x.NextEmbeddingNum, mainTable, this.Id, ref this.configObjects, dryRun); + // Handle configured chat templates: PluginConfigurationObject.TryParse(PluginConfigurationObjectType.CHAT_TEMPLATE, x => x.ChatTemplates, x => x.NextChatTemplateNum, mainTable, this.Id, ref this.configObjects, dryRun); @@ -78,7 +87,10 @@ public sealed class PluginConfiguration(bool isInternal, LuaState state, PluginT // Config: preselected profile? ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.PreselectedProfile, Guid.Empty, this.Id, settingsTable, dryRun); - + + // Config: transcription provider? + ManagedConfiguration.TryProcessConfiguration(x => x.App, x => x.UseTranscriptionProvider, Guid.Empty, this.Id, settingsTable, dryRun); + message = string.Empty; return true; } diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObject.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObject.cs index f05a724b..da5c46c2 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObject.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObject.cs @@ -68,8 +68,9 @@ public sealed record PluginConfigurationObject PluginConfigurationObjectType.CHAT_TEMPLATE => "CHAT_TEMPLATES", PluginConfigurationObjectType.DATA_SOURCE => "DATA_SOURCES", PluginConfigurationObjectType.EMBEDDING_PROVIDER => "EMBEDDING_PROVIDERS", + PluginConfigurationObjectType.TRANSCRIPTION_PROVIDER => "TRANSCRIPTION_PROVIDERS", PluginConfigurationObjectType.PROFILE => "PROFILES", - + _ => null, }; @@ -102,7 +103,9 @@ public sealed record PluginConfigurationObject PluginConfigurationObjectType.LLM_PROVIDER => (Settings.Provider.TryParseProviderTable(i, luaObjectTable, configPluginId, out var configurationObject) && configurationObject != Settings.Provider.NONE, configurationObject), PluginConfigurationObjectType.CHAT_TEMPLATE => (ChatTemplate.TryParseChatTemplateTable(i, luaObjectTable, configPluginId, out var configurationObject) && configurationObject != ChatTemplate.NO_CHAT_TEMPLATE, configurationObject), PluginConfigurationObjectType.PROFILE => (Profile.TryParseProfileTable(i, luaObjectTable, configPluginId, out var configurationObject) && configurationObject != Profile.NO_PROFILE, configurationObject), - + PluginConfigurationObjectType.TRANSCRIPTION_PROVIDER => (TranscriptionProvider.TryParseTranscriptionProviderTable(i, luaObjectTable, configPluginId, out var configurationObject) && configurationObject != TranscriptionProvider.NONE, configurationObject), + PluginConfigurationObjectType.EMBEDDING_PROVIDER => (EmbeddingProvider.TryParseEmbeddingProviderTable(i, luaObjectTable, configPluginId, out var configurationObject) && configurationObject != EmbeddingProvider.NONE, configurationObject), + _ => (false, NoConfigurationObject.INSTANCE) }; diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObjectType.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObjectType.cs index 1cb4f604..82931873 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObjectType.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginConfigurationObjectType.cs @@ -4,10 +4,11 @@ public enum PluginConfigurationObjectType { NONE, UNKNOWN, - + PROFILE, DATA_SOURCE, LLM_PROVIDER, CHAT_TEMPLATE, EMBEDDING_PROVIDER, + TRANSCRIPTION_PROVIDER, } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs b/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs index 8990d499..63eb3df5 100644 --- a/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs +++ b/app/MindWork AI Studio/Tools/PluginSystem/PluginFactory.Loading.cs @@ -132,7 +132,15 @@ public static partial class PluginFactory // Check LLM providers: var wasConfigurationChanged = PluginConfigurationObject.CleanLeftOverConfigurationObjects(PluginConfigurationObjectType.LLM_PROVIDER, x => x.Providers, AVAILABLE_PLUGINS, configObjectList); - + + // Check transcription providers: + if(PluginConfigurationObject.CleanLeftOverConfigurationObjects(PluginConfigurationObjectType.TRANSCRIPTION_PROVIDER, x => x.TranscriptionProviders, AVAILABLE_PLUGINS, configObjectList)) + wasConfigurationChanged = true; + + // Check embedding providers: + if(PluginConfigurationObject.CleanLeftOverConfigurationObjects(PluginConfigurationObjectType.EMBEDDING_PROVIDER, x => x.EmbeddingProviders, AVAILABLE_PLUGINS, configObjectList)) + wasConfigurationChanged = true; + // Check chat templates: if(PluginConfigurationObject.CleanLeftOverConfigurationObjects(PluginConfigurationObjectType.CHAT_TEMPLATE, x => x.ChatTemplates, AVAILABLE_PLUGINS, configObjectList)) wasConfigurationChanged = true; @@ -165,6 +173,14 @@ public static partial class PluginFactory if(ManagedConfiguration.IsConfigurationLeftOver(x => x.App, x => x.EnabledPreviewFeatures, AVAILABLE_PLUGINS)) wasConfigurationChanged = true; + // Check for the transcription provider: + if(ManagedConfiguration.IsConfigurationLeftOver(x => x.App, x => x.UseTranscriptionProvider, AVAILABLE_PLUGINS)) + wasConfigurationChanged = true; + + // Check for hidden assistants: + if(ManagedConfiguration.IsConfigurationLeftOver(x => x.App, x => x.HiddenAssistants, AVAILABLE_PLUGINS)) + wasConfigurationChanged = true; + if (wasConfigurationChanged) { await SETTINGS_MANAGER.StoreSettings(); diff --git a/app/MindWork AI Studio/Tools/RAG/IRetrievalContextExtensions.cs b/app/MindWork AI Studio/Tools/RAG/IRetrievalContextExtensions.cs index ee5e6cb5..74ff4e58 100644 --- a/app/MindWork AI Studio/Tools/RAG/IRetrievalContextExtensions.cs +++ b/app/MindWork AI Studio/Tools/RAG/IRetrievalContextExtensions.cs @@ -81,7 +81,9 @@ public static class IRetrievalContextExtensions sb.AppendLine(); sb.AppendLine("Matched image content as base64-encoded data:"); sb.AppendLine("````"); - sb.AppendLine(await imageContext.AsBase64(token)); + sb.AppendLine(await imageContext.TryAsBase64(token) is (success: true, { } base64Image) + ? base64Image + : string.Empty); sb.AppendLine("````"); break; diff --git a/app/MindWork AI Studio/Tools/Rust/FileTypeFilter.cs b/app/MindWork AI Studio/Tools/Rust/FileTypeFilter.cs index d755184e..03232070 100644 --- a/app/MindWork AI Studio/Tools/Rust/FileTypeFilter.cs +++ b/app/MindWork AI Studio/Tools/Rust/FileTypeFilter.cs @@ -21,7 +21,60 @@ public readonly record struct FileTypeFilter(string FilterName, string[] FilterE public static FileTypeFilter AllImages => new(TB("All Image Files"), ["jpg", "jpeg", "png", "gif", "bmp", "tiff", "svg", "webp", "heic"]); - public static FileTypeFilter AllVideos => new(TB("All Video Files"), ["mp4", "avi", "mkv", "mov", "wmv", "flv", "webm"]); + public static FileTypeFilter AllVideos => new(TB("All Video Files"), ["mp4", "m4v", "avi", "mkv", "mov", "wmv", "flv", "webm"]); + + public static FileTypeFilter AllAudio => new(TB("All Audio Files"), ["mp3", "wav", "wave", "aac", "flac", "ogg", "m4a", "wma", "alac", "aiff", "m4b"]); + + public static FileTypeFilter AllSourceCode => new(TB("All Source Code Files"), + [ + // .NET + "cs", "vb", "fs", "razor", "aspx", "cshtml", "csproj", + + // Java: + "java", + + // Python: + "py", + + // JavaScript/TypeScript: + "js", "ts", + + // C/C++: + "c", "cpp", "h", "hpp", + + // Ruby: + "rb", + + // Go: + "go", + + // Rust: + "rs", + + // Lua: + "lua", + + // PHP: + "php", + + // HTML/CSS: + "html", "css", + + // Swift/Kotlin: + "swift", "kt", + + // Shell scripts: + "sh", "bash", + + // Logging files: + "log", + + // JSON/YAML/XML: + "json", "yaml", "yml", "xml", + + // Config files: + "ini", "cfg", "toml", "plist", + ]); public static FileTypeFilter Executables => new(TB("Executable Files"), ["exe", "app", "bin", "appimage"]); } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/Rust/FilesSelectionResponse.cs b/app/MindWork AI Studio/Tools/Rust/FilesSelectionResponse.cs new file mode 100644 index 00000000..da2040dd --- /dev/null +++ b/app/MindWork AI Studio/Tools/Rust/FilesSelectionResponse.cs @@ -0,0 +1,8 @@ +namespace AIStudio.Tools.Rust; + +/// +/// Data structure for selecting multiple files. +/// +/// Was the file selection canceled? +/// The selected files, if any. +public readonly record struct FilesSelectionResponse(bool UserCancelled, IReadOnlyList SelectedFilePaths); diff --git a/app/MindWork AI Studio/Tools/Rust/LogEventRequest.cs b/app/MindWork AI Studio/Tools/Rust/LogEventRequest.cs new file mode 100644 index 00000000..c3f8fe89 --- /dev/null +++ b/app/MindWork AI Studio/Tools/Rust/LogEventRequest.cs @@ -0,0 +1,10 @@ +namespace AIStudio.Tools.Rust; + +public readonly record struct LogEventRequest( + string Timestamp, + string Level, + string Category, + string Message, + string? Exception, + string? StackTrace +); diff --git a/app/MindWork AI Studio/Tools/Rust/LogEventResponse.cs b/app/MindWork AI Studio/Tools/Rust/LogEventResponse.cs new file mode 100644 index 00000000..1c8c1055 --- /dev/null +++ b/app/MindWork AI Studio/Tools/Rust/LogEventResponse.cs @@ -0,0 +1,3 @@ +namespace AIStudio.Tools.Rust; + +public readonly record struct LogEventResponse(bool Success, string Issue); diff --git a/app/MindWork AI Studio/Tools/SecretStoreType.cs b/app/MindWork AI Studio/Tools/SecretStoreType.cs new file mode 100644 index 00000000..c4382b7b --- /dev/null +++ b/app/MindWork AI Studio/Tools/SecretStoreType.cs @@ -0,0 +1,32 @@ +namespace AIStudio.Tools; + +/// +/// Represents the type of secret store used for API keys. +/// +/// +/// Different provider types use different prefixes for storing API keys. +/// This prevents collisions when the same instance name is used across +/// different provider types (e.g., LLM, Embedding, Transcription). +/// +public enum SecretStoreType +{ + /// + /// LLM provider secrets. Uses the legacy "provider::" prefix for backward compatibility. + /// + LLM_PROVIDER = 0, + + /// + /// Embedding provider secrets. Uses the "embedding::" prefix. + /// + EMBEDDING_PROVIDER, + + /// + /// Transcription provider secrets. Uses the "transcription::" prefix. + /// + TRANSCRIPTION_PROVIDER, + + /// + /// Image provider secrets. Uses the "image::" prefix. + /// + IMAGE_PROVIDER, +} diff --git a/app/MindWork AI Studio/Tools/SecretStoreTypeExtensions.cs b/app/MindWork AI Studio/Tools/SecretStoreTypeExtensions.cs new file mode 100644 index 00000000..d0d4ba9e --- /dev/null +++ b/app/MindWork AI Studio/Tools/SecretStoreTypeExtensions.cs @@ -0,0 +1,21 @@ +namespace AIStudio.Tools; + +public static class SecretStoreTypeExtensions +{ + /// + /// Gets the prefix string associated with the SecretStoreType. + /// + /// + /// LLM_PROVIDER uses the legacy "provider" prefix for backward compatibility. + /// + /// The SecretStoreType enum value. + /// >The corresponding prefix string. + public static string Prefix(this SecretStoreType type) => type switch + { + SecretStoreType.LLM_PROVIDER => "provider", + SecretStoreType.EMBEDDING_PROVIDER => "embedding", + SecretStoreType.TRANSCRIPTION_PROVIDER => "transcription", + + _ => "provider", + }; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/Services/RustService.APIKeys.cs b/app/MindWork AI Studio/Tools/Services/RustService.APIKeys.cs index 256d29fc..abc06b03 100644 --- a/app/MindWork AI Studio/Tools/Services/RustService.APIKeys.cs +++ b/app/MindWork AI Studio/Tools/Services/RustService.APIKeys.cs @@ -1,85 +1,84 @@ -using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Rust; namespace AIStudio.Tools.Services; public sealed partial class RustService { - private static string TB_APIKeys(string fallbackEN) => I18N.I.T(fallbackEN, typeof(RustService).Namespace, $"{nameof(RustService)}.APIKeys"); - /// /// Try to get the API key for the given secret ID. /// /// The secret ID to get the API key for. /// Indicates if we are trying to get the API key. In that case, we don't log errors. + /// The secret store type. Defaults to LLM_PROVIDER for backward compatibility. /// The requested secret. - public async Task GetAPIKey(ISecretId secretId, bool isTrying = false) + public async Task GetAPIKey(ISecretId secretId, SecretStoreType storeType, bool isTrying = false) { - static string TB(string fallbackEN) => TB_APIKeys(fallbackEN); - - var secretRequest = new SelectSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, isTrying); + var prefix = storeType.Prefix(); + var secretRequest = new SelectSecretRequest($"{prefix}::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, isTrying); var result = await this.http.PostAsJsonAsync("/secrets/get", secretRequest, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { if(!isTrying) - this.logger!.LogError($"Failed to get the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'"); + this.logger!.LogError($"Failed to get the API key for '{prefix}::{secretId.SecretId}::{secretId.SecretName}::api_key' due to an API issue: '{result.StatusCode}'"); return new RequestedSecret(false, new EncryptedText(string.Empty), TB("Failed to get the API key due to an API issue.")); } - + var secret = await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); if (!secret.Success && !isTrying) - this.logger!.LogError($"Failed to get the API key for secret ID '{secretId.SecretId}': '{secret.Issue}'"); - + this.logger!.LogError($"Failed to get the API key for '{prefix}::{secretId.SecretId}::{secretId.SecretName}::api_key': '{secret.Issue}'"); + + this.logger!.LogDebug($"Successfully retrieved the API key for '{prefix}::{secretId.SecretId}::{secretId.SecretName}::api_key'."); return secret; } - + /// /// Try to store the API key for the given secret ID. /// /// The secret ID to store the API key for. /// The API key to store. + /// The secret store type. Defaults to LLM_PROVIDER for backward compatibility. /// The store secret response. - public async Task SetAPIKey(ISecretId secretId, string key) + public async Task SetAPIKey(ISecretId secretId, string key, SecretStoreType storeType) { - static string TB(string fallbackEN) => TB_APIKeys(fallbackEN); - + var prefix = storeType.Prefix(); var encryptedKey = await this.encryptor!.Encrypt(key); - var request = new StoreSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, encryptedKey); + var request = new StoreSecretRequest($"{prefix}::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, encryptedKey); var result = await this.http.PostAsJsonAsync("/secrets/store", request, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { - this.logger!.LogError($"Failed to store the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'"); + this.logger!.LogError($"Failed to store the API key for '{prefix}::{secretId.SecretId}::{secretId.SecretName}::api_key' due to an API issue: '{result.StatusCode}'"); return new StoreSecretResponse(false, TB("Failed to get the API key due to an API issue.")); } - + var state = await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); if (!state.Success) - this.logger!.LogError($"Failed to store the API key for secret ID '{secretId.SecretId}': '{state.Issue}'"); - + this.logger!.LogError($"Failed to store the API key for '{prefix}::{secretId.SecretId}::{secretId.SecretName}::api_key': '{state.Issue}'"); + + this.logger!.LogDebug($"Successfully stored the API key for '{prefix}::{secretId.SecretId}::{secretId.SecretName}::api_key'."); return state; } - + /// /// Tries to delete the API key for the given secret ID. /// /// The secret ID to delete the API key for. + /// The secret store type. Defaults to LLM_PROVIDER for backward compatibility. /// The delete secret response. - public async Task DeleteAPIKey(ISecretId secretId) + public async Task DeleteAPIKey(ISecretId secretId, SecretStoreType storeType) { - static string TB(string fallbackEN) => TB_APIKeys(fallbackEN); - - var request = new SelectSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, false); + var prefix = storeType.Prefix(); + var request = new SelectSecretRequest($"{prefix}::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, false); var result = await this.http.PostAsJsonAsync("/secrets/delete", request, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { this.logger!.LogError($"Failed to delete the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'"); return new DeleteSecretResponse{Success = false, WasEntryFound = false, Issue = TB("Failed to delete the API key due to an API issue.")}; } - + var state = await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); if (!state.Success) this.logger!.LogError($"Failed to delete the API key for secret ID '{secretId.SecretId}': '{state.Issue}'"); - + return state; } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/Services/RustService.Clipboard.cs b/app/MindWork AI Studio/Tools/Services/RustService.Clipboard.cs index 09fad915..baf730bb 100644 --- a/app/MindWork AI Studio/Tools/Services/RustService.Clipboard.cs +++ b/app/MindWork AI Studio/Tools/Services/RustService.Clipboard.cs @@ -1,12 +1,9 @@ -using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Rust; namespace AIStudio.Tools.Services; public sealed partial class RustService { - private static string TB_Clipboard(string fallbackEN) => I18N.I.T(fallbackEN, typeof(RustService).Namespace, $"{nameof(RustService)}.Clipboard"); - /// /// Tries to copy the given text to the clipboard. /// @@ -14,8 +11,6 @@ public sealed partial class RustService /// The text to copy to the clipboard. public async Task CopyText2Clipboard(ISnackbar snackbar, string text) { - static string TB(string fallbackEN) => TB_Clipboard(fallbackEN); - var message = TB("Successfully copied the text to your clipboard"); var iconColor = Color.Error; var severity = Severity.Error; diff --git a/app/MindWork AI Studio/Tools/Services/RustService.FileSystem.cs b/app/MindWork AI Studio/Tools/Services/RustService.FileSystem.cs index 9fd670c0..4a498b01 100644 --- a/app/MindWork AI Studio/Tools/Services/RustService.FileSystem.cs +++ b/app/MindWork AI Studio/Tools/Services/RustService.FileSystem.cs @@ -25,17 +25,36 @@ public sealed partial class RustService PreviousFile = initialFile is null ? null : new (initialFile), Filter = filter }; - + var result = await this.http.PostAsJsonAsync("/select/file", payload, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) { this.logger!.LogError($"Failed to select a file: '{result.StatusCode}'"); return new FileSelectionResponse(true, string.Empty); } - + return await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); } + public async Task SelectFiles(string title, FileTypeFilter? filter = null, string? initialFile = null) + { + var payload = new SelectFileOptions + { + Title = title, + PreviousFile = initialFile is null ? null : new (initialFile), + Filter = filter + }; + + var result = await this.http.PostAsJsonAsync("/select/files", payload, this.jsonRustSerializerOptions); + if (!result.IsSuccessStatusCode) + { + this.logger!.LogError($"Failed to select files: '{result.StatusCode}'"); + return new FilesSelectionResponse(true, Array.Empty()); + } + + return await result.Content.ReadFromJsonAsync(this.jsonRustSerializerOptions); + } + /// /// Initiates a dialog to let the user select a file for a writing operation. /// diff --git a/app/MindWork AI Studio/Tools/Services/RustService.Log.cs b/app/MindWork AI Studio/Tools/Services/RustService.Log.cs index e7b52438..b8542ddd 100644 --- a/app/MindWork AI Studio/Tools/Services/RustService.Log.cs +++ b/app/MindWork AI Studio/Tools/Services/RustService.Log.cs @@ -12,4 +12,28 @@ public sealed partial class RustService { return await this.http.GetFromJsonAsync("/log/paths", this.jsonRustSerializerOptions); } + + /// + /// Sends a log event to the Rust runtime. + /// + /// The timestamp of the log event. + /// The log level. + /// The category of the log event. + /// The log message. + /// Optional exception message. + /// Optional exception stack trace. + public void LogEvent(string timestamp, string level, string category, string message, string? exception = null, string? stackTrace = null) + { + try + { + // Fire-and-forget the log event to avoid blocking: + var request = new LogEventRequest(timestamp, level, category, message, exception, stackTrace); + _ = this.http.PostAsJsonAsync("/log/event", request, this.jsonRustSerializerOptions); + } + catch + { + Console.WriteLine("Failed to send log event to Rust service."); + // Ignore errors to avoid log loops + } + } } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/Services/RustService.Secrets.cs b/app/MindWork AI Studio/Tools/Services/RustService.Secrets.cs index da9db35f..49f51a1d 100644 --- a/app/MindWork AI Studio/Tools/Services/RustService.Secrets.cs +++ b/app/MindWork AI Studio/Tools/Services/RustService.Secrets.cs @@ -1,12 +1,9 @@ -using AIStudio.Tools.PluginSystem; using AIStudio.Tools.Rust; namespace AIStudio.Tools.Services; public sealed partial class RustService { - private static string TB_Secrets(string fallbackEN) => I18N.I.T(fallbackEN, typeof(RustService).Namespace, $"{nameof(RustService)}.Secrets"); - /// /// Try to get the secret data for the given secret ID. /// @@ -15,8 +12,6 @@ public sealed partial class RustService /// The requested secret. public async Task GetSecret(ISecretId secretId, bool isTrying = false) { - static string TB(string fallbackEN) => TB_Secrets(fallbackEN); - var secretRequest = new SelectSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, isTrying); var result = await this.http.PostAsJsonAsync("/secrets/get", secretRequest, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) @@ -41,8 +36,6 @@ public sealed partial class RustService /// The store secret response. public async Task SetSecret(ISecretId secretId, string secretData) { - static string TB(string fallbackEN) => TB_Secrets(fallbackEN); - var encryptedSecret = await this.encryptor!.Encrypt(secretData); var request = new StoreSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, encryptedSecret); var result = await this.http.PostAsJsonAsync("/secrets/store", request, this.jsonRustSerializerOptions); @@ -66,8 +59,6 @@ public sealed partial class RustService /// The delete secret response. public async Task DeleteSecret(ISecretId secretId) { - static string TB(string fallbackEN) => TB_Secrets(fallbackEN); - var request = new SelectSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, false); var result = await this.http.PostAsJsonAsync("/secrets/delete", request, this.jsonRustSerializerOptions); if (!result.IsSuccessStatusCode) diff --git a/app/MindWork AI Studio/Tools/Services/RustService.cs b/app/MindWork AI Studio/Tools/Services/RustService.cs index 41628992..c1b90e2f 100644 --- a/app/MindWork AI Studio/Tools/Services/RustService.cs +++ b/app/MindWork AI Studio/Tools/Services/RustService.cs @@ -2,6 +2,7 @@ using System.Security.Cryptography; using System.Text.Json; using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; using Version = System.Version; @@ -14,6 +15,8 @@ namespace AIStudio.Tools.Services; /// public sealed partial class RustService : BackgroundService { + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(RustService).Namespace, nameof(RustService)); + private readonly HttpClient http; private readonly JsonSerializerOptions jsonRustSerializerOptions = new() diff --git a/app/MindWork AI Studio/Tools/TerminalLogger.cs b/app/MindWork AI Studio/Tools/TerminalLogger.cs index ce87feb4..bafd5fa1 100644 --- a/app/MindWork AI Studio/Tools/TerminalLogger.cs +++ b/app/MindWork AI Studio/Tools/TerminalLogger.cs @@ -1,3 +1,8 @@ +using System.Collections.Concurrent; + +using AIStudio.Tools.Rust; +using AIStudio.Tools.Services; + using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Console; @@ -6,18 +11,83 @@ namespace AIStudio.Tools; public sealed class TerminalLogger() : ConsoleFormatter(FORMATTER_NAME) { public const string FORMATTER_NAME = "AI Studio Terminal Logger"; - + + private static RustService? RUST_SERVICE; + + // Buffer for early log events before the RustService is available: + private static readonly ConcurrentQueue EARLY_LOG_BUFFER = new(); + + // ANSI color codes for log levels: + private const string ANSI_RESET = "\x1b[0m"; + private const string ANSI_GRAY = "\x1b[90m"; // Trace, Debug + private const string ANSI_GREEN = "\x1b[32m"; // Information + private const string ANSI_YELLOW = "\x1b[33m"; // Warning + private const string ANSI_RED = "\x1b[91m"; // Error, Critical + + /// + /// Sets the Rust service for logging events and flushes any buffered early log events. + /// + /// The Rust service instance. + public static void SetRustService(RustService service) + { + RUST_SERVICE = service; + + // Flush all buffered early log events to Rust in the original order: + while (EARLY_LOG_BUFFER.TryDequeue(out var bufferedEvent)) + { + service.LogEvent( + bufferedEvent.Timestamp, + bufferedEvent.Level, + bufferedEvent.Category, + bufferedEvent.Message, + bufferedEvent.Exception, + bufferedEvent.StackTrace + ); + } + } + public override void Write(in LogEntry logEntry, IExternalScopeProvider? scopeProvider, TextWriter textWriter) { var message = logEntry.Formatter(logEntry.State, logEntry.Exception); var timestamp = DateTimeOffset.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff"); var logLevel = logEntry.LogLevel.ToString(); var category = logEntry.Category; - - textWriter.Write($"=> {timestamp} [{logLevel}] {category}: {message}"); + var exceptionMessage = logEntry.Exception?.Message; + var stackTrace = logEntry.Exception?.StackTrace; + var colorCode = GetColorForLogLevel(logEntry.LogLevel); + + textWriter.Write($"[{colorCode}{timestamp}{ANSI_RESET}] {colorCode}{logLevel}{ANSI_RESET} [{category}] {colorCode}{message}{ANSI_RESET}"); if (logEntry.Exception is not null) - textWriter.Write($" Exception was = {logEntry.Exception}"); + { + textWriter.Write($" {colorCode}Exception: {exceptionMessage}{ANSI_RESET}"); + if (stackTrace is not null) + { + textWriter.WriteLine(); + foreach (var line in stackTrace.Split('\n')) + textWriter.WriteLine($" {line.TrimEnd()}"); + } + } + else + textWriter.WriteLine(); + + // Send log event to Rust via API (fire-and-forget): + if (RUST_SERVICE is not null) + RUST_SERVICE.LogEvent(timestamp, logLevel, category, message, exceptionMessage, stackTrace); - textWriter.WriteLine(); + // Buffer early log events until the RustService is available: + else + EARLY_LOG_BUFFER.Enqueue(new LogEventRequest(timestamp, logLevel, category, message, exceptionMessage, stackTrace)); } + + private static string GetColorForLogLevel(LogLevel logLevel) => logLevel switch + { + LogLevel.Trace => ANSI_GRAY, + LogLevel.Debug => ANSI_GRAY, + LogLevel.Information => ANSI_GREEN, + LogLevel.Warning => ANSI_YELLOW, + LogLevel.Error => ANSI_RED, + LogLevel.Critical => ANSI_RED, + + _ => ANSI_RESET + }; } \ No newline at end of file diff --git a/app/MindWork AI Studio/Tools/Validation/FileExtensionValidation.cs b/app/MindWork AI Studio/Tools/Validation/FileExtensionValidation.cs new file mode 100644 index 00000000..02a978d1 --- /dev/null +++ b/app/MindWork AI Studio/Tools/Validation/FileExtensionValidation.cs @@ -0,0 +1,136 @@ +using AIStudio.Provider; +using AIStudio.Settings; +using AIStudio.Tools.PluginSystem; +using AIStudio.Tools.Rust; + +namespace AIStudio.Tools.Validation; + +/// +/// Provides centralized validation for file extensions. +/// +public static class FileExtensionValidation +{ + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(FileExtensionValidation).Namespace, nameof(FileExtensionValidation)); + + /// + /// Defines the use cases for file extension validation. + /// + public enum UseCase + { + /// + /// No specific use case; general validation. + /// + NONE, + + /// + /// Validating for directly loading content into the UI. In this state, there might be no provider selected yet. + /// + DIRECTLY_LOADING_CONTENT, + + /// + /// Validating for attaching content to a message or prompt. + /// + ATTACHING_CONTENT, + } + + /// + /// Validates the file extension and sends appropriate MessageBus notifications when invalid. + /// + /// The validation use case. + /// The file path to validate. + /// Whether to validate media file types against provider capabilities. + /// The selected provider. + /// True if valid, false if invalid (error/warning already sent via MessageBus). + public static async Task IsExtensionValidWithNotifyAsync(UseCase useCae, string filePath, bool validateMediaFileTypes = true, Settings.Provider? provider = null) + { + var ext = Path.GetExtension(filePath).TrimStart('.').ToLowerInvariant(); + if(FileTypeFilter.Executables.FilterExtensions.Contains(ext)) + { + await MessageBus.INSTANCE.SendError(new( + Icons.Material.Filled.AppBlocking, + TB("Executables are not allowed"))); + return false; + } + + var capabilities = provider?.GetModelCapabilities() ?? new(); + if (FileTypeFilter.AllImages.FilterExtensions.Contains(ext)) + { + switch (useCae) + { + // In this use case, we cannot guarantee that a provider is selected yet: + case UseCase.DIRECTLY_LOADING_CONTENT: + await MessageBus.INSTANCE.SendWarning(new( + Icons.Material.Filled.ImageNotSupported, + TB("Images are not supported at this place"))); + return false; + + // In this use case, we don't validate the provider capabilities: + case UseCase.ATTACHING_CONTENT when !validateMediaFileTypes: + return true; + + // In this use case, we can check the provider capabilities: + case UseCase.ATTACHING_CONTENT when capabilities.Contains(Capability.SINGLE_IMAGE_INPUT) || + capabilities.Contains(Capability.MULTIPLE_IMAGE_INPUT): + return true; + + // We know that images are not supported: + case UseCase.ATTACHING_CONTENT: + await MessageBus.INSTANCE.SendWarning(new( + Icons.Material.Filled.ImageNotSupported, + TB("Images are not supported by the selected provider and model"))); + return false; + + default: + await MessageBus.INSTANCE.SendWarning(new( + Icons.Material.Filled.ImageNotSupported, + TB("Images are not supported yet"))); + return false; + } + } + + if(FileTypeFilter.AllVideos.FilterExtensions.Contains(ext)) + { + await MessageBus.INSTANCE.SendWarning(new( + Icons.Material.Filled.FeaturedVideo, + TB("Videos are not supported yet"))); + return false; + } + + if(FileTypeFilter.AllAudio.FilterExtensions.Contains(ext)) + { + await MessageBus.INSTANCE.SendWarning(new( + Icons.Material.Filled.AudioFile, + TB("Audio files are not supported yet"))); + return false; + } + + return true; + } + + /// + /// Validates that the file is a supported image format and sends appropriate MessageBus notifications when invalid. + /// + /// The file path to validate. + /// True if valid image, false if invalid (error already sent via MessageBus). + public static async Task IsImageExtensionValidWithNotifyAsync(string filePath) + { + var ext = Path.GetExtension(filePath).TrimStart('.'); + if (string.IsNullOrWhiteSpace(ext)) + { + await MessageBus.INSTANCE.SendError(new( + Icons.Material.Filled.ImageNotSupported, + TB("File has no extension"))); + return false; + } + + if (!Array.Exists(FileTypeFilter.AllImages.FilterExtensions, x => x.Equals(ext, StringComparison.OrdinalIgnoreCase))) + { + await MessageBus.INSTANCE.SendError(new( + Icons.Material.Filled.ImageNotSupported, + TB("Unsupported image format"))); + return false; + } + + return true; + } +} diff --git a/app/MindWork AI Studio/Tools/Validation/ProviderValidation.cs b/app/MindWork AI Studio/Tools/Validation/ProviderValidation.cs index aa6217b0..3b074ba9 100644 --- a/app/MindWork AI Studio/Tools/Validation/ProviderValidation.cs +++ b/app/MindWork AI Studio/Tools/Validation/ProviderValidation.cs @@ -70,7 +70,7 @@ public sealed class ProviderValidation public string? ValidatingModel(Model model) { - if(this.GetProvider() is LLMProviders.SELF_HOSTED && this.GetHost() == Host.LLAMACPP) + if(this.GetProvider() is LLMProviders.SELF_HOSTED && this.GetHost() == Host.LLAMA_CPP) return null; if (model == default) diff --git a/app/MindWork AI Studio/packages.lock.json b/app/MindWork AI Studio/packages.lock.json index c36716e7..6a315a34 100644 --- a/app/MindWork AI Studio/packages.lock.json +++ b/app/MindWork AI Studio/packages.lock.json @@ -4,16 +4,14 @@ "net9.0": { "CodeBeam.MudBlazor.Extensions": { "type": "Direct", - "requested": "[8.2.5, )", - "resolved": "8.2.5", - "contentHash": "zZ2zFQeGAqrT0rCE8ZlfnchBUk8IEwFVgZ2mWVHy8EfAQHvgUXHvc6l/t51n1Wx9DMP8beWRDTM6nO1kfYAXZg==", + "requested": "[8.3.0, )", + "resolved": "8.3.0", + "contentHash": "kp42Wmz4UroTbrpb5Ak8U/VYbdxg+35W8gg4Q4SOQMV1GgSWRHfoDf0gXVEEW9Lsx3/wZgzxvGwcs3brhQbZQg==", "dependencies": { "BuildBundlerMinifier": "3.2.449", - "CsvHelper": "33.0.1", - "Microsoft.AspNetCore.Components": "9.0.10", - "Microsoft.AspNetCore.Components.Web": "9.0.10", - "MudBlazor": "8.0.0", - "ZXing.Net": "0.16.9" + "Microsoft.AspNetCore.Components": "9.0.11", + "Microsoft.AspNetCore.Components.Web": "9.0.11", + "MudBlazor": "8.0.0" } }, "HtmlAgilityPack": { @@ -24,9 +22,9 @@ }, "LuaCSharp": { "type": "Direct", - "requested": "[0.4.2, )", - "resolved": "0.4.2", - "contentHash": "wS0hp7EFx+llJ/U/7Ykz4FSmQf8DH4mNejwo5/h1KuFyguzGZbKhTO22X54pXnuqa5cIKfEfQ29dluHHnCX05Q==" + "requested": "[0.5.1, )", + "resolved": "0.5.1", + "contentHash": "VJ/ibHuMEgsxja+qalzb3szYGhpN7/ZCiJJWw1zBGEb3Xd43MWNrbXSsUMdxJudTdmYaLMe3wjHZjxdw29zbUg==" }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Direct", @@ -45,9 +43,9 @@ }, "MudBlazor": { "type": "Direct", - "requested": "[8.12.0, )", - "resolved": "8.12.0", - "contentHash": "ZwgHPt2DwiQoFeP8jxPzNEsUmJF17ljtospVH+uMUKUKpklz6jEkdE5vNs7PnHaPH9HEbpFEQgJw8QPlnFZjsQ==", + "requested": "[8.15.0, )", + "resolved": "8.15.0", + "contentHash": "iOJEnQ6tYGQPfPJaUazyC8H6pcczgaMX7vhUzrJPpB0WqEXNozwMfSzoOe2/JZmVWJcUfYZgKBeBU2Z27XY7Sw==", "dependencies": { "Microsoft.AspNetCore.Components": "9.0.1", "Microsoft.AspNetCore.Components.Web": "9.0.1", @@ -66,11 +64,11 @@ }, "ReverseMarkdown": { "type": "Direct", - "requested": "[4.7.1, )", - "resolved": "4.7.1", - "contentHash": "Tz8yJXg8J1O9xJn6fXzjeEcLTYjfwbauCGwK4f/dpxOOpo3iniXIggmRlJ7F91yHJPB0Gm4lk1/qV0Jxip4a8A==", + "requested": "[5.0.0, )", + "resolved": "5.0.0", + "contentHash": "Zw7ODMO/P8b4ua9qFdsmZPkPmYGCcSfwhKo8+81PCS0e6P21c9sOlYwVJ3MCEWZAGW+CXJBdF3FKtXKWZWzFTg==", "dependencies": { - "HtmlAgilityPack": "1.12.1" + "HtmlAgilityPack": "1.12.4" } }, "BuildBundlerMinifier": { @@ -78,11 +76,6 @@ "resolved": "3.2.449", "contentHash": "uA9sYDy4VepL3xwzBTLcP2LyuVYMt0ZIT3gaSiXvGoX15Ob+rOP+hGydhevlSVd+rFo+Y+VQFEHDuWU8HBW+XA==" }, - "CsvHelper": { - "type": "Transitive", - "resolved": "33.0.1", - "contentHash": "fev4lynklAU2A9GVMLtwarkwaanjSYB4wUqO2nOJX5hnzObORzUqVLe+bDYCUyIIRQM4o5Bsq3CcyJR89iMmEQ==" - }, "Markdig": { "type": "Transitive", "resolved": "0.41.3", @@ -90,65 +83,65 @@ }, "Microsoft.AspNetCore.Authorization": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "odY40/4vXt1tHeuc89zjEPfx0i0c2jurKW9r884v92i6BGasJkCKTtnIGIREBqnTn+HB4uZLipOdWG/GczQwnQ==", + "resolved": "9.0.11", + "contentHash": "VtzQJnpvemh+n4jjMJR+XWiupCWu+Em822orJIFF9jXRfrJET1fBTo6yWqNFnQQKqtvQ3E4Vrjq0N/bHdZR25w==", "dependencies": { - "Microsoft.AspNetCore.Metadata": "9.0.10", - "Microsoft.Extensions.Logging.Abstractions": "9.0.10", - "Microsoft.Extensions.Options": "9.0.10" + "Microsoft.AspNetCore.Metadata": "9.0.11", + "Microsoft.Extensions.Logging.Abstractions": "9.0.11", + "Microsoft.Extensions.Options": "9.0.11" } }, "Microsoft.AspNetCore.Components": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "yodHFmpceXlUrWJ53OgzWyoZWvxNFtz8pGAeDXYenZau1UD5nR2uNGMt1QeeA/3LwysnR1JehndthS587P5GrQ==", + "resolved": "9.0.11", + "contentHash": "HIMOsBnuhcTNWBnCyugRHVgrh4iYfIM2Hl+8+8SQ6wrEIk+I2fUKa8USwV8XaMvZsjyJD7fPHaldAPoR9BNAVA==", "dependencies": { - "Microsoft.AspNetCore.Authorization": "9.0.10", - "Microsoft.AspNetCore.Components.Analyzers": "9.0.10" + "Microsoft.AspNetCore.Authorization": "9.0.11", + "Microsoft.AspNetCore.Components.Analyzers": "9.0.11" } }, "Microsoft.AspNetCore.Components.Analyzers": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "VWSbgP3XaUYdt8JwUOOyx64JI6dLgClYRyiJ6+XcuC/2OW0eKSee3VJwq/1jutZqkAzyBjQ/gpDw7BXmbhrlVA==" + "resolved": "9.0.11", + "contentHash": "7345cqEUev15rfdBeoBmYtUFrdHyYP/FVUbva3Q66eFTT0UuaykqWPtHmnv8R8GJZ9xntMxKhmqhySZTnth7sQ==" }, "Microsoft.AspNetCore.Components.Forms": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "wVyZxxu8C/P0h4QifYEsVJ4AGWOd9oPtmHa0cUbG43JJ8p1oDu9pvZucJc0MjE7GlX/vmr/HntyvkGN9geL6cg==", + "resolved": "9.0.11", + "contentHash": "emoJb7TUrOy27stNXcXv+WsyItn0Qhe4gMcZHtfIfcnErRjN2YOotCAKWezBeKvYWqaV28qsDpjxvjjcANxZGw==", "dependencies": { - "Microsoft.AspNetCore.Components": "9.0.10" + "Microsoft.AspNetCore.Components": "9.0.11" } }, "Microsoft.AspNetCore.Components.Web": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "1yay2fD17JGdSx/U1eeke8ONd0xuJJgpYVk0OKpOaomULRPAP/XTk4IUb4JNpoVhKEoM25y7R/RSXO2So7YTBA==", + "resolved": "9.0.11", + "contentHash": "wU9oVKqHfP4euIpRiRHLVkmhjFXctOvRDHOMUdBRnUErUua+fE6KsIRuBvUKla6tIql9sS58wbETZnjZpnX0lw==", "dependencies": { - "Microsoft.AspNetCore.Components": "9.0.10", - "Microsoft.AspNetCore.Components.Forms": "9.0.10", - "Microsoft.Extensions.DependencyInjection": "9.0.10", - "Microsoft.Extensions.Primitives": "9.0.10", - "Microsoft.JSInterop": "9.0.10" + "Microsoft.AspNetCore.Components": "9.0.11", + "Microsoft.AspNetCore.Components.Forms": "9.0.11", + "Microsoft.Extensions.DependencyInjection": "9.0.11", + "Microsoft.Extensions.Primitives": "9.0.11", + "Microsoft.JSInterop": "9.0.11" } }, "Microsoft.AspNetCore.Metadata": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "JY5XyecFnIvCMZrtUaI2IrZY/SYidTqTN7H+tXmXxdGlvRGGnf2uUKH47MJu9poJ/raK4SWK5uZQwhd21T2WFw==" + "resolved": "9.0.11", + "contentHash": "O0HzG5utNH6ihO632k0nHFZa8iNDmGphdgWWqeDSdN/T9n0ZOXlA5+q77DxY3nHTjNfA0KMfpykIhEI+Wmzosg==" }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "iEtXCkNd5XhjNJAOb/wO4IhDRdLIE2CsPxZggZQWJ/q2+sa8dmEPC393nnsiqdH8/4KV8Xn25IzgKPR1UEQ0og==", + "resolved": "9.0.11", + "contentHash": "UquyDzvz0EneIQrrU67GJkIgynS+VD7t+RDtNv6VgKMOFrLBjldn6hzlXppGGecFMvAkMTqn4T8RYvzw7j7fQA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "r9waLiOPe9ZF1PvzUT+RDoHvpMmY8MW+lb4lqjYGObwKpnyPMLI3odVvlmshwuZcdoHynsGWOrCPA0hxZ63lIA==" + "resolved": "9.0.11", + "contentHash": "+ZxxZzcVU+IEzq12GItUzf/V3mEc5nSLiXijwvDc4zyhbjvSZZ043giSZqGnhakrjwRWjkerIHPrRwm9okEIpw==" }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", @@ -176,19 +169,19 @@ }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "MFUPv/nN1rAQ19w43smm6bbf0JDYN/1HEPHoiMYY50pvDMFpglzWAuoTavByDmZq7UuhjaxwrET3joU69ZHoHQ==", + "resolved": "9.0.11", + "contentHash": "UKWFTDwtZQIoypyt1YPVsxTnDK+0sKn26+UeSGeNlkRQddrkt9EC6kP4g94rgO/WOZkz94bKNlF1dVZN3QfPFQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "zMNABt8eBv0B0XrWjFy9nZNgddavaOeq3ZdaD5IlHhRH65MrU7HM+Hd8GjWE3e2VDGFPZFfSAc6XVXC17f9fOA==", + "resolved": "9.0.11", + "contentHash": "HX4M3BLkW1dtByMKHDVq6r7Jy6e4hf8NDzHpIgz7C8BtYk9JQHhfYX5c1UheQTD5Veg1yBhz/cD9C8vtrGrk9w==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.10", - "Microsoft.Extensions.Primitives": "9.0.10" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", + "Microsoft.Extensions.Primitives": "9.0.11" } }, "Microsoft.Extensions.Primitives": { @@ -198,13 +191,8 @@ }, "Microsoft.JSInterop": { "type": "Transitive", - "resolved": "9.0.10", - "contentHash": "+Zxxwp8rspdxq6uIkaEtqWW/vljDr2tLiLuhPUYV0+CzeuFpuwcKJ95iz6L9xbakxqjZN3WjmJBtqWZfB+zC5A==" - }, - "ZXing.Net": { - "type": "Transitive", - "resolved": "0.16.9", - "contentHash": "7WaVMHklpT3Ye2ragqRIwlFRsb6kOk63BOGADV0fan3ulVfGLUYkDi5yNUsZS/7FVNkWbtHAlDLmu4WnHGfqvQ==" + "resolved": "9.0.11", + "contentHash": "5w/W57cXjt8Ugp5COQCsv1R/wt7KzZXjbTqK4AFvgsxqmv1DFJ6OzagzJmwgp6unczFuff6t8wNi+URePV6PYQ==" }, "sharedtools": { "type": "Project" diff --git a/app/MindWork AI Studio/wwwroot/app.js b/app/MindWork AI Studio/wwwroot/app.js index aa6b8e2b..8a4e036d 100644 --- a/app/MindWork AI Studio/wwwroot/app.js +++ b/app/MindWork AI Studio/wwwroot/app.js @@ -25,4 +25,133 @@ window.clearDiv = function (divName) { window.scrollToBottom = function(element) { element.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'nearest' }); -} \ No newline at end of file +} + +window.playSound = function(soundPath) { + try { + const audio = new Audio(soundPath); + audio.play().catch(error => { + console.warn('Failed to play sound effect:', error); + }); + } catch (error) { + console.warn('Error creating audio element:', error); + } +}; + +let mediaRecorder; +let actualRecordingMimeType; +let changedMimeType = false; +let pendingChunkUploads = 0; + +window.audioRecorder = { + start: async function (dotnetRef, desiredMimeTypes = []) { + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + + // Play start recording sound effect: + window.playSound('/sounds/start_recording.ogg'); + + // When only one mime type is provided as a string, convert it to an array: + if (typeof desiredMimeTypes === 'string') { + desiredMimeTypes = [desiredMimeTypes]; + } + + // Log sent mime types for debugging: + console.log('Audio recording - requested mime types: ', desiredMimeTypes); + + let mimeTypes = desiredMimeTypes.filter(type => typeof type === 'string' && type.trim() !== ''); + + // Next, we have to ensure that we have some default mime types to check as well. + // In case the provided list does not contain these, we append them: + // Use provided mime types or fallback to a default list: + const defaultMimeTypes = [ + 'audio/webm', + 'audio/ogg', + 'audio/mp4', + 'audio/mpeg', + ''// Fallback to browser default + ]; + + defaultMimeTypes.forEach(type => { + if (!mimeTypes.includes(type)) { + mimeTypes.push(type); + } + }); + + console.log('Audio recording - final mime types to check (included defaults): ', mimeTypes); + + // Find the first supported mime type: + actualRecordingMimeType = mimeTypes.find(type => + type === '' || MediaRecorder.isTypeSupported(type) + ) || ''; + + console.log('Audio recording - the browser selected the following mime type for recording: ', actualRecordingMimeType); + const options = actualRecordingMimeType ? { mimeType: actualRecordingMimeType } : {}; + mediaRecorder = new MediaRecorder(stream, options); + + // In case the browser changed the mime type: + actualRecordingMimeType = mediaRecorder.mimeType; + console.log('Audio recording - actual mime type used by the browser: ', actualRecordingMimeType); + + // Check the list of desired mime types against the actual one: + if (!desiredMimeTypes.includes(actualRecordingMimeType)) { + changedMimeType = true; + console.warn(`Audio recording - requested mime types ('${desiredMimeTypes.join(', ')}') do not include the actual mime type used by the browser ('${actualRecordingMimeType}').`); + } else { + changedMimeType = false; + } + + // Reset the pending uploads counter: + pendingChunkUploads = 0; + + // Stream each chunk directly to .NET as it becomes available: + mediaRecorder.ondataavailable = async (event) => { + if (event.data.size > 0) { + pendingChunkUploads++; + try { + const arrayBuffer = await event.data.arrayBuffer(); + const uint8Array = new Uint8Array(arrayBuffer); + await dotnetRef.invokeMethodAsync('OnAudioChunkReceived', uint8Array); + } catch (error) { + console.error('Error sending audio chunk to .NET:', error); + } finally { + pendingChunkUploads--; + } + } + }; + + mediaRecorder.start(3000); // read the recorded data in 3-second chunks + return actualRecordingMimeType; + }, + + stop: async function () { + return new Promise((resolve) => { + + // Add an event listener to handle the stop event: + mediaRecorder.onstop = async () => { + + // Wait for all pending chunk uploads to complete before finalizing: + console.log(`Audio recording - waiting for ${pendingChunkUploads} pending uploads.`); + while (pendingChunkUploads > 0) { + await new Promise(r => setTimeout(r, 10)); // wait 10 ms before checking again + } + + console.log('Audio recording - all chunks uploaded, finalizing.'); + + // Play stop recording sound effect: + window.playSound('/sounds/stop_recording.ogg'); + + // Stop all tracks to release the microphone: + mediaRecorder.stream.getTracks().forEach(track => track.stop()); + + // No need to process data here anymore, just signal completion: + resolve({ + mimeType: actualRecordingMimeType, + changedMimeType: changedMimeType, + }); + }; + + // Finally, stop the recording (which will actually trigger the onstop event): + mediaRecorder.stop(); + }); + } +}; \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.10.0.md b/app/MindWork AI Studio/wwwroot/changelog/v0.10.0.md new file mode 100644 index 00000000..7bb886f9 --- /dev/null +++ b/app/MindWork AI Studio/wwwroot/changelog/v0.10.0.md @@ -0,0 +1,25 @@ +# v0.10.0, build 230 (2025-12-31 14:04 UTC) +- Added support for newer Mistral models (Mistral 3, Voxtral, and Magistral). +- Added support for the new OpenAI model GPT 5.2. +- Added support for OpenRouter as LLM and embedding provider. +- Added support for multimodal processing (documents and images, for now) when the selected LLM supports it. +- Added a description field to local data sources (preview feature) so that the data selection agent has more information about which data each local source contains when selecting data sources. +- Added the ability to use file attachments (including images) in chat. This is the initial implementation of this feature. We will continue to develop this feature and refine it further based on user feedback. Many thanks to Sabrina `Sabrina-devops` for this wonderful contribution. +- Improved the document analysis assistant (in preview) by adding descriptions to the different sections. +- Improved the document analysis assistant (in preview) by allowing users to use images as input files in addition to documents. +- Improved the document preview dialog for the document analysis assistant (in preview), providing Markdown, image and plain text views for attached files. +- Improved the Pandoc handling for the document analysis assistant (in preview) and file attachments in chat. When Pandoc is not installed and users attempt to attach files, users are now prompted to install Pandoc first. +- Improved the ID handling for configuration plugins. +- Improved error handling, logging, and code quality. +- Improved error handling for the Microsoft Word export. +- Improved the file reading, e.g. for the translation, summarization, and legal assistants, by performing the Pandoc validation in the first step. This prevents unnecessary selection of files that cannot be processed. +- Improved the file selection for file attachments in chat and the assistant file loading by filtering out audio files. Audio attachments are not yet supported. +- Improved the developer experience by automating localization updates in the filesystem for the selected language in the localization assistant. +- Improved the file selection so that users can now select multiple files at the same time. This is useful, for example, for document analysis (in preview) or adding file attachments to the chat. +- Fixed a bug in the local data sources info dialog (preview feature) for data directories that could cause the app to crash. The error was caused by a background thread producing data while the frontend attempted to display it. +- Fixed a visual bug where a function's preview status was misaligned. You might have seen it in document analysis or the ERI server assistant. +- Fixed a rare bug in the Microsoft Word export for huge documents. +- Fixed a bug in the chat options that occurred when selecting default data sources. Under certain conditions, selecting data sources caused an error that required restarting the app. This preview-only feature (RAG preview) had not been released yet. +- Fixed a bug in the chat template selection where the "No chat template" entry could not be localized, causing English text to appear in languages such as German. This behavior has now been fixed. +- Fixed a workspace-related bug where disabling workspaces completely prevented access to the workspace settings. Workspace settings now appear next to chat settings in this case. Thanks to Paul `PaulKoudelka` for reporting. +- Upgraded dependencies such as Rust, MudBlazor, and others. \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.9.55.md b/app/MindWork AI Studio/wwwroot/changelog/v0.9.55.md deleted file mode 100644 index a47827bb..00000000 --- a/app/MindWork AI Studio/wwwroot/changelog/v0.9.55.md +++ /dev/null @@ -1,13 +0,0 @@ -# v0.9.55, build 230 (2025-12-xx xx:xx UTC) -- Added functionality to download Qdrant and execute it as a background sidecar. -- Added support for newer Mistral models (Mistral 3, Voxtral, and Magistral). -- Added a description field to local data sources (preview feature) so that the data selection agent has more information about which data each local source contains when selecting data sources. -- Added the ability to use file attachments in chat. This is the initial implementation of this feature. We will continue to develop this feature and refine it further based on user feedback. Many thanks to Sabrina `Sabrina-devops` for this wonderful contribution. -- Improved the document analysis assistant (in preview) by adding descriptions to the different sections. -- Improved the document preview dialog for the document analysis assistant (in preview), providing Markdown and plain text views for attached files. -- Improved the ID handling for configuration plugins. -- Improved error handling, logging, and code quality. -- Improved error handling for Microsoft Word export. -- Fixed a bug in the local data sources info dialog (preview feature) for data directories that could cause the app to crash. The error was caused by a background thread producing data while the frontend attempted to display it. -- Fixed a visual bug where a function's preview status was misaligned. You might have seen it in document analysis or the ERI server assistant. -- Fixed a rare bug in the Microsoft Word export for huge documents. diff --git a/app/MindWork AI Studio/wwwroot/changelog/v26.1.1.md b/app/MindWork AI Studio/wwwroot/changelog/v26.1.1.md new file mode 100644 index 00000000..5f2604dd --- /dev/null +++ b/app/MindWork AI Studio/wwwroot/changelog/v26.1.1.md @@ -0,0 +1,12 @@ +# v26.1.1, build 231 (2026-01-11 15:53 UTC) +- Added the option to attach files, including images, to chat templates. You can also define templates with file attachments through a configuration plugin. These file attachments aren’t copied—they’re re-read every time. That means the AI will pick up any updates you make to those files. +- Added the option to use source code files in chats and document analysis. This supports software development workflows. +- Added a preview feature that lets you record your own voice for transcription. The feature remains in development and appears only when the preview feature is enabled. +- Added the option to configure transcription providers (for example, using Whisper models). As usual, there can be local as well as cloud models configured. This option is part of the transcription preview and remains hidden until the preview is activated or the feature gets released. Transcription providers can be configured through configuration plugins as well. +- Added an option to the app settings to select a provider for transcribing dictated text. If no provider is selected, dictation and text transcription are disabled. +- Added the option to configure embedding providers through a config plugin and distribute them within an organization. +- Improved the app versioning. Starting in 2026, each version number includes the year, followed by the month. The last digit shows the release number for that month. For example, version `26.1.1` is the first release in January 2026. +- Fixed a bug in the profile selection where the "Use no profile" entry could not be localized, causing English text to appear in languages such as German. This behavior has now been fixed. +- Fixed a bug in the provider dialogs (LLMs, embeddings, and transcriptions) when editing a provider. In cases where an error had to be displayed, a non-localized message in English was used. +- Fixed a very rare bug in the provider dialogs (LLMs, embeddings, and transcriptions) where a validation error appeared if the API key could not be read from the operating system, but the error did not clear after the user changed the API key. +- Upgraded dependencies. \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/changelog/v26.1.2.md b/app/MindWork AI Studio/wwwroot/changelog/v26.1.2.md new file mode 100644 index 00000000..a861ccb0 --- /dev/null +++ b/app/MindWork AI Studio/wwwroot/changelog/v26.1.2.md @@ -0,0 +1,3 @@ +# v26.1.2, build 232 (2026-01-xx xx:xx UTC) +- Added the option to hide specific assistants by configuration plugins. This is useful for enterprise environments in organizations. +- Fixed a logging bug that prevented log events from being recorded in some cases. \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/sounds/start_recording.ogg b/app/MindWork AI Studio/wwwroot/sounds/start_recording.ogg new file mode 100644 index 00000000..b67bb65e Binary files /dev/null and b/app/MindWork AI Studio/wwwroot/sounds/start_recording.ogg differ diff --git a/app/MindWork AI Studio/wwwroot/sounds/stop_recording.ogg b/app/MindWork AI Studio/wwwroot/sounds/stop_recording.ogg new file mode 100644 index 00000000..c2332408 Binary files /dev/null and b/app/MindWork AI Studio/wwwroot/sounds/stop_recording.ogg differ diff --git a/app/MindWork AI Studio/wwwroot/sounds/transcription_done.ogg b/app/MindWork AI Studio/wwwroot/sounds/transcription_done.ogg new file mode 100644 index 00000000..398acccc Binary files /dev/null and b/app/MindWork AI Studio/wwwroot/sounds/transcription_done.ogg differ diff --git a/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css b/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css index 21f5abee..3369be87 100755 --- a/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css +++ b/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css @@ -1 +1 @@ -.mud-combobox{margin:0;padding:0;position:relative;list-style:none;}.mud-combobox.mud-combobox-padding{padding-top:8px;padding-bottom:8px;}.mud-combobox-item{width:100%;display:flex;position:relative;box-sizing:border-box;text-align:start;align-items:center;padding-top:8px;padding-bottom:8px;justify-content:flex-start;text-decoration:none;outline:none;min-height:48px;}.mud-combobox-item.mud-combobox-item-comfort{padding-top:4px;padding-bottom:4px;min-height:40px;}.mud-combobox-item.mud-combobox-item-slim{padding-top:2px;padding-bottom:2px;min-height:32px;}.mud-combobox-item.mud-combobox-item-superslim{padding-top:0;padding-bottom:0;min-height:24px;}.mud-combobox-item.mud-combobox-item-disabled{color:var(--mud-palette-action-disabled) !important;cursor:default !important;pointer-events:none !important;}.mud-combobox-item.mud-combobox-item-disabled .mud-combobox-item-icon{color:var(--mud-palette-action-disabled) !important;}.mud-combobox-item-clickable{color:inherit;border:0;cursor:pointer;margin:0;outline:0;user-select:none;border-radius:0;vertical-align:middle;background-color:transparent;-webkit-appearance:none;-webkit-tap-highlight-color:transparent;transition:background-color 150ms cubic-bezier(.4,0,.2,1) 0ms;}.mud-combobox-item-clickable:hover{background-color:var(--mud-palette-action-default-hover);}.mud-combobox-item-gutters{padding-left:16px;padding-right:16px;}.mud-combobox-item-text{flex:1 1 auto;min-width:0;margin-top:4px;margin-bottom:4px;padding-inline-start:8px;padding-inline-end:8px;}.mud-combobox-item-text-inset{padding-left:56px;padding-inline-start:56px;padding-inline-end:unset;}.mud-combobox-item-icon{color:var(--mud-palette-action-default);display:inline-flex;flex-shrink:0;padding-inline-start:8px;padding-inline-end:8px;margin-inline-start:-4px;margin-inline-end:4px;}.mud-combobox-item-multiselect{max-height:32px;}.mud-combobox-item-multiselect.mud-combobox-item-multiselect-checkbox{padding-inline-end:16px;}.mud-combobox-subheader{color:var(--mud-palette-action-default);background-color:var(--mud-palette-background);font-size:.875rem;box-sizing:border-box;list-style:none;font-weight:500;padding-top:16px;padding-bottom:16px;}.mud-combobox-subheader-secondary-background{background-color:var(--mud-palette-background-gray);}.mud-combobox-subheader-gutters{padding-left:16px;padding-right:16px;}.mud-combobox-subheader-inset{padding-left:72px;padding-inline-start:72px;padding-inline-end:unset;}.mud-combobox-subheader-sticky{top:-8px;z-index:1;position:sticky;}.mud-combobox-subheader-sticky.mud-combobox-subheader-sticky-dense{top:0;}.mud-combobox-item-hilight{background-color:var(--mud-palette-background-gray);}.mud-combobox-item-hilight{background-color:var(--mud-palette-lines-default) !important;}.mud-combobox-item-bordered{border-left:4px solid var(--mud-palette-lines-default);padding-inline-start:12px;}.mud-combobox-item-bordered-primary{border-left:4px solid var(--mud-palette-primary);padding-inline-start:12px;}.mud-combobox-item-bordered-secondary{border-left:4px solid var(--mud-palette-secondary);padding-inline-start:12px;}.mud-combobox-item-bordered-tertiary{border-left:4px solid var(--mud-palette-tertiary);padding-inline-start:12px;}.mud-combobox-item-bordered-info{border-left:4px solid var(--mud-palette-info);padding-inline-start:12px;}.mud-combobox-item-bordered-success{border-left:4px solid var(--mud-palette-success);padding-inline-start:12px;}.mud-combobox-item-bordered-warning{border-left:4px solid var(--mud-palette-warning);padding-inline-start:12px;}.mud-combobox-item-bordered-error{border-left:4px solid var(--mud-palette-error);padding-inline-start:12px;}.mud-combobox-item-bordered-dark{border-left:4px solid var(--mud-palette-dark);padding-inline-start:12px;}.mud-combobox-item-nested-background{background-color:var(--mud-palette-background-gray);}.mud-combobox-item-avatar{min-width:56px;flex-shrink:0;}.mud-combobox-highlighter{background-color:transparent;font-weight:bold;text-decoration:underline;}.mud-gallery-selected-toolbox{left:0;right:0;height:56px;width:100%;background-color:rgba(0,0,0,.6);}.mud-gallery-selected-toolbox.gallery-toolbox-top{top:0;}.mud-gallery-selected-toolbox.gallery-toolbox-bottom{bottom:0;}.mud-page{display:grid;box-sizing:border-box;width:100%;}.mud-page.mud-page-height-full{min-height:100vh;}.mud-page.mud-page-height-full-without-appbar{min-height:calc(100vh - var(--mud-appbar-height));}.mud-page.mud-page-column-2{grid-template-columns:repeat(2,50%);}.mud-page.mud-page-column-3{grid-template-columns:repeat(3,33.33333%);}.mud-page.mud-page-column-4{grid-template-columns:repeat(4,25%);}.mud-page.mud-page-column-5{grid-template-columns:repeat(5,20%);}.mud-page.mud-page-column-6{grid-template-columns:repeat(6,16.66667%);}.mud-page.mud-page-column-7{grid-template-columns:repeat(7,14.28571%);}.mud-page.mud-page-column-8{grid-template-columns:repeat(8,12.5%);}.mud-page.mud-page-column-9{grid-template-columns:repeat(9,11.11111%);}.mud-page.mud-page-column-10{grid-template-columns:repeat(10,10%);}.mud-page.mud-page-column-11{grid-template-columns:repeat(11,9.09091%);}.mud-page.mud-page-column-12{grid-template-columns:repeat(12,8.33333%);}.mud-page.mud-page-row-2{grid-template-rows:repeat(2,50%);}.mud-page.mud-page-row-3{grid-template-rows:repeat(3,33.33333%);}.mud-page.mud-page-row-4{grid-template-rows:repeat(4,25%);}.mud-page.mud-page-row-5{grid-template-rows:repeat(5,20%);}.mud-page.mud-page-row-6{grid-template-rows:repeat(6,16.66667%);}.mud-page.mud-page-row-7{grid-template-rows:repeat(7,14.28571%);}.mud-page.mud-page-row-8{grid-template-rows:repeat(8,12.5%);}.mud-page.mud-page-row-9{grid-template-rows:repeat(9,11.11111%);}.mud-page.mud-page-row-10{grid-template-rows:repeat(10,10%);}.mud-page.mud-page-row-11{grid-template-rows:repeat(11,9.09091%);}.mud-page.mud-page-row-12{grid-template-rows:repeat(12,8.33333%);}.mud-section{display:inline-grid;overflow:auto;}.mud-section.mud-section-col-start-1{grid-column-start:1;}.mud-section.mud-section-col-start-2{grid-column-start:2;}.mud-section.mud-section-col-start-3{grid-column-start:3;}.mud-section.mud-section-col-start-4{grid-column-start:4;}.mud-section.mud-section-col-start-5{grid-column-start:5;}.mud-section.mud-section-col-start-6{grid-column-start:6;}.mud-section.mud-section-col-start-7{grid-column-start:7;}.mud-section.mud-section-col-start-8{grid-column-start:8;}.mud-section.mud-section-col-start-9{grid-column-start:9;}.mud-section.mud-section-col-start-10{grid-column-start:10;}.mud-section.mud-section-col-start-11{grid-column-start:11;}.mud-section.mud-section-col-start-12{grid-column-start:12;}.mud-section.mud-section-col-end-1{grid-column-end:1;}.mud-section.mud-section-col-end-2{grid-column-end:2;}.mud-section.mud-section-col-end-3{grid-column-end:3;}.mud-section.mud-section-col-end-4{grid-column-end:4;}.mud-section.mud-section-col-end-5{grid-column-end:5;}.mud-section.mud-section-col-end-6{grid-column-end:6;}.mud-section.mud-section-col-end-7{grid-column-end:7;}.mud-section.mud-section-col-end-8{grid-column-end:8;}.mud-section.mud-section-col-end-9{grid-column-end:9;}.mud-section.mud-section-col-end-10{grid-column-end:10;}.mud-section.mud-section-col-end-11{grid-column-end:11;}.mud-section.mud-section-col-end-12{grid-column-end:12;}.mud-section.mud-section-col-end-13{grid-column-end:13;}.mud-section.mud-section-row-start-1{grid-row-start:1;}.mud-section.mud-section-row-start-2{grid-row-start:2;}.mud-section.mud-section-row-start-3{grid-row-start:3;}.mud-section.mud-section-row-start-4{grid-row-start:4;}.mud-section.mud-section-row-start-5{grid-row-start:5;}.mud-section.mud-section-row-start-6{grid-row-start:6;}.mud-section.mud-section-row-start-7{grid-row-start:7;}.mud-section.mud-section-row-start-8{grid-row-start:8;}.mud-section.mud-section-row-start-9{grid-row-start:9;}.mud-section.mud-section-row-start-10{grid-row-start:10;}.mud-section.mud-section-row-start-11{grid-row-start:11;}.mud-section.mud-section-row-start-12{grid-row-start:12;}.mud-section.mud-section-row-end-1{grid-row-end:1;}.mud-section.mud-section-row-end-2{grid-row-end:2;}.mud-section.mud-section-row-end-3{grid-row-end:3;}.mud-section.mud-section-row-end-4{grid-row-end:4;}.mud-section.mud-section-row-end-5{grid-row-end:5;}.mud-section.mud-section-row-end-6{grid-row-end:6;}.mud-section.mud-section-row-end-7{grid-row-end:7;}.mud-section.mud-section-row-end-8{grid-row-end:8;}.mud-section.mud-section-row-end-9{grid-row-end:9;}.mud-section.mud-section-row-end-10{grid-row-end:10;}.mud-section.mud-section-row-end-11{grid-row-end:11;}.mud-section.mud-section-row-end-12{grid-row-end:12;}.mud-section.mud-section-row-end-13{grid-row-end:13;}.mud-popup{z-index:2000;overflow:auto;background-color:var(--mud-palette-background);min-height:var(--mud-appbar-height);}.mud-popup.mud-popup-center{height:300px;left:50%;top:50%;transform:translate(-50%,-50%);width:320px;aspect-ratio:1/1;}.mud-range-container{align-items:center;margin:20px 0;}.mud-range-container input::-webkit-slider-thumb{pointer-events:all;position:relative;z-index:1;}.mud-range-container input::-moz-range-thumb{pointer-events:all;position:relative;z-index:10;}.mud-range-container input::-moz-range-track{position:relative;z-index:-1;}.mud-range-container input:last-of-type::-moz-range-track{-moz-appearance:none;}.mud-range-container .mud-slider-input:last-of-type{position:absolute;pointer-events:none;top:0;}.mud-range-container input[type=range]::-webkit-slider-thumb{pointer-events:all;}.mud-range-display{text-align:center;}.mud-signature-pad-container{touch-action:none;}.mud-splitter{display:grid;position:relative;width:100%;}.mud-splitter-content{overflow:auto;}.mud-splitter-thumb ::-webkit-slider-runnable-track{visibility:hidden !important;height:100% !important;}.mud-splitter-thumb ::-moz-range-track{visibility:hidden !important;height:100% !important;}.mud-splitter-track{position:absolute;top:50%;transform:translateY(-50%);height:100%;}.mud-splitter-track.mud-slider{visibility:hidden !important;}.mud-splitter-track.mud-slider .mud-slider-container{height:100% !important;}.mud-splitter-track.mud-slider .mud-slider-input{top:50%;}.mud-splitter-thumb ::-webkit-slider-thumb{visibility:visible !important;appearance:none !important;-webkit-appearance:none !important;top:50% !important;transform:translateY(-50%) !important;height:100% !important;width:8px !important;border:none !important;border-radius:0 !important;cursor:ew-resize !important;}.mud-splitter-thumb-disabled ::-webkit-slider-thumb{cursor:default !important;}.mud-splitter-thumb ::-moz-range-thumb{visibility:visible !important;appearance:none !important;-moz-appearance:none !important;top:50% !important;transform:translateY(-50%) !important;height:100% !important;width:8px !important;border:none !important;border-radius:0 !important;cursor:ew-resize !important;}.mud-splitter-thumb-disabled ::-moz-range-thumb{cursor:default !important;}.mud-stepper-header{min-height:62px;border-radius:var(--mud-default-borderradius);}.mud-stepper-header.mud-stepper-header-non-linear:hover{background-color:var(--mud-palette-action-default-hover);}.mud-stepper-badge{z-index:21;}.mud-switch-m3{cursor:pointer;display:inline-flex;align-items:center;vertical-align:middle;margin-top:4px;margin-bottom:4px;-webkit-tap-highlight-color:transparent;}.mud-switch-m3.mud-disabled{color:var(--mud-palette-text-disabled) !important;cursor:default;}.mud-switch-m3.mud-readonly,.mud-switch-m3 .mud-readonly:hover{cursor:default;background-color:transparent !important;}.mud-switch-span-m3{width:52px;height:32px;display:inline-flex;z-index:0;position:relative;box-sizing:border-box;flex-shrink:0;vertical-align:middle;}.mud-switch-span-m3.mud-switch-child-content-m3{margin-inline-end:12px;}.mud-switch-span-m3 .mud-switch-track-m3{width:52px;height:32px;z-index:-1;transition:opacity 150ms cubic-bezier(.4,0,.2,1) 0ms,background-color 150ms cubic-bezier(.4,0,.2,1) 0ms;border-radius:30px;background-color:var(--mud-palette-background);border:2px solid;}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-default-m3{border-color:var(--mud-palette-text-primary);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-primary-m3{border-color:var(--mud-palette-primary);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-secondary-m3{border-color:var(--mud-palette-secondary);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-tertiary-m3{border-color:var(--mud-palette-tertiary);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-info-m3{border-color:var(--mud-palette-info);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-success-m3{border-color:var(--mud-palette-success);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-warning-m3{border-color:var(--mud-palette-warning);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-error-m3{border-color:var(--mud-palette-error);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-dark-m3{border-color:var(--mud-palette-dark);}.mud-switch-base-m3{padding-top:4px;padding-bottom:4px;padding-inline-start:8px;top:0;left:0;bottom:0;color:#fafafa;z-index:1;position:absolute;transition:left 150ms cubic-bezier(.4,0,.2,1) 0ms,transform 150ms cubic-bezier(.4,0,.2,1) 0ms,background-color 250ms cubic-bezier(.4,0,.2,1) 0ms,box-shadow 250ms cubic-bezier(.4,0,.2,1) 0ms;}.mud-switch-base-m3.mud-switch-base-dense-m3{padding-inline-start:4px;}.mud-switch-base-m3.mud-checked{transform:translateX(20px);padding:4px;}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3{opacity:1;}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-default{background-color:var(--mud-palette-text-primary);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-primary{background-color:var(--mud-palette-primary);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-secondary{background-color:var(--mud-palette-secondary);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-tertiary{background-color:var(--mud-palette-tertiary);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-info{background-color:var(--mud-palette-info);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-success{background-color:var(--mud-palette-success);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-warning{background-color:var(--mud-palette-warning);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-error{background-color:var(--mud-palette-error);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-dark{background-color:var(--mud-palette-dark);}.mud-switch-base-m3.mud-checked .mud-switch-thumb-m3{width:24px;height:24px;box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);border-radius:50%;background-color:var(--mud-palette-background);}.mud-switch-base-m3:hover{background-color:var(--mud-palette-action-default-hover);}.mud-switch-base-m3.mud-switch-disabled{color:var(--mud-palette-gray-default) !important;}.mud-switch-base-m3.mud-switch-disabled+.mud-switch-track-m3{opacity:.12 !important;}.mud-switch-base-m3.mud-switch-disabled:hover,.mud-switch-base-m3.mud-switch-disabled:focus-visible{cursor:default;background-color:transparent !important;}.mud-switch-button-m3{display:flex;align-items:inherit;justify-content:inherit;}.mud-switch-button-m3 .mud-switch-input-m3{top:0;left:0;width:100%;cursor:inherit;height:100%;margin:0;opacity:0;padding:0;z-index:1;position:absolute;}.mud-switch-button-m3 .mud-switch-thumb-m3{width:16px;height:16px;box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);border-radius:50%;}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-default-m3{background-color:var(--mud-palette-text-primary);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-primary-m3{background-color:var(--mud-palette-primary);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-secondary-m3{background-color:var(--mud-palette-secondary);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-tertiary-m3{background-color:var(--mud-palette-tertiary);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-info-m3{background-color:var(--mud-palette-info);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-success-m3{background-color:var(--mud-palette-success);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-warning-m3{background-color:var(--mud-palette-warning);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-error-m3{background-color:var(--mud-palette-error);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-dark-m3{background-color:var(--mud-palette-dark);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-off-icon-m3{width:24px;height:24px;}.mud-wheel{overflow:hidden;min-width:0;flex-grow:1;user-select:none;-webkit-user-select:none;}.mud-wheel-item{width:100%;display:flex;align-content:center;justify-content:center;color:var(--mud-palette-text-secondary);border-radius:var(--mud-default-borderradius);}.mud-wheel-item.mud-wheel-item:hover:not(.mud-disabled){background-color:var(--mud-palette-action-default-hover);}.mud-wheel-item.wheel-item-closest{color:var(--mud-palette-text);}.mud-wheel-item.wheel-item-empty{min-height:32px !important;}.mud-wheel-item.wheel-item-empty.wheel-item-empty-dense{min-height:24px !important;}.mud-wheel-item.wheel-item-empty.wheel-item-empty:hover{background-color:unset;}.mud-wheel-item.mud-disabled{color:var(--mud-palette-text-disabled);}.middle-item{transform:scale(1.2);}.middle-item.mud-disabled{color:var(--mud-palette-text-disabled);}.mud-wheel-border{min-height:2px !important;}.mud-wheel-border.mud-wheel-border-default{background-color:var(--mud-palette-text-primary);}.mud-wheel-border.mud-wheel-border-primary{background-color:var(--mud-palette-primary);}.mud-wheel-border.wheel-border-gradient-primary{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-primary),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-secondary{background-color:var(--mud-palette-secondary);}.mud-wheel-border.wheel-border-gradient-secondary{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-secondary),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-tertiary{background-color:var(--mud-palette-tertiary);}.mud-wheel-border.wheel-border-gradient-tertiary{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-tertiary),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-info{background-color:var(--mud-palette-info);}.mud-wheel-border.wheel-border-gradient-info{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-info),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-success{background-color:var(--mud-palette-success);}.mud-wheel-border.wheel-border-gradient-success{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-success),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-warning{background-color:var(--mud-palette-warning);}.mud-wheel-border.wheel-border-gradient-warning{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-warning),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-error{background-color:var(--mud-palette-error);}.mud-wheel-border.wheel-border-gradient-error{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-error),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-dark{background-color:var(--mud-palette-dark);}.mud-wheel-border.wheel-border-gradient-dark{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-dark),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.wheel-border-gradient-default{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-text-primary),rgba(255,0,0,0));background-color:unset;}.mud-typographym3-display-large{font-family:var(--mud-typographym3-display-large-font);line-height:var(--mud-typographym3-display-large-line-height);font-size:var(--mud-typographym3-display-large-size);letter-spacing:var(--mud-typographym3-display-large-tracking);font-weight:var(--mud-typographym3-display-large-weight);}.mud-typographym3-display-medium{font-family:var(--mud-typographym3-display-medium-font);line-height:var(--mud-typographym3-display-medium-line-height);font-size:var(--mud-typographym3-display-medium-size);letter-spacing:var(--mud-typographym3-display-medium-tracking);font-weight:var(--mud-typographym3-display-medium-weight);}.mud-typographym3-display-small{font-family:var(--mud-typographym3-display-small-font);line-height:var(--mud-typographym3-display-small-line-height);font-size:var(--mud-typographym3-display-small-size);letter-spacing:var(--mud-typographym3-display-small-tracking);font-weight:var(--mud-typographym3-display-small-weight);}.mud-typographym3-headline-large{font-family:var(--mud-typographym3-headline-large-font);line-height:var(--mud-typographym3-headline-large-line-height);font-size:var(--mud-typographym3-headline-large-size);letter-spacing:var(--mud-typographym3-headline-large-tracking);font-weight:var(--mud-typographym3-headline-large-weight);}.mud-typographym3-headline-medium{font-family:var(--mud-typographym3-headline-medium-font);line-height:var(--mud-typographym3-headline-medium-line-height);font-size:var(--mud-typographym3-headline-medium-size);letter-spacing:var(--mud-typographym3-headline-medium-tracking);font-weight:var(--mud-typographym3-headline-medium-weight);}.mud-typographym3-headline-small{font-family:var(--mud-typographym3-headline-small-font);line-height:var(--mud-typographym3-headline-small-line-height);font-size:var(--mud-typographym3-headline-small-size);letter-spacing:var(--mud-typographym3-headline-small-tracking);font-weight:var(--mud-typographym3-headline-small-weight);}.mud-typographym3-title-large{font-family:var(--mud-typographym3-title-large-font);line-height:var(--mud-typographym3-title-large-line-height);font-size:var(--mud-typographym3-title-large-size);letter-spacing:var(--mud-typographym3-title-large-tracking);font-weight:var(--mud-typographym3-title-large-weight);}.mud-typographym3-title-medium{font-family:var(--mud-typographym3-title-medium-font);line-height:var(--mud-typographym3-title-medium-line-height);font-size:var(--mud-typographym3-title-medium-size);letter-spacing:var(--mud-typographym3-title-medium-tracking);font-weight:var(--mud-typographym3-title-medium-weight);}.mud-typographym3-title-small{font-family:var(--mud-typographym3-title-small-font);line-height:var(--mud-typographym3-title-small-line-height);font-size:var(--mud-typographym3-title-small-size);letter-spacing:var(--mud-typographym3-title-small-tracking);font-weight:var(--mud-typographym3-title-small-weight);}.mud-typographym3-body-large{font-family:var(--mud-typographym3-body-large-font);line-height:var(--mud-typographym3-body-large-line-height);font-size:var(--mud-typographym3-body-large-size);letter-spacing:var(--mud-typographym3-body-large-tracking);font-weight:var(--mud-typographym3-body-large-weight);}.mud-typographym3-body-medium{font-family:var(--mud-typographym3-body-medium-font);line-height:var(--mud-typographym3-body-medium-line-height);font-size:var(--mud-typographym3-body-medium-size);letter-spacing:var(--mud-typographym3-body-medium-tracking);font-weight:var(--mud-typographym3-body-medium-weight);}.mud-typographym3-body-small{font-family:var(--mud-typographym3-body-small-font);line-height:var(--mud-typographym3-body-small-line-height);font-size:var(--mud-typographym3-body-small-size);letter-spacing:var(--mud-typographym3-body-small-tracking);font-weight:var(--mud-typographym3-body-small-weight);}.mud-typographym3-label-large{font-family:var(--mud-typographym3-label-large-font);line-height:var(--mud-typographym3-label-large-line-height);font-size:var(--mud-typographym3-label-large-size);letter-spacing:var(--mud-typographym3-label-large-tracking);font-weight:var(--mud-typographym3-label-large-weight);}.mud-typographym3-label-medium{font-family:var(--mud-typographym3-label-medium-font);line-height:var(--mud-typographym3-label-medium-line-height);font-size:var(--mud-typographym3-label-medium-size);letter-spacing:var(--mud-typographym3-label-medium-tracking);font-weight:var(--mud-typographym3-label-medium-weight);}.mud-typographym3-label-small{font-family:var(--mud-typographym3-label-small-font);line-height:var(--mud-typographym3-label-small-line-height);font-size:var(--mud-typographym3-label-small-size);letter-spacing:var(--mud-typographym3-label-small-tracking);font-weight:var(--mud-typographym3-label-small-weight);}.mud-typography-display-inline{display:inline;}.mud-transfer-list-common{height:fill-available;height:-webkit-fill-available;}.mud-transfer-list-container{display:flex;flex-direction:column;flex:1 1 0%;}.mud-list-extended{margin:0;padding:0;position:relative;list-style:none;}.mud-list-extended.mud-list-padding-extended{padding-top:8px;padding-bottom:8px;}.mud-list-item-extended{width:100%;display:flex;position:relative;box-sizing:border-box;text-align:start;align-items:center;padding-top:8px;padding-bottom:8px;justify-content:flex-start;text-decoration:none;outline:none;}.mud-list-item-extended.mud-list-item-dense-extended{padding-top:4px;padding-bottom:4px;}.mud-list-item-extended.mud-list-item-disabled-extended{color:var(--mud-palette-action-disabled) !important;cursor:default !important;pointer-events:none !important;}.mud-list-item-extended.mud-list-item-disabled-extended .mud-list-item-icon-extended{color:var(--mud-palette-action-disabled) !important;}.mud-list-item-clickable-extended{color:inherit;border:0;cursor:pointer;margin:0;outline:0;user-select:none;border-radius:0;vertical-align:middle;background-color:transparent;-webkit-appearance:none;-webkit-tap-highlight-color:transparent;transition:background-color 150ms cubic-bezier(.4,0,.2,1) 0ms;}.mud-list-item-clickable-extended:hover:not(.mud-list-item-functional){background-color:var(--mud-palette-action-default-hover);}.mud-list-item-gutters-extended{padding-left:16px;padding-right:16px;}.mud-list-item-text-extended{flex:1 1 auto;min-width:0;margin-top:4px;margin-bottom:4px;padding-inline-start:8px;padding-inline-end:8px;}.mud-list-item-text-inset-extended{padding-left:56px;padding-inline-start:56px;padding-inline-end:unset;}.mud-list-item-icon-extended{color:var(--mud-palette-action-default);display:inline-flex;flex-shrink:0;padding-inline-start:8px;padding-inline-end:8px;margin-inline-start:-4px;margin-inline-end:4px;}.mud-list-item-multiselect-extended{max-height:32px;}.mud-list-item-multiselect-extended.mud-list-item-multiselect-checkbox-extended{padding-inline-end:16px;}.mud-list-subheader-extended{color:var(--mud-palette-action-default);background-color:var(--mud-palette-background);font-size:.875rem;box-sizing:border-box;list-style:none;font-weight:500;padding-top:16px;padding-bottom:16px;}.mud-list-subheader-secondary-background-extended{background-color:var(--mud-palette-background-gray);}.mud-list-subheader-gutters-extended{padding-left:16px;padding-right:16px;}.mud-list-subheader-inset-extended{padding-left:72px;padding-inline-start:72px;padding-inline-end:unset;}.mud-list-subheader-sticky-extended{top:-8px;z-index:1;position:sticky;}.mud-list-subheader-sticky-extended.mud-list-subheader-sticky-dense-extended{top:0;}.mud-list-item-hilight-extended{background-color:var(--mud-palette-background-gray);}.mud-list-item-hilight-selected{background-color:var(--mud-palette-lines-default) !important;}.mud-list-item-nested-background-extended{background-color:var(--mud-palette-background-gray);}.mud-list-item-avatar-extended{min-width:56px;flex-shrink:0;}.mud-nested-list-extended>.mud-list-item-extended{padding-left:32px;padding-inline-start:32px;padding-inline-end:unset;}.mud-select-extended{display:flex;flex-grow:1;flex-basis:0;min-width:0;position:relative;height:fit-content;}.mud-select-extended.mud-autocomplete{display:block;}.mud-select-extended.mud-autocomplete .mud-select-input-extended{cursor:text;}.mud-select-extended.mud-autocomplete .mud-input-adornment-extended{cursor:pointer;}.mud-select-extended.mud-autocomplete--with-progress .mud-select-input-extended input{padding-right:3.5rem !important;}.mud-select-extended.mud-autocomplete--with-progress .mud-input-adorned-end input{padding-right:4.5rem !important;}.mud-select-extended.mud-autocomplete--with-progress .mud-select-input-extended .mud-icon-button{display:none !important;}.mud-select-extended.mud-autocomplete--with-progress .progress-indicator-circular{position:absolute;width:100%;top:0;bottom:0;display:flex;align-items:center;justify-content:flex-end;padding-top:.25rem;padding-bottom:.25rem;padding-right:1rem;}.mud-select-extended.mud-autocomplete--with-progress .progress-indicator-circular--with-adornment{padding-right:3rem;}.mud-select-extended.mud-autocomplete--with-progress .mud-progress-linear{position:absolute;bottom:-1px;height:2px;}.mud-select-extended .mud-select-input-extended{cursor:pointer;}.mud-select-extended .mud-select-input-extended .mud-select-extended-nowrap{white-space:nowrap;}.mud-select-extended .mud-select-input-extended .mud-input-slot{overflow:hidden;text-overflow:ellipsis;}.mud-select-extended .mud-select-input-extended .mud-input-adornment-end{margin-left:0;}.mud-select-extended .mud-select-input-extended:disabled{cursor:default;}.mud-select-extended .mud-disabled .mud-select-input{cursor:default;}.mud-select-extended>.mud-form-helpertext{margin-top:-21px;}.mud-select-all-extended{margin-top:10px;border-bottom:1px solid #d3d3d3;padding-bottom:18px;}.mud-select-input-chip-extended{display:flex;flex-wrap:wrap;max-width:100%;row-gap:4px;}.mud-select-input-chip-extended.mud-select-extended-nowrap{flex-wrap:nowrap;overflow-x:hidden;}.mud-select-input-chip-extended .mud-chip{flex:0 0 auto;white-space:nowrap;}.mud-placeholder-extended{line-height:unset;}.mud-input-adornment-start-extended:not(.mud-input-text-extended){margin-inline-start:12px;}.mud-input-adornment-start-extended.mud-input-filled-extended{margin-top:16px;}.mud-input-adornment-end-extended:not(.mud-input-text-extended){margin-inline-end:12px;}.mud-no-start-adornment .mud-input-adornment-start-extended{margin-inline-start:0 !important;} \ No newline at end of file +.mud-combobox{margin:0;padding:0;position:relative;list-style:none;}.mud-combobox.mud-combobox-padding{padding-top:8px;padding-bottom:8px;}.mud-combobox-item{width:100%;display:flex;position:relative;box-sizing:border-box;text-align:start;align-items:center;padding-top:8px;padding-bottom:8px;justify-content:flex-start;text-decoration:none;outline:none;min-height:48px;}.mud-combobox-item.mud-combobox-item-comfort{padding-top:4px;padding-bottom:4px;min-height:40px;}.mud-combobox-item.mud-combobox-item-slim{padding-top:2px;padding-bottom:2px;min-height:32px;}.mud-combobox-item.mud-combobox-item-superslim{padding-top:0;padding-bottom:0;min-height:24px;}.mud-combobox-item.mud-combobox-item-disabled{color:var(--mud-palette-action-disabled) !important;cursor:default !important;pointer-events:none !important;}.mud-combobox-item.mud-combobox-item-disabled .mud-combobox-item-icon{color:var(--mud-palette-action-disabled) !important;}.mud-combobox-item-clickable{color:inherit;border:0;cursor:pointer;margin:0;outline:0;user-select:none;border-radius:0;vertical-align:middle;background-color:transparent;-webkit-appearance:none;-webkit-tap-highlight-color:transparent;transition:background-color 150ms cubic-bezier(.4,0,.2,1) 0ms;}.mud-combobox-item-clickable:hover{background-color:var(--mud-palette-action-default-hover);}.mud-combobox-item-gutters{padding-left:16px;padding-right:16px;}.mud-combobox-item-text{flex:1 1 auto;min-width:0;margin-top:4px;margin-bottom:4px;padding-inline-start:8px;padding-inline-end:8px;}.mud-combobox-item-text-inset{padding-left:56px;padding-inline-start:56px;padding-inline-end:unset;}.mud-combobox-item-icon{color:var(--mud-palette-action-default);display:inline-flex;flex-shrink:0;padding-inline-start:8px;padding-inline-end:8px;margin-inline-start:-4px;margin-inline-end:4px;}.mud-combobox-item-multiselect{max-height:32px;}.mud-combobox-item-multiselect.mud-combobox-item-multiselect-checkbox{padding-inline-end:16px;}.mud-combobox-subheader{color:var(--mud-palette-action-default);background-color:var(--mud-palette-background);font-size:.875rem;box-sizing:border-box;list-style:none;font-weight:500;padding-top:16px;padding-bottom:16px;}.mud-combobox-subheader-secondary-background{background-color:var(--mud-palette-background-gray);}.mud-combobox-subheader-gutters{padding-left:16px;padding-right:16px;}.mud-combobox-subheader-inset{padding-left:72px;padding-inline-start:72px;padding-inline-end:unset;}.mud-combobox-subheader-sticky{top:-8px;z-index:1;position:sticky;}.mud-combobox-subheader-sticky.mud-combobox-subheader-sticky-dense{top:0;}.mud-combobox-item-hilight{background-color:var(--mud-palette-background-gray);}.mud-combobox-item-hilight{background-color:var(--mud-palette-lines-default) !important;}.mud-combobox-item-bordered{border-left:4px solid var(--mud-palette-lines-default);padding-inline-start:12px;}.mud-combobox-item-bordered-primary{border-left:4px solid var(--mud-palette-primary);padding-inline-start:12px;}.mud-combobox-item-bordered-secondary{border-left:4px solid var(--mud-palette-secondary);padding-inline-start:12px;}.mud-combobox-item-bordered-tertiary{border-left:4px solid var(--mud-palette-tertiary);padding-inline-start:12px;}.mud-combobox-item-bordered-info{border-left:4px solid var(--mud-palette-info);padding-inline-start:12px;}.mud-combobox-item-bordered-success{border-left:4px solid var(--mud-palette-success);padding-inline-start:12px;}.mud-combobox-item-bordered-warning{border-left:4px solid var(--mud-palette-warning);padding-inline-start:12px;}.mud-combobox-item-bordered-error{border-left:4px solid var(--mud-palette-error);padding-inline-start:12px;}.mud-combobox-item-bordered-dark{border-left:4px solid var(--mud-palette-dark);padding-inline-start:12px;}.mud-combobox-item-nested-background{background-color:var(--mud-palette-background-gray);}.mud-combobox-item-avatar{min-width:56px;flex-shrink:0;}.mud-combobox-highlighter{background-color:transparent;font-weight:bold;text-decoration:underline;}.mud-gallery-selected-toolbox{left:0;right:0;height:56px;width:100%;background-color:rgba(0,0,0,.6);}.mud-gallery-selected-toolbox.gallery-toolbox-top{top:0;}.mud-gallery-selected-toolbox.gallery-toolbox-bottom{bottom:0;}.mud-page{display:grid;box-sizing:border-box;width:100%;}.mud-page.mud-page-height-full{min-height:100vh;}.mud-page.mud-page-height-full-without-appbar{min-height:calc(100vh - var(--mud-appbar-height));}.mud-page.mud-page-column-2{grid-template-columns:repeat(2,50%);}.mud-page.mud-page-column-3{grid-template-columns:repeat(3,33.33333%);}.mud-page.mud-page-column-4{grid-template-columns:repeat(4,25%);}.mud-page.mud-page-column-5{grid-template-columns:repeat(5,20%);}.mud-page.mud-page-column-6{grid-template-columns:repeat(6,16.66667%);}.mud-page.mud-page-column-7{grid-template-columns:repeat(7,14.28571%);}.mud-page.mud-page-column-8{grid-template-columns:repeat(8,12.5%);}.mud-page.mud-page-column-9{grid-template-columns:repeat(9,11.11111%);}.mud-page.mud-page-column-10{grid-template-columns:repeat(10,10%);}.mud-page.mud-page-column-11{grid-template-columns:repeat(11,9.09091%);}.mud-page.mud-page-column-12{grid-template-columns:repeat(12,8.33333%);}.mud-page.mud-page-row-2{grid-template-rows:repeat(2,50%);}.mud-page.mud-page-row-3{grid-template-rows:repeat(3,33.33333%);}.mud-page.mud-page-row-4{grid-template-rows:repeat(4,25%);}.mud-page.mud-page-row-5{grid-template-rows:repeat(5,20%);}.mud-page.mud-page-row-6{grid-template-rows:repeat(6,16.66667%);}.mud-page.mud-page-row-7{grid-template-rows:repeat(7,14.28571%);}.mud-page.mud-page-row-8{grid-template-rows:repeat(8,12.5%);}.mud-page.mud-page-row-9{grid-template-rows:repeat(9,11.11111%);}.mud-page.mud-page-row-10{grid-template-rows:repeat(10,10%);}.mud-page.mud-page-row-11{grid-template-rows:repeat(11,9.09091%);}.mud-page.mud-page-row-12{grid-template-rows:repeat(12,8.33333%);}.mud-section{display:inline-grid;overflow:auto;}.mud-section.mud-section-col-start-1{grid-column-start:1;}.mud-section.mud-section-col-start-2{grid-column-start:2;}.mud-section.mud-section-col-start-3{grid-column-start:3;}.mud-section.mud-section-col-start-4{grid-column-start:4;}.mud-section.mud-section-col-start-5{grid-column-start:5;}.mud-section.mud-section-col-start-6{grid-column-start:6;}.mud-section.mud-section-col-start-7{grid-column-start:7;}.mud-section.mud-section-col-start-8{grid-column-start:8;}.mud-section.mud-section-col-start-9{grid-column-start:9;}.mud-section.mud-section-col-start-10{grid-column-start:10;}.mud-section.mud-section-col-start-11{grid-column-start:11;}.mud-section.mud-section-col-start-12{grid-column-start:12;}.mud-section.mud-section-col-end-1{grid-column-end:1;}.mud-section.mud-section-col-end-2{grid-column-end:2;}.mud-section.mud-section-col-end-3{grid-column-end:3;}.mud-section.mud-section-col-end-4{grid-column-end:4;}.mud-section.mud-section-col-end-5{grid-column-end:5;}.mud-section.mud-section-col-end-6{grid-column-end:6;}.mud-section.mud-section-col-end-7{grid-column-end:7;}.mud-section.mud-section-col-end-8{grid-column-end:8;}.mud-section.mud-section-col-end-9{grid-column-end:9;}.mud-section.mud-section-col-end-10{grid-column-end:10;}.mud-section.mud-section-col-end-11{grid-column-end:11;}.mud-section.mud-section-col-end-12{grid-column-end:12;}.mud-section.mud-section-col-end-13{grid-column-end:13;}.mud-section.mud-section-row-start-1{grid-row-start:1;}.mud-section.mud-section-row-start-2{grid-row-start:2;}.mud-section.mud-section-row-start-3{grid-row-start:3;}.mud-section.mud-section-row-start-4{grid-row-start:4;}.mud-section.mud-section-row-start-5{grid-row-start:5;}.mud-section.mud-section-row-start-6{grid-row-start:6;}.mud-section.mud-section-row-start-7{grid-row-start:7;}.mud-section.mud-section-row-start-8{grid-row-start:8;}.mud-section.mud-section-row-start-9{grid-row-start:9;}.mud-section.mud-section-row-start-10{grid-row-start:10;}.mud-section.mud-section-row-start-11{grid-row-start:11;}.mud-section.mud-section-row-start-12{grid-row-start:12;}.mud-section.mud-section-row-end-1{grid-row-end:1;}.mud-section.mud-section-row-end-2{grid-row-end:2;}.mud-section.mud-section-row-end-3{grid-row-end:3;}.mud-section.mud-section-row-end-4{grid-row-end:4;}.mud-section.mud-section-row-end-5{grid-row-end:5;}.mud-section.mud-section-row-end-6{grid-row-end:6;}.mud-section.mud-section-row-end-7{grid-row-end:7;}.mud-section.mud-section-row-end-8{grid-row-end:8;}.mud-section.mud-section-row-end-9{grid-row-end:9;}.mud-section.mud-section-row-end-10{grid-row-end:10;}.mud-section.mud-section-row-end-11{grid-row-end:11;}.mud-section.mud-section-row-end-12{grid-row-end:12;}.mud-section.mud-section-row-end-13{grid-row-end:13;}.mud-popup{z-index:2000;overflow:auto;background-color:var(--mud-palette-background);min-height:var(--mud-appbar-height);}.mud-popup.mud-popup-center{height:300px;left:50%;top:50%;transform:translate(-50%,-50%);width:320px;aspect-ratio:1/1;}.mud-range-container{align-items:center;margin:20px 0;}.mud-range-container input::-webkit-slider-thumb{pointer-events:all;position:relative;z-index:1;}.mud-range-container input::-moz-range-thumb{pointer-events:all;position:relative;z-index:10;}.mud-range-container input::-moz-range-track{position:relative;z-index:-1;}.mud-range-container input:last-of-type::-moz-range-track{-moz-appearance:none;}.mud-range-container .mud-slider-input:last-of-type{position:absolute;pointer-events:none;top:0;}.mud-range-container input[type=range]::-webkit-slider-thumb{pointer-events:all;}.mud-range-display{text-align:center;}.mud-signature-pad-container{touch-action:none;}.mud-splitter{display:grid;position:relative;width:100%;}.mud-splitter-content{overflow:auto;}.mud-splitter-thumb ::-webkit-slider-runnable-track{visibility:hidden !important;height:100% !important;}.mud-splitter-thumb ::-moz-range-track{visibility:hidden !important;height:100% !important;}.mud-splitter-track{position:absolute;top:50%;transform:translateY(-50%);height:100%;}.mud-splitter-track.mud-slider{visibility:hidden !important;}.mud-splitter-track.mud-slider .mud-slider-container{height:100% !important;}.mud-splitter-track.mud-slider .mud-slider-input{top:50%;}.mud-splitter-thumb ::-webkit-slider-thumb{visibility:visible !important;appearance:none !important;-webkit-appearance:none !important;top:50% !important;transform:translateY(-50%) !important;height:100% !important;width:8px !important;border:none !important;border-radius:0 !important;cursor:ew-resize !important;}.mud-splitter-thumb-disabled ::-webkit-slider-thumb{cursor:default !important;}.mud-splitter-thumb ::-moz-range-thumb{visibility:visible !important;appearance:none !important;-moz-appearance:none !important;top:50% !important;transform:translateY(-50%) !important;height:100% !important;width:8px !important;border:none !important;border-radius:0 !important;cursor:ew-resize !important;}.mud-splitter-thumb-disabled ::-moz-range-thumb{cursor:default !important;}.mud-stepper-header-extended{min-height:62px;border-radius:var(--mud-default-borderradius);}.mud-stepper-header-extended.mud-stepper-header-non-linear-extended:hover{background-color:var(--mud-palette-action-default-hover);}.mud-stepper-badge-extended{z-index:21;}.mud-stepper-avatar-extended{z-index:20;}.mud-stepper-avatar-bg-extended{background-color:var(--mud-palette-background);}.mud-stepper-sub-inner-header-extended{grid-column-start:1;grid-column-end:-1;flex-direction:row;grid-row:1;list-style:none;display:flex;}.mud-stepper-sub-inner-header-vertical-extended{grid-row-start:1;grid-row-end:-1;flex-direction:column;grid-column:1;list-style:none;display:flex;}.mud-stepper-text-mobile-extended{grid-row:1;margin-top:22px;}.mud-stepper-text-mobile-vertical-extended{grid-column:1;margin-inline-start:22px;}.mud-stepper-step-1.horizontal{width:calc(100%/1);}.mud-stepper-step-1.vertical{height:calc(100%/1);}.mud-stepper-step-2.horizontal{width:calc(100%/2);}.mud-stepper-step-2.vertical{height:calc(100%/2);}.mud-stepper-step-3.horizontal{width:calc(100%/3);}.mud-stepper-step-3.vertical{height:calc(100%/3);}.mud-stepper-step-4.horizontal{width:calc(100%/4);}.mud-stepper-step-4.vertical{height:calc(100%/4);}.mud-stepper-step-5.horizontal{width:calc(100%/5);}.mud-stepper-step-5.vertical{height:calc(100%/5);}.mud-stepper-step-6.horizontal{width:calc(100%/6);}.mud-stepper-step-6.vertical{height:calc(100%/6);}.mud-stepper-step-7.horizontal{width:calc(100%/7);}.mud-stepper-step-7.vertical{height:calc(100%/7);}.mud-stepper-step-8.horizontal{width:calc(100%/8);}.mud-stepper-step-8.vertical{height:calc(100%/8);}.mud-stepper-step-9.horizontal{width:calc(100%/9);}.mud-stepper-step-9.vertical{height:calc(100%/9);}.mud-stepper-step-10.horizontal{width:calc(100%/10);}.mud-stepper-step-10.vertical{height:calc(100%/10);}.mud-stepper-step-11.horizontal{width:calc(100%/11);}.mud-stepper-step-11.vertical{height:calc(100%/11);}.mud-stepper-step-12.horizontal{width:calc(100%/12);}.mud-stepper-step-12.vertical{height:calc(100%/12);}.mud-stepper-grid-1.horizontal{display:grid;grid-template-columns:repeat(2,1fr);}.mud-stepper-grid-1.vertical{display:grid;grid-template-rows:repeat(2,1fr);}.mud-stepper-grid-2.horizontal{display:grid;grid-template-columns:repeat(4,1fr);}.mud-stepper-grid-2.vertical{display:grid;grid-template-rows:repeat(4,1fr);}.mud-stepper-grid-3.horizontal{display:grid;grid-template-columns:repeat(6,1fr);}.mud-stepper-grid-3.vertical{display:grid;grid-template-rows:repeat(6,1fr);}.mud-stepper-grid-4.horizontal{display:grid;grid-template-columns:repeat(8,1fr);}.mud-stepper-grid-4.vertical{display:grid;grid-template-rows:repeat(8,1fr);}.mud-stepper-grid-5.horizontal{display:grid;grid-template-columns:repeat(10,1fr);}.mud-stepper-grid-5.vertical{display:grid;grid-template-rows:repeat(10,1fr);}.mud-stepper-grid-6.horizontal{display:grid;grid-template-columns:repeat(12,1fr);}.mud-stepper-grid-6.vertical{display:grid;grid-template-rows:repeat(12,1fr);}.mud-stepper-grid-7.horizontal{display:grid;grid-template-columns:repeat(14,1fr);}.mud-stepper-grid-7.vertical{display:grid;grid-template-rows:repeat(14,1fr);}.mud-stepper-grid-8.horizontal{display:grid;grid-template-columns:repeat(16,1fr);}.mud-stepper-grid-8.vertical{display:grid;grid-template-rows:repeat(16,1fr);}.mud-stepper-grid-9.horizontal{display:grid;grid-template-columns:repeat(18,1fr);}.mud-stepper-grid-9.vertical{display:grid;grid-template-rows:repeat(18,1fr);}.mud-stepper-grid-10.horizontal{display:grid;grid-template-columns:repeat(20,1fr);}.mud-stepper-grid-10.vertical{display:grid;grid-template-rows:repeat(20,1fr);}.mud-stepper-grid-11.horizontal{display:grid;grid-template-columns:repeat(22,1fr);}.mud-stepper-grid-11.vertical{display:grid;grid-template-rows:repeat(22,1fr);}.mud-stepper-grid-12.horizontal{display:grid;grid-template-columns:repeat(24,1fr);}.mud-stepper-grid-12.vertical{display:grid;grid-template-rows:repeat(24,1fr);}.mud-stepper-grid-13.horizontal{display:grid;grid-template-columns:repeat(26,1fr);}.mud-stepper-grid-13.vertical{display:grid;grid-template-rows:repeat(26,1fr);}.mud-stepper-grid-14.horizontal{display:grid;grid-template-columns:repeat(28,1fr);}.mud-stepper-grid-14.vertical{display:grid;grid-template-rows:repeat(28,1fr);}.mud-stepper-grid-15.horizontal{display:grid;grid-template-columns:repeat(30,1fr);}.mud-stepper-grid-15.vertical{display:grid;grid-template-rows:repeat(30,1fr);}.mud-stepper-grid-16.horizontal{display:grid;grid-template-columns:repeat(32,1fr);}.mud-stepper-grid-16.vertical{display:grid;grid-template-rows:repeat(32,1fr);}.mud-stepper-grid-17.horizontal{display:grid;grid-template-columns:repeat(34,1fr);}.mud-stepper-grid-17.vertical{display:grid;grid-template-rows:repeat(34,1fr);}.mud-stepper-grid-18.horizontal{display:grid;grid-template-columns:repeat(36,1fr);}.mud-stepper-grid-18.vertical{display:grid;grid-template-rows:repeat(36,1fr);}.mud-stepper-grid-19.horizontal{display:grid;grid-template-columns:repeat(38,1fr);}.mud-stepper-grid-19.vertical{display:grid;grid-template-rows:repeat(38,1fr);}.mud-stepper-grid-20.horizontal{display:grid;grid-template-columns:repeat(40,1fr);}.mud-stepper-grid-20.vertical{display:grid;grid-template-rows:repeat(40,1fr);}.mud-stepper-grid-21.horizontal{display:grid;grid-template-columns:repeat(42,1fr);}.mud-stepper-grid-21.vertical{display:grid;grid-template-rows:repeat(42,1fr);}.mud-stepper-grid-22.horizontal{display:grid;grid-template-columns:repeat(44,1fr);}.mud-stepper-grid-22.vertical{display:grid;grid-template-rows:repeat(44,1fr);}.mud-stepper-grid-23.horizontal{display:grid;grid-template-columns:repeat(46,1fr);}.mud-stepper-grid-23.vertical{display:grid;grid-template-rows:repeat(46,1fr);}.mud-stepper-grid-24.horizontal{display:grid;grid-template-columns:repeat(48,1fr);}.mud-stepper-grid-24.vertical{display:grid;grid-template-rows:repeat(48,1fr);}.steps-1.horizontal{grid-column-start:2;grid-column-end:2;grid-row:1/-1;}.steps-1.vertical{grid-row-start:2;grid-row-end:2;grid-column:1/-1;}.steps-2.horizontal{grid-column-start:2;grid-column-end:4;grid-row:1/-1;}.steps-2.vertical{grid-row-start:2;grid-row-end:4;grid-column:1/-1;}.steps-3.horizontal{grid-column-start:2;grid-column-end:6;grid-row:1/-1;}.steps-3.vertical{grid-row-start:2;grid-row-end:6;grid-column:1/-1;}.steps-4.horizontal{grid-column-start:2;grid-column-end:8;grid-row:1/-1;}.steps-4.vertical{grid-row-start:2;grid-row-end:8;grid-column:1/-1;}.steps-5.horizontal{grid-column-start:2;grid-column-end:10;grid-row:1/-1;}.steps-5.vertical{grid-row-start:2;grid-row-end:10;grid-column:1/-1;}.steps-6.horizontal{grid-column-start:2;grid-column-end:12;grid-row:1/-1;}.steps-6.vertical{grid-row-start:2;grid-row-end:12;grid-column:1/-1;}.steps-7.horizontal{grid-column-start:2;grid-column-end:14;grid-row:1/-1;}.steps-7.vertical{grid-row-start:2;grid-row-end:14;grid-column:1/-1;}.steps-8.horizontal{grid-column-start:2;grid-column-end:16;grid-row:1/-1;}.steps-8.vertical{grid-row-start:2;grid-row-end:16;grid-column:1/-1;}.steps-9.horizontal{grid-column-start:2;grid-column-end:18;grid-row:1/-1;}.steps-9.vertical{grid-row-start:2;grid-row-end:18;grid-column:1/-1;}.steps-10.horizontal{grid-column-start:2;grid-column-end:20;grid-row:1/-1;}.steps-10.vertical{grid-row-start:2;grid-row-end:20;grid-column:1/-1;}.steps-11.horizontal{grid-column-start:2;grid-column-end:22;grid-row:1/-1;}.steps-11.vertical{grid-row-start:2;grid-row-end:22;grid-column:1/-1;}.steps-12.horizontal{grid-column-start:2;grid-column-end:24;grid-row:1/-1;}.steps-12.vertical{grid-row-start:2;grid-row-end:24;grid-column:1/-1;}.mud-stepper-progress-extended.horizontal.header-size-small{top:22px;height:2px;}.mud-stepper-progress-extended.horizontal.header-size-medium{top:30px;height:3px;}.mud-stepper-progress-extended.horizontal.header-size-large{top:38px;height:4px;}.mud-stepper-progress-extended.vertical.header-size-small{left:22px;}.mud-stepper-progress-extended.vertical.header-size-medium{left:30px;}.mud-stepper-progress-extended.vertical.header-size-large{left:38px;}.mobile.horizontal .mud-stepper-progress-extended{margin-inline-start:40px;}.mud-stepper-progress-extended{display:inline-grid;z-index:10;}.mud-stepper-progress-extended.vertical{transform:rotateX(180deg);}.mud-switch-m3{cursor:pointer;display:inline-flex;align-items:center;vertical-align:middle;margin-top:4px;margin-bottom:4px;-webkit-tap-highlight-color:transparent;}.mud-switch-m3.mud-disabled{color:var(--mud-palette-text-disabled) !important;cursor:default;}.mud-switch-m3.mud-readonly,.mud-switch-m3 .mud-readonly:hover{cursor:default;background-color:transparent !important;}.mud-switch-span-m3{width:52px;height:32px;display:inline-flex;z-index:0;position:relative;box-sizing:border-box;flex-shrink:0;vertical-align:middle;}.mud-switch-span-m3.mud-switch-child-content-m3{margin-inline-end:12px;}.mud-switch-span-m3 .mud-switch-track-m3{width:52px;height:32px;z-index:-1;transition:opacity 150ms cubic-bezier(.4,0,.2,1) 0ms,background-color 150ms cubic-bezier(.4,0,.2,1) 0ms;border-radius:30px;background-color:var(--mud-palette-background);border:2px solid;}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-default-m3{border-color:var(--mud-palette-text-primary);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-primary-m3{border-color:var(--mud-palette-primary);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-secondary-m3{border-color:var(--mud-palette-secondary);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-tertiary-m3{border-color:var(--mud-palette-tertiary);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-info-m3{border-color:var(--mud-palette-info);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-success-m3{border-color:var(--mud-palette-success);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-warning-m3{border-color:var(--mud-palette-warning);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-error-m3{border-color:var(--mud-palette-error);}.mud-switch-span-m3 .mud-switch-track-m3.mud-switch-track-dark-m3{border-color:var(--mud-palette-dark);}.mud-switch-base-m3{padding-top:4px;padding-bottom:4px;padding-inline-start:8px;top:0;left:0;bottom:0;color:#fafafa;z-index:1;position:absolute;transition:left 150ms cubic-bezier(.4,0,.2,1) 0ms,transform 150ms cubic-bezier(.4,0,.2,1) 0ms,background-color 250ms cubic-bezier(.4,0,.2,1) 0ms,box-shadow 250ms cubic-bezier(.4,0,.2,1) 0ms;}.mud-switch-base-m3.mud-switch-base-dense-m3{padding-inline-start:4px;}.mud-switch-base-m3.mud-checked{transform:translateX(20px);padding:4px;}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3{opacity:1;}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-default{background-color:var(--mud-palette-text-primary);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-primary{background-color:var(--mud-palette-primary);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-secondary{background-color:var(--mud-palette-secondary);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-tertiary{background-color:var(--mud-palette-tertiary);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-info{background-color:var(--mud-palette-info);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-success{background-color:var(--mud-palette-success);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-warning{background-color:var(--mud-palette-warning);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-error{background-color:var(--mud-palette-error);}.mud-switch-base-m3.mud-checked+.mud-switch-track-m3.mud-dark{background-color:var(--mud-palette-dark);}.mud-switch-base-m3.mud-checked .mud-switch-thumb-m3{width:24px;height:24px;box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);border-radius:50%;background-color:var(--mud-palette-background);}.mud-switch-base-m3:hover{background-color:var(--mud-palette-action-default-hover);}.mud-switch-base-m3.mud-switch-disabled{color:var(--mud-palette-gray-default) !important;}.mud-switch-base-m3.mud-switch-disabled+.mud-switch-track-m3{opacity:.12 !important;}.mud-switch-base-m3.mud-switch-disabled:hover,.mud-switch-base-m3.mud-switch-disabled:focus-visible{cursor:default;background-color:transparent !important;}.mud-switch-button-m3{display:flex;align-items:inherit;justify-content:inherit;}.mud-switch-button-m3 .mud-switch-input-m3{top:0;left:0;width:100%;cursor:inherit;height:100%;margin:0;opacity:0;padding:0;z-index:1;position:absolute;}.mud-switch-button-m3 .mud-switch-thumb-m3{width:16px;height:16px;box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12);border-radius:50%;}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-default-m3{background-color:var(--mud-palette-text-primary);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-primary-m3{background-color:var(--mud-palette-primary);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-secondary-m3{background-color:var(--mud-palette-secondary);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-tertiary-m3{background-color:var(--mud-palette-tertiary);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-info-m3{background-color:var(--mud-palette-info);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-success-m3{background-color:var(--mud-palette-success);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-warning-m3{background-color:var(--mud-palette-warning);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-error-m3{background-color:var(--mud-palette-error);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-dark-m3{background-color:var(--mud-palette-dark);}.mud-switch-button-m3 .mud-switch-thumb-m3.mud-switch-thumb-off-icon-m3{width:24px;height:24px;}.mud-wheel{overflow:hidden;min-width:0;flex-grow:1;user-select:none;-webkit-user-select:none;}.mud-wheel-item{width:100%;display:flex;align-content:center;justify-content:center;color:var(--mud-palette-text-secondary);border-radius:var(--mud-default-borderradius);}.mud-wheel-item.mud-wheel-item:hover:not(.mud-disabled){background-color:var(--mud-palette-action-default-hover);}.mud-wheel-item.wheel-item-closest{color:var(--mud-palette-text);}.mud-wheel-item.wheel-item-empty{min-height:32px !important;}.mud-wheel-item.wheel-item-empty.wheel-item-empty-dense{min-height:24px !important;}.mud-wheel-item.wheel-item-empty.wheel-item-empty:hover{background-color:unset;}.mud-wheel-item.mud-disabled{color:var(--mud-palette-text-disabled);}.middle-item{transform:scale(1.2);}.middle-item.mud-disabled{color:var(--mud-palette-text-disabled);}.mud-wheel-border{min-height:2px !important;}.mud-wheel-border.mud-wheel-border-default{background-color:var(--mud-palette-text-primary);}.mud-wheel-border.mud-wheel-border-primary{background-color:var(--mud-palette-primary);}.mud-wheel-border.wheel-border-gradient-primary{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-primary),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-secondary{background-color:var(--mud-palette-secondary);}.mud-wheel-border.wheel-border-gradient-secondary{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-secondary),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-tertiary{background-color:var(--mud-palette-tertiary);}.mud-wheel-border.wheel-border-gradient-tertiary{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-tertiary),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-info{background-color:var(--mud-palette-info);}.mud-wheel-border.wheel-border-gradient-info{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-info),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-success{background-color:var(--mud-palette-success);}.mud-wheel-border.wheel-border-gradient-success{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-success),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-warning{background-color:var(--mud-palette-warning);}.mud-wheel-border.wheel-border-gradient-warning{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-warning),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-error{background-color:var(--mud-palette-error);}.mud-wheel-border.wheel-border-gradient-error{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-error),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.mud-wheel-border-dark{background-color:var(--mud-palette-dark);}.mud-wheel-border.wheel-border-gradient-dark{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-dark),rgba(255,0,0,0));background-color:unset;}.mud-wheel-border.wheel-border-gradient-default{background-image:linear-gradient(to right,rgba(255,0,0,0),var(--mud-palette-text-primary),rgba(255,0,0,0));background-color:unset;}.mud-typographym3-display-large{font-family:var(--mud-typographym3-display-large-font);line-height:var(--mud-typographym3-display-large-line-height);font-size:var(--mud-typographym3-display-large-size);letter-spacing:var(--mud-typographym3-display-large-tracking);font-weight:var(--mud-typographym3-display-large-weight);}.mud-typographym3-display-medium{font-family:var(--mud-typographym3-display-medium-font);line-height:var(--mud-typographym3-display-medium-line-height);font-size:var(--mud-typographym3-display-medium-size);letter-spacing:var(--mud-typographym3-display-medium-tracking);font-weight:var(--mud-typographym3-display-medium-weight);}.mud-typographym3-display-small{font-family:var(--mud-typographym3-display-small-font);line-height:var(--mud-typographym3-display-small-line-height);font-size:var(--mud-typographym3-display-small-size);letter-spacing:var(--mud-typographym3-display-small-tracking);font-weight:var(--mud-typographym3-display-small-weight);}.mud-typographym3-headline-large{font-family:var(--mud-typographym3-headline-large-font);line-height:var(--mud-typographym3-headline-large-line-height);font-size:var(--mud-typographym3-headline-large-size);letter-spacing:var(--mud-typographym3-headline-large-tracking);font-weight:var(--mud-typographym3-headline-large-weight);}.mud-typographym3-headline-medium{font-family:var(--mud-typographym3-headline-medium-font);line-height:var(--mud-typographym3-headline-medium-line-height);font-size:var(--mud-typographym3-headline-medium-size);letter-spacing:var(--mud-typographym3-headline-medium-tracking);font-weight:var(--mud-typographym3-headline-medium-weight);}.mud-typographym3-headline-small{font-family:var(--mud-typographym3-headline-small-font);line-height:var(--mud-typographym3-headline-small-line-height);font-size:var(--mud-typographym3-headline-small-size);letter-spacing:var(--mud-typographym3-headline-small-tracking);font-weight:var(--mud-typographym3-headline-small-weight);}.mud-typographym3-title-large{font-family:var(--mud-typographym3-title-large-font);line-height:var(--mud-typographym3-title-large-line-height);font-size:var(--mud-typographym3-title-large-size);letter-spacing:var(--mud-typographym3-title-large-tracking);font-weight:var(--mud-typographym3-title-large-weight);}.mud-typographym3-title-medium{font-family:var(--mud-typographym3-title-medium-font);line-height:var(--mud-typographym3-title-medium-line-height);font-size:var(--mud-typographym3-title-medium-size);letter-spacing:var(--mud-typographym3-title-medium-tracking);font-weight:var(--mud-typographym3-title-medium-weight);}.mud-typographym3-title-small{font-family:var(--mud-typographym3-title-small-font);line-height:var(--mud-typographym3-title-small-line-height);font-size:var(--mud-typographym3-title-small-size);letter-spacing:var(--mud-typographym3-title-small-tracking);font-weight:var(--mud-typographym3-title-small-weight);}.mud-typographym3-body-large{font-family:var(--mud-typographym3-body-large-font);line-height:var(--mud-typographym3-body-large-line-height);font-size:var(--mud-typographym3-body-large-size);letter-spacing:var(--mud-typographym3-body-large-tracking);font-weight:var(--mud-typographym3-body-large-weight);}.mud-typographym3-body-medium{font-family:var(--mud-typographym3-body-medium-font);line-height:var(--mud-typographym3-body-medium-line-height);font-size:var(--mud-typographym3-body-medium-size);letter-spacing:var(--mud-typographym3-body-medium-tracking);font-weight:var(--mud-typographym3-body-medium-weight);}.mud-typographym3-body-small{font-family:var(--mud-typographym3-body-small-font);line-height:var(--mud-typographym3-body-small-line-height);font-size:var(--mud-typographym3-body-small-size);letter-spacing:var(--mud-typographym3-body-small-tracking);font-weight:var(--mud-typographym3-body-small-weight);}.mud-typographym3-label-large{font-family:var(--mud-typographym3-label-large-font);line-height:var(--mud-typographym3-label-large-line-height);font-size:var(--mud-typographym3-label-large-size);letter-spacing:var(--mud-typographym3-label-large-tracking);font-weight:var(--mud-typographym3-label-large-weight);}.mud-typographym3-label-medium{font-family:var(--mud-typographym3-label-medium-font);line-height:var(--mud-typographym3-label-medium-line-height);font-size:var(--mud-typographym3-label-medium-size);letter-spacing:var(--mud-typographym3-label-medium-tracking);font-weight:var(--mud-typographym3-label-medium-weight);}.mud-typographym3-label-small{font-family:var(--mud-typographym3-label-small-font);line-height:var(--mud-typographym3-label-small-line-height);font-size:var(--mud-typographym3-label-small-size);letter-spacing:var(--mud-typographym3-label-small-tracking);font-weight:var(--mud-typographym3-label-small-weight);}.mud-typography-display-inline{display:inline;}.mud-transfer-list-common{height:fill-available;height:-webkit-fill-available;}.mud-transfer-list-container{display:flex;flex-direction:column;flex:1 1 0%;}.mud-list-extended{margin:0;padding:0;position:relative;list-style:none;}.mud-list-extended.mud-list-padding-extended{padding-top:8px;padding-bottom:8px;}.mud-list-item-extended{width:100%;display:flex;position:relative;box-sizing:border-box;text-align:start;align-items:center;padding-top:8px;padding-bottom:8px;justify-content:flex-start;text-decoration:none;outline:none;}.mud-list-item-extended.mud-list-item-dense-extended{padding-top:4px;padding-bottom:4px;}.mud-list-item-extended.mud-list-item-disabled-extended{color:var(--mud-palette-action-disabled) !important;cursor:default !important;pointer-events:none !important;}.mud-list-item-extended.mud-list-item-disabled-extended .mud-list-item-icon-extended{color:var(--mud-palette-action-disabled) !important;}.mud-list-item-clickable-extended{color:inherit;border:0;cursor:pointer;margin:0;outline:0;user-select:none;border-radius:0;vertical-align:middle;background-color:transparent;-webkit-appearance:none;-webkit-tap-highlight-color:transparent;transition:background-color 150ms cubic-bezier(.4,0,.2,1) 0ms;}.mud-list-item-clickable-extended:hover:not(.mud-list-item-functional){background-color:var(--mud-palette-action-default-hover);}.mud-list-item-gutters-extended{padding-left:16px;padding-right:16px;}.mud-list-item-text-extended{flex:1 1 auto;min-width:0;margin-top:4px;margin-bottom:4px;padding-inline-start:8px;padding-inline-end:8px;}.mud-list-item-text-inset-extended{padding-left:56px;padding-inline-start:56px;padding-inline-end:unset;}.mud-list-item-icon-extended{color:var(--mud-palette-action-default);display:inline-flex;flex-shrink:0;padding-inline-start:8px;padding-inline-end:8px;margin-inline-start:-4px;margin-inline-end:4px;}.mud-list-item-multiselect-extended{max-height:32px;}.mud-list-item-multiselect-extended.mud-list-item-multiselect-checkbox-extended{padding-inline-end:16px;}.mud-list-subheader-extended{color:var(--mud-palette-action-default);background-color:var(--mud-palette-background);font-size:.875rem;box-sizing:border-box;list-style:none;font-weight:500;padding-top:16px;padding-bottom:16px;}.mud-list-subheader-secondary-background-extended{background-color:var(--mud-palette-background-gray);}.mud-list-subheader-gutters-extended{padding-left:16px;padding-right:16px;}.mud-list-subheader-inset-extended{padding-left:72px;padding-inline-start:72px;padding-inline-end:unset;}.mud-list-subheader-sticky-extended{top:-8px;z-index:1;position:sticky;}.mud-list-subheader-sticky-extended.mud-list-subheader-sticky-dense-extended{top:0;}.mud-list-item-hilight-extended{background-color:var(--mud-palette-background-gray);}.mud-list-item-hilight-selected{background-color:var(--mud-palette-lines-default) !important;}.mud-list-item-nested-background-extended{background-color:var(--mud-palette-background-gray);}.mud-list-item-avatar-extended{min-width:56px;flex-shrink:0;}.mud-nested-list-extended>.mud-list-item-extended{padding-left:32px;padding-inline-start:32px;padding-inline-end:unset;}.mud-select-extended{display:flex;flex-grow:1;flex-basis:0;min-width:0;position:relative;height:fit-content;}.mud-select-extended.mud-autocomplete{display:block;}.mud-select-extended.mud-autocomplete .mud-select-input-extended{cursor:text;}.mud-select-extended.mud-autocomplete .mud-input-adornment-extended{cursor:pointer;}.mud-select-extended.mud-autocomplete--with-progress .mud-select-input-extended input{padding-right:3.5rem !important;}.mud-select-extended.mud-autocomplete--with-progress .mud-input-adorned-end input{padding-right:4.5rem !important;}.mud-select-extended.mud-autocomplete--with-progress .mud-select-input-extended .mud-icon-button{display:none !important;}.mud-select-extended.mud-autocomplete--with-progress .progress-indicator-circular{position:absolute;width:100%;top:0;bottom:0;display:flex;align-items:center;justify-content:flex-end;padding-top:.25rem;padding-bottom:.25rem;padding-right:1rem;}.mud-select-extended.mud-autocomplete--with-progress .progress-indicator-circular--with-adornment{padding-right:3rem;}.mud-select-extended.mud-autocomplete--with-progress .mud-progress-linear{position:absolute;bottom:-1px;height:2px;}.mud-select-extended .mud-select-input-extended{cursor:pointer;}.mud-select-extended .mud-select-input-extended .mud-select-extended-nowrap{white-space:nowrap;}.mud-select-extended .mud-select-input-extended .mud-input-slot{overflow:hidden;text-overflow:ellipsis;}.mud-select-extended .mud-select-input-extended .mud-input-adornment-end{margin-left:0;}.mud-select-extended .mud-select-input-extended:disabled{cursor:default;}.mud-select-extended .mud-disabled .mud-select-input{cursor:default;}.mud-select-extended>.mud-form-helpertext{margin-top:-21px;}.mud-select-all-extended{margin-top:10px;border-bottom:1px solid #d3d3d3;padding-bottom:18px;}.mud-select-input-chip-extended{display:flex;flex-wrap:wrap;max-width:100%;row-gap:4px;}.mud-select-input-chip-extended.mud-select-extended-nowrap{flex-wrap:nowrap;overflow-x:hidden;}.mud-select-input-chip-extended .mud-chip{flex:0 0 auto;white-space:nowrap;}.mud-placeholder-extended{line-height:unset;}.mud-input-adornment-start-extended:not(.mud-input-text-extended){margin-inline-start:12px;}.mud-input-adornment-start-extended.mud-input-filled-extended{margin-top:16px;}.mud-input-adornment-end-extended:not(.mud-input-text-extended){margin-inline-end:12px;}.mud-no-start-adornment .mud-input-adornment-start-extended{margin-inline-start:0 !important;} \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css.br b/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css.br index 3b8316cf..987a132f 100644 Binary files a/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css.br and b/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css.br differ diff --git a/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css.gz b/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css.gz index d9eaa5b7..03494462 100644 Binary files a/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css.gz and b/app/MindWork AI Studio/wwwroot/system/CodeBeam.MudBlazor.Extensions/MudExtensions.min.css.gz differ diff --git a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css index a7b299dd..fe3c9316 100755 --- a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css +++ b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css @@ -2,4 +2,4 @@ * MudBlazor (https://mudblazor.com/) * Copyright (c) 2021 MudBlazor * Licensed under MIT (https://github.com/MudBlazor/MudBlazor/blob/master/LICENSE) - */.mud-primary{background-color:var(--mud-palette-primary) !important}.mud-primary-text{color:var(--mud-palette-primary) !important;--mud-ripple-color: var(--mud-palette-primary) !important}.mud-primary-hover{background-color:var(--mud-palette-primary-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-primary-hover:hover{background-color:var(--mud-palette-primary-hover) !important}}.hover\:mud-primary-hover:focus-visible,.hover\:mud-primary-hover:active{background-color:var(--mud-palette-primary-hover) !important}.mud-border-primary{border-color:var(--mud-palette-primary) !important}.mud-theme-primary{color:var(--mud-palette-primary-text) !important;background-color:var(--mud-palette-primary) !important}.mud-secondary{background-color:var(--mud-palette-secondary) !important}.mud-secondary-text{color:var(--mud-palette-secondary) !important;--mud-ripple-color: var(--mud-palette-secondary) !important}.mud-secondary-hover{background-color:var(--mud-palette-secondary-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-secondary-hover:hover{background-color:var(--mud-palette-secondary-hover) !important}}.hover\:mud-secondary-hover:focus-visible,.hover\:mud-secondary-hover:active{background-color:var(--mud-palette-secondary-hover) !important}.mud-border-secondary{border-color:var(--mud-palette-secondary) !important}.mud-theme-secondary{color:var(--mud-palette-secondary-text) !important;background-color:var(--mud-palette-secondary) !important}.mud-tertiary{background-color:var(--mud-palette-tertiary) !important}.mud-tertiary-text{color:var(--mud-palette-tertiary) !important;--mud-ripple-color: var(--mud-palette-tertiary) !important}.mud-tertiary-hover{background-color:var(--mud-palette-tertiary-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-tertiary-hover:hover{background-color:var(--mud-palette-tertiary-hover) !important}}.hover\:mud-tertiary-hover:focus-visible,.hover\:mud-tertiary-hover:active{background-color:var(--mud-palette-tertiary-hover) !important}.mud-border-tertiary{border-color:var(--mud-palette-tertiary) !important}.mud-theme-tertiary{color:var(--mud-palette-tertiary-text) !important;background-color:var(--mud-palette-tertiary) !important}.mud-info{background-color:var(--mud-palette-info) !important}.mud-info-text{color:var(--mud-palette-info) !important;--mud-ripple-color: var(--mud-palette-info) !important}.mud-info-hover{background-color:var(--mud-palette-info-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-info-hover:hover{background-color:var(--mud-palette-info-hover) !important}}.hover\:mud-info-hover:focus-visible,.hover\:mud-info-hover:active{background-color:var(--mud-palette-info-hover) !important}.mud-border-info{border-color:var(--mud-palette-info) !important}.mud-theme-info{color:var(--mud-palette-info-text) !important;background-color:var(--mud-palette-info) !important}.mud-success{background-color:var(--mud-palette-success) !important}.mud-success-text{color:var(--mud-palette-success) !important;--mud-ripple-color: var(--mud-palette-success) !important}.mud-success-hover{background-color:var(--mud-palette-success-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-success-hover:hover{background-color:var(--mud-palette-success-hover) !important}}.hover\:mud-success-hover:focus-visible,.hover\:mud-success-hover:active{background-color:var(--mud-palette-success-hover) !important}.mud-border-success{border-color:var(--mud-palette-success) !important}.mud-theme-success{color:var(--mud-palette-success-text) !important;background-color:var(--mud-palette-success) !important}.mud-warning{background-color:var(--mud-palette-warning) !important}.mud-warning-text{color:var(--mud-palette-warning) !important;--mud-ripple-color: var(--mud-palette-warning) !important}.mud-warning-hover{background-color:var(--mud-palette-warning-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-warning-hover:hover{background-color:var(--mud-palette-warning-hover) !important}}.hover\:mud-warning-hover:focus-visible,.hover\:mud-warning-hover:active{background-color:var(--mud-palette-warning-hover) !important}.mud-border-warning{border-color:var(--mud-palette-warning) !important}.mud-theme-warning{color:var(--mud-palette-warning-text) !important;background-color:var(--mud-palette-warning) !important}.mud-error{background-color:var(--mud-palette-error) !important}.mud-error-text{color:var(--mud-palette-error) !important;--mud-ripple-color: var(--mud-palette-error) !important}.mud-error-hover{background-color:var(--mud-palette-error-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-error-hover:hover{background-color:var(--mud-palette-error-hover) !important}}.hover\:mud-error-hover:focus-visible,.hover\:mud-error-hover:active{background-color:var(--mud-palette-error-hover) !important}.mud-border-error{border-color:var(--mud-palette-error) !important}.mud-theme-error{color:var(--mud-palette-error-text) !important;background-color:var(--mud-palette-error) !important}.mud-dark{background-color:var(--mud-palette-dark) !important}.mud-dark-text{color:var(--mud-palette-dark) !important;--mud-ripple-color: var(--mud-palette-dark) !important}.mud-dark-hover{background-color:var(--mud-palette-dark-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-dark-hover:hover{background-color:var(--mud-palette-dark-hover) !important}}.hover\:mud-dark-hover:focus-visible,.hover\:mud-dark-hover:active{background-color:var(--mud-palette-dark-hover) !important}.mud-border-dark{border-color:var(--mud-palette-dark) !important}.mud-theme-dark{color:var(--mud-palette-dark-text) !important;background-color:var(--mud-palette-dark) !important}.mud-inherit-text{color:inherit !important}.mud-border-lines-default{border-color:var(--mud-palette-lines-default)}.mud-background{background-color:var(--mud-palette-background) !important}.mud-background-gray{background-color:var(--mud-palette-background-gray) !important}.mud-theme-transparent{color:inherit !important;background-color:rgba(0,0,0,0) !important}.mud-transparent{background-color:rgba(0,0,0,0) !important}.mud-transparent-text{color:rgba(0,0,0,0) !important}.mud-text-primary{color:var(--mud-palette-text-primary)}.mud-text-secondary{color:var(--mud-palette-text-secondary)}.mud-text-disabled{color:var(--mud-palette-text-disabled)}.white{background-color:#fff !important}.white-text{color:#fff !important}.black{background-color:#000 !important}.black-text{color:#000 !important}*{box-sizing:border-box;margin:0;padding:0;border-width:0;border-style:solid;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:rgba(0,0,0,0)}strong,b{font-weight:700}body{color:var(--mud-palette-text-primary);font-family:var(--mud-typography-default-family);font-size:var(--mud-typography-default-size);font-weight:var(--mud-typography-default-weight);line-height:var(--mud-typography-default-lineheight);letter-spacing:var(--mud-typography-default-letterspacing);text-transform:var(--mud-typography-default-text-transform);background-color:var(--mud-palette-background)}a{color:var(--mud-palette-text-primary)}.mud-layout{height:100%;width:100%;position:relative}#blazor-error-ui{background-color:var(--mud-palette-error);color:var(--mud-palette-error-text);bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.75rem .7rem 1.25rem;position:fixed;width:100%;z-index:9999}#blazor-error-ui .reload{color:inherit;text-decoration:underline}#blazor-error-ui .dismiss{color:inherit;cursor:pointer;position:absolute;right:.75rem;top:.5rem}#components-reconnect-modal{z-index:9999 !important;background-color:var(--mud-palette-background) !important}#components-reconnect-modal h5{font-size:18px}#components-reconnect-modal button{color:var(--mud-palette-text-primary);padding:8px 16px;font-size:.875rem;min-width:64px;box-sizing:border-box;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-weight:500;line-height:1;border-radius:var(--mud-default-borderradius);letter-spacing:.02857em;text-transform:uppercase;margin:40px auto !important}@media(hover: hover)and (pointer: fine){#components-reconnect-modal button:hover{background-color:var(--mud-palette-action-default-hover)}}@keyframes mud-animation-fadein{0%{opacity:0}100%{opacity:1}}@-moz-keyframes mud-animation-fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes mud-animation-fadein{0%{opacity:0}100%{opacity:1}}@-o-keyframes mud-animation-fadein{0%{opacity:0}100%{opacity:1}}@-ms-keyframes mud-animation-fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes mud-scale-up-center{0%{-webkit-transform:scale(0.5);transform:scale(0.5)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes mud-scale-up-center{0%{-webkit-transform:scale(0.5);transform:scale(0.5)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes mud-skeleton-keyframes-pulse{0%{opacity:1}50%{opacity:.4}100%{opacity:1}}@-webkit-keyframes mud-skeleton-keyframes-wave{0%{transform:translateX(-100%)}60%{transform:translateX(100%)}100%{transform:translateX(100%)}}@-webkit-keyframes mud-progress-circular-keyframes-circular-rotate{0%{transform-origin:50% 50%}100%{transform:rotate(360deg)}}@-webkit-keyframes mud-progress-circular-keyframes-circular-dash{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0px}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px}100%{stroke-dasharray:100px,200px;stroke-dashoffset:-125px}}@-webkit-keyframes mud-progress-linear-horizontal-keyframes-indeterminate1{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-webkit-keyframes mud-progress-linear-horizontal-keyframes-indeterminate2{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@-webkit-keyframes mud-progress-linear-horizontal-keyframes-buffer{0%{opacity:1;background-position:0 50%}50%{opacity:0;background-position:0 50%}100%{opacity:1;background-position:-200px 50%}}@-webkit-keyframes mud-progress-linear-vertical-keyframes-indeterminate1{0%{bottom:-35%;top:100%}60%{bottom:100%;top:-90%}100%{bottom:100%;top:-90%}}@-webkit-keyframes mud-progress-linear-vertical-keyframes-indeterminate2{0%{bottom:-200%;top:100%}60%{bottom:107%;top:-8%}100%{bottom:107%;top:-8%}}@-webkit-keyframes mud-progress-linear-vertical-keyframes-buffer{0%{opacity:1;background-position:50% 0}50%{opacity:0;background-position:50% 0}100%{opacity:1;background-position:50% -200px}}@keyframes mud-progress-linear-striped-loading{0%{background-position:0 0}100%{background-position:300px 0}}a{text-decoration:none}a:focus-visible{outline:none}label{display:inline-block}button{color:inherit;border:0;cursor:pointer;margin:0;display:inline-flex;outline:0;padding:0;position:relative;align-items:center;user-select:none;border-radius:0;vertical-align:middle;-moz-appearance:none;justify-content:center;text-decoration:none;background-color:rgba(0,0,0,0);-webkit-appearance:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}button:focus{outline:none}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}iframe{border:none;height:100%;width:100%}.mud-elevation-0{box-shadow:var(--mud-elevation-0)}.mud-elevation-1{box-shadow:var(--mud-elevation-1)}.mud-elevation-2{box-shadow:var(--mud-elevation-2)}.mud-elevation-3{box-shadow:var(--mud-elevation-3)}.mud-elevation-4{box-shadow:var(--mud-elevation-4)}.mud-elevation-5{box-shadow:var(--mud-elevation-5)}.mud-elevation-6{box-shadow:var(--mud-elevation-6)}.mud-elevation-7{box-shadow:var(--mud-elevation-7)}.mud-elevation-8{box-shadow:var(--mud-elevation-8)}.mud-elevation-9{box-shadow:var(--mud-elevation-9)}.mud-elevation-10{box-shadow:var(--mud-elevation-10)}.mud-elevation-11{box-shadow:var(--mud-elevation-11)}.mud-elevation-12{box-shadow:var(--mud-elevation-12)}.mud-elevation-13{box-shadow:var(--mud-elevation-13)}.mud-elevation-14{box-shadow:var(--mud-elevation-14)}.mud-elevation-15{box-shadow:var(--mud-elevation-15)}.mud-elevation-16{box-shadow:var(--mud-elevation-16)}.mud-elevation-17{box-shadow:var(--mud-elevation-17)}.mud-elevation-18{box-shadow:var(--mud-elevation-18)}.mud-elevation-19{box-shadow:var(--mud-elevation-19)}.mud-elevation-20{box-shadow:var(--mud-elevation-20)}.mud-elevation-21{box-shadow:var(--mud-elevation-21)}.mud-elevation-22{box-shadow:var(--mud-elevation-22)}.mud-elevation-23{box-shadow:var(--mud-elevation-23)}.mud-elevation-24{box-shadow:var(--mud-elevation-24)}.mud-elevation-25{box-shadow:var(--mud-elevation-25)}.mud-alert{display:flex;padding:6px 16px;border-radius:var(--mud-default-borderradius);background-color:rgba(0,0,0,0);transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-alert.mud-square{border-radius:0px}.mud-alert.mud-dense{padding:0px 12px}.mud-alert-text-normal{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-dark-hover)}.mud-alert-text-primary{color:var(--mud-palette-primary-darken);background-color:var(--mud-palette-primary-hover)}.mud-alert-text-primary .mud-alert-icon{color:var(--mud-palette-primary)}.mud-alert-text-secondary{color:var(--mud-palette-secondary-darken);background-color:var(--mud-palette-secondary-hover)}.mud-alert-text-secondary .mud-alert-icon{color:var(--mud-palette-secondary)}.mud-alert-text-tertiary{color:var(--mud-palette-tertiary-darken);background-color:var(--mud-palette-tertiary-hover)}.mud-alert-text-tertiary .mud-alert-icon{color:var(--mud-palette-tertiary)}.mud-alert-text-info{color:var(--mud-palette-info-darken);background-color:var(--mud-palette-info-hover)}.mud-alert-text-info .mud-alert-icon{color:var(--mud-palette-info)}.mud-alert-text-success{color:var(--mud-palette-success-darken);background-color:var(--mud-palette-success-hover)}.mud-alert-text-success .mud-alert-icon{color:var(--mud-palette-success)}.mud-alert-text-warning{color:var(--mud-palette-warning-darken);background-color:var(--mud-palette-warning-hover)}.mud-alert-text-warning .mud-alert-icon{color:var(--mud-palette-warning)}.mud-alert-text-error{color:var(--mud-palette-error-darken);background-color:var(--mud-palette-error-hover)}.mud-alert-text-error .mud-alert-icon{color:var(--mud-palette-error)}.mud-alert-text-dark{color:var(--mud-palette-dark-darken);background-color:var(--mud-palette-dark-hover)}.mud-alert-text-dark .mud-alert-icon{color:var(--mud-palette-dark)}.mud-alert-outlined-normal{color:var(--mud-palette-text-primary);border:1px solid rgb(from var(--mud-palette-text-primary) r g b/var(--mud-palette-border-opacity))}.mud-alert-outlined-primary{color:var(--mud-palette-primary-darken);border:1px solid rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity))}.mud-alert-outlined-primary .mud-alert-icon{color:var(--mud-palette-primary)}.mud-alert-outlined-secondary{color:var(--mud-palette-secondary-darken);border:1px solid rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity))}.mud-alert-outlined-secondary .mud-alert-icon{color:var(--mud-palette-secondary)}.mud-alert-outlined-tertiary{color:var(--mud-palette-tertiary-darken);border:1px solid rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity))}.mud-alert-outlined-tertiary .mud-alert-icon{color:var(--mud-palette-tertiary)}.mud-alert-outlined-info{color:var(--mud-palette-info-darken);border:1px solid rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity))}.mud-alert-outlined-info .mud-alert-icon{color:var(--mud-palette-info)}.mud-alert-outlined-success{color:var(--mud-palette-success-darken);border:1px solid rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity))}.mud-alert-outlined-success .mud-alert-icon{color:var(--mud-palette-success)}.mud-alert-outlined-warning{color:var(--mud-palette-warning-darken);border:1px solid rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity))}.mud-alert-outlined-warning .mud-alert-icon{color:var(--mud-palette-warning)}.mud-alert-outlined-error{color:var(--mud-palette-error-darken);border:1px solid rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity))}.mud-alert-outlined-error .mud-alert-icon{color:var(--mud-palette-error)}.mud-alert-outlined-dark{color:var(--mud-palette-dark-darken);border:1px solid rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity))}.mud-alert-outlined-dark .mud-alert-icon{color:var(--mud-palette-dark)}.mud-alert-filled-normal{color:var(--mud-palette-dark-text);font-weight:500;background-color:var(--mud-palette-dark)}.mud-alert-filled-normal .mud-alert-close .mud-button-root{color:currentColor}.mud-alert-filled-primary{color:var(--mud-palette-primary-text);font-weight:500;background-color:var(--mud-palette-primary)}.mud-alert-filled-primary .mud-button-root{color:currentColor}.mud-alert-filled-secondary{color:var(--mud-palette-secondary-text);font-weight:500;background-color:var(--mud-palette-secondary)}.mud-alert-filled-secondary .mud-button-root{color:currentColor}.mud-alert-filled-tertiary{color:var(--mud-palette-tertiary-text);font-weight:500;background-color:var(--mud-palette-tertiary)}.mud-alert-filled-tertiary .mud-button-root{color:currentColor}.mud-alert-filled-info{color:var(--mud-palette-info-text);font-weight:500;background-color:var(--mud-palette-info)}.mud-alert-filled-info .mud-button-root{color:currentColor}.mud-alert-filled-success{color:var(--mud-palette-success-text);font-weight:500;background-color:var(--mud-palette-success)}.mud-alert-filled-success .mud-button-root{color:currentColor}.mud-alert-filled-warning{color:var(--mud-palette-warning-text);font-weight:500;background-color:var(--mud-palette-warning)}.mud-alert-filled-warning .mud-button-root{color:currentColor}.mud-alert-filled-error{color:var(--mud-palette-error-text);font-weight:500;background-color:var(--mud-palette-error)}.mud-alert-filled-error .mud-button-root{color:currentColor}.mud-alert-filled-dark{color:var(--mud-palette-dark-text);font-weight:500;background-color:var(--mud-palette-dark)}.mud-alert-filled-dark .mud-button-root{color:currentColor}.mud-alert-icon{display:flex;opacity:.9;padding:7px 0;font-size:22px;margin-right:12px;margin-inline-end:12px;margin-inline-start:unset}.mud-alert-icon.mud-alert-icon-left{margin-right:12px;margin-inline-end:12px;margin-inline-start:unset}.mud-alert-icon.mud-alert-icon-right{margin-left:12px;margin-inline-start:12px;margin-inline-end:unset}.mud-alert-message{padding:9px 0}.mud-alert-position{flex:1;display:flex;align-items:start}.mud-alert-close{display:flex;flex:0;align-items:center;margin-left:8px}.mud-badge-root{position:relative;display:inline-block}.mud-badge-root .mud-badge-wrapper{top:0;left:0;flex:0 1;width:100%;height:100%;display:flex;pointer-events:none;position:absolute}.mud-badge-root .mud-badge-wrapper.mud-badge-top{align-items:flex-start}.mud-badge-root .mud-badge-wrapper.mud-badge-top.left{justify-content:flex-start}.mud-badge-root .mud-badge-wrapper.mud-badge-top.center{justify-content:center}.mud-badge-root .mud-badge-wrapper.mud-badge-top.right{justify-content:flex-end}.mud-badge-root .mud-badge-wrapper.mud-badge-center{align-items:center}.mud-badge-root .mud-badge-wrapper.mud-badge-center.left{justify-content:flex-start}.mud-badge-root .mud-badge-wrapper.mud-badge-center.center{justify-content:center}.mud-badge-root .mud-badge-wrapper.mud-badge-center.right{justify-content:flex-end}.mud-badge-root .mud-badge-wrapper.mud-badge-bottom{align-items:flex-end}.mud-badge-root .mud-badge-wrapper.mud-badge-bottom.left{justify-content:flex-start}.mud-badge-root .mud-badge-wrapper.mud-badge-bottom.center{justify-content:center}.mud-badge-root .mud-badge-wrapper.mud-badge-bottom.right{justify-content:flex-end}.mud-badge{border-radius:10px;font-size:12px;height:20px;letter-spacing:0;min-width:20px;padding:4px 6px;pointer-events:auto;line-height:1;position:absolute;text-align:center;text-indent:0;top:auto;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1);white-space:nowrap}.mud-badge.mud-badge-default{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-gray-light)}.mud-badge.mud-badge-bordered{border-color:var(--mud-palette-surface);border-style:solid;border-width:2px;padding:3px 4px}.mud-badge.mud-badge-bordered.mud-badge-icon{padding:4px 6px}.mud-badge.mud-badge-icon{width:20px;height:20px}.mud-badge.mud-badge-icon .mud-icon-badge{color:inherit;font-size:12px}.mud-badge.mud-badge-dot{border-radius:50%;height:9px;min-width:0;padding:0;width:9px}.mud-badge.mud-badge{display:flex;align-items:center;justify-content:center}.mud-badge.mud-badge-top.left{inset:auto calc(100% - 4px) calc(100% - 4px) auto}.mud-badge.mud-badge-top.left.mud-badge-overlap{inset:auto calc(100% - 12px) calc(100% - 12px) auto}.mud-badge.mud-badge-top.center{bottom:calc(100% - 4px)}.mud-badge.mud-badge-top.center.mud-badge-overlap{bottom:calc(100% - 12px)}.mud-badge.mud-badge-top.right{inset:auto auto calc(100% - 4px) calc(100% - 4px)}.mud-badge.mud-badge-top.right.mud-badge-overlap{inset:auto auto calc(100% - 12px) calc(100% - 12px)}.mud-badge.mud-badge-center.left{right:calc(100% - 4px)}.mud-badge.mud-badge-center.left.mud-badge-overlap{right:calc(100% - 12px)}.mud-badge.mud-badge-center.right{left:calc(100% - 4px)}.mud-badge.mud-badge-center.right.mud-badge-overlap{left:calc(100% - 12px)}.mud-badge.mud-badge-bottom.left{inset:calc(100% - 4px) calc(100% - 4px) auto auto}.mud-badge.mud-badge-bottom.left.mud-badge-overlap{inset:calc(100% - 12px) calc(100% - 12px) auto auto}.mud-badge.mud-badge-bottom.center{top:calc(100% - 4px)}.mud-badge.mud-badge-bottom.center.mud-badge-overlap{top:calc(100% - 12px)}.mud-badge.mud-badge-bottom.right{inset:calc(100% - 4px) auto auto calc(100% - 4px)}.mud-badge.mud-badge-bottom.right.mud-badge-overlap{inset:calc(100% - 12px) auto auto calc(100% - 12px)}.mud-toolbar{display:flex;position:relative;align-items:center;--mud-internal-toolbar-height: 56px;height:var(--mud-internal-toolbar-height)}.mud-toolbar-gutters{padding-left:16px;padding-right:16px}@media(min-width: 0px)and (orientation: landscape){.mud-toolbar{--mud-internal-toolbar-height: 48px}}@media(min-width: 600px){.mud-toolbar{--mud-internal-toolbar-height: 64px}.mud-toolbar-gutters{padding-left:24px;padding-right:24px}}.mud-toolbar-dense{--mud-internal-toolbar-height: 48px}.mud-toolbar.mud-toolbar-wrap-content{height:auto;min-height:var(--mud-internal-toolbar-height);flex-wrap:wrap}.mud-toolbar.mud-toolbar-wrap-content.mud-toolbar-appbar{min-height:min(var(--mud-appbar-height),var(--mud-internal-toolbar-height))}.mud-tooltip-root.mud-tooltip-inline{display:inline-block}.mud-tooltip{padding:4px 8px;text-align:center;align-items:center;justify-content:center;font-weight:500;font-size:12px;line-height:1.4em;border-radius:var(--mud-default-borderradius);z-index:var(--mud-zindex-tooltip)}.mud-tooltip.mud-tooltip-default{color:var(--mud-palette-dark-text);background-color:var(--mud-palette-gray-darker)}.mud-tooltip.mud-tooltip-default.mud-tooltip-arrow::after{border-color:var(--mud-palette-gray-darker) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0)}.mud-tooltip.mud-tooltip-center-left:not([data-mudpopover-flip]),.mud-tooltip.mud-tooltip-center-right[data-mudpopover-flip]{transform:translateX(-10px)}.mud-tooltip.mud-tooltip-center-left:not([data-mudpopover-flip]).mud-tooltip-arrow::after,.mud-tooltip.mud-tooltip-center-right[data-mudpopover-flip].mud-tooltip-arrow::after{left:100%;transform:rotate(270deg)}.mud-tooltip.mud-tooltip-center-right:not([data-mudpopover-flip]),.mud-tooltip.mud-tooltip-center-left[data-mudpopover-flip]{transform:translateX(10px)}.mud-tooltip.mud-tooltip-center-right:not([data-mudpopover-flip]).mud-tooltip-arrow::after,.mud-tooltip.mud-tooltip-center-left[data-mudpopover-flip].mud-tooltip-arrow::after{right:100%;transform:rotate(90deg)}.mud-tooltip.mud-tooltip-top-center:not([data-mudpopover-flip]),.mud-tooltip.mud-tooltip-bottom-center[data-mudpopover-flip]{transform:translateY(-10px)}.mud-tooltip.mud-tooltip-top-center:not([data-mudpopover-flip]).mud-tooltip-arrow::after,.mud-tooltip.mud-tooltip-bottom-center[data-mudpopover-flip].mud-tooltip-arrow::after{top:100%;transform:rotate(0deg)}.mud-tooltip.mud-tooltip-bottom-center:not([data-mudpopover-flip]),.mud-tooltip.mud-tooltip-top-center[data-mudpopover-flip]{transform:translateY(10px)}.mud-tooltip.mud-tooltip-bottom-center:not([data-mudpopover-flip]).mud-tooltip-arrow::after,.mud-tooltip.mud-tooltip-top-center[data-mudpopover-flip].mud-tooltip-arrow::after{bottom:100%;transform:rotate(180deg)}.mud-tooltip.mud-tooltip-arrow::after{content:"";position:absolute;border-width:6px;border-style:solid;border-color:rgba(0,0,0,0);border-top-color:inherit}.mud-avatar{display:inline-flex;overflow:hidden;position:relative;align-items:center;flex-shrink:0;line-height:1;user-select:none;border-radius:50%;justify-content:center;color:var(--mud-palette-white);background-color:var(--mud-palette-gray-light)}.mud-avatar.mud-avatar-small{width:24px;height:24px;font-size:.75rem}.mud-avatar.mud-avatar-medium{width:40px;height:40px;font-size:1.25rem}.mud-avatar.mud-avatar-large{width:56px;height:56px;font-size:1.5rem}.mud-avatar-rounded{border-radius:var(--mud-default-borderradius)}.mud-avatar-square{border-radius:0}.mud-avatar>.mud-image{color:rgba(0,0,0,0);width:100%;height:100%;object-fit:cover;text-align:center;text-indent:10000px}.mud-avatar-fallback{width:75%;height:75%}.mud-avatar-outlined{color:var(--mud-palette-text-primary);background-color:unset;border:1px solid rgb(from var(--mud-palette-text-primary) r g b/var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-primary{color:var(--mud-palette-primary);border:1px solid rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-secondary{color:var(--mud-palette-secondary);border:1px solid rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-tertiary{color:var(--mud-palette-tertiary);border:1px solid rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-info{color:var(--mud-palette-info);border:1px solid rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-success{color:var(--mud-palette-success);border:1px solid rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-warning{color:var(--mud-palette-warning);border:1px solid rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-error{color:var(--mud-palette-error);border:1px solid rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-dark{color:var(--mud-palette-dark);border:1px solid rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity))}.mud-avatar-filled{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-lines-inputs)}.mud-avatar-filled.mud-avatar-filled-primary{color:var(--mud-palette-primary-text);background-color:var(--mud-palette-primary)}.mud-avatar-filled.mud-avatar-filled-secondary{color:var(--mud-palette-secondary-text);background-color:var(--mud-palette-secondary)}.mud-avatar-filled.mud-avatar-filled-tertiary{color:var(--mud-palette-tertiary-text);background-color:var(--mud-palette-tertiary)}.mud-avatar-filled.mud-avatar-filled-info{color:var(--mud-palette-info-text);background-color:var(--mud-palette-info)}.mud-avatar-filled.mud-avatar-filled-success{color:var(--mud-palette-success-text);background-color:var(--mud-palette-success)}.mud-avatar-filled.mud-avatar-filled-warning{color:var(--mud-palette-warning-text);background-color:var(--mud-palette-warning)}.mud-avatar-filled.mud-avatar-filled-error{color:var(--mud-palette-error-text);background-color:var(--mud-palette-error)}.mud-avatar-filled.mud-avatar-filled-dark{color:var(--mud-palette-dark-text);background-color:var(--mud-palette-dark)}.mud-avatar-group{display:flex}.mud-avatar-group .mud-avatar:first-child{margin-inline-start:0px !important}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-transparent .mud-avatar:not(.mud-avatar-outlined){border-color:rgba(0,0,0,0)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-surface .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-surface)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-primary .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-primary)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-secondary .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-secondary)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-tertiary .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-tertiary)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-info .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-info)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-success .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-success)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-warning .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-warning)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-error .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-error)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-dark .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-dark)}.mud-avatar-group.mud-avatar-group-outlined .mud-avatar{border:2px solid}.mud-avatar-group.mud-avatar-group-outlined .mud-avatar.mud-avatar-small{width:28px;height:28px}.mud-avatar-group.mud-avatar-group-outlined .mud-avatar.mud-avatar-medium{width:44px;height:44px}.mud-avatar-group.mud-avatar-group-outlined .mud-avatar.mud-avatar-large{width:60px;height:60px}.mud-breadcrumbs{display:flex;flex-wrap:wrap;flex:0 1 auto;align-items:center;list-style:none;margin:0;padding:16px 12px}.mud-breadcrumb-separator{display:inline-flex;padding:0 12px}.mud-breadcrumb-separator>span{color:var(--mud-palette-text-primary);opacity:.38}.mud-breadcrumb-item>a{display:flex;align-items:center}.mud-breadcrumb-item>a>svg.mud-icon-root{margin-right:4px;margin-inline-end:4px;margin-inline-start:unset}.mud-breadcrumb-item.mud-disabled>a{pointer-events:none;color:var(--mud-palette-action-disabled)}.mud-breadcrumbs-expander{cursor:pointer;display:flex;background-color:#eee}@media(hover: hover)and (pointer: fine){.mud-breadcrumbs-expander:hover{background-color:#e0e0e0}}.mud-breadcrumbs-expander>svg{width:26px}.mud-button-root{color:inherit;border:0;cursor:pointer;margin:0;display:inline-flex;outline:0;padding:0;position:relative;align-items:center;user-select:none;border-radius:0;vertical-align:middle;-moz-appearance:none;justify-content:center;text-decoration:none;background-color:rgba(0,0,0,0);-webkit-appearance:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mud-button-root::-moz-focus-inner{border-style:none}.mud-button-root:disabled{color:var(--mud-palette-action-disabled) !important;cursor:default;pointer-events:none}.mud-button{padding:6px 16px;font-family:var(--mud-typography-button-family);font-size:var(--mud-typography-button-size);font-weight:var(--mud-typography-button-weight);line-height:var(--mud-typography-button-lineheight);letter-spacing:var(--mud-typography-button-letterspacing);text-transform:var(--mud-typography-button-text-transform);min-width:64px;box-sizing:border-box;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:var(--mud-default-borderradius);color:var(--mud-palette-text-primary);--mud-ripple-color: var(--mud-palette-text-primary)}@media(hover: hover)and (pointer: fine){.mud-button:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-button:focus-visible,.mud-button:active{background-color:var(--mud-palette-action-default-hover)}.mud-button-text{padding:6px 8px}.mud-button-text.mud-button-text-inherit{color:inherit}.mud-button-text.mud-button-text-primary{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-primary:hover{background-color:var(--mud-palette-primary-hover)}}.mud-button-text.mud-button-text-primary:focus-visible,.mud-button-text.mud-button-text-primary:active{background-color:var(--mud-palette-primary-hover)}.mud-button-text.mud-button-text-secondary{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-secondary:hover{background-color:var(--mud-palette-secondary-hover)}}.mud-button-text.mud-button-text-secondary:focus-visible,.mud-button-text.mud-button-text-secondary:active{background-color:var(--mud-palette-secondary-hover)}.mud-button-text.mud-button-text-tertiary{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-tertiary:hover{background-color:var(--mud-palette-tertiary-hover)}}.mud-button-text.mud-button-text-tertiary:focus-visible,.mud-button-text.mud-button-text-tertiary:active{background-color:var(--mud-palette-tertiary-hover)}.mud-button-text.mud-button-text-info{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-info:hover{background-color:var(--mud-palette-info-hover)}}.mud-button-text.mud-button-text-info:focus-visible,.mud-button-text.mud-button-text-info:active{background-color:var(--mud-palette-info-hover)}.mud-button-text.mud-button-text-success{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-success:hover{background-color:var(--mud-palette-success-hover)}}.mud-button-text.mud-button-text-success:focus-visible,.mud-button-text.mud-button-text-success:active{background-color:var(--mud-palette-success-hover)}.mud-button-text.mud-button-text-warning{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-warning:hover{background-color:var(--mud-palette-warning-hover)}}.mud-button-text.mud-button-text-warning:focus-visible,.mud-button-text.mud-button-text-warning:active{background-color:var(--mud-palette-warning-hover)}.mud-button-text.mud-button-text-error{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-error:hover{background-color:var(--mud-palette-error-hover)}}.mud-button-text.mud-button-text-error:focus-visible,.mud-button-text.mud-button-text-error:active{background-color:var(--mud-palette-error-hover)}.mud-button-text.mud-button-text-dark{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-dark:hover{background-color:var(--mud-palette-dark-hover)}}.mud-button-text.mud-button-text-dark:focus-visible,.mud-button-text.mud-button-text-dark:active{background-color:var(--mud-palette-dark-hover)}.mud-button-outlined{color:var(--mud-palette-text-primary);border:1px solid rgb(from var(--mud-palette-text-primary) r g b/var(--mud-palette-border-opacity));padding:5px 15px}.mud-button-outlined.mud-button-outlined-inherit{color:inherit;border-color:currentColor}.mud-button-outlined.mud-icon-button{padding:5px}@media(hover: hover)and (pointer: fine){.mud-button-outlined:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-button-outlined:focus-visible,.mud-button-outlined:active{background-color:var(--mud-palette-action-default-hover)}.mud-button-outlined.mud-button-outlined-primary{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary);border:1px solid rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-primary:hover{border:1px solid rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-primary-hover)}}.mud-button-outlined.mud-button-outlined-primary:focus-visible,.mud-button-outlined.mud-button-outlined-primary:active{border:1px solid rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-primary-hover)}.mud-button-outlined.mud-button-outlined-secondary{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary);border:1px solid rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-secondary:hover{border:1px solid rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-secondary-hover)}}.mud-button-outlined.mud-button-outlined-secondary:focus-visible,.mud-button-outlined.mud-button-outlined-secondary:active{border:1px solid rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-secondary-hover)}.mud-button-outlined.mud-button-outlined-tertiary{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary);border:1px solid rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-tertiary:hover{border:1px solid rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-tertiary-hover)}}.mud-button-outlined.mud-button-outlined-tertiary:focus-visible,.mud-button-outlined.mud-button-outlined-tertiary:active{border:1px solid rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-tertiary-hover)}.mud-button-outlined.mud-button-outlined-info{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info);border:1px solid rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-info:hover{border:1px solid rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-info-hover)}}.mud-button-outlined.mud-button-outlined-info:focus-visible,.mud-button-outlined.mud-button-outlined-info:active{border:1px solid rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-info-hover)}.mud-button-outlined.mud-button-outlined-success{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success);border:1px solid rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-success:hover{border:1px solid rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-success-hover)}}.mud-button-outlined.mud-button-outlined-success:focus-visible,.mud-button-outlined.mud-button-outlined-success:active{border:1px solid rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-success-hover)}.mud-button-outlined.mud-button-outlined-warning{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning);border:1px solid rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-warning:hover{border:1px solid rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-warning-hover)}}.mud-button-outlined.mud-button-outlined-warning:focus-visible,.mud-button-outlined.mud-button-outlined-warning:active{border:1px solid rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-warning-hover)}.mud-button-outlined.mud-button-outlined-error{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error);border:1px solid rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-error:hover{border:1px solid rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-error-hover)}}.mud-button-outlined.mud-button-outlined-error:focus-visible,.mud-button-outlined.mud-button-outlined-error:active{border:1px solid rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-error-hover)}.mud-button-outlined.mud-button-outlined-dark{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark);border:1px solid rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-dark:hover{border:1px solid rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-dark-hover)}}.mud-button-outlined.mud-button-outlined-dark:focus-visible,.mud-button-outlined.mud-button-outlined-dark:active{border:1px solid rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity));background-color:var(--mud-palette-dark-hover)}.mud-button-outlined:disabled{border:1px solid var(--mud-palette-action-disabled-background)}.mud-button-filled{color:var(--mud-palette-text-primary);--mud-ripple-color: var(--mud-palette-text-primary);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;box-shadow:0px 3px 1px -2px rgba(0,0,0,.2),0px 2px 2px 0px rgba(0,0,0,.14),0px 1px 5px 0px rgba(0,0,0,.12);background-color:var(--mud-palette-action-default-hover)}.mud-button-filled.mud-icon-button{padding:6px}@media(hover: hover)and (pointer: fine){.mud-button-filled:hover{box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}}.mud-button-filled:focus-visible{box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}.mud-button-filled:active{box-shadow:0px 5px 5px -3px rgba(0,0,0,.2),0px 8px 10px 1px rgba(0,0,0,.14),0px 3px 14px 2px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}.mud-button-filled:disabled{color:var(--mud-palette-action-disabled);box-shadow:none;background-color:var(--mud-palette-action-disabled-background) !important}.mud-button-filled.mud-button-filled-primary{color:var(--mud-palette-primary-text);--mud-ripple-color: var(--mud-palette-primary-text);background-color:var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-primary:hover{background-color:var(--mud-palette-primary-darken)}}.mud-button-filled.mud-button-filled-primary:focus-visible,.mud-button-filled.mud-button-filled-primary:active{background-color:var(--mud-palette-primary-darken)}.mud-button-filled.mud-button-filled-secondary{color:var(--mud-palette-secondary-text);--mud-ripple-color: var(--mud-palette-secondary-text);background-color:var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-secondary:hover{background-color:var(--mud-palette-secondary-darken)}}.mud-button-filled.mud-button-filled-secondary:focus-visible,.mud-button-filled.mud-button-filled-secondary:active{background-color:var(--mud-palette-secondary-darken)}.mud-button-filled.mud-button-filled-tertiary{color:var(--mud-palette-tertiary-text);--mud-ripple-color: var(--mud-palette-tertiary-text);background-color:var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-tertiary:hover{background-color:var(--mud-palette-tertiary-darken)}}.mud-button-filled.mud-button-filled-tertiary:focus-visible,.mud-button-filled.mud-button-filled-tertiary:active{background-color:var(--mud-palette-tertiary-darken)}.mud-button-filled.mud-button-filled-info{color:var(--mud-palette-info-text);--mud-ripple-color: var(--mud-palette-info-text);background-color:var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-info:hover{background-color:var(--mud-palette-info-darken)}}.mud-button-filled.mud-button-filled-info:focus-visible,.mud-button-filled.mud-button-filled-info:active{background-color:var(--mud-palette-info-darken)}.mud-button-filled.mud-button-filled-success{color:var(--mud-palette-success-text);--mud-ripple-color: var(--mud-palette-success-text);background-color:var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-success:hover{background-color:var(--mud-palette-success-darken)}}.mud-button-filled.mud-button-filled-success:focus-visible,.mud-button-filled.mud-button-filled-success:active{background-color:var(--mud-palette-success-darken)}.mud-button-filled.mud-button-filled-warning{color:var(--mud-palette-warning-text);--mud-ripple-color: var(--mud-palette-warning-text);background-color:var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-warning:hover{background-color:var(--mud-palette-warning-darken)}}.mud-button-filled.mud-button-filled-warning:focus-visible,.mud-button-filled.mud-button-filled-warning:active{background-color:var(--mud-palette-warning-darken)}.mud-button-filled.mud-button-filled-error{color:var(--mud-palette-error-text);--mud-ripple-color: var(--mud-palette-error-text);background-color:var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-error:hover{background-color:var(--mud-palette-error-darken)}}.mud-button-filled.mud-button-filled-error:focus-visible,.mud-button-filled.mud-button-filled-error:active{background-color:var(--mud-palette-error-darken)}.mud-button-filled.mud-button-filled-dark{color:var(--mud-palette-dark-text);--mud-ripple-color: var(--mud-palette-dark-text);background-color:var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-dark:hover{background-color:var(--mud-palette-dark-darken)}}.mud-button-filled.mud-button-filled-dark:focus-visible,.mud-button-filled.mud-button-filled-dark:active{background-color:var(--mud-palette-dark-darken)}.mud-button-disable-elevation{box-shadow:none}@media(hover: hover)and (pointer: fine){.mud-button-disable-elevation:hover{box-shadow:none}}.mud-button-disable-elevation:active{box-shadow:none}.mud-button-disable-elevation.mud-focus-visible{box-shadow:none}.mud-button-disable-elevation:disabled{box-shadow:none}.mud-button-color-inherit{color:inherit;border-color:currentColor}.mud-button-text-size-small{padding:4px 5px;font-size:.8125rem}.mud-button-text-size-large{padding:8px 11px;font-size:.9375rem}.mud-button-outlined-size-small{padding:3px 9px;font-size:.8125rem}.mud-button-outlined-size-small.mud-icon-button{padding:4px}.mud-button-outlined-size-large{padding:7px 21px;font-size:.9375rem}.mud-button-outlined-size-large.mud-icon-button{padding:4px}.mud-button-filled-size-small{padding:4px 10px;font-size:.8125rem}.mud-button-filled-size-small.mud-icon-button{padding:5px}.mud-button-filled-size-large{padding:8px 22px;font-size:.9375rem}.mud-button-filled-size-large.mud-icon-button{padding:5px}.mud-button-full-width{width:100%}.mud-button-label{width:100%;display:inherit;align-items:inherit;justify-content:inherit}.mud-button-label .mud-button-icon-start{display:inherit;margin-left:-4px;margin-right:8px;margin-inline-start:-4px;margin-inline-end:8px}.mud-button-label .mud-button-icon-start.mud-button-icon-size-small{margin-left:-2px;margin-inline-start:-2px;margin-inline-end:8px}.mud-button-label .mud-button-icon-end{display:inherit;margin-left:8px;margin-right:-4px;margin-inline-start:8px;margin-inline-end:-4px}.mud-button-label .mud-button-icon-end.mud-button-icon-size-small{margin-right:-2px;margin-inline-end:-2px;margin-inline-start:8px}.mud-button-icon-size-small>*:first-child{font-size:18px}.mud-button-icon-size-medium>*:first-child{font-size:20px}.mud-button-icon-size-large>*:first-child{font-size:22px}.mud-button-group-root{border-radius:var(--mud-default-borderradius);display:inline-flex}.mud-button-group-root .mud-button-root{border-radius:var(--mud-default-borderradius)}.mud-button-group-root.mud-button-group-override-styles .mud-button{color:var(--mud-palette-text-primary);--mud-ripple-color: var(--mud-palette-text-primary)}.mud-button-group-root.mud-button-group-override-styles .mud-button-root{background-color:inherit;box-shadow:none;border:none}@media(hover: hover)and (pointer: fine){.mud-button-group-root.mud-button-group-override-styles .mud-button-root:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-button-group-root.mud-button-group-override-styles .mud-button-root:focus-visible,.mud-button-group-root.mud-button-group-override-styles .mud-button-root:active{background-color:var(--mud-palette-action-default-hover)}.mud-button-group-root.mud-button-group-override-styles .mud-button-root:disabled{border-color:var(--mud-palette-action-disabled-background) !important}.mud-button-group-root.mud-button-group-text-size-small .mud-button-root{padding:4px 5px;font-size:.8125rem}.mud-button-group-root.mud-button-group-text-size-small .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.422rem}.mud-button-group-root.mud-button-group-text-size-large .mud-button-root{padding:8px 11px;font-size:.9375rem}.mud-button-group-root.mud-button-group-text-size-large .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.641rem}.mud-button-group-root.mud-button-group-outlined-size-small .mud-button-root{padding:3px 9px;font-size:.8125rem}.mud-button-group-root.mud-button-group-outlined-size-small .mud-button-root.mud-icon-button{padding:3px 9px}.mud-button-group-root.mud-button-group-outlined-size-small .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.422rem}.mud-button-group-root.mud-button-group-outlined-size-large .mud-button-root{padding:7px 21px;font-size:.9375rem}.mud-button-group-root.mud-button-group-outlined-size-large .mud-button-root.mud-icon-button{padding:7px 15px}.mud-button-group-root.mud-button-group-outlined-size-large .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.641rem}.mud-button-group-root.mud-button-group-filled-size-small .mud-button-root{padding:4px 10px;font-size:.8125rem}.mud-button-group-root.mud-button-group-filled-size-small .mud-button-root.mud-icon-button{padding:4px 10px}.mud-button-group-root.mud-button-group-filled-size-small .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.422rem}.mud-button-group-root.mud-button-group-filled-size-large .mud-button-root{padding:8px 22px;font-size:.9375rem}.mud-button-group-root.mud-button-group-filled-size-large .mud-button-root.mud-icon-button{padding:8px 16px}.mud-button-group-root.mud-button-group-filled-size-large .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.641rem}.mud-button-group-root .mud-button-root.mud-icon-button{padding-right:12px;padding-left:12px}.mud-button-group-root .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.516rem}.mud-button-group-root .mud-button-root.mud-icon-button.mud-ripple-icon:after{transform:scale(10, 10)}.mud-button-group-root .mud-button-root.mud-icon-button.mud-ripple-icon:active:after{transform:scale(0, 0);opacity:.1;transition:0s}.mud-button-group-horizontal:not(.mud-button-group-rtl)>.mud-button-root:not(:last-child),.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:last-child) .mud-button-root{border-top-right-radius:0;border-bottom-right-radius:0}.mud-button-group-horizontal:not(.mud-button-group-rtl)>.mud-button-root:not(:first-child),.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.mud-button-group-horizontal.mud-button-group-rtl>.mud-button-root:not(:last-child),.mud-button-group-horizontal.mud-button-group-rtl>:not(:last-child) .mud-button-root{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.mud-button-group-horizontal.mud-button-group-rtl>.mud-button-root:not(:first-child),.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-top-right-radius:0;border-bottom-right-radius:0}.mud-button-group-vertical{flex-direction:column}.mud-button-group-vertical .mud-icon-button{width:100%}.mud-button-group-vertical>.mud-button-root:not(:last-child),.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom-right-radius:0;border-bottom-left-radius:0}.mud-button-group-vertical>.mud-button-root:not(:first-child),.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top-right-radius:0;border-top-left-radius:0;margin-top:-1px}.mud-button-group-text.mud-button-group-override-styles .mud-button-root{padding:6px 8px}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgb(from var(--mud-palette-text-primary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgb(from var(--mud-palette-text-primary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgb(from var(--mud-palette-text-primary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary .mud-button-root{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary .mud-button-root:hover{background-color:var(--mud-palette-primary-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary .mud-button-root:active{background-color:var(--mud-palette-primary-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary .mud-button-root{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary .mud-button-root:hover{background-color:var(--mud-palette-secondary-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary .mud-button-root:active{background-color:var(--mud-palette-secondary-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary .mud-button-root{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary .mud-button-root:hover{background-color:var(--mud-palette-tertiary-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary .mud-button-root:active{background-color:var(--mud-palette-tertiary-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info .mud-button-root{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info .mud-button-root:hover{background-color:var(--mud-palette-info-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info .mud-button-root:active{background-color:var(--mud-palette-info-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success .mud-button-root{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success .mud-button-root:hover{background-color:var(--mud-palette-success-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success .mud-button-root:active{background-color:var(--mud-palette-success-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning .mud-button-root{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning .mud-button-root:hover{background-color:var(--mud-palette-warning-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning .mud-button-root:active{background-color:var(--mud-palette-warning-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error .mud-button-root{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error .mud-button-root:hover{background-color:var(--mud-palette-error-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error .mud-button-root:active{background-color:var(--mud-palette-error-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark .mud-button-root{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark .mud-button-root:hover{background-color:var(--mud-palette-dark-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark .mud-button-root:active{background-color:var(--mud-palette-dark-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity))}.mud-button-group-outlined.mud-button-group-override-styles .mud-button-root{padding:5px 15px;border:1px solid rgb(from var(--mud-palette-text-primary) r g b/var(--mud-palette-border-opacity))}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-primary .mud-button-root{color:var(--mud-palette-primary);border:1px solid rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-primary .mud-button-root:hover{background-color:var(--mud-palette-primary-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-primary .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-primary .mud-button-root:active{background-color:var(--mud-palette-primary-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-secondary .mud-button-root{color:var(--mud-palette-secondary);border:1px solid rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-secondary .mud-button-root:hover{background-color:var(--mud-palette-secondary-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-secondary .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-secondary .mud-button-root:active{background-color:var(--mud-palette-secondary-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-tertiary .mud-button-root{color:var(--mud-palette-tertiary);border:1px solid rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-tertiary .mud-button-root:hover{background-color:var(--mud-palette-tertiary-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-tertiary .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-tertiary .mud-button-root:active{background-color:var(--mud-palette-tertiary-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-info .mud-button-root{color:var(--mud-palette-info);border:1px solid rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-info .mud-button-root:hover{background-color:var(--mud-palette-info-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-info .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-info .mud-button-root:active{background-color:var(--mud-palette-info-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-success .mud-button-root{color:var(--mud-palette-success);border:1px solid rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-success .mud-button-root:hover{background-color:var(--mud-palette-success-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-success .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-success .mud-button-root:active{background-color:var(--mud-palette-success-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-warning .mud-button-root{color:var(--mud-palette-warning);border:1px solid rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-warning .mud-button-root:hover{background-color:var(--mud-palette-warning-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-warning .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-warning .mud-button-root:active{background-color:var(--mud-palette-warning-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-error .mud-button-root{color:var(--mud-palette-error);border:1px solid rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-error .mud-button-root:hover{background-color:var(--mud-palette-error-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-error .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-error .mud-button-root:active{background-color:var(--mud-palette-error-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-dark .mud-button-root{color:var(--mud-palette-dark);border:1px solid rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-dark .mud-button-root:hover{background-color:var(--mud-palette-dark-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-dark .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-dark .mud-button-root:active{background-color:var(--mud-palette-dark-hover)}.mud-button-group-filled{box-shadow:var(--mud-elevation-2)}.mud-button-group-filled .mud-button-root{box-shadow:none}@media(hover: hover)and (pointer: fine){.mud-button-group-filled .mud-button-root:hover{box-shadow:var(--mud-elevation-4)}}.mud-button-group-filled .mud-button-root:focus-visible,.mud-button-group-filled .mud-button-root:active{box-shadow:var(--mud-elevation-4)}.mud-button-group-filled.mud-button-group-override-styles .mud-button-root{background-color:var(--mud-palette-action-default-hover);padding:6px 16px}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgb(from var(--mud-palette-divider) r g b/var(--mud-palette-border-opacity))}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgb(from var(--mud-palette-divider) r g b/var(--mud-palette-border-opacity))}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid rgb(from var(--mud-palette-divider) r g b/var(--mud-palette-border-opacity))}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary .mud-button-root{background-color:var(--mud-palette-primary);color:var(--mud-palette-primary-text);--mud-ripple-color: var(--mud-palette-primary-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary .mud-button-root:hover{background-color:var(--mud-palette-primary-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary .mud-button-root:active{background-color:var(--mud-palette-primary-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-primary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-primary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-primary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary .mud-button-root{background-color:var(--mud-palette-secondary);color:var(--mud-palette-secondary-text);--mud-ripple-color: var(--mud-palette-secondary-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary .mud-button-root:hover{background-color:var(--mud-palette-secondary-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary .mud-button-root:active{background-color:var(--mud-palette-secondary-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-secondary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-secondary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-secondary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary .mud-button-root{background-color:var(--mud-palette-tertiary);color:var(--mud-palette-tertiary-text);--mud-ripple-color: var(--mud-palette-tertiary-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary .mud-button-root:hover{background-color:var(--mud-palette-tertiary-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary .mud-button-root:active{background-color:var(--mud-palette-tertiary-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-tertiary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-tertiary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-tertiary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info .mud-button-root{background-color:var(--mud-palette-info);color:var(--mud-palette-info-text);--mud-ripple-color: var(--mud-palette-info-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info .mud-button-root:hover{background-color:var(--mud-palette-info-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info .mud-button-root:active{background-color:var(--mud-palette-info-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-info-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-info-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-info-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success .mud-button-root{background-color:var(--mud-palette-success);color:var(--mud-palette-success-text);--mud-ripple-color: var(--mud-palette-success-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success .mud-button-root:hover{background-color:var(--mud-palette-success-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success .mud-button-root:active{background-color:var(--mud-palette-success-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-success-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-success-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-success-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning .mud-button-root{background-color:var(--mud-palette-warning);color:var(--mud-palette-warning-text);--mud-ripple-color: var(--mud-palette-warning-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning .mud-button-root:hover{background-color:var(--mud-palette-warning-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning .mud-button-root:active{background-color:var(--mud-palette-warning-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-warning-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-warning-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-warning-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error .mud-button-root{background-color:var(--mud-palette-error);color:var(--mud-palette-error-text);--mud-ripple-color: var(--mud-palette-error-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error .mud-button-root:hover{background-color:var(--mud-palette-error-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error .mud-button-root:active{background-color:var(--mud-palette-error-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-error-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-error-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-error-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark .mud-button-root{background-color:var(--mud-palette-dark);color:var(--mud-palette-dark-text);--mud-ripple-color: var(--mud-palette-dark-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark .mud-button-root:hover{background-color:var(--mud-palette-dark-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark .mud-button-root:active{background-color:var(--mud-palette-dark-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-dark-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-dark-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-dark-lighten)}.mud-button-group-disable-elevation{box-shadow:none}.mud-icon-button{flex:0 0 auto;padding:12px;overflow:visible;font-size:1.5rem;text-align:center;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:50%;color:var(--mud-palette-action-default)}.mud-icon-button.mud-button{min-width:unset;border-radius:var(--mud-default-borderradius)}@media(hover: hover)and (pointer: fine){.mud-icon-button:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-icon-button:has(:focus-visible),.mud-icon-button:active{background-color:var(--mud-palette-action-default-hover)}.mud-icon-button:disabled{color:var(--mud-palette-action-disabled);background-color:rgba(0,0,0,0)}.mud-icon-button.mud-readonly,.mud-icon-button .mud-readonly:hover{cursor:default}.mud-icon-button-color-inherit{color:inherit}@media(hover: hover)and (pointer: fine){.mud-icon-button-color-inherit:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-icon-button-color-inherit:focus-visible,.mud-icon-button-color-inherit:active{background-color:var(--mud-palette-action-default-hover)}.mud-icon-button-label{width:100%;display:flex;align-items:inherit;justify-content:inherit}.mud-icon-button-edge-start{margin-left:-12px;margin-inline-start:-12px;margin-inline-end:unset}.mud-icon-button-edge-end{margin-right:-12px;margin-inline-end:-12px;margin-inline-start:unset}.mud-icon-button-edge-margin-end{margin-right:8px;margin-inline-end:8px;margin-inline-start:unset}.mud-icon-button-size-small{padding:3px;font-size:1.125rem}.mud-icon-button-size-small.mud-icon-button-edge-start{margin-left:-3px;margin-inline-start:-3px;margin-inline-end:unset}.mud-icon-button-size-small.mud-icon-button-edge-end{margin-right:-3px;margin-inline-end:-3px;margin-inline-start:unset}.mud-icon-button-size-large.mud-button>.mud-icon-button-label>.mud-icon-size-large{font-size:2rem}.mud-card{display:flex;flex-direction:column}.mud-card-header{display:flex;padding:16px;align-items:center;border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-card-header .mud-card-header-avatar{flex:0 0 auto;margin-right:16px;margin-inline-end:16px;margin-inline-start:unset}.mud-card-header .mud-card-header-content{flex:1 1 auto}.mud-card-header .mud-card-header-content .mud-typography{margin-bottom:0}.mud-card-header .mud-card-header-actions{flex:0 0 auto;align-self:flex-start;margin-top:-8px;margin-right:-8px;margin-inline-end:-8px;margin-inline-start:unset}.mud-card-media{display:block;background-size:cover;background-repeat:no-repeat;background-position:center;border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-card-header+.mud-card-media{border-top-left-radius:0px;border-top-right-radius:0px}.mud-card-content{flex-grow:1;padding:16px}.mud-card-actions{display:flex;padding:8px;align-items:center}.mud-carousel{display:flex !important;position:relative;margin:0px !important;clip-path:inset(0px 0px 0px 0px);overflow:hidden}.mud-carousel.mud-carousel-primary{color:var(--mud-palette-primary-text)}.mud-carousel.mud-carousel-secondary{color:var(--mud-palette-secondary-text)}.mud-carousel.mud-carousel-tertiary{color:var(--mud-palette-tertiary-text)}.mud-carousel.mud-carousel-info{color:var(--mud-palette-info-text)}.mud-carousel.mud-carousel-success{color:var(--mud-palette-success-text)}.mud-carousel.mud-carousel-warning{color:var(--mud-palette-warning-text)}.mud-carousel.mud-carousel-error{color:var(--mud-palette-error-text)}.mud-carousel.mud-carousel-dark{color:var(--mud-palette-dark-text)}.mud-carousel-elements-rtl{transform:rotate(180deg) !important}.mud-carousel-item{position:absolute;left:0px;right:0px;top:0px;bottom:0px;margin:inherit;padding:inherit;z-index:2}.mud-carousel-item.mud-carousel-item-primary{color:var(--mud-palette-primary-text);background-color:var(--mud-palette-primary)}.mud-carousel-item.mud-carousel-item-secondary{color:var(--mud-palette-secondary-text);background-color:var(--mud-palette-secondary)}.mud-carousel-item.mud-carousel-item-tertiary{color:var(--mud-palette-tertiary-text);background-color:var(--mud-palette-tertiary)}.mud-carousel-item.mud-carousel-item-info{color:var(--mud-palette-info-text);background-color:var(--mud-palette-info)}.mud-carousel-item.mud-carousel-item-success{color:var(--mud-palette-success-text);background-color:var(--mud-palette-success)}.mud-carousel-item.mud-carousel-item-warning{color:var(--mud-palette-warning-text);background-color:var(--mud-palette-warning)}.mud-carousel-item.mud-carousel-item-error{color:var(--mud-palette-error-text);background-color:var(--mud-palette-error)}.mud-carousel-item.mud-carousel-item-dark{color:var(--mud-palette-dark-text);background-color:var(--mud-palette-dark)}.mud-carousel-item-exit{z-index:1}@keyframes mud-carousel-transition-fade-in-keyframe{from{opacity:0}to{opacity:1}}@keyframes mud-carousel-transition-fade-out-keyframe{from{opacity:1}to{opacity:0}}.mud-carousel-transition-fade-in{animation:.5s mud-carousel-transition-fade-in-keyframe}.mud-carousel-transition-fade-out{animation:.5s mud-carousel-transition-fade-out-keyframe;animation-fill-mode:forwards}.mud-carousel-transition-none{display:none}@keyframes mud-carousel-transition-slide-next-enter-keyframe{from{transform:translate3d(100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes mud-carousel-transition-slide-next-rtl-enter-keyframe{from{transform:translate3d(-100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes mud-carousel-transition-slide-next-exit-keyframe{from{transform:translate3d(0, 0, 0);visibility:visible}to{transform:translate3d(-100%, 0, 0)}}@keyframes mud-carousel-transition-slide-next-rtl-exit-keyframe{from{transform:translate3d(0, 0, 0);visibility:visible}to{transform:translate3d(100%, 0, 0)}}.mud-carousel-transition-slide-next-enter{animation:.5s mud-carousel-transition-slide-next-enter-keyframe}.mud-carousel-transition-slide-next-rtl-enter{animation:.5s mud-carousel-transition-slide-next-rtl-enter-keyframe}.mud-carousel-transition-slide-next-exit{animation:.5s mud-carousel-transition-slide-next-exit-keyframe;animation-fill-mode:forwards}.mud-carousel-transition-slide-next-rtl-exit{animation:.5s mud-carousel-transition-slide-next-rtl-exit-keyframe;animation-fill-mode:forwards}@keyframes mud-carousel-transition-slide-prev-enter-keyframe{from{transform:translate3d(-100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes mud-carousel-transition-slide-prev-rtl-enter-keyframe{from{transform:translate3d(100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes mud-carousel-transition-slide-prev-exit-keyframe{from{transform:translate3d(0, 0, 0);visibility:visible}to{transform:translate3d(100%, 0, 0)}}@keyframes mud-carousel-transition-slide-prev-rtl-exit-keyframe{from{transform:translate3d(0, 0, 0);visibility:visible}to{transform:translate3d(-100%, 0, 0)}}.mud-carousel-transition-slide-prev-enter{animation:.5s mud-carousel-transition-slide-prev-enter-keyframe}.mud-carousel-transition-slide-prev-rtl-enter{animation:.5s mud-carousel-transition-slide-prev-rtl-enter-keyframe}.mud-carousel-transition-slide-prev-exit{animation:.5s mud-carousel-transition-slide-prev-exit-keyframe;animation-fill-mode:forwards}.mud-carousel-transition-slide-prev-rtl-exit{animation:.5s mud-carousel-transition-slide-prev-rtl-exit-keyframe;animation-fill-mode:forwards}.mud-chart{display:flex;min-height:fit-content;min-width:fit-content}.mud-chart svg{order:2}.mud-chart.mud-chart-legend-bottom{flex-direction:column}.mud-chart.mud-chart-legend-bottom .mud-chart-legend{margin-top:10px;justify-content:center;width:100%;order:3}.mud-chart.mud-chart-legend-top{flex-direction:column}.mud-chart.mud-chart-legend-top .mud-chart-legend{justify-content:center;width:100%;order:1}.mud-chart.mud-chart-legend-right{flex-direction:row}.mud-chart.mud-chart-legend-right .mud-chart-legend{flex-direction:column;order:3;min-width:fit-content}.mud-chart.mud-chart-legend-left{flex-direction:row}.mud-chart.mud-chart-legend-left .mud-chart-legend{flex-direction:column;order:1;min-width:fit-content}.mud-chart .mud-chart-donut,.mud-chart .mud-chart-pie,.mud-chart mud-chart-line{display:flex;margin:auto}.mud-chart .mud-chart-legend{display:flex;padding:10px 0px;margin:auto;flex-wrap:wrap}.mud-chart .mud-chart-legend .mud-chart-legend-item{display:block;margin:2px 5px}.mud-chart .mud-chart-legend .mud-chart-legend-item .mud-chart-legend-marker{height:12px;width:12px;border-radius:50%;position:relative;display:inline-flex}.mud-chart .mud-chart-legend .mud-chart-legend-item .mud-chart-legend-text{display:inline-flex}.mud-chart .mud-chart-legend .mud-chart-legend-item .mud-chart-legend-checkbox{display:flex;align-items:center}.mud-chart .mud-chart-legend .mud-chart-legend-item .mud-input-control{width:35px !important}.mud-charts-yaxis{fill:var(--mud-palette-text-primary)}.mud-charts-xaxis{fill:var(--mud-palette-text-primary)}.mud-chart-donut .mud-donut-hole{fill:rgba(0,0,0,0);user-select:none;pointer-events:unset}.mud-chart-donut .mud-donut-ring{fill:rgba(0,0,0,0);stroke:#fff;pointer-events:unset}.mud-chart-donut .mud-donut-segment{fill:rgba(0,0,0,0);pointer-events:stroke;-webkit-transition:stroke .2s ease;-moz-transition:stroke .2s ease;-o-transition:stroke .2s ease;transition:stroke .2s ease}.mud-chart-legend-marker{height:12px;width:12px;border-radius:50%;position:relative;display:inline-block}.mud-chart-marker-color-0{background-color:#008ffb}.mud-chart-marker-color-1{background-color:#00e396}.mud-chart-marker-color-2{background-color:#feb019}.mud-chart-marker-color-3{background-color:#ff4560}.mud-chart-marker-color-4{background-color:#594ae2}.mud-chart-cell text{fill:#000}.mud-chart-heatmap-legend line{stroke:var(--mud-palette-text-primary)}.mud-chart-heatmap-legend text{fill:var(--mud-palette-text-primary)}.mud-chat{display:grid;column-gap:.75rem;padding-top:.25rem;padding-bottom:.25rem;border-radius:var(--mud-default-borderradius)}.mud-chat.mud-dense .mud-chat-bubble{padding:.1875rem 1rem;min-height:.9166666667rem}.mud-chat.mud-dense .mud-chat-bubble+.mud-chat-bubble{margin-top:.1875rem}.mud-chat.mud-dense .mud-chat-header{line-height:.4166666667rem}.mud-chat.mud-square{border-radius:0px}.mud-chat.mud-square .mud-chat-bubble{border-radius:0px}.mud-chat.mud-chat-arrow-top .mud-chat-bubble:before{content:"";mask-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0nMycgaGVpZ2h0PSczJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwYXRoIGZpbGw9J2JsYWNrJyBkPSdtIDAgMCBMIDMgMCBMIDMgMyBDIDMgMiAxIDAgMCAwJy8+PC9zdmc+);bottom:auto;top:0}.mud-chat.mud-chat-arrow-top.mud-chat-start .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-top.mud-chat-end.mud-chat-rtl .mud-chat-bubble:before{transform:none}.mud-chat.mud-chat-arrow-top.mud-chat-end .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-top.mud-chat-start.mud-chat-rtl .mud-chat-bubble:before{transform:scaleX(-1)}.mud-chat.mud-chat-arrow-top.mud-chat-start .mud-chat-bubble,.mud-chat.mud-chat-arrow-top.mud-chat-end.mud-chat-rtl .mud-chat-bubble{border-top-left-radius:0}.mud-chat.mud-chat-arrow-top.mud-chat-end .mud-chat-bubble,.mud-chat.mud-chat-arrow-top.mud-chat-start.mud-chat-rtl .mud-chat-bubble{border-top-right-radius:0}.mud-chat.mud-chat-arrow-bottom .mud-chat-bubble:before{content:"";mask-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0nMycgaGVpZ2h0PSczJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwYXRoIGZpbGw9J2JsYWNrJyBkPSdtIDAgMyBMIDMgMyBMIDMgMCBDIDMgMSAxIDMgMCAzJy8+PC9zdmc+);bottom:0}.mud-chat.mud-chat-arrow-bottom.mud-chat-start .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-bottom.mud-chat-end.mud-chat-rtl .mud-chat-bubble:before{transform:none}.mud-chat.mud-chat-arrow-bottom.mud-chat-end .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-bottom.mud-chat-start.mud-chat-rtl .mud-chat-bubble:before{transform:scaleX(-1)}.mud-chat.mud-chat-arrow-bottom.mud-chat-start .mud-chat-bubble,.mud-chat.mud-chat-arrow-bottom.mud-chat-end.mud-chat-rtl .mud-chat-bubble{border-bottom-left-radius:0}.mud-chat.mud-chat-arrow-bottom.mud-chat-end .mud-chat-bubble,.mud-chat.mud-chat-arrow-bottom.mud-chat-start.mud-chat-rtl .mud-chat-bubble{border-bottom-right-radius:0}.mud-chat.mud-chat-arrow-middle .mud-chat-bubble:before{content:"";mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzIDMiIHdpZHRoPSIzMDAiIGhlaWdodD0iMzAwIj4KICA8cG9seWdvbiBwb2ludHM9IjMsMCAzLDMgMS41LDEuNSIgZmlsbD0iYmxhY2siIC8+Cjwvc3ZnPg==);top:50%}.mud-chat.mud-chat-arrow-middle.mud-chat-start .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-middle.mud-chat-end.mud-chat-rtl .mud-chat-bubble:before{transform:translateY(-50%)}.mud-chat.mud-chat-arrow-middle.mud-chat-end .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-middle.mud-chat-start.mud-chat-rtl .mud-chat-bubble:before{transform:scaleX(-1) translateY(-50%)}.mud-chat-bubble{position:relative;text-align:start;align-content:center;width:fit-content;padding:.5rem 1rem;max-width:90%;border-radius:var(--mud-default-borderradius);min-width:2.75rem;min-height:2.75rem}.mud-chat-bubble.mud-chat-bubble-clickable{cursor:pointer;user-select:none;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;--mud-ripple-color: $default-foreground;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important}@media(hover: hover)and (pointer: fine){.mud-chat-bubble.mud-chat-bubble-clickable:hover{box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}}.mud-chat-bubble.mud-chat-bubble-clickable:focus-visible{box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}.mud-chat-bubble.mud-chat-bubble-clickable:active{box-shadow:0px 5px 5px -3px rgba(0,0,0,.2),0px 8px 10px 1px rgba(0,0,0,.14),0px 3px 14px 2px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}.mud-chat-bubble:before{position:absolute;width:.75rem;height:.75rem;background-color:inherit;mask-size:contain;mask-repeat:no-repeat;mask-position:center}.mud-chat-bubble+.mud-chat-bubble{margin-top:.5rem}.mud-chat-bubble+.mud-chat-bubble:before{content:none !important}.mud-chat-header{grid-row-start:1;font-size:.875rem;line-height:1.25rem;margin-left:.25rem;margin-right:.25rem;min-height:.5rem}.mud-chat-header time{margin-left:.5rem;opacity:.5;font-size:.75rem;line-height:1rem}.mud-chat-footer{opacity:.5;font-size:.875rem;line-height:1rem;margin-left:.25rem;margin-right:.25rem;min-height:.5rem}.mud-chat .mud-avatar{align-self:center;grid-row-start:1}.mud-chat:has(.mud-chat-header) .mud-avatar{grid-row-start:2}.mud-chat-start{place-items:start;grid-template-columns:1fr 99fr}.mud-chat-start .mud-chat-header,.mud-chat-start .mud-chat-footer{grid-column-start:2}.mud-chat-start .mud-avatar{grid-column-start:1;margin-left:.25rem;margin-right:-0.35rem}.mud-chat-start .mud-chat-bubble{grid-column-start:2}.mud-chat-start .mud-chat-bubble:before{inset-inline-start:-0.749rem}.mud-chat-end{place-items:end;grid-template-columns:99fr 1fr}.mud-chat-end .mud-chat-header,.mud-chat-end .mud-chat-footer{grid-column-start:1}.mud-chat-end .mud-avatar{grid-column-start:2;margin-right:.25rem;margin-left:-0.35rem}.mud-chat-end .mud-chat-bubble{grid-column-start:1;text-align:end}.mud-chat-end .mud-chat-bubble:before{inset-inline-start:100%;transform:scaleX(-1)}.mud-chat-text-default{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-action-default-hover);--mud-ripple-color: $default-foreground}.mud-chat-text-primary{color:var(--mud-palette-primary-darken);background-color:var(--mud-palette-primary-hover);--mud-ripple-color: var(--mud-palette-primary-darken)}.mud-chat-text-secondary{color:var(--mud-palette-secondary-darken);background-color:var(--mud-palette-secondary-hover);--mud-ripple-color: var(--mud-palette-secondary-darken)}.mud-chat-text-tertiary{color:var(--mud-palette-tertiary-darken);background-color:var(--mud-palette-tertiary-hover);--mud-ripple-color: var(--mud-palette-tertiary-darken)}.mud-chat-text-info{color:var(--mud-palette-info-darken);background-color:var(--mud-palette-info-hover);--mud-ripple-color: var(--mud-palette-info-darken)}.mud-chat-text-success{color:var(--mud-palette-success-darken);background-color:var(--mud-palette-success-hover);--mud-ripple-color: var(--mud-palette-success-darken)}.mud-chat-text-warning{color:var(--mud-palette-warning-darken);background-color:var(--mud-palette-warning-hover);--mud-ripple-color: var(--mud-palette-warning-darken)}.mud-chat-text-error{color:var(--mud-palette-error-darken);background-color:var(--mud-palette-error-hover);--mud-ripple-color: var(--mud-palette-error-darken)}.mud-chat-text-dark{color:var(--mud-palette-dark-darken);background-color:var(--mud-palette-dark-hover);--mud-ripple-color: var(--mud-palette-dark-darken)}.mud-chat-outlined-default{color:var(--mud-palette-text-primary);border:1px solid var(--mud-palette-action-default-hover);--mud-ripple-color: $default-foreground}.mud-chat-outlined-default:before{background-color:var(--mud-palette-action-default-hover)}.mud-chat-outlined-default.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-default.mud-chat-arrow-bottom:before{bottom:-0.07rem !important}.mud-chat-outlined-primary{color:var(--mud-palette-primary-darken);border:1px solid var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary-darken)}.mud-chat-outlined-primary:before{background-color:var(--mud-palette-primary-darken)}.mud-chat-outlined-primary.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-primary.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-secondary{color:var(--mud-palette-secondary-darken);border:1px solid var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary-darken)}.mud-chat-outlined-secondary:before{background-color:var(--mud-palette-secondary-darken)}.mud-chat-outlined-secondary.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-secondary.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-tertiary{color:var(--mud-palette-tertiary-darken);border:1px solid var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary-darken)}.mud-chat-outlined-tertiary:before{background-color:var(--mud-palette-tertiary-darken)}.mud-chat-outlined-tertiary.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-tertiary.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-info{color:var(--mud-palette-info-darken);border:1px solid var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info-darken)}.mud-chat-outlined-info:before{background-color:var(--mud-palette-info-darken)}.mud-chat-outlined-info.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-info.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-success{color:var(--mud-palette-success-darken);border:1px solid var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success-darken)}.mud-chat-outlined-success:before{background-color:var(--mud-palette-success-darken)}.mud-chat-outlined-success.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-success.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-warning{color:var(--mud-palette-warning-darken);border:1px solid var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning-darken)}.mud-chat-outlined-warning:before{background-color:var(--mud-palette-warning-darken)}.mud-chat-outlined-warning.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-warning.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-error{color:var(--mud-palette-error-darken);border:1px solid var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error-darken)}.mud-chat-outlined-error:before{background-color:var(--mud-palette-error-darken)}.mud-chat-outlined-error.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-error.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-dark{color:var(--mud-palette-dark-darken);border:1px solid var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark-darken)}.mud-chat-outlined-dark:before{background-color:var(--mud-palette-dark-darken)}.mud-chat-outlined-dark.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-dark.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-filled-default{color:var(--mud-palette-text-primary);font-weight:500;background-color:var(--mud-palette-action-default-hover);--mud-ripple-color: $default-foreground}.mud-chat-filled-primary{color:var(--mud-palette-primary-text);font-weight:500;background-color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary-text)}.mud-chat-filled-secondary{color:var(--mud-palette-secondary-text);font-weight:500;background-color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary-text)}.mud-chat-filled-tertiary{color:var(--mud-palette-tertiary-text);font-weight:500;background-color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary-text)}.mud-chat-filled-info{color:var(--mud-palette-info-text);font-weight:500;background-color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info-text)}.mud-chat-filled-success{color:var(--mud-palette-success-text);font-weight:500;background-color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success-text)}.mud-chat-filled-warning{color:var(--mud-palette-warning-text);font-weight:500;background-color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning-text)}.mud-chat-filled-error{color:var(--mud-palette-error-text);font-weight:500;background-color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error-text)}.mud-chat-filled-dark{color:var(--mud-palette-dark-text);font-weight:500;background-color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark-text)}.mud-checkbox{cursor:pointer;display:inline-flex;align-items:center;vertical-align:middle;-webkit-tap-highlight-color:rgba(0,0,0,0)}@media(hover: hover)and (pointer: fine){.mud-checkbox .mud-disabled:hover{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-checkbox .mud-disabled:hover *{cursor:default;color:var(--mud-palette-text-disabled)}}.mud-checkbox.mud-disabled,.mud-checkbox .mud-disabled:focus-visible,.mud-checkbox .mud-disabled:active{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-checkbox.mud-disabled *,.mud-checkbox .mud-disabled:focus-visible *,.mud-checkbox .mud-disabled:active *{cursor:default;color:var(--mud-palette-text-disabled)}.mud-checkbox.mud-readonly,.mud-checkbox .mud-readonly:hover{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-checkbox .mud-checkbox-dense{padding:4px}.mud-checkbox-input{top:0;left:0;width:100%;cursor:inherit;height:100%;margin:0;opacity:0;padding:0;z-index:1;position:absolute}.mud-checkbox-span{display:inline-block;width:100%;cursor:pointer}.mud-chart-legend-checkbox .mud-checkbox svg path:last-child{fill:var(--checkbox-color) !important}.mud-chip-container{display:contents}.mud-chip{border:none;display:inline-flex;max-width:100%;outline:0;padding:0 12px;position:relative;box-sizing:border-box;transition:background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;align-items:center;white-space:nowrap;vertical-align:middle;justify-content:center;text-decoration:none;line-height:normal;margin:4px}.mud-chip.mud-disabled{opacity:.5;pointer-events:none}.mud-chip.mud-chip-size-small{border-radius:12px;font-size:12px;height:24px;padding:0 8px}.mud-chip.mud-chip-size-small .mud-avatar{margin-left:-4px;margin-right:4px;margin-inline-start:-4px;margin-inline-end:4px;width:18px;height:18px;font-size:.625rem}.mud-chip.mud-chip-size-small .mud-icon-root{font-size:1.125rem}.mud-chip.mud-chip-size-small .mud-chip-close-button{margin-right:-4px;margin-left:4px;margin-inline-end:-4px;margin-inline-start:4px}.mud-chip.mud-chip-size-medium{height:32px;font-size:14px;border-radius:16px}.mud-chip.mud-chip-size-medium .mud-avatar{margin-left:-8px;margin-right:8px;margin-inline-start:-8px;margin-inline-end:8px;width:24px;height:24px;font-size:.75rem}.mud-chip.mud-chip-size-large{height:40px;font-size:16px;border-radius:20px;padding:0 16px}.mud-chip.mud-chip-size-large .mud-avatar{margin-left:-12px;margin-right:8px;margin-inline-start:-12px;margin-inline-end:8px;width:32px;height:32px;font-size:1rem}.mud-chip.mud-chip-size-large .mud-chip-icon{font-size:1.5rem;margin-left:-6px;margin-right:6px;margin-inline-start:-6px;margin-inline-end:6px}.mud-chip.mud-chip-label{border-radius:var(--mud-default-borderradius)}.mud-chip.mud-clickable{cursor:pointer;user-select:none}.mud-chip .mud-chip-icon{margin-left:-4px;margin-right:4px;margin-inline-start:-4px;margin-inline-end:4px;color:inherit}.mud-chip .mud-chip-close-button{padding:1px;margin-right:-4px;margin-left:6px;margin-inline-end:-4px;margin-inline-start:6px;height:18px;width:18px;color:inherit;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1),visibility 0s}.mud-chip .mud-chip-close-button .mud-icon-size-small{font-size:1.15rem}@media(hover: hover)and (pointer: fine){.mud-chip .mud-chip-close-button:hover:not(.mud-disabled){opacity:.7}}.mud-chip .mud-chip-close-button:focus-visible:not(.mud-disabled),.mud-chip .mud-chip-close-button:active:not(.mud-disabled){opacity:.7}.mud-chip>.mud-chip-content{align-items:center;display:inline-flex;height:100%;max-width:100%}.mud-chip-filled{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-action-disabled-background);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-action-disabled)}}.mud-chip-filled.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-action-disabled)}.mud-chip-filled.mud-chip-color-primary{color:var(--mud-palette-primary-text);--mud-ripple-color: var(--mud-palette-primary-text) !important;background-color:var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-primary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-primary-darken)}}.mud-chip-filled.mud-chip-color-primary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-primary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-primary-darken)}.mud-chip-filled.mud-chip-color-secondary{color:var(--mud-palette-secondary-text);--mud-ripple-color: var(--mud-palette-secondary-text) !important;background-color:var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-secondary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-secondary-darken)}}.mud-chip-filled.mud-chip-color-secondary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-secondary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-secondary-darken)}.mud-chip-filled.mud-chip-color-tertiary{color:var(--mud-palette-tertiary-text);--mud-ripple-color: var(--mud-palette-tertiary-text) !important;background-color:var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-tertiary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-tertiary-darken)}}.mud-chip-filled.mud-chip-color-tertiary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-tertiary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-tertiary-darken)}.mud-chip-filled.mud-chip-color-info{color:var(--mud-palette-info-text);--mud-ripple-color: var(--mud-palette-info-text) !important;background-color:var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-info.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-info-darken)}}.mud-chip-filled.mud-chip-color-info.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-info.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-info-darken)}.mud-chip-filled.mud-chip-color-success{color:var(--mud-palette-success-text);--mud-ripple-color: var(--mud-palette-success-text) !important;background-color:var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-success.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-success-darken)}}.mud-chip-filled.mud-chip-color-success.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-success.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-success-darken)}.mud-chip-filled.mud-chip-color-warning{color:var(--mud-palette-warning-text);--mud-ripple-color: var(--mud-palette-warning-text) !important;background-color:var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-warning.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-warning-darken)}}.mud-chip-filled.mud-chip-color-warning.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-warning.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-warning-darken)}.mud-chip-filled.mud-chip-color-error{color:var(--mud-palette-error-text);--mud-ripple-color: var(--mud-palette-error-text) !important;background-color:var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-error.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-error-darken)}}.mud-chip-filled.mud-chip-color-error.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-error.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-error-darken)}.mud-chip-filled.mud-chip-color-dark{color:var(--mud-palette-dark-text);--mud-ripple-color: var(--mud-palette-dark-text) !important;background-color:var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-dark.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-dark-darken)}}.mud-chip-filled.mud-chip-color-dark.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-dark.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-dark-darken)}.mud-chip-outlined{color:var(--mud-palette-text-primary);border:1px solid var(--mud-palette-lines-inputs)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-action-default-hover)}}.mud-chip-outlined.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-action-default-hover)}.mud-chip-outlined.mud-chip-color-primary{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary) !important;border:1px solid rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-primary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-primary-hover)}}.mud-chip-outlined.mud-chip-color-primary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-primary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-primary-hover)}.mud-chip-outlined.mud-chip-color-primary.mud-chip-selected{background-color:var(--mud-palette-primary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-primary.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-primary.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-primary.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-secondary{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary) !important;border:1px solid rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-secondary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-secondary-hover)}}.mud-chip-outlined.mud-chip-color-secondary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-secondary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-secondary-hover)}.mud-chip-outlined.mud-chip-color-secondary.mud-chip-selected{background-color:var(--mud-palette-secondary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-secondary.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-secondary.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-secondary.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-tertiary{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary) !important;border:1px solid rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-tertiary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-tertiary-hover)}}.mud-chip-outlined.mud-chip-color-tertiary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-tertiary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-tertiary-hover)}.mud-chip-outlined.mud-chip-color-tertiary.mud-chip-selected{background-color:var(--mud-palette-tertiary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-tertiary.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-tertiary.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-tertiary.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-info{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info) !important;border:1px solid rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-info.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-info-hover)}}.mud-chip-outlined.mud-chip-color-info.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-info.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-info-hover)}.mud-chip-outlined.mud-chip-color-info.mud-chip-selected{background-color:var(--mud-palette-info-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-info.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-info.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-info.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-success{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success) !important;border:1px solid rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-success.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-success-hover)}}.mud-chip-outlined.mud-chip-color-success.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-success.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-success-hover)}.mud-chip-outlined.mud-chip-color-success.mud-chip-selected{background-color:var(--mud-palette-success-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-success.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-success.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-success.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-warning{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning) !important;border:1px solid rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-warning.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-warning-hover)}}.mud-chip-outlined.mud-chip-color-warning.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-warning.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-warning-hover)}.mud-chip-outlined.mud-chip-color-warning.mud-chip-selected{background-color:var(--mud-palette-warning-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-warning.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-warning.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-warning.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-error{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error) !important;border:1px solid rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-error.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-error-hover)}}.mud-chip-outlined.mud-chip-color-error.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-error.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-error-hover)}.mud-chip-outlined.mud-chip-color-error.mud-chip-selected{background-color:var(--mud-palette-error-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-error.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-error.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-error.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-dark{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark) !important;border:1px solid rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-dark.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-dark-hover)}}.mud-chip-outlined.mud-chip-color-dark.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-dark.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-dark-hover)}.mud-chip-outlined.mud-chip-color-dark.mud-chip-selected{background-color:var(--mud-palette-dark-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-dark.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-dark.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-dark.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}.mud-chip-text{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-action-default-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-action-disabled-background)}}.mud-chip-text.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-action-disabled-background)}.mud-chip-text.mud-chip-color-primary{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary) !important;background-color:var(--mud-palette-primary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-primary.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}}.mud-chip-text.mud-chip-color-primary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-primary.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}.mud-chip-text.mud-chip-color-secondary{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary) !important;background-color:var(--mud-palette-secondary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-secondary.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}}.mud-chip-text.mud-chip-color-secondary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-secondary.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}.mud-chip-text.mud-chip-color-tertiary{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary) !important;background-color:var(--mud-palette-tertiary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-tertiary.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}}.mud-chip-text.mud-chip-color-tertiary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-tertiary.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}.mud-chip-text.mud-chip-color-info{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info) !important;background-color:var(--mud-palette-info-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-info.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}}.mud-chip-text.mud-chip-color-info.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-info.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}.mud-chip-text.mud-chip-color-success{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success) !important;background-color:var(--mud-palette-success-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-success.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}}.mud-chip-text.mud-chip-color-success.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-success.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}.mud-chip-text.mud-chip-color-warning{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning) !important;background-color:var(--mud-palette-warning-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-warning.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}}.mud-chip-text.mud-chip-color-warning.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-warning.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}.mud-chip-text.mud-chip-color-error{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error) !important;background-color:var(--mud-palette-error-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-error.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}}.mud-chip-text.mud-chip-color-error.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-error.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}.mud-chip-text.mud-chip-color-dark{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark) !important;background-color:var(--mud-palette-dark-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-dark.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}}.mud-chip-text.mud-chip-color-dark.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-dark.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}.mud-collapse-container{overflow:hidden;display:grid;grid-template-rows:minmax(0, 0fr);transition:grid-template-rows 300ms ease-in-out}.mud-collapse-entering{grid-template-rows:minmax(0, 1fr)}.mud-collapse-entered{overflow:initial;grid-template-rows:minmax(0, 1fr)}.mud-collapse-entered .mud-collapse-wrapper{overflow-y:auto}.mud-collapse-hidden{visibility:hidden}.mud-collapse-wrapper{overflow:hidden;display:flex}.mud-collapse-wrapper-inner{width:100%}.mud-dialog-container{display:flex;position:fixed;top:0;left:0;width:100%;height:100%;z-index:var(--mud-zindex-dialog)}.mud-dialog-container.mud-dialog-center{align-items:center;justify-content:center}.mud-dialog-container.mud-dialog-topcenter{align-items:flex-start;justify-content:center;padding-top:32px}.mud-dialog-container.mud-dialog-bottomcenter{align-items:flex-end;justify-content:center;padding-bottom:32px}.mud-dialog-container.mud-dialog-centerright{align-items:center;justify-content:flex-end;padding-right:32px}.mud-dialog-container.mud-dialog-centerleft{align-items:center;justify-content:flex-start;padding-left:32px}.mud-dialog-container.mud-dialog-topleft .mud-dialog{position:absolute;top:32px;left:32px}.mud-dialog-container.mud-dialog-topright .mud-dialog{position:absolute;top:32px;right:32px}.mud-dialog-container.mud-dialog-bottomleft .mud-dialog{position:absolute;bottom:32px;left:32px}.mud-dialog-container.mud-dialog-bottomright .mud-dialog{position:absolute;bottom:32px;right:32px}.mud-dialog{display:flex;z-index:calc(var(--mud-zindex-dialog) + 2);flex-direction:column;color:var(--mud-palette-text-primary);background-color:var(--mud-palette-surface);border-radius:var(--mud-default-borderradius);-webkit-animation:mud-open-dialog-center .1s cubic-bezier(0.39, 0.575, 0.565, 1) both;animation:mud-open-dialog-center .1s cubic-bezier(0.39, 0.575, 0.565, 1) both;box-shadow:0px 11px 15px -7px rgba(0,0,0,.2),0px 24px 38px 3px rgba(0,0,0,.14),0px 9px 46px 8px rgba(0,0,0,.12);max-height:calc(100vh - var(--mud-appbar-height));max-height:calc(100dvh - var(--mud-appbar-height));overflow-y:auto;outline-style:none}.mud-dialog.mud-dialog-rtl .mud-dialog-title .mud-button-close{right:unset;left:8px}.mud-dialog .mud-dialog-title{z-index:1;flex:0 0 auto;margin:0;padding:16px 24px;border-top-left-radius:var(--mud-default-borderradius);border-top-right-radius:var(--mud-default-borderradius)}.mud-dialog .mud-dialog-title+*>.mud-dialog-content{border-radius:0}.mud-dialog .mud-dialog-title .mud-button-close{top:8px;right:8px;position:absolute}.mud-dialog .mud-dialog-content{position:relative;flex:1 1 auto;overflow:auto;padding:0px 24px;margin:8px 0px;-webkit-overflow-scrolling:touch;border-top-left-radius:var(--mud-default-borderradius);border-top-right-radius:var(--mud-default-borderradius)}.mud-dialog .mud-dialog-content.mud-dialog-no-side-padding{padding:0px;margin:12px 0px}.mud-dialog .mud-dialog-actions{flex:0 0 auto;display:flex;gap:8px;padding:8px;align-items:center;justify-content:flex-end;border-bottom-left-radius:var(--mud-default-borderradius);border-bottom-right-radius:var(--mud-default-borderradius)}.mud-dialog-width-false{max-width:calc(100% - 64px)}.mud-dialog-width-xs{max-width:444px}.mud-dialog-width-sm{max-width:600px}.mud-dialog-width-md{max-width:960px}.mud-dialog-width-lg{max-width:1280px}.mud-dialog-width-xl{max-width:1920px}.mud-dialog-width-xxl{max-width:2560px}.mud-dialog-width-full{width:calc(100% - 64px)}.mud-dialog-fullscreen{width:100%;height:100%;margin:0;max-width:100%;max-height:none;border-radius:0;overflow-y:hidden}@-webkit-keyframes mud-open-dialog-center{0%{opacity:0}1%{-webkit-transform:scale(0.5);transform:scale(0.5);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes mud-open-dialog-center{0%{opacity:0}1%{-webkit-transform:scale(0.5);transform:scale(0.5);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1)}}.mud-focus-trap{display:contents}.mud-focus-trap .mud-focus-trap-child-container{display:contents}.mud-input-control.mud-field .mud-input-slot{height:auto;min-height:19px}.mud-input-control.mud-field .mud-input-slot.mud-input-root-outlined.mud-input-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:14px}.mud-input-control.mud-field .mud-input-slot.mud-input-root-filled.mud-input-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:12px}.mud-input-control.mud-field .mud-input-slot.mud-input-slot-nopadding{padding-top:0px;padding-bottom:0px}.mud-input-control.mud-field .mud-input-slot.mud-input-slot-nopadding.mud-input-root-filled{padding-top:21px;padding-bottom:2px}.mud-input-control.mud-field .mud-input-slot.mud-input-slot-nopadding.mud-input-root-outlined{padding-top:7px;padding-bottom:2px}.mud-flex-break{flex-basis:100%;width:0}.mud-grid{width:100%;display:flex;flex-wrap:wrap;box-sizing:border-box}.mud-grid-item{margin:0;box-sizing:border-box}.mud-grid-spacing-xs-1{width:calc(100% + 4px);margin-left:-4px;margin-top:-4px}.mud-grid-spacing-xs-1>.mud-grid-item{padding-left:4px;padding-top:4px}.mud-grid-spacing-xs-2{width:calc(100% + 8px);margin-left:-8px;margin-top:-8px}.mud-grid-spacing-xs-2>.mud-grid-item{padding-left:8px;padding-top:8px}.mud-grid-spacing-xs-3{width:calc(100% + 12px);margin-left:-12px;margin-top:-12px}.mud-grid-spacing-xs-3>.mud-grid-item{padding-left:12px;padding-top:12px}.mud-grid-spacing-xs-4{width:calc(100% + 16px);margin-left:-16px;margin-top:-16px}.mud-grid-spacing-xs-4>.mud-grid-item{padding-left:16px;padding-top:16px}.mud-grid-spacing-xs-5{width:calc(100% + 20px);margin-left:-20px;margin-top:-20px}.mud-grid-spacing-xs-5>.mud-grid-item{padding-left:20px;padding-top:20px}.mud-grid-spacing-xs-6{width:calc(100% + 24px);margin-left:-24px;margin-top:-24px}.mud-grid-spacing-xs-6>.mud-grid-item{padding-left:24px;padding-top:24px}.mud-grid-spacing-xs-7{width:calc(100% + 28px);margin-left:-28px;margin-top:-28px}.mud-grid-spacing-xs-7>.mud-grid-item{padding-left:28px;padding-top:28px}.mud-grid-spacing-xs-8{width:calc(100% + 32px);margin-left:-32px;margin-top:-32px}.mud-grid-spacing-xs-8>.mud-grid-item{padding-left:32px;padding-top:32px}.mud-grid-spacing-xs-9{width:calc(100% + 36px);margin-left:-36px;margin-top:-36px}.mud-grid-spacing-xs-9>.mud-grid-item{padding-left:36px;padding-top:36px}.mud-grid-spacing-xs-10{width:calc(100% + 40px);margin-left:-40px;margin-top:-40px}.mud-grid-spacing-xs-10>.mud-grid-item{padding-left:40px;padding-top:40px}.mud-grid-spacing-xs-11{width:calc(100% + 44px);margin-left:-44px;margin-top:-44px}.mud-grid-spacing-xs-11>.mud-grid-item{padding-left:44px;padding-top:44px}.mud-grid-spacing-xs-12{width:calc(100% + 48px);margin-left:-48px;margin-top:-48px}.mud-grid-spacing-xs-12>.mud-grid-item{padding-left:48px;padding-top:48px}.mud-grid-spacing-xs-13{width:calc(100% + 52px);margin-left:-52px;margin-top:-52px}.mud-grid-spacing-xs-13>.mud-grid-item{padding-left:52px;padding-top:52px}.mud-grid-spacing-xs-14{width:calc(100% + 56px);margin-left:-56px;margin-top:-56px}.mud-grid-spacing-xs-14>.mud-grid-item{padding-left:56px;padding-top:56px}.mud-grid-spacing-xs-15{width:calc(100% + 60px);margin-left:-60px;margin-top:-60px}.mud-grid-spacing-xs-15>.mud-grid-item{padding-left:60px;padding-top:60px}.mud-grid-spacing-xs-16{width:calc(100% + 64px);margin-left:-64px;margin-top:-64px}.mud-grid-spacing-xs-16>.mud-grid-item{padding-left:64px;padding-top:64px}.mud-grid-spacing-xs-17{width:calc(100% + 68px);margin-left:-68px;margin-top:-68px}.mud-grid-spacing-xs-17>.mud-grid-item{padding-left:68px;padding-top:68px}.mud-grid-spacing-xs-18{width:calc(100% + 72px);margin-left:-72px;margin-top:-72px}.mud-grid-spacing-xs-18>.mud-grid-item{padding-left:72px;padding-top:72px}.mud-grid-spacing-xs-19{width:calc(100% + 76px);margin-left:-76px;margin-top:-76px}.mud-grid-spacing-xs-19>.mud-grid-item{padding-left:76px;padding-top:76px}.mud-grid-spacing-xs-20{width:calc(100% + 80px);margin-left:-80px;margin-top:-80px}.mud-grid-spacing-xs-20>.mud-grid-item{padding-left:80px;padding-top:80px}@media(min-width: 0px){.mud-grid-item-xs-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-xs-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-xs-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-xs-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-xs-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-xs-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-xs-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-xs-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-xs-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-xs-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-xs-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-xs-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-xs-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-xs-true{flex-grow:1;max-width:100%;flex-basis:0}}@media(min-width: 600px){.mud-grid-item-sm-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-sm-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-sm-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-sm-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-sm-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-sm-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-sm-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-sm-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-sm-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-sm-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-sm-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-sm-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-sm-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-sm-true{flex-grow:1;max-width:100%;flex-basis:0}}@media(min-width: 960px){.mud-grid-item-md-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-md-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-md-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-md-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-md-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-md-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-md-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-md-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-md-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-md-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-md-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-md-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-md-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-md-true{flex-grow:1;max-width:100%;flex-basis:0}}@media(min-width: 1280px){.mud-grid-item-lg-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-lg-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-lg-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-lg-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-lg-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-lg-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-lg-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-lg-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-lg-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-lg-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-lg-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-lg-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-lg-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-lg-true{flex-grow:1;max-width:100%;flex-basis:0}}@media(min-width: 1920px){.mud-grid-item-xl-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-xl-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-xl-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-xl-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-xl-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-xl-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-xl-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-xl-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-xl-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-xl-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-xl-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-xl-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-xl-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-xl-true{flex-grow:1;max-width:100%;flex-basis:0}}@media(min-width: 2560px){.mud-grid-item-xxl-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-xxl-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-xxl-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-xxl-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-xxl-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-xxl-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-xxl-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-xxl-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-xxl-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-xxl-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-xxl-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-xxl-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-xxl-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-xxl-true{flex-grow:1;max-width:100%;flex-basis:0}}.mud-paper{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-surface);border-radius:var(--mud-default-borderradius);transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-paper-square{border-radius:0px}.mud-paper-outlined{border:1px solid var(--mud-palette-lines-default)}.mud-icon-default{color:var(--mud-palette-text-secondary)}.mud-disabled .mud-icon-root,.mud-disabled .mud-svg-icon,.mud-disabled .mud-icon-default{color:var(--mud-palette-text-disabled)}.mud-icon-root{width:1em;height:1em;display:inline-block;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;flex-shrink:0;user-select:none}.mud-icon-root:focus{outline:none}.mud-icon-root.mud-svg-icon{fill:currentColor}.mud-icon-size-small{font-size:1.25rem}.mud-icon-size-medium{font-size:1.5rem}.mud-icon-size-large{font-size:2.25rem}.mud-divider{margin:0;flex-shrink:0;border-color:var(--mud-palette-divider);border-width:1px;border-style:solid none none none}.mud-divider-absolute{left:0;width:100%;bottom:0;position:absolute}.mud-divider-inset{margin-left:72px;margin-inline-start:72px;margin-inline-end:unset}.mud-divider-light{border-color:var(--mud-palette-divider-light)}.mud-divider-middle{margin-left:16px;margin-right:16px}.mud-divider-vertical{border-style:none solid none none;height:100%}.mud-divider-flexitem{height:auto;align-self:stretch}.mud-divider-fullwidth{flex-grow:1;width:100%}.mud-drop-zone{position:relative;transition:all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-drop-zone-drag-block>*{pointer-events:none}.mud-drop-zone-can-drop{background-color:var(--mud-palette-success-hover)}.mud-drop-zone-no-drop{background-color:var(--mud-palette-error-hover)}.mud-drop-item:not(.mud-drop-item-preview-start){cursor:grab;user-select:none}.mud-drop-item:not(.mud-drop-item-preview-start):active{cursor:grabbing}.mud-drop-item-preview-start{height:20px;width:100%;position:absolute;top:0;left:0;z-index:1;user-select:none}.mud-drop-item .mud-ripple:after{display:none;transform:none}.mud-expansion-panels{flex:0 1 auto;position:relative;max-width:100%;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1);border-radius:var(--mud-default-borderradius)}.mud-expansion-panels.mud-expansion-panels-square{border-radius:0px}.mud-expansion-panels.mud-expansion-panels-borders .mud-expand-panel{border-bottom:1px solid var(--mud-palette-lines-default)}.mud-expand-panel{flex:1 0 100%;max-width:100%;position:relative;transition:margin .3s cubic-bezier(0.25, 0.8, 0.5, 1);transition-delay:100ms;color:var(--mud-palette-text-primary);background-color:var(--mud-palette-surface)}.mud-expand-panel.mud-expand-panel-border{border-bottom:1px solid var(--mud-palette-lines-default)}.mud-expand-panel:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-expand-panel:last-child{border-bottom:none;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mud-expand-panel.mud-panel-expanded{margin:16px 0;border-radius:inherit;border-bottom:none;transition-delay:0ms}.mud-expand-panel.mud-panel-expanded:first-child{margin-top:0}.mud-expand-panel.mud-panel-expanded:last-child{margin-bottom:0}.mud-expand-panel.mud-panel-expanded+.mud-expand-panel{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-expand-panel.mud-panel-next-expanded{border-bottom:none;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mud-expand-panel .mud-expand-panel-header{width:100%;align-items:center;display:flex;font-size:.9375rem;line-height:1;min-height:48px;outline:none;padding:16px 24px;position:relative;transition:min-height .3s cubic-bezier(0.25, 0.8, 0.5, 1);user-select:none}.mud-expand-panel .mud-expand-panel-header:hover{cursor:pointer}.mud-expand-panel .mud-expand-panel-header .mud-expand-panel-text{flex:1 1 auto}.mud-expand-panel .mud-expand-panel-header .mud-expand-panel-icon{transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1),visibility 0s}.mud-expand-panel .mud-expand-panel-header .mud-expand-panel-icon.mud-transform{transform:rotate(-180deg)}.mud-expand-panel .mud-expand-panel-content{padding-bottom:16px;flex:1 1 auto;max-width:100%}.mud-expand-panel .mud-expand-panel-content.mud-expand-panel-gutters{padding-left:24px;padding-right:24px}.mud-expand-panel .mud-expand-panel-content.mud-expand-panel-dense{padding-top:0px;padding-bottom:0px}.mud-disabled>.mud-expand-panel-header{color:var(--mud-palette-text-disabled)}.mud-disabled>.mud-expand-panel-header:hover{cursor:default}.mud-fab{padding:0;font-family:var(--mud-typography-button-family);font-size:var(--mud-typography-button-size);font-weight:var(--mud-typography-button-weight);line-height:var(--mud-typography-button-lineheight);letter-spacing:var(--mud-typography-button-letterspacing);text-transform:var(--mud-typography-button-text-transform);min-width:0;box-shadow:0px 3px 5px -1px rgba(0,0,0,.2),0px 6px 10px 0px rgba(0,0,0,.14),0px 1px 18px 0px rgba(0,0,0,.12);box-sizing:border-box;min-height:36px;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:50%;color:var(--mud-palette-text-primary);--mud-ripple-color: var(--mud-palette-text-primary);background-color:var(--mud-palette-action-default-hover)}@media(hover: hover)and (pointer: fine){.mud-fab:hover{box-shadow:0px 5px 5px -3px rgba(0,0,0,.2),0px 8px 10px 1px rgba(0,0,0,.14),0px 3px 14px 2px rgba(0,0,0,.12);text-decoration:none;background-color:var(--mud-palette-action-disabled-background)}}.mud-fab:focus-visible{box-shadow:0px 5px 5px -3px rgba(0,0,0,.2),0px 8px 10px 1px rgba(0,0,0,.14),0px 3px 14px 2px rgba(0,0,0,.12);text-decoration:none;background-color:var(--mud-palette-action-disabled-background)}.mud-fab:active{box-shadow:0px 7px 8px -4px rgba(0,0,0,.2),0px 12px 17px 2px rgba(0,0,0,.14),0px 5px 22px 4px rgba(0,0,0,.12);text-decoration:none;background-color:var(--mud-palette-action-disabled-background)}.mud-fab:disabled{color:var(--mud-palette-action-disabled);box-shadow:none;background-color:var(--mud-palette-action-disabled-background);cursor:default;pointer-events:none}@media(hover: hover)and (pointer: fine){.mud-fab:disabled:hover{background-color:var(--mud-palette-action-disabled-background)}}.mud-fab-disable-elevation{box-shadow:none}@media(hover: hover)and (pointer: fine){.mud-fab-disable-elevation:hover{box-shadow:none}}.mud-fab-disable-elevation:active{box-shadow:none}.mud-fab-disable-elevation.mud-focus-visible{box-shadow:none}.mud-fab-disable-elevation:disabled{box-shadow:none}.mud-fab-label{width:100%;display:inherit;align-items:inherit;justify-content:inherit}.mud-fab-primary{color:var(--mud-palette-primary-text);--mud-ripple-color: var(--mud-palette-primary-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-fab-primary:hover{background-color:var(--mud-palette-primary-darken)}}.mud-fab-primary:focus-visible,.mud-fab-primary:active{background-color:var(--mud-palette-primary-darken)}.mud-fab-secondary{color:var(--mud-palette-secondary-text);--mud-ripple-color: var(--mud-palette-secondary-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-fab-secondary:hover{background-color:var(--mud-palette-secondary-darken)}}.mud-fab-secondary:focus-visible,.mud-fab-secondary:active{background-color:var(--mud-palette-secondary-darken)}.mud-fab-tertiary{color:var(--mud-palette-tertiary-text);--mud-ripple-color: var(--mud-palette-tertiary-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-fab-tertiary:hover{background-color:var(--mud-palette-tertiary-darken)}}.mud-fab-tertiary:focus-visible,.mud-fab-tertiary:active{background-color:var(--mud-palette-tertiary-darken)}.mud-fab-info{color:var(--mud-palette-info-text);--mud-ripple-color: var(--mud-palette-info-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-fab-info:hover{background-color:var(--mud-palette-info-darken)}}.mud-fab-info:focus-visible,.mud-fab-info:active{background-color:var(--mud-palette-info-darken)}.mud-fab-success{color:var(--mud-palette-success-text);--mud-ripple-color: var(--mud-palette-success-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-fab-success:hover{background-color:var(--mud-palette-success-darken)}}.mud-fab-success:focus-visible,.mud-fab-success:active{background-color:var(--mud-palette-success-darken)}.mud-fab-warning{color:var(--mud-palette-warning-text);--mud-ripple-color: var(--mud-palette-warning-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-fab-warning:hover{background-color:var(--mud-palette-warning-darken)}}.mud-fab-warning:focus-visible,.mud-fab-warning:active{background-color:var(--mud-palette-warning-darken)}.mud-fab-error{color:var(--mud-palette-error-text);--mud-ripple-color: var(--mud-palette-error-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-fab-error:hover{background-color:var(--mud-palette-error-darken)}}.mud-fab-error:focus-visible,.mud-fab-error:active{background-color:var(--mud-palette-error-darken)}.mud-fab-dark{color:var(--mud-palette-dark-text);--mud-ripple-color: var(--mud-palette-dark-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-fab-dark:hover{background-color:var(--mud-palette-dark-darken)}}.mud-fab-dark:focus-visible,.mud-fab-dark:active{background-color:var(--mud-palette-dark-darken)}.mud-fab-extended.mud-fab-size-large{width:auto;height:48px;padding:0 16px;min-width:48px;min-height:auto;border-radius:24px}.mud-fab-extended.mud-fab-size-large .mud-fab-label{gap:8px}.mud-fab-extended.mud-fab-size-small{width:auto;height:34px;padding:0 12px;min-width:34px;border-radius:17px}.mud-fab-extended.mud-fab-size-small .mud-fab-label{gap:4px}.mud-fab-extended.mud-fab-size-medium{width:auto;height:40px;padding:0 16px;min-width:40px;border-radius:20px}.mud-fab-extended.mud-fab-size-medium .mud-fab-label{gap:8px}.mud-fab-color-inherit{color:inherit}.mud-fab-size-small{width:40px;height:40px}.mud-fab-size-medium{width:48px;height:48px}.mud-fab-size-large{width:56px;height:56px}.mud-form{display:flex;flex-direction:column}.mud-list{margin:0;padding:0;position:relative;list-style:none}.mud-list.mud-list-padding{padding-top:8px;padding-bottom:8px}.mud-list-item{width:100%;display:flex;position:relative;box-sizing:border-box;text-align:start;align-items:center;padding-top:8px;padding-bottom:8px;justify-content:flex-start;text-decoration:none}.mud-list-item.mud-list-item-dense{padding-top:4px;padding-bottom:4px}.mud-list-item.mud-list-item-disabled{color:var(--mud-palette-action-disabled) !important;cursor:default !important;pointer-events:none !important}.mud-list-item.mud-list-item-disabled .mud-list-item-icon{color:var(--mud-palette-action-disabled) !important}.mud-list-item.mud-list-item-disabled .mud-list-item-secondary-text{color:var(--mud-palette-action-disabled) !important}.mud-list-item-clickable{color:inherit;border:0;cursor:pointer;margin:0;outline:0;user-select:none;border-radius:0;vertical-align:middle;background-color:rgba(0,0,0,0);-webkit-appearance:none;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-list-item-clickable:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-list-item-clickable:focus:not(.mud-selected-item),.mud-list-item-clickable:active{background-color:var(--mud-palette-action-default-hover)}.mud-list-item-gutters{padding-left:16px;padding-right:16px}.mud-list-item-text{flex:1 1 auto;min-width:0;margin-top:4px;margin-bottom:4px}.mud-list-item-text-inset{padding-left:56px;padding-inline-start:56px;padding-inline-end:unset}.mud-list-item-icon{color:var(--mud-palette-action-default);display:inline-flex;min-width:56px;flex-shrink:0}.mud-list-subheader{color:var(--mud-palette-action-default);font-size:.875rem;box-sizing:border-box;list-style:none;font-weight:500;padding-top:8px;padding-bottom:20px}.mud-list-subheader-gutters{padding-left:16px;padding-right:16px}.mud-list-subheader-inset{padding-left:72px;padding-inline-start:72px;padding-inline-end:unset}.mud-list-subheader-sticky{top:0;z-index:1;position:sticky;background-color:inherit}.mud-list-item-avatar{min-width:56px;flex-shrink:0}.mud-nested-list>.mud-list-item{padding-left:32px;padding-inline-start:32px;padding-inline-end:unset}.mud-list-item-secondary-text{font-weight:500;color:var(--mud-palette-text-secondary)}.mud-application-layout-rtl{direction:rtl}.mud-menu{display:inline-flex;align-self:center;position:relative}.mud-menu *{cursor:pointer}.mud-menu>div.mud-disabled{cursor:default}.mud-menu>div.mud-disabled *{cursor:default}.mud-menu>div.mud-menu-activator{display:contents;user-select:none}.mud-menu-button-hidden{position:absolute}.mud-menu-list{padding:4px 0;min-width:112px}.mud-menu-list>.mud-menu{width:100%;display:inline}.mud-menu-list>.mud-divider{margin:4px 0}.mud-menu-item{width:100%;display:flex;position:relative;box-sizing:border-box;text-align:start;align-items:center;justify-content:flex-start;text-decoration:none;padding:8px 12px}.mud-menu-item>.mud-icon-root{color:var(--mud-palette-action-default)}.mud-menu-item .mud-menu-item-icon{display:inline-flex;flex-shrink:0;margin-inline-end:12px}.mud-menu-item .mud-menu-item-text{flex:1 1 auto;margin:4px 0}.mud-menu-item.mud-menu-item-dense{padding:2px 12px}.mud-menu-item.mud-disabled{color:var(--mud-palette-action-disabled) !important;cursor:default !important;pointer-events:none !important}.mud-menu-item.mud-disabled .mud-menu-item-icon{color:var(--mud-palette-action-disabled) !important}.mud-menu-list:has(.mud-menu-item-icon) .mud-menu-item:not(:has(.mud-menu-item-icon)) .mud-menu-item-text{margin-inline-start:36px}.mud-menu-list:has(.mud-menu-submenu-icon) .mud-menu-item:not(:has(.mud-menu-submenu-icon)) .mud-menu-item-text{margin-inline-end:36px}.mud-popover:has(>.mud-menu-list){overflow:hidden}.mud-popover:has(>.mud-menu-list):has(>.mud-menu-list:empty){visibility:hidden}.mud-link.mud-link-underline-none{text-decoration:none}.mud-link.mud-link-underline-hover{text-decoration:none}@media(hover: hover)and (pointer: fine){.mud-link.mud-link-underline-hover:hover{text-decoration:underline}}.mud-link.mud-link-underline-hover:focus-visible,.mud-link.mud-link-underline-hover:active{text-decoration:underline}.mud-link.mud-link-underline-always{text-decoration:underline}.mud-link.mud-link-disabled{cursor:default;color:var(--mud-palette-action-disabled) !important}.mud-link.mud-link-disabled:not(.mud-link-underline-always){text-decoration:none}.mud-navmenu{margin:0;position:relative;list-style:none;overscroll-behavior-y:contain}.mud-navmenu.mud-navmenu-dense .mud-nav-link{padding:4px 16px 4px 16px}.mud-navmenu.mud-navmenu-margin-dense .mud-nav-link{margin:2px 0}.mud-navmenu.mud-navmenu-margin-normal .mud-nav-link{margin:4px 0}.mud-navmenu.mud-navmenu-rounded .mud-nav-link{border-radius:var(--mud-default-borderradius)}.mud-navmenu.mud-navmenu-bordered .mud-nav-link.active:not(.mud-nav-link-disabled){border-inline-end-style:solid;border-inline-end-width:2px}.mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-primary);background-color:var(--mud-palette-action-default-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:var(--mud-palette-action-default-hover)}}.mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:var(--mud-palette-action-default-hover)}.mud-navmenu.mud-navmenu-default .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-primary)}.mud-navmenu.mud-navmenu-primary .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary);background-color:var(--mud-palette-primary-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-primary .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}}.mud-navmenu.mud-navmenu-primary .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-primary .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}.mud-navmenu.mud-navmenu-primary .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-primary)}.mud-navmenu.mud-navmenu-primary .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-primary)}.mud-navmenu.mud-navmenu-secondary .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary);background-color:var(--mud-palette-secondary-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-secondary .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}}.mud-navmenu.mud-navmenu-secondary .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-secondary .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}.mud-navmenu.mud-navmenu-secondary .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-secondary)}.mud-navmenu.mud-navmenu-secondary .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-secondary)}.mud-navmenu.mud-navmenu-tertiary .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary);background-color:var(--mud-palette-tertiary-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-tertiary .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}}.mud-navmenu.mud-navmenu-tertiary .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-tertiary .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}.mud-navmenu.mud-navmenu-tertiary .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-tertiary)}.mud-navmenu.mud-navmenu-tertiary .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-tertiary)}.mud-navmenu.mud-navmenu-info .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info);background-color:var(--mud-palette-info-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-info .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}}.mud-navmenu.mud-navmenu-info .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-info .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}.mud-navmenu.mud-navmenu-info .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-info)}.mud-navmenu.mud-navmenu-info .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-info)}.mud-navmenu.mud-navmenu-success .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success);background-color:var(--mud-palette-success-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-success .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}}.mud-navmenu.mud-navmenu-success .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-success .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}.mud-navmenu.mud-navmenu-success .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-success)}.mud-navmenu.mud-navmenu-success .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-success)}.mud-navmenu.mud-navmenu-warning .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning);background-color:var(--mud-palette-warning-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-warning .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}}.mud-navmenu.mud-navmenu-warning .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-warning .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}.mud-navmenu.mud-navmenu-warning .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-warning)}.mud-navmenu.mud-navmenu-warning .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-warning)}.mud-navmenu.mud-navmenu-error .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error);background-color:var(--mud-palette-error-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-error .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}}.mud-navmenu.mud-navmenu-error .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-error .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}.mud-navmenu.mud-navmenu-error .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-error)}.mud-navmenu.mud-navmenu-error .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-error)}.mud-navmenu.mud-navmenu-dark .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark);background-color:var(--mud-palette-dark-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-dark .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}}.mud-navmenu.mud-navmenu-dark .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-dark .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}.mud-navmenu.mud-navmenu-dark .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-dark)}.mud-navmenu.mud-navmenu-dark .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-dark)}.mud-nav-group{width:100%;display:block;justify-content:flex-start}.mud-nav-group>.mud-nav-link>.mud-nav-link-text{font-weight:500}.mud-nav-group * .mud-nav-group>.mud-nav-link>.mud-nav-link-text{font-weight:400}.mud-nav-group * .mud-nav-group>.mud-nav-link.mud-expanded>.mud-nav-link-text{font-weight:500}.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding-left:36px;padding-inline-start:36px;padding-inline-end:unset}.mud-nav-group-disabled,.mud-nav-group-disabled .mud-nav-link-text,.mud-nav-group-disabled .mud-nav-link-expand-icon,.mud-nav-group-disabled .mud-nav-link-icon{color:var(--mud-palette-text-disabled) !important;cursor:default;pointer-events:none}.mud-nav-item{width:100%;display:flex;justify-content:flex-start;text-decoration:none}.mud-nav-link{width:100%;font-weight:400;padding:8px 16px 8px 16px;color:inherit;line-height:1.75;display:inline-flex;justify-content:flex-start;text-transform:inherit;background-color:rgba(0,0,0,0);transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,padding 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;align-items:flex-start}.mud-nav-link.mud-nav-link-disabled{color:var(--mud-palette-text-disabled) !important;cursor:default;pointer-events:none}@media(hover: hover)and (pointer: fine){.mud-nav-link:hover:not(.mud-nav-link-disabled){cursor:pointer;text-decoration:none;background-color:var(--mud-palette-action-default-hover)}}.mud-nav-link:focus:not(.mud-nav-link-disabled){background-color:var(--mud-palette-action-default-hover)}.mud-nav-link.active:not(.mud-nav-link-disabled){font-weight:500 !important}.mud-nav-link:not(.mud-nav-link-disabled) .mud-nav-link-icon.mud-nav-link-icon-default{color:var(--mud-palette-drawer-icon)}.mud-nav-link.mud-nav-link-disabled .mud-nav-link-icon{color:var(--mud-palette-text-disabled)}.mud-nav-link .mud-nav-link-expand-icon{color:var(--mud-palette-drawer-icon);transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1),visibility 0s}.mud-nav-link .mud-nav-link-expand-icon.mud-transform{transform:rotate(-180deg)}.mud-nav-link .mud-nav-link-expand-icon.mud-transform-disabled{transform:rotate(-180deg)}.mud-nav-link .mud-nav-link-text{width:100%;text-align:start;margin-left:12px;margin-inline-start:12px;margin-inline-end:unset;letter-spacing:0}.mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding-left:36px;padding-inline-start:36px;padding-inline-end:16px}.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding-left:48px;padding-inline-start:48px}.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding-left:48px;padding-inline-start:48px;padding-inline-end:16px}.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding-left:60px;padding-inline-start:60px;padding-inline-end:0}.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding-left:60px;padding-inline-start:60px;padding-inline-end:16px}.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding-left:72px;padding-inline-start:72px;padding-inline-end:0}.mud-drawer-mini .mud-nav-link{line-height:1;display:flex;align-items:center}.mud-drawer--closed.mud-drawer-mini>.mud-drawer-content>.mud-navmenu .mud-nav-link .mud-icon-root:first-child+.mud-nav-link-text{display:none}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding:8px 16px 8px 16px}.page-content-navigation .page-content-navigation-navlink.active .mud-nav-link{color:var(--mud-palette-primary);border-color:var(--mud-palette-primary);background-color:rgba(0,0,0,0)}.page-content-navigation .page-content-navigation-navlink .mud-nav-link{padding:4px 16px 4px 16px;color:var(--mud-palette-text-secondary);border-left:2px solid var(--mud-palette-action-disabled-background)}.page-content-navigation .page-content-navigation-navlink .mud-nav-link.active{color:var(--mud-palette-primary);border-color:var(--mud-palette-primary);background-color:rgba(0,0,0,0)}.page-content-navigation .page-content-navigation-navlink .mud-nav-link .mud-nav-link-text{margin-left:0px;margin-inline-start:0px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mud-pagination{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0;list-style:none}.mud-pagination .mud-pagination-item>*{height:32px;min-width:32px;margin:0 3px;padding:0 6px;text-align:center;border-radius:16px}.mud-pagination .mud-pagination-item :not(mud-pagination-item-selected)>*{box-shadow:none}.mud-pagination .mud-pagination-item .mud-button{line-height:normal}.mud-pagination .mud-pagination-item .mud-icon-button{padding:0}.mud-pagination .mud-pagination-item-rectangular .mud-button{border-radius:var(--mud-default-borderradius)}.mud-pagination .mud-pagination-item .mud-typography[disabled]{color:var(--mud-palette-action-disabled) !important}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-default{background-color:var(--mud-palette-action-default-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-primary{background-color:var(--mud-palette-primary-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-secondary{background-color:var(--mud-palette-secondary-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-tertiary{background-color:var(--mud-palette-tertiary-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-info{background-color:var(--mud-palette-info-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-success{background-color:var(--mud-palette-success-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-warning{background-color:var(--mud-palette-warning-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-error{background-color:var(--mud-palette-error-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-dark{background-color:var(--mud-palette-dark-hover)}.mud-pagination-filled .mud-pagination-item:not(.mud-pagination-item-selected) .mud-button{background-color:var(--mud-palette-surface)}.mud-pagination-filled .mud-pagination-item .mud-button{box-shadow:var(--mud-elevation-1)}.mud-pagination-small .mud-pagination-item>*{height:26px;min-width:26px;margin:0 1px;padding:0 4px;border-radius:13px}.mud-pagination-large .mud-pagination-item>*{height:40px;min-width:40px;padding:0 10px;border-radius:20px}.mud-pagination-disable-elevation .mud-pagination-item .mud-button{box-shadow:none}.mud-pagination-rtl .mud-pagination-item .mud-icon-root{transform:scaleX(-1)}.mud-picker.mud-rounded{border-radius:var(--mud-default-borderradius)}.mud-picker .mud-picker-actions{flex:0 0 auto;display:flex;padding:8px;align-items:center;justify-content:flex-end}.mud-picker .mud-picker-actions>:not(:first-child){margin-left:8px;margin-inline-start:8px;margin-inline-end:unset}.mud-picker-inline{display:flex;flex:1 1 auto;position:relative;max-width:100%}.mud-picker-inline.mud-picker-input-button .mud-input,.mud-picker-inline.mud-picker-input-button .mud-input .mud-input-root{cursor:pointer}.mud-picker-inline.mud-picker-input-button.mud-disabled .mud-input,.mud-picker-inline.mud-picker-input-button.mud-disabled .mud-input .mud-input-root{cursor:default}.mud-picker-inline.mud-picker-input-text{cursor:text}.mud-picker-inline.mud-picker-input-text:hover{cursor:text}.mud-picker-inline.mud-picker-input-text.mud-disabled{cursor:default}.mud-picker-inline.mud-picker-input-text.mud-disabled:hover{cursor:default}.mud-picker-static{display:flex;overflow:hidden;min-width:310px;flex-direction:column}.mud-picker-container{display:flex;flex-direction:column;border-radius:inherit}.mud-picker-container.mud-picker-container-landscape{flex-direction:row}.mud-picker-container .mud-toolbar{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-picker-popover-paper{outline:0;z-index:calc(var(--mud-zindex-popover) + 1);position:absolute;min-width:16px;min-height:16px;overflow-x:hidden;overflow-y:auto}.mud-picker-view{display:none}.mud-picker-view.mud-picker-open{display:block}.mud-picker-content{display:flex;max-width:100%;min-width:310px;min-height:305px;overflow:hidden;flex-direction:column;justify-content:center}.mud-picker-content.mud-picker-content-landscape{padding:0 8px}.mud-picker-toolbar{height:100px;display:flex;align-items:center;flex-direction:row;justify-content:center}.mud-picker-toolbar.mud-picker-toolbar-landscape{height:auto;padding:8px;max-width:150px;justify-content:flex-start}.mud-picker-toolbar.mud-button-root{padding:0;min-width:16px;text-transform:none}.mud-picker-inline-paper .mud-paper{position:relative !important}.mud-picker-hidden{visibility:hidden}.mud-picker-pos-top{top:0px;position:fixed;visibility:visible}.mud-picker-pos-top.mud-picker-pos-left{left:10px}.mud-picker-pos-top.mud-picker-pos-right{right:10px}.mud-picker-pos-above{bottom:0px;visibility:visible}.mud-picker-pos-above.mud-picker-pos-left{left:50%;transform:translateX(-50%)}.mud-picker-pos-above.mud-picker-pos-right{right:0px}.mud-picker-pos-bottom{bottom:10px;position:fixed;visibility:visible}.mud-picker-pos-bottom.mud-picker-pos-left{left:10px}.mud-picker-pos-bottom.mud-picker-pos-right{right:10px}.mud-picker-pos-below{visibility:visible}.mud-picker-pos-below.mud-picker-pos-left{left:50%;transform:translateX(-50%)}.mud-picker-pos-below.mud-picker-pos-right{right:0px}.mud-picker-datepicker-toolbar{align-items:flex-start;flex-direction:column}.mud-picker-datepicker-toolbar .mud-button-year{font-size:1rem;font-weight:400;line-height:1.75;letter-spacing:.00938em}.mud-picker-datepicker-toolbar .mud-button-date{font-size:2.125rem;font-weight:400;line-height:1.17;letter-spacing:.00735em;text-transform:none}.mud-picker-datepicker-toolbar-landscape{padding:16px}.mud-picker-datepicker-date-landscape{margin-right:16px;margin-inline-end:16px;margin-inline-start:unset}.mud-picker-calendar-header-switch{display:flex;margin-top:4px;align-items:center;margin-bottom:8px;justify-content:space-between}.mud-picker-calendar-header-switch>.mud-icon-button{z-index:1;padding:8px;margin:6px;background-color:var(--mud-palette-surface)}@media(hover: hover)and (pointer: fine){.mud-picker-calendar-header-switch>.mud-icon-button:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-picker-calendar-header-switch .mud-picker-calendar-header-transition{width:100%;height:23px;overflow:hidden}@media(hover: hover)and (pointer: fine){.mud-picker-calendar-header-switch .mud-picker-calendar-header-transition:hover .mud-typography{cursor:pointer;font-weight:500}}.mud-picker-calendar-header-day{display:flex;max-height:16px;align-items:center;justify-content:center}.mud-picker-calendar-header-day .mud-day-label{color:var(--mud-palette-text-secondary);width:36px;margin:0 2px;text-align:center}.mud-picker-year-container{height:300px;overflow-y:auto}.mud-picker-year-container .mud-picker-year{cursor:pointer;height:40px;display:flex;outline:none;align-items:center;justify-content:center;user-select:none;animation:mud-animation-fadein 500ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-picker-year-container .mud-picker-year:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-picker-year-container .mud-picker-year .mud-picker-year-selected{margin:10px 0;font-weight:500}.mud-picker-month-container{width:310px;display:flex;flex-wrap:wrap;align-content:stretch}.mud-picker-month-container .mud-picker-month{flex:1 0 33.33%;cursor:pointer;height:60px;display:flex;outline:none;align-items:center;justify-content:center;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-picker-month-container .mud-picker-month:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-picker-month-container .mud-picker-month .mud-picker-month-selected{font-weight:500}.mud-picker-month-container .mud-picker-month.mud-disabled{color:var(--mud-palette-text-disabled);pointer-events:none}.mud-picker-slide-transition{display:block;position:relative}.mud-picker-slide-transition>*{top:0;left:0;right:0;position:absolute}.mud-picker-calendar-transition{margin-top:12px;min-height:216px}.mud-picker-calendar-progress-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.mud-picker-calendar-content{display:grid;--selected-day: 0;grid-column-gap:10px;grid-template-columns:auto}@media(min-width: 600px){.mud-picker-calendar-content:not(.mud-picker-calendar-content-1){grid-template-columns:repeat(2, minmax(auto, 1fr))}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-1 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-3 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-5 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-7 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-9 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-11 .mud-picker-nav-button-next{visibility:hidden}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-1 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-3 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-5 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-7 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-9 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-11 .mud-picker-nav-button-prev{visibility:visible}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-2 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-4 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-6 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-8 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-10 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-12 .mud-picker-nav-button-next{visibility:visible}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-2 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-4 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-6 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-8 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-10 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-12 .mud-picker-nav-button-prev{visibility:hidden}}@media(min-width: 960px){.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2){grid-template-columns:repeat(3, minmax(auto, 1fr))}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-1 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-4 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-7 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-10 .mud-picker-nav-button-next{visibility:hidden}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-1 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-4 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-7 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-10 .mud-picker-nav-button-prev{visibility:visible}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-2 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-2 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-5 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-5 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-8 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-8 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-11 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-11 .mud-picker-nav-button-prev{visibility:hidden}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-3 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-6 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-9 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-12 .mud-picker-nav-button-next{visibility:visible}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-3 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-6 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-9 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-12 .mud-picker-nav-button-prev{visibility:hidden}}:not(.mud-picker-hidden) .mud-picker-calendar-header-last .mud-picker-nav-button-next{visibility:inherit !important}.mud-picker-hidden .mud-picker-nav-button-next,.mud-picker-hidden .mud-picker-nav-button-prev{visibility:hidden !important}.mud-picker-calendar-container{display:flex;width:310px;flex-direction:column}.mud-picker-calendar{display:flex;flex-wrap:wrap;justify-content:center}.mud-picker-calendar .mud-day{color:var(--mud-palette-text-primary);width:36px;height:36px;margin:0 2px;padding:0;font-size:.75rem;font-weight:500}@media(hover: hover)and (pointer: fine){.mud-picker-calendar .mud-day:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-picker-calendar .mud-day.mud-hidden{opacity:0;pointer-events:none}.mud-picker-calendar .mud-day.mud-current{font-weight:600}.mud-picker-calendar .mud-day.mud-selected{font-weight:500}.mud-picker-calendar .mud-day .mud-typography{margin-top:2px}.mud-picker-calendar .mud-day.mud-disabled{color:var(--mud-palette-text-disabled);pointer-events:none}.mud-picker-calendar .mud-day.mud-range{margin:0;width:40px;transition:none}.mud-picker-calendar .mud-day.mud-range.mud-range-start-selected{border-radius:50% 0% 0% 50%}.mud-picker-calendar .mud-day.mud-range.mud-range-end-selected{border-radius:0% 50% 50% 0%}.mud-picker-calendar .mud-day.mud-range.mud-range-between{border-radius:0;background-color:var(--mud-palette-action-default-hover)}@media(hover: hover)and (pointer: fine){.mud-picker-calendar .mud-day.mud-range.mud-range-selection:hover.mud-range-start-selected{border-radius:50%}.mud-picker-calendar .mud-day.mud-range.mud-range-selection:hover:not(.mud-range-start-selected){border-radius:0% 50% 50% 0%}}.mud-picker-calendar .mud-day.mud-range.mud-range-selection:not(:hover):not(.mud-range-start-selected){border-radius:0;background:linear-gradient(var(--mud-palette-action-default-hover) 100%, var(--mud-palette-action-default-hover) 100%, transparent 0%);background-size:100% calc(100%*(var(--selected-day) - var(--day-id)))}@media(hover: hover)and (pointer: fine){.mud-range-selection-primary:hover{color:var(--mud-palette-primary-text) !important;background-color:var(--mud-palette-primary) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-secondary:hover{color:var(--mud-palette-secondary-text) !important;background-color:var(--mud-palette-secondary) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-tertiary:hover{color:var(--mud-palette-tertiary-text) !important;background-color:var(--mud-palette-tertiary) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-info:hover{color:var(--mud-palette-info-text) !important;background-color:var(--mud-palette-info) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-success:hover{color:var(--mud-palette-success-text) !important;background-color:var(--mud-palette-success) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-warning:hover{color:var(--mud-palette-warning-text) !important;background-color:var(--mud-palette-warning) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-error:hover{color:var(--mud-palette-error-text) !important;background-color:var(--mud-palette-error) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-dark:hover{color:var(--mud-palette-dark-text) !important;background-color:var(--mud-palette-dark) !important}}.mud-picker-calendar-week{display:flex;margin:0 5px;justify-content:center;align-items:center}.mud-picker-calendar-week .mud-picker-calendar-week-text{width:15px;margin-top:2px !important;color:var(--mud-palette-text-disabled)}.mud-application-layout-rtl .mud-picker-calendar .mud-day.mud-range.mud-range-start-selected{border-radius:0% 50% 50% 0%}.mud-application-layout-rtl .mud-picker-calendar .mud-day.mud-range.mud-range-end-selected{border-radius:50% 0% 0% 50%}@media(hover: hover)and (pointer: fine){.mud-application-layout-rtl .mud-picker-calendar .mud-day.mud-range.mud-range-selection:hover:not(.mud-range-start-selected){border-radius:50% 0% 0% 50%}}.mud-picker-timepicker-toolbar .mud-timepicker-button{padding:0;min-width:16px;text-transform:none}.mud-picker-timepicker-toolbar .mud-timepicker-button.mud-timepicker-toolbar-text{color:hsla(0,0%,100%,.54)}@media(hover: hover)and (pointer: fine){.mud-picker-timepicker-toolbar .mud-timepicker-button:hover{background-color:var(--mud-theme-default-hover)}}.mud-picker-timepicker-toolbar .mud-timepicker-hourminute{display:flex;align-items:baseline;justify-content:flex-end}.mud-picker-timepicker-toolbar .mud-timepicker-hourminute .mud-timepicker-button{font-size:3.75rem;font-weight:300;line-height:1;letter-spacing:-0.00833em}.mud-picker-timepicker-toolbar .mud-timepicker-ampm{display:flex;margin-left:20px;margin-right:-20px;margin-inline-start:20px;margin-inline-end:-20px;flex-direction:column}.mud-picker-timepicker-toolbar .mud-timepicker-ampm .mud-timepicker-button{font-size:18px;font-weight:400;line-height:1.75;letter-spacing:.00938em}.mud-picker-timepicker-toolbar .mud-timepicker-separator{cursor:default;margin:0 4px 0 2px;margin-inline-start:2px;margin-inline-end:4px}.mud-picker-timepicker-toolbar.mud-picker-timepicker-toolbar-landscape{flex-wrap:wrap;width:150px;justify-content:center}.mud-picker-timepicker-toolbar.mud-picker-timepicker-toolbar-landscape .mud-timepicker-hourminute .mud-timepicker-button{font-size:3rem;font-weight:400;line-height:1.04;letter-spacing:0em}.mud-picker-timepicker-toolbar.mud-picker-timepicker-toolbar-landscape .mud-timepicker-ampm{display:flex;margin-left:20px;margin-right:-20px;margin-inline-start:20px;margin-inline-end:-20px;flex-direction:column}.mud-picker-timepicker-toolbar.mud-picker-timepicker-toolbar-landscape .mud-timepicker-ampm .mud-timepicker-button{font-size:18px;font-weight:400;line-height:1.75;letter-spacing:.00938em}.mud-picker-timepicker-toolbar.mud-picker-timepicker-toolbar-landscape .mud-timepicker-separator{font-size:3rem;font-weight:400;line-height:1.04;letter-spacing:0em}.mud-picker-time-container{margin:16px 0 8px;display:flex;align-items:flex-end;justify-content:center}.mud-picker-time-container .mud-picker-time-clock{width:260px;height:260px;position:relative;border-radius:50%;pointer-events:none;touch-action:pinch-zoom;background-color:rgba(0,0,0,.07)}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-mask{width:100%;height:100%;outline:none;position:absolute;user-select:none;pointer-events:auto}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pin{top:50%;left:50%;width:6px;height:6px;position:absolute;transform:translate(-50%, -50%);border-radius:50%}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick-inner{left:calc(50% - 1px);width:3px;height:35%;bottom:0;position:absolute;transform-origin:center bottom 0px}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick-inner.mud-hour:after{content:"";position:absolute;left:50%;transform:translate(-50%, -50%);height:48px;width:48px;top:-60%;border-radius:50%;background-color:inherit}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick-outer{left:calc(50% - 1px);width:0;height:35%;bottom:35%;position:absolute;transform-origin:center bottom 0px}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick-outer.mud-hour:after{content:"";position:absolute;left:50%;transform:translate(-50%, -50%);height:48px;width:62px;top:-20px;border-radius:50%;background-color:inherit}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick{left:calc(50% - 1px);width:3px;height:50%;bottom:50%;position:absolute;transform-origin:center bottom 0px}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick.mud-hour:after{content:"";position:absolute;left:50%;transform:translate(-50%, -50%);height:62px;width:62px;top:20px;border-radius:50%;background-color:inherit}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick.mud-minute:after{content:"";position:absolute;left:50%;transform:translate(-50%, -50%);height:44px;width:15px;top:20px;border-radius:50%;background-color:inherit}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pointer{left:calc(50% - 1px);width:2px;bottom:50%;position:absolute;transform-origin:center bottom 0px}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pointer.mud-picker-time-clock-pointer-animation{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,height 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pointer .mud-picker-time-clock-pointer-thumb{position:absolute;border-radius:100%}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pointer .mud-picker-time-clock-pointer-thumb.mud-onclock-text{top:-19px;left:-13px;width:28px;height:28px;border:none;background-color:inherit}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pointer .mud-picker-time-clock-pointer-thumb.mud-onclock-minute{background:rgba(0,0,0,0);border:2px solid;width:10px;height:10px;top:-9px;left:-4px}.mud-picker-time-container .mud-picker-time-clock .mud-clock-number{left:calc((100% - 32px)/2);color:var(--mud-palette-text-primary);background-color:rgba(0,0,0,0) !important;width:32px;height:32px;display:inline-flex;position:absolute;align-items:center;user-select:none;border-radius:50%;justify-content:center;transition-duration:120ms;transition-property:color}.mud-time-picker-dial{width:100%;height:100%;position:absolute;transition:transform 350ms,opacity 350ms}.mud-time-picker-dial-out{opacity:0}.mud-time-picker-hour.mud-time-picker-dial-out{transform:scale(1.2, 1.2);transform-origin:center}.mud-time-picker-minute.mud-time-picker-dial-out{transform:scale(0.8, 0.8);transform-origin:center}.mud-time-picker-dial-hidden{visibility:hidden}.mud-picker-container+.mud-picker-color-toolbar{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-picker-container+.mud-picker-color-content{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-picker-color-toolbar{height:32px;padding-right:2px;padding-left:2px}.mud-picker-color-content{min-height:unset;position:relative}.mud-picker-color-picker{width:312px;height:250px;position:relative;overflow:hidden;touch-action:pinch-zoom}.mud-picker-color-picker .mud-picker-color-overlay{width:100%;height:100%;user-select:none}.mud-picker-color-picker .mud-picker-color-overlay.mud-picker-color-overlay-white{background:linear-gradient(to right, white 0%, rgba(255, 255, 255, 0) 100%)}.mud-picker-color-picker .mud-picker-color-overlay.mud-picker-color-overlay-black{background:linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, black 100%)}.mud-picker-color-picker .mud-picker-color-selector{position:absolute;top:-13px;left:-13px;pointer-events:none}.mud-picker-color-picker .mud-picker-color-grid{display:flex;flex-wrap:wrap}.mud-picker-color-picker .mud-picker-color-grid .mud-picker-color-dot{height:25px;min-width:26px;max-width:26px;border-radius:0px;box-shadow:none}.mud-picker-color-controls{width:312px;padding:16px;display:flex;flex-direction:column}.mud-picker-color-controls .mud-picker-color-controls-row{display:flex;align-items:center}.mud-picker-color-controls .mud-picker-color-controls-row+.mud-picker-color-controls-row{margin-top:24px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders{display:flex;flex:1 0 auto;flex-direction:column}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider{min-width:224px;border-radius:var(--mud-default-borderradius)}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input{height:10px;border-radius:var(--mud-default-borderradius)}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input::-webkit-slider-runnable-track{background:initial}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input::-moz-range-track{background:initial}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input::-webkit-slider-thumb{appearance:none;margin-top:-6px;height:14px;width:14px;transform:none;transition:none;background:#f0f0f0;box-shadow:rgba(0,0,0,.37) 0px 1px 4px 0px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input::-moz-range-thumb{appearance:none;margin-top:-6px;height:14px;width:14px;transform:none;transition:none;background:#f0f0f0;box-shadow:rgba(0,0,0,.37) 0px 1px 4px 0px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--mud-palette-action-default-hover) !important}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input:active::-moz-range-thumb{box-shadow:0 0 0 2px var(--mud-palette-action-default-hover) !important}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider.hue+.alpha{margin-top:18px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider.hue .mud-slider-input{background:linear-gradient(90deg, #FF0000, #ff0 16.66%, #0f0 33.33%, #0ff 50%, #00f 66.66%, #f0f 83.33%, #FF0000)}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider.alpha .mud-slider-input{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWNgYGCQwoKxgqGgcJA5h3yFAAs8BRWVSwooAAAAAElFTkSuQmCC) repeat}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs{display:flex;flex:1 1 auto}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs .mud-picker-color-inputfield{width:100%;margin-right:8px;margin-inline-end:8px;margin-inline-start:unset}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs .mud-picker-color-inputfield:last-of-type{margin-right:0;margin-inline-end:0;margin-inline-start:unset}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs .mud-picker-color-inputfield .mud-input input{padding:6px;height:1em;text-align:center;font-size:14px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs .mud-picker-color-inputfield .mud-input-helper-text{text-align:center}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs .mud-picker-color-inputfield .mud-input-helper-text div div{margin:auto}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-control-switch{margin-left:8px;margin-inline-start:8px;margin-inline-end:unset;padding-bottom:16px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-collection{display:flex;min-width:230px;justify-content:space-between}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-collection .mud-picker-color-dot{max-width:38px}.mud-picker-color-dot{height:38px;min-width:38px;width:100%;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-radius 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:var(--mud-default-borderradius);box-shadow:0 0 6px rgba(127,130,134,.18)}@media(hover: hover)and (pointer: fine){.mud-picker-color-dot:hover{cursor:pointer;box-shadow:0px 3px 1px -2px rgba(0,0,0,.2),0px 2px 2px 0px rgba(0,0,0,.14),0px 1px 5px 0px rgba(0,0,0,.12)}}.mud-picker-color-dot.mud-picker-color-dot-current{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWNgYGCQwoKxgqGgcJA5h3yFAAs8BRWVSwooAAAAAElFTkSuQmCC) repeat}.mud-picker-color-dot .mud-picker-color-fill{width:100%;height:100%;border-radius:inherit}.mud-picker-color-dot+.mud-picker-color-sliders{margin-left:16px;margin-inline-start:16px;margin-inline-end:unset}.mud-picker-color-dot+.mud-picker-color-collection{margin-left:10px;margin-inline-start:10px;margin-inline-end:unset}.mud-picker-color-view{position:absolute;width:100%;height:100%;overflow:auto;padding:6px;background-color:var(--mud-palette-surface)}.mud-picker-color-view .mud-picker-color-view-collection{display:flex;flex-wrap:wrap;justify-content:space-evenly}.mud-picker-color-view .mud-picker-color-view-collection .mud-picker-color-dot{max-width:38px;margin:8px}.mud-picker-color-view .mud-picker-color-view-collection .mud-picker-color-dot.selected{border-radius:50%;box-shadow:0px 3px 1px -2px rgba(0,0,0,.2),0px 2px 2px 0px rgba(0,0,0,.14),0px 1px 5px 0px rgba(0,0,0,.12)}.mud-popover{outline:0;z-index:calc(var(--mud-zindex-popover) + 1);position:absolute;opacity:0;top:-9999px;left:-9999px}.mud-popover.mud-popover-fixed{position:fixed}.mud-popover.mud-popover-relative-width{width:100%}.mud-popover.mud-popover-open{opacity:1;transition:opacity}.mud-popover:not(.mud-popover-open){pointer-events:none;transition-duration:0ms !important;transition-delay:0ms !important}.mud-popover:empty{box-shadow:none !important}.mud-popover .mud-list{max-height:inherit;overflow-y:auto}.mud-popover .mud-popover{z-index:auto}.mud-appbar .mud-popover-cascading-value{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer:not(.mud-drawer-temporary) .mud-popover-cascading-value{z-index:calc(var(--mud-zindex-drawer) + 2)}.mud-drawer.mud-drawer-temporary .mud-popover-cascading-value,.mud-drawer.mud-drawer-responsive .mud-popover-cascading-value{z-index:calc(var(--mud-zindex-appbar) + 4)}.mud-dialog .mud-popover-cascading-value{z-index:calc(var(--mud-zindex-dialog) + 3)}.mud-select .mud-popover-cascading-value{z-index:calc(var(--mud-zindex-select) + 5)}.mud-simple-table table{width:100%;display:table;border-spacing:0;border-collapse:collapse}.mud-simple-table table thead{display:table-header-group}.mud-simple-table table tbody{display:table-row-group}.mud-simple-table table tbody>tr:last-child>td,.mud-simple-table table tbody>tr:last-child>th{border-bottom:none}.mud-simple-table table * tr{color:inherit;display:table-row;outline:0;vertical-align:middle}.mud-simple-table table * tr>td,.mud-simple-table table * tr th{display:table-cell;padding:16px;font-size:.875rem;text-align:start;font-weight:400;line-height:1.43;border-bottom:1px solid var(--mud-palette-table-lines);letter-spacing:.01071em;vertical-align:inherit}.mud-simple-table table * tr>th{font-weight:500;line-height:1.5rem}.mud-simple-table.mud-table-dense * tr td,.mud-simple-table.mud-table-dense * tr th{padding:6px 16px}@media(hover: hover)and (pointer: fine){.mud-simple-table.mud-table-hover .mud-table-container table tbody tr:hover{background-color:var(--mud-palette-table-hover)}}.mud-simple-table.mud-table-bordered .mud-table-container table tbody tr td{border-right:1px solid var(--mud-palette-table-lines)}.mud-simple-table.mud-table-bordered .mud-table-container table tbody tr td:last-child{border-right:none}.mud-simple-table.mud-table-striped .mud-table-container table tbody tr:nth-of-type(odd){background-color:var(--mud-palette-table-striped)}@media(hover: hover)and (pointer: fine){.mud-table-hover.mud-table-striped .mud-table-container table tbody tr:nth-of-type(odd):nth-of-type(odd):hover{background-color:var(--mud-palette-table-hover)}}.mud-simple-table.mud-table-sticky-header .mud-table-container{overflow-x:auto;max-height:100%}.mud-simple-table.mud-table-sticky-header * table{border-collapse:separate}.mud-simple-table.mud-table-sticky-header * table thead * th:first-child{border-radius:var(--mud-default-borderradius) 0 0 0}.mud-simple-table.mud-table-sticky-header * table thead * th:last-child{border-radius:0 var(--mud-default-borderradius) 0 0}.mud-simple-table.mud-table-sticky-header * table thead * th{background-color:var(--mud-palette-surface);position:sticky;z-index:1;top:0}.mud-simple-table.mud-table-sticky-footer .mud-table-container{overflow-x:auto;max-height:100%}.mud-simple-table.mud-table-sticky-footer * table{border-collapse:separate}.mud-simple-table.mud-table-sticky-footer * table tfoot * td{background-color:var(--mud-palette-surface);position:sticky;z-index:1;bottom:0}.mud-skeleton{height:1.2em;display:block;background-color:var(--mud-palette-skeleton)}.mud-skeleton-text{height:auto;transform:scale(1, 0.6);margin-top:0;border-radius:var(--mud-default-borderradius);margin-bottom:0;transform-origin:0 60%}.mud-skeleton-text:empty:before{content:" "}.mud-skeleton-circle{border-radius:50%}.mud-skeleton-pulse{animation:mud-skeleton-keyframes-pulse 1.5s ease-in-out .5s infinite}.mud-skeleton-wave{overflow:hidden;position:relative}.mud-skeleton-wave::after{top:0;left:0;right:0;bottom:0;content:"";position:absolute;animation:mud-skeleton-keyframes-wave 1.6s linear .5s infinite;transform:translateX(-100%);background:linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.04), transparent)}.mud-slider{color:var(--mud-palette-text-primary);display:inline-block;width:100%;user-select:none;touch-action:pinch-zoom}.mud-slider>.mud-typography{margin-top:10px}.mud-slider.mud-slider-vertical{transform:rotate(270deg);height:100%;width:unset}.mud-slider .mud-slider-input{-webkit-appearance:none;-moz-appearance:none;position:relative;display:block;width:100%;background-color:rgba(0,0,0,0);cursor:pointer}.mud-slider .mud-slider-input:focus{outline:none}.mud-slider .mud-slider-input:active+.mud-slider-value-label{opacity:1}.mud-slider .mud-slider-input::-webkit-slider-runnable-track{border-radius:var(--mud-default-borderradius);width:100%}.mud-slider .mud-slider-input::-moz-range-track{border-radius:var(--mud-default-borderradius);width:100%}.mud-slider .mud-slider-input::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;border:none;border-radius:50%;cursor:pointer;transition:box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-slider .mud-slider-input::-moz-range-thumb{appearance:none;-webkit-appearance:none;border:none;border-radius:50%;cursor:pointer;transition:box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-slider .mud-slider-input:disabled{cursor:default;opacity:.38}.mud-slider .mud-slider-input:disabled::-webkit-slider-runnable-track{background-color:var(--mud-palette-text-disabled)}.mud-slider .mud-slider-input:disabled::-moz-range-track{background-color:var(--mud-palette-text-disabled)}.mud-slider .mud-slider-input:disabled::-webkit-slider-thumb{background-color:#000;color:#fff;box-shadow:0 0 0 1px #fff !important;transform:scale(4, 4)}@media(hover: hover)and (pointer: fine){.mud-slider .mud-slider-input:disabled::-webkit-slider-thumb:hover{box-shadow:0 0 0 1px #fff !important}}.mud-slider .mud-slider-input:disabled::-moz-range-thumb{background-color:#000;color:#fff;box-shadow:0 0 0 1px #fff !important;transform:scale(4, 4)}@media(hover: hover)and (pointer: fine){.mud-slider .mud-slider-input:disabled::-moz-range-thumb:hover{box-shadow:0 0 0 1px #fff !important}}.mud-slider.mud-slider-primary .mud-slider-filled{background-color:var(--mud-palette-primary)}.mud-slider.mud-slider-primary .mud-slider-track-tick{background-color:var(--mud-palette-primary)}.mud-slider.mud-slider-primary .mud-slider-value-label{color:var(--mud-palette-primary-text);background-color:var(--mud-palette-primary)}.mud-slider.mud-slider-primary .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-primary-rgb), 0.3)}.mud-slider.mud-slider-primary .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-primary-rgb), 0.3)}.mud-slider.mud-slider-primary .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-primary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3)}.mud-slider.mud-slider-primary .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-primary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-primary .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-primary-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-primary .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-primary-rgb), 0.24)}}.mud-slider.mud-slider-primary .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-primary .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-primary-rgb), 0.24)}.mud-slider.mud-slider-primary .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-primary .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-primary-rgb), 0.24)}.mud-slider.mud-slider-secondary .mud-slider-filled{background-color:var(--mud-palette-secondary)}.mud-slider.mud-slider-secondary .mud-slider-track-tick{background-color:var(--mud-palette-secondary)}.mud-slider.mud-slider-secondary .mud-slider-value-label{color:var(--mud-palette-secondary-text);background-color:var(--mud-palette-secondary)}.mud-slider.mud-slider-secondary .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-secondary-rgb), 0.3)}.mud-slider.mud-slider-secondary .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-secondary-rgb), 0.3)}.mud-slider.mud-slider-secondary .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-secondary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3)}.mud-slider.mud-slider-secondary .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-secondary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-secondary .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-secondary-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-secondary .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-secondary-rgb), 0.24)}}.mud-slider.mud-slider-secondary .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-secondary .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-secondary-rgb), 0.24)}.mud-slider.mud-slider-secondary .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-secondary .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-secondary-rgb), 0.24)}.mud-slider.mud-slider-tertiary .mud-slider-filled{background-color:var(--mud-palette-tertiary)}.mud-slider.mud-slider-tertiary .mud-slider-track-tick{background-color:var(--mud-palette-tertiary)}.mud-slider.mud-slider-tertiary .mud-slider-value-label{color:var(--mud-palette-tertiary-text);background-color:var(--mud-palette-tertiary)}.mud-slider.mud-slider-tertiary .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-tertiary-rgb), 0.3)}.mud-slider.mud-slider-tertiary .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-tertiary-rgb), 0.3)}.mud-slider.mud-slider-tertiary .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-tertiary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3)}.mud-slider.mud-slider-tertiary .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-tertiary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-tertiary .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-tertiary-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-tertiary .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-tertiary-rgb), 0.24)}}.mud-slider.mud-slider-tertiary .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-tertiary .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-tertiary-rgb), 0.24)}.mud-slider.mud-slider-tertiary .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-tertiary .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-tertiary-rgb), 0.24)}.mud-slider.mud-slider-info .mud-slider-filled{background-color:var(--mud-palette-info)}.mud-slider.mud-slider-info .mud-slider-track-tick{background-color:var(--mud-palette-info)}.mud-slider.mud-slider-info .mud-slider-value-label{color:var(--mud-palette-info-text);background-color:var(--mud-palette-info)}.mud-slider.mud-slider-info .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-info-rgb), 0.3)}.mud-slider.mud-slider-info .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-info-rgb), 0.3)}.mud-slider.mud-slider-info .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-info);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3)}.mud-slider.mud-slider-info .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-info);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-info .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-info-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-info .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-info-rgb), 0.24)}}.mud-slider.mud-slider-info .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-info .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-info-rgb), 0.24)}.mud-slider.mud-slider-info .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-info .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-info-rgb), 0.24)}.mud-slider.mud-slider-success .mud-slider-filled{background-color:var(--mud-palette-success)}.mud-slider.mud-slider-success .mud-slider-track-tick{background-color:var(--mud-palette-success)}.mud-slider.mud-slider-success .mud-slider-value-label{color:var(--mud-palette-success-text);background-color:var(--mud-palette-success)}.mud-slider.mud-slider-success .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-success-rgb), 0.3)}.mud-slider.mud-slider-success .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-success-rgb), 0.3)}.mud-slider.mud-slider-success .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-success);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3)}.mud-slider.mud-slider-success .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-success);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-success .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-success-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-success .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-success-rgb), 0.24)}}.mud-slider.mud-slider-success .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-success .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-success-rgb), 0.24)}.mud-slider.mud-slider-success .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-success .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-success-rgb), 0.24)}.mud-slider.mud-slider-warning .mud-slider-filled{background-color:var(--mud-palette-warning)}.mud-slider.mud-slider-warning .mud-slider-track-tick{background-color:var(--mud-palette-warning)}.mud-slider.mud-slider-warning .mud-slider-value-label{color:var(--mud-palette-warning-text);background-color:var(--mud-palette-warning)}.mud-slider.mud-slider-warning .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-warning-rgb), 0.3)}.mud-slider.mud-slider-warning .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-warning-rgb), 0.3)}.mud-slider.mud-slider-warning .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-warning);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3)}.mud-slider.mud-slider-warning .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-warning);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-warning .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-warning-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-warning .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-warning-rgb), 0.24)}}.mud-slider.mud-slider-warning .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-warning .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-warning-rgb), 0.24)}.mud-slider.mud-slider-warning .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-warning .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-warning-rgb), 0.24)}.mud-slider.mud-slider-error .mud-slider-filled{background-color:var(--mud-palette-error)}.mud-slider.mud-slider-error .mud-slider-track-tick{background-color:var(--mud-palette-error)}.mud-slider.mud-slider-error .mud-slider-value-label{color:var(--mud-palette-error-text);background-color:var(--mud-palette-error)}.mud-slider.mud-slider-error .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-error-rgb), 0.3)}.mud-slider.mud-slider-error .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-error-rgb), 0.3)}.mud-slider.mud-slider-error .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-error);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3)}.mud-slider.mud-slider-error .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-error);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-error .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-error-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-error .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-error-rgb), 0.24)}}.mud-slider.mud-slider-error .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-error .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-error-rgb), 0.24)}.mud-slider.mud-slider-error .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-error .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-error-rgb), 0.24)}.mud-slider.mud-slider-dark .mud-slider-filled{background-color:var(--mud-palette-dark)}.mud-slider.mud-slider-dark .mud-slider-track-tick{background-color:var(--mud-palette-dark)}.mud-slider.mud-slider-dark .mud-slider-value-label{color:var(--mud-palette-dark-text);background-color:var(--mud-palette-dark)}.mud-slider.mud-slider-dark .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-dark-rgb), 0.3)}.mud-slider.mud-slider-dark .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-dark-rgb), 0.3)}.mud-slider.mud-slider-dark .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-dark);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3)}.mud-slider.mud-slider-dark .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-dark);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-dark .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-dark-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-dark .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-dark-rgb), 0.24)}}.mud-slider.mud-slider-dark .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-dark .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-dark-rgb), 0.24)}.mud-slider.mud-slider-dark .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-dark .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-dark-rgb), 0.24)}.mud-slider.mud-slider-small .mud-slider-filled{height:2px}.mud-slider.mud-slider-small .mud-slider-track-tick{width:2px;height:2px}.mud-slider.mud-slider-small .mud-slider-track-tick-label{transform:translateX(-50%) translateY(50%)}.mud-slider.mud-slider-small .mud-slider-input::-webkit-slider-runnable-track{height:2px;margin:10px 0}.mud-slider.mud-slider-small .mud-slider-input::-moz-range-track{height:2px;margin:10px 0}.mud-slider.mud-slider-small .mud-slider-input::-webkit-slider-thumb{height:2px;width:2px;transform:scale(6, 6)}.mud-slider.mud-slider-small .mud-slider-input::-moz-range-thumb{height:2px;width:2px;transform:scale(6, 6)}.mud-slider.mud-slider-medium .mud-slider-filled{height:4px}.mud-slider.mud-slider-medium .mud-slider-track-tick{width:4px;height:4px}.mud-slider.mud-slider-medium .mud-slider-track-tick-label{transform:translateX(-50%) translateY(80%)}.mud-slider.mud-slider-medium .mud-slider-input::-webkit-slider-runnable-track{height:4px;margin:12px 0}.mud-slider.mud-slider-medium .mud-slider-input::-moz-range-track{height:4px;margin:12px 0}.mud-slider.mud-slider-medium .mud-slider-input::-webkit-slider-thumb{height:4px;width:4px;transform:scale(5, 5)}.mud-slider.mud-slider-medium .mud-slider-input::-moz-range-thumb{height:4px;width:4px;transform:scale(5, 5)}.mud-slider.mud-slider-large .mud-slider-filled{height:6px}.mud-slider.mud-slider-large .mud-slider-track-tick{width:6px;height:6px}.mud-slider.mud-slider-large .mud-slider-track-tick-label{transform:translateX(-50%) translateY(110%)}.mud-slider.mud-slider-large .mud-slider-input::-webkit-slider-runnable-track{height:6px;margin:14px 0}.mud-slider.mud-slider-large .mud-slider-input::-moz-range-track{height:6px;margin:14px 0}.mud-slider.mud-slider-large .mud-slider-input::-webkit-slider-thumb{height:6px;width:6px;transform:scale(4, 4)}.mud-slider.mud-slider-large .mud-slider-input::-moz-range-thumb{height:6px;width:6px;transform:scale(4, 4)}.mud-slider .mud-slider-container{position:relative;width:100%;display:flex;align-content:center}.mud-slider .mud-slider-filled{border-radius:var(--mud-default-borderradius)}.mud-slider .mud-slider-inner-container{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center}.mud-slider .mud-slider-value-label{position:absolute;top:0;transform:translateX(-50%) translateY(-125%);padding:4px 8px;text-align:center;align-items:center;justify-content:center;font-size:12px;border-radius:2px;line-height:normal;opacity:0;transition:opacity .2s ease-in-out;pointer-events:none;user-select:none}.mud-slider .mud-slider-tickmarks{display:flex;justify-content:space-between;flex-grow:1}.mud-slider .mud-slider-track-tick{border-radius:9999%;background-color:var(--mud-palette-primary)}.mud-slider .mud-slider-track-tick-label{position:absolute;top:0;left:50%}.mud-progress-circular{display:inline-block;position:relative;color:var(--mud-palette-text-secondary)}.mud-progress-circular.mud-progress-indeterminate{animation:mud-progress-circular-keyframes-circular-rotate 1.4s linear infinite}.mud-progress-circular.mud-progress-static{transition:transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-progress-circular.mud-progress-small{height:24px;width:24px}.mud-progress-circular.mud-progress-medium{height:40px;width:40px}.mud-progress-circular.mud-progress-large{height:56px;width:56px}.mud-progress-circular-svg{display:block;transform:rotate(-90deg)}.mud-progress-circular-indeterminate-child{animation:mud-progress-circular-keyframes-circular-rotate 1.4s linear reverse infinite}.mud-progress-circular-percentage{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center}.mud-progress-circular-circle{stroke:currentColor}.mud-progress-circular-circle.mud-progress-indeterminate{animation:mud-progress-circular-keyframes-circular-dash 1.4s ease-in-out infinite;stroke-dasharray:80px,200px;stroke-dashoffset:0px}.mud-progress-circular-circle.mud-progress-static{transition:stroke-dashoffset 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-progress-circular-circle.mud-progress-circular-circle-rounded{stroke-linecap:round}.mud-progress-circular-disable-shrink{animation:none}.mud-progress-linear{position:relative}.mud-progress-linear::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.2}.mud-progress-linear.horizontal{width:100%}.mud-progress-linear.horizontal.mud-progress-linear-small{height:4px}.mud-progress-linear.horizontal.mud-progress-linear-medium{height:8px}.mud-progress-linear.horizontal.mud-progress-linear-large{height:12px}.mud-progress-linear.horizontal .mud-progress-linear-dashed{animation:mud-progress-linear-horizontal-keyframes-buffer 3s infinite linear}.mud-progress-linear.vertical{height:100%}.mud-progress-linear.vertical.mud-progress-linear-small{width:4px}.mud-progress-linear.vertical.mud-progress-linear-medium{width:8px}.mud-progress-linear.vertical.mud-progress-linear-large{width:12px}.mud-progress-linear .mud-progress-linear-content{position:absolute;height:100%;width:100%;display:flex;justify-content:center;align-items:center}.mud-progress-linear .mud-progress-linear-bars{position:absolute;height:100%;width:100%;overflow:hidden}.mud-progress-linear .mud-progress-linear-bar{top:0;left:0;width:100%;bottom:0;position:absolute;transition:transform .2s linear;transform-origin:left}.mud-progress-linear .mud-progress-linear-bar.mud-progress-linear-1-indeterminate.horizontal{width:auto;animation:mud-progress-linear-horizontal-keyframes-indeterminate1 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.mud-progress-linear .mud-progress-linear-bar.mud-progress-linear-1-indeterminate.vertical{height:auto;animation:mud-progress-linear-vertical-keyframes-indeterminate1 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.mud-progress-linear .mud-progress-linear-bar.mud-progress-linear-2-indeterminate.horizontal{width:auto;animation:mud-progress-linear-horizontal-keyframes-indeterminate2 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite}.mud-progress-linear .mud-progress-linear-bar.mud-progress-linear-2-indeterminate.vertical{height:auto;animation:mud-progress-linear-vertical-keyframes-indeterminate2 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite}.mud-progress-linear.mud-progress-linear-color-default:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-action-disabled)}.mud-progress-linear.mud-progress-linear-color-default:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-action-default)}.mud-progress-linear.mud-progress-linear-color-default.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-action-disabled) 0%, var(--mud-palette-action-disabled) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-default.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-action-default)}.mud-progress-linear.mud-progress-linear-color-default.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-default.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-action-disabled)}.mud-progress-linear.mud-progress-linear-color-primary:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-primary)}.mud-progress-linear.mud-progress-linear-color-primary:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-primary)}.mud-progress-linear.mud-progress-linear-color-primary.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-primary) 0%, var(--mud-palette-primary) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-primary.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-primary)}.mud-progress-linear.mud-progress-linear-color-primary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-primary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-primary)}.mud-progress-linear.mud-progress-linear-color-secondary:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-secondary)}.mud-progress-linear.mud-progress-linear-color-secondary:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-secondary)}.mud-progress-linear.mud-progress-linear-color-secondary.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-secondary) 0%, var(--mud-palette-secondary) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-secondary.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-secondary)}.mud-progress-linear.mud-progress-linear-color-secondary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-secondary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-secondary)}.mud-progress-linear.mud-progress-linear-color-tertiary:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-tertiary)}.mud-progress-linear.mud-progress-linear-color-tertiary:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-tertiary)}.mud-progress-linear.mud-progress-linear-color-tertiary.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-tertiary) 0%, var(--mud-palette-tertiary) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-tertiary.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-tertiary)}.mud-progress-linear.mud-progress-linear-color-tertiary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-tertiary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-tertiary)}.mud-progress-linear.mud-progress-linear-color-info:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-info)}.mud-progress-linear.mud-progress-linear-color-info:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-info)}.mud-progress-linear.mud-progress-linear-color-info.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-info) 0%, var(--mud-palette-info) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-info.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-info)}.mud-progress-linear.mud-progress-linear-color-info.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-info.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-info)}.mud-progress-linear.mud-progress-linear-color-success:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-success)}.mud-progress-linear.mud-progress-linear-color-success:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-success)}.mud-progress-linear.mud-progress-linear-color-success.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-success) 0%, var(--mud-palette-success) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-success.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-success)}.mud-progress-linear.mud-progress-linear-color-success.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-success.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-success)}.mud-progress-linear.mud-progress-linear-color-warning:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-warning)}.mud-progress-linear.mud-progress-linear-color-warning:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-warning)}.mud-progress-linear.mud-progress-linear-color-warning.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-warning) 0%, var(--mud-palette-warning) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-warning.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-warning)}.mud-progress-linear.mud-progress-linear-color-warning.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-warning.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-warning)}.mud-progress-linear.mud-progress-linear-color-error:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-error)}.mud-progress-linear.mud-progress-linear-color-error:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-error)}.mud-progress-linear.mud-progress-linear-color-error.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-error) 0%, var(--mud-palette-error) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-error.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-error)}.mud-progress-linear.mud-progress-linear-color-error.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-error.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-error)}.mud-progress-linear.mud-progress-linear-color-dark:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-dark)}.mud-progress-linear.mud-progress-linear-color-dark:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-dark)}.mud-progress-linear.mud-progress-linear-color-dark.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-dark) 0%, var(--mud-palette-dark) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-dark.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-dark)}.mud-progress-linear.mud-progress-linear-color-dark.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-dark.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-dark)}.mud-progress-linear.mud-progress-indeterminate.horizontal .mud-progress-linear-bar:first-child{width:auto;animation:mud-progress-linear-horizontal-keyframes-indeterminate1 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.mud-progress-linear.mud-progress-indeterminate.horizontal .mud-progress-linear-bar:last-child{width:auto;animation:mud-progress-linear-horizontal-keyframes-indeterminate2 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite}.mud-progress-linear.mud-progress-indeterminate.vertical .mud-progress-linear-bar:first-child{height:auto;animation:mud-progress-linear-vertical-keyframes-indeterminate1 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.mud-progress-linear.mud-progress-indeterminate.vertical .mud-progress-linear-bar:last-child{height:auto;animation:mud-progress-linear-vertical-keyframes-indeterminate2 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite}.mud-progress-linear.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{width:100%;height:100%;position:absolute;margin-top:0}.mud-progress-linear.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){z-index:1;transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-buffer.horizontal .mud-progress-linear-bar:first-child{animation:mud-progress-linear-horizontal-keyframes-buffer 3s infinite linear}.mud-progress-linear.mud-progress-linear-buffer.vertical .mud-progress-linear-bar:first-child{animation:mud-progress-linear-vertical-keyframes-buffer 3s infinite linear}.mud-progress-linear.mud-progress-linear-striped .mud-progress-linear-bar{background-image:linear-gradient(135deg, hsla(0, 0%, 100%, 0.25) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, 0.25) 0, hsla(0, 0%, 100%, 0.25) 75%, transparent 0, transparent);background-size:40px 40px;background-repeat:repeat;animation:mud-progress-linear-striped-loading 10s linear infinite}.mud-progress-linear.mud-progress-linear-rounded{border-radius:var(--mud-default-borderradius)}.mud-progress-linear.mud-progress-linear-rounded .mud-progress-linear-bars{border-radius:var(--mud-default-borderradius)}.mud-progress-linear.mud-progress-linear-rounded .mud-progress-linear-bar{border-radius:var(--mud-default-borderradius)}.mud-progress-linear.mud-progress-linear-rounded::before{border-radius:var(--mud-default-borderradius)}.mud-radio{cursor:pointer;display:inline-flex;align-items:center;vertical-align:middle;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mud-radio>.mud-radio-content{color:var(--mud-palette-text-primary)}@media(hover: hover)and (pointer: fine){.mud-radio .mud-disabled:hover{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-radio .mud-disabled:hover>.mud-radio-content{color:var(--mud-palette-text-disabled)}.mud-radio .mud-disabled:hover *{cursor:default;color:var(--mud-palette-text-disabled)}}.mud-radio.mud-disabled,.mud-radio .mud-disabled:focus-visible,.mud-radio .mud-disabled:active{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-radio.mud-disabled>.mud-radio-content,.mud-radio .mud-disabled:focus-visible>.mud-radio-content,.mud-radio .mud-disabled:active>.mud-radio-content{color:var(--mud-palette-text-disabled)}.mud-radio.mud-disabled *,.mud-radio .mud-disabled:focus-visible *,.mud-radio .mud-disabled:active *{cursor:default;color:var(--mud-palette-text-disabled)}.mud-radio.mud-readonly,.mud-radio .mud-readonly:hover{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-radio .mud-radio-dense{padding:4px}.mud-radio.mud-checked{color:var(--mud-palette-action-default)}@media(hover: hover)and (pointer: fine){.mud-radio.mud-checked:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-radio-input{top:0;left:0;width:100%;cursor:inherit;height:100%;margin:0;opacity:0;padding:0;z-index:1;position:absolute}.mud-radio-icons{display:flex;position:relative}.mud-radio-icons.mud-checked .mud-radio-icon-checked{transform:scale(1);transition:transform 150ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-radio-icon-checked{left:0;position:absolute;transform:scale(0);transition:transform 150ms cubic-bezier(0.4, 0, 1, 1) 0ms}.mud-rating-root{display:inline-flex;color:#ffb400}.mud-rating-root:focus-visible,.mud-rating-root:active{outline:none}.mud-rating-root:focus-visible:not(.mud-disabled),.mud-rating-root:active:not(.mud-disabled){background-color:var(--mud-palette-action-default-hover)}.mud-rating-item{cursor:pointer;transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-rating-item.mud-rating-item-active{transform:scale(1.2)}.mud-rating-item.mud-disabled{cursor:default;pointer-events:none}.mud-rating-item.mud-disabled *{cursor:default;color:var(--mud-palette-text-disabled)}@media(hover: hover)and (pointer: fine){.mud-rating-item .mud-disabled:hover{cursor:default;pointer-events:none}.mud-rating-item .mud-disabled:hover *{cursor:default;color:var(--mud-palette-text-disabled)}}.mud-rating-item.mud-readonly{cursor:default}.mud-rating-item .mud-rating-input{clip:rect(0, 0, 0, 0);margin:0;opacity:0;padding:0;z-index:1;position:absolute;cursor:inherit;overflow:hidden}.mud-rating-item svg{pointer-events:none}.mud-rating-item svg path{pointer-events:none}.mud-snackbar{display:flex;flex-grow:initial;padding:6px 16px;align-items:center;position:relative;pointer-events:auto;font-weight:400;line-height:1.43;overflow:hidden;margin-top:16px;min-width:288px;max-width:500px;border-radius:var(--mud-default-borderradius);box-shadow:0px 3px 5px -1px rgba(0,0,0,.2),0px 6px 10px 0px rgba(0,0,0,.14),0px 1px 18px 0px rgba(0,0,0,.12);touch-action:pinch-zoom}.mud-snackbar.force-cursor{cursor:pointer}.mud-snackbar.mud-snackbar-blurred{backdrop-filter:blur(18px)}.mud-snackbar.mud-snackbar-surface{background:var(--mud-palette-surface)}.mud-snackbar .mud-snackbar-content-message{padding:8px 0;overflow-wrap:anywhere}.mud-snackbar .mud-snackbar-content-action{display:flex;align-items:center;margin-left:auto;margin-right:-8px;padding-left:16px;margin-inline-start:auto;margin-inline-end:-8px;padding-inline-start:16px;padding-inline-end:unset}.mud-snackbar .mud-snackbar-content-action>button{color:inherit}.mud-snackbar-location-top-left{top:24px;left:24px}.mud-snackbar-location-top-center{top:24px;left:50%;transform:translateX(-50%)}.mud-snackbar-location-top-right{top:24px;right:24px}.mud-snackbar-location-bottom-right{right:24px;bottom:24px}.mud-snackbar-location-bottom-center{bottom:24px;left:50%;transform:translateX(-50%)}.mud-snackbar-location-bottom-left{bottom:24px;left:24px}#mud-snackbar-container{position:fixed;z-index:var(--mud-zindex-snackbar);pointer-events:none}.mud-snackbar-icon{display:flex;opacity:.9;padding:7px 0;font-size:22px;margin-right:12px;margin-inline-end:12px;margin-inline-start:unset}.mud-switch{cursor:pointer;display:inline-flex;align-items:center;vertical-align:middle;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mud-switch.mud-disabled{color:var(--mud-palette-text-disabled) !important;cursor:default}.mud-switch.mud-readonly{cursor:default;background-color:rgba(0,0,0,0) !important}@media(hover: hover)and (pointer: fine){.mud-switch .mud-readonly:hover{cursor:default;background-color:rgba(0,0,0,0) !important}}.mud-switch-span{width:58px;height:38px;display:inline-flex;padding:12px;z-index:0;overflow:hidden;position:relative;box-sizing:border-box;flex-shrink:0;vertical-align:middle}.mud-switch-span .mud-switch-track{width:100%;height:100%;opacity:.48;z-index:-1;transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:9px;background-color:var(--mud-palette-action-default)}.mud-switch-base{padding:9px;top:0;left:0;color:#fafafa;z-index:1;position:absolute;transition:left 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-switch-base.mud-checked{transform:translateX(20px)}.mud-switch-base.mud-checked+.mud-switch-track{opacity:.5}@media(hover: hover)and (pointer: fine){.mud-switch-base:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-switch-base.mud-switch-disabled{color:var(--mud-palette-gray-default) !important}.mud-switch-base.mud-switch-disabled+.mud-switch-track{opacity:.12 !important}@media(hover: hover)and (pointer: fine){.mud-switch-base.mud-switch-disabled:hover{cursor:default;background-color:rgba(0,0,0,0) !important}}.mud-switch-base.mud-switch-disabled:focus-visible,.mud-switch-base.mud-switch-disabled:active{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-switch-button{display:flex;align-items:inherit;justify-content:inherit}.mud-switch-button .mud-switch-input{top:0;left:0;width:100%;cursor:inherit;height:100%;margin:0;opacity:0;padding:0;z-index:1;position:absolute}.mud-switch-button .mud-switch-thumb-small{width:14px;height:14px;box-shadow:0px 2px 1px -1px rgba(0,0,0,.2),0px 1px 1px 0px rgba(0,0,0,.14),0px 1px 3px 0px rgba(0,0,0,.12);border-radius:50%;background-color:currentColor}.mud-switch-button .mud-switch-thumb-medium{width:20px;height:20px;box-shadow:0px 2px 1px -1px rgba(0,0,0,.2),0px 1px 1px 0px rgba(0,0,0,.14),0px 1px 3px 0px rgba(0,0,0,.12);border-radius:50%;background-color:currentColor}.mud-switch-button .mud-switch-thumb-large{width:26px;height:26px;box-shadow:0px 2px 1px -1px rgba(0,0,0,.2),0px 1px 1px 0px rgba(0,0,0,.14),0px 1px 3px 0px rgba(0,0,0,.12);border-radius:50%;background-color:currentColor}.mud-switch-base-small.mud-switch-base{padding:5px}.mud-switch-base-medium.mud-switch-base{padding:9px}.mud-switch-base-large.mud-switch-base{padding:13px}.mud-switch-span-small.mud-switch-span{padding:7px;width:44px;height:24px}.mud-switch-span-medium.mud-switch-span{padding:12px;width:58px;height:38px}.mud-switch-span-large.mud-switch-span{padding:17px;width:72px;height:52px}.mud-switch-label-small{font-size:.8125rem !important}.mud-switch-label-medium{font-size:1rem !important}.mud-switch-label-large{font-size:1.1875rem !important}.mud-timeline{position:relative;display:flex}.mud-timeline-item{display:flex}.mud-timeline-item .mud-timeline-item-content{position:relative;height:100%;flex:1 1 auto}.mud-timeline-item .mud-timeline-item-divider{position:relative;display:flex;align-items:center;justify-content:center}.mud-timeline-item .mud-timeline-item-opposite{align-self:center}.mud-timeline-vertical{padding-top:24px;flex-direction:column}.mud-timeline-vertical .mud-timeline-item{padding-bottom:24px}.mud-timeline-vertical .mud-timeline-item .mud-timeline-item-content{max-width:calc(50% - 48px)}.mud-timeline-vertical .mud-timeline-item .mud-timeline-item-divider{min-width:96px}.mud-timeline-vertical .mud-timeline-item .mud-timeline-item-opposite{flex:1 1 auto;max-width:calc(50% - 48px)}.mud-timeline-vertical::before{top:0;bottom:0;content:"";height:100%;position:absolute;width:2px;background:var(--mud-palette-divider)}.mud-timeline-vertical.mud-timeline-align-start .mud-timeline-item-divider{align-items:flex-start}.mud-timeline-vertical.mud-timeline-align-start .mud-timeline-item-opposite{align-self:flex-start}.mud-timeline-vertical.mud-timeline-align-end .mud-timeline-item-divider{align-items:flex-end}.mud-timeline-vertical.mud-timeline-align-end .mud-timeline-item-opposite{align-self:flex-end}.mud-timeline-vertical.mud-timeline-position-alternate::before{left:auto;right:calc(50% - 1px)}.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start),.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end{flex-direction:row-reverse}.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-opposite,.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-opposite{text-align:end}.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end){flex-direction:row}.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-opposite{text-align:start}.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end),.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-start{flex-direction:row}.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-opposite,.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-opposite{text-align:start}.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start){flex-direction:row-reverse}.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-opposite{text-align:end}.mud-timeline-vertical.mud-timeline-position-start::before{right:auto;left:47px}.mud-timeline-vertical.mud-timeline-position-start.mud-timeline-rtl::before{right:47px;left:auto}.mud-timeline-vertical.mud-timeline-position-start .mud-timeline-item{flex-direction:row-reverse}.mud-timeline-vertical.mud-timeline-position-end::before{right:47px;left:auto}.mud-timeline-vertical.mud-timeline-position-end.mud-timeline-rtl::before{left:47px;right:auto}.mud-timeline-vertical.mud-timeline-position-end .mud-timeline-item{flex-direction:row}.mud-timeline-vertical.mud-timeline-position-start .mud-timeline-item-content,.mud-timeline-vertical.mud-timeline-position-end .mud-timeline-item-content{max-width:calc(100% - 96px)}.mud-timeline-vertical.mud-timeline-position-start .mud-timeline-item-opposite,.mud-timeline-vertical.mud-timeline-position-end .mud-timeline-item-opposite{display:none}.mud-timeline-horizontal{flex-direction:row}.mud-timeline-horizontal .mud-timeline-item{padding:0 24px;width:100%;min-width:0}.mud-timeline-horizontal .mud-timeline-item .mud-timeline-item-content{max-height:calc(50% - 48px)}.mud-timeline-horizontal .mud-timeline-item .mud-timeline-item-divider{min-height:96px}.mud-timeline-horizontal::before{top:0;bottom:0;content:"";height:2px;position:absolute;width:100%;background:var(--mud-palette-divider)}.mud-timeline-horizontal.mud-timeline-align-start .mud-timeline-item-divider{justify-content:flex-start}.mud-timeline-horizontal.mud-timeline-align-start .mud-timeline-item-opposite{align-self:flex-start}.mud-timeline-horizontal.mud-timeline-align-end .mud-timeline-item-divider{justify-content:flex-end}.mud-timeline-horizontal.mud-timeline-align-end .mud-timeline-item-opposite{align-self:flex-end}.mud-timeline-horizontal.mud-timeline-position-alternate::before{top:auto;bottom:calc(50% - 1px)}.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd),.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end{flex-direction:column-reverse}.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n),.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-start{flex-direction:column}.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd),.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-end{flex-direction:column}.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n),.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-start{flex-direction:column-reverse}.mud-timeline-horizontal.mud-timeline-position-top::before{top:47px;bottom:auto}.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item{flex-direction:column-reverse}.mud-timeline-horizontal.mud-timeline-position-bottom::before{top:auto;bottom:47px}.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item{flex-direction:column}.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item-content,.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item-content{max-height:calc(100% - 96px)}.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item-opposite,.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item-opposite{display:none}.mud-timeline-item-dot{display:flex;justify-content:center;align-items:center;background:var(--mud-palette-surface);border-radius:50%;left:calc(50% - 19px)}.mud-timeline-item-dot.mud-timeline-dot-size-small{width:24px;height:24px}.mud-timeline-item-dot.mud-timeline-dot-size-small .mud-timeline-item-dot-inner{height:18px;width:18px}.mud-timeline-item-dot.mud-timeline-dot-size-medium{width:38px;height:38px}.mud-timeline-item-dot.mud-timeline-dot-size-medium .mud-timeline-item-dot-inner{height:30px;width:30px}.mud-timeline-item-dot.mud-timeline-dot-size-large{width:52px;height:52px}.mud-timeline-item-dot.mud-timeline-dot-size-large .mud-timeline-item-dot-inner{height:42px;width:42px}.mud-timeline-item-dot .mud-timeline-item-dot-inner{border-radius:50%;display:flex;justify-content:center;align-items:center}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-fill{height:inherit;width:inherit}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-default{background-color:var(--mud-palette-gray-light)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-primary{color:var(--mud-palette-primary-text);background-color:var(--mud-palette-primary)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-secondary{color:var(--mud-palette-secondary-text);background-color:var(--mud-palette-secondary)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-tertiary{color:var(--mud-palette-tertiary-text);background-color:var(--mud-palette-tertiary)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-info{color:var(--mud-palette-info-text);background-color:var(--mud-palette-info)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-success{color:var(--mud-palette-success-text);background-color:var(--mud-palette-success)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-warning{color:var(--mud-palette-warning-text);background-color:var(--mud-palette-warning)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-error{color:var(--mud-palette-error-text);background-color:var(--mud-palette-error)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-dark{color:var(--mud-palette-dark-text);background-color:var(--mud-palette-dark)}.mud-timeline-modifiers .mud-timeline-item-content .mud-card::before{content:"";position:absolute;border-top:16px solid rgba(0,0,0,0);border-bottom:16px solid rgba(0,0,0,0);border-right:16px solid rgba(0,0,0,.1);top:calc(50% - 14px)}.mud-timeline-modifiers .mud-timeline-item-content .mud-card::after{content:"";position:absolute;border-top:16px solid rgba(0,0,0,0);border-bottom:16px solid rgba(0,0,0,0);border-right:16px solid var(--mud-palette-surface);top:calc(50% - 16px)}.mud-timeline-modifiers .mud-timeline-item-content .mud-card.mud-paper-outlined::before{top:calc(50% - 16px);border-right-color:var(--mud-palette-lines-default)}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end.mud-timeline-rtl .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end.mud-timeline-rtl .mud-timeline-item-content .mud-card::after{transform:rotate(0);left:-16px;right:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end.mud-timeline-rtl .mud-timeline-item-content .mud-card.mud-paper-outlined::after{left:-15px}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start.mud-timeline-rtl .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start.mud-timeline-rtl .mud-timeline-item-content .mud-card::after{transform:rotate(180deg);right:-16px;left:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start.mud-timeline-rtl .mud-timeline-item-content .mud-card.mud-paper-outlined::after{right:-15px}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::after{transform:rotate(0);left:-16px;right:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card.mud-paper-outlined::after{left:-15px}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::after{transform:rotate(180deg);right:-16px;left:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card.mud-paper-outlined::after{right:-15px}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card::after{transform:rotate(180deg);right:-16px;left:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card.mud-paper-outlined::after{right:-15px}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::after{transform:rotate(0);left:-16px;right:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card.mud-paper-outlined::after{left:-15px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item-content .mud-card::after{transform:rotate(90deg);top:-24px;bottom:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item-content .mud-card.mud-paper-outlined::after{top:-23px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item-content .mud-card::after{transform:rotate(270deg);bottom:-24px;top:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item-content .mud-card.mud-paper-outlined::after{bottom:-23px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::after{transform:rotate(90deg);top:-24px;bottom:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card.mud-paper-outlined::after{top:-23px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::after{transform:rotate(270deg);bottom:-24px;top:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card.mud-paper-outlined::after{bottom:-23px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::after{transform:rotate(270deg);bottom:-24px;top:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card.mud-paper-outlined::after{bottom:-23px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::after{transform:rotate(90deg);top:-24px;bottom:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card.mud-paper-outlined::after{top:-23px}.mud-typography{margin:0}.mud-typography-h1{font-size:var(--mud-typography-h1-size);font-family:var(--mud-typography-h1-family);font-weight:var(--mud-typography-h1-weight);line-height:var(--mud-typography-h1-lineheight);letter-spacing:var(--mud-typography-h1-letterspacing);text-transform:var(--mud-typography-h1-text-transform)}.mud-typography-h2{font-size:var(--mud-typography-h2-size);font-family:var(--mud-typography-h2-family);font-weight:var(--mud-typography-h2-weight);line-height:var(--mud-typography-h2-lineheight);letter-spacing:var(--mud-typography-h2-letterspacing);text-transform:var(--mud-typography-h2-text-transform)}.mud-typography-h3{font-size:var(--mud-typography-h3-size);font-family:var(--mud-typography-h3-family);font-weight:var(--mud-typography-h3-weight);line-height:var(--mud-typography-h3-lineheight);letter-spacing:var(--mud-typography-h3-letterspacing);text-transform:var(--mud-typography-h3-text-transform)}.mud-typography-h4{font-size:var(--mud-typography-h4-size);font-family:var(--mud-typography-h4-family);font-weight:var(--mud-typography-h4-weight);line-height:var(--mud-typography-h4-lineheight);letter-spacing:var(--mud-typography-h4-letterspacing);text-transform:var(--mud-typography-h4-text-transform)}.mud-typography-h5{font-size:var(--mud-typography-h5-size);font-family:var(--mud-typography-h5-family);font-weight:var(--mud-typography-h5-weight);line-height:var(--mud-typography-h5-lineheight);letter-spacing:var(--mud-typography-h5-letterspacing);text-transform:var(--mud-typography-h5-text-transform)}.mud-typography-h6{font-size:var(--mud-typography-h6-size);font-family:var(--mud-typography-h6-family);font-weight:var(--mud-typography-h6-weight);line-height:var(--mud-typography-h6-lineheight);letter-spacing:var(--mud-typography-h6-letterspacing);text-transform:var(--mud-typography-h6-text-transform)}.mud-typography-subtitle1{font-size:var(--mud-typography-subtitle1-size);font-family:var(--mud-typography-subtitle1-family);font-weight:var(--mud-typography-subtitle1-weight);line-height:var(--mud-typography-subtitle1-lineheight);letter-spacing:var(--mud-typography-subtitle1-letterspacing);text-transform:var(--mud-typography-subtitle1-text-transform)}.mud-typography-subtitle2{font-size:var(--mud-typography-subtitle2-size);font-family:var(--mud-typography-subtitle2-family);font-weight:var(--mud-typography-subtitle2-weight);line-height:var(--mud-typography-subtitle2-lineheight);letter-spacing:var(--mud-typography-subtitle2-letterspacing);text-transform:var(--mud-typography-subtitle2-text-transform)}.mud-typography-body1{font-size:var(--mud-typography-body1-size);font-family:var(--mud-typography-body1-family);font-weight:var(--mud-typography-body1-weight);line-height:var(--mud-typography-body1-lineheight);letter-spacing:var(--mud-typography-body1-letterspacing);text-transform:var(--mud-typography-body1-text-transform)}.mud-typography-body2{font-size:var(--mud-typography-body2-size);font-family:var(--mud-typography-body2-family);font-weight:var(--mud-typography-body2-weight);line-height:var(--mud-typography-body2-lineheight);letter-spacing:var(--mud-typography-body2-letterspacing);text-transform:var(--mud-typography-body2-text-transform)}.mud-typography-button{font-size:var(--mud-typography-button-size);font-family:var(--mud-typography-button-family);font-weight:var(--mud-typography-button-weight);line-height:var(--mud-typography-button-lineheight);letter-spacing:var(--mud-typography-button-letterspacing);text-transform:var(--mud-typography-button-text-transform)}.mud-typography-caption{font-size:var(--mud-typography-caption-size);font-family:var(--mud-typography-caption-family);font-weight:var(--mud-typography-caption-weight);line-height:var(--mud-typography-caption-lineheight);letter-spacing:var(--mud-typography-caption-letterspacing);text-transform:var(--mud-typography-caption-text-transform)}.mud-typography-overline{font-size:var(--mud-typography-overline-size);font-family:var(--mud-typography-overline-family);font-weight:var(--mud-typography-overline-weight);line-height:var(--mud-typography-overline-lineheight);letter-spacing:var(--mud-typography-overline-letterspacing);text-transform:var(--mud-typography-overline-text-transform)}.mud-typography-srOnly{width:1px;height:1px;overflow:hidden;position:absolute}.mud-typography-align-left{text-align:left}.mud-typography-align-center{text-align:center}.mud-typography-align-right{text-align:right}.mud-typography-align-justify{text-align:justify}.mud-typography-nowrap{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mud-typography-gutterbottom{margin-bottom:.35em}.mud-typography-paragraph{margin-bottom:16px}.mud-table{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-surface);border-radius:var(--mud-default-borderradius);transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-table.mud-table-square{border-radius:0px}.mud-table.mud-table-outlined{border:1px solid var(--mud-palette-lines-default)}.mud-table-container{width:100%;overflow-y:auto}.mud-table-root{width:100%;border-spacing:0}.mud-table-root .mud-table-head{display:table-header-group}.mud-table-root .mud-table-head .mud-table-cell{color:var(--mud-palette-text-primary);font-weight:500;line-height:1.5rem}.mud-table-root .mud-table-body{display:table-row-group}.mud-table-root .mud-table-body .mud-table-cell{color:var(--mud-palette-text-primary)}.mud-table-root>.mud-table-body:last-child>.mud-table-row:last-child>.mud-table-cell,.mud-table-root>.mud-table-foot:last-child>.mud-table-row:last-child>.mud-table-cell{border-bottom:none}.mud-table-sort-label{display:inline-flex;align-items:center;flex-direction:inherit;justify-content:flex-start}.mud-table-sort-label.mud-clickable{cursor:pointer;user-select:none;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-table-sort-label.mud-clickable:hover{opacity:.64}.mud-table-sort-label.mud-clickable:hover .mud-table-sort-label-icon{opacity:1}}.mud-table-sort-label .mud-table-sort-label-icon{font-size:18px;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;margin-left:4px;user-select:none;margin-right:4px;opacity:0}.mud-table-sort-label .mud-table-sort-label-icon.mud-direction-desc{opacity:1;transform:rotate(180deg)}.mud-table-sort-label .mud-table-sort-label-icon.mud-direction-asc{opacity:1;transform:rotate(0deg)}.mud-table-toolbar{left:0;position:sticky;padding-left:16px;padding-right:8px;padding-inline-start:16px;padding-inline-end:8px}.mud-table-cell{display:table-cell;padding:16px;font-size:.875rem;text-align:start;font-weight:400;line-height:1.43;border-bottom:1px solid var(--mud-palette-table-lines);letter-spacing:.01071em;vertical-align:inherit}.mud-table-cell .mud-checkbox{margin:-4px}.mud-table-cell .mud-checkbox>.mud-icon-button{padding:4px}.mud-table-cell>.mud-input-control>div.mud-input.mud-input-text{color:var(--mud-theme-on-surface);font-size:.875rem;margin-top:-14px;margin-bottom:-8px}.mud-table-cell>.mud-select>.mud-input-control>div.mud-input.mud-input-text{color:var(--mud-theme-on-surface);font-size:.875rem;margin-top:-14px;margin-bottom:-8px}.mud-table-cell-footer{color:var(--mud-palette-text-secondary);font-size:.75rem;line-height:1.3125rem}.mud-table-dense * .mud-table-row .mud-table-cell{padding:6px 24px 6px 16px;padding-inline-start:16px;padding-inline-end:24px}.mud-table-dense * .mud-table-row .mud-table-cell .mud-table-cell-checkbox .mud-button-root{padding:4px}.mud-table-dense * .mud-table-row .mud-table-cell .mud-table-row-expander{padding:4px}.mud-table-dense * .mud-table-row .mud-table-cell:last-child{padding-right:16px;padding-inline-end:16px}.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell:not(:last-child){border-right:1px solid var(--mud-palette-table-lines)}.mud-table-bordered .mud-table-container .mud-table-root .mud-table-head.table-head-bordered .mud-table-row .mud-table-cell:not(:last-child){border-right:1px solid var(--mud-palette-table-lines)}.mud-table-bordered .mud-table-container .mud-table-root .mud-table-foot.table-foot-bordered .mud-table-row .mud-table-cell:not(:last-child){border-right:1px solid var(--mud-palette-table-lines)}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell:first-child{border-right:none;border-top-right-radius:0px}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell:last-child{border-right:1px solid var(--mud-palette-table-lines);border-top-right-radius:0px}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-head.table-head-bordered .mud-table-row .mud-table-cell:last-child{border-right:1px solid var(--mud-palette-table-lines);border-top-right-radius:0px}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-head.table-head-bordered .mud-table-row .mud-table-cell:only-child{border-right:none;border-top-right-radius:var(--mud-default-borderradius)}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-head .mud-table-row th.mud-table-cell:first-child{border-right:none;border-top-right-radius:var(--mud-default-borderradius)}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-foot.table-foot-bordered .mud-table-row .mud-table-cell:last-child{border-right:1px solid var(--mud-palette-table-lines);border-top-right-radius:0px}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-foot .mud-table-row .mud-table-cell:first-child{border-right:none}.mud-table-sticky-header .mud-table-container{overflow-x:auto}.mud-table-sticky-header * .mud-table-root .mud-table-head * .mud-table-cell:first-child{border-radius:var(--mud-default-borderradius) 0px 0px 0px}.mud-table-sticky-header * .mud-table-root .mud-table-head * .mud-table-cell:last-child{border-radius:0px var(--mud-default-borderradius) 0px 0px}.mud-table-sticky-header * .mud-table-root .mud-table-head .mud-table-cell,.mud-table-sticky-header * .mud-table-root .mud-table-head .mud-table-loading{background-color:var(--mud-palette-surface);position:sticky;z-index:2}.mud-table-sticky-header * .mud-table-root .mud-table-head .mud-table-cell{top:0}.mud-table-sticky-header * .mud-table-root .mud-table-head .filter-header-cell{top:59px}.mud-table-sticky-header * .mud-table-root .mud-table-head.mud-table-dense .filter-header-cell{top:39px}.mud-table-sticky-header * .mud-table-root .mud-table-head .mud-table-loading{top:59px}.mud-table-sticky-header * .mud-table-root .mud-table-head.mud-table-dense .mud-table-loading{top:39px}.mud-table-sticky-header * .mud-table-root .mud-table-head:has(.filter-header-cell) .mud-table-loading{top:109px}.mud-table-sticky-header * .mud-table-root .mud-table-head.mud-table-dense:has(.filter-header-cell) .mud-table-loading{top:89px}.mud-table-sticky-header * .mud-table-root .mud-table-head * .mud-table-cell.sticky-left,.mud-table-sticky-header * .mud-table-root .mud-table-head * .mud-table-cell.sticky-right{z-index:3;background-color:var(--mud-palette-background-gray)}.mud-table-sticky-footer .mud-table-container{overflow-x:auto}.mud-table-sticky-footer * .mud-table-root .mud-table-foot{position:sticky;z-index:2;bottom:0}.mud-table-sticky-footer * .mud-table-root .mud-table-foot * .mud-table-cell{background-color:var(--mud-palette-surface)}.mud-table-row{color:inherit;display:table-row;outline:0;vertical-align:middle}@media(hover: hover)and (pointer: fine){.mud-table-hover .mud-table-container .mud-table-root .mud-table-body .mud-table-row:hover{background-color:var(--mud-palette-table-hover)}}.mud-table-striped .mud-table-container .mud-table-root .mud-table-body .mud-table-row:nth-of-type(odd){background-color:var(--mud-palette-table-striped)}@media(hover: hover)and (pointer: fine){.mud-table-hover.mud-table-striped .mud-table-container .mud-table-root .mud-table-body .mud-table-row:nth-of-type(odd):hover{background-color:var(--mud-palette-table-hover)}}.mud-table-cell-align-left{text-align:left}.mud-table-cell-align-center{text-align:center}.mud-table-cell-align-right{text-align:right;flex-direction:row-reverse}.mud-table-cell-align-justify{text-align:justify}.mud-table-pagination-display{display:flex;flex-shrink:0}.mud-table-pagination-display .mud-tablepager-left{flex-direction:row !important}.mud-table-pagination-display .mud-tablepager-right{flex-direction:row-reverse !important}.mud-table-pagination-information{white-space:nowrap;direction:initial}.mud-table-page-number-information{white-space:nowrap;direction:initial}.mud-table-pagination{color:var(--mud-theme-on-surface);overflow:auto;font-size:.875rem;display:initial;position:sticky;left:0}.mud-table-pagination:last-child{padding:0}.mud-table-pagination-toolbar{border-top:1px solid var(--mud-palette-table-lines);height:52px;padding-right:2px;padding-inline-end:2px;padding-inline-start:unset;flex-wrap:nowrap}.mud-table-pagination-toolbar .mud-tablepager-left{flex-direction:row !important}.mud-table-pagination-toolbar .mud-tablepager-right{flex-direction:row-reverse !important}.mud-table-pagination-spacer{flex:1 1 100%}.mud-table-pagination-caption{display:flex;flex-shrink:0;align-items:center;padding-left:10px;padding-right:10px}.mud-table-pagination-select{cursor:pointer;margin-left:10px !important;margin-right:10px !important;margin-top:0px !important;min-width:52px}.mud-table-pagination-select .mud-select-input{margin-top:0px !important;padding:0 7px !important}.mud-table-pagination-select .mud-input .mud-input-root{max-width:80px;cursor:pointer;margin-top:2px;border:none;font-size:.875rem;font-weight:400;line-height:1.43;letter-spacing:.01071em;color:var(--mud-theme-on-surface)}.mud-table-pagination-actions{flex-shrink:0;align-items:center;margin-left:10px;margin-inline-start:10px;margin-inline-end:unset}.mud-table-smalldevices-sortselect{display:none}.mud-table-loading{position:relative}.mud-table-loading .mud-table-loading-progress{width:100%}.mud-table-empty-row{background-color:var(--mud-palette-surface);vertical-align:middle;text-align:center}tr.mud-table-row-group-indented-1 td:first-child{padding-left:48px !important}tr.mud-table-row-group-indented-2 td:first-child{padding-left:96px !important}tr.mud-table-row-group-indented-3 td:first-child{padding-left:144px !important}tr.mud-table-row-group-indented-4 td:first-child{padding-left:192px !important}tr.mud-table-row-group-indented-5 td:first-child{padding-left:240px !important}.mud-header-togglehierarchy .mud-table-row-expander{padding:6px}.mud-table-row-expander{margin-top:-12px;margin-bottom:-12px;margin-inline-start:-12px;margin-inline-end:-2px}@media(max-width: 360px){.mud-table .mud-table-pagination .mud-select{margin-left:auto;margin-right:-14px;margin-inline-start:auto;margin-inline-end:-14px}.mud-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:unset !important;margin-inline-start:unset !important}}@media(max-width: 416px){.mud-table .mud-table-pagination .mud-table-pagination-toolbar{flex-wrap:wrap;padding-top:16px;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset;min-height:100px}.mud-table .mud-table-pagination .mud-table-pagination-toolbar .mud-table-pagination-actions{margin-left:auto;margin-right:-14px;margin-inline-start:auto;margin-inline-end:-14px}}@media(max-width: 600px){.mud-xs-table .mud-table-root .mud-table-head,.mud-xs-table .mud-table-root .mud-table-foot{display:none}.mud-xs-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-xs-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-xs-table .mud-table-row{display:revert}.mud-xs-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-xs-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-xs-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-xs-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-xs-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-xs-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-xs-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-xs-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-xs-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-xs-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-xs-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-xs-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}@media(max-width: 960px){.mud-sm-table .mud-table-root .mud-table-head,.mud-sm-table .mud-table-root .mud-table-foot{display:none}.mud-sm-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-sm-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-sm-table .mud-table-row{display:revert}.mud-sm-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-sm-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-sm-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-sm-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-sm-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-sm-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-sm-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-sm-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-sm-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-sm-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-sm-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-sm-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}@media(max-width: 1280px){.mud-md-table .mud-table-root .mud-table-head,.mud-md-table .mud-table-root .mud-table-foot{display:none}.mud-md-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-md-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-md-table .mud-table-row{display:revert}.mud-md-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-md-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-md-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-md-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-md-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-md-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-md-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-md-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-md-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-md-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-md-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-md-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}@media(max-width: 1920px){.mud-lg-table .mud-table-root .mud-table-head,.mud-lg-table .mud-table-root .mud-table-foot{display:none}.mud-lg-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-lg-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-lg-table .mud-table-row{display:revert}.mud-lg-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-lg-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-lg-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-lg-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-lg-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-lg-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-lg-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-lg-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-lg-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-lg-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-lg-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-lg-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}@media(max-width: 2560px){.mud-xl-table .mud-table-root .mud-table-head,.mud-xl-table .mud-table-root .mud-table-foot{display:none}.mud-xl-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-xl-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-xl-table .mud-table-row{display:revert}.mud-xl-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-xl-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-xl-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-xl-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-xl-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-xl-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-xl-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-xl-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-xl-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-xl-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-xl-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-xl-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}@media(min-width: 2560px){.mud-xxl-table .mud-table-root .mud-table-head,.mud-xxl-table .mud-table-root .mud-table-foot{display:none}.mud-xxl-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-xxl-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-xxl-table .mud-table-row{display:revert}.mud-xxl-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-xxl-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-xxl-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-xxl-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-xxl-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-xxl-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-xxl-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-xxl-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-xxl-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-xxl-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-xxl-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-xxl-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}.mud-tabs{display:flex;flex-direction:column}.mud-tabs.mud-tabs-reverse{flex-direction:column-reverse}.mud-tabs.mud-tabs-vertical{flex-direction:row}.mud-tabs.mud-tabs-vertical .mud-tooltip-root{width:auto}.mud-tabs.mud-tabs-vertical-reverse{flex-direction:row-reverse}.mud-tabs.mud-tabs-rounded{border-radius:var(--mud-default-borderradius);overflow:hidden}.mud-tabs.mud-tabs-rounded .mud-tabs-tabbar{border-radius:var(--mud-default-borderradius)}.mud-tabs.mud-tabs-rounded .mud-tabs-panels{border-radius:var(--mud-default-borderradius);flex-grow:1}.mud-tabs-tabbar{position:relative;background-color:var(--mud-palette-surface)}.mud-tabs-tabbar.mud-tabs-border-left{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important;border-right:1px solid var(--mud-palette-lines-default)}.mud-tabs-tabbar.mud-tabs-border-right{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important;border-left:1px solid var(--mud-palette-lines-default)}.mud-tabs-tabbar.mud-tabs-border-top{border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important;border-bottom:1px solid var(--mud-palette-lines-default)}.mud-tabs-tabbar.mud-tabs-border-bottom{border-top-left-radius:0 !important;border-top-right-radius:0 !important;border-top:1px solid var(--mud-palette-lines-default)}.mud-tabs-tabbar.mud-tabs-rounded{border-radius:var(--mud-default-borderradius)}.mud-tabs-tabbar.mud-tabs-vertical .mud-tabs-tabbar-inner{flex-direction:column}.mud-tabs-tabbar.mud-tabs-vertical .mud-tabs-tabbar-inner .mud-tabs-scroll-button .mud-button-root{width:100%;border-radius:0px;height:32px}.mud-tabs-tabbar.mud-tabs-vertical .mud-tabs-tabbar-inner .mud-tabs-scroll-button .mud-button-root .mud-icon-button-label .mud-icon-root{transform:rotate(90deg)}.mud-tabs-tabbar .mud-tabs-tabbar-inner{display:flex;min-height:48px}.mud-tabs-tabbar-content{width:100%;flex:1 1 auto;display:inline-block;position:relative;white-space:nowrap;overflow:hidden}.mud-tabs-tabbar-content .mud-tabs-tabbar-wrapper{width:max-content;position:inherit;display:flex;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1)}.mud-tabs-tabbar-content .mud-tabs-tabbar-wrapper.mud-tabs-centered{margin:auto}.mud-tabs-tabbar-content .mud-tabs-tabbar-wrapper.mud-tabs-vertical{flex-direction:column}.mud-tabs-panels{position:relative;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1)}.mud-tabs-panels.mud-tabs-vertical{display:flex;flex-grow:1}.mud-tab{width:100%;display:inline-flex;padding:6px 12px;min-height:48px;flex-shrink:0;font-weight:500;line-height:1.75;user-select:none;white-space:normal;letter-spacing:.02857em;text-transform:uppercase;text-align:center;align-items:center;justify-content:center;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-tab:hover{cursor:pointer;background-color:var(--mud-palette-action-default-hover)}}.mud-tab.mud-tab-active{color:var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-primary-hover)}}.mud-tab.mud-disabled{cursor:default;pointer-events:none;color:var(--mud-palette-text-disabled)}.mud-tab .mud-tab-icon-text{margin-right:8px;margin-inline-end:8px;margin-inline-start:unset}.mud-tab.mud-tab-panel-hidden{display:none}.mud-tab-slider{position:absolute;background:var(--mud-palette-primary)}.mud-tab-slider.mud-tab-slider-horizontal{height:2px;bottom:0;transition:left .3s cubic-bezier(0.64, 0.09, 0.08, 1);will-change:left}.mud-tab-slider.mud-tab-slider-horizontal.mud-tab-slider-horizontal-reverse{top:0;bottom:unset}.mud-tab-slider.mud-tab-slider-vertical{width:2px;right:0;transition:top .3s cubic-bezier(0.64, 0.09, 0.08, 1);will-change:top}.mud-tab-slider.mud-tab-slider-vertical.mud-tab-slider-vertical-reverse{left:0;right:unset}.mud-tab-badge{margin-left:8px;margin-inline-start:8px;margin-inline-end:unset}.mud-tabs-tabbar-primary{background-color:var(--mud-palette-primary);color:var(--mud-palette-primary-text)}.mud-tabs-tabbar-primary .mud-tab-slider{background:var(--mud-palette-primary-text)}.mud-tabs-tabbar-primary .mud-tab.mud-tab-active{color:var(--mud-palette-primary-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-primary .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-primary-lighten)}}.mud-tabs-tabbar-secondary{background-color:var(--mud-palette-secondary);color:var(--mud-palette-secondary-text)}.mud-tabs-tabbar-secondary .mud-tab-slider{background:var(--mud-palette-secondary-text)}.mud-tabs-tabbar-secondary .mud-tab.mud-tab-active{color:var(--mud-palette-secondary-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-secondary .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-secondary-lighten)}}.mud-tabs-tabbar-tertiary{background-color:var(--mud-palette-tertiary);color:var(--mud-palette-tertiary-text)}.mud-tabs-tabbar-tertiary .mud-tab-slider{background:var(--mud-palette-tertiary-text)}.mud-tabs-tabbar-tertiary .mud-tab.mud-tab-active{color:var(--mud-palette-tertiary-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-tertiary .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-tertiary-lighten)}}.mud-tabs-tabbar-info{background-color:var(--mud-palette-info);color:var(--mud-palette-info-text)}.mud-tabs-tabbar-info .mud-tab-slider{background:var(--mud-palette-info-text)}.mud-tabs-tabbar-info .mud-tab.mud-tab-active{color:var(--mud-palette-info-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-info .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-info-lighten)}}.mud-tabs-tabbar-success{background-color:var(--mud-palette-success);color:var(--mud-palette-success-text)}.mud-tabs-tabbar-success .mud-tab-slider{background:var(--mud-palette-success-text)}.mud-tabs-tabbar-success .mud-tab.mud-tab-active{color:var(--mud-palette-success-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-success .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-success-lighten)}}.mud-tabs-tabbar-warning{background-color:var(--mud-palette-warning);color:var(--mud-palette-warning-text)}.mud-tabs-tabbar-warning .mud-tab-slider{background:var(--mud-palette-warning-text)}.mud-tabs-tabbar-warning .mud-tab.mud-tab-active{color:var(--mud-palette-warning-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-warning .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-warning-lighten)}}.mud-tabs-tabbar-error{background-color:var(--mud-palette-error);color:var(--mud-palette-error-text)}.mud-tabs-tabbar-error .mud-tab-slider{background:var(--mud-palette-error-text)}.mud-tabs-tabbar-error .mud-tab.mud-tab-active{color:var(--mud-palette-error-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-error .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-error-lighten)}}.mud-tabs-tabbar-dark{background-color:var(--mud-palette-dark);color:var(--mud-palette-dark-text)}.mud-tabs-tabbar-dark .mud-tab-slider{background:var(--mud-palette-dark-text)}.mud-tabs-tabbar-dark .mud-tab.mud-tab-active{color:var(--mud-palette-dark-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-dark .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-dark-lighten)}}.tab-transition-enter{transform:translate(100%, 0)}.tab-transition-leave,.tab-transition-leave-active{position:absolute;top:0}.tab-transition-leave-to{position:absolute;transform:translate(-100%, 0)}.tab-reverse-transition-enter{transform:translate(-100%, 0)}.tab-reverse-transition-leave,.tab-reverse-transition-leave-to{top:0;position:absolute;transform:translate(100%, 0)}.mud-dynamic-tabs .mud-tabs-tabbar .mud-tab{padding:6px 14px}.mud-dynamic-tabs .mud-tabs-tabbar .mud-tab .mud-icon-button{padding:4px;margin-right:-4px;margin-inline-end:-4px;margin-inline-start:unset}.mud-dynamic-tabs .mud-tabs-tabbar .mud-tab .mud-tabs-panel-header-before{padding-right:8px;padding-inline-end:8px;padding-inline-start:unset}.mud-dynamic-tabs .mud-tabs-tabbar .mud-tab .mud-tabs-panel-header-after{padding-left:8px;padding-inline-start:8px;padding-inline-end:unset}.mud-tabs-header.mud-tabs-header-before{display:inherit}.mud-tabs-header.mud-tabs-header-after{display:inherit}.mud-tabs-panel-header{display:flex;flex:1 1 auto}.mud-tabs-panel-header.mud-tabs-panel-header-before{justify-content:flex-start}.mud-tabs-panel-header.mud-tabs-panel-header-after{justify-content:flex-end}.mud-select{display:flex;flex-grow:1;position:relative}.mud-select.mud-autocomplete{display:block}.mud-select.mud-autocomplete .mud-select-input{cursor:text}.mud-select.mud-autocomplete .mud-input-adornment{cursor:pointer}.mud-select.mud-autocomplete--with-progress .mud-select-input input{padding-right:3.5rem !important}.mud-select.mud-autocomplete--with-progress .mud-input-adorned-end input{padding-right:4.5rem !important}.mud-select.mud-autocomplete--with-progress .mud-select-input .mud-icon-button{display:none !important}.mud-select.mud-autocomplete--with-progress .progress-indicator-circular{position:absolute;width:100%;top:0;bottom:0;display:flex;align-items:center;justify-content:flex-end;padding-top:.25rem;padding-bottom:.25rem;padding-right:1rem}.mud-select.mud-autocomplete--with-progress .mud-progress-linear{position:absolute;bottom:-1px;height:2px}.mud-select .mud-select-input{cursor:pointer}.mud-select .mud-select-input .mud-input-slot{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mud-select .mud-select-input .mud-input-adornment-end{margin-left:0}.mud-select .mud-select-input:disabled{cursor:default}.mud-select .mud-disabled .mud-select-input{cursor:default}.mud-rtl-provider .mud-select .progress-indicator-circular--with-adornment{padding-right:1rem}.mud-rtl-provider.mud-application-layout-rtl .mud-select .progress-indicator-circular--with-adornment{padding-right:0rem !important;padding-left:1rem !important}.mud-select>.mud-form-helpertext{margin-top:-21px}.mud-select-all{margin-top:10px;border-bottom:1px solid #d3d3d3;padding-bottom:18px}.mud-select-filler{white-space:nowrap;height:0px}.mud-width-content{max-width:min-content}.mud-input{position:relative;color:var(--mud-palette-text-primary);cursor:text;display:inline-flex;box-sizing:border-box;align-items:center;color-scheme:var(--mud-native-html-color-scheme);line-height:1.1876em}.mud-input.mud-input-full-width{width:100%}.mud-input.mud-disabled{color:var(--mud-palette-text-disabled);cursor:default}.mud-input.mud-disabled>.mud-input-adornment{color:var(--mud-palette-text-disabled);pointer-events:none}.mud-input.mud-input-underline:before{left:0;right:0;bottom:0;content:" ";position:absolute;transition:border-bottom .2s,background-color .2s;border-bottom:1px solid var(--mud-palette-lines-inputs);pointer-events:none}@media(hover: hover)and (pointer: fine){.mud-input.mud-input-underline:hover:not(.mud-disabled):before{border-bottom:1px solid var(--mud-palette-action-default)}}.mud-input.mud-input-underline:after{left:0;right:0;bottom:0;content:"";position:absolute;transform:scaleX(0);transition:transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;border-bottom:2px solid var(--mud-palette-primary);pointer-events:none}.mud-input.mud-input-underline.mud-disabled:before{border-bottom-style:dotted}.mud-input.mud-input-underline.mud-input-error:after{transform:scaleX(1);border-bottom-color:var(--mud-palette-error)}.mud-input.mud-input-filled{position:relative;transition:background-color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;background-color:rgba(0,0,0,.09);border-top-left-radius:4px;border-top-right-radius:4px}@media(hover: hover)and (pointer: fine){.mud-input.mud-input-filled:hover{background-color:rgba(0,0,0,.13)}}.mud-input.mud-input-filled.mud-focused{background-color:rgba(0,0,0,.09)}.mud-input.mud-input-filled.mud-disabled{background-color:rgba(0,0,0,.12)}.mud-input.mud-input-filled.mud-input-adorned-start{padding-left:12px;padding-inline-start:12px;padding-inline-end:unset}.mud-input.mud-input-filled.mud-input-adorned-end{padding-right:12px;padding-inline-end:12px;padding-inline-start:unset}.mud-input.mud-input-filled.mud-input-underline:before{left:0;right:0;bottom:0;content:" ";position:absolute;transition:border-bottom-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-bottom:1px solid var(--mud-palette-lines-inputs);pointer-events:none}.mud-input.mud-input-filled.mud-input-underline:after{left:0;right:0;bottom:0;content:"";position:absolute;transform:scaleX(0);transition:transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;border-bottom:2px solid var(--mud-palette-primary);pointer-events:none}@media(hover: hover)and (pointer: fine){.mud-input.mud-input-filled.mud-input-underline:hover:before{border-bottom:1px solid var(--mud-palette-action-default)}}.mud-input.mud-input-filled.mud-input-underline.mud-disabled:before{border-bottom-style:dotted}.mud-input.mud-input-filled.mud-input-underline.mud-input-error:after{transform:scaleX(1);border-bottom-color:var(--mud-palette-error)}.mud-input.mud-input-outlined{position:relative;border-width:0px}.mud-input.mud-input-outlined .mud-input-outlined-border{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;min-width:0%;height:100%;text-align:start;pointer-events:none;border-radius:var(--mud-default-borderradius);border-color:var(--mud-palette-lines-inputs);border-width:1px;border-style:solid;transition:border-width,border-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input.mud-input-outlined>.mud-input-outlined-border legend{float:none;visibility:hidden;font-size:.75rem;font-weight:inherit;width:0;height:0;margin:0 11px 0 11px;padding:0;position:relative}@media(hover: hover)and (pointer: fine){.mud-input.mud-input-outlined:not(.mud-disabled):not(:focus-within):hover .mud-input-outlined-border{border-color:var(--mud-palette-action-default)}}.mud-input.mud-input-outlined.mud-shrink>.mud-input-outlined-border legend{width:auto;padding:0 5px}.mud-input.mud-input-outlined:focus-within>.mud-input-outlined-border,.mud-input.mud-input-outlined:focus-within .mud-shrink>.mud-input-outlined-border{border-width:2px;border-color:var(--mud-palette-primary)}.mud-input.mud-input-outlined:focus-within>.mud-input-outlined-border legend,.mud-input.mud-input-outlined:focus-within .mud-shrink>.mud-input-outlined-border legend{width:auto;padding:0 5px}.mud-input.mud-input-outlined.mud-disabled .mud-input-outlined-border{border-color:var(--mud-palette-action-disabled)}.mud-input.mud-input-outlined.mud-input-adorned-start{padding-left:14px;padding-inline-start:14px;padding-inline-end:unset}.mud-input.mud-input-outlined.mud-input-adorned-end{padding-right:14px;padding-inline-end:14px;padding-inline-start:unset}.mud-input-error .mud-input-outlined-border{border-color:var(--mud-palette-error) !important}.mud-input:focus-within.mud-input-underline:after{transform:scaleX(1)}.mud-input>input.mud-input-root,div.mud-input-slot.mud-input-root{font:inherit;color:currentColor;width:100%;border:0;height:1lh;margin:0;display:block;padding:6px 0 7px;min-width:0;background:none;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mud-input>input.mud-input-root::placeholder,div.mud-input-slot.mud-input-root::placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root::-webkit-input-placeholder,div.mud-input-slot.mud-input-root::-webkit-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root:-moz-placeholder,div.mud-input-slot.mud-input-root:-moz-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root::-moz-placeholder,div.mud-input-slot.mud-input-root::-moz-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root:-ms-input-placeholder,div.mud-input-slot.mud-input-root:-ms-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root::-ms-input-placeholder,div.mud-input-slot.mud-input-root::-ms-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root.mud-input-root-margin-dense,div.mud-input-slot.mud-input-root.mud-input-root-margin-dense{padding-top:3px}.mud-input>input.mud-input-root.mud-input-root-multiline,div.mud-input-slot.mud-input-root.mud-input-root-multiline{height:auto;resize:none;padding:0}.mud-input>input.mud-input-root.mud-input-root-type-search,div.mud-input-slot.mud-input-root.mud-input-root-type-search{-moz-appearance:textfield;-webkit-appearance:textfield}.mud-input>input.mud-input-root:focus,.mud-input>input.mud-input-root:active,div.mud-input-slot.mud-input-root:focus,div.mud-input-slot.mud-input-root:active{outline:0}.mud-input>input.mud-input-root:invalid,div.mud-input-slot.mud-input-root:invalid{box-shadow:none}.mud-input>input.mud-input-root:disabled,div.mud-input-slot.mud-input-root:disabled{opacity:1}.mud-input>input.mud-input-root.mud-input-root-filled,div.mud-input-slot.mud-input-root.mud-input-root-filled{padding:27px 12px 10px}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-margin-dense,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-margin-dense{padding-top:23px;padding-bottom:6px}.mud-input>input.mud-input-root.mud-input-root-filled:-webkit-autofill,div.mud-input-slot.mud-input-root.mud-input-root-filled:-webkit-autofill{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label{padding-top:18px;padding-bottom:19px}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label.mud-input-root-margin-dense,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label.mud-input-root-margin-dense{padding-top:10px;padding-bottom:11px}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-multiline,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-multiline{padding:0}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-adorned-start,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:12px}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-adorned-end,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-adorned-end{padding-right:0;padding-inline-end:0;padding-inline-start:12px}.mud-input>input.mud-input-root-outlined,div.mud-input-slot.mud-input-root-outlined{padding:18.5px 14px}.mud-input>input.mud-input-root-outlined.mud-input-root:-webkit-autofill,div.mud-input-slot.mud-input-root-outlined.mud-input-root:-webkit-autofill{border-radius:inherit}.mud-input>input.mud-input-root-outlined.mud-input-root-margin-dense,div.mud-input-slot.mud-input-root-outlined.mud-input-root-margin-dense{padding-top:10.5px;padding-bottom:10.5px}.mud-input>input.mud-input-root-outlined.mud-input-root-adorned-start,div.mud-input-slot.mud-input-root-outlined.mud-input-root-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:14px}.mud-input>input.mud-input-root-outlined.mud-input-root-adorned-end,div.mud-input-slot.mud-input-root-outlined.mud-input-root-adorned-end{padding-right:0;padding-inline-end:0;padding-inline-start:14px}.mud-input>input::-ms-reveal,.mud-input>input::-ms-clear,div.mud-input-slot::-ms-reveal,div.mud-input-slot::-ms-clear{display:none !important}.mud-input>textarea.mud-input-root{font:inherit;color:currentColor;width:100%;border:0;height:auto;margin:6px 0 7px;padding:0;display:block;min-width:0;background:none;position:relative;box-sizing:content-box;letter-spacing:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);resize:none;cursor:auto}.mud-input>textarea.mud-input-root::placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root::-webkit-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root:-moz-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root::-moz-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root:-ms-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root::-ms-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root.mud-input-root-margin-dense{padding-top:3px}.mud-input>textarea.mud-input-root.mud-input-root-type-search{-moz-appearance:textfield;-webkit-appearance:textfield}.mud-input>textarea.mud-input-root:focus,.mud-input>textarea.mud-input-root:active{outline:0}.mud-input>textarea.mud-input-root:invalid{box-shadow:none}.mud-input>textarea.mud-input-root:disabled{opacity:1}.mud-input>textarea.mud-input-root.mud-input-root-filled{box-sizing:border-box;margin-top:27px;margin-bottom:0;padding:0px 12px 10px}.mud-input>textarea.mud-input-root.mud-input-root-filled.mud-input-root-margin-dense{padding-top:23px;padding-bottom:6px;mask-image:linear-gradient(to bottom, transparent 23px, black 23px)}.mud-input>textarea.mud-input-root.mud-input-root-filled:-webkit-autofill{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-input>textarea.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label{padding-top:18px;padding-bottom:19px;mask-image:linear-gradient(to bottom, transparent 18px, black 18px)}.mud-input>textarea.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label.mud-input-root-margin-dense{padding-top:10px;padding-bottom:11px;mask-image:linear-gradient(to bottom, transparent 10px, black 10px)}.mud-input>textarea.mud-input-root.mud-input-root-filled.mud-input-root-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:12px}.mud-input>textarea.mud-input-root.mud-input-root-filled.mud-input-root-adorned-end{padding-right:0;padding-inline-end:unset;padding-inline-start:12px}.mud-input>textarea.mud-input-root::-webkit-scrollbar{width:8px;height:8px;z-index:1;cursor:crosshair}.mud-input>textarea.mud-input-root::-webkit-scrollbar-thumb{background:var(--mud-palette-lines-inputs);border-radius:1px}.mud-input>textarea.mud-input-root::-webkit-scrollbar-track{background:rgba(0,0,0,0)}.mud-input>textarea.mud-input-root-outlined{box-sizing:border-box;margin-top:18.5px;margin-bottom:0;padding:0px 14px 18.5px}.mud-input>textarea.mud-input-root-outlined.mud-input-root:-webkit-autofill{border-radius:inherit}.mud-input>textarea.mud-input-root-outlined.mud-input-root-margin-dense{margin-top:0px;padding-top:10.5px;padding-bottom:10.5px;mask-image:linear-gradient(to bottom, transparent 10.5px, black 10.5px)}.mud-input>textarea.mud-input-root-outlined.mud-input-root-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:14px}.mud-input>textarea.mud-input-root-outlined.mud-input-root-adorned-end{padding-right:0;padding-inline-end:0;padding-inline-start:14px}.mud-input-adornment{height:.01em;display:flex;max-height:2em;align-items:center;white-space:nowrap}.mud-input-adornment-start{margin-right:8px;margin-inline-end:8px;margin-inline-start:unset}.mud-input-adornment-start.mud-input-root-filled-shrink{margin-top:16px}.mud-input-adornment-end{margin-left:8px;margin-inline-start:8px;margin-inline-end:unset}.mud-input-number-control.mud-input-showspin .mud-input-adornment-end{margin-right:12px;margin-inline-end:12px;margin-inline-start:unset}.mud-input-number-control.mud-input-showspin .mud-input-underline:not(.mud-input-filled) .mud-input-adornment-end{margin-right:24px;margin-inline-end:24px;margin-inline-start:unset}.mud-input-adornment-disable-pointerevents{pointer-events:none}.mud-range-input-separator{visibility:hidden;margin:0 4px}.mud-input:focus-within .mud-range-input-separator{visibility:visible}.mud-picker .mud-shrink .mud-range-input-separator{visibility:visible}.mud-input-input-control{user-select:none}.mud-input-control{border:0;margin:0;padding:0;display:flex;flex:1 1 auto;max-width:100%;position:relative;flex-direction:column;vertical-align:top}.mud-input-control.mud-input-control-full-width{width:100%}.mud-input-control.mud-input-control-boolean-input{flex:none;margin:0}.mud-input-control.mud-input-control-boolean-input .mud-radio-group{display:inherit;flex-direction:row;align-items:center;flex-wrap:wrap}.mud-input-control.mud-input-outlined-with-label{margin-top:8px;margin-bottom:4px}.mud-input-control.mud-input-control-margin-dense{margin:4px 0px}.mud-input-control.mud-input-control-margin-dense.mud-input-outlined-with-label{margin-top:8px;margin-bottom:4px}.mud-input-control.mud-input-control-margin-normal{margin:8px 0px}.mud-input-control.mud-input-control-margin-normal.mud-input-outlined-with-label{margin-top:16px;margin-bottom:8px}.mud-input-control>.mud-input-control-input-container{position:relative;display:flex;flex-direction:column}.mud-input-control>.mud-input-control-input-container>div.mud-input.mud-input-text.mud-input-text-with-label{margin-top:16px}.mud-input-control>.mud-input-control-input-container>.mud-input-label-outlined.mud-input-label-inputcontrol{line-height:1.15rem}.mud-input-control>.mud-input-control-input-container>.mud-input-label-inputcontrol{color:var(--mud-palette-text-secondary);padding:0;font-size:1rem;font-weight:400;line-height:1.15rem;letter-spacing:.00938em;z-index:0;pointer-events:none}.mud-input-control>.mud-input-control-input-container>.mud-input-label-inputcontrol.mud-disabled{color:var(--mud-palette-text-disabled)}.mud-input-control>.mud-input-control-input-container>.mud-input-label-inputcontrol.mud-input-error{color:var(--mud-palette-error) !important}.mud-input-control.mud-input-required>.mud-input-control-input-container>.mud-input-label::after{content:"*"}.mud-input-control.mud-input-number-control input::-webkit-outer-spin-button,.mud-input-control.mud-input-number-control input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.mud-input-control.mud-input-number-control input[type=number]{-moz-appearance:textfield}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end) input{padding-right:24px;padding-inline-end:24px}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end) input.mud-input-root-margin-dense{padding-right:20px;padding-inline-end:20px}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-text input{padding-inline-start:0}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-text input.mud-input-root-margin-dense{padding-inline-start:0}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-filled input{padding-inline-start:12px}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-filled input.mud-input-root-margin-dense{padding-inline-start:12px}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-outlined input{padding-inline-start:14px}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-outlined input.mud-input-root-margin-dense{padding-inline-start:14px}.mud-input-control.mud-input-number-control .mud-input-numeric-spin{display:inline-flex;flex-direction:column;justify-content:space-between;position:absolute;right:0;top:0;bottom:0}.mud-input-control.mud-input-number-control .mud-input-numeric-spin button{padding:2px 0;min-width:unset;min-height:unset}.mud-input-control:focus-within .mud-input-helper-text.mud-input-helper-onfocus,.mud-input-control.mud-input-error .mud-input-helper-text.mud-input-helper-onfocus{transform:translateY(0)}.mud-input-control-helper-container{overflow:hidden;margin-top:3px}.mud-input-helper-text{color:var(--mud-palette-text-secondary);margin:0;font-size:.75rem;text-align:start;font-weight:400;line-height:1.66;letter-spacing:.03333em}.mud-input-helper-text.mud-input-helper-onfocus{transform:translateY(-100%);transition:color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-input-helper-text.mud-disabled{color:var(--mud-palette-text-disabled)}.mud-input-helper-text.mud-input-error{color:var(--mud-palette-error) !important}.mud-input-helper-text-margin-dense{margin-top:4px}.mud-input-helper-text-contained{margin-left:14px;margin-right:14px}.mud-application-layout-rtl .mud-input-control.mud-input-number-control .mud-input-numeric-spin{left:0;right:unset}.mud-input-label{display:block;transform-origin:top left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.mud-input-label-inputcontrol{top:0;left:0;position:absolute;transform:translate(0, 24px) scale(1)}.mud-input-label-margindense{transform:translate(0, 21px) scale(1)}.mud-input-label-shrink{transform:translate(0, 1.5px) scale(0.75);transform-origin:top left}.mud-input-label-animated{transition:color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-input-label-filled{z-index:1;transform:translate(12px, 20px) scale(1);max-width:calc(100% - 12px);pointer-events:none}.mud-input-label-filled.mud-input-label-margin-dense{transform:translate(12px, 17px) scale(1)}.mud-input-label-outlined{transform:translate(14px, 20px) scale(1);max-width:calc(100% - 14px);pointer-events:none;background-color:rgba(0,0,0,0);padding:0px 5px !important}.mud-input-label-outlined.mud-input-label-margin-dense{transform:translate(14px, 12px) scale(1)}.mud-shrink~label.mud-input-label.mud-input-label-inputcontrol{color:var(--mud-palette-text-primary)}.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol{color:var(--mud-palette-primary)}.mud-shrink~label.mud-input-label.mud-input-label-inputcontrol,.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol{transform:translate(0, 1.5px) scale(0.75);transform-origin:top left}.mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled,.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled{transform:translate(12px, 10px) scale(0.75);max-width:calc((100% - 12px)/.75)}.mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled.mud-input-label-margin-dense,.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled.mud-input-label-margin-dense{transform:translate(12px, 7px) scale(0.75)}.mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-outlined,.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-outlined{transform:translate(14px, -6px) scale(0.75);max-width:calc((100% - 14px)/.75)}.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-error{color:var(--mud-palette-error)}.mud-application-layout-rtl .mud-input-label{transform-origin:top right}.mud-application-layout-rtl .mud-input-label-inputcontrol{left:unset;right:0}.mud-application-layout-rtl .mud-input-label-shrink{transform-origin:top right}.mud-application-layout-rtl .mud-input-label-filled{transform:translate(-12px, 20px) scale(1)}.mud-application-layout-rtl .mud-input-label-filled.mud-input-label-margin-dense{transform:translate(-12px, 17px) scale(1)}.mud-application-layout-rtl .mud-input-label-outlined{transform:translate(-14px, 20px) scale(1)}.mud-application-layout-rtl .mud-input-label-outlined.mud-input-label-margin-dense{transform:translate(-14px, 12px) scale(1)}.mud-application-layout-rtl .mud-shrink~label.mud-input-label.mud-input-label-inputcontrol,.mud-application-layout-rtl .mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol{transform-origin:top right}.mud-application-layout-rtl .mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled,.mud-application-layout-rtl .mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled{transform:translate(-12px, 10px) scale(0.75)}.mud-application-layout-rtl .mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled.mud-input-label-margin-dense,.mud-application-layout-rtl .mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled.mud-input-label-margin-dense{transform:translate(-12px, 7px) scale(0.75)}.mud-application-layout-rtl .mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-outlined,.mud-application-layout-rtl .mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-outlined{transform:translate(-14px, -6px) scale(0.75)}.mud-input-content-placement-start{flex-direction:row-reverse}.mud-input-content-placement-start.mud-input-with-content{margin-left:16px;margin-inline-start:16px}.mud-input-content-placement-end{flex-direction:row}.mud-input-content-placement-end.mud-input-with-content{margin-right:16px;margin-inline-end:16px}.mud-input-content-placement-top{margin-inline-end:unset;flex-direction:column-reverse}.mud-input-content-placement-top.mud-input-with-content{margin-left:16px;margin-inline-start:16px}.mud-input-content-placement-bottom{margin-inline-end:unset;flex-direction:column}.mud-input-content-placement-bottom.mud-input-with-content{margin-left:16px;margin-inline-start:16px}.mud-file-upload{flex-grow:0}.mud-file-upload>.mud-input-control-input-container{display:initial !important}.mud-file-upload.mud-input-control{margin-top:0}.mud-image.fluid{max-width:100%;height:auto}.mud-overlay{top:0;left:0;right:0;bottom:0;margin:0 !important;align-items:center;justify-content:center;border-radius:inherit;display:flex;position:fixed;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1),z-index 1ms;z-index:5}.mud-overlay.mud-overlay-absolute{position:absolute}.mud-overlay .mud-overlay-scrim{top:0;left:0;right:0;bottom:0;border-radius:inherit;position:absolute;height:100%;width:100%;border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);animation:mud-animation-fadein ease .15s;-webkit-animation:mud-animation-fadein ease .15s;-moz-animation:mud-animation-fadein ease .15s;-o-animation:mud-animation-fadein ease .15s}.mud-overlay .mud-overlay-scrim.mud-overlay-dark{border-color:var(--mud-palette-overlay-dark);background-color:var(--mud-palette-overlay-dark)}.mud-overlay .mud-overlay-scrim.mud-overlay-light{border-color:var(--mud-palette-overlay-light);background-color:var(--mud-palette-overlay-light)}.mud-overlay .mud-overlay-scrim:hover{cursor:default}.mud-overlay .mud-overlay-content{position:relative}.mud-overlay.mud-overlay-popover{z-index:var(--mud-zindex-popover)}.mud-overlay.mud-overlay-dialog{z-index:calc(var(--mud-zindex-dialog) + 1)}.mud-overlay.mud-overlay-drawer{z-index:calc(var(--mud-zindex-appbar) + 1)}.mud-treeview{margin:0px;padding:0px;list-style:none;overflow:auto}.mud-treeview.mud-treeview-selected-primary .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary);background-color:var(--mud-palette-primary-hover)}.mud-treeview.mud-treeview-selected-secondary .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary);background-color:var(--mud-palette-secondary-hover)}.mud-treeview.mud-treeview-selected-tertiary .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary);background-color:var(--mud-palette-tertiary-hover)}.mud-treeview.mud-treeview-selected-info .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info);background-color:var(--mud-palette-info-hover)}.mud-treeview.mud-treeview-selected-success .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success);background-color:var(--mud-palette-success-hover)}.mud-treeview.mud-treeview-selected-warning .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning);background-color:var(--mud-palette-warning-hover)}.mud-treeview.mud-treeview-selected-error .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error);background-color:var(--mud-palette-error-hover)}.mud-treeview.mud-treeview-selected-dark .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark);background-color:var(--mud-palette-dark-hover)}.mud-treeview.mud-treeview-checked-primary .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-primary)}.mud-treeview.mud-treeview-checked-secondary .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-secondary)}.mud-treeview.mud-treeview-checked-tertiary .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-tertiary)}.mud-treeview.mud-treeview-checked-info .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-info)}.mud-treeview.mud-treeview-checked-success .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-success)}.mud-treeview.mud-treeview-checked-warning .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-warning)}.mud-treeview.mud-treeview-checked-error .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-error)}.mud-treeview.mud-treeview-checked-dark .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-dark)}.mud-treeview-group{margin:0px;padding:0px;margin-left:17px;margin-inline-start:17px;margin-inline-end:unset;list-style:none}.mud-treeview-item{margin:0;outline:0;padding:0;cursor:default;list-style:none;min-height:2rem;align-items:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mud-treeview-item .mud-treeview-item-arrow .mud-icon-button,.mud-treeview-item .mud-treeview-item-checkbox .mud-icon-button{padding:4px}.mud-treeview-item.mud-treeview-item-disabled{color:var(--mud-palette-action-disabled) !important;cursor:default !important;pointer-events:none !important}.mud-treeview-item-content{width:100%;display:flex;padding:4px 8px;align-items:center;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-treeview-hover .mud-treeview-item-content:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-treeview-item-arrow{width:2rem;display:flex;flex-shrink:0;margin:0 4px;min-height:32px;justify-content:center}.mud-treeview-item-arrow .mud-treeview-item-arrow-expand{transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1),visibility 0s}.mud-treeview-item-arrow .mud-treeview-item-arrow-expand.mud-transform{transform:rotate(90deg)}.mud-treeview-item-arrow .mud-treeview-item-arrow-load{animation:rotation 1s infinite linear}.mud-treeview-item-icon{width:32px;display:flex;flex-shrink:0;margin-right:4px;margin-inline-end:4px;margin-inline-start:unset;justify-content:center}.mud-treeview-item-label{flex-grow:1;padding-left:4px;padding-right:4px}.mud-treeview-dense .mud-treeview-item{min-height:unset}.mud-treeview-dense .mud-treeview-item-content{padding:1px 4px}.mud-treeview-dense .mud-treeview-item-arrow{min-height:unset}.mud-treeview-dense .mud-icon-button{padding:0}.mud-treeview-select-none{user-select:none}@keyframes rotation{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.mud-application-layout-rtl .mud-treeview-item-arrow{transform:scaleX(-1)}.mud-data-grid th{position:relative}.mud-data-grid .drop-allowed{color:var(--mud-palette-success)}.mud-data-grid .drop-not-allowed{color:var(--mud-palette-error)}.mud-data-grid .drag-icon-options{transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;opacity:0;cursor:grab}.mud-data-grid .mud-table-cell.edit-mode-cell .mud-input-control{margin:0 !important}.mud-data-grid .mud-table-cell.edit-mode-cell .mud-input{font-size:inherit}.mud-data-grid .mud-table-cell.edit-mode-cell .mud-input:before{content:none}.mud-data-grid .mud-table-cell.edit-mode-cell .mud-inputafter{content:none}.mud-data-grid .mud-table-cell.edit-mode-cell .mud-input .mud-input-outlined-border{border:none}.mud-data-grid .mud-table-cell.filter-header-cell{padding:6px 24px 6px 16px;padding-inline-start:16px;padding-inline-end:24px}.mud-data-grid .mud-table-cell.sticky-left,.mud-data-grid .mud-table-cell.sticky-right{position:sticky;background-color:var(--mud-palette-background-gray);z-index:1}.mud-data-grid .mud-table-cell.sticky-left{left:0px}.mud-data-grid .mud-table-cell.sticky-right{right:0px}.mud-data-grid .mud-table-cell:not(.mud-table-child-content) .mud-input-text{margin-top:0 !important}.mud-data-grid .mud-table-cell .column-header{display:flex;align-items:center;justify-content:space-between}.mud-data-grid .mud-table-cell .column-header .sortable-column-header{width:100%}@media(hover: hover)and (pointer: fine){.mud-data-grid .mud-table-cell .column-header:hover .column-options .sort-direction-icon,.mud-data-grid .mud-table-cell .column-header:hover .column-options .column-options-icon,.mud-data-grid .mud-table-cell .column-header:hover .column-options .drag-icon-options{opacity:.8;color:var(--mud-palette-action-default)}.mud-data-grid .mud-table-cell .column-header:hover .column-options .mud-menu .mud-icon-button-label{opacity:1;color:var(--mud-palette-action-default)}}.mud-data-grid .mud-table-cell .column-header .column-options{display:inline-flex;align-items:center;flex-direction:inherit;justify-content:flex-start}.mud-data-grid .mud-table-cell .column-header .sort-direction-icon{font-size:18px;margin-left:4px;margin-inline-start:4px;margin-inline-end:unset;user-select:none;transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;opacity:0}.mud-data-grid .mud-table-cell .column-header .sort-direction-icon.mud-direction-desc{opacity:1;transform:rotate(180deg)}.mud-data-grid .mud-table-cell .column-header .sort-direction-icon.mud-direction-asc{opacity:1;transform:rotate(0deg)}.mud-data-grid .mud-table-cell .column-header .mud-sort-index{transform:scale(0.9) translate(-2px, -2px)}.mud-data-grid .mud-table-cell .column-header .column-options .mud-menu .mud-icon-button-label{user-select:none;transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;opacity:0}.mud-data-grid .mud-table-cell .mud-resizer{position:absolute;top:0;right:0;width:8px;cursor:col-resize;user-select:none}.mud-application-layout-rtl .mud-data-grid .mud-table-cell .mud-resizer{right:auto;left:0}@media(hover: hover)and (pointer: fine){.mud-data-grid .mud-table-cell .mud-resizer:hover{border-right:2px solid var(--mud-palette-primary)}}.mud-data-grid .mud-table-cell .mud-resizing{border-right:2px solid var(--mud-palette-primary)}.mud-data-grid .mud-table-cell.mud-datagrid-group{background-color:var(--mud-palette-background-gray)}.mud-data-grid .mud-table-cell.mud-row-group-indented-2{padding-left:48px !important}.mud-data-grid .mud-table-cell.mud-row-group-indented-3{padding-left:96px !important}.mud-data-grid .mud-table-cell.mud-row-group-indented-4{padding-left:144px !important}.mud-data-grid .mud-table-cell.mud-row-group-indented-5{padding-left:192px !important}@media(hover: hover)and (pointer: fine){.mud-data-grid-columns-panel:hover .column-options .sort-direction-icon,.mud-data-grid-columns-panel:hover .column-options .column-options-icon,.mud-data-grid-columns-panel:hover .column-options .drag-icon-options{opacity:.8;color:var(--mud-palette-action-default)}.mud-data-grid-columns-panel:hover .column-options .mud-menu .mud-icon-button-label{opacity:1;color:var(--mud-palette-action-default)}}.mud-data-grid-columns-panel .sort-direction-icon{font-size:18px;margin-left:4px;margin-inline-start:4px;margin-inline-end:unset;user-select:none;transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-data-grid-columns-panel .sort-direction-icon.mud-direction-desc{opacity:1;transform:rotate(180deg)}.mud-data-grid-columns-panel .sort-direction-icon.mud-direction-asc{opacity:1;transform:rotate(0deg)}.mud-data-grid-columns-panel .mud-sort-index{transform:scale(0.9) translate(-2px, -2px)}.mud-data-grid-columns-panel .drag-icon-options{transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;opacity:1;cursor:grab}.mud-data-grid-columns-panel .mud-drop-item-preview-start{z-index:0}.mud-toggle-group{display:grid;overflow:hidden;box-sizing:border-box;border-radius:var(--mud-default-borderradius)}.mud-toggle-group>.mud-toggle-item{box-shadow:none;border-width:inherit;border-color:inherit;border-radius:0}.mud-toggle-group-outlined{border-width:1px;border-color:rgb(from var(--mud-palette-text-primary) r g b/var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-primary{border-color:rgb(from var(--mud-palette-primary) r g b/var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-secondary{border-color:rgb(from var(--mud-palette-secondary) r g b/var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-tertiary{border-color:rgb(from var(--mud-palette-tertiary) r g b/var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-info{border-color:rgb(from var(--mud-palette-info) r g b/var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-success{border-color:rgb(from var(--mud-palette-success) r g b/var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-warning{border-color:rgb(from var(--mud-palette-warning) r g b/var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-error{border-color:rgb(from var(--mud-palette-error) r g b/var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-dark{border-color:rgb(from var(--mud-palette-dark) r g b/var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-horizontal:not(.mud-toggle-group-rtl)>.mud-toggle-item:not(:first-child),.mud-toggle-group-outlined.mud-toggle-group-horizontal:not(.mud-toggle-group-rtl)>:not(:first-child) .mud-toggle-item{margin-left:-1px}.mud-toggle-group-outlined.mud-toggle-group-horizontal:not(.mud-toggle-group-rtl)>.mud-toggle-item:not(:first-child).mud-toggle-item-delimiter,.mud-toggle-group-outlined.mud-toggle-group-horizontal:not(.mud-toggle-group-rtl)>:not(:first-child) .mud-toggle-item.mud-toggle-item-delimiter{border-left-style:solid !important}.mud-toggle-group-outlined.mud-toggle-group-horizontal.mud-toggle-group-rtl>.mud-toggle-item:not(:last-child),.mud-toggle-group-outlined.mud-toggle-group-horizontal.mud-toggle-group-rtl>:not(:last-child) .mud-toggle-item{margin-left:-1px}.mud-toggle-group-outlined.mud-toggle-group-horizontal.mud-toggle-group-rtl>.mud-toggle-item:not(:last-child).mud-toggle-item-delimiter,.mud-toggle-group-outlined.mud-toggle-group-horizontal.mud-toggle-group-rtl>:not(:last-child) .mud-toggle-item.mud-toggle-item-delimiter{border-left-style:solid !important}.mud-toggle-group-outlined.mud-toggle-group-vertical>.mud-toggle-item:not(:first-child),.mud-toggle-group-outlined.mud-toggle-group-vertical>:not(:first-child) .mud-toggle-item{margin-top:-1px}.mud-toggle-group-outlined.mud-toggle-group-vertical>.mud-toggle-item:not(:first-child).mud-toggle-item-delimiter,.mud-toggle-group-outlined.mud-toggle-group-vertical>:not(:first-child) .mud-toggle-item.mud-toggle-item-delimiter{border-top-style:solid !important}.mud-toggle-item{padding:6px;min-width:auto;border-style:none !important;display:flex;justify-content:center}.mud-toggle-item>.mud-button-label{min-height:20px}.mud-toggle-item .mud-toggle-item-check-icon{margin:0 6px;font-size:20px}.mud-toggle-item-size-small{padding:4px}.mud-toggle-item-size-small .mud-toggle-item-check-icon{margin:0 4px;font-size:18px}.mud-toggle-item-size-large{padding:8px}.mud-toggle-item-size-large .mud-toggle-item-check-icon{margin:0 8px;font-size:22px}.mud-toggle-item-fixed>.mud-button-label:has(>.mud-toggle-item-check-icon){display:grid;grid-template-columns:1fr repeat(3, auto) 1fr}.mud-toggle-item-check-icon{justify-self:start}.mud-toggle-item-content{display:contents}.mud-stepper .mud-stepper-nav .mud-step{padding:24px;position:relative;cursor:default;pointer-events:none;user-select:text}.mud-stepper .mud-stepper-nav .mud-step.mud-clickable{cursor:pointer;pointer-events:auto;user-select:none;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-stepper .mud-stepper-nav .mud-step.mud-clickable:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-stepper .mud-stepper-nav .mud-step.mud-clickable:focus-visible,.mud-stepper .mud-stepper-nav .mud-step.mud-clickable:active{background-color:var(--mud-palette-action-default-hover)}.mud-stepper .mud-stepper-nav .mud-step:disabled .mud-step-label-icon{background-color:var(--mud-palette-lines-default) !important;color:var(--mud-palette-text-disabled) !important}.mud-stepper .mud-stepper-nav .mud-step:disabled .mud-step-label-content{color:var(--mud-palette-text-disabled) !important}.mud-stepper .mud-stepper-nav .mud-step .mud-step-label{display:flex;align-items:center;flex-direction:row;height:100%;gap:8px}.mud-stepper .mud-stepper-nav .mud-step .mud-step-label .mud-step-label-icon{display:flex;flex-shrink:0;color:var(--mud-palette-white);border-radius:50%;background-color:var(--mud-palette-text-disabled);height:24px;width:24px;align-items:center;justify-content:center;font-size:12px;letter-spacing:0;text-indent:0;white-space:nowrap}.mud-stepper .mud-stepper-nav .mud-step .mud-step-label .mud-step-label-icon .mud-typography{line-height:1}.mud-stepper .mud-stepper-nav .mud-step .mud-step-label .mud-step-label-content{width:100%;color:var(--mud-palette-text-secondary);--mud-ripple-color: var(--mud-palette-text-secondary);text-align:start}.mud-stepper .mud-stepper-nav .mud-step .mud-step-label .mud-step-label-content-title{line-height:var(--mud-typography-body2-lineheight)}.mud-stepper .mud-stepper-nav .mud-step.active .mud-step-label-content{color:var(--mud-palette-text-primary);--mud-ripple-color: var(--mud-palette-text-primary)}.mud-stepper .mud-stepper-nav.mud-stepper-nav-scrollable{overflow:auto}.mud-stepper .mud-stepper-nav.mud-stepper-nav-scrollable .mud-step{min-width:fit-content}.mud-stepper .mud-stepper-nav.mud-stepper-nav-scrollable .mud-stepper-nav-connector{min-width:32px}.mud-stepper .mud-stepper-content{padding:0 24px}.mud-stepper .mud-stepper-nav-connector{flex:1 1 auto}.mud-stepper .mud-stepper-nav-connector .mud-stepper-nav-connector-line{display:block;border-color:var(--mud-palette-lines-inputs)}.mud-stepper.mud-stepper__horizontal .mud-stepper-nav{display:flex}.mud-stepper.mud-stepper__horizontal.mud-stepper__center-labels .mud-step{flex-basis:175px}.mud-stepper.mud-stepper__horizontal.mud-stepper__center-labels .mud-step-label{flex-direction:column;justify-content:flex-start;align-items:center}.mud-stepper.mud-stepper__horizontal.mud-stepper__center-labels .mud-step-label .mud-step-label-icon{margin-inline-end:0px !important}.mud-stepper.mud-stepper__horizontal.mud-stepper__center-labels .mud-step-label .mud-step-label-content{margin-top:12px;text-align:center}.mud-stepper.mud-stepper__horizontal.mud-stepper__center-labels .mud-stepper-nav-connector{margin:35px -67px 0;align-self:flex-start}.mud-stepper.mud-stepper__horizontal .mud-stepper-nav-connector{align-self:center;margin:0 -16px}.mud-stepper.mud-stepper__horizontal .mud-stepper-nav-connector .mud-stepper-nav-connector-line{border-top-style:solid;border-top-width:1px}.mud-stepper.mud-stepper__vertical .mud-stepper-nav{padding:8px 0px}.mud-stepper.mud-stepper__vertical .mud-step{padding:0 16px}.mud-stepper.mud-stepper__vertical .mud-step .mud-step-label{padding:8px 0px}.mud-stepper.mud-stepper__vertical .mud-stepper-nav-connector{margin-inline-start:28px;margin-inline-end:0}.mud-stepper.mud-stepper__vertical .mud-stepper-nav-connector .mud-stepper-nav-connector-line{border-inline-start:1px solid #bdbdbd;min-height:24px}.mud-stepper.mud-stepper__vertical .mud-stepper-content{margin-inline-start:28px;margin-inline-end:0;padding-inline-start:20px;padding-inline-end:0;border-inline-start:1px solid var(--mud-palette-lines-inputs)}.mud-stepper-step-button{display:inline-flex;-moz-box-align:center;align-items:center;-moz-box-pack:center;justify-content:center;position:relative;background-color:rgba(0,0,0,0);outline:0px;border:0px;border-radius:0px;cursor:pointer;user-select:none;vertical-align:middle;appearance:none;text-decoration:none;color:inherit;width:100%;padding:24px 16px;margin:-24px -16px;box-sizing:content-box}.mud-swipearea{touch-action:none}.rounded-0{border-radius:0 !important}.rounded-t-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-r-0,.rounded-e-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-b-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-l-0,.rounded-s-0{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-tl-0,.rounded-ts-0{border-top-left-radius:0 !important}.rounded-tr-0,.rounded-te-0{border-top-right-radius:0 !important}.rounded-br-0,.rounded-be-0{border-bottom-right-radius:0 !important}.rounded-bl-0,.rounded-bs-0{border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-s-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-e-0{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.mud-application-layout-rtl .rounded-ts-0{border-top-right-radius:0 !important;border-top-left-radius:0 !important}.mud-application-layout-rtl .rounded-te-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.mud-application-layout-rtl .rounded-bs-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-be-0{border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-sm{border-radius:2px !important}.rounded-t-sm{border-top-left-radius:2px !important;border-top-right-radius:2px !important}.rounded-r-sm,.rounded-e-sm{border-top-right-radius:2px !important;border-bottom-right-radius:2px !important}.rounded-b-sm{border-bottom-right-radius:2px !important;border-bottom-left-radius:2px !important}.rounded-l-sm,.rounded-s-sm{border-top-left-radius:2px !important;border-bottom-left-radius:2px !important}.rounded-tl-sm,.rounded-ts-sm{border-top-left-radius:2px !important}.rounded-tr-sm,.rounded-te-sm{border-top-right-radius:2px !important}.rounded-br-sm,.rounded-be-sm{border-bottom-right-radius:2px !important}.rounded-bl-sm,.rounded-bs-sm{border-bottom-left-radius:2px !important}.mud-application-layout-rtl .rounded-s-sm{border-top-right-radius:2px !important;border-bottom-right-radius:2px !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-e-sm{border-top-left-radius:2px !important;border-bottom-left-radius:2px !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.mud-application-layout-rtl .rounded-ts-sm{border-top-right-radius:2px !important;border-top-left-radius:0 !important}.mud-application-layout-rtl .rounded-te-sm{border-top-left-radius:2px !important;border-top-right-radius:0 !important}.mud-application-layout-rtl .rounded-bs-sm{border-bottom-right-radius:2px !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-be-sm{border-bottom-left-radius:2px !important;border-bottom-right-radius:0 !important}.rounded-lg{border-radius:8px !important}.rounded-t-lg{border-top-left-radius:8px !important;border-top-right-radius:8px !important}.rounded-r-lg,.rounded-e-lg{border-top-right-radius:8px !important;border-bottom-right-radius:8px !important}.rounded-b-lg{border-bottom-right-radius:8px !important;border-bottom-left-radius:8px !important}.rounded-l-lg,.rounded-s-lg{border-top-left-radius:8px !important;border-bottom-left-radius:8px !important}.rounded-tl-lg,.rounded-ts-lg{border-top-left-radius:8px !important}.rounded-tr-lg,.rounded-te-lg{border-top-right-radius:8px !important}.rounded-br-lg,.rounded-be-lg{border-bottom-right-radius:8px !important}.rounded-bl-lg,.rounded-bs-lg{border-bottom-left-radius:8px !important}.mud-application-layout-rtl .rounded-s-lg{border-top-right-radius:8px !important;border-bottom-right-radius:8px !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-e-lg{border-top-left-radius:8px !important;border-bottom-left-radius:8px !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.mud-application-layout-rtl .rounded-ts-lg{border-top-right-radius:8px !important;border-top-left-radius:0 !important}.mud-application-layout-rtl .rounded-te-lg{border-top-left-radius:8px !important;border-top-right-radius:0 !important}.mud-application-layout-rtl .rounded-bs-lg{border-bottom-right-radius:8px !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-be-lg{border-bottom-left-radius:8px !important;border-bottom-right-radius:0 !important}.rounded-xl{border-radius:24px !important}.rounded-t-xl{border-top-left-radius:24px !important;border-top-right-radius:24px !important}.rounded-r-xl,.rounded-e-xl{border-top-right-radius:24px !important;border-bottom-right-radius:24px !important}.rounded-b-xl{border-bottom-right-radius:24px !important;border-bottom-left-radius:24px !important}.rounded-l-xl,.rounded-s-xl{border-top-left-radius:24px !important;border-bottom-left-radius:24px !important}.rounded-tl-xl,.rounded-ts-xl{border-top-left-radius:24px !important}.rounded-tr-xl,.rounded-te-xl{border-top-right-radius:24px !important}.rounded-br-xl,.rounded-be-xl{border-bottom-right-radius:24px !important}.rounded-bl-xl,.rounded-bs-xl{border-bottom-left-radius:24px !important}.mud-application-layout-rtl .rounded-s-xl{border-top-right-radius:24px !important;border-bottom-right-radius:24px !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-e-xl{border-top-left-radius:24px !important;border-bottom-left-radius:24px !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.mud-application-layout-rtl .rounded-ts-xl{border-top-right-radius:24px !important;border-top-left-radius:0 !important}.mud-application-layout-rtl .rounded-te-xl{border-top-left-radius:24px !important;border-top-right-radius:0 !important}.mud-application-layout-rtl .rounded-bs-xl{border-bottom-right-radius:24px !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-be-xl{border-bottom-left-radius:24px !important;border-bottom-right-radius:0 !important}.rounded{border-radius:var(--mud-default-borderradius) !important}.rounded-t{border-top-left-radius:var(--mud-default-borderradius) !important;border-top-right-radius:var(--mud-default-borderradius) !important}.rounded-r,.rounded-e{border-top-right-radius:var(--mud-default-borderradius) !important;border-bottom-right-radius:var(--mud-default-borderradius) !important}.rounded-b{border-bottom-right-radius:var(--mud-default-borderradius) !important;border-bottom-left-radius:var(--mud-default-borderradius) !important}.rounded-l,.rounded-s{border-top-left-radius:var(--mud-default-borderradius) !important;border-bottom-left-radius:var(--mud-default-borderradius) !important}.rounded-tl,.rounded-ts{border-top-left-radius:var(--mud-default-borderradius) !important}.rounded-tr,.rounded-te{border-top-right-radius:var(--mud-default-borderradius) !important}.rounded-br,.rounded-be{border-bottom-right-radius:var(--mud-default-borderradius) !important}.rounded-bl,.rounded-bs{border-bottom-left-radius:var(--mud-default-borderradius) !important}.mud-application-layout-rtl .rounded-s{border-top-right-radius:var(--mud-default-borderradius) !important;border-bottom-right-radius:var(--mud-default-borderradius) !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-e{border-top-left-radius:var(--mud-default-borderradius) !important;border-bottom-left-radius:var(--mud-default-borderradius) !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.mud-application-layout-rtl .rounded-ts{border-top-right-radius:var(--mud-default-borderradius) !important;border-top-left-radius:0 !important}.mud-application-layout-rtl .rounded-te{border-top-left-radius:var(--mud-default-borderradius) !important;border-top-right-radius:0 !important}.mud-application-layout-rtl .rounded-bs{border-bottom-right-radius:var(--mud-default-borderradius) !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-be{border-bottom-left-radius:var(--mud-default-borderradius) !important;border-bottom-right-radius:0 !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:9999px !important}.border-solid{border-style:solid !important}.border-dashed{border-style:dashed !important}.border-dotted{border-style:dotted !important}.border-double{border-style:double !important}.border-hidden{border-style:hidden !important}.border-none{border-style:none !important}.border-0{border-width:0px !important}.border-t-0{border-top-width:0px !important}.border-r-0{border-right-width:0px !important}.border-b-0{border-bottom-width:0px !important}.border-l-0{border-left-width:0px !important}.border-x-0{border-left-width:0px !important;border-right-width:0px !important}.border-y-0{border-top-width:0px !important;border-bottom-width:0px !important}.border{border-width:1px !important}.border-t{border-top-width:1px !important}.border-r{border-right-width:1px !important}.border-b{border-bottom-width:1px !important}.border-l{border-left-width:1px !important}.border-x{border-left-width:1px !important;border-right-width:1px !important}.border-y{border-top-width:1px !important;border-bottom-width:1px !important}.border-2{border-width:2px !important}.border-t-2{border-top-width:2px !important}.border-r-2{border-right-width:2px !important}.border-b-2{border-bottom-width:2px !important}.border-l-2{border-left-width:2px !important}.border-x-2{border-left-width:2px !important;border-right-width:2px !important}.border-y-2{border-top-width:2px !important;border-bottom-width:2px !important}.border-4{border-width:4px !important}.border-t-4{border-top-width:4px !important}.border-r-4{border-right-width:4px !important}.border-b-4{border-bottom-width:4px !important}.border-l-4{border-left-width:4px !important}.border-x-4{border-left-width:4px !important;border-right-width:4px !important}.border-y-4{border-top-width:4px !important;border-bottom-width:4px !important}.border-8{border-width:8px !important}.border-t-8{border-top-width:8px !important}.border-r-8{border-right-width:8px !important}.border-b-8{border-bottom-width:8px !important}.border-l-8{border-left-width:8px !important}.border-x-8{border-left-width:8px !important;border-right-width:8px !important}.border-y-8{border-top-width:8px !important;border-bottom-width:8px !important}.outline-none{outline-style:none}.outline-solid{outline-style:solid}.outline-dashed{outline-style:dashed}.outline-dotted{outline-style:dotted}.outline-double{outline-style:double}.outline-hidden{outline-style:hidden}.flex-1{flex:1 1 0% !important}.flex-auto{flex:1 1 auto !important}.flex-initial{flex:0 1 auto !important}.flex-none{flex:none !important}.flex-row{flex-direction:row !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column{flex-direction:column !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-grow-start>*:first-child{flex-grow:1 !important}.flex-grow-end>*:last-child{flex-grow:1 !important}.flex-grow-start-and-end>:first-child,.flex-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-grow-all>*{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}.justify-start{justify-content:flex-start !important}.justify-end{justify-content:flex-end !important}.justify-center{justify-content:center !important}.justify-space-between{justify-content:space-between !important}.justify-space-around{justify-content:space-around !important}.justify-space-evenly{justify-content:space-evenly !important}.order-first{order:-9999 !important}.order-last{order:9999 !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-6{order:6 !important}.order-7{order:7 !important}.order-8{order:8 !important}.order-9{order:9 !important}.order-10{order:10 !important}.order-11{order:11 !important}.order-12{order:12 !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-space-between{align-content:space-between !important}.align-content-space-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-start{align-items:flex-start !important}.align-end{align-items:flex-end !important}.align-center{align-items:center !important}.align-baseline{align-items:baseline !important}.align-stretch{align-items: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-stretch{align-self:stretch !important}.gap-0{gap:0px}.gap-x-0{column-gap:0px}.gap-y-0{row-gap:0px}.gap-1{gap:4px}.gap-x-1{column-gap:4px}.gap-y-1{row-gap:4px}.gap-2{gap:8px}.gap-x-2{column-gap:8px}.gap-y-2{row-gap:8px}.gap-3{gap:12px}.gap-x-3{column-gap:12px}.gap-y-3{row-gap:12px}.gap-4{gap:16px}.gap-x-4{column-gap:16px}.gap-y-4{row-gap:16px}.gap-5{gap:20px}.gap-x-5{column-gap:20px}.gap-y-5{row-gap:20px}.gap-6{gap:24px}.gap-x-6{column-gap:24px}.gap-y-6{row-gap:24px}.gap-7{gap:28px}.gap-x-7{column-gap:28px}.gap-y-7{row-gap:28px}.gap-8{gap:32px}.gap-x-8{column-gap:32px}.gap-y-8{row-gap:32px}.gap-9{gap:36px}.gap-x-9{column-gap:36px}.gap-y-9{row-gap:36px}.gap-10{gap:40px}.gap-x-10{column-gap:40px}.gap-y-10{row-gap:40px}.gap-11{gap:44px}.gap-x-11{column-gap:44px}.gap-y-11{row-gap:44px}.gap-12{gap:48px}.gap-x-12{column-gap:48px}.gap-y-12{row-gap:48px}.gap-13{gap:52px}.gap-x-13{column-gap:52px}.gap-y-13{row-gap:52px}.gap-14{gap:56px}.gap-x-14{column-gap:56px}.gap-y-14{row-gap:56px}.gap-15{gap:60px}.gap-x-15{column-gap:60px}.gap-y-15{row-gap:60px}.gap-16{gap:64px}.gap-x-16{column-gap:64px}.gap-y-16{row-gap:64px}.gap-17{gap:68px}.gap-x-17{column-gap:68px}.gap-y-17{row-gap:68px}.gap-18{gap:72px}.gap-x-18{column-gap:72px}.gap-y-18{row-gap:72px}.gap-19{gap:76px}.gap-x-19{column-gap:76px}.gap-y-19{row-gap:76px}.gap-20{gap:80px}.gap-x-20{column-gap:80px}.gap-y-20{row-gap:80px}@media(min-width: 600px){.flex-sm-1{flex:1 1 0% !important}.flex-sm-auto{flex:1 1 auto !important}.flex-sm-initial{flex:0 1 auto !important}.flex-sm-none{flex:none !important}.flex-sm-row{flex-direction:row !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column{flex-direction:column !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-grow-start>*:first-child{flex-grow:1 !important}.flex-sm-grow-end>*:last-child{flex-grow:1 !important}.flex-sm-grow-start-and-end>:first-child,.flex-sm-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-sm-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-sm-grow-all>*{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}.justify-sm-start{justify-content:flex-start !important}.justify-sm-end{justify-content:flex-end !important}.justify-sm-center{justify-content:center !important}.justify-sm-space-between{justify-content:space-between !important}.justify-sm-space-around{justify-content:space-around !important}.justify-sm-space-evenly{justify-content:space-evenly !important}.order-sm-first{order:-9999 !important}.order-sm-last{order:9999 !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-6{order:6 !important}.order-sm-7{order:7 !important}.order-sm-8{order:8 !important}.order-sm-9{order:9 !important}.order-sm-10{order:10 !important}.order-sm-11{order:11 !important}.order-sm-12{order:12 !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-space-between{align-content:space-between !important}.align-content-sm-space-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-sm-start{align-items:flex-start !important}.align-sm-end{align-items:flex-end !important}.align-sm-center{align-items:center !important}.align-sm-baseline{align-items:baseline !important}.align-sm-stretch{align-items: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-stretch{align-self:stretch !important}.gap-sm-0{gap:0px}.gap-x-sm-0{column-gap:0px}.gap-y-sm-0{row-gap:0px}.gap-sm-1{gap:4px}.gap-x-sm-1{column-gap:4px}.gap-y-sm-1{row-gap:4px}.gap-sm-2{gap:8px}.gap-x-sm-2{column-gap:8px}.gap-y-sm-2{row-gap:8px}.gap-sm-3{gap:12px}.gap-x-sm-3{column-gap:12px}.gap-y-sm-3{row-gap:12px}.gap-sm-4{gap:16px}.gap-x-sm-4{column-gap:16px}.gap-y-sm-4{row-gap:16px}.gap-sm-5{gap:20px}.gap-x-sm-5{column-gap:20px}.gap-y-sm-5{row-gap:20px}.gap-sm-6{gap:24px}.gap-x-sm-6{column-gap:24px}.gap-y-sm-6{row-gap:24px}.gap-sm-7{gap:28px}.gap-x-sm-7{column-gap:28px}.gap-y-sm-7{row-gap:28px}.gap-sm-8{gap:32px}.gap-x-sm-8{column-gap:32px}.gap-y-sm-8{row-gap:32px}.gap-sm-9{gap:36px}.gap-x-sm-9{column-gap:36px}.gap-y-sm-9{row-gap:36px}.gap-sm-10{gap:40px}.gap-x-sm-10{column-gap:40px}.gap-y-sm-10{row-gap:40px}.gap-sm-11{gap:44px}.gap-x-sm-11{column-gap:44px}.gap-y-sm-11{row-gap:44px}.gap-sm-12{gap:48px}.gap-x-sm-12{column-gap:48px}.gap-y-sm-12{row-gap:48px}.gap-sm-13{gap:52px}.gap-x-sm-13{column-gap:52px}.gap-y-sm-13{row-gap:52px}.gap-sm-14{gap:56px}.gap-x-sm-14{column-gap:56px}.gap-y-sm-14{row-gap:56px}.gap-sm-15{gap:60px}.gap-x-sm-15{column-gap:60px}.gap-y-sm-15{row-gap:60px}.gap-sm-16{gap:64px}.gap-x-sm-16{column-gap:64px}.gap-y-sm-16{row-gap:64px}.gap-sm-17{gap:68px}.gap-x-sm-17{column-gap:68px}.gap-y-sm-17{row-gap:68px}.gap-sm-18{gap:72px}.gap-x-sm-18{column-gap:72px}.gap-y-sm-18{row-gap:72px}.gap-sm-19{gap:76px}.gap-x-sm-19{column-gap:76px}.gap-y-sm-19{row-gap:76px}.gap-sm-20{gap:80px}.gap-x-sm-20{column-gap:80px}.gap-y-sm-20{row-gap:80px}}@media(min-width: 960px){.flex-md-1{flex:1 1 0% !important}.flex-md-auto{flex:1 1 auto !important}.flex-md-initial{flex:0 1 auto !important}.flex-md-none{flex:none !important}.flex-md-row{flex-direction:row !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column{flex-direction:column !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-grow-start>*:first-child{flex-grow:1 !important}.flex-md-grow-end>*:last-child{flex-grow:1 !important}.flex-md-grow-start-and-end>:first-child,.flex-md-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-md-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-md-grow-all>*{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}.justify-md-start{justify-content:flex-start !important}.justify-md-end{justify-content:flex-end !important}.justify-md-center{justify-content:center !important}.justify-md-space-between{justify-content:space-between !important}.justify-md-space-around{justify-content:space-around !important}.justify-md-space-evenly{justify-content:space-evenly !important}.order-md-first{order:-9999 !important}.order-md-last{order:9999 !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-6{order:6 !important}.order-md-7{order:7 !important}.order-md-8{order:8 !important}.order-md-9{order:9 !important}.order-md-10{order:10 !important}.order-md-11{order:11 !important}.order-md-12{order:12 !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-space-between{align-content:space-between !important}.align-content-md-space-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-md-start{align-items:flex-start !important}.align-md-end{align-items:flex-end !important}.align-md-center{align-items:center !important}.align-md-baseline{align-items:baseline !important}.align-md-stretch{align-items: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-stretch{align-self:stretch !important}.gap-md-0{gap:0px}.gap-x-md-0{column-gap:0px}.gap-y-md-0{row-gap:0px}.gap-md-1{gap:4px}.gap-x-md-1{column-gap:4px}.gap-y-md-1{row-gap:4px}.gap-md-2{gap:8px}.gap-x-md-2{column-gap:8px}.gap-y-md-2{row-gap:8px}.gap-md-3{gap:12px}.gap-x-md-3{column-gap:12px}.gap-y-md-3{row-gap:12px}.gap-md-4{gap:16px}.gap-x-md-4{column-gap:16px}.gap-y-md-4{row-gap:16px}.gap-md-5{gap:20px}.gap-x-md-5{column-gap:20px}.gap-y-md-5{row-gap:20px}.gap-md-6{gap:24px}.gap-x-md-6{column-gap:24px}.gap-y-md-6{row-gap:24px}.gap-md-7{gap:28px}.gap-x-md-7{column-gap:28px}.gap-y-md-7{row-gap:28px}.gap-md-8{gap:32px}.gap-x-md-8{column-gap:32px}.gap-y-md-8{row-gap:32px}.gap-md-9{gap:36px}.gap-x-md-9{column-gap:36px}.gap-y-md-9{row-gap:36px}.gap-md-10{gap:40px}.gap-x-md-10{column-gap:40px}.gap-y-md-10{row-gap:40px}.gap-md-11{gap:44px}.gap-x-md-11{column-gap:44px}.gap-y-md-11{row-gap:44px}.gap-md-12{gap:48px}.gap-x-md-12{column-gap:48px}.gap-y-md-12{row-gap:48px}.gap-md-13{gap:52px}.gap-x-md-13{column-gap:52px}.gap-y-md-13{row-gap:52px}.gap-md-14{gap:56px}.gap-x-md-14{column-gap:56px}.gap-y-md-14{row-gap:56px}.gap-md-15{gap:60px}.gap-x-md-15{column-gap:60px}.gap-y-md-15{row-gap:60px}.gap-md-16{gap:64px}.gap-x-md-16{column-gap:64px}.gap-y-md-16{row-gap:64px}.gap-md-17{gap:68px}.gap-x-md-17{column-gap:68px}.gap-y-md-17{row-gap:68px}.gap-md-18{gap:72px}.gap-x-md-18{column-gap:72px}.gap-y-md-18{row-gap:72px}.gap-md-19{gap:76px}.gap-x-md-19{column-gap:76px}.gap-y-md-19{row-gap:76px}.gap-md-20{gap:80px}.gap-x-md-20{column-gap:80px}.gap-y-md-20{row-gap:80px}}@media(min-width: 1280px){.flex-lg-1{flex:1 1 0% !important}.flex-lg-auto{flex:1 1 auto !important}.flex-lg-initial{flex:0 1 auto !important}.flex-lg-none{flex:none !important}.flex-lg-row{flex-direction:row !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column{flex-direction:column !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-grow-start>*:first-child{flex-grow:1 !important}.flex-lg-grow-end>*:last-child{flex-grow:1 !important}.flex-lg-grow-start-and-end>:first-child,.flex-lg-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-lg-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-lg-grow-all>*{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}.justify-lg-start{justify-content:flex-start !important}.justify-lg-end{justify-content:flex-end !important}.justify-lg-center{justify-content:center !important}.justify-lg-space-between{justify-content:space-between !important}.justify-lg-space-around{justify-content:space-around !important}.justify-lg-space-evenly{justify-content:space-evenly !important}.order-lg-first{order:-9999 !important}.order-lg-last{order:9999 !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-6{order:6 !important}.order-lg-7{order:7 !important}.order-lg-8{order:8 !important}.order-lg-9{order:9 !important}.order-lg-10{order:10 !important}.order-lg-11{order:11 !important}.order-lg-12{order:12 !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-space-between{align-content:space-between !important}.align-content-lg-space-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-lg-start{align-items:flex-start !important}.align-lg-end{align-items:flex-end !important}.align-lg-center{align-items:center !important}.align-lg-baseline{align-items:baseline !important}.align-lg-stretch{align-items: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-stretch{align-self:stretch !important}.gap-lg-0{gap:0px}.gap-x-lg-0{column-gap:0px}.gap-y-lg-0{row-gap:0px}.gap-lg-1{gap:4px}.gap-x-lg-1{column-gap:4px}.gap-y-lg-1{row-gap:4px}.gap-lg-2{gap:8px}.gap-x-lg-2{column-gap:8px}.gap-y-lg-2{row-gap:8px}.gap-lg-3{gap:12px}.gap-x-lg-3{column-gap:12px}.gap-y-lg-3{row-gap:12px}.gap-lg-4{gap:16px}.gap-x-lg-4{column-gap:16px}.gap-y-lg-4{row-gap:16px}.gap-lg-5{gap:20px}.gap-x-lg-5{column-gap:20px}.gap-y-lg-5{row-gap:20px}.gap-lg-6{gap:24px}.gap-x-lg-6{column-gap:24px}.gap-y-lg-6{row-gap:24px}.gap-lg-7{gap:28px}.gap-x-lg-7{column-gap:28px}.gap-y-lg-7{row-gap:28px}.gap-lg-8{gap:32px}.gap-x-lg-8{column-gap:32px}.gap-y-lg-8{row-gap:32px}.gap-lg-9{gap:36px}.gap-x-lg-9{column-gap:36px}.gap-y-lg-9{row-gap:36px}.gap-lg-10{gap:40px}.gap-x-lg-10{column-gap:40px}.gap-y-lg-10{row-gap:40px}.gap-lg-11{gap:44px}.gap-x-lg-11{column-gap:44px}.gap-y-lg-11{row-gap:44px}.gap-lg-12{gap:48px}.gap-x-lg-12{column-gap:48px}.gap-y-lg-12{row-gap:48px}.gap-lg-13{gap:52px}.gap-x-lg-13{column-gap:52px}.gap-y-lg-13{row-gap:52px}.gap-lg-14{gap:56px}.gap-x-lg-14{column-gap:56px}.gap-y-lg-14{row-gap:56px}.gap-lg-15{gap:60px}.gap-x-lg-15{column-gap:60px}.gap-y-lg-15{row-gap:60px}.gap-lg-16{gap:64px}.gap-x-lg-16{column-gap:64px}.gap-y-lg-16{row-gap:64px}.gap-lg-17{gap:68px}.gap-x-lg-17{column-gap:68px}.gap-y-lg-17{row-gap:68px}.gap-lg-18{gap:72px}.gap-x-lg-18{column-gap:72px}.gap-y-lg-18{row-gap:72px}.gap-lg-19{gap:76px}.gap-x-lg-19{column-gap:76px}.gap-y-lg-19{row-gap:76px}.gap-lg-20{gap:80px}.gap-x-lg-20{column-gap:80px}.gap-y-lg-20{row-gap:80px}}@media(min-width: 1920px){.flex-xl-1{flex:1 1 0% !important}.flex-xl-auto{flex:1 1 auto !important}.flex-xl-initial{flex:0 1 auto !important}.flex-xl-none{flex:none !important}.flex-xl-row{flex-direction:row !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column{flex-direction:column !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-grow-start>*:first-child{flex-grow:1 !important}.flex-xl-grow-end>*:last-child{flex-grow:1 !important}.flex-xl-grow-start-and-end>:first-child,.flex-xl-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-xl-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-xl-grow-all>*{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}.justify-xl-start{justify-content:flex-start !important}.justify-xl-end{justify-content:flex-end !important}.justify-xl-center{justify-content:center !important}.justify-xl-space-between{justify-content:space-between !important}.justify-xl-space-around{justify-content:space-around !important}.justify-xl-space-evenly{justify-content:space-evenly !important}.order-xl-first{order:-9999 !important}.order-xl-last{order:9999 !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-6{order:6 !important}.order-xl-7{order:7 !important}.order-xl-8{order:8 !important}.order-xl-9{order:9 !important}.order-xl-10{order:10 !important}.order-xl-11{order:11 !important}.order-xl-12{order:12 !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-space-between{align-content:space-between !important}.align-content-xl-space-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-xl-start{align-items:flex-start !important}.align-xl-end{align-items:flex-end !important}.align-xl-center{align-items:center !important}.align-xl-baseline{align-items:baseline !important}.align-xl-stretch{align-items: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-stretch{align-self:stretch !important}.gap-xl-0{gap:0px}.gap-x-xl-0{column-gap:0px}.gap-y-xl-0{row-gap:0px}.gap-xl-1{gap:4px}.gap-x-xl-1{column-gap:4px}.gap-y-xl-1{row-gap:4px}.gap-xl-2{gap:8px}.gap-x-xl-2{column-gap:8px}.gap-y-xl-2{row-gap:8px}.gap-xl-3{gap:12px}.gap-x-xl-3{column-gap:12px}.gap-y-xl-3{row-gap:12px}.gap-xl-4{gap:16px}.gap-x-xl-4{column-gap:16px}.gap-y-xl-4{row-gap:16px}.gap-xl-5{gap:20px}.gap-x-xl-5{column-gap:20px}.gap-y-xl-5{row-gap:20px}.gap-xl-6{gap:24px}.gap-x-xl-6{column-gap:24px}.gap-y-xl-6{row-gap:24px}.gap-xl-7{gap:28px}.gap-x-xl-7{column-gap:28px}.gap-y-xl-7{row-gap:28px}.gap-xl-8{gap:32px}.gap-x-xl-8{column-gap:32px}.gap-y-xl-8{row-gap:32px}.gap-xl-9{gap:36px}.gap-x-xl-9{column-gap:36px}.gap-y-xl-9{row-gap:36px}.gap-xl-10{gap:40px}.gap-x-xl-10{column-gap:40px}.gap-y-xl-10{row-gap:40px}.gap-xl-11{gap:44px}.gap-x-xl-11{column-gap:44px}.gap-y-xl-11{row-gap:44px}.gap-xl-12{gap:48px}.gap-x-xl-12{column-gap:48px}.gap-y-xl-12{row-gap:48px}.gap-xl-13{gap:52px}.gap-x-xl-13{column-gap:52px}.gap-y-xl-13{row-gap:52px}.gap-xl-14{gap:56px}.gap-x-xl-14{column-gap:56px}.gap-y-xl-14{row-gap:56px}.gap-xl-15{gap:60px}.gap-x-xl-15{column-gap:60px}.gap-y-xl-15{row-gap:60px}.gap-xl-16{gap:64px}.gap-x-xl-16{column-gap:64px}.gap-y-xl-16{row-gap:64px}.gap-xl-17{gap:68px}.gap-x-xl-17{column-gap:68px}.gap-y-xl-17{row-gap:68px}.gap-xl-18{gap:72px}.gap-x-xl-18{column-gap:72px}.gap-y-xl-18{row-gap:72px}.gap-xl-19{gap:76px}.gap-x-xl-19{column-gap:76px}.gap-y-xl-19{row-gap:76px}.gap-xl-20{gap:80px}.gap-x-xl-20{column-gap:80px}.gap-y-xl-20{row-gap:80px}}@media(min-width: 2560px){.flex-xxl-1{flex:1 1 0% !important}.flex-xxl-auto{flex:1 1 auto !important}.flex-xxl-initial{flex:0 1 auto !important}.flex-xxl-none{flex:none !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column{flex-direction:column !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-grow-start>*:first-child{flex-grow:1 !important}.flex-xxl-grow-end>*:last-child{flex-grow:1 !important}.flex-xxl-grow-start-and-end>:first-child,.flex-xxl-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-xxl-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-xxl-grow-all>*{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}.justify-xxl-start{justify-content:flex-start !important}.justify-xxl-end{justify-content:flex-end !important}.justify-xxl-center{justify-content:center !important}.justify-xxl-space-between{justify-content:space-between !important}.justify-xxl-space-around{justify-content:space-around !important}.justify-xxl-space-evenly{justify-content:space-evenly !important}.order-xxl-first{order:-9999 !important}.order-xxl-last{order:9999 !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-6{order:6 !important}.order-xxl-7{order:7 !important}.order-xxl-8{order:8 !important}.order-xxl-9{order:9 !important}.order-xxl-10{order:10 !important}.order-xxl-11{order:11 !important}.order-xxl-12{order:12 !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-space-between{align-content:space-between !important}.align-content-xxl-space-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-xxl-start{align-items:flex-start !important}.align-xxl-end{align-items:flex-end !important}.align-xxl-center{align-items:center !important}.align-xxl-baseline{align-items:baseline !important}.align-xxl-stretch{align-items: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-stretch{align-self:stretch !important}.gap-xxl-0{gap:0px}.gap-x-xxl-0{column-gap:0px}.gap-y-xxl-0{row-gap:0px}.gap-xxl-1{gap:4px}.gap-x-xxl-1{column-gap:4px}.gap-y-xxl-1{row-gap:4px}.gap-xxl-2{gap:8px}.gap-x-xxl-2{column-gap:8px}.gap-y-xxl-2{row-gap:8px}.gap-xxl-3{gap:12px}.gap-x-xxl-3{column-gap:12px}.gap-y-xxl-3{row-gap:12px}.gap-xxl-4{gap:16px}.gap-x-xxl-4{column-gap:16px}.gap-y-xxl-4{row-gap:16px}.gap-xxl-5{gap:20px}.gap-x-xxl-5{column-gap:20px}.gap-y-xxl-5{row-gap:20px}.gap-xxl-6{gap:24px}.gap-x-xxl-6{column-gap:24px}.gap-y-xxl-6{row-gap:24px}.gap-xxl-7{gap:28px}.gap-x-xxl-7{column-gap:28px}.gap-y-xxl-7{row-gap:28px}.gap-xxl-8{gap:32px}.gap-x-xxl-8{column-gap:32px}.gap-y-xxl-8{row-gap:32px}.gap-xxl-9{gap:36px}.gap-x-xxl-9{column-gap:36px}.gap-y-xxl-9{row-gap:36px}.gap-xxl-10{gap:40px}.gap-x-xxl-10{column-gap:40px}.gap-y-xxl-10{row-gap:40px}.gap-xxl-11{gap:44px}.gap-x-xxl-11{column-gap:44px}.gap-y-xxl-11{row-gap:44px}.gap-xxl-12{gap:48px}.gap-x-xxl-12{column-gap:48px}.gap-y-xxl-12{row-gap:48px}.gap-xxl-13{gap:52px}.gap-x-xxl-13{column-gap:52px}.gap-y-xxl-13{row-gap:52px}.gap-xxl-14{gap:56px}.gap-x-xxl-14{column-gap:56px}.gap-y-xxl-14{row-gap:56px}.gap-xxl-15{gap:60px}.gap-x-xxl-15{column-gap:60px}.gap-y-xxl-15{row-gap:60px}.gap-xxl-16{gap:64px}.gap-x-xxl-16{column-gap:64px}.gap-y-xxl-16{row-gap:64px}.gap-xxl-17{gap:68px}.gap-x-xxl-17{column-gap:68px}.gap-y-xxl-17{row-gap:68px}.gap-xxl-18{gap:72px}.gap-x-xxl-18{column-gap:72px}.gap-y-xxl-18{row-gap:72px}.gap-xxl-19{gap:76px}.gap-x-xxl-19{column-gap:76px}.gap-y-xxl-19{row-gap:76px}.gap-xxl-20{gap:80px}.gap-x-xxl-20{column-gap:80px}.gap-y-xxl-20{row-gap:80px}}.cursor-auto{cursor:auto !important}.cursor-default{cursor:default !important}.cursor-pointer{cursor:pointer !important}.cursor-wait{cursor:wait !important}.cursor-text{cursor:text !important}.cursor-move{cursor:move !important}.cursor-help{cursor:help !important}.cursor-not-allowed{cursor:not-allowed !important}.cursor-none{cursor:none !important}.cursor-progress{cursor:progress !important}.cursor-cell{cursor:cell !important}.cursor-crosshair{cursor:crosshair !important}.cursor-vertical-text{cursor:vertical-text !important}.cursor-alias{cursor:alias !important}.cursor-copy{cursor:copy !important}.cursor-no-drop{cursor:no-drop !important}.cursor-grab{cursor:grab !important}.cursor-grabbing{cursor:grabbing !important}.cursor-all-scroll{cursor:all-scroll !important}.cursor-col-resize{cursor:col-resize !important}.cursor-row-resize{cursor:row-resize !important}.cursor-n-resize{cursor:n-resize !important}.cursor-w-resize{cursor:w-resize !important}.cursor-zoom-in{cursor:zoom-in !important}.cursor-zoom-out{cursor:zoom-out !important}.cursor-url{cursor:url !important}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-contents{display:contents !important}@media(min-width: 600px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-contents{display:contents !important}}@media(min-width: 960px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-contents{display:contents !important}}@media(min-width: 1280px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-contents{display:contents !important}}@media(min-width: 1920px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-contents{display:contents !important}}@media(min-width: 2560px){.d-xxl-none{display:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !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-contents{display:contents !important}}.object-none{object-fit:none !important}.object-cover{object-fit:cover !important}.object-contain{object-fit:contain !important}.object-fill{object-fit:fill !important}.object-scale-down{object-fit:scale-down !important}.object-center{object-position:center !important}.object-top{object-position:top !important}.object-bottom{object-position:bottom !important}.object-left{object-position:left !important}.object-left-top{object-position:left top !important}.object-left-bottom{object-position:left bottom !important}.object-right{object-position:right !important}.object-right-top{object-position:right top !important}.object-right-bottom{object-position:right bottom !important}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.absolute{position:absolute !important}.fixed{position:fixed !important}.relative{position:relative !important}.static{position:static !important}.sticky{position:sticky !important}.visible{visibility:visible}.invisible{visibility:hidden}[hidden]{display:none !important}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-60{z-index:60}.z-70{z-index:70}.z-80{z-index:80}.z-90{z-index:90}.z-100{z-index:100}.z-auto{z-index:auto}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.ml-0,.mx-0{margin-left:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ms-0{margin-inline-start:0 !important}.me-0{margin-inline-end:0 !important}.ma-0{margin:0 !important}.mt-1,.my-1{margin-top:4px !important}.mr-1,.mx-1{margin-right:4px !important}.ml-1,.mx-1{margin-left:4px !important}.mb-1,.my-1{margin-bottom:4px !important}.ms-1{margin-inline-start:4px !important}.me-1{margin-inline-end:4px !important}.ma-1{margin:4px !important}.mt-2,.my-2{margin-top:8px !important}.mr-2,.mx-2{margin-right:8px !important}.ml-2,.mx-2{margin-left:8px !important}.mb-2,.my-2{margin-bottom:8px !important}.ms-2{margin-inline-start:8px !important}.me-2{margin-inline-end:8px !important}.ma-2{margin:8px !important}.mt-3,.my-3{margin-top:12px !important}.mr-3,.mx-3{margin-right:12px !important}.ml-3,.mx-3{margin-left:12px !important}.mb-3,.my-3{margin-bottom:12px !important}.ms-3{margin-inline-start:12px !important}.me-3{margin-inline-end:12px !important}.ma-3{margin:12px !important}.mt-4,.my-4{margin-top:16px !important}.mr-4,.mx-4{margin-right:16px !important}.ml-4,.mx-4{margin-left:16px !important}.mb-4,.my-4{margin-bottom:16px !important}.ms-4{margin-inline-start:16px !important}.me-4{margin-inline-end:16px !important}.ma-4{margin:16px !important}.mt-5,.my-5{margin-top:20px !important}.mr-5,.mx-5{margin-right:20px !important}.ml-5,.mx-5{margin-left:20px !important}.mb-5,.my-5{margin-bottom:20px !important}.ms-5{margin-inline-start:20px !important}.me-5{margin-inline-end:20px !important}.ma-5{margin:20px !important}.mt-6,.my-6{margin-top:24px !important}.mr-6,.mx-6{margin-right:24px !important}.ml-6,.mx-6{margin-left:24px !important}.mb-6,.my-6{margin-bottom:24px !important}.ms-6{margin-inline-start:24px !important}.me-6{margin-inline-end:24px !important}.ma-6{margin:24px !important}.mt-7,.my-7{margin-top:28px !important}.mr-7,.mx-7{margin-right:28px !important}.ml-7,.mx-7{margin-left:28px !important}.mb-7,.my-7{margin-bottom:28px !important}.ms-7{margin-inline-start:28px !important}.me-7{margin-inline-end:28px !important}.ma-7{margin:28px !important}.mt-8,.my-8{margin-top:32px !important}.mr-8,.mx-8{margin-right:32px !important}.ml-8,.mx-8{margin-left:32px !important}.mb-8,.my-8{margin-bottom:32px !important}.ms-8{margin-inline-start:32px !important}.me-8{margin-inline-end:32px !important}.ma-8{margin:32px !important}.mt-9,.my-9{margin-top:36px !important}.mr-9,.mx-9{margin-right:36px !important}.ml-9,.mx-9{margin-left:36px !important}.mb-9,.my-9{margin-bottom:36px !important}.ms-9{margin-inline-start:36px !important}.me-9{margin-inline-end:36px !important}.ma-9{margin:36px !important}.mt-10,.my-10{margin-top:40px !important}.mr-10,.mx-10{margin-right:40px !important}.ml-10,.mx-10{margin-left:40px !important}.mb-10,.my-10{margin-bottom:40px !important}.ms-10{margin-inline-start:40px !important}.me-10{margin-inline-end:40px !important}.ma-10{margin:40px !important}.mt-11,.my-11{margin-top:44px !important}.mr-11,.mx-11{margin-right:44px !important}.ml-11,.mx-11{margin-left:44px !important}.mb-11,.my-11{margin-bottom:44px !important}.ms-11{margin-inline-start:44px !important}.me-11{margin-inline-end:44px !important}.ma-11{margin:44px !important}.mt-12,.my-12{margin-top:48px !important}.mr-12,.mx-12{margin-right:48px !important}.ml-12,.mx-12{margin-left:48px !important}.mb-12,.my-12{margin-bottom:48px !important}.ms-12{margin-inline-start:48px !important}.me-12{margin-inline-end:48px !important}.ma-12{margin:48px !important}.mt-13,.my-13{margin-top:52px !important}.mr-13,.mx-13{margin-right:52px !important}.ml-13,.mx-13{margin-left:52px !important}.mb-13,.my-13{margin-bottom:52px !important}.ms-13{margin-inline-start:52px !important}.me-13{margin-inline-end:52px !important}.ma-13{margin:52px !important}.mt-14,.my-14{margin-top:56px !important}.mr-14,.mx-14{margin-right:56px !important}.ml-14,.mx-14{margin-left:56px !important}.mb-14,.my-14{margin-bottom:56px !important}.ms-14{margin-inline-start:56px !important}.me-14{margin-inline-end:56px !important}.ma-14{margin:56px !important}.mt-15,.my-15{margin-top:60px !important}.mr-15,.mx-15{margin-right:60px !important}.ml-15,.mx-15{margin-left:60px !important}.mb-15,.my-15{margin-bottom:60px !important}.ms-15{margin-inline-start:60px !important}.me-15{margin-inline-end:60px !important}.ma-15{margin:60px !important}.mt-16,.my-16{margin-top:64px !important}.mr-16,.mx-16{margin-right:64px !important}.ml-16,.mx-16{margin-left:64px !important}.mb-16,.my-16{margin-bottom:64px !important}.ms-16{margin-inline-start:64px !important}.me-16{margin-inline-end:64px !important}.ma-16{margin:64px !important}.mt-17,.my-17{margin-top:68px !important}.mr-17,.mx-17{margin-right:68px !important}.ml-17,.mx-17{margin-left:68px !important}.mb-17,.my-17{margin-bottom:68px !important}.ms-17{margin-inline-start:68px !important}.me-17{margin-inline-end:68px !important}.ma-17{margin:68px !important}.mt-18,.my-18{margin-top:72px !important}.mr-18,.mx-18{margin-right:72px !important}.ml-18,.mx-18{margin-left:72px !important}.mb-18,.my-18{margin-bottom:72px !important}.ms-18{margin-inline-start:72px !important}.me-18{margin-inline-end:72px !important}.ma-18{margin:72px !important}.mt-19,.my-19{margin-top:76px !important}.mr-19,.mx-19{margin-right:76px !important}.ml-19,.mx-19{margin-left:76px !important}.mb-19,.my-19{margin-bottom:76px !important}.ms-19{margin-inline-start:76px !important}.me-19{margin-inline-end:76px !important}.ma-19{margin:76px !important}.mt-20,.my-20{margin-top:80px !important}.mr-20,.mx-20{margin-right:80px !important}.ml-20,.mx-20{margin-left:80px !important}.mb-20,.my-20{margin-bottom:80px !important}.ms-20{margin-inline-start:80px !important}.me-20{margin-inline-end:80px !important}.ma-20{margin:80px !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ms-auto{margin-inline-start:auto !important}.me-auto{margin-inline-end:auto !important}.ma-auto{margin:auto !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pl-0,.px-0{padding-left:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.ps-0{padding-inline-start:0 !important}.pe-0{padding-inline-end:0 !important}.pa-0{padding:0 !important}.pt-1,.py-1{padding-top:4px !important}.pr-1,.px-1{padding-right:4px !important}.pl-1,.px-1{padding-left:4px !important}.pb-1,.py-1{padding-bottom:4px !important}.ps-1{padding-inline-start:4px !important}.pe-1{padding-inline-end:4px !important}.pa-1{padding:4px !important}.pt-2,.py-2{padding-top:8px !important}.pr-2,.px-2{padding-right:8px !important}.pl-2,.px-2{padding-left:8px !important}.pb-2,.py-2{padding-bottom:8px !important}.ps-2{padding-inline-start:8px !important}.pe-2{padding-inline-end:8px !important}.pa-2{padding:8px !important}.pt-3,.py-3{padding-top:12px !important}.pr-3,.px-3{padding-right:12px !important}.pl-3,.px-3{padding-left:12px !important}.pb-3,.py-3{padding-bottom:12px !important}.ps-3{padding-inline-start:12px !important}.pe-3{padding-inline-end:12px !important}.pa-3{padding:12px !important}.pt-4,.py-4{padding-top:16px !important}.pr-4,.px-4{padding-right:16px !important}.pl-4,.px-4{padding-left:16px !important}.pb-4,.py-4{padding-bottom:16px !important}.ps-4{padding-inline-start:16px !important}.pe-4{padding-inline-end:16px !important}.pa-4{padding:16px !important}.pt-5,.py-5{padding-top:20px !important}.pr-5,.px-5{padding-right:20px !important}.pl-5,.px-5{padding-left:20px !important}.pb-5,.py-5{padding-bottom:20px !important}.ps-5{padding-inline-start:20px !important}.pe-5{padding-inline-end:20px !important}.pa-5{padding:20px !important}.pt-6,.py-6{padding-top:24px !important}.pr-6,.px-6{padding-right:24px !important}.pl-6,.px-6{padding-left:24px !important}.pb-6,.py-6{padding-bottom:24px !important}.ps-6{padding-inline-start:24px !important}.pe-6{padding-inline-end:24px !important}.pa-6{padding:24px !important}.pt-7,.py-7{padding-top:28px !important}.pr-7,.px-7{padding-right:28px !important}.pl-7,.px-7{padding-left:28px !important}.pb-7,.py-7{padding-bottom:28px !important}.ps-7{padding-inline-start:28px !important}.pe-7{padding-inline-end:28px !important}.pa-7{padding:28px !important}.pt-8,.py-8{padding-top:32px !important}.pr-8,.px-8{padding-right:32px !important}.pl-8,.px-8{padding-left:32px !important}.pb-8,.py-8{padding-bottom:32px !important}.ps-8{padding-inline-start:32px !important}.pe-8{padding-inline-end:32px !important}.pa-8{padding:32px !important}.pt-9,.py-9{padding-top:36px !important}.pr-9,.px-9{padding-right:36px !important}.pl-9,.px-9{padding-left:36px !important}.pb-9,.py-9{padding-bottom:36px !important}.ps-9{padding-inline-start:36px !important}.pe-9{padding-inline-end:36px !important}.pa-9{padding:36px !important}.pt-10,.py-10{padding-top:40px !important}.pr-10,.px-10{padding-right:40px !important}.pl-10,.px-10{padding-left:40px !important}.pb-10,.py-10{padding-bottom:40px !important}.ps-10{padding-inline-start:40px !important}.pe-10{padding-inline-end:40px !important}.pa-10{padding:40px !important}.pt-11,.py-11{padding-top:44px !important}.pr-11,.px-11{padding-right:44px !important}.pl-11,.px-11{padding-left:44px !important}.pb-11,.py-11{padding-bottom:44px !important}.ps-11{padding-inline-start:44px !important}.pe-11{padding-inline-end:44px !important}.pa-11{padding:44px !important}.pt-12,.py-12{padding-top:48px !important}.pr-12,.px-12{padding-right:48px !important}.pl-12,.px-12{padding-left:48px !important}.pb-12,.py-12{padding-bottom:48px !important}.ps-12{padding-inline-start:48px !important}.pe-12{padding-inline-end:48px !important}.pa-12{padding:48px !important}.pt-13,.py-13{padding-top:52px !important}.pr-13,.px-13{padding-right:52px !important}.pl-13,.px-13{padding-left:52px !important}.pb-13,.py-13{padding-bottom:52px !important}.ps-13{padding-inline-start:52px !important}.pe-13{padding-inline-end:52px !important}.pa-13{padding:52px !important}.pt-14,.py-14{padding-top:56px !important}.pr-14,.px-14{padding-right:56px !important}.pl-14,.px-14{padding-left:56px !important}.pb-14,.py-14{padding-bottom:56px !important}.ps-14{padding-inline-start:56px !important}.pe-14{padding-inline-end:56px !important}.pa-14{padding:56px !important}.pt-15,.py-15{padding-top:60px !important}.pr-15,.px-15{padding-right:60px !important}.pl-15,.px-15{padding-left:60px !important}.pb-15,.py-15{padding-bottom:60px !important}.ps-15{padding-inline-start:60px !important}.pe-15{padding-inline-end:60px !important}.pa-15{padding:60px !important}.pt-16,.py-16{padding-top:64px !important}.pr-16,.px-16{padding-right:64px !important}.pl-16,.px-16{padding-left:64px !important}.pb-16,.py-16{padding-bottom:64px !important}.ps-16{padding-inline-start:64px !important}.pe-16{padding-inline-end:64px !important}.pa-16{padding:64px !important}.pt-17,.py-17{padding-top:68px !important}.pr-17,.px-17{padding-right:68px !important}.pl-17,.px-17{padding-left:68px !important}.pb-17,.py-17{padding-bottom:68px !important}.ps-17{padding-inline-start:68px !important}.pe-17{padding-inline-end:68px !important}.pa-17{padding:68px !important}.pt-18,.py-18{padding-top:72px !important}.pr-18,.px-18{padding-right:72px !important}.pl-18,.px-18{padding-left:72px !important}.pb-18,.py-18{padding-bottom:72px !important}.ps-18{padding-inline-start:72px !important}.pe-18{padding-inline-end:72px !important}.pa-18{padding:72px !important}.pt-19,.py-19{padding-top:76px !important}.pr-19,.px-19{padding-right:76px !important}.pl-19,.px-19{padding-left:76px !important}.pb-19,.py-19{padding-bottom:76px !important}.ps-19{padding-inline-start:76px !important}.pe-19{padding-inline-end:76px !important}.pa-19{padding:76px !important}.pt-20,.py-20{padding-top:80px !important}.pr-20,.px-20{padding-right:80px !important}.pl-20,.px-20{padding-left:80px !important}.pb-20,.py-20{padding-bottom:80px !important}.ps-20{padding-inline-start:80px !important}.pe-20{padding-inline-end:80px !important}.pa-20{padding:80px !important}.pt-auto,.py-auto{padding-top:auto !important}.pr-auto,.px-auto{padding-right:auto !important}.pl-auto,.px-auto{padding-left:auto !important}.pb-auto,.py-auto{padding-bottom:auto !important}.ps-auto{padding-inline-start:auto !important}.pe-auto{padding-inline-end:auto !important}.pa-auto{padding:auto !important}.mt-n1,.my-n1{margin-top:-4px !important}.mr-n1,.mx-n1{margin-right:-4px !important}.ml-n1,.mx-n1{margin-left:-4px !important}.mb-n1,.my-n1{margin-bottom:-4px !important}.ms-n1{margin-inline-start:-4px !important}.me-n1{margin-inline-end:-4px !important}.ma-n1{margin:-4px !important}.mt-n2,.my-n2{margin-top:-8px !important}.mr-n2,.mx-n2{margin-right:-8px !important}.ml-n2,.mx-n2{margin-left:-8px !important}.mb-n2,.my-n2{margin-bottom:-8px !important}.ms-n2{margin-inline-start:-8px !important}.me-n2{margin-inline-end:-8px !important}.ma-n2{margin:-8px !important}.mt-n3,.my-n3{margin-top:-12px !important}.mr-n3,.mx-n3{margin-right:-12px !important}.ml-n3,.mx-n3{margin-left:-12px !important}.mb-n3,.my-n3{margin-bottom:-12px !important}.ms-n3{margin-inline-start:-12px !important}.me-n3{margin-inline-end:-12px !important}.ma-n3{margin:-12px !important}.mt-n4,.my-n4{margin-top:-16px !important}.mr-n4,.mx-n4{margin-right:-16px !important}.ml-n4,.mx-n4{margin-left:-16px !important}.mb-n4,.my-n4{margin-bottom:-16px !important}.ms-n4{margin-inline-start:-16px !important}.me-n4{margin-inline-end:-16px !important}.ma-n4{margin:-16px !important}.mt-n5,.my-n5{margin-top:-20px !important}.mr-n5,.mx-n5{margin-right:-20px !important}.ml-n5,.mx-n5{margin-left:-20px !important}.mb-n5,.my-n5{margin-bottom:-20px !important}.ms-n5{margin-inline-start:-20px !important}.me-n5{margin-inline-end:-20px !important}.ma-n5{margin:-20px !important}.mt-n6,.my-n6{margin-top:-24px !important}.mr-n6,.mx-n6{margin-right:-24px !important}.ml-n6,.mx-n6{margin-left:-24px !important}.mb-n6,.my-n6{margin-bottom:-24px !important}.ms-n6{margin-inline-start:-24px !important}.me-n6{margin-inline-end:-24px !important}.ma-n6{margin:-24px !important}.mt-n7,.my-n7{margin-top:-28px !important}.mr-n7,.mx-n7{margin-right:-28px !important}.ml-n7,.mx-n7{margin-left:-28px !important}.mb-n7,.my-n7{margin-bottom:-28px !important}.ms-n7{margin-inline-start:-28px !important}.me-n7{margin-inline-end:-28px !important}.ma-n7{margin:-28px !important}.mt-n8,.my-n8{margin-top:-32px !important}.mr-n8,.mx-n8{margin-right:-32px !important}.ml-n8,.mx-n8{margin-left:-32px !important}.mb-n8,.my-n8{margin-bottom:-32px !important}.ms-n8{margin-inline-start:-32px !important}.me-n8{margin-inline-end:-32px !important}.ma-n8{margin:-32px !important}.mt-n9,.my-n9{margin-top:-36px !important}.mr-n9,.mx-n9{margin-right:-36px !important}.ml-n9,.mx-n9{margin-left:-36px !important}.mb-n9,.my-n9{margin-bottom:-36px !important}.ms-n9{margin-inline-start:-36px !important}.me-n9{margin-inline-end:-36px !important}.ma-n9{margin:-36px !important}.mt-n10,.my-n10{margin-top:-40px !important}.mr-n10,.mx-n10{margin-right:-40px !important}.ml-n10,.mx-n10{margin-left:-40px !important}.mb-n10,.my-n10{margin-bottom:-40px !important}.ms-n10{margin-inline-start:-40px !important}.me-n10{margin-inline-end:-40px !important}.ma-n10{margin:-40px !important}.mt-n11,.my-n11{margin-top:-44px !important}.mr-n11,.mx-n11{margin-right:-44px !important}.ml-n11,.mx-n11{margin-left:-44px !important}.mb-n11,.my-n11{margin-bottom:-44px !important}.ms-n11{margin-inline-start:-44px !important}.me-n11{margin-inline-end:-44px !important}.ma-n11{margin:-44px !important}.mt-n12,.my-n12{margin-top:-48px !important}.mr-n12,.mx-n12{margin-right:-48px !important}.ml-n12,.mx-n12{margin-left:-48px !important}.mb-n12,.my-n12{margin-bottom:-48px !important}.ms-n12{margin-inline-start:-48px !important}.me-n12{margin-inline-end:-48px !important}.ma-n12{margin:-48px !important}.mt-n13,.my-n13{margin-top:-52px !important}.mr-n13,.mx-n13{margin-right:-52px !important}.ml-n13,.mx-n13{margin-left:-52px !important}.mb-n13,.my-n13{margin-bottom:-52px !important}.ms-n13{margin-inline-start:-52px !important}.me-n13{margin-inline-end:-52px !important}.ma-n13{margin:-52px !important}.mt-n14,.my-n14{margin-top:-56px !important}.mr-n14,.mx-n14{margin-right:-56px !important}.ml-n14,.mx-n14{margin-left:-56px !important}.mb-n14,.my-n14{margin-bottom:-56px !important}.ms-n14{margin-inline-start:-56px !important}.me-n14{margin-inline-end:-56px !important}.ma-n14{margin:-56px !important}.mt-n15,.my-n15{margin-top:-60px !important}.mr-n15,.mx-n15{margin-right:-60px !important}.ml-n15,.mx-n15{margin-left:-60px !important}.mb-n15,.my-n15{margin-bottom:-60px !important}.ms-n15{margin-inline-start:-60px !important}.me-n15{margin-inline-end:-60px !important}.ma-n15{margin:-60px !important}.mt-n16,.my-n16{margin-top:-64px !important}.mr-n16,.mx-n16{margin-right:-64px !important}.ml-n16,.mx-n16{margin-left:-64px !important}.mb-n16,.my-n16{margin-bottom:-64px !important}.ms-n16{margin-inline-start:-64px !important}.me-n16{margin-inline-end:-64px !important}.ma-n16{margin:-64px !important}.mt-n17,.my-n17{margin-top:-68px !important}.mr-n17,.mx-n17{margin-right:-68px !important}.ml-n17,.mx-n17{margin-left:-68px !important}.mb-n17,.my-n17{margin-bottom:-68px !important}.ms-n17{margin-inline-start:-68px !important}.me-n17{margin-inline-end:-68px !important}.ma-n17{margin:-68px !important}.mt-n18,.my-n18{margin-top:-72px !important}.mr-n18,.mx-n18{margin-right:-72px !important}.ml-n18,.mx-n18{margin-left:-72px !important}.mb-n18,.my-n18{margin-bottom:-72px !important}.ms-n18{margin-inline-start:-72px !important}.me-n18{margin-inline-end:-72px !important}.ma-n18{margin:-72px !important}.mt-n19,.my-n19{margin-top:-76px !important}.mr-n19,.mx-n19{margin-right:-76px !important}.ml-n19,.mx-n19{margin-left:-76px !important}.mb-n19,.my-n19{margin-bottom:-76px !important}.ms-n19{margin-inline-start:-76px !important}.me-n19{margin-inline-end:-76px !important}.ma-n19{margin:-76px !important}.mt-n20,.my-n20{margin-top:-80px !important}.mr-n20,.mx-n20{margin-right:-80px !important}.ml-n20,.mx-n20{margin-left:-80px !important}.mb-n20,.my-n20{margin-bottom:-80px !important}.ms-n20{margin-inline-start:-80px !important}.me-n20{margin-inline-end:-80px !important}.ma-n20{margin:-80px !important}@media screen and (min-width: 600px){.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ms-sm-0{margin-inline-start:0 !important}.me-sm-0{margin-inline-end:0 !important}.ma-sm-0{margin:0 !important}.mt-sm-1,.my-sm-1{margin-top:4px !important}.mr-sm-1,.mx-sm-1{margin-right:4px !important}.ml-sm-1,.mx-sm-1{margin-left:4px !important}.mb-sm-1,.my-sm-1{margin-bottom:4px !important}.ms-sm-1{margin-inline-start:4px !important}.me-sm-1{margin-inline-end:4px !important}.ma-sm-1{margin:4px !important}.mt-sm-2,.my-sm-2{margin-top:8px !important}.mr-sm-2,.mx-sm-2{margin-right:8px !important}.ml-sm-2,.mx-sm-2{margin-left:8px !important}.mb-sm-2,.my-sm-2{margin-bottom:8px !important}.ms-sm-2{margin-inline-start:8px !important}.me-sm-2{margin-inline-end:8px !important}.ma-sm-2{margin:8px !important}.mt-sm-3,.my-sm-3{margin-top:12px !important}.mr-sm-3,.mx-sm-3{margin-right:12px !important}.ml-sm-3,.mx-sm-3{margin-left:12px !important}.mb-sm-3,.my-sm-3{margin-bottom:12px !important}.ms-sm-3{margin-inline-start:12px !important}.me-sm-3{margin-inline-end:12px !important}.ma-sm-3{margin:12px !important}.mt-sm-4,.my-sm-4{margin-top:16px !important}.mr-sm-4,.mx-sm-4{margin-right:16px !important}.ml-sm-4,.mx-sm-4{margin-left:16px !important}.mb-sm-4,.my-sm-4{margin-bottom:16px !important}.ms-sm-4{margin-inline-start:16px !important}.me-sm-4{margin-inline-end:16px !important}.ma-sm-4{margin:16px !important}.mt-sm-5,.my-sm-5{margin-top:20px !important}.mr-sm-5,.mx-sm-5{margin-right:20px !important}.ml-sm-5,.mx-sm-5{margin-left:20px !important}.mb-sm-5,.my-sm-5{margin-bottom:20px !important}.ms-sm-5{margin-inline-start:20px !important}.me-sm-5{margin-inline-end:20px !important}.ma-sm-5{margin:20px !important}.mt-sm-6,.my-sm-6{margin-top:24px !important}.mr-sm-6,.mx-sm-6{margin-right:24px !important}.ml-sm-6,.mx-sm-6{margin-left:24px !important}.mb-sm-6,.my-sm-6{margin-bottom:24px !important}.ms-sm-6{margin-inline-start:24px !important}.me-sm-6{margin-inline-end:24px !important}.ma-sm-6{margin:24px !important}.mt-sm-7,.my-sm-7{margin-top:28px !important}.mr-sm-7,.mx-sm-7{margin-right:28px !important}.ml-sm-7,.mx-sm-7{margin-left:28px !important}.mb-sm-7,.my-sm-7{margin-bottom:28px !important}.ms-sm-7{margin-inline-start:28px !important}.me-sm-7{margin-inline-end:28px !important}.ma-sm-7{margin:28px !important}.mt-sm-8,.my-sm-8{margin-top:32px !important}.mr-sm-8,.mx-sm-8{margin-right:32px !important}.ml-sm-8,.mx-sm-8{margin-left:32px !important}.mb-sm-8,.my-sm-8{margin-bottom:32px !important}.ms-sm-8{margin-inline-start:32px !important}.me-sm-8{margin-inline-end:32px !important}.ma-sm-8{margin:32px !important}.mt-sm-9,.my-sm-9{margin-top:36px !important}.mr-sm-9,.mx-sm-9{margin-right:36px !important}.ml-sm-9,.mx-sm-9{margin-left:36px !important}.mb-sm-9,.my-sm-9{margin-bottom:36px !important}.ms-sm-9{margin-inline-start:36px !important}.me-sm-9{margin-inline-end:36px !important}.ma-sm-9{margin:36px !important}.mt-sm-10,.my-sm-10{margin-top:40px !important}.mr-sm-10,.mx-sm-10{margin-right:40px !important}.ml-sm-10,.mx-sm-10{margin-left:40px !important}.mb-sm-10,.my-sm-10{margin-bottom:40px !important}.ms-sm-10{margin-inline-start:40px !important}.me-sm-10{margin-inline-end:40px !important}.ma-sm-10{margin:40px !important}.mt-sm-11,.my-sm-11{margin-top:44px !important}.mr-sm-11,.mx-sm-11{margin-right:44px !important}.ml-sm-11,.mx-sm-11{margin-left:44px !important}.mb-sm-11,.my-sm-11{margin-bottom:44px !important}.ms-sm-11{margin-inline-start:44px !important}.me-sm-11{margin-inline-end:44px !important}.ma-sm-11{margin:44px !important}.mt-sm-12,.my-sm-12{margin-top:48px !important}.mr-sm-12,.mx-sm-12{margin-right:48px !important}.ml-sm-12,.mx-sm-12{margin-left:48px !important}.mb-sm-12,.my-sm-12{margin-bottom:48px !important}.ms-sm-12{margin-inline-start:48px !important}.me-sm-12{margin-inline-end:48px !important}.ma-sm-12{margin:48px !important}.mt-sm-13,.my-sm-13{margin-top:52px !important}.mr-sm-13,.mx-sm-13{margin-right:52px !important}.ml-sm-13,.mx-sm-13{margin-left:52px !important}.mb-sm-13,.my-sm-13{margin-bottom:52px !important}.ms-sm-13{margin-inline-start:52px !important}.me-sm-13{margin-inline-end:52px !important}.ma-sm-13{margin:52px !important}.mt-sm-14,.my-sm-14{margin-top:56px !important}.mr-sm-14,.mx-sm-14{margin-right:56px !important}.ml-sm-14,.mx-sm-14{margin-left:56px !important}.mb-sm-14,.my-sm-14{margin-bottom:56px !important}.ms-sm-14{margin-inline-start:56px !important}.me-sm-14{margin-inline-end:56px !important}.ma-sm-14{margin:56px !important}.mt-sm-15,.my-sm-15{margin-top:60px !important}.mr-sm-15,.mx-sm-15{margin-right:60px !important}.ml-sm-15,.mx-sm-15{margin-left:60px !important}.mb-sm-15,.my-sm-15{margin-bottom:60px !important}.ms-sm-15{margin-inline-start:60px !important}.me-sm-15{margin-inline-end:60px !important}.ma-sm-15{margin:60px !important}.mt-sm-16,.my-sm-16{margin-top:64px !important}.mr-sm-16,.mx-sm-16{margin-right:64px !important}.ml-sm-16,.mx-sm-16{margin-left:64px !important}.mb-sm-16,.my-sm-16{margin-bottom:64px !important}.ms-sm-16{margin-inline-start:64px !important}.me-sm-16{margin-inline-end:64px !important}.ma-sm-16{margin:64px !important}.mt-sm-17,.my-sm-17{margin-top:68px !important}.mr-sm-17,.mx-sm-17{margin-right:68px !important}.ml-sm-17,.mx-sm-17{margin-left:68px !important}.mb-sm-17,.my-sm-17{margin-bottom:68px !important}.ms-sm-17{margin-inline-start:68px !important}.me-sm-17{margin-inline-end:68px !important}.ma-sm-17{margin:68px !important}.mt-sm-18,.my-sm-18{margin-top:72px !important}.mr-sm-18,.mx-sm-18{margin-right:72px !important}.ml-sm-18,.mx-sm-18{margin-left:72px !important}.mb-sm-18,.my-sm-18{margin-bottom:72px !important}.ms-sm-18{margin-inline-start:72px !important}.me-sm-18{margin-inline-end:72px !important}.ma-sm-18{margin:72px !important}.mt-sm-19,.my-sm-19{margin-top:76px !important}.mr-sm-19,.mx-sm-19{margin-right:76px !important}.ml-sm-19,.mx-sm-19{margin-left:76px !important}.mb-sm-19,.my-sm-19{margin-bottom:76px !important}.ms-sm-19{margin-inline-start:76px !important}.me-sm-19{margin-inline-end:76px !important}.ma-sm-19{margin:76px !important}.mt-sm-20,.my-sm-20{margin-top:80px !important}.mr-sm-20,.mx-sm-20{margin-right:80px !important}.ml-sm-20,.mx-sm-20{margin-left:80px !important}.mb-sm-20,.my-sm-20{margin-bottom:80px !important}.ms-sm-20{margin-inline-start:80px !important}.me-sm-20{margin-inline-end:80px !important}.ma-sm-20{margin:80px !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ms-sm-auto{margin-inline-start:auto !important}.me-sm-auto{margin-inline-end:auto !important}.ma-sm-auto{margin:auto !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.ps-sm-0{padding-inline-start:0 !important}.pe-sm-0{padding-inline-end:0 !important}.pa-sm-0{padding:0 !important}.pt-sm-1,.py-sm-1{padding-top:4px !important}.pr-sm-1,.px-sm-1{padding-right:4px !important}.pl-sm-1,.px-sm-1{padding-left:4px !important}.pb-sm-1,.py-sm-1{padding-bottom:4px !important}.ps-sm-1{padding-inline-start:4px !important}.pe-sm-1{padding-inline-end:4px !important}.pa-sm-1{padding:4px !important}.pt-sm-2,.py-sm-2{padding-top:8px !important}.pr-sm-2,.px-sm-2{padding-right:8px !important}.pl-sm-2,.px-sm-2{padding-left:8px !important}.pb-sm-2,.py-sm-2{padding-bottom:8px !important}.ps-sm-2{padding-inline-start:8px !important}.pe-sm-2{padding-inline-end:8px !important}.pa-sm-2{padding:8px !important}.pt-sm-3,.py-sm-3{padding-top:12px !important}.pr-sm-3,.px-sm-3{padding-right:12px !important}.pl-sm-3,.px-sm-3{padding-left:12px !important}.pb-sm-3,.py-sm-3{padding-bottom:12px !important}.ps-sm-3{padding-inline-start:12px !important}.pe-sm-3{padding-inline-end:12px !important}.pa-sm-3{padding:12px !important}.pt-sm-4,.py-sm-4{padding-top:16px !important}.pr-sm-4,.px-sm-4{padding-right:16px !important}.pl-sm-4,.px-sm-4{padding-left:16px !important}.pb-sm-4,.py-sm-4{padding-bottom:16px !important}.ps-sm-4{padding-inline-start:16px !important}.pe-sm-4{padding-inline-end:16px !important}.pa-sm-4{padding:16px !important}.pt-sm-5,.py-sm-5{padding-top:20px !important}.pr-sm-5,.px-sm-5{padding-right:20px !important}.pl-sm-5,.px-sm-5{padding-left:20px !important}.pb-sm-5,.py-sm-5{padding-bottom:20px !important}.ps-sm-5{padding-inline-start:20px !important}.pe-sm-5{padding-inline-end:20px !important}.pa-sm-5{padding:20px !important}.pt-sm-6,.py-sm-6{padding-top:24px !important}.pr-sm-6,.px-sm-6{padding-right:24px !important}.pl-sm-6,.px-sm-6{padding-left:24px !important}.pb-sm-6,.py-sm-6{padding-bottom:24px !important}.ps-sm-6{padding-inline-start:24px !important}.pe-sm-6{padding-inline-end:24px !important}.pa-sm-6{padding:24px !important}.pt-sm-7,.py-sm-7{padding-top:28px !important}.pr-sm-7,.px-sm-7{padding-right:28px !important}.pl-sm-7,.px-sm-7{padding-left:28px !important}.pb-sm-7,.py-sm-7{padding-bottom:28px !important}.ps-sm-7{padding-inline-start:28px !important}.pe-sm-7{padding-inline-end:28px !important}.pa-sm-7{padding:28px !important}.pt-sm-8,.py-sm-8{padding-top:32px !important}.pr-sm-8,.px-sm-8{padding-right:32px !important}.pl-sm-8,.px-sm-8{padding-left:32px !important}.pb-sm-8,.py-sm-8{padding-bottom:32px !important}.ps-sm-8{padding-inline-start:32px !important}.pe-sm-8{padding-inline-end:32px !important}.pa-sm-8{padding:32px !important}.pt-sm-9,.py-sm-9{padding-top:36px !important}.pr-sm-9,.px-sm-9{padding-right:36px !important}.pl-sm-9,.px-sm-9{padding-left:36px !important}.pb-sm-9,.py-sm-9{padding-bottom:36px !important}.ps-sm-9{padding-inline-start:36px !important}.pe-sm-9{padding-inline-end:36px !important}.pa-sm-9{padding:36px !important}.pt-sm-10,.py-sm-10{padding-top:40px !important}.pr-sm-10,.px-sm-10{padding-right:40px !important}.pl-sm-10,.px-sm-10{padding-left:40px !important}.pb-sm-10,.py-sm-10{padding-bottom:40px !important}.ps-sm-10{padding-inline-start:40px !important}.pe-sm-10{padding-inline-end:40px !important}.pa-sm-10{padding:40px !important}.pt-sm-11,.py-sm-11{padding-top:44px !important}.pr-sm-11,.px-sm-11{padding-right:44px !important}.pl-sm-11,.px-sm-11{padding-left:44px !important}.pb-sm-11,.py-sm-11{padding-bottom:44px !important}.ps-sm-11{padding-inline-start:44px !important}.pe-sm-11{padding-inline-end:44px !important}.pa-sm-11{padding:44px !important}.pt-sm-12,.py-sm-12{padding-top:48px !important}.pr-sm-12,.px-sm-12{padding-right:48px !important}.pl-sm-12,.px-sm-12{padding-left:48px !important}.pb-sm-12,.py-sm-12{padding-bottom:48px !important}.ps-sm-12{padding-inline-start:48px !important}.pe-sm-12{padding-inline-end:48px !important}.pa-sm-12{padding:48px !important}.pt-sm-13,.py-sm-13{padding-top:52px !important}.pr-sm-13,.px-sm-13{padding-right:52px !important}.pl-sm-13,.px-sm-13{padding-left:52px !important}.pb-sm-13,.py-sm-13{padding-bottom:52px !important}.ps-sm-13{padding-inline-start:52px !important}.pe-sm-13{padding-inline-end:52px !important}.pa-sm-13{padding:52px !important}.pt-sm-14,.py-sm-14{padding-top:56px !important}.pr-sm-14,.px-sm-14{padding-right:56px !important}.pl-sm-14,.px-sm-14{padding-left:56px !important}.pb-sm-14,.py-sm-14{padding-bottom:56px !important}.ps-sm-14{padding-inline-start:56px !important}.pe-sm-14{padding-inline-end:56px !important}.pa-sm-14{padding:56px !important}.pt-sm-15,.py-sm-15{padding-top:60px !important}.pr-sm-15,.px-sm-15{padding-right:60px !important}.pl-sm-15,.px-sm-15{padding-left:60px !important}.pb-sm-15,.py-sm-15{padding-bottom:60px !important}.ps-sm-15{padding-inline-start:60px !important}.pe-sm-15{padding-inline-end:60px !important}.pa-sm-15{padding:60px !important}.pt-sm-16,.py-sm-16{padding-top:64px !important}.pr-sm-16,.px-sm-16{padding-right:64px !important}.pl-sm-16,.px-sm-16{padding-left:64px !important}.pb-sm-16,.py-sm-16{padding-bottom:64px !important}.ps-sm-16{padding-inline-start:64px !important}.pe-sm-16{padding-inline-end:64px !important}.pa-sm-16{padding:64px !important}.pt-sm-17,.py-sm-17{padding-top:68px !important}.pr-sm-17,.px-sm-17{padding-right:68px !important}.pl-sm-17,.px-sm-17{padding-left:68px !important}.pb-sm-17,.py-sm-17{padding-bottom:68px !important}.ps-sm-17{padding-inline-start:68px !important}.pe-sm-17{padding-inline-end:68px !important}.pa-sm-17{padding:68px !important}.pt-sm-18,.py-sm-18{padding-top:72px !important}.pr-sm-18,.px-sm-18{padding-right:72px !important}.pl-sm-18,.px-sm-18{padding-left:72px !important}.pb-sm-18,.py-sm-18{padding-bottom:72px !important}.ps-sm-18{padding-inline-start:72px !important}.pe-sm-18{padding-inline-end:72px !important}.pa-sm-18{padding:72px !important}.pt-sm-19,.py-sm-19{padding-top:76px !important}.pr-sm-19,.px-sm-19{padding-right:76px !important}.pl-sm-19,.px-sm-19{padding-left:76px !important}.pb-sm-19,.py-sm-19{padding-bottom:76px !important}.ps-sm-19{padding-inline-start:76px !important}.pe-sm-19{padding-inline-end:76px !important}.pa-sm-19{padding:76px !important}.pt-sm-20,.py-sm-20{padding-top:80px !important}.pr-sm-20,.px-sm-20{padding-right:80px !important}.pl-sm-20,.px-sm-20{padding-left:80px !important}.pb-sm-20,.py-sm-20{padding-bottom:80px !important}.ps-sm-20{padding-inline-start:80px !important}.pe-sm-20{padding-inline-end:80px !important}.pa-sm-20{padding:80px !important}.pt-sm-auto,.py-sm-auto{padding-top:auto !important}.pr-sm-auto,.px-sm-auto{padding-right:auto !important}.pl-sm-auto,.px-sm-auto{padding-left:auto !important}.pb-sm-auto,.py-sm-auto{padding-bottom:auto !important}.ps-sm-auto{padding-inline-start:auto !important}.pe-sm-auto{padding-inline-end:auto !important}.pa-sm-auto{padding:auto !important}.mt-sm-n1,.my-sm-n1{margin-top:-4px !important}.mr-sm-n1,.mx-sm-n1{margin-right:-4px !important}.ml-sm-n1,.mx-sm-n1{margin-left:-4px !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-4px !important}.ms-sm-n1{margin-inline-start:-4px !important}.me-sm-n1{margin-inline-end:-4px !important}.ma-sm-n1{margin:-4px !important}.mt-sm-n2,.my-sm-n2{margin-top:-8px !important}.mr-sm-n2,.mx-sm-n2{margin-right:-8px !important}.ml-sm-n2,.mx-sm-n2{margin-left:-8px !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-8px !important}.ms-sm-n2{margin-inline-start:-8px !important}.me-sm-n2{margin-inline-end:-8px !important}.ma-sm-n2{margin:-8px !important}.mt-sm-n3,.my-sm-n3{margin-top:-12px !important}.mr-sm-n3,.mx-sm-n3{margin-right:-12px !important}.ml-sm-n3,.mx-sm-n3{margin-left:-12px !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-12px !important}.ms-sm-n3{margin-inline-start:-12px !important}.me-sm-n3{margin-inline-end:-12px !important}.ma-sm-n3{margin:-12px !important}.mt-sm-n4,.my-sm-n4{margin-top:-16px !important}.mr-sm-n4,.mx-sm-n4{margin-right:-16px !important}.ml-sm-n4,.mx-sm-n4{margin-left:-16px !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-16px !important}.ms-sm-n4{margin-inline-start:-16px !important}.me-sm-n4{margin-inline-end:-16px !important}.ma-sm-n4{margin:-16px !important}.mt-sm-n5,.my-sm-n5{margin-top:-20px !important}.mr-sm-n5,.mx-sm-n5{margin-right:-20px !important}.ml-sm-n5,.mx-sm-n5{margin-left:-20px !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-20px !important}.ms-sm-n5{margin-inline-start:-20px !important}.me-sm-n5{margin-inline-end:-20px !important}.ma-sm-n5{margin:-20px !important}.mt-sm-n6,.my-sm-n6{margin-top:-24px !important}.mr-sm-n6,.mx-sm-n6{margin-right:-24px !important}.ml-sm-n6,.mx-sm-n6{margin-left:-24px !important}.mb-sm-n6,.my-sm-n6{margin-bottom:-24px !important}.ms-sm-n6{margin-inline-start:-24px !important}.me-sm-n6{margin-inline-end:-24px !important}.ma-sm-n6{margin:-24px !important}.mt-sm-n7,.my-sm-n7{margin-top:-28px !important}.mr-sm-n7,.mx-sm-n7{margin-right:-28px !important}.ml-sm-n7,.mx-sm-n7{margin-left:-28px !important}.mb-sm-n7,.my-sm-n7{margin-bottom:-28px !important}.ms-sm-n7{margin-inline-start:-28px !important}.me-sm-n7{margin-inline-end:-28px !important}.ma-sm-n7{margin:-28px !important}.mt-sm-n8,.my-sm-n8{margin-top:-32px !important}.mr-sm-n8,.mx-sm-n8{margin-right:-32px !important}.ml-sm-n8,.mx-sm-n8{margin-left:-32px !important}.mb-sm-n8,.my-sm-n8{margin-bottom:-32px !important}.ms-sm-n8{margin-inline-start:-32px !important}.me-sm-n8{margin-inline-end:-32px !important}.ma-sm-n8{margin:-32px !important}.mt-sm-n9,.my-sm-n9{margin-top:-36px !important}.mr-sm-n9,.mx-sm-n9{margin-right:-36px !important}.ml-sm-n9,.mx-sm-n9{margin-left:-36px !important}.mb-sm-n9,.my-sm-n9{margin-bottom:-36px !important}.ms-sm-n9{margin-inline-start:-36px !important}.me-sm-n9{margin-inline-end:-36px !important}.ma-sm-n9{margin:-36px !important}.mt-sm-n10,.my-sm-n10{margin-top:-40px !important}.mr-sm-n10,.mx-sm-n10{margin-right:-40px !important}.ml-sm-n10,.mx-sm-n10{margin-left:-40px !important}.mb-sm-n10,.my-sm-n10{margin-bottom:-40px !important}.ms-sm-n10{margin-inline-start:-40px !important}.me-sm-n10{margin-inline-end:-40px !important}.ma-sm-n10{margin:-40px !important}.mt-sm-n11,.my-sm-n11{margin-top:-44px !important}.mr-sm-n11,.mx-sm-n11{margin-right:-44px !important}.ml-sm-n11,.mx-sm-n11{margin-left:-44px !important}.mb-sm-n11,.my-sm-n11{margin-bottom:-44px !important}.ms-sm-n11{margin-inline-start:-44px !important}.me-sm-n11{margin-inline-end:-44px !important}.ma-sm-n11{margin:-44px !important}.mt-sm-n12,.my-sm-n12{margin-top:-48px !important}.mr-sm-n12,.mx-sm-n12{margin-right:-48px !important}.ml-sm-n12,.mx-sm-n12{margin-left:-48px !important}.mb-sm-n12,.my-sm-n12{margin-bottom:-48px !important}.ms-sm-n12{margin-inline-start:-48px !important}.me-sm-n12{margin-inline-end:-48px !important}.ma-sm-n12{margin:-48px !important}.mt-sm-n13,.my-sm-n13{margin-top:-52px !important}.mr-sm-n13,.mx-sm-n13{margin-right:-52px !important}.ml-sm-n13,.mx-sm-n13{margin-left:-52px !important}.mb-sm-n13,.my-sm-n13{margin-bottom:-52px !important}.ms-sm-n13{margin-inline-start:-52px !important}.me-sm-n13{margin-inline-end:-52px !important}.ma-sm-n13{margin:-52px !important}.mt-sm-n14,.my-sm-n14{margin-top:-56px !important}.mr-sm-n14,.mx-sm-n14{margin-right:-56px !important}.ml-sm-n14,.mx-sm-n14{margin-left:-56px !important}.mb-sm-n14,.my-sm-n14{margin-bottom:-56px !important}.ms-sm-n14{margin-inline-start:-56px !important}.me-sm-n14{margin-inline-end:-56px !important}.ma-sm-n14{margin:-56px !important}.mt-sm-n15,.my-sm-n15{margin-top:-60px !important}.mr-sm-n15,.mx-sm-n15{margin-right:-60px !important}.ml-sm-n15,.mx-sm-n15{margin-left:-60px !important}.mb-sm-n15,.my-sm-n15{margin-bottom:-60px !important}.ms-sm-n15{margin-inline-start:-60px !important}.me-sm-n15{margin-inline-end:-60px !important}.ma-sm-n15{margin:-60px !important}.mt-sm-n16,.my-sm-n16{margin-top:-64px !important}.mr-sm-n16,.mx-sm-n16{margin-right:-64px !important}.ml-sm-n16,.mx-sm-n16{margin-left:-64px !important}.mb-sm-n16,.my-sm-n16{margin-bottom:-64px !important}.ms-sm-n16{margin-inline-start:-64px !important}.me-sm-n16{margin-inline-end:-64px !important}.ma-sm-n16{margin:-64px !important}.mt-sm-n17,.my-sm-n17{margin-top:-68px !important}.mr-sm-n17,.mx-sm-n17{margin-right:-68px !important}.ml-sm-n17,.mx-sm-n17{margin-left:-68px !important}.mb-sm-n17,.my-sm-n17{margin-bottom:-68px !important}.ms-sm-n17{margin-inline-start:-68px !important}.me-sm-n17{margin-inline-end:-68px !important}.ma-sm-n17{margin:-68px !important}.mt-sm-n18,.my-sm-n18{margin-top:-72px !important}.mr-sm-n18,.mx-sm-n18{margin-right:-72px !important}.ml-sm-n18,.mx-sm-n18{margin-left:-72px !important}.mb-sm-n18,.my-sm-n18{margin-bottom:-72px !important}.ms-sm-n18{margin-inline-start:-72px !important}.me-sm-n18{margin-inline-end:-72px !important}.ma-sm-n18{margin:-72px !important}.mt-sm-n19,.my-sm-n19{margin-top:-76px !important}.mr-sm-n19,.mx-sm-n19{margin-right:-76px !important}.ml-sm-n19,.mx-sm-n19{margin-left:-76px !important}.mb-sm-n19,.my-sm-n19{margin-bottom:-76px !important}.ms-sm-n19{margin-inline-start:-76px !important}.me-sm-n19{margin-inline-end:-76px !important}.ma-sm-n19{margin:-76px !important}.mt-sm-n20,.my-sm-n20{margin-top:-80px !important}.mr-sm-n20,.mx-sm-n20{margin-right:-80px !important}.ml-sm-n20,.mx-sm-n20{margin-left:-80px !important}.mb-sm-n20,.my-sm-n20{margin-bottom:-80px !important}.ms-sm-n20{margin-inline-start:-80px !important}.me-sm-n20{margin-inline-end:-80px !important}.ma-sm-n20{margin:-80px !important}}@media screen and (min-width: 960px){.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ms-md-0{margin-inline-start:0 !important}.me-md-0{margin-inline-end:0 !important}.ma-md-0{margin:0 !important}.mt-md-1,.my-md-1{margin-top:4px !important}.mr-md-1,.mx-md-1{margin-right:4px !important}.ml-md-1,.mx-md-1{margin-left:4px !important}.mb-md-1,.my-md-1{margin-bottom:4px !important}.ms-md-1{margin-inline-start:4px !important}.me-md-1{margin-inline-end:4px !important}.ma-md-1{margin:4px !important}.mt-md-2,.my-md-2{margin-top:8px !important}.mr-md-2,.mx-md-2{margin-right:8px !important}.ml-md-2,.mx-md-2{margin-left:8px !important}.mb-md-2,.my-md-2{margin-bottom:8px !important}.ms-md-2{margin-inline-start:8px !important}.me-md-2{margin-inline-end:8px !important}.ma-md-2{margin:8px !important}.mt-md-3,.my-md-3{margin-top:12px !important}.mr-md-3,.mx-md-3{margin-right:12px !important}.ml-md-3,.mx-md-3{margin-left:12px !important}.mb-md-3,.my-md-3{margin-bottom:12px !important}.ms-md-3{margin-inline-start:12px !important}.me-md-3{margin-inline-end:12px !important}.ma-md-3{margin:12px !important}.mt-md-4,.my-md-4{margin-top:16px !important}.mr-md-4,.mx-md-4{margin-right:16px !important}.ml-md-4,.mx-md-4{margin-left:16px !important}.mb-md-4,.my-md-4{margin-bottom:16px !important}.ms-md-4{margin-inline-start:16px !important}.me-md-4{margin-inline-end:16px !important}.ma-md-4{margin:16px !important}.mt-md-5,.my-md-5{margin-top:20px !important}.mr-md-5,.mx-md-5{margin-right:20px !important}.ml-md-5,.mx-md-5{margin-left:20px !important}.mb-md-5,.my-md-5{margin-bottom:20px !important}.ms-md-5{margin-inline-start:20px !important}.me-md-5{margin-inline-end:20px !important}.ma-md-5{margin:20px !important}.mt-md-6,.my-md-6{margin-top:24px !important}.mr-md-6,.mx-md-6{margin-right:24px !important}.ml-md-6,.mx-md-6{margin-left:24px !important}.mb-md-6,.my-md-6{margin-bottom:24px !important}.ms-md-6{margin-inline-start:24px !important}.me-md-6{margin-inline-end:24px !important}.ma-md-6{margin:24px !important}.mt-md-7,.my-md-7{margin-top:28px !important}.mr-md-7,.mx-md-7{margin-right:28px !important}.ml-md-7,.mx-md-7{margin-left:28px !important}.mb-md-7,.my-md-7{margin-bottom:28px !important}.ms-md-7{margin-inline-start:28px !important}.me-md-7{margin-inline-end:28px !important}.ma-md-7{margin:28px !important}.mt-md-8,.my-md-8{margin-top:32px !important}.mr-md-8,.mx-md-8{margin-right:32px !important}.ml-md-8,.mx-md-8{margin-left:32px !important}.mb-md-8,.my-md-8{margin-bottom:32px !important}.ms-md-8{margin-inline-start:32px !important}.me-md-8{margin-inline-end:32px !important}.ma-md-8{margin:32px !important}.mt-md-9,.my-md-9{margin-top:36px !important}.mr-md-9,.mx-md-9{margin-right:36px !important}.ml-md-9,.mx-md-9{margin-left:36px !important}.mb-md-9,.my-md-9{margin-bottom:36px !important}.ms-md-9{margin-inline-start:36px !important}.me-md-9{margin-inline-end:36px !important}.ma-md-9{margin:36px !important}.mt-md-10,.my-md-10{margin-top:40px !important}.mr-md-10,.mx-md-10{margin-right:40px !important}.ml-md-10,.mx-md-10{margin-left:40px !important}.mb-md-10,.my-md-10{margin-bottom:40px !important}.ms-md-10{margin-inline-start:40px !important}.me-md-10{margin-inline-end:40px !important}.ma-md-10{margin:40px !important}.mt-md-11,.my-md-11{margin-top:44px !important}.mr-md-11,.mx-md-11{margin-right:44px !important}.ml-md-11,.mx-md-11{margin-left:44px !important}.mb-md-11,.my-md-11{margin-bottom:44px !important}.ms-md-11{margin-inline-start:44px !important}.me-md-11{margin-inline-end:44px !important}.ma-md-11{margin:44px !important}.mt-md-12,.my-md-12{margin-top:48px !important}.mr-md-12,.mx-md-12{margin-right:48px !important}.ml-md-12,.mx-md-12{margin-left:48px !important}.mb-md-12,.my-md-12{margin-bottom:48px !important}.ms-md-12{margin-inline-start:48px !important}.me-md-12{margin-inline-end:48px !important}.ma-md-12{margin:48px !important}.mt-md-13,.my-md-13{margin-top:52px !important}.mr-md-13,.mx-md-13{margin-right:52px !important}.ml-md-13,.mx-md-13{margin-left:52px !important}.mb-md-13,.my-md-13{margin-bottom:52px !important}.ms-md-13{margin-inline-start:52px !important}.me-md-13{margin-inline-end:52px !important}.ma-md-13{margin:52px !important}.mt-md-14,.my-md-14{margin-top:56px !important}.mr-md-14,.mx-md-14{margin-right:56px !important}.ml-md-14,.mx-md-14{margin-left:56px !important}.mb-md-14,.my-md-14{margin-bottom:56px !important}.ms-md-14{margin-inline-start:56px !important}.me-md-14{margin-inline-end:56px !important}.ma-md-14{margin:56px !important}.mt-md-15,.my-md-15{margin-top:60px !important}.mr-md-15,.mx-md-15{margin-right:60px !important}.ml-md-15,.mx-md-15{margin-left:60px !important}.mb-md-15,.my-md-15{margin-bottom:60px !important}.ms-md-15{margin-inline-start:60px !important}.me-md-15{margin-inline-end:60px !important}.ma-md-15{margin:60px !important}.mt-md-16,.my-md-16{margin-top:64px !important}.mr-md-16,.mx-md-16{margin-right:64px !important}.ml-md-16,.mx-md-16{margin-left:64px !important}.mb-md-16,.my-md-16{margin-bottom:64px !important}.ms-md-16{margin-inline-start:64px !important}.me-md-16{margin-inline-end:64px !important}.ma-md-16{margin:64px !important}.mt-md-17,.my-md-17{margin-top:68px !important}.mr-md-17,.mx-md-17{margin-right:68px !important}.ml-md-17,.mx-md-17{margin-left:68px !important}.mb-md-17,.my-md-17{margin-bottom:68px !important}.ms-md-17{margin-inline-start:68px !important}.me-md-17{margin-inline-end:68px !important}.ma-md-17{margin:68px !important}.mt-md-18,.my-md-18{margin-top:72px !important}.mr-md-18,.mx-md-18{margin-right:72px !important}.ml-md-18,.mx-md-18{margin-left:72px !important}.mb-md-18,.my-md-18{margin-bottom:72px !important}.ms-md-18{margin-inline-start:72px !important}.me-md-18{margin-inline-end:72px !important}.ma-md-18{margin:72px !important}.mt-md-19,.my-md-19{margin-top:76px !important}.mr-md-19,.mx-md-19{margin-right:76px !important}.ml-md-19,.mx-md-19{margin-left:76px !important}.mb-md-19,.my-md-19{margin-bottom:76px !important}.ms-md-19{margin-inline-start:76px !important}.me-md-19{margin-inline-end:76px !important}.ma-md-19{margin:76px !important}.mt-md-20,.my-md-20{margin-top:80px !important}.mr-md-20,.mx-md-20{margin-right:80px !important}.ml-md-20,.mx-md-20{margin-left:80px !important}.mb-md-20,.my-md-20{margin-bottom:80px !important}.ms-md-20{margin-inline-start:80px !important}.me-md-20{margin-inline-end:80px !important}.ma-md-20{margin:80px !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ms-md-auto{margin-inline-start:auto !important}.me-md-auto{margin-inline-end:auto !important}.ma-md-auto{margin:auto !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.ps-md-0{padding-inline-start:0 !important}.pe-md-0{padding-inline-end:0 !important}.pa-md-0{padding:0 !important}.pt-md-1,.py-md-1{padding-top:4px !important}.pr-md-1,.px-md-1{padding-right:4px !important}.pl-md-1,.px-md-1{padding-left:4px !important}.pb-md-1,.py-md-1{padding-bottom:4px !important}.ps-md-1{padding-inline-start:4px !important}.pe-md-1{padding-inline-end:4px !important}.pa-md-1{padding:4px !important}.pt-md-2,.py-md-2{padding-top:8px !important}.pr-md-2,.px-md-2{padding-right:8px !important}.pl-md-2,.px-md-2{padding-left:8px !important}.pb-md-2,.py-md-2{padding-bottom:8px !important}.ps-md-2{padding-inline-start:8px !important}.pe-md-2{padding-inline-end:8px !important}.pa-md-2{padding:8px !important}.pt-md-3,.py-md-3{padding-top:12px !important}.pr-md-3,.px-md-3{padding-right:12px !important}.pl-md-3,.px-md-3{padding-left:12px !important}.pb-md-3,.py-md-3{padding-bottom:12px !important}.ps-md-3{padding-inline-start:12px !important}.pe-md-3{padding-inline-end:12px !important}.pa-md-3{padding:12px !important}.pt-md-4,.py-md-4{padding-top:16px !important}.pr-md-4,.px-md-4{padding-right:16px !important}.pl-md-4,.px-md-4{padding-left:16px !important}.pb-md-4,.py-md-4{padding-bottom:16px !important}.ps-md-4{padding-inline-start:16px !important}.pe-md-4{padding-inline-end:16px !important}.pa-md-4{padding:16px !important}.pt-md-5,.py-md-5{padding-top:20px !important}.pr-md-5,.px-md-5{padding-right:20px !important}.pl-md-5,.px-md-5{padding-left:20px !important}.pb-md-5,.py-md-5{padding-bottom:20px !important}.ps-md-5{padding-inline-start:20px !important}.pe-md-5{padding-inline-end:20px !important}.pa-md-5{padding:20px !important}.pt-md-6,.py-md-6{padding-top:24px !important}.pr-md-6,.px-md-6{padding-right:24px !important}.pl-md-6,.px-md-6{padding-left:24px !important}.pb-md-6,.py-md-6{padding-bottom:24px !important}.ps-md-6{padding-inline-start:24px !important}.pe-md-6{padding-inline-end:24px !important}.pa-md-6{padding:24px !important}.pt-md-7,.py-md-7{padding-top:28px !important}.pr-md-7,.px-md-7{padding-right:28px !important}.pl-md-7,.px-md-7{padding-left:28px !important}.pb-md-7,.py-md-7{padding-bottom:28px !important}.ps-md-7{padding-inline-start:28px !important}.pe-md-7{padding-inline-end:28px !important}.pa-md-7{padding:28px !important}.pt-md-8,.py-md-8{padding-top:32px !important}.pr-md-8,.px-md-8{padding-right:32px !important}.pl-md-8,.px-md-8{padding-left:32px !important}.pb-md-8,.py-md-8{padding-bottom:32px !important}.ps-md-8{padding-inline-start:32px !important}.pe-md-8{padding-inline-end:32px !important}.pa-md-8{padding:32px !important}.pt-md-9,.py-md-9{padding-top:36px !important}.pr-md-9,.px-md-9{padding-right:36px !important}.pl-md-9,.px-md-9{padding-left:36px !important}.pb-md-9,.py-md-9{padding-bottom:36px !important}.ps-md-9{padding-inline-start:36px !important}.pe-md-9{padding-inline-end:36px !important}.pa-md-9{padding:36px !important}.pt-md-10,.py-md-10{padding-top:40px !important}.pr-md-10,.px-md-10{padding-right:40px !important}.pl-md-10,.px-md-10{padding-left:40px !important}.pb-md-10,.py-md-10{padding-bottom:40px !important}.ps-md-10{padding-inline-start:40px !important}.pe-md-10{padding-inline-end:40px !important}.pa-md-10{padding:40px !important}.pt-md-11,.py-md-11{padding-top:44px !important}.pr-md-11,.px-md-11{padding-right:44px !important}.pl-md-11,.px-md-11{padding-left:44px !important}.pb-md-11,.py-md-11{padding-bottom:44px !important}.ps-md-11{padding-inline-start:44px !important}.pe-md-11{padding-inline-end:44px !important}.pa-md-11{padding:44px !important}.pt-md-12,.py-md-12{padding-top:48px !important}.pr-md-12,.px-md-12{padding-right:48px !important}.pl-md-12,.px-md-12{padding-left:48px !important}.pb-md-12,.py-md-12{padding-bottom:48px !important}.ps-md-12{padding-inline-start:48px !important}.pe-md-12{padding-inline-end:48px !important}.pa-md-12{padding:48px !important}.pt-md-13,.py-md-13{padding-top:52px !important}.pr-md-13,.px-md-13{padding-right:52px !important}.pl-md-13,.px-md-13{padding-left:52px !important}.pb-md-13,.py-md-13{padding-bottom:52px !important}.ps-md-13{padding-inline-start:52px !important}.pe-md-13{padding-inline-end:52px !important}.pa-md-13{padding:52px !important}.pt-md-14,.py-md-14{padding-top:56px !important}.pr-md-14,.px-md-14{padding-right:56px !important}.pl-md-14,.px-md-14{padding-left:56px !important}.pb-md-14,.py-md-14{padding-bottom:56px !important}.ps-md-14{padding-inline-start:56px !important}.pe-md-14{padding-inline-end:56px !important}.pa-md-14{padding:56px !important}.pt-md-15,.py-md-15{padding-top:60px !important}.pr-md-15,.px-md-15{padding-right:60px !important}.pl-md-15,.px-md-15{padding-left:60px !important}.pb-md-15,.py-md-15{padding-bottom:60px !important}.ps-md-15{padding-inline-start:60px !important}.pe-md-15{padding-inline-end:60px !important}.pa-md-15{padding:60px !important}.pt-md-16,.py-md-16{padding-top:64px !important}.pr-md-16,.px-md-16{padding-right:64px !important}.pl-md-16,.px-md-16{padding-left:64px !important}.pb-md-16,.py-md-16{padding-bottom:64px !important}.ps-md-16{padding-inline-start:64px !important}.pe-md-16{padding-inline-end:64px !important}.pa-md-16{padding:64px !important}.pt-md-17,.py-md-17{padding-top:68px !important}.pr-md-17,.px-md-17{padding-right:68px !important}.pl-md-17,.px-md-17{padding-left:68px !important}.pb-md-17,.py-md-17{padding-bottom:68px !important}.ps-md-17{padding-inline-start:68px !important}.pe-md-17{padding-inline-end:68px !important}.pa-md-17{padding:68px !important}.pt-md-18,.py-md-18{padding-top:72px !important}.pr-md-18,.px-md-18{padding-right:72px !important}.pl-md-18,.px-md-18{padding-left:72px !important}.pb-md-18,.py-md-18{padding-bottom:72px !important}.ps-md-18{padding-inline-start:72px !important}.pe-md-18{padding-inline-end:72px !important}.pa-md-18{padding:72px !important}.pt-md-19,.py-md-19{padding-top:76px !important}.pr-md-19,.px-md-19{padding-right:76px !important}.pl-md-19,.px-md-19{padding-left:76px !important}.pb-md-19,.py-md-19{padding-bottom:76px !important}.ps-md-19{padding-inline-start:76px !important}.pe-md-19{padding-inline-end:76px !important}.pa-md-19{padding:76px !important}.pt-md-20,.py-md-20{padding-top:80px !important}.pr-md-20,.px-md-20{padding-right:80px !important}.pl-md-20,.px-md-20{padding-left:80px !important}.pb-md-20,.py-md-20{padding-bottom:80px !important}.ps-md-20{padding-inline-start:80px !important}.pe-md-20{padding-inline-end:80px !important}.pa-md-20{padding:80px !important}.pt-md-auto,.py-md-auto{padding-top:auto !important}.pr-md-auto,.px-md-auto{padding-right:auto !important}.pl-md-auto,.px-md-auto{padding-left:auto !important}.pb-md-auto,.py-md-auto{padding-bottom:auto !important}.ps-md-auto{padding-inline-start:auto !important}.pe-md-auto{padding-inline-end:auto !important}.pa-md-auto{padding:auto !important}.mt-md-n1,.my-md-n1{margin-top:-4px !important}.mr-md-n1,.mx-md-n1{margin-right:-4px !important}.ml-md-n1,.mx-md-n1{margin-left:-4px !important}.mb-md-n1,.my-md-n1{margin-bottom:-4px !important}.ms-md-n1{margin-inline-start:-4px !important}.me-md-n1{margin-inline-end:-4px !important}.ma-md-n1{margin:-4px !important}.mt-md-n2,.my-md-n2{margin-top:-8px !important}.mr-md-n2,.mx-md-n2{margin-right:-8px !important}.ml-md-n2,.mx-md-n2{margin-left:-8px !important}.mb-md-n2,.my-md-n2{margin-bottom:-8px !important}.ms-md-n2{margin-inline-start:-8px !important}.me-md-n2{margin-inline-end:-8px !important}.ma-md-n2{margin:-8px !important}.mt-md-n3,.my-md-n3{margin-top:-12px !important}.mr-md-n3,.mx-md-n3{margin-right:-12px !important}.ml-md-n3,.mx-md-n3{margin-left:-12px !important}.mb-md-n3,.my-md-n3{margin-bottom:-12px !important}.ms-md-n3{margin-inline-start:-12px !important}.me-md-n3{margin-inline-end:-12px !important}.ma-md-n3{margin:-12px !important}.mt-md-n4,.my-md-n4{margin-top:-16px !important}.mr-md-n4,.mx-md-n4{margin-right:-16px !important}.ml-md-n4,.mx-md-n4{margin-left:-16px !important}.mb-md-n4,.my-md-n4{margin-bottom:-16px !important}.ms-md-n4{margin-inline-start:-16px !important}.me-md-n4{margin-inline-end:-16px !important}.ma-md-n4{margin:-16px !important}.mt-md-n5,.my-md-n5{margin-top:-20px !important}.mr-md-n5,.mx-md-n5{margin-right:-20px !important}.ml-md-n5,.mx-md-n5{margin-left:-20px !important}.mb-md-n5,.my-md-n5{margin-bottom:-20px !important}.ms-md-n5{margin-inline-start:-20px !important}.me-md-n5{margin-inline-end:-20px !important}.ma-md-n5{margin:-20px !important}.mt-md-n6,.my-md-n6{margin-top:-24px !important}.mr-md-n6,.mx-md-n6{margin-right:-24px !important}.ml-md-n6,.mx-md-n6{margin-left:-24px !important}.mb-md-n6,.my-md-n6{margin-bottom:-24px !important}.ms-md-n6{margin-inline-start:-24px !important}.me-md-n6{margin-inline-end:-24px !important}.ma-md-n6{margin:-24px !important}.mt-md-n7,.my-md-n7{margin-top:-28px !important}.mr-md-n7,.mx-md-n7{margin-right:-28px !important}.ml-md-n7,.mx-md-n7{margin-left:-28px !important}.mb-md-n7,.my-md-n7{margin-bottom:-28px !important}.ms-md-n7{margin-inline-start:-28px !important}.me-md-n7{margin-inline-end:-28px !important}.ma-md-n7{margin:-28px !important}.mt-md-n8,.my-md-n8{margin-top:-32px !important}.mr-md-n8,.mx-md-n8{margin-right:-32px !important}.ml-md-n8,.mx-md-n8{margin-left:-32px !important}.mb-md-n8,.my-md-n8{margin-bottom:-32px !important}.ms-md-n8{margin-inline-start:-32px !important}.me-md-n8{margin-inline-end:-32px !important}.ma-md-n8{margin:-32px !important}.mt-md-n9,.my-md-n9{margin-top:-36px !important}.mr-md-n9,.mx-md-n9{margin-right:-36px !important}.ml-md-n9,.mx-md-n9{margin-left:-36px !important}.mb-md-n9,.my-md-n9{margin-bottom:-36px !important}.ms-md-n9{margin-inline-start:-36px !important}.me-md-n9{margin-inline-end:-36px !important}.ma-md-n9{margin:-36px !important}.mt-md-n10,.my-md-n10{margin-top:-40px !important}.mr-md-n10,.mx-md-n10{margin-right:-40px !important}.ml-md-n10,.mx-md-n10{margin-left:-40px !important}.mb-md-n10,.my-md-n10{margin-bottom:-40px !important}.ms-md-n10{margin-inline-start:-40px !important}.me-md-n10{margin-inline-end:-40px !important}.ma-md-n10{margin:-40px !important}.mt-md-n11,.my-md-n11{margin-top:-44px !important}.mr-md-n11,.mx-md-n11{margin-right:-44px !important}.ml-md-n11,.mx-md-n11{margin-left:-44px !important}.mb-md-n11,.my-md-n11{margin-bottom:-44px !important}.ms-md-n11{margin-inline-start:-44px !important}.me-md-n11{margin-inline-end:-44px !important}.ma-md-n11{margin:-44px !important}.mt-md-n12,.my-md-n12{margin-top:-48px !important}.mr-md-n12,.mx-md-n12{margin-right:-48px !important}.ml-md-n12,.mx-md-n12{margin-left:-48px !important}.mb-md-n12,.my-md-n12{margin-bottom:-48px !important}.ms-md-n12{margin-inline-start:-48px !important}.me-md-n12{margin-inline-end:-48px !important}.ma-md-n12{margin:-48px !important}.mt-md-n13,.my-md-n13{margin-top:-52px !important}.mr-md-n13,.mx-md-n13{margin-right:-52px !important}.ml-md-n13,.mx-md-n13{margin-left:-52px !important}.mb-md-n13,.my-md-n13{margin-bottom:-52px !important}.ms-md-n13{margin-inline-start:-52px !important}.me-md-n13{margin-inline-end:-52px !important}.ma-md-n13{margin:-52px !important}.mt-md-n14,.my-md-n14{margin-top:-56px !important}.mr-md-n14,.mx-md-n14{margin-right:-56px !important}.ml-md-n14,.mx-md-n14{margin-left:-56px !important}.mb-md-n14,.my-md-n14{margin-bottom:-56px !important}.ms-md-n14{margin-inline-start:-56px !important}.me-md-n14{margin-inline-end:-56px !important}.ma-md-n14{margin:-56px !important}.mt-md-n15,.my-md-n15{margin-top:-60px !important}.mr-md-n15,.mx-md-n15{margin-right:-60px !important}.ml-md-n15,.mx-md-n15{margin-left:-60px !important}.mb-md-n15,.my-md-n15{margin-bottom:-60px !important}.ms-md-n15{margin-inline-start:-60px !important}.me-md-n15{margin-inline-end:-60px !important}.ma-md-n15{margin:-60px !important}.mt-md-n16,.my-md-n16{margin-top:-64px !important}.mr-md-n16,.mx-md-n16{margin-right:-64px !important}.ml-md-n16,.mx-md-n16{margin-left:-64px !important}.mb-md-n16,.my-md-n16{margin-bottom:-64px !important}.ms-md-n16{margin-inline-start:-64px !important}.me-md-n16{margin-inline-end:-64px !important}.ma-md-n16{margin:-64px !important}.mt-md-n17,.my-md-n17{margin-top:-68px !important}.mr-md-n17,.mx-md-n17{margin-right:-68px !important}.ml-md-n17,.mx-md-n17{margin-left:-68px !important}.mb-md-n17,.my-md-n17{margin-bottom:-68px !important}.ms-md-n17{margin-inline-start:-68px !important}.me-md-n17{margin-inline-end:-68px !important}.ma-md-n17{margin:-68px !important}.mt-md-n18,.my-md-n18{margin-top:-72px !important}.mr-md-n18,.mx-md-n18{margin-right:-72px !important}.ml-md-n18,.mx-md-n18{margin-left:-72px !important}.mb-md-n18,.my-md-n18{margin-bottom:-72px !important}.ms-md-n18{margin-inline-start:-72px !important}.me-md-n18{margin-inline-end:-72px !important}.ma-md-n18{margin:-72px !important}.mt-md-n19,.my-md-n19{margin-top:-76px !important}.mr-md-n19,.mx-md-n19{margin-right:-76px !important}.ml-md-n19,.mx-md-n19{margin-left:-76px !important}.mb-md-n19,.my-md-n19{margin-bottom:-76px !important}.ms-md-n19{margin-inline-start:-76px !important}.me-md-n19{margin-inline-end:-76px !important}.ma-md-n19{margin:-76px !important}.mt-md-n20,.my-md-n20{margin-top:-80px !important}.mr-md-n20,.mx-md-n20{margin-right:-80px !important}.ml-md-n20,.mx-md-n20{margin-left:-80px !important}.mb-md-n20,.my-md-n20{margin-bottom:-80px !important}.ms-md-n20{margin-inline-start:-80px !important}.me-md-n20{margin-inline-end:-80px !important}.ma-md-n20{margin:-80px !important}}@media screen and (min-width: 1280px){.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ms-lg-0{margin-inline-start:0 !important}.me-lg-0{margin-inline-end:0 !important}.ma-lg-0{margin:0 !important}.mt-lg-1,.my-lg-1{margin-top:4px !important}.mr-lg-1,.mx-lg-1{margin-right:4px !important}.ml-lg-1,.mx-lg-1{margin-left:4px !important}.mb-lg-1,.my-lg-1{margin-bottom:4px !important}.ms-lg-1{margin-inline-start:4px !important}.me-lg-1{margin-inline-end:4px !important}.ma-lg-1{margin:4px !important}.mt-lg-2,.my-lg-2{margin-top:8px !important}.mr-lg-2,.mx-lg-2{margin-right:8px !important}.ml-lg-2,.mx-lg-2{margin-left:8px !important}.mb-lg-2,.my-lg-2{margin-bottom:8px !important}.ms-lg-2{margin-inline-start:8px !important}.me-lg-2{margin-inline-end:8px !important}.ma-lg-2{margin:8px !important}.mt-lg-3,.my-lg-3{margin-top:12px !important}.mr-lg-3,.mx-lg-3{margin-right:12px !important}.ml-lg-3,.mx-lg-3{margin-left:12px !important}.mb-lg-3,.my-lg-3{margin-bottom:12px !important}.ms-lg-3{margin-inline-start:12px !important}.me-lg-3{margin-inline-end:12px !important}.ma-lg-3{margin:12px !important}.mt-lg-4,.my-lg-4{margin-top:16px !important}.mr-lg-4,.mx-lg-4{margin-right:16px !important}.ml-lg-4,.mx-lg-4{margin-left:16px !important}.mb-lg-4,.my-lg-4{margin-bottom:16px !important}.ms-lg-4{margin-inline-start:16px !important}.me-lg-4{margin-inline-end:16px !important}.ma-lg-4{margin:16px !important}.mt-lg-5,.my-lg-5{margin-top:20px !important}.mr-lg-5,.mx-lg-5{margin-right:20px !important}.ml-lg-5,.mx-lg-5{margin-left:20px !important}.mb-lg-5,.my-lg-5{margin-bottom:20px !important}.ms-lg-5{margin-inline-start:20px !important}.me-lg-5{margin-inline-end:20px !important}.ma-lg-5{margin:20px !important}.mt-lg-6,.my-lg-6{margin-top:24px !important}.mr-lg-6,.mx-lg-6{margin-right:24px !important}.ml-lg-6,.mx-lg-6{margin-left:24px !important}.mb-lg-6,.my-lg-6{margin-bottom:24px !important}.ms-lg-6{margin-inline-start:24px !important}.me-lg-6{margin-inline-end:24px !important}.ma-lg-6{margin:24px !important}.mt-lg-7,.my-lg-7{margin-top:28px !important}.mr-lg-7,.mx-lg-7{margin-right:28px !important}.ml-lg-7,.mx-lg-7{margin-left:28px !important}.mb-lg-7,.my-lg-7{margin-bottom:28px !important}.ms-lg-7{margin-inline-start:28px !important}.me-lg-7{margin-inline-end:28px !important}.ma-lg-7{margin:28px !important}.mt-lg-8,.my-lg-8{margin-top:32px !important}.mr-lg-8,.mx-lg-8{margin-right:32px !important}.ml-lg-8,.mx-lg-8{margin-left:32px !important}.mb-lg-8,.my-lg-8{margin-bottom:32px !important}.ms-lg-8{margin-inline-start:32px !important}.me-lg-8{margin-inline-end:32px !important}.ma-lg-8{margin:32px !important}.mt-lg-9,.my-lg-9{margin-top:36px !important}.mr-lg-9,.mx-lg-9{margin-right:36px !important}.ml-lg-9,.mx-lg-9{margin-left:36px !important}.mb-lg-9,.my-lg-9{margin-bottom:36px !important}.ms-lg-9{margin-inline-start:36px !important}.me-lg-9{margin-inline-end:36px !important}.ma-lg-9{margin:36px !important}.mt-lg-10,.my-lg-10{margin-top:40px !important}.mr-lg-10,.mx-lg-10{margin-right:40px !important}.ml-lg-10,.mx-lg-10{margin-left:40px !important}.mb-lg-10,.my-lg-10{margin-bottom:40px !important}.ms-lg-10{margin-inline-start:40px !important}.me-lg-10{margin-inline-end:40px !important}.ma-lg-10{margin:40px !important}.mt-lg-11,.my-lg-11{margin-top:44px !important}.mr-lg-11,.mx-lg-11{margin-right:44px !important}.ml-lg-11,.mx-lg-11{margin-left:44px !important}.mb-lg-11,.my-lg-11{margin-bottom:44px !important}.ms-lg-11{margin-inline-start:44px !important}.me-lg-11{margin-inline-end:44px !important}.ma-lg-11{margin:44px !important}.mt-lg-12,.my-lg-12{margin-top:48px !important}.mr-lg-12,.mx-lg-12{margin-right:48px !important}.ml-lg-12,.mx-lg-12{margin-left:48px !important}.mb-lg-12,.my-lg-12{margin-bottom:48px !important}.ms-lg-12{margin-inline-start:48px !important}.me-lg-12{margin-inline-end:48px !important}.ma-lg-12{margin:48px !important}.mt-lg-13,.my-lg-13{margin-top:52px !important}.mr-lg-13,.mx-lg-13{margin-right:52px !important}.ml-lg-13,.mx-lg-13{margin-left:52px !important}.mb-lg-13,.my-lg-13{margin-bottom:52px !important}.ms-lg-13{margin-inline-start:52px !important}.me-lg-13{margin-inline-end:52px !important}.ma-lg-13{margin:52px !important}.mt-lg-14,.my-lg-14{margin-top:56px !important}.mr-lg-14,.mx-lg-14{margin-right:56px !important}.ml-lg-14,.mx-lg-14{margin-left:56px !important}.mb-lg-14,.my-lg-14{margin-bottom:56px !important}.ms-lg-14{margin-inline-start:56px !important}.me-lg-14{margin-inline-end:56px !important}.ma-lg-14{margin:56px !important}.mt-lg-15,.my-lg-15{margin-top:60px !important}.mr-lg-15,.mx-lg-15{margin-right:60px !important}.ml-lg-15,.mx-lg-15{margin-left:60px !important}.mb-lg-15,.my-lg-15{margin-bottom:60px !important}.ms-lg-15{margin-inline-start:60px !important}.me-lg-15{margin-inline-end:60px !important}.ma-lg-15{margin:60px !important}.mt-lg-16,.my-lg-16{margin-top:64px !important}.mr-lg-16,.mx-lg-16{margin-right:64px !important}.ml-lg-16,.mx-lg-16{margin-left:64px !important}.mb-lg-16,.my-lg-16{margin-bottom:64px !important}.ms-lg-16{margin-inline-start:64px !important}.me-lg-16{margin-inline-end:64px !important}.ma-lg-16{margin:64px !important}.mt-lg-17,.my-lg-17{margin-top:68px !important}.mr-lg-17,.mx-lg-17{margin-right:68px !important}.ml-lg-17,.mx-lg-17{margin-left:68px !important}.mb-lg-17,.my-lg-17{margin-bottom:68px !important}.ms-lg-17{margin-inline-start:68px !important}.me-lg-17{margin-inline-end:68px !important}.ma-lg-17{margin:68px !important}.mt-lg-18,.my-lg-18{margin-top:72px !important}.mr-lg-18,.mx-lg-18{margin-right:72px !important}.ml-lg-18,.mx-lg-18{margin-left:72px !important}.mb-lg-18,.my-lg-18{margin-bottom:72px !important}.ms-lg-18{margin-inline-start:72px !important}.me-lg-18{margin-inline-end:72px !important}.ma-lg-18{margin:72px !important}.mt-lg-19,.my-lg-19{margin-top:76px !important}.mr-lg-19,.mx-lg-19{margin-right:76px !important}.ml-lg-19,.mx-lg-19{margin-left:76px !important}.mb-lg-19,.my-lg-19{margin-bottom:76px !important}.ms-lg-19{margin-inline-start:76px !important}.me-lg-19{margin-inline-end:76px !important}.ma-lg-19{margin:76px !important}.mt-lg-20,.my-lg-20{margin-top:80px !important}.mr-lg-20,.mx-lg-20{margin-right:80px !important}.ml-lg-20,.mx-lg-20{margin-left:80px !important}.mb-lg-20,.my-lg-20{margin-bottom:80px !important}.ms-lg-20{margin-inline-start:80px !important}.me-lg-20{margin-inline-end:80px !important}.ma-lg-20{margin:80px !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ms-lg-auto{margin-inline-start:auto !important}.me-lg-auto{margin-inline-end:auto !important}.ma-lg-auto{margin:auto !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.ps-lg-0{padding-inline-start:0 !important}.pe-lg-0{padding-inline-end:0 !important}.pa-lg-0{padding:0 !important}.pt-lg-1,.py-lg-1{padding-top:4px !important}.pr-lg-1,.px-lg-1{padding-right:4px !important}.pl-lg-1,.px-lg-1{padding-left:4px !important}.pb-lg-1,.py-lg-1{padding-bottom:4px !important}.ps-lg-1{padding-inline-start:4px !important}.pe-lg-1{padding-inline-end:4px !important}.pa-lg-1{padding:4px !important}.pt-lg-2,.py-lg-2{padding-top:8px !important}.pr-lg-2,.px-lg-2{padding-right:8px !important}.pl-lg-2,.px-lg-2{padding-left:8px !important}.pb-lg-2,.py-lg-2{padding-bottom:8px !important}.ps-lg-2{padding-inline-start:8px !important}.pe-lg-2{padding-inline-end:8px !important}.pa-lg-2{padding:8px !important}.pt-lg-3,.py-lg-3{padding-top:12px !important}.pr-lg-3,.px-lg-3{padding-right:12px !important}.pl-lg-3,.px-lg-3{padding-left:12px !important}.pb-lg-3,.py-lg-3{padding-bottom:12px !important}.ps-lg-3{padding-inline-start:12px !important}.pe-lg-3{padding-inline-end:12px !important}.pa-lg-3{padding:12px !important}.pt-lg-4,.py-lg-4{padding-top:16px !important}.pr-lg-4,.px-lg-4{padding-right:16px !important}.pl-lg-4,.px-lg-4{padding-left:16px !important}.pb-lg-4,.py-lg-4{padding-bottom:16px !important}.ps-lg-4{padding-inline-start:16px !important}.pe-lg-4{padding-inline-end:16px !important}.pa-lg-4{padding:16px !important}.pt-lg-5,.py-lg-5{padding-top:20px !important}.pr-lg-5,.px-lg-5{padding-right:20px !important}.pl-lg-5,.px-lg-5{padding-left:20px !important}.pb-lg-5,.py-lg-5{padding-bottom:20px !important}.ps-lg-5{padding-inline-start:20px !important}.pe-lg-5{padding-inline-end:20px !important}.pa-lg-5{padding:20px !important}.pt-lg-6,.py-lg-6{padding-top:24px !important}.pr-lg-6,.px-lg-6{padding-right:24px !important}.pl-lg-6,.px-lg-6{padding-left:24px !important}.pb-lg-6,.py-lg-6{padding-bottom:24px !important}.ps-lg-6{padding-inline-start:24px !important}.pe-lg-6{padding-inline-end:24px !important}.pa-lg-6{padding:24px !important}.pt-lg-7,.py-lg-7{padding-top:28px !important}.pr-lg-7,.px-lg-7{padding-right:28px !important}.pl-lg-7,.px-lg-7{padding-left:28px !important}.pb-lg-7,.py-lg-7{padding-bottom:28px !important}.ps-lg-7{padding-inline-start:28px !important}.pe-lg-7{padding-inline-end:28px !important}.pa-lg-7{padding:28px !important}.pt-lg-8,.py-lg-8{padding-top:32px !important}.pr-lg-8,.px-lg-8{padding-right:32px !important}.pl-lg-8,.px-lg-8{padding-left:32px !important}.pb-lg-8,.py-lg-8{padding-bottom:32px !important}.ps-lg-8{padding-inline-start:32px !important}.pe-lg-8{padding-inline-end:32px !important}.pa-lg-8{padding:32px !important}.pt-lg-9,.py-lg-9{padding-top:36px !important}.pr-lg-9,.px-lg-9{padding-right:36px !important}.pl-lg-9,.px-lg-9{padding-left:36px !important}.pb-lg-9,.py-lg-9{padding-bottom:36px !important}.ps-lg-9{padding-inline-start:36px !important}.pe-lg-9{padding-inline-end:36px !important}.pa-lg-9{padding:36px !important}.pt-lg-10,.py-lg-10{padding-top:40px !important}.pr-lg-10,.px-lg-10{padding-right:40px !important}.pl-lg-10,.px-lg-10{padding-left:40px !important}.pb-lg-10,.py-lg-10{padding-bottom:40px !important}.ps-lg-10{padding-inline-start:40px !important}.pe-lg-10{padding-inline-end:40px !important}.pa-lg-10{padding:40px !important}.pt-lg-11,.py-lg-11{padding-top:44px !important}.pr-lg-11,.px-lg-11{padding-right:44px !important}.pl-lg-11,.px-lg-11{padding-left:44px !important}.pb-lg-11,.py-lg-11{padding-bottom:44px !important}.ps-lg-11{padding-inline-start:44px !important}.pe-lg-11{padding-inline-end:44px !important}.pa-lg-11{padding:44px !important}.pt-lg-12,.py-lg-12{padding-top:48px !important}.pr-lg-12,.px-lg-12{padding-right:48px !important}.pl-lg-12,.px-lg-12{padding-left:48px !important}.pb-lg-12,.py-lg-12{padding-bottom:48px !important}.ps-lg-12{padding-inline-start:48px !important}.pe-lg-12{padding-inline-end:48px !important}.pa-lg-12{padding:48px !important}.pt-lg-13,.py-lg-13{padding-top:52px !important}.pr-lg-13,.px-lg-13{padding-right:52px !important}.pl-lg-13,.px-lg-13{padding-left:52px !important}.pb-lg-13,.py-lg-13{padding-bottom:52px !important}.ps-lg-13{padding-inline-start:52px !important}.pe-lg-13{padding-inline-end:52px !important}.pa-lg-13{padding:52px !important}.pt-lg-14,.py-lg-14{padding-top:56px !important}.pr-lg-14,.px-lg-14{padding-right:56px !important}.pl-lg-14,.px-lg-14{padding-left:56px !important}.pb-lg-14,.py-lg-14{padding-bottom:56px !important}.ps-lg-14{padding-inline-start:56px !important}.pe-lg-14{padding-inline-end:56px !important}.pa-lg-14{padding:56px !important}.pt-lg-15,.py-lg-15{padding-top:60px !important}.pr-lg-15,.px-lg-15{padding-right:60px !important}.pl-lg-15,.px-lg-15{padding-left:60px !important}.pb-lg-15,.py-lg-15{padding-bottom:60px !important}.ps-lg-15{padding-inline-start:60px !important}.pe-lg-15{padding-inline-end:60px !important}.pa-lg-15{padding:60px !important}.pt-lg-16,.py-lg-16{padding-top:64px !important}.pr-lg-16,.px-lg-16{padding-right:64px !important}.pl-lg-16,.px-lg-16{padding-left:64px !important}.pb-lg-16,.py-lg-16{padding-bottom:64px !important}.ps-lg-16{padding-inline-start:64px !important}.pe-lg-16{padding-inline-end:64px !important}.pa-lg-16{padding:64px !important}.pt-lg-17,.py-lg-17{padding-top:68px !important}.pr-lg-17,.px-lg-17{padding-right:68px !important}.pl-lg-17,.px-lg-17{padding-left:68px !important}.pb-lg-17,.py-lg-17{padding-bottom:68px !important}.ps-lg-17{padding-inline-start:68px !important}.pe-lg-17{padding-inline-end:68px !important}.pa-lg-17{padding:68px !important}.pt-lg-18,.py-lg-18{padding-top:72px !important}.pr-lg-18,.px-lg-18{padding-right:72px !important}.pl-lg-18,.px-lg-18{padding-left:72px !important}.pb-lg-18,.py-lg-18{padding-bottom:72px !important}.ps-lg-18{padding-inline-start:72px !important}.pe-lg-18{padding-inline-end:72px !important}.pa-lg-18{padding:72px !important}.pt-lg-19,.py-lg-19{padding-top:76px !important}.pr-lg-19,.px-lg-19{padding-right:76px !important}.pl-lg-19,.px-lg-19{padding-left:76px !important}.pb-lg-19,.py-lg-19{padding-bottom:76px !important}.ps-lg-19{padding-inline-start:76px !important}.pe-lg-19{padding-inline-end:76px !important}.pa-lg-19{padding:76px !important}.pt-lg-20,.py-lg-20{padding-top:80px !important}.pr-lg-20,.px-lg-20{padding-right:80px !important}.pl-lg-20,.px-lg-20{padding-left:80px !important}.pb-lg-20,.py-lg-20{padding-bottom:80px !important}.ps-lg-20{padding-inline-start:80px !important}.pe-lg-20{padding-inline-end:80px !important}.pa-lg-20{padding:80px !important}.pt-lg-auto,.py-lg-auto{padding-top:auto !important}.pr-lg-auto,.px-lg-auto{padding-right:auto !important}.pl-lg-auto,.px-lg-auto{padding-left:auto !important}.pb-lg-auto,.py-lg-auto{padding-bottom:auto !important}.ps-lg-auto{padding-inline-start:auto !important}.pe-lg-auto{padding-inline-end:auto !important}.pa-lg-auto{padding:auto !important}.mt-lg-n1,.my-lg-n1{margin-top:-4px !important}.mr-lg-n1,.mx-lg-n1{margin-right:-4px !important}.ml-lg-n1,.mx-lg-n1{margin-left:-4px !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-4px !important}.ms-lg-n1{margin-inline-start:-4px !important}.me-lg-n1{margin-inline-end:-4px !important}.ma-lg-n1{margin:-4px !important}.mt-lg-n2,.my-lg-n2{margin-top:-8px !important}.mr-lg-n2,.mx-lg-n2{margin-right:-8px !important}.ml-lg-n2,.mx-lg-n2{margin-left:-8px !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-8px !important}.ms-lg-n2{margin-inline-start:-8px !important}.me-lg-n2{margin-inline-end:-8px !important}.ma-lg-n2{margin:-8px !important}.mt-lg-n3,.my-lg-n3{margin-top:-12px !important}.mr-lg-n3,.mx-lg-n3{margin-right:-12px !important}.ml-lg-n3,.mx-lg-n3{margin-left:-12px !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-12px !important}.ms-lg-n3{margin-inline-start:-12px !important}.me-lg-n3{margin-inline-end:-12px !important}.ma-lg-n3{margin:-12px !important}.mt-lg-n4,.my-lg-n4{margin-top:-16px !important}.mr-lg-n4,.mx-lg-n4{margin-right:-16px !important}.ml-lg-n4,.mx-lg-n4{margin-left:-16px !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-16px !important}.ms-lg-n4{margin-inline-start:-16px !important}.me-lg-n4{margin-inline-end:-16px !important}.ma-lg-n4{margin:-16px !important}.mt-lg-n5,.my-lg-n5{margin-top:-20px !important}.mr-lg-n5,.mx-lg-n5{margin-right:-20px !important}.ml-lg-n5,.mx-lg-n5{margin-left:-20px !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-20px !important}.ms-lg-n5{margin-inline-start:-20px !important}.me-lg-n5{margin-inline-end:-20px !important}.ma-lg-n5{margin:-20px !important}.mt-lg-n6,.my-lg-n6{margin-top:-24px !important}.mr-lg-n6,.mx-lg-n6{margin-right:-24px !important}.ml-lg-n6,.mx-lg-n6{margin-left:-24px !important}.mb-lg-n6,.my-lg-n6{margin-bottom:-24px !important}.ms-lg-n6{margin-inline-start:-24px !important}.me-lg-n6{margin-inline-end:-24px !important}.ma-lg-n6{margin:-24px !important}.mt-lg-n7,.my-lg-n7{margin-top:-28px !important}.mr-lg-n7,.mx-lg-n7{margin-right:-28px !important}.ml-lg-n7,.mx-lg-n7{margin-left:-28px !important}.mb-lg-n7,.my-lg-n7{margin-bottom:-28px !important}.ms-lg-n7{margin-inline-start:-28px !important}.me-lg-n7{margin-inline-end:-28px !important}.ma-lg-n7{margin:-28px !important}.mt-lg-n8,.my-lg-n8{margin-top:-32px !important}.mr-lg-n8,.mx-lg-n8{margin-right:-32px !important}.ml-lg-n8,.mx-lg-n8{margin-left:-32px !important}.mb-lg-n8,.my-lg-n8{margin-bottom:-32px !important}.ms-lg-n8{margin-inline-start:-32px !important}.me-lg-n8{margin-inline-end:-32px !important}.ma-lg-n8{margin:-32px !important}.mt-lg-n9,.my-lg-n9{margin-top:-36px !important}.mr-lg-n9,.mx-lg-n9{margin-right:-36px !important}.ml-lg-n9,.mx-lg-n9{margin-left:-36px !important}.mb-lg-n9,.my-lg-n9{margin-bottom:-36px !important}.ms-lg-n9{margin-inline-start:-36px !important}.me-lg-n9{margin-inline-end:-36px !important}.ma-lg-n9{margin:-36px !important}.mt-lg-n10,.my-lg-n10{margin-top:-40px !important}.mr-lg-n10,.mx-lg-n10{margin-right:-40px !important}.ml-lg-n10,.mx-lg-n10{margin-left:-40px !important}.mb-lg-n10,.my-lg-n10{margin-bottom:-40px !important}.ms-lg-n10{margin-inline-start:-40px !important}.me-lg-n10{margin-inline-end:-40px !important}.ma-lg-n10{margin:-40px !important}.mt-lg-n11,.my-lg-n11{margin-top:-44px !important}.mr-lg-n11,.mx-lg-n11{margin-right:-44px !important}.ml-lg-n11,.mx-lg-n11{margin-left:-44px !important}.mb-lg-n11,.my-lg-n11{margin-bottom:-44px !important}.ms-lg-n11{margin-inline-start:-44px !important}.me-lg-n11{margin-inline-end:-44px !important}.ma-lg-n11{margin:-44px !important}.mt-lg-n12,.my-lg-n12{margin-top:-48px !important}.mr-lg-n12,.mx-lg-n12{margin-right:-48px !important}.ml-lg-n12,.mx-lg-n12{margin-left:-48px !important}.mb-lg-n12,.my-lg-n12{margin-bottom:-48px !important}.ms-lg-n12{margin-inline-start:-48px !important}.me-lg-n12{margin-inline-end:-48px !important}.ma-lg-n12{margin:-48px !important}.mt-lg-n13,.my-lg-n13{margin-top:-52px !important}.mr-lg-n13,.mx-lg-n13{margin-right:-52px !important}.ml-lg-n13,.mx-lg-n13{margin-left:-52px !important}.mb-lg-n13,.my-lg-n13{margin-bottom:-52px !important}.ms-lg-n13{margin-inline-start:-52px !important}.me-lg-n13{margin-inline-end:-52px !important}.ma-lg-n13{margin:-52px !important}.mt-lg-n14,.my-lg-n14{margin-top:-56px !important}.mr-lg-n14,.mx-lg-n14{margin-right:-56px !important}.ml-lg-n14,.mx-lg-n14{margin-left:-56px !important}.mb-lg-n14,.my-lg-n14{margin-bottom:-56px !important}.ms-lg-n14{margin-inline-start:-56px !important}.me-lg-n14{margin-inline-end:-56px !important}.ma-lg-n14{margin:-56px !important}.mt-lg-n15,.my-lg-n15{margin-top:-60px !important}.mr-lg-n15,.mx-lg-n15{margin-right:-60px !important}.ml-lg-n15,.mx-lg-n15{margin-left:-60px !important}.mb-lg-n15,.my-lg-n15{margin-bottom:-60px !important}.ms-lg-n15{margin-inline-start:-60px !important}.me-lg-n15{margin-inline-end:-60px !important}.ma-lg-n15{margin:-60px !important}.mt-lg-n16,.my-lg-n16{margin-top:-64px !important}.mr-lg-n16,.mx-lg-n16{margin-right:-64px !important}.ml-lg-n16,.mx-lg-n16{margin-left:-64px !important}.mb-lg-n16,.my-lg-n16{margin-bottom:-64px !important}.ms-lg-n16{margin-inline-start:-64px !important}.me-lg-n16{margin-inline-end:-64px !important}.ma-lg-n16{margin:-64px !important}.mt-lg-n17,.my-lg-n17{margin-top:-68px !important}.mr-lg-n17,.mx-lg-n17{margin-right:-68px !important}.ml-lg-n17,.mx-lg-n17{margin-left:-68px !important}.mb-lg-n17,.my-lg-n17{margin-bottom:-68px !important}.ms-lg-n17{margin-inline-start:-68px !important}.me-lg-n17{margin-inline-end:-68px !important}.ma-lg-n17{margin:-68px !important}.mt-lg-n18,.my-lg-n18{margin-top:-72px !important}.mr-lg-n18,.mx-lg-n18{margin-right:-72px !important}.ml-lg-n18,.mx-lg-n18{margin-left:-72px !important}.mb-lg-n18,.my-lg-n18{margin-bottom:-72px !important}.ms-lg-n18{margin-inline-start:-72px !important}.me-lg-n18{margin-inline-end:-72px !important}.ma-lg-n18{margin:-72px !important}.mt-lg-n19,.my-lg-n19{margin-top:-76px !important}.mr-lg-n19,.mx-lg-n19{margin-right:-76px !important}.ml-lg-n19,.mx-lg-n19{margin-left:-76px !important}.mb-lg-n19,.my-lg-n19{margin-bottom:-76px !important}.ms-lg-n19{margin-inline-start:-76px !important}.me-lg-n19{margin-inline-end:-76px !important}.ma-lg-n19{margin:-76px !important}.mt-lg-n20,.my-lg-n20{margin-top:-80px !important}.mr-lg-n20,.mx-lg-n20{margin-right:-80px !important}.ml-lg-n20,.mx-lg-n20{margin-left:-80px !important}.mb-lg-n20,.my-lg-n20{margin-bottom:-80px !important}.ms-lg-n20{margin-inline-start:-80px !important}.me-lg-n20{margin-inline-end:-80px !important}.ma-lg-n20{margin:-80px !important}}@media screen and (min-width: 1920px){.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ms-xl-0{margin-inline-start:0 !important}.me-xl-0{margin-inline-end:0 !important}.ma-xl-0{margin:0 !important}.mt-xl-1,.my-xl-1{margin-top:4px !important}.mr-xl-1,.mx-xl-1{margin-right:4px !important}.ml-xl-1,.mx-xl-1{margin-left:4px !important}.mb-xl-1,.my-xl-1{margin-bottom:4px !important}.ms-xl-1{margin-inline-start:4px !important}.me-xl-1{margin-inline-end:4px !important}.ma-xl-1{margin:4px !important}.mt-xl-2,.my-xl-2{margin-top:8px !important}.mr-xl-2,.mx-xl-2{margin-right:8px !important}.ml-xl-2,.mx-xl-2{margin-left:8px !important}.mb-xl-2,.my-xl-2{margin-bottom:8px !important}.ms-xl-2{margin-inline-start:8px !important}.me-xl-2{margin-inline-end:8px !important}.ma-xl-2{margin:8px !important}.mt-xl-3,.my-xl-3{margin-top:12px !important}.mr-xl-3,.mx-xl-3{margin-right:12px !important}.ml-xl-3,.mx-xl-3{margin-left:12px !important}.mb-xl-3,.my-xl-3{margin-bottom:12px !important}.ms-xl-3{margin-inline-start:12px !important}.me-xl-3{margin-inline-end:12px !important}.ma-xl-3{margin:12px !important}.mt-xl-4,.my-xl-4{margin-top:16px !important}.mr-xl-4,.mx-xl-4{margin-right:16px !important}.ml-xl-4,.mx-xl-4{margin-left:16px !important}.mb-xl-4,.my-xl-4{margin-bottom:16px !important}.ms-xl-4{margin-inline-start:16px !important}.me-xl-4{margin-inline-end:16px !important}.ma-xl-4{margin:16px !important}.mt-xl-5,.my-xl-5{margin-top:20px !important}.mr-xl-5,.mx-xl-5{margin-right:20px !important}.ml-xl-5,.mx-xl-5{margin-left:20px !important}.mb-xl-5,.my-xl-5{margin-bottom:20px !important}.ms-xl-5{margin-inline-start:20px !important}.me-xl-5{margin-inline-end:20px !important}.ma-xl-5{margin:20px !important}.mt-xl-6,.my-xl-6{margin-top:24px !important}.mr-xl-6,.mx-xl-6{margin-right:24px !important}.ml-xl-6,.mx-xl-6{margin-left:24px !important}.mb-xl-6,.my-xl-6{margin-bottom:24px !important}.ms-xl-6{margin-inline-start:24px !important}.me-xl-6{margin-inline-end:24px !important}.ma-xl-6{margin:24px !important}.mt-xl-7,.my-xl-7{margin-top:28px !important}.mr-xl-7,.mx-xl-7{margin-right:28px !important}.ml-xl-7,.mx-xl-7{margin-left:28px !important}.mb-xl-7,.my-xl-7{margin-bottom:28px !important}.ms-xl-7{margin-inline-start:28px !important}.me-xl-7{margin-inline-end:28px !important}.ma-xl-7{margin:28px !important}.mt-xl-8,.my-xl-8{margin-top:32px !important}.mr-xl-8,.mx-xl-8{margin-right:32px !important}.ml-xl-8,.mx-xl-8{margin-left:32px !important}.mb-xl-8,.my-xl-8{margin-bottom:32px !important}.ms-xl-8{margin-inline-start:32px !important}.me-xl-8{margin-inline-end:32px !important}.ma-xl-8{margin:32px !important}.mt-xl-9,.my-xl-9{margin-top:36px !important}.mr-xl-9,.mx-xl-9{margin-right:36px !important}.ml-xl-9,.mx-xl-9{margin-left:36px !important}.mb-xl-9,.my-xl-9{margin-bottom:36px !important}.ms-xl-9{margin-inline-start:36px !important}.me-xl-9{margin-inline-end:36px !important}.ma-xl-9{margin:36px !important}.mt-xl-10,.my-xl-10{margin-top:40px !important}.mr-xl-10,.mx-xl-10{margin-right:40px !important}.ml-xl-10,.mx-xl-10{margin-left:40px !important}.mb-xl-10,.my-xl-10{margin-bottom:40px !important}.ms-xl-10{margin-inline-start:40px !important}.me-xl-10{margin-inline-end:40px !important}.ma-xl-10{margin:40px !important}.mt-xl-11,.my-xl-11{margin-top:44px !important}.mr-xl-11,.mx-xl-11{margin-right:44px !important}.ml-xl-11,.mx-xl-11{margin-left:44px !important}.mb-xl-11,.my-xl-11{margin-bottom:44px !important}.ms-xl-11{margin-inline-start:44px !important}.me-xl-11{margin-inline-end:44px !important}.ma-xl-11{margin:44px !important}.mt-xl-12,.my-xl-12{margin-top:48px !important}.mr-xl-12,.mx-xl-12{margin-right:48px !important}.ml-xl-12,.mx-xl-12{margin-left:48px !important}.mb-xl-12,.my-xl-12{margin-bottom:48px !important}.ms-xl-12{margin-inline-start:48px !important}.me-xl-12{margin-inline-end:48px !important}.ma-xl-12{margin:48px !important}.mt-xl-13,.my-xl-13{margin-top:52px !important}.mr-xl-13,.mx-xl-13{margin-right:52px !important}.ml-xl-13,.mx-xl-13{margin-left:52px !important}.mb-xl-13,.my-xl-13{margin-bottom:52px !important}.ms-xl-13{margin-inline-start:52px !important}.me-xl-13{margin-inline-end:52px !important}.ma-xl-13{margin:52px !important}.mt-xl-14,.my-xl-14{margin-top:56px !important}.mr-xl-14,.mx-xl-14{margin-right:56px !important}.ml-xl-14,.mx-xl-14{margin-left:56px !important}.mb-xl-14,.my-xl-14{margin-bottom:56px !important}.ms-xl-14{margin-inline-start:56px !important}.me-xl-14{margin-inline-end:56px !important}.ma-xl-14{margin:56px !important}.mt-xl-15,.my-xl-15{margin-top:60px !important}.mr-xl-15,.mx-xl-15{margin-right:60px !important}.ml-xl-15,.mx-xl-15{margin-left:60px !important}.mb-xl-15,.my-xl-15{margin-bottom:60px !important}.ms-xl-15{margin-inline-start:60px !important}.me-xl-15{margin-inline-end:60px !important}.ma-xl-15{margin:60px !important}.mt-xl-16,.my-xl-16{margin-top:64px !important}.mr-xl-16,.mx-xl-16{margin-right:64px !important}.ml-xl-16,.mx-xl-16{margin-left:64px !important}.mb-xl-16,.my-xl-16{margin-bottom:64px !important}.ms-xl-16{margin-inline-start:64px !important}.me-xl-16{margin-inline-end:64px !important}.ma-xl-16{margin:64px !important}.mt-xl-17,.my-xl-17{margin-top:68px !important}.mr-xl-17,.mx-xl-17{margin-right:68px !important}.ml-xl-17,.mx-xl-17{margin-left:68px !important}.mb-xl-17,.my-xl-17{margin-bottom:68px !important}.ms-xl-17{margin-inline-start:68px !important}.me-xl-17{margin-inline-end:68px !important}.ma-xl-17{margin:68px !important}.mt-xl-18,.my-xl-18{margin-top:72px !important}.mr-xl-18,.mx-xl-18{margin-right:72px !important}.ml-xl-18,.mx-xl-18{margin-left:72px !important}.mb-xl-18,.my-xl-18{margin-bottom:72px !important}.ms-xl-18{margin-inline-start:72px !important}.me-xl-18{margin-inline-end:72px !important}.ma-xl-18{margin:72px !important}.mt-xl-19,.my-xl-19{margin-top:76px !important}.mr-xl-19,.mx-xl-19{margin-right:76px !important}.ml-xl-19,.mx-xl-19{margin-left:76px !important}.mb-xl-19,.my-xl-19{margin-bottom:76px !important}.ms-xl-19{margin-inline-start:76px !important}.me-xl-19{margin-inline-end:76px !important}.ma-xl-19{margin:76px !important}.mt-xl-20,.my-xl-20{margin-top:80px !important}.mr-xl-20,.mx-xl-20{margin-right:80px !important}.ml-xl-20,.mx-xl-20{margin-left:80px !important}.mb-xl-20,.my-xl-20{margin-bottom:80px !important}.ms-xl-20{margin-inline-start:80px !important}.me-xl-20{margin-inline-end:80px !important}.ma-xl-20{margin:80px !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ms-xl-auto{margin-inline-start:auto !important}.me-xl-auto{margin-inline-end:auto !important}.ma-xl-auto{margin:auto !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.ps-xl-0{padding-inline-start:0 !important}.pe-xl-0{padding-inline-end:0 !important}.pa-xl-0{padding:0 !important}.pt-xl-1,.py-xl-1{padding-top:4px !important}.pr-xl-1,.px-xl-1{padding-right:4px !important}.pl-xl-1,.px-xl-1{padding-left:4px !important}.pb-xl-1,.py-xl-1{padding-bottom:4px !important}.ps-xl-1{padding-inline-start:4px !important}.pe-xl-1{padding-inline-end:4px !important}.pa-xl-1{padding:4px !important}.pt-xl-2,.py-xl-2{padding-top:8px !important}.pr-xl-2,.px-xl-2{padding-right:8px !important}.pl-xl-2,.px-xl-2{padding-left:8px !important}.pb-xl-2,.py-xl-2{padding-bottom:8px !important}.ps-xl-2{padding-inline-start:8px !important}.pe-xl-2{padding-inline-end:8px !important}.pa-xl-2{padding:8px !important}.pt-xl-3,.py-xl-3{padding-top:12px !important}.pr-xl-3,.px-xl-3{padding-right:12px !important}.pl-xl-3,.px-xl-3{padding-left:12px !important}.pb-xl-3,.py-xl-3{padding-bottom:12px !important}.ps-xl-3{padding-inline-start:12px !important}.pe-xl-3{padding-inline-end:12px !important}.pa-xl-3{padding:12px !important}.pt-xl-4,.py-xl-4{padding-top:16px !important}.pr-xl-4,.px-xl-4{padding-right:16px !important}.pl-xl-4,.px-xl-4{padding-left:16px !important}.pb-xl-4,.py-xl-4{padding-bottom:16px !important}.ps-xl-4{padding-inline-start:16px !important}.pe-xl-4{padding-inline-end:16px !important}.pa-xl-4{padding:16px !important}.pt-xl-5,.py-xl-5{padding-top:20px !important}.pr-xl-5,.px-xl-5{padding-right:20px !important}.pl-xl-5,.px-xl-5{padding-left:20px !important}.pb-xl-5,.py-xl-5{padding-bottom:20px !important}.ps-xl-5{padding-inline-start:20px !important}.pe-xl-5{padding-inline-end:20px !important}.pa-xl-5{padding:20px !important}.pt-xl-6,.py-xl-6{padding-top:24px !important}.pr-xl-6,.px-xl-6{padding-right:24px !important}.pl-xl-6,.px-xl-6{padding-left:24px !important}.pb-xl-6,.py-xl-6{padding-bottom:24px !important}.ps-xl-6{padding-inline-start:24px !important}.pe-xl-6{padding-inline-end:24px !important}.pa-xl-6{padding:24px !important}.pt-xl-7,.py-xl-7{padding-top:28px !important}.pr-xl-7,.px-xl-7{padding-right:28px !important}.pl-xl-7,.px-xl-7{padding-left:28px !important}.pb-xl-7,.py-xl-7{padding-bottom:28px !important}.ps-xl-7{padding-inline-start:28px !important}.pe-xl-7{padding-inline-end:28px !important}.pa-xl-7{padding:28px !important}.pt-xl-8,.py-xl-8{padding-top:32px !important}.pr-xl-8,.px-xl-8{padding-right:32px !important}.pl-xl-8,.px-xl-8{padding-left:32px !important}.pb-xl-8,.py-xl-8{padding-bottom:32px !important}.ps-xl-8{padding-inline-start:32px !important}.pe-xl-8{padding-inline-end:32px !important}.pa-xl-8{padding:32px !important}.pt-xl-9,.py-xl-9{padding-top:36px !important}.pr-xl-9,.px-xl-9{padding-right:36px !important}.pl-xl-9,.px-xl-9{padding-left:36px !important}.pb-xl-9,.py-xl-9{padding-bottom:36px !important}.ps-xl-9{padding-inline-start:36px !important}.pe-xl-9{padding-inline-end:36px !important}.pa-xl-9{padding:36px !important}.pt-xl-10,.py-xl-10{padding-top:40px !important}.pr-xl-10,.px-xl-10{padding-right:40px !important}.pl-xl-10,.px-xl-10{padding-left:40px !important}.pb-xl-10,.py-xl-10{padding-bottom:40px !important}.ps-xl-10{padding-inline-start:40px !important}.pe-xl-10{padding-inline-end:40px !important}.pa-xl-10{padding:40px !important}.pt-xl-11,.py-xl-11{padding-top:44px !important}.pr-xl-11,.px-xl-11{padding-right:44px !important}.pl-xl-11,.px-xl-11{padding-left:44px !important}.pb-xl-11,.py-xl-11{padding-bottom:44px !important}.ps-xl-11{padding-inline-start:44px !important}.pe-xl-11{padding-inline-end:44px !important}.pa-xl-11{padding:44px !important}.pt-xl-12,.py-xl-12{padding-top:48px !important}.pr-xl-12,.px-xl-12{padding-right:48px !important}.pl-xl-12,.px-xl-12{padding-left:48px !important}.pb-xl-12,.py-xl-12{padding-bottom:48px !important}.ps-xl-12{padding-inline-start:48px !important}.pe-xl-12{padding-inline-end:48px !important}.pa-xl-12{padding:48px !important}.pt-xl-13,.py-xl-13{padding-top:52px !important}.pr-xl-13,.px-xl-13{padding-right:52px !important}.pl-xl-13,.px-xl-13{padding-left:52px !important}.pb-xl-13,.py-xl-13{padding-bottom:52px !important}.ps-xl-13{padding-inline-start:52px !important}.pe-xl-13{padding-inline-end:52px !important}.pa-xl-13{padding:52px !important}.pt-xl-14,.py-xl-14{padding-top:56px !important}.pr-xl-14,.px-xl-14{padding-right:56px !important}.pl-xl-14,.px-xl-14{padding-left:56px !important}.pb-xl-14,.py-xl-14{padding-bottom:56px !important}.ps-xl-14{padding-inline-start:56px !important}.pe-xl-14{padding-inline-end:56px !important}.pa-xl-14{padding:56px !important}.pt-xl-15,.py-xl-15{padding-top:60px !important}.pr-xl-15,.px-xl-15{padding-right:60px !important}.pl-xl-15,.px-xl-15{padding-left:60px !important}.pb-xl-15,.py-xl-15{padding-bottom:60px !important}.ps-xl-15{padding-inline-start:60px !important}.pe-xl-15{padding-inline-end:60px !important}.pa-xl-15{padding:60px !important}.pt-xl-16,.py-xl-16{padding-top:64px !important}.pr-xl-16,.px-xl-16{padding-right:64px !important}.pl-xl-16,.px-xl-16{padding-left:64px !important}.pb-xl-16,.py-xl-16{padding-bottom:64px !important}.ps-xl-16{padding-inline-start:64px !important}.pe-xl-16{padding-inline-end:64px !important}.pa-xl-16{padding:64px !important}.pt-xl-17,.py-xl-17{padding-top:68px !important}.pr-xl-17,.px-xl-17{padding-right:68px !important}.pl-xl-17,.px-xl-17{padding-left:68px !important}.pb-xl-17,.py-xl-17{padding-bottom:68px !important}.ps-xl-17{padding-inline-start:68px !important}.pe-xl-17{padding-inline-end:68px !important}.pa-xl-17{padding:68px !important}.pt-xl-18,.py-xl-18{padding-top:72px !important}.pr-xl-18,.px-xl-18{padding-right:72px !important}.pl-xl-18,.px-xl-18{padding-left:72px !important}.pb-xl-18,.py-xl-18{padding-bottom:72px !important}.ps-xl-18{padding-inline-start:72px !important}.pe-xl-18{padding-inline-end:72px !important}.pa-xl-18{padding:72px !important}.pt-xl-19,.py-xl-19{padding-top:76px !important}.pr-xl-19,.px-xl-19{padding-right:76px !important}.pl-xl-19,.px-xl-19{padding-left:76px !important}.pb-xl-19,.py-xl-19{padding-bottom:76px !important}.ps-xl-19{padding-inline-start:76px !important}.pe-xl-19{padding-inline-end:76px !important}.pa-xl-19{padding:76px !important}.pt-xl-20,.py-xl-20{padding-top:80px !important}.pr-xl-20,.px-xl-20{padding-right:80px !important}.pl-xl-20,.px-xl-20{padding-left:80px !important}.pb-xl-20,.py-xl-20{padding-bottom:80px !important}.ps-xl-20{padding-inline-start:80px !important}.pe-xl-20{padding-inline-end:80px !important}.pa-xl-20{padding:80px !important}.pt-xl-auto,.py-xl-auto{padding-top:auto !important}.pr-xl-auto,.px-xl-auto{padding-right:auto !important}.pl-xl-auto,.px-xl-auto{padding-left:auto !important}.pb-xl-auto,.py-xl-auto{padding-bottom:auto !important}.ps-xl-auto{padding-inline-start:auto !important}.pe-xl-auto{padding-inline-end:auto !important}.pa-xl-auto{padding:auto !important}.mt-xl-n1,.my-xl-n1{margin-top:-4px !important}.mr-xl-n1,.mx-xl-n1{margin-right:-4px !important}.ml-xl-n1,.mx-xl-n1{margin-left:-4px !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-4px !important}.ms-xl-n1{margin-inline-start:-4px !important}.me-xl-n1{margin-inline-end:-4px !important}.ma-xl-n1{margin:-4px !important}.mt-xl-n2,.my-xl-n2{margin-top:-8px !important}.mr-xl-n2,.mx-xl-n2{margin-right:-8px !important}.ml-xl-n2,.mx-xl-n2{margin-left:-8px !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-8px !important}.ms-xl-n2{margin-inline-start:-8px !important}.me-xl-n2{margin-inline-end:-8px !important}.ma-xl-n2{margin:-8px !important}.mt-xl-n3,.my-xl-n3{margin-top:-12px !important}.mr-xl-n3,.mx-xl-n3{margin-right:-12px !important}.ml-xl-n3,.mx-xl-n3{margin-left:-12px !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-12px !important}.ms-xl-n3{margin-inline-start:-12px !important}.me-xl-n3{margin-inline-end:-12px !important}.ma-xl-n3{margin:-12px !important}.mt-xl-n4,.my-xl-n4{margin-top:-16px !important}.mr-xl-n4,.mx-xl-n4{margin-right:-16px !important}.ml-xl-n4,.mx-xl-n4{margin-left:-16px !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-16px !important}.ms-xl-n4{margin-inline-start:-16px !important}.me-xl-n4{margin-inline-end:-16px !important}.ma-xl-n4{margin:-16px !important}.mt-xl-n5,.my-xl-n5{margin-top:-20px !important}.mr-xl-n5,.mx-xl-n5{margin-right:-20px !important}.ml-xl-n5,.mx-xl-n5{margin-left:-20px !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-20px !important}.ms-xl-n5{margin-inline-start:-20px !important}.me-xl-n5{margin-inline-end:-20px !important}.ma-xl-n5{margin:-20px !important}.mt-xl-n6,.my-xl-n6{margin-top:-24px !important}.mr-xl-n6,.mx-xl-n6{margin-right:-24px !important}.ml-xl-n6,.mx-xl-n6{margin-left:-24px !important}.mb-xl-n6,.my-xl-n6{margin-bottom:-24px !important}.ms-xl-n6{margin-inline-start:-24px !important}.me-xl-n6{margin-inline-end:-24px !important}.ma-xl-n6{margin:-24px !important}.mt-xl-n7,.my-xl-n7{margin-top:-28px !important}.mr-xl-n7,.mx-xl-n7{margin-right:-28px !important}.ml-xl-n7,.mx-xl-n7{margin-left:-28px !important}.mb-xl-n7,.my-xl-n7{margin-bottom:-28px !important}.ms-xl-n7{margin-inline-start:-28px !important}.me-xl-n7{margin-inline-end:-28px !important}.ma-xl-n7{margin:-28px !important}.mt-xl-n8,.my-xl-n8{margin-top:-32px !important}.mr-xl-n8,.mx-xl-n8{margin-right:-32px !important}.ml-xl-n8,.mx-xl-n8{margin-left:-32px !important}.mb-xl-n8,.my-xl-n8{margin-bottom:-32px !important}.ms-xl-n8{margin-inline-start:-32px !important}.me-xl-n8{margin-inline-end:-32px !important}.ma-xl-n8{margin:-32px !important}.mt-xl-n9,.my-xl-n9{margin-top:-36px !important}.mr-xl-n9,.mx-xl-n9{margin-right:-36px !important}.ml-xl-n9,.mx-xl-n9{margin-left:-36px !important}.mb-xl-n9,.my-xl-n9{margin-bottom:-36px !important}.ms-xl-n9{margin-inline-start:-36px !important}.me-xl-n9{margin-inline-end:-36px !important}.ma-xl-n9{margin:-36px !important}.mt-xl-n10,.my-xl-n10{margin-top:-40px !important}.mr-xl-n10,.mx-xl-n10{margin-right:-40px !important}.ml-xl-n10,.mx-xl-n10{margin-left:-40px !important}.mb-xl-n10,.my-xl-n10{margin-bottom:-40px !important}.ms-xl-n10{margin-inline-start:-40px !important}.me-xl-n10{margin-inline-end:-40px !important}.ma-xl-n10{margin:-40px !important}.mt-xl-n11,.my-xl-n11{margin-top:-44px !important}.mr-xl-n11,.mx-xl-n11{margin-right:-44px !important}.ml-xl-n11,.mx-xl-n11{margin-left:-44px !important}.mb-xl-n11,.my-xl-n11{margin-bottom:-44px !important}.ms-xl-n11{margin-inline-start:-44px !important}.me-xl-n11{margin-inline-end:-44px !important}.ma-xl-n11{margin:-44px !important}.mt-xl-n12,.my-xl-n12{margin-top:-48px !important}.mr-xl-n12,.mx-xl-n12{margin-right:-48px !important}.ml-xl-n12,.mx-xl-n12{margin-left:-48px !important}.mb-xl-n12,.my-xl-n12{margin-bottom:-48px !important}.ms-xl-n12{margin-inline-start:-48px !important}.me-xl-n12{margin-inline-end:-48px !important}.ma-xl-n12{margin:-48px !important}.mt-xl-n13,.my-xl-n13{margin-top:-52px !important}.mr-xl-n13,.mx-xl-n13{margin-right:-52px !important}.ml-xl-n13,.mx-xl-n13{margin-left:-52px !important}.mb-xl-n13,.my-xl-n13{margin-bottom:-52px !important}.ms-xl-n13{margin-inline-start:-52px !important}.me-xl-n13{margin-inline-end:-52px !important}.ma-xl-n13{margin:-52px !important}.mt-xl-n14,.my-xl-n14{margin-top:-56px !important}.mr-xl-n14,.mx-xl-n14{margin-right:-56px !important}.ml-xl-n14,.mx-xl-n14{margin-left:-56px !important}.mb-xl-n14,.my-xl-n14{margin-bottom:-56px !important}.ms-xl-n14{margin-inline-start:-56px !important}.me-xl-n14{margin-inline-end:-56px !important}.ma-xl-n14{margin:-56px !important}.mt-xl-n15,.my-xl-n15{margin-top:-60px !important}.mr-xl-n15,.mx-xl-n15{margin-right:-60px !important}.ml-xl-n15,.mx-xl-n15{margin-left:-60px !important}.mb-xl-n15,.my-xl-n15{margin-bottom:-60px !important}.ms-xl-n15{margin-inline-start:-60px !important}.me-xl-n15{margin-inline-end:-60px !important}.ma-xl-n15{margin:-60px !important}.mt-xl-n16,.my-xl-n16{margin-top:-64px !important}.mr-xl-n16,.mx-xl-n16{margin-right:-64px !important}.ml-xl-n16,.mx-xl-n16{margin-left:-64px !important}.mb-xl-n16,.my-xl-n16{margin-bottom:-64px !important}.ms-xl-n16{margin-inline-start:-64px !important}.me-xl-n16{margin-inline-end:-64px !important}.ma-xl-n16{margin:-64px !important}.mt-xl-n17,.my-xl-n17{margin-top:-68px !important}.mr-xl-n17,.mx-xl-n17{margin-right:-68px !important}.ml-xl-n17,.mx-xl-n17{margin-left:-68px !important}.mb-xl-n17,.my-xl-n17{margin-bottom:-68px !important}.ms-xl-n17{margin-inline-start:-68px !important}.me-xl-n17{margin-inline-end:-68px !important}.ma-xl-n17{margin:-68px !important}.mt-xl-n18,.my-xl-n18{margin-top:-72px !important}.mr-xl-n18,.mx-xl-n18{margin-right:-72px !important}.ml-xl-n18,.mx-xl-n18{margin-left:-72px !important}.mb-xl-n18,.my-xl-n18{margin-bottom:-72px !important}.ms-xl-n18{margin-inline-start:-72px !important}.me-xl-n18{margin-inline-end:-72px !important}.ma-xl-n18{margin:-72px !important}.mt-xl-n19,.my-xl-n19{margin-top:-76px !important}.mr-xl-n19,.mx-xl-n19{margin-right:-76px !important}.ml-xl-n19,.mx-xl-n19{margin-left:-76px !important}.mb-xl-n19,.my-xl-n19{margin-bottom:-76px !important}.ms-xl-n19{margin-inline-start:-76px !important}.me-xl-n19{margin-inline-end:-76px !important}.ma-xl-n19{margin:-76px !important}.mt-xl-n20,.my-xl-n20{margin-top:-80px !important}.mr-xl-n20,.mx-xl-n20{margin-right:-80px !important}.ml-xl-n20,.mx-xl-n20{margin-left:-80px !important}.mb-xl-n20,.my-xl-n20{margin-bottom:-80px !important}.ms-xl-n20{margin-inline-start:-80px !important}.me-xl-n20{margin-inline-end:-80px !important}.ma-xl-n20{margin:-80px !important}}@media screen and (min-width: 2560px){.mt-xxl-0,.my-xxl-0{margin-top:0 !important}.mr-xxl-0,.mx-xxl-0{margin-right:0 !important}.ml-xxl-0,.mx-xxl-0{margin-left:0 !important}.mb-xxl-0,.my-xxl-0{margin-bottom:0 !important}.ms-xxl-0{margin-inline-start:0 !important}.me-xxl-0{margin-inline-end:0 !important}.ma-xxl-0{margin:0 !important}.mt-xxl-1,.my-xxl-1{margin-top:4px !important}.mr-xxl-1,.mx-xxl-1{margin-right:4px !important}.ml-xxl-1,.mx-xxl-1{margin-left:4px !important}.mb-xxl-1,.my-xxl-1{margin-bottom:4px !important}.ms-xxl-1{margin-inline-start:4px !important}.me-xxl-1{margin-inline-end:4px !important}.ma-xxl-1{margin:4px !important}.mt-xxl-2,.my-xxl-2{margin-top:8px !important}.mr-xxl-2,.mx-xxl-2{margin-right:8px !important}.ml-xxl-2,.mx-xxl-2{margin-left:8px !important}.mb-xxl-2,.my-xxl-2{margin-bottom:8px !important}.ms-xxl-2{margin-inline-start:8px !important}.me-xxl-2{margin-inline-end:8px !important}.ma-xxl-2{margin:8px !important}.mt-xxl-3,.my-xxl-3{margin-top:12px !important}.mr-xxl-3,.mx-xxl-3{margin-right:12px !important}.ml-xxl-3,.mx-xxl-3{margin-left:12px !important}.mb-xxl-3,.my-xxl-3{margin-bottom:12px !important}.ms-xxl-3{margin-inline-start:12px !important}.me-xxl-3{margin-inline-end:12px !important}.ma-xxl-3{margin:12px !important}.mt-xxl-4,.my-xxl-4{margin-top:16px !important}.mr-xxl-4,.mx-xxl-4{margin-right:16px !important}.ml-xxl-4,.mx-xxl-4{margin-left:16px !important}.mb-xxl-4,.my-xxl-4{margin-bottom:16px !important}.ms-xxl-4{margin-inline-start:16px !important}.me-xxl-4{margin-inline-end:16px !important}.ma-xxl-4{margin:16px !important}.mt-xxl-5,.my-xxl-5{margin-top:20px !important}.mr-xxl-5,.mx-xxl-5{margin-right:20px !important}.ml-xxl-5,.mx-xxl-5{margin-left:20px !important}.mb-xxl-5,.my-xxl-5{margin-bottom:20px !important}.ms-xxl-5{margin-inline-start:20px !important}.me-xxl-5{margin-inline-end:20px !important}.ma-xxl-5{margin:20px !important}.mt-xxl-6,.my-xxl-6{margin-top:24px !important}.mr-xxl-6,.mx-xxl-6{margin-right:24px !important}.ml-xxl-6,.mx-xxl-6{margin-left:24px !important}.mb-xxl-6,.my-xxl-6{margin-bottom:24px !important}.ms-xxl-6{margin-inline-start:24px !important}.me-xxl-6{margin-inline-end:24px !important}.ma-xxl-6{margin:24px !important}.mt-xxl-7,.my-xxl-7{margin-top:28px !important}.mr-xxl-7,.mx-xxl-7{margin-right:28px !important}.ml-xxl-7,.mx-xxl-7{margin-left:28px !important}.mb-xxl-7,.my-xxl-7{margin-bottom:28px !important}.ms-xxl-7{margin-inline-start:28px !important}.me-xxl-7{margin-inline-end:28px !important}.ma-xxl-7{margin:28px !important}.mt-xxl-8,.my-xxl-8{margin-top:32px !important}.mr-xxl-8,.mx-xxl-8{margin-right:32px !important}.ml-xxl-8,.mx-xxl-8{margin-left:32px !important}.mb-xxl-8,.my-xxl-8{margin-bottom:32px !important}.ms-xxl-8{margin-inline-start:32px !important}.me-xxl-8{margin-inline-end:32px !important}.ma-xxl-8{margin:32px !important}.mt-xxl-9,.my-xxl-9{margin-top:36px !important}.mr-xxl-9,.mx-xxl-9{margin-right:36px !important}.ml-xxl-9,.mx-xxl-9{margin-left:36px !important}.mb-xxl-9,.my-xxl-9{margin-bottom:36px !important}.ms-xxl-9{margin-inline-start:36px !important}.me-xxl-9{margin-inline-end:36px !important}.ma-xxl-9{margin:36px !important}.mt-xxl-10,.my-xxl-10{margin-top:40px !important}.mr-xxl-10,.mx-xxl-10{margin-right:40px !important}.ml-xxl-10,.mx-xxl-10{margin-left:40px !important}.mb-xxl-10,.my-xxl-10{margin-bottom:40px !important}.ms-xxl-10{margin-inline-start:40px !important}.me-xxl-10{margin-inline-end:40px !important}.ma-xxl-10{margin:40px !important}.mt-xxl-11,.my-xxl-11{margin-top:44px !important}.mr-xxl-11,.mx-xxl-11{margin-right:44px !important}.ml-xxl-11,.mx-xxl-11{margin-left:44px !important}.mb-xxl-11,.my-xxl-11{margin-bottom:44px !important}.ms-xxl-11{margin-inline-start:44px !important}.me-xxl-11{margin-inline-end:44px !important}.ma-xxl-11{margin:44px !important}.mt-xxl-12,.my-xxl-12{margin-top:48px !important}.mr-xxl-12,.mx-xxl-12{margin-right:48px !important}.ml-xxl-12,.mx-xxl-12{margin-left:48px !important}.mb-xxl-12,.my-xxl-12{margin-bottom:48px !important}.ms-xxl-12{margin-inline-start:48px !important}.me-xxl-12{margin-inline-end:48px !important}.ma-xxl-12{margin:48px !important}.mt-xxl-13,.my-xxl-13{margin-top:52px !important}.mr-xxl-13,.mx-xxl-13{margin-right:52px !important}.ml-xxl-13,.mx-xxl-13{margin-left:52px !important}.mb-xxl-13,.my-xxl-13{margin-bottom:52px !important}.ms-xxl-13{margin-inline-start:52px !important}.me-xxl-13{margin-inline-end:52px !important}.ma-xxl-13{margin:52px !important}.mt-xxl-14,.my-xxl-14{margin-top:56px !important}.mr-xxl-14,.mx-xxl-14{margin-right:56px !important}.ml-xxl-14,.mx-xxl-14{margin-left:56px !important}.mb-xxl-14,.my-xxl-14{margin-bottom:56px !important}.ms-xxl-14{margin-inline-start:56px !important}.me-xxl-14{margin-inline-end:56px !important}.ma-xxl-14{margin:56px !important}.mt-xxl-15,.my-xxl-15{margin-top:60px !important}.mr-xxl-15,.mx-xxl-15{margin-right:60px !important}.ml-xxl-15,.mx-xxl-15{margin-left:60px !important}.mb-xxl-15,.my-xxl-15{margin-bottom:60px !important}.ms-xxl-15{margin-inline-start:60px !important}.me-xxl-15{margin-inline-end:60px !important}.ma-xxl-15{margin:60px !important}.mt-xxl-16,.my-xxl-16{margin-top:64px !important}.mr-xxl-16,.mx-xxl-16{margin-right:64px !important}.ml-xxl-16,.mx-xxl-16{margin-left:64px !important}.mb-xxl-16,.my-xxl-16{margin-bottom:64px !important}.ms-xxl-16{margin-inline-start:64px !important}.me-xxl-16{margin-inline-end:64px !important}.ma-xxl-16{margin:64px !important}.mt-xxl-17,.my-xxl-17{margin-top:68px !important}.mr-xxl-17,.mx-xxl-17{margin-right:68px !important}.ml-xxl-17,.mx-xxl-17{margin-left:68px !important}.mb-xxl-17,.my-xxl-17{margin-bottom:68px !important}.ms-xxl-17{margin-inline-start:68px !important}.me-xxl-17{margin-inline-end:68px !important}.ma-xxl-17{margin:68px !important}.mt-xxl-18,.my-xxl-18{margin-top:72px !important}.mr-xxl-18,.mx-xxl-18{margin-right:72px !important}.ml-xxl-18,.mx-xxl-18{margin-left:72px !important}.mb-xxl-18,.my-xxl-18{margin-bottom:72px !important}.ms-xxl-18{margin-inline-start:72px !important}.me-xxl-18{margin-inline-end:72px !important}.ma-xxl-18{margin:72px !important}.mt-xxl-19,.my-xxl-19{margin-top:76px !important}.mr-xxl-19,.mx-xxl-19{margin-right:76px !important}.ml-xxl-19,.mx-xxl-19{margin-left:76px !important}.mb-xxl-19,.my-xxl-19{margin-bottom:76px !important}.ms-xxl-19{margin-inline-start:76px !important}.me-xxl-19{margin-inline-end:76px !important}.ma-xxl-19{margin:76px !important}.mt-xxl-20,.my-xxl-20{margin-top:80px !important}.mr-xxl-20,.mx-xxl-20{margin-right:80px !important}.ml-xxl-20,.mx-xxl-20{margin-left:80px !important}.mb-xxl-20,.my-xxl-20{margin-bottom:80px !important}.ms-xxl-20{margin-inline-start:80px !important}.me-xxl-20{margin-inline-end:80px !important}.ma-xxl-20{margin:80px !important}.mt-xxl-auto,.my-xxl-auto{margin-top:auto !important}.mr-xxl-auto,.mx-xxl-auto{margin-right:auto !important}.ml-xxl-auto,.mx-xxl-auto{margin-left:auto !important}.mb-xxl-auto,.my-xxl-auto{margin-bottom:auto !important}.ms-xxl-auto{margin-inline-start:auto !important}.me-xxl-auto{margin-inline-end:auto !important}.ma-xxl-auto{margin:auto !important}.pt-xxl-0,.py-xxl-0{padding-top:0 !important}.pr-xxl-0,.px-xxl-0{padding-right:0 !important}.pl-xxl-0,.px-xxl-0{padding-left:0 !important}.pb-xxl-0,.py-xxl-0{padding-bottom:0 !important}.ps-xxl-0{padding-inline-start:0 !important}.pe-xxl-0{padding-inline-end:0 !important}.pa-xxl-0{padding:0 !important}.pt-xxl-1,.py-xxl-1{padding-top:4px !important}.pr-xxl-1,.px-xxl-1{padding-right:4px !important}.pl-xxl-1,.px-xxl-1{padding-left:4px !important}.pb-xxl-1,.py-xxl-1{padding-bottom:4px !important}.ps-xxl-1{padding-inline-start:4px !important}.pe-xxl-1{padding-inline-end:4px !important}.pa-xxl-1{padding:4px !important}.pt-xxl-2,.py-xxl-2{padding-top:8px !important}.pr-xxl-2,.px-xxl-2{padding-right:8px !important}.pl-xxl-2,.px-xxl-2{padding-left:8px !important}.pb-xxl-2,.py-xxl-2{padding-bottom:8px !important}.ps-xxl-2{padding-inline-start:8px !important}.pe-xxl-2{padding-inline-end:8px !important}.pa-xxl-2{padding:8px !important}.pt-xxl-3,.py-xxl-3{padding-top:12px !important}.pr-xxl-3,.px-xxl-3{padding-right:12px !important}.pl-xxl-3,.px-xxl-3{padding-left:12px !important}.pb-xxl-3,.py-xxl-3{padding-bottom:12px !important}.ps-xxl-3{padding-inline-start:12px !important}.pe-xxl-3{padding-inline-end:12px !important}.pa-xxl-3{padding:12px !important}.pt-xxl-4,.py-xxl-4{padding-top:16px !important}.pr-xxl-4,.px-xxl-4{padding-right:16px !important}.pl-xxl-4,.px-xxl-4{padding-left:16px !important}.pb-xxl-4,.py-xxl-4{padding-bottom:16px !important}.ps-xxl-4{padding-inline-start:16px !important}.pe-xxl-4{padding-inline-end:16px !important}.pa-xxl-4{padding:16px !important}.pt-xxl-5,.py-xxl-5{padding-top:20px !important}.pr-xxl-5,.px-xxl-5{padding-right:20px !important}.pl-xxl-5,.px-xxl-5{padding-left:20px !important}.pb-xxl-5,.py-xxl-5{padding-bottom:20px !important}.ps-xxl-5{padding-inline-start:20px !important}.pe-xxl-5{padding-inline-end:20px !important}.pa-xxl-5{padding:20px !important}.pt-xxl-6,.py-xxl-6{padding-top:24px !important}.pr-xxl-6,.px-xxl-6{padding-right:24px !important}.pl-xxl-6,.px-xxl-6{padding-left:24px !important}.pb-xxl-6,.py-xxl-6{padding-bottom:24px !important}.ps-xxl-6{padding-inline-start:24px !important}.pe-xxl-6{padding-inline-end:24px !important}.pa-xxl-6{padding:24px !important}.pt-xxl-7,.py-xxl-7{padding-top:28px !important}.pr-xxl-7,.px-xxl-7{padding-right:28px !important}.pl-xxl-7,.px-xxl-7{padding-left:28px !important}.pb-xxl-7,.py-xxl-7{padding-bottom:28px !important}.ps-xxl-7{padding-inline-start:28px !important}.pe-xxl-7{padding-inline-end:28px !important}.pa-xxl-7{padding:28px !important}.pt-xxl-8,.py-xxl-8{padding-top:32px !important}.pr-xxl-8,.px-xxl-8{padding-right:32px !important}.pl-xxl-8,.px-xxl-8{padding-left:32px !important}.pb-xxl-8,.py-xxl-8{padding-bottom:32px !important}.ps-xxl-8{padding-inline-start:32px !important}.pe-xxl-8{padding-inline-end:32px !important}.pa-xxl-8{padding:32px !important}.pt-xxl-9,.py-xxl-9{padding-top:36px !important}.pr-xxl-9,.px-xxl-9{padding-right:36px !important}.pl-xxl-9,.px-xxl-9{padding-left:36px !important}.pb-xxl-9,.py-xxl-9{padding-bottom:36px !important}.ps-xxl-9{padding-inline-start:36px !important}.pe-xxl-9{padding-inline-end:36px !important}.pa-xxl-9{padding:36px !important}.pt-xxl-10,.py-xxl-10{padding-top:40px !important}.pr-xxl-10,.px-xxl-10{padding-right:40px !important}.pl-xxl-10,.px-xxl-10{padding-left:40px !important}.pb-xxl-10,.py-xxl-10{padding-bottom:40px !important}.ps-xxl-10{padding-inline-start:40px !important}.pe-xxl-10{padding-inline-end:40px !important}.pa-xxl-10{padding:40px !important}.pt-xxl-11,.py-xxl-11{padding-top:44px !important}.pr-xxl-11,.px-xxl-11{padding-right:44px !important}.pl-xxl-11,.px-xxl-11{padding-left:44px !important}.pb-xxl-11,.py-xxl-11{padding-bottom:44px !important}.ps-xxl-11{padding-inline-start:44px !important}.pe-xxl-11{padding-inline-end:44px !important}.pa-xxl-11{padding:44px !important}.pt-xxl-12,.py-xxl-12{padding-top:48px !important}.pr-xxl-12,.px-xxl-12{padding-right:48px !important}.pl-xxl-12,.px-xxl-12{padding-left:48px !important}.pb-xxl-12,.py-xxl-12{padding-bottom:48px !important}.ps-xxl-12{padding-inline-start:48px !important}.pe-xxl-12{padding-inline-end:48px !important}.pa-xxl-12{padding:48px !important}.pt-xxl-13,.py-xxl-13{padding-top:52px !important}.pr-xxl-13,.px-xxl-13{padding-right:52px !important}.pl-xxl-13,.px-xxl-13{padding-left:52px !important}.pb-xxl-13,.py-xxl-13{padding-bottom:52px !important}.ps-xxl-13{padding-inline-start:52px !important}.pe-xxl-13{padding-inline-end:52px !important}.pa-xxl-13{padding:52px !important}.pt-xxl-14,.py-xxl-14{padding-top:56px !important}.pr-xxl-14,.px-xxl-14{padding-right:56px !important}.pl-xxl-14,.px-xxl-14{padding-left:56px !important}.pb-xxl-14,.py-xxl-14{padding-bottom:56px !important}.ps-xxl-14{padding-inline-start:56px !important}.pe-xxl-14{padding-inline-end:56px !important}.pa-xxl-14{padding:56px !important}.pt-xxl-15,.py-xxl-15{padding-top:60px !important}.pr-xxl-15,.px-xxl-15{padding-right:60px !important}.pl-xxl-15,.px-xxl-15{padding-left:60px !important}.pb-xxl-15,.py-xxl-15{padding-bottom:60px !important}.ps-xxl-15{padding-inline-start:60px !important}.pe-xxl-15{padding-inline-end:60px !important}.pa-xxl-15{padding:60px !important}.pt-xxl-16,.py-xxl-16{padding-top:64px !important}.pr-xxl-16,.px-xxl-16{padding-right:64px !important}.pl-xxl-16,.px-xxl-16{padding-left:64px !important}.pb-xxl-16,.py-xxl-16{padding-bottom:64px !important}.ps-xxl-16{padding-inline-start:64px !important}.pe-xxl-16{padding-inline-end:64px !important}.pa-xxl-16{padding:64px !important}.pt-xxl-17,.py-xxl-17{padding-top:68px !important}.pr-xxl-17,.px-xxl-17{padding-right:68px !important}.pl-xxl-17,.px-xxl-17{padding-left:68px !important}.pb-xxl-17,.py-xxl-17{padding-bottom:68px !important}.ps-xxl-17{padding-inline-start:68px !important}.pe-xxl-17{padding-inline-end:68px !important}.pa-xxl-17{padding:68px !important}.pt-xxl-18,.py-xxl-18{padding-top:72px !important}.pr-xxl-18,.px-xxl-18{padding-right:72px !important}.pl-xxl-18,.px-xxl-18{padding-left:72px !important}.pb-xxl-18,.py-xxl-18{padding-bottom:72px !important}.ps-xxl-18{padding-inline-start:72px !important}.pe-xxl-18{padding-inline-end:72px !important}.pa-xxl-18{padding:72px !important}.pt-xxl-19,.py-xxl-19{padding-top:76px !important}.pr-xxl-19,.px-xxl-19{padding-right:76px !important}.pl-xxl-19,.px-xxl-19{padding-left:76px !important}.pb-xxl-19,.py-xxl-19{padding-bottom:76px !important}.ps-xxl-19{padding-inline-start:76px !important}.pe-xxl-19{padding-inline-end:76px !important}.pa-xxl-19{padding:76px !important}.pt-xxl-20,.py-xxl-20{padding-top:80px !important}.pr-xxl-20,.px-xxl-20{padding-right:80px !important}.pl-xxl-20,.px-xxl-20{padding-left:80px !important}.pb-xxl-20,.py-xxl-20{padding-bottom:80px !important}.ps-xxl-20{padding-inline-start:80px !important}.pe-xxl-20{padding-inline-end:80px !important}.pa-xxl-20{padding:80px !important}.pt-xxl-auto,.py-xxl-auto{padding-top:auto !important}.pr-xxl-auto,.px-xxl-auto{padding-right:auto !important}.pl-xxl-auto,.px-xxl-auto{padding-left:auto !important}.pb-xxl-auto,.py-xxl-auto{padding-bottom:auto !important}.ps-xxl-auto{padding-inline-start:auto !important}.pe-xxl-auto{padding-inline-end:auto !important}.pa-xxl-auto{padding:auto !important}.mt-xxl-n1,.my-xxl-n1{margin-top:-4px !important}.mr-xxl-n1,.mx-xxl-n1{margin-right:-4px !important}.ml-xxl-n1,.mx-xxl-n1{margin-left:-4px !important}.mb-xxl-n1,.my-xxl-n1{margin-bottom:-4px !important}.ms-xxl-n1{margin-inline-start:-4px !important}.me-xxl-n1{margin-inline-end:-4px !important}.ma-xxl-n1{margin:-4px !important}.mt-xxl-n2,.my-xxl-n2{margin-top:-8px !important}.mr-xxl-n2,.mx-xxl-n2{margin-right:-8px !important}.ml-xxl-n2,.mx-xxl-n2{margin-left:-8px !important}.mb-xxl-n2,.my-xxl-n2{margin-bottom:-8px !important}.ms-xxl-n2{margin-inline-start:-8px !important}.me-xxl-n2{margin-inline-end:-8px !important}.ma-xxl-n2{margin:-8px !important}.mt-xxl-n3,.my-xxl-n3{margin-top:-12px !important}.mr-xxl-n3,.mx-xxl-n3{margin-right:-12px !important}.ml-xxl-n3,.mx-xxl-n3{margin-left:-12px !important}.mb-xxl-n3,.my-xxl-n3{margin-bottom:-12px !important}.ms-xxl-n3{margin-inline-start:-12px !important}.me-xxl-n3{margin-inline-end:-12px !important}.ma-xxl-n3{margin:-12px !important}.mt-xxl-n4,.my-xxl-n4{margin-top:-16px !important}.mr-xxl-n4,.mx-xxl-n4{margin-right:-16px !important}.ml-xxl-n4,.mx-xxl-n4{margin-left:-16px !important}.mb-xxl-n4,.my-xxl-n4{margin-bottom:-16px !important}.ms-xxl-n4{margin-inline-start:-16px !important}.me-xxl-n4{margin-inline-end:-16px !important}.ma-xxl-n4{margin:-16px !important}.mt-xxl-n5,.my-xxl-n5{margin-top:-20px !important}.mr-xxl-n5,.mx-xxl-n5{margin-right:-20px !important}.ml-xxl-n5,.mx-xxl-n5{margin-left:-20px !important}.mb-xxl-n5,.my-xxl-n5{margin-bottom:-20px !important}.ms-xxl-n5{margin-inline-start:-20px !important}.me-xxl-n5{margin-inline-end:-20px !important}.ma-xxl-n5{margin:-20px !important}.mt-xxl-n6,.my-xxl-n6{margin-top:-24px !important}.mr-xxl-n6,.mx-xxl-n6{margin-right:-24px !important}.ml-xxl-n6,.mx-xxl-n6{margin-left:-24px !important}.mb-xxl-n6,.my-xxl-n6{margin-bottom:-24px !important}.ms-xxl-n6{margin-inline-start:-24px !important}.me-xxl-n6{margin-inline-end:-24px !important}.ma-xxl-n6{margin:-24px !important}.mt-xxl-n7,.my-xxl-n7{margin-top:-28px !important}.mr-xxl-n7,.mx-xxl-n7{margin-right:-28px !important}.ml-xxl-n7,.mx-xxl-n7{margin-left:-28px !important}.mb-xxl-n7,.my-xxl-n7{margin-bottom:-28px !important}.ms-xxl-n7{margin-inline-start:-28px !important}.me-xxl-n7{margin-inline-end:-28px !important}.ma-xxl-n7{margin:-28px !important}.mt-xxl-n8,.my-xxl-n8{margin-top:-32px !important}.mr-xxl-n8,.mx-xxl-n8{margin-right:-32px !important}.ml-xxl-n8,.mx-xxl-n8{margin-left:-32px !important}.mb-xxl-n8,.my-xxl-n8{margin-bottom:-32px !important}.ms-xxl-n8{margin-inline-start:-32px !important}.me-xxl-n8{margin-inline-end:-32px !important}.ma-xxl-n8{margin:-32px !important}.mt-xxl-n9,.my-xxl-n9{margin-top:-36px !important}.mr-xxl-n9,.mx-xxl-n9{margin-right:-36px !important}.ml-xxl-n9,.mx-xxl-n9{margin-left:-36px !important}.mb-xxl-n9,.my-xxl-n9{margin-bottom:-36px !important}.ms-xxl-n9{margin-inline-start:-36px !important}.me-xxl-n9{margin-inline-end:-36px !important}.ma-xxl-n9{margin:-36px !important}.mt-xxl-n10,.my-xxl-n10{margin-top:-40px !important}.mr-xxl-n10,.mx-xxl-n10{margin-right:-40px !important}.ml-xxl-n10,.mx-xxl-n10{margin-left:-40px !important}.mb-xxl-n10,.my-xxl-n10{margin-bottom:-40px !important}.ms-xxl-n10{margin-inline-start:-40px !important}.me-xxl-n10{margin-inline-end:-40px !important}.ma-xxl-n10{margin:-40px !important}.mt-xxl-n11,.my-xxl-n11{margin-top:-44px !important}.mr-xxl-n11,.mx-xxl-n11{margin-right:-44px !important}.ml-xxl-n11,.mx-xxl-n11{margin-left:-44px !important}.mb-xxl-n11,.my-xxl-n11{margin-bottom:-44px !important}.ms-xxl-n11{margin-inline-start:-44px !important}.me-xxl-n11{margin-inline-end:-44px !important}.ma-xxl-n11{margin:-44px !important}.mt-xxl-n12,.my-xxl-n12{margin-top:-48px !important}.mr-xxl-n12,.mx-xxl-n12{margin-right:-48px !important}.ml-xxl-n12,.mx-xxl-n12{margin-left:-48px !important}.mb-xxl-n12,.my-xxl-n12{margin-bottom:-48px !important}.ms-xxl-n12{margin-inline-start:-48px !important}.me-xxl-n12{margin-inline-end:-48px !important}.ma-xxl-n12{margin:-48px !important}.mt-xxl-n13,.my-xxl-n13{margin-top:-52px !important}.mr-xxl-n13,.mx-xxl-n13{margin-right:-52px !important}.ml-xxl-n13,.mx-xxl-n13{margin-left:-52px !important}.mb-xxl-n13,.my-xxl-n13{margin-bottom:-52px !important}.ms-xxl-n13{margin-inline-start:-52px !important}.me-xxl-n13{margin-inline-end:-52px !important}.ma-xxl-n13{margin:-52px !important}.mt-xxl-n14,.my-xxl-n14{margin-top:-56px !important}.mr-xxl-n14,.mx-xxl-n14{margin-right:-56px !important}.ml-xxl-n14,.mx-xxl-n14{margin-left:-56px !important}.mb-xxl-n14,.my-xxl-n14{margin-bottom:-56px !important}.ms-xxl-n14{margin-inline-start:-56px !important}.me-xxl-n14{margin-inline-end:-56px !important}.ma-xxl-n14{margin:-56px !important}.mt-xxl-n15,.my-xxl-n15{margin-top:-60px !important}.mr-xxl-n15,.mx-xxl-n15{margin-right:-60px !important}.ml-xxl-n15,.mx-xxl-n15{margin-left:-60px !important}.mb-xxl-n15,.my-xxl-n15{margin-bottom:-60px !important}.ms-xxl-n15{margin-inline-start:-60px !important}.me-xxl-n15{margin-inline-end:-60px !important}.ma-xxl-n15{margin:-60px !important}.mt-xxl-n16,.my-xxl-n16{margin-top:-64px !important}.mr-xxl-n16,.mx-xxl-n16{margin-right:-64px !important}.ml-xxl-n16,.mx-xxl-n16{margin-left:-64px !important}.mb-xxl-n16,.my-xxl-n16{margin-bottom:-64px !important}.ms-xxl-n16{margin-inline-start:-64px !important}.me-xxl-n16{margin-inline-end:-64px !important}.ma-xxl-n16{margin:-64px !important}.mt-xxl-n17,.my-xxl-n17{margin-top:-68px !important}.mr-xxl-n17,.mx-xxl-n17{margin-right:-68px !important}.ml-xxl-n17,.mx-xxl-n17{margin-left:-68px !important}.mb-xxl-n17,.my-xxl-n17{margin-bottom:-68px !important}.ms-xxl-n17{margin-inline-start:-68px !important}.me-xxl-n17{margin-inline-end:-68px !important}.ma-xxl-n17{margin:-68px !important}.mt-xxl-n18,.my-xxl-n18{margin-top:-72px !important}.mr-xxl-n18,.mx-xxl-n18{margin-right:-72px !important}.ml-xxl-n18,.mx-xxl-n18{margin-left:-72px !important}.mb-xxl-n18,.my-xxl-n18{margin-bottom:-72px !important}.ms-xxl-n18{margin-inline-start:-72px !important}.me-xxl-n18{margin-inline-end:-72px !important}.ma-xxl-n18{margin:-72px !important}.mt-xxl-n19,.my-xxl-n19{margin-top:-76px !important}.mr-xxl-n19,.mx-xxl-n19{margin-right:-76px !important}.ml-xxl-n19,.mx-xxl-n19{margin-left:-76px !important}.mb-xxl-n19,.my-xxl-n19{margin-bottom:-76px !important}.ms-xxl-n19{margin-inline-start:-76px !important}.me-xxl-n19{margin-inline-end:-76px !important}.ma-xxl-n19{margin:-76px !important}.mt-xxl-n20,.my-xxl-n20{margin-top:-80px !important}.mr-xxl-n20,.mx-xxl-n20{margin-right:-80px !important}.ml-xxl-n20,.mx-xxl-n20{margin-left:-80px !important}.mb-xxl-n20,.my-xxl-n20{margin-bottom:-80px !important}.ms-xxl-n20{margin-inline-start:-80px !important}.me-xxl-n20{margin-inline-end:-80px !important}.ma-xxl-n20{margin:-80px !important}}.mud-width-full{width:100%}.mud-height-full{height:100%}.w-max{width:max-content}.mud-appbar{width:100%;display:flex;z-index:var(--mud-zindex-appbar);position:relative;box-sizing:border-box;flex-shrink:0;flex-direction:column;color:var(--mud-palette-appbar-text);background-color:var(--mud-palette-appbar-background);transition:margin 225ms cubic-bezier(0, 0, 0.2, 1) 0ms,width 225ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-appbar.mud-appbar-fixed-top{position:fixed;top:0;right:0;left:0}.mud-appbar.mud-appbar-fixed-top .mud-popover-cascading-value{position:fixed}.mud-appbar.mud-appbar-fixed-bottom{position:fixed;bottom:0;right:0;left:0}.mud-appbar.mud-appbar-fixed-bottom .mud-popover-cascading-value{position:fixed}.mud-appbar .mud-toolbar-appbar{height:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8)}@media(min-width: 0px)and (orientation: landscape){.mud-appbar .mud-toolbar-appbar{height:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 600px){.mud-appbar .mud-toolbar-appbar{height:var(--mud-appbar-height)}}.mud-appbar.mud-appbar-dense .mud-toolbar-appbar{height:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4)}@media(min-width: 0px){.mud-drawer-open-responsive-xs-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-xs-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 600px){.mud-drawer-open-responsive-sm-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-sm-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 960px){.mud-drawer-open-responsive-md-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-md-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 1280px){.mud-drawer-open-responsive-lg-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-lg-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 1920px){.mud-drawer-open-responsive-xl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-xl-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 2560px){.mud-drawer-open-responsive-xxl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-xxl-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}.mud-drawer-open-persistent-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-persistent-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-persistent-left.mud-drawer-left-clipped-never.mud-drawer-open-persistent-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}@media(min-width: 0px){.mud-drawer-open-mini-xs-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-xs-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 600px){.mud-drawer-open-mini-sm-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-sm-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 960px){.mud-drawer-open-mini-md-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-md-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 1280px){.mud-drawer-open-mini-lg-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-lg-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 1920px){.mud-drawer-open-mini-xl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-xl-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 2560px){.mud-drawer-open-mini-xxl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-xxl-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}.mud-drawer-close-mini-xs-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xs-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 0px){.mud-drawer-close-mini-xs-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xs-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xs-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-xs-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer-close-mini-sm-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-sm-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 600px){.mud-drawer-close-mini-sm-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-sm-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-sm-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-sm-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer-close-mini-md-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-md-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 960px){.mud-drawer-close-mini-md-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-md-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-md-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-md-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer-close-mini-lg-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-lg-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 1280px){.mud-drawer-close-mini-lg-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-lg-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-lg-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-lg-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer-close-mini-xl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xl-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 1920px){.mud-drawer-close-mini-xl-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xl-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xl-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-xl-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer-close-mini-xxl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xxl-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 2560px){.mud-drawer-close-mini-xxl-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xxl-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xxl-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-xxl-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer{display:flex;flex:0 0 auto;outline:0;position:fixed;z-index:var(--mud-zindex-drawer);overflow-y:auto;flex-direction:column;color:var(--mud-palette-drawer-text);background-color:var(--mud-palette-drawer-background);--mud-drawer-content-height: 0}.mud-drawer .mud-drawer-content{height:100%;max-height:100%;display:flex;flex:0 0 auto;flex-direction:column}.mud-drawer:not(.mud-drawer-fixed){position:absolute}@media(max-width: -1px){.mud-drawer.mud-drawer-mini.mud-drawer-xs:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-xs{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-xs:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-xs.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}@media(max-width: 599px){.mud-drawer.mud-drawer-mini.mud-drawer-sm:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-sm{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-sm:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-sm.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}@media(max-width: 959px){.mud-drawer.mud-drawer-mini.mud-drawer-md:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-md{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-md:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-md.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}@media(max-width: 1279px){.mud-drawer.mud-drawer-mini.mud-drawer-lg:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-lg{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-lg:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-lg.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}@media(max-width: 1919px){.mud-drawer.mud-drawer-mini.mud-drawer-xl:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-xl{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-xl:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-xl.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}@media(max-width: 2559px){.mud-drawer.mud-drawer-mini.mud-drawer-xxl:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-xxl{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-xxl:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-xxl.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}.mud-drawer.mud-drawer-responsive,.mud-drawer.mud-drawer-persistent{height:100%}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-left,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left{right:auto;width:var(--mud-drawer-width, var(--mud-drawer-width-left))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-left.mud-drawer--open,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left.mud-drawer--open{left:0}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-left.mud-drawer--open:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-left 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-left.mud-drawer--closed,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left.mud-drawer--closed{box-shadow:none;left:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-left)))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-left.mud-drawer--closed:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-left 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-right,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right{left:auto;width:var(--mud-drawer-width, var(--mud-drawer-width-right))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-right.mud-drawer--open,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right.mud-drawer--open{right:0}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-right.mud-drawer--open:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-right 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-right.mud-drawer--closed,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right.mud-drawer--closed{box-shadow:none;right:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-right)))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-right.mud-drawer--closed:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-right 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-mini{height:100%;transition:width 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left{left:0;right:auto}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left.mud-drawer--closed{width:var(--mud-drawer-width-mini-left)}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left.mud-drawer--open{width:var(--mud-drawer-width-left)}.mud-drawer.mud-drawer-mini.mud-drawer-pos-right{left:auto;right:0}.mud-drawer.mud-drawer-mini.mud-drawer-pos-right.mud-drawer--closed{width:var(--mud-drawer-width-mini-right)}.mud-drawer.mud-drawer-mini.mud-drawer-pos-right.mud-drawer--open{width:var(--mud-drawer-width-right)}.mud-drawer.mud-drawer-temporary{margin:0 !important;z-index:calc(var(--mud-zindex-appbar) + 2);transition:transform 225ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left{right:auto;top:0;height:100%;width:var(--mud-drawer-width, var(--mud-drawer-width-left))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--open{left:0}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-left 225ms cubic-bezier(0, 0, 0.2, 1) forwards}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--closed{left:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-left)))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-left 225ms cubic-bezier(0, 0, 0.2, 1) forwards}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-right{left:auto;top:0;height:100%;width:var(--mud-drawer-width, var(--mud-drawer-width-right))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-right.mud-drawer--open{right:0}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-right.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-right 225ms cubic-bezier(0, 0, 0.2, 1) forwards}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-right.mud-drawer--closed{right:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-right)))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-right.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-right 225ms cubic-bezier(0, 0, 0.2, 1) forwards}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-bottom{left:0;top:auto;width:100%}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-bottom.mud-drawer--open{bottom:0}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-bottom.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-bottom 225ms cubic-bezier(0, 0, 0.2, 1) 0ms 1}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-bottom.mud-drawer--closed{bottom:calc(-1*var(--mud-drawer-content-height))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-bottom.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-bottom 225ms cubic-bezier(0, 0, 0.2, 1) 0ms 1}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-top{left:0;bottom:auto;width:100%}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-top.mud-drawer--open{top:0}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-top.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-top 225ms cubic-bezier(0, 0, 0.2, 1) 0ms 1}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-top.mud-drawer--closed{top:calc(-1*var(--mud-drawer-content-height))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-top.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-top 225ms cubic-bezier(0, 0, 0.2, 1) 0ms 1}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left~div:not(.mud-main-content),.mud-drawer.mud-drawer-mini.mud-drawer-pos-right~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right~div:not(.mud-main-content){transition:margin 225ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left.mud-drawer--open~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left.mud-drawer--open~div:not(.mud-main-content){margin-left:var(--mud-drawer-width, var(--mud-drawer-width-left))}.mud-drawer.mud-drawer-mini.mud-drawer-pos-right.mud-drawer--open~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right.mud-drawer--open~div:not(.mud-main-content){margin-right:var(--mud-drawer-width, var(--mud-drawer-width-right))}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left.mud-drawer--closed~div:not(.mud-main-content){margin-left:var(--mud-drawer-width, var(--mud-drawer-width-mini-left))}.mud-drawer.mud-drawer-mini.mud-drawer-pos-right.mud-drawer--closed~div:not(.mud-main-content){margin-right:var(--mud-drawer-width, var(--mud-drawer-width-mini-right))}.mud-drawer-header{display:flex;min-height:var(--mud-appbar-height);padding:12px 24px 12px 24px}.mud-drawer-header.mud-drawer-header-dense{min-height:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);padding:8px 24px 8px 24px}.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-persistent:not(.mud-drawer-clipped-never),.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-temporary.mud-drawer-clipped-always{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}@media(max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-persistent:not(.mud-drawer-clipped-never),.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-temporary.mud-drawer-clipped-always{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - (var(--mud-appbar-height) - var(--mud-appbar-height)/4))}}@media(max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-persistent:not(.mud-drawer-clipped-never),.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-temporary.mud-drawer-clipped-always{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - (var(--mud-appbar-height) - var(--mud-appbar-height)/8))}}@media(min-width: 0px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xs,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xs{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 0px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xs,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xs{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 0px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xs,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xs{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}@media(min-width: 600px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-sm,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-sm{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 600px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-sm,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-sm{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 600px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-sm,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-sm{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}@media(min-width: 960px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-md,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-md{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 960px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-md,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-md{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 960px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-md,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-md{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}@media(min-width: 1280px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-lg,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-lg{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 1280px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-lg,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-lg{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 1280px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-lg,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-lg{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}@media(min-width: 1920px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xl{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 1920px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 1920px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}@media(min-width: 2560px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xxl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xxl{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 2560px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xxl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xxl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 2560px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xxl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xxl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-mini:not(.mud-drawer-clipped-never),.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-persistent:not(.mud-drawer-clipped-never),.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-always,.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-temporary.mud-drawer-clipped-always{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}@media(min-width: 0px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xs{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}@media(min-width: 600px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-sm{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}@media(min-width: 960px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-md{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}@media(min-width: 1280px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-lg{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}@media(min-width: 1920px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}@media(min-width: 2560px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xxl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}.mud-drawer-overlay{display:none}@media(max-width: -1px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xs{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xs.mud-drawer--initial{display:none}}@media(max-width: -1px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-xs{display:block}}@media(max-width: 599px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-sm{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-sm.mud-drawer--initial{display:none}}@media(max-width: 599px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-sm{display:block}}@media(max-width: 959px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-md{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-md.mud-drawer--initial{display:none}}@media(max-width: 959px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-md{display:block}}@media(max-width: 1279px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-lg{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-lg.mud-drawer--initial{display:none}}@media(max-width: 1279px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-lg{display:block}}@media(max-width: 1919px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xl{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xl.mud-drawer--initial{display:none}}@media(max-width: 1919px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-xl{display:block}}@media(max-width: 2559px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xxl{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xxl.mud-drawer--initial{display:none}}@media(max-width: 2559px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-xxl{display:block}}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-temporary{display:block}@keyframes mud-drawer-slide-in-left{from{left:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-left)))}}@keyframes mud-drawer-slide-out-left{from{left:0}}@keyframes mud-drawer-slide-in-right{from{right:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-right)))}}@keyframes mud-drawer-slide-out-right{from{right:0}}@keyframes mud-drawer-slide-in-bottom{from{bottom:calc(-1*var(--mud-drawer-content-height))}}@keyframes mud-drawer-slide-out-bottom{from{bottom:0}}@keyframes mud-drawer-slide-in-top{from{top:calc(-1*var(--mud-drawer-content-height))}}@keyframes mud-drawer-slide-out-top{from{top:0}}.mud-main-content{margin:0;flex:1 1 auto;padding-top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);transition:margin 225ms cubic-bezier(0, 0, 0.2, 1) 0ms}@media(min-width: 0px)and (orientation: landscape){.mud-main-content{padding-top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 600px){.mud-main-content{padding-top:var(--mud-appbar-height)}}.mud-appbar-dense~.mud-main-content{padding-top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4)}@media(min-width: 0px){.mud-drawer-open-responsive-xs-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-xs-left.mud-drawer-open-responsive-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}@media(min-width: 600px){.mud-drawer-open-responsive-sm-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-sm-left.mud-drawer-open-responsive-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}@media(min-width: 960px){.mud-drawer-open-responsive-md-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-md-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-md-left.mud-drawer-open-responsive-md-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}@media(min-width: 1280px){.mud-drawer-open-responsive-lg-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-lg-left.mud-drawer-open-responsive-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}@media(min-width: 1920px){.mud-drawer-open-responsive-xl-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-xl-left.mud-drawer-open-responsive-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}@media(min-width: 2560px){.mud-drawer-open-responsive-xxl-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-xxl-left.mud-drawer-open-responsive-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}.mud-drawer-open-persistent-left:not(.mud-drawer-open-persistent-right) .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-persistent-right:not(.mud-drawer-open-persistent-left) .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-persistent-left.mud-drawer-open-persistent-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xs-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-xs-left.mud-drawer-open-mini-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-sm-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-sm-left.mud-drawer-open-mini-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-md-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-md-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-md-left.mud-drawer-open-mini-md-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-lg-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-lg-left.mud-drawer-open-mini-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xl-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-xl-left.mud-drawer-open-mini-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xxl-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-xxl-left.mud-drawer-open-mini-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-none-left .mud-main-content,.mud-drawer-open-mini-always-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-none-right .mud-main-content,.mud-drawer-open-mini-always-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-none-left.mud-drawer-open-mini-none,.mud-drawer-open-mini-none .mud-drawer-open-mini-always-right .mud-main-content,.mud-drawer-open-mini-always-left.mud-drawer-open-mini-none,.mud-drawer-open-mini-always .mud-drawer-open-mini-always-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-close-mini-xs-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-xs-left.mud-drawer-close-mini-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-sm-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-sm-left.mud-drawer-close-mini-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-md-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-md-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-md-left.mud-drawer-close-mini-md-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-lg-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-lg-left.mud-drawer-close-mini-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-xl-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-xl-left.mud-drawer-close-mini-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-xxl-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-xxl-left.mud-drawer-close-mini-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-none-left .mud-main-content,.mud-drawer-close-mini-always-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-none-right .mud-main-content,.mud-drawer-close-mini-always-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-none-left.mud-drawer-close-mini-none,.mud-drawer-close-mini-none .mud-drawer-close-mini-always-right .mud-main-content,.mud-drawer-close-mini-always-left.mud-drawer-close-mini-none,.mud-drawer-close-mini-always .mud-drawer-close-mini-always-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-container{width:100%;display:block;box-sizing:border-box;margin-left:auto;margin-right:auto}.mud-container--gutters{padding-left:16px;padding-right:16px}@media(min-width: 600px){.mud-container--gutters{padding-left:24px;padding-right:24px}}@media(min-width: 600px){.mud-container-fixed{max-width:600px}}@media(min-width: 960px){.mud-container-fixed{max-width:960px}}@media(min-width: 1280px){.mud-container-fixed{max-width:1280px}}@media(min-width: 1920px){.mud-container-fixed{max-width:1920px}}@media(min-width: 2560px){.mud-container-fixed{max-width:2560px}}@media(min-width: 0px){.mud-container-maxwidth-xs{max-width:444px}}@media(min-width: 600px){.mud-container-maxwidth-sm{max-width:600px}}@media(min-width: 960px){.mud-container-maxwidth-md{max-width:960px}}@media(min-width: 1280px){.mud-container-maxwidth-lg{max-width:1280px}}@media(min-width: 1920px){.mud-container-maxwidth-xl{max-width:1920px}}@media(min-width: 2560px){.mud-container-maxwidth-xxl{max-width:2560px}}.scroll-locked{padding-right:8px;overflow:hidden}.scroll-locked .mud-layout .mud-appbar{padding-right:8px}.scroll-locked .mud-layout .mud-main-content .mud-scroll-to-top{padding-right:8px}.scroll-locked-no-padding{overflow:hidden}@-moz-document url-prefix(){.scroll-locked{padding-right:17px}.scroll-locked .mud-layout .mud-appbar{padding-right:17px}.scroll-locked .mud-layout .mud-main-content .mud-scroll-to-top{padding-right:17px}}.mud-scroll-to-top{position:fixed;cursor:pointer;z-index:100}.mud-scroll-to-top.visible{bottom:16px;right:16px;opacity:1;transition:transform .5s;flex:1}.mud-scroll-to-top.hidden{bottom:16px;right:16px;opacity:0;transition:all .5s;visibility:hidden;transform:scale(0) rotate(180deg);flex:0}.mud-scroll-to-top:after{content:"";background:rgba(0,0,0,0);top:0;bottom:0;left:0;right:0;position:absolute;z-index:var(--mud-zindex-tooltip)}.red{background-color:#f44336}.red-text{color:#f44336}.red.lighten-5{background-color:#ffebee}.red-text.text-lighten-5{color:#ffebee}.red.lighten-4{background-color:#ffcdd2}.red-text.text-lighten-4{color:#ffcdd2}.red.lighten-3{background-color:#ef9a9a}.red-text.text-lighten-3{color:#ef9a9a}.red.lighten-2{background-color:#e57373}.red-text.text-lighten-2{color:#e57373}.red.lighten-1{background-color:#ef5350}.red-text.text-lighten-1{color:#ef5350}.red.darken-1{background-color:#e53935}.red-text.text-darken-1{color:#e53935}.red.darken-2{background-color:#d32f2f}.red-text.text-darken-2{color:#d32f2f}.red.darken-3{background-color:#c62828}.red-text.text-darken-3{color:#c62828}.red.darken-4{background-color:#b71c1c}.red-text.text-darken-4{color:#b71c1c}.red.accent-1{background-color:#ff8a80}.red-text.text-accent-1{color:#ff8a80}.red.accent-2{background-color:#ff5252}.red-text.text-accent-2{color:#ff5252}.red.accent-3{background-color:#ff1744}.red-text.text-accent-3{color:#ff1744}.red.accent-4{background-color:#d50000}.red-text.text-accent-4{color:#d50000}.pink{background-color:#e91e63}.pink-text{color:#e91e63}.pink.lighten-5{background-color:#fce4ec}.pink-text.text-lighten-5{color:#fce4ec}.pink.lighten-4{background-color:#f8bbd0}.pink-text.text-lighten-4{color:#f8bbd0}.pink.lighten-3{background-color:#f48fb1}.pink-text.text-lighten-3{color:#f48fb1}.pink.lighten-2{background-color:#f06292}.pink-text.text-lighten-2{color:#f06292}.pink.lighten-1{background-color:#ec407a}.pink-text.text-lighten-1{color:#ec407a}.pink.darken-1{background-color:#d81b60}.pink-text.text-darken-1{color:#d81b60}.pink.darken-2{background-color:#c2185b}.pink-text.text-darken-2{color:#c2185b}.pink.darken-3{background-color:#ad1457}.pink-text.text-darken-3{color:#ad1457}.pink.darken-4{background-color:#880e4f}.pink-text.text-darken-4{color:#880e4f}.pink.accent-1{background-color:#ff80ab}.pink-text.text-accent-1{color:#ff80ab}.pink.accent-2{background-color:#ff4081}.pink-text.text-accent-2{color:#ff4081}.pink.accent-3{background-color:#f50057}.pink-text.text-accent-3{color:#f50057}.pink.accent-4{background-color:#c51162}.pink-text.text-accent-4{color:#c51162}.purple{background-color:#9c27b0}.purple-text{color:#9c27b0}.purple.lighten-5{background-color:#f3e5f5}.purple-text.text-lighten-5{color:#f3e5f5}.purple.lighten-4{background-color:#e1bee7}.purple-text.text-lighten-4{color:#e1bee7}.purple.lighten-3{background-color:#ce93d8}.purple-text.text-lighten-3{color:#ce93d8}.purple.lighten-2{background-color:#ba68c8}.purple-text.text-lighten-2{color:#ba68c8}.purple.lighten-1{background-color:#ab47bc}.purple-text.text-lighten-1{color:#ab47bc}.purple.darken-1{background-color:#8e24aa}.purple-text.text-darken-1{color:#8e24aa}.purple.darken-2{background-color:#7b1fa2}.purple-text.text-darken-2{color:#7b1fa2}.purple.darken-3{background-color:#6a1b9a}.purple-text.text-darken-3{color:#6a1b9a}.purple.darken-4{background-color:#4a148c}.purple-text.text-darken-4{color:#4a148c}.purple.accent-1{background-color:#ea80fc}.purple-text.text-accent-1{color:#ea80fc}.purple.accent-2{background-color:#e040fb}.purple-text.text-accent-2{color:#e040fb}.purple.accent-3{background-color:#d500f9}.purple-text.text-accent-3{color:#d500f9}.purple.accent-4{background-color:#a0f}.purple-text.text-accent-4{color:#a0f}.deep-purple{background-color:#673ab7}.deep-purple-text{color:#673ab7}.deep-purple.lighten-5{background-color:#ede7f6}.deep-purple-text.text-lighten-5{color:#ede7f6}.deep-purple.lighten-4{background-color:#d1c4e9}.deep-purple-text.text-lighten-4{color:#d1c4e9}.deep-purple.lighten-3{background-color:#b39ddb}.deep-purple-text.text-lighten-3{color:#b39ddb}.deep-purple.lighten-2{background-color:#9575cd}.deep-purple-text.text-lighten-2{color:#9575cd}.deep-purple.lighten-1{background-color:#7e57c2}.deep-purple-text.text-lighten-1{color:#7e57c2}.deep-purple.darken-1{background-color:#5e35b1}.deep-purple-text.text-darken-1{color:#5e35b1}.deep-purple.darken-2{background-color:#512da8}.deep-purple-text.text-darken-2{color:#512da8}.deep-purple.darken-3{background-color:#4527a0}.deep-purple-text.text-darken-3{color:#4527a0}.deep-purple.darken-4{background-color:#311b92}.deep-purple-text.text-darken-4{color:#311b92}.deep-purple.accent-1{background-color:#b388ff}.deep-purple-text.text-accent-1{color:#b388ff}.deep-purple.accent-2{background-color:#7c4dff}.deep-purple-text.text-accent-2{color:#7c4dff}.deep-purple.accent-3{background-color:#651fff}.deep-purple-text.text-accent-3{color:#651fff}.deep-purple.accent-4{background-color:#6200ea}.deep-purple-text.text-accent-4{color:#6200ea}.indigo{background-color:#3f51b5}.indigo-text{color:#3f51b5}.indigo.lighten-5{background-color:#e8eaf6}.indigo-text.text-lighten-5{color:#e8eaf6}.indigo.lighten-4{background-color:#c5cae9}.indigo-text.text-lighten-4{color:#c5cae9}.indigo.lighten-3{background-color:#9fa8da}.indigo-text.text-lighten-3{color:#9fa8da}.indigo.lighten-2{background-color:#7986cb}.indigo-text.text-lighten-2{color:#7986cb}.indigo.lighten-1{background-color:#5c6bc0}.indigo-text.text-lighten-1{color:#5c6bc0}.indigo.darken-1{background-color:#3949ab}.indigo-text.text-darken-1{color:#3949ab}.indigo.darken-2{background-color:#303f9f}.indigo-text.text-darken-2{color:#303f9f}.indigo.darken-3{background-color:#283593}.indigo-text.text-darken-3{color:#283593}.indigo.darken-4{background-color:#1a237e}.indigo-text.text-darken-4{color:#1a237e}.indigo.accent-1{background-color:#8c9eff}.indigo-text.text-accent-1{color:#8c9eff}.indigo.accent-2{background-color:#536dfe}.indigo-text.text-accent-2{color:#536dfe}.indigo.accent-3{background-color:#3d5afe}.indigo-text.text-accent-3{color:#3d5afe}.indigo.accent-4{background-color:#304ffe}.indigo-text.text-accent-4{color:#304ffe}.blue{background-color:#2196f3}.blue-text{color:#2196f3}.blue.lighten-5{background-color:#e3f2fd}.blue-text.text-lighten-5{color:#e3f2fd}.blue.lighten-4{background-color:#bbdefb}.blue-text.text-lighten-4{color:#bbdefb}.blue.lighten-3{background-color:#90caf9}.blue-text.text-lighten-3{color:#90caf9}.blue.lighten-2{background-color:#64b5f6}.blue-text.text-lighten-2{color:#64b5f6}.blue.lighten-1{background-color:#42a5f5}.blue-text.text-lighten-1{color:#42a5f5}.blue.darken-1{background-color:#1e88e5}.blue-text.text-darken-1{color:#1e88e5}.blue.darken-2{background-color:#1976d2}.blue-text.text-darken-2{color:#1976d2}.blue.darken-3{background-color:#1565c0}.blue-text.text-darken-3{color:#1565c0}.blue.darken-4{background-color:#0d47a1}.blue-text.text-darken-4{color:#0d47a1}.blue.accent-1{background-color:#82b1ff}.blue-text.text-accent-1{color:#82b1ff}.blue.accent-2{background-color:#448aff}.blue-text.text-accent-2{color:#448aff}.blue.accent-3{background-color:#2979ff}.blue-text.text-accent-3{color:#2979ff}.blue.accent-4{background-color:#2962ff}.blue-text.text-accent-4{color:#2962ff}.light-blue{background-color:#03a9f4}.light-blue-text{color:#03a9f4}.light-blue.lighten-5{background-color:#e1f5fe}.light-blue-text.text-lighten-5{color:#e1f5fe}.light-blue.lighten-4{background-color:#b3e5fc}.light-blue-text.text-lighten-4{color:#b3e5fc}.light-blue.lighten-3{background-color:#81d4fa}.light-blue-text.text-lighten-3{color:#81d4fa}.light-blue.lighten-2{background-color:#4fc3f7}.light-blue-text.text-lighten-2{color:#4fc3f7}.light-blue.lighten-1{background-color:#29b6f6}.light-blue-text.text-lighten-1{color:#29b6f6}.light-blue.darken-1{background-color:#039be5}.light-blue-text.text-darken-1{color:#039be5}.light-blue.darken-2{background-color:#0288d1}.light-blue-text.text-darken-2{color:#0288d1}.light-blue.darken-3{background-color:#0277bd}.light-blue-text.text-darken-3{color:#0277bd}.light-blue.darken-4{background-color:#01579b}.light-blue-text.text-darken-4{color:#01579b}.light-blue.accent-1{background-color:#80d8ff}.light-blue-text.text-accent-1{color:#80d8ff}.light-blue.accent-2{background-color:#40c4ff}.light-blue-text.text-accent-2{color:#40c4ff}.light-blue.accent-3{background-color:#00b0ff}.light-blue-text.text-accent-3{color:#00b0ff}.light-blue.accent-4{background-color:#0091ea}.light-blue-text.text-accent-4{color:#0091ea}.cyan{background-color:#00bcd4}.cyan-text{color:#00bcd4}.cyan.lighten-5{background-color:#e0f7fa}.cyan-text.text-lighten-5{color:#e0f7fa}.cyan.lighten-4{background-color:#b2ebf2}.cyan-text.text-lighten-4{color:#b2ebf2}.cyan.lighten-3{background-color:#80deea}.cyan-text.text-lighten-3{color:#80deea}.cyan.lighten-2{background-color:#4dd0e1}.cyan-text.text-lighten-2{color:#4dd0e1}.cyan.lighten-1{background-color:#26c6da}.cyan-text.text-lighten-1{color:#26c6da}.cyan.darken-1{background-color:#00acc1}.cyan-text.text-darken-1{color:#00acc1}.cyan.darken-2{background-color:#0097a7}.cyan-text.text-darken-2{color:#0097a7}.cyan.darken-3{background-color:#00838f}.cyan-text.text-darken-3{color:#00838f}.cyan.darken-4{background-color:#006064}.cyan-text.text-darken-4{color:#006064}.cyan.accent-1{background-color:#84ffff}.cyan-text.text-accent-1{color:#84ffff}.cyan.accent-2{background-color:#18ffff}.cyan-text.text-accent-2{color:#18ffff}.cyan.accent-3{background-color:#00e5ff}.cyan-text.text-accent-3{color:#00e5ff}.cyan.accent-4{background-color:#00b8d4}.cyan-text.text-accent-4{color:#00b8d4}.teal{background-color:#009688}.teal-text{color:#009688}.teal.lighten-5{background-color:#e0f2f1}.teal-text.text-lighten-5{color:#e0f2f1}.teal.lighten-4{background-color:#b2dfdb}.teal-text.text-lighten-4{color:#b2dfdb}.teal.lighten-3{background-color:#80cbc4}.teal-text.text-lighten-3{color:#80cbc4}.teal.lighten-2{background-color:#4db6ac}.teal-text.text-lighten-2{color:#4db6ac}.teal.lighten-1{background-color:#26a69a}.teal-text.text-lighten-1{color:#26a69a}.teal.darken-1{background-color:#00897b}.teal-text.text-darken-1{color:#00897b}.teal.darken-2{background-color:#00796b}.teal-text.text-darken-2{color:#00796b}.teal.darken-3{background-color:#00695c}.teal-text.text-darken-3{color:#00695c}.teal.darken-4{background-color:#004d40}.teal-text.text-darken-4{color:#004d40}.teal.accent-1{background-color:#a7ffeb}.teal-text.text-accent-1{color:#a7ffeb}.teal.accent-2{background-color:#64ffda}.teal-text.text-accent-2{color:#64ffda}.teal.accent-3{background-color:#1de9b6}.teal-text.text-accent-3{color:#1de9b6}.teal.accent-4{background-color:#00bfa5}.teal-text.text-accent-4{color:#00bfa5}.green{background-color:#4caf50}.green-text{color:#4caf50}.green.lighten-5{background-color:#e8f5e9}.green-text.text-lighten-5{color:#e8f5e9}.green.lighten-4{background-color:#c8e6c9}.green-text.text-lighten-4{color:#c8e6c9}.green.lighten-3{background-color:#a5d6a7}.green-text.text-lighten-3{color:#a5d6a7}.green.lighten-2{background-color:#81c784}.green-text.text-lighten-2{color:#81c784}.green.lighten-1{background-color:#66bb6a}.green-text.text-lighten-1{color:#66bb6a}.green.darken-1{background-color:#43a047}.green-text.text-darken-1{color:#43a047}.green.darken-2{background-color:#388e3c}.green-text.text-darken-2{color:#388e3c}.green.darken-3{background-color:#2e7d32}.green-text.text-darken-3{color:#2e7d32}.green.darken-4{background-color:#1b5e20}.green-text.text-darken-4{color:#1b5e20}.green.accent-1{background-color:#b9f6ca}.green-text.text-accent-1{color:#b9f6ca}.green.accent-2{background-color:#69f0ae}.green-text.text-accent-2{color:#69f0ae}.green.accent-3{background-color:#00e676}.green-text.text-accent-3{color:#00e676}.green.accent-4{background-color:#00c853}.green-text.text-accent-4{color:#00c853}.light-green{background-color:#8bc34a}.light-green-text{color:#8bc34a}.light-green.lighten-5{background-color:#f1f8e9}.light-green-text.text-lighten-5{color:#f1f8e9}.light-green.lighten-4{background-color:#dcedc8}.light-green-text.text-lighten-4{color:#dcedc8}.light-green.lighten-3{background-color:#c5e1a5}.light-green-text.text-lighten-3{color:#c5e1a5}.light-green.lighten-2{background-color:#aed581}.light-green-text.text-lighten-2{color:#aed581}.light-green.lighten-1{background-color:#9ccc65}.light-green-text.text-lighten-1{color:#9ccc65}.light-green.darken-1{background-color:#7cb342}.light-green-text.text-darken-1{color:#7cb342}.light-green.darken-2{background-color:#689f38}.light-green-text.text-darken-2{color:#689f38}.light-green.darken-3{background-color:#558b2f}.light-green-text.text-darken-3{color:#558b2f}.light-green.darken-4{background-color:#33691e}.light-green-text.text-darken-4{color:#33691e}.light-green.accent-1{background-color:#ccff90}.light-green-text.text-accent-1{color:#ccff90}.light-green.accent-2{background-color:#b2ff59}.light-green-text.text-accent-2{color:#b2ff59}.light-green.accent-3{background-color:#76ff03}.light-green-text.text-accent-3{color:#76ff03}.light-green.accent-4{background-color:#64dd17}.light-green-text.text-accent-4{color:#64dd17}.lime{background-color:#cddc39}.lime-text{color:#cddc39}.lime.lighten-5{background-color:#f9fbe7}.lime-text.text-lighten-5{color:#f9fbe7}.lime.lighten-4{background-color:#f0f4c3}.lime-text.text-lighten-4{color:#f0f4c3}.lime.lighten-3{background-color:#e6ee9c}.lime-text.text-lighten-3{color:#e6ee9c}.lime.lighten-2{background-color:#dce775}.lime-text.text-lighten-2{color:#dce775}.lime.lighten-1{background-color:#d4e157}.lime-text.text-lighten-1{color:#d4e157}.lime.darken-1{background-color:#c0ca33}.lime-text.text-darken-1{color:#c0ca33}.lime.darken-2{background-color:#afb42b}.lime-text.text-darken-2{color:#afb42b}.lime.darken-3{background-color:#9e9d24}.lime-text.text-darken-3{color:#9e9d24}.lime.darken-4{background-color:#827717}.lime-text.text-darken-4{color:#827717}.lime.accent-1{background-color:#f4ff81}.lime-text.text-accent-1{color:#f4ff81}.lime.accent-2{background-color:#eeff41}.lime-text.text-accent-2{color:#eeff41}.lime.accent-3{background-color:#c6ff00}.lime-text.text-accent-3{color:#c6ff00}.lime.accent-4{background-color:#aeea00}.lime-text.text-accent-4{color:#aeea00}.yellow{background-color:#ffeb3b}.yellow-text{color:#ffeb3b}.yellow.lighten-5{background-color:#fffde7}.yellow-text.text-lighten-5{color:#fffde7}.yellow.lighten-4{background-color:#fff9c4}.yellow-text.text-lighten-4{color:#fff9c4}.yellow.lighten-3{background-color:#fff59d}.yellow-text.text-lighten-3{color:#fff59d}.yellow.lighten-2{background-color:#fff176}.yellow-text.text-lighten-2{color:#fff176}.yellow.lighten-1{background-color:#ffee58}.yellow-text.text-lighten-1{color:#ffee58}.yellow.darken-1{background-color:#fdd835}.yellow-text.text-darken-1{color:#fdd835}.yellow.darken-2{background-color:#fbc02d}.yellow-text.text-darken-2{color:#fbc02d}.yellow.darken-3{background-color:#f9a825}.yellow-text.text-darken-3{color:#f9a825}.yellow.darken-4{background-color:#f57f17}.yellow-text.text-darken-4{color:#f57f17}.yellow.accent-1{background-color:#ffff8d}.yellow-text.text-accent-1{color:#ffff8d}.yellow.accent-2{background-color:#ff0}.yellow-text.text-accent-2{color:#ff0}.yellow.accent-3{background-color:#ffea00}.yellow-text.text-accent-3{color:#ffea00}.yellow.accent-4{background-color:#ffd600}.yellow-text.text-accent-4{color:#ffd600}.amber{background-color:#ffc107}.amber-text{color:#ffc107}.amber.lighten-5{background-color:#fff8e1}.amber-text.text-lighten-5{color:#fff8e1}.amber.lighten-4{background-color:#ffecb3}.amber-text.text-lighten-4{color:#ffecb3}.amber.lighten-3{background-color:#ffe082}.amber-text.text-lighten-3{color:#ffe082}.amber.lighten-2{background-color:#ffd54f}.amber-text.text-lighten-2{color:#ffd54f}.amber.lighten-1{background-color:#ffca28}.amber-text.text-lighten-1{color:#ffca28}.amber.darken-1{background-color:#ffb300}.amber-text.text-darken-1{color:#ffb300}.amber.darken-2{background-color:#ffa000}.amber-text.text-darken-2{color:#ffa000}.amber.darken-3{background-color:#ff8f00}.amber-text.text-darken-3{color:#ff8f00}.amber.darken-4{background-color:#ff6f00}.amber-text.text-darken-4{color:#ff6f00}.amber.accent-1{background-color:#ffe57f}.amber-text.text-accent-1{color:#ffe57f}.amber.accent-2{background-color:#ffd740}.amber-text.text-accent-2{color:#ffd740}.amber.accent-3{background-color:#ffc400}.amber-text.text-accent-3{color:#ffc400}.amber.accent-4{background-color:#ffab00}.amber-text.text-accent-4{color:#ffab00}.orange{background-color:#ff9800}.orange-text{color:#ff9800}.orange.lighten-5{background-color:#fff3e0}.orange-text.text-lighten-5{color:#fff3e0}.orange.lighten-4{background-color:#ffe0b2}.orange-text.text-lighten-4{color:#ffe0b2}.orange.lighten-3{background-color:#ffcc80}.orange-text.text-lighten-3{color:#ffcc80}.orange.lighten-2{background-color:#ffb74d}.orange-text.text-lighten-2{color:#ffb74d}.orange.lighten-1{background-color:#ffa726}.orange-text.text-lighten-1{color:#ffa726}.orange.darken-1{background-color:#fb8c00}.orange-text.text-darken-1{color:#fb8c00}.orange.darken-2{background-color:#f57c00}.orange-text.text-darken-2{color:#f57c00}.orange.darken-3{background-color:#ef6c00}.orange-text.text-darken-3{color:#ef6c00}.orange.darken-4{background-color:#e65100}.orange-text.text-darken-4{color:#e65100}.orange.accent-1{background-color:#ffd180}.orange-text.text-accent-1{color:#ffd180}.orange.accent-2{background-color:#ffab40}.orange-text.text-accent-2{color:#ffab40}.orange.accent-3{background-color:#ff9100}.orange-text.text-accent-3{color:#ff9100}.orange.accent-4{background-color:#ff6d00}.orange-text.text-accent-4{color:#ff6d00}.deep-orange{background-color:#ff5722}.deep-orange-text{color:#ff5722}.deep-orange.lighten-5{background-color:#fbe9e7}.deep-orange-text.text-lighten-5{color:#fbe9e7}.deep-orange.lighten-4{background-color:#ffccbc}.deep-orange-text.text-lighten-4{color:#ffccbc}.deep-orange.lighten-3{background-color:#ffab91}.deep-orange-text.text-lighten-3{color:#ffab91}.deep-orange.lighten-2{background-color:#ff8a65}.deep-orange-text.text-lighten-2{color:#ff8a65}.deep-orange.lighten-1{background-color:#ff7043}.deep-orange-text.text-lighten-1{color:#ff7043}.deep-orange.darken-1{background-color:#f4511e}.deep-orange-text.text-darken-1{color:#f4511e}.deep-orange.darken-2{background-color:#e64a19}.deep-orange-text.text-darken-2{color:#e64a19}.deep-orange.darken-3{background-color:#d84315}.deep-orange-text.text-darken-3{color:#d84315}.deep-orange.darken-4{background-color:#bf360c}.deep-orange-text.text-darken-4{color:#bf360c}.deep-orange.accent-1{background-color:#ff9e80}.deep-orange-text.text-accent-1{color:#ff9e80}.deep-orange.accent-2{background-color:#ff6e40}.deep-orange-text.text-accent-2{color:#ff6e40}.deep-orange.accent-3{background-color:#ff3d00}.deep-orange-text.text-accent-3{color:#ff3d00}.deep-orange.accent-4{background-color:#dd2c00}.deep-orange-text.text-accent-4{color:#dd2c00}.brown{background-color:#795548}.brown-text{color:#795548}.brown.lighten-5{background-color:#efebe9}.brown-text.text-lighten-5{color:#efebe9}.brown.lighten-4{background-color:#d7ccc8}.brown-text.text-lighten-4{color:#d7ccc8}.brown.lighten-3{background-color:#bcaaa4}.brown-text.text-lighten-3{color:#bcaaa4}.brown.lighten-2{background-color:#a1887f}.brown-text.text-lighten-2{color:#a1887f}.brown.lighten-1{background-color:#8d6e63}.brown-text.text-lighten-1{color:#8d6e63}.brown.darken-1{background-color:#6d4c41}.brown-text.text-darken-1{color:#6d4c41}.brown.darken-2{background-color:#5d4037}.brown-text.text-darken-2{color:#5d4037}.brown.darken-3{background-color:#4e342e}.brown-text.text-darken-3{color:#4e342e}.brown.darken-4{background-color:#3e2723}.brown-text.text-darken-4{color:#3e2723}.blue-gray{background-color:#607d8b}.blue-gray-text{color:#607d8b}.blue-gray.lighten-5{background-color:#eceff1}.blue-gray-text.text-lighten-5{color:#eceff1}.blue-gray.lighten-4{background-color:#cfd8dc}.blue-gray-text.text-lighten-4{color:#cfd8dc}.blue-gray.lighten-3{background-color:#b0bec5}.blue-gray-text.text-lighten-3{color:#b0bec5}.blue-gray.lighten-2{background-color:#90a4ae}.blue-gray-text.text-lighten-2{color:#90a4ae}.blue-gray.lighten-1{background-color:#78909c}.blue-gray-text.text-lighten-1{color:#78909c}.blue-gray.darken-1{background-color:#546e7a}.blue-gray-text.text-darken-1{color:#546e7a}.blue-gray.darken-2{background-color:#455a64}.blue-gray-text.text-darken-2{color:#455a64}.blue-gray.darken-3{background-color:#37474f}.blue-gray-text.text-darken-3{color:#37474f}.blue-gray.darken-4{background-color:#263238}.blue-gray-text.text-darken-4{color:#263238}.gray{background-color:#9e9e9e}.gray-text{color:#9e9e9e}.gray.lighten-5{background-color:#fafafa}.gray-text.text-lighten-5{color:#fafafa}.gray.lighten-4{background-color:#f5f5f5}.gray-text.text-lighten-4{color:#f5f5f5}.gray.lighten-3{background-color:#eee}.gray-text.text-lighten-3{color:#eee}.gray.lighten-2{background-color:#e0e0e0}.gray-text.text-lighten-2{color:#e0e0e0}.gray.lighten-1{background-color:#bdbdbd}.gray-text.text-lighten-1{color:#bdbdbd}.gray.darken-1{background-color:#757575}.gray-text.text-darken-1{color:#757575}.gray.darken-2{background-color:#616161}.gray-text.text-darken-2{color:#616161}.gray.darken-3{background-color:#424242}.gray-text.text-darken-3{color:#424242}.gray.darken-4{background-color:#212121}.gray-text.text-darken-4{color:#212121}.shades.black{background-color:#000}.shades-text.text-black{color:#000}.shades.white{background-color:#fff}.shades-text.text-white{color:#fff}.shades.transparent{background-color:rgba(0,0,0,0)}.shades-text.text-transparent{color:rgba(0,0,0,0)}.mud-ripple{--mud-ripple-offset-x: 0;--mud-ripple-offset-y: 0;position:relative;overflow:hidden}.mud-ripple:after{content:"";display:block;position:absolute;width:100%;height:100%;top:var(--mud-ripple-offset-y);left:var(--mud-ripple-offset-x);pointer-events:none;background-image:radial-gradient(circle, var(--mud-ripple-color) 10%, transparent 10.01%);background-repeat:no-repeat;background-position:50%;transform:scale(20, 20);opacity:0;transition:transform .6s,opacity 1s}.mud-ripple:active:after{transform:scale(0, 0);opacity:var(--mud-ripple-opacity);transition:0s}.mud-ripple:has(.mud-ripple:active):after{opacity:0}.mud-ripple-icon:after,.mud-ripple-checkbox:after,.mud-ripple-switch:after,.mud-ripple-radio:after{transform:scale(14, 14)}.mud-ripple-switch{position:absolute}.mud-rtl{direction:rtl !important}.mud-ltr{direction:ltr !important}.mud-application-layout-rtl .mud-flip-x-rtl{transform:scaleX(-1)} + */.mud-primary{background-color:var(--mud-palette-primary) !important}.mud-primary-text{color:var(--mud-palette-primary) !important;--mud-ripple-color: var(--mud-palette-primary) !important}.mud-primary-hover{background-color:var(--mud-palette-primary-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-primary-hover:hover{background-color:var(--mud-palette-primary-hover) !important}}.hover\:mud-primary-hover:focus-visible,.hover\:mud-primary-hover:active{background-color:var(--mud-palette-primary-hover) !important}.mud-border-primary{border-color:var(--mud-palette-primary) !important}.mud-theme-primary{color:var(--mud-palette-primary-text) !important;background-color:var(--mud-palette-primary) !important}.mud-secondary{background-color:var(--mud-palette-secondary) !important}.mud-secondary-text{color:var(--mud-palette-secondary) !important;--mud-ripple-color: var(--mud-palette-secondary) !important}.mud-secondary-hover{background-color:var(--mud-palette-secondary-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-secondary-hover:hover{background-color:var(--mud-palette-secondary-hover) !important}}.hover\:mud-secondary-hover:focus-visible,.hover\:mud-secondary-hover:active{background-color:var(--mud-palette-secondary-hover) !important}.mud-border-secondary{border-color:var(--mud-palette-secondary) !important}.mud-theme-secondary{color:var(--mud-palette-secondary-text) !important;background-color:var(--mud-palette-secondary) !important}.mud-tertiary{background-color:var(--mud-palette-tertiary) !important}.mud-tertiary-text{color:var(--mud-palette-tertiary) !important;--mud-ripple-color: var(--mud-palette-tertiary) !important}.mud-tertiary-hover{background-color:var(--mud-palette-tertiary-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-tertiary-hover:hover{background-color:var(--mud-palette-tertiary-hover) !important}}.hover\:mud-tertiary-hover:focus-visible,.hover\:mud-tertiary-hover:active{background-color:var(--mud-palette-tertiary-hover) !important}.mud-border-tertiary{border-color:var(--mud-palette-tertiary) !important}.mud-theme-tertiary{color:var(--mud-palette-tertiary-text) !important;background-color:var(--mud-palette-tertiary) !important}.mud-info{background-color:var(--mud-palette-info) !important}.mud-info-text{color:var(--mud-palette-info) !important;--mud-ripple-color: var(--mud-palette-info) !important}.mud-info-hover{background-color:var(--mud-palette-info-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-info-hover:hover{background-color:var(--mud-palette-info-hover) !important}}.hover\:mud-info-hover:focus-visible,.hover\:mud-info-hover:active{background-color:var(--mud-palette-info-hover) !important}.mud-border-info{border-color:var(--mud-palette-info) !important}.mud-theme-info{color:var(--mud-palette-info-text) !important;background-color:var(--mud-palette-info) !important}.mud-success{background-color:var(--mud-palette-success) !important}.mud-success-text{color:var(--mud-palette-success) !important;--mud-ripple-color: var(--mud-palette-success) !important}.mud-success-hover{background-color:var(--mud-palette-success-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-success-hover:hover{background-color:var(--mud-palette-success-hover) !important}}.hover\:mud-success-hover:focus-visible,.hover\:mud-success-hover:active{background-color:var(--mud-palette-success-hover) !important}.mud-border-success{border-color:var(--mud-palette-success) !important}.mud-theme-success{color:var(--mud-palette-success-text) !important;background-color:var(--mud-palette-success) !important}.mud-warning{background-color:var(--mud-palette-warning) !important}.mud-warning-text{color:var(--mud-palette-warning) !important;--mud-ripple-color: var(--mud-palette-warning) !important}.mud-warning-hover{background-color:var(--mud-palette-warning-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-warning-hover:hover{background-color:var(--mud-palette-warning-hover) !important}}.hover\:mud-warning-hover:focus-visible,.hover\:mud-warning-hover:active{background-color:var(--mud-palette-warning-hover) !important}.mud-border-warning{border-color:var(--mud-palette-warning) !important}.mud-theme-warning{color:var(--mud-palette-warning-text) !important;background-color:var(--mud-palette-warning) !important}.mud-error{background-color:var(--mud-palette-error) !important}.mud-error-text{color:var(--mud-palette-error) !important;--mud-ripple-color: var(--mud-palette-error) !important}.mud-error-hover{background-color:var(--mud-palette-error-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-error-hover:hover{background-color:var(--mud-palette-error-hover) !important}}.hover\:mud-error-hover:focus-visible,.hover\:mud-error-hover:active{background-color:var(--mud-palette-error-hover) !important}.mud-border-error{border-color:var(--mud-palette-error) !important}.mud-theme-error{color:var(--mud-palette-error-text) !important;background-color:var(--mud-palette-error) !important}.mud-dark{background-color:var(--mud-palette-dark) !important}.mud-dark-text{color:var(--mud-palette-dark) !important;--mud-ripple-color: var(--mud-palette-dark) !important}.mud-dark-hover{background-color:var(--mud-palette-dark-hover) !important}@media(hover: hover)and (pointer: fine){.hover\:mud-dark-hover:hover{background-color:var(--mud-palette-dark-hover) !important}}.hover\:mud-dark-hover:focus-visible,.hover\:mud-dark-hover:active{background-color:var(--mud-palette-dark-hover) !important}.mud-border-dark{border-color:var(--mud-palette-dark) !important}.mud-theme-dark{color:var(--mud-palette-dark-text) !important;background-color:var(--mud-palette-dark) !important}.mud-inherit-text{color:inherit !important}.mud-border-lines-default{border-color:var(--mud-palette-lines-default)}.mud-background{background-color:var(--mud-palette-background) !important}.mud-background-gray{background-color:var(--mud-palette-background-gray) !important}.mud-theme-transparent{color:inherit !important;background-color:rgba(0,0,0,0) !important}.mud-transparent{background-color:rgba(0,0,0,0) !important}.mud-transparent-text{color:rgba(0,0,0,0) !important}.mud-text-primary{color:var(--mud-palette-text-primary)}.mud-text-secondary{color:var(--mud-palette-text-secondary)}.mud-text-disabled{color:var(--mud-palette-text-disabled)}.white{background-color:#fff !important}.white-text{color:#fff !important}.black{background-color:#000 !important}.black-text{color:#000 !important}*{box-sizing:border-box;margin:0;padding:0;border-width:0;border-style:solid;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:rgba(0,0,0,0)}strong,b{font-weight:700}body{color:var(--mud-palette-text-primary);font-family:var(--mud-typography-default-family);font-size:var(--mud-typography-default-size);font-weight:var(--mud-typography-default-weight);line-height:var(--mud-typography-default-lineheight);letter-spacing:var(--mud-typography-default-letterspacing);text-transform:var(--mud-typography-default-text-transform);background-color:var(--mud-palette-background)}a{color:var(--mud-palette-text-primary)}.mud-layout{height:100%;width:100%;position:relative}#blazor-error-ui{background-color:var(--mud-palette-error);color:var(--mud-palette-error-text);bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.75rem .7rem 1.25rem;position:fixed;width:100%;z-index:9999}#blazor-error-ui .reload{color:inherit;text-decoration:underline}#blazor-error-ui .dismiss{color:inherit;cursor:pointer;position:absolute;right:.75rem;top:.5rem}#components-reconnect-modal{z-index:9999 !important;background-color:var(--mud-palette-background) !important}#components-reconnect-modal h5{font-size:18px}#components-reconnect-modal button{color:var(--mud-palette-text-primary);padding:8px 16px;font-size:.875rem;min-width:64px;box-sizing:border-box;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-weight:500;line-height:1;border-radius:var(--mud-default-borderradius);letter-spacing:.02857em;text-transform:uppercase;margin:40px auto !important}@media(hover: hover)and (pointer: fine){#components-reconnect-modal button:hover{background-color:var(--mud-palette-action-default-hover)}}@keyframes mud-animation-fadein{0%{opacity:0}100%{opacity:1}}@-moz-keyframes mud-animation-fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes mud-animation-fadein{0%{opacity:0}100%{opacity:1}}@-o-keyframes mud-animation-fadein{0%{opacity:0}100%{opacity:1}}@-ms-keyframes mud-animation-fadein{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes mud-scale-up-center{0%{-webkit-transform:scale(0.5);transform:scale(0.5)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes mud-scale-up-center{0%{-webkit-transform:scale(0.5);transform:scale(0.5)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes mud-skeleton-keyframes-pulse{0%{opacity:1}50%{opacity:.4}100%{opacity:1}}@-webkit-keyframes mud-skeleton-keyframes-wave{0%{transform:translateX(-100%)}60%{transform:translateX(100%)}100%{transform:translateX(100%)}}@-webkit-keyframes mud-progress-circular-keyframes-circular-rotate{0%{transform-origin:50% 50%}100%{transform:rotate(360deg)}}@-webkit-keyframes mud-progress-circular-keyframes-circular-dash{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0px}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px}100%{stroke-dasharray:100px,200px;stroke-dashoffset:-125px}}@-webkit-keyframes mud-progress-linear-horizontal-keyframes-indeterminate1{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-webkit-keyframes mud-progress-linear-horizontal-keyframes-indeterminate2{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@-webkit-keyframes mud-progress-linear-horizontal-keyframes-buffer{0%{opacity:1;background-position:0 50%}50%{opacity:0;background-position:0 50%}100%{opacity:1;background-position:-200px 50%}}@-webkit-keyframes mud-progress-linear-vertical-keyframes-indeterminate1{0%{bottom:-35%;top:100%}60%{bottom:100%;top:-90%}100%{bottom:100%;top:-90%}}@-webkit-keyframes mud-progress-linear-vertical-keyframes-indeterminate2{0%{bottom:-200%;top:100%}60%{bottom:107%;top:-8%}100%{bottom:107%;top:-8%}}@-webkit-keyframes mud-progress-linear-vertical-keyframes-buffer{0%{opacity:1;background-position:50% 0}50%{opacity:0;background-position:50% 0}100%{opacity:1;background-position:50% -200px}}@keyframes mud-progress-linear-striped-loading{0%{background-position:0 0}100%{background-position:300px 0}}a{text-decoration:none}a:focus-visible{outline:none}label{display:inline-block}button{color:inherit;border:0;cursor:pointer;margin:0;display:inline-flex;outline:0;padding:0;position:relative;align-items:center;user-select:none;border-radius:0;vertical-align:middle;-moz-appearance:none;justify-content:center;text-decoration:none;background-color:rgba(0,0,0,0);-webkit-appearance:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}button:focus{outline:none}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}iframe{border:none;height:100%;width:100%}.mud-elevation-0{box-shadow:var(--mud-elevation-0)}.mud-elevation-1{box-shadow:var(--mud-elevation-1)}.mud-elevation-2{box-shadow:var(--mud-elevation-2)}.mud-elevation-3{box-shadow:var(--mud-elevation-3)}.mud-elevation-4{box-shadow:var(--mud-elevation-4)}.mud-elevation-5{box-shadow:var(--mud-elevation-5)}.mud-elevation-6{box-shadow:var(--mud-elevation-6)}.mud-elevation-7{box-shadow:var(--mud-elevation-7)}.mud-elevation-8{box-shadow:var(--mud-elevation-8)}.mud-elevation-9{box-shadow:var(--mud-elevation-9)}.mud-elevation-10{box-shadow:var(--mud-elevation-10)}.mud-elevation-11{box-shadow:var(--mud-elevation-11)}.mud-elevation-12{box-shadow:var(--mud-elevation-12)}.mud-elevation-13{box-shadow:var(--mud-elevation-13)}.mud-elevation-14{box-shadow:var(--mud-elevation-14)}.mud-elevation-15{box-shadow:var(--mud-elevation-15)}.mud-elevation-16{box-shadow:var(--mud-elevation-16)}.mud-elevation-17{box-shadow:var(--mud-elevation-17)}.mud-elevation-18{box-shadow:var(--mud-elevation-18)}.mud-elevation-19{box-shadow:var(--mud-elevation-19)}.mud-elevation-20{box-shadow:var(--mud-elevation-20)}.mud-elevation-21{box-shadow:var(--mud-elevation-21)}.mud-elevation-22{box-shadow:var(--mud-elevation-22)}.mud-elevation-23{box-shadow:var(--mud-elevation-23)}.mud-elevation-24{box-shadow:var(--mud-elevation-24)}.mud-elevation-25{box-shadow:var(--mud-elevation-25)}.mud-alert{display:flex;padding:6px 16px;border-radius:var(--mud-default-borderradius);background-color:rgba(0,0,0,0);transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-alert.mud-square{border-radius:0px}.mud-alert.mud-dense{padding:0px 12px}.mud-alert-text-normal{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-dark-hover)}.mud-alert-text-primary{color:var(--mud-palette-primary-darken);background-color:var(--mud-palette-primary-hover)}.mud-alert-text-primary .mud-alert-icon{color:var(--mud-palette-primary)}.mud-alert-text-secondary{color:var(--mud-palette-secondary-darken);background-color:var(--mud-palette-secondary-hover)}.mud-alert-text-secondary .mud-alert-icon{color:var(--mud-palette-secondary)}.mud-alert-text-tertiary{color:var(--mud-palette-tertiary-darken);background-color:var(--mud-palette-tertiary-hover)}.mud-alert-text-tertiary .mud-alert-icon{color:var(--mud-palette-tertiary)}.mud-alert-text-info{color:var(--mud-palette-info-darken);background-color:var(--mud-palette-info-hover)}.mud-alert-text-info .mud-alert-icon{color:var(--mud-palette-info)}.mud-alert-text-success{color:var(--mud-palette-success-darken);background-color:var(--mud-palette-success-hover)}.mud-alert-text-success .mud-alert-icon{color:var(--mud-palette-success)}.mud-alert-text-warning{color:var(--mud-palette-warning-darken);background-color:var(--mud-palette-warning-hover)}.mud-alert-text-warning .mud-alert-icon{color:var(--mud-palette-warning)}.mud-alert-text-error{color:var(--mud-palette-error-darken);background-color:var(--mud-palette-error-hover)}.mud-alert-text-error .mud-alert-icon{color:var(--mud-palette-error)}.mud-alert-text-dark{color:var(--mud-palette-dark-darken);background-color:var(--mud-palette-dark-hover)}.mud-alert-text-dark .mud-alert-icon{color:var(--mud-palette-dark)}.mud-alert-outlined-normal{color:var(--mud-palette-text-primary);border:1px solid rgba(var(--mud-palette-text-primary-rgb), var(--mud-palette-border-opacity))}.mud-alert-outlined-primary{color:var(--mud-palette-primary-darken);border:1px solid rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity))}.mud-alert-outlined-primary .mud-alert-icon{color:var(--mud-palette-primary)}.mud-alert-outlined-secondary{color:var(--mud-palette-secondary-darken);border:1px solid rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity))}.mud-alert-outlined-secondary .mud-alert-icon{color:var(--mud-palette-secondary)}.mud-alert-outlined-tertiary{color:var(--mud-palette-tertiary-darken);border:1px solid rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity))}.mud-alert-outlined-tertiary .mud-alert-icon{color:var(--mud-palette-tertiary)}.mud-alert-outlined-info{color:var(--mud-palette-info-darken);border:1px solid rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity))}.mud-alert-outlined-info .mud-alert-icon{color:var(--mud-palette-info)}.mud-alert-outlined-success{color:var(--mud-palette-success-darken);border:1px solid rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity))}.mud-alert-outlined-success .mud-alert-icon{color:var(--mud-palette-success)}.mud-alert-outlined-warning{color:var(--mud-palette-warning-darken);border:1px solid rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity))}.mud-alert-outlined-warning .mud-alert-icon{color:var(--mud-palette-warning)}.mud-alert-outlined-error{color:var(--mud-palette-error-darken);border:1px solid rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity))}.mud-alert-outlined-error .mud-alert-icon{color:var(--mud-palette-error)}.mud-alert-outlined-dark{color:var(--mud-palette-dark-darken);border:1px solid rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity))}.mud-alert-outlined-dark .mud-alert-icon{color:var(--mud-palette-dark)}.mud-alert-filled-normal{color:var(--mud-palette-dark-text);font-weight:500;background-color:var(--mud-palette-dark)}.mud-alert-filled-normal .mud-alert-close .mud-button-root{color:currentColor}.mud-alert-filled-primary{color:var(--mud-palette-primary-text);font-weight:500;background-color:var(--mud-palette-primary)}.mud-alert-filled-primary .mud-button-root{color:currentColor}.mud-alert-filled-secondary{color:var(--mud-palette-secondary-text);font-weight:500;background-color:var(--mud-palette-secondary)}.mud-alert-filled-secondary .mud-button-root{color:currentColor}.mud-alert-filled-tertiary{color:var(--mud-palette-tertiary-text);font-weight:500;background-color:var(--mud-palette-tertiary)}.mud-alert-filled-tertiary .mud-button-root{color:currentColor}.mud-alert-filled-info{color:var(--mud-palette-info-text);font-weight:500;background-color:var(--mud-palette-info)}.mud-alert-filled-info .mud-button-root{color:currentColor}.mud-alert-filled-success{color:var(--mud-palette-success-text);font-weight:500;background-color:var(--mud-palette-success)}.mud-alert-filled-success .mud-button-root{color:currentColor}.mud-alert-filled-warning{color:var(--mud-palette-warning-text);font-weight:500;background-color:var(--mud-palette-warning)}.mud-alert-filled-warning .mud-button-root{color:currentColor}.mud-alert-filled-error{color:var(--mud-palette-error-text);font-weight:500;background-color:var(--mud-palette-error)}.mud-alert-filled-error .mud-button-root{color:currentColor}.mud-alert-filled-dark{color:var(--mud-palette-dark-text);font-weight:500;background-color:var(--mud-palette-dark)}.mud-alert-filled-dark .mud-button-root{color:currentColor}.mud-alert-icon{display:flex;opacity:.9;padding:7px 0;font-size:22px;margin-right:12px;margin-inline-end:12px;margin-inline-start:unset}.mud-alert-icon.mud-alert-icon-left{margin-right:12px;margin-inline-end:12px;margin-inline-start:unset}.mud-alert-icon.mud-alert-icon-right{margin-left:12px;margin-inline-start:12px;margin-inline-end:unset}.mud-alert-message{padding:9px 0}.mud-alert-position{flex:1;display:flex;align-items:start}.mud-alert-close{display:flex;flex:0;align-items:center;margin-left:8px}.mud-badge-root{position:relative;display:inline-block}.mud-badge-root .mud-badge-wrapper{top:0;left:0;flex:0 1;width:100%;height:100%;display:flex;pointer-events:none;position:absolute}.mud-badge-root .mud-badge-wrapper.mud-badge-top{align-items:flex-start}.mud-badge-root .mud-badge-wrapper.mud-badge-top.left{justify-content:flex-start}.mud-badge-root .mud-badge-wrapper.mud-badge-top.center{justify-content:center}.mud-badge-root .mud-badge-wrapper.mud-badge-top.right{justify-content:flex-end}.mud-badge-root .mud-badge-wrapper.mud-badge-center{align-items:center}.mud-badge-root .mud-badge-wrapper.mud-badge-center.left{justify-content:flex-start}.mud-badge-root .mud-badge-wrapper.mud-badge-center.center{justify-content:center}.mud-badge-root .mud-badge-wrapper.mud-badge-center.right{justify-content:flex-end}.mud-badge-root .mud-badge-wrapper.mud-badge-bottom{align-items:flex-end}.mud-badge-root .mud-badge-wrapper.mud-badge-bottom.left{justify-content:flex-start}.mud-badge-root .mud-badge-wrapper.mud-badge-bottom.center{justify-content:center}.mud-badge-root .mud-badge-wrapper.mud-badge-bottom.right{justify-content:flex-end}.mud-badge{border-radius:10px;font-size:12px;height:20px;letter-spacing:0;min-width:20px;padding:4px 6px;pointer-events:auto;line-height:1;position:absolute;text-align:center;text-indent:0;top:auto;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1);white-space:nowrap}.mud-badge.mud-badge-default{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-gray-light)}.mud-badge.mud-badge-bordered{border-color:var(--mud-palette-surface);border-style:solid;border-width:2px;padding:3px 4px}.mud-badge.mud-badge-bordered.mud-badge-icon{padding:4px 6px}.mud-badge.mud-badge-icon{width:20px;height:20px}.mud-badge.mud-badge-icon .mud-icon-badge{color:inherit;font-size:12px}.mud-badge.mud-badge-dot{border-radius:50%;height:9px;min-width:0;padding:0;width:9px}.mud-badge.mud-badge{display:flex;align-items:center;justify-content:center}.mud-badge.mud-badge-top.left{inset:auto calc(100% - 4px) calc(100% - 4px) auto}.mud-badge.mud-badge-top.left.mud-badge-overlap{inset:auto calc(100% - 12px) calc(100% - 12px) auto}.mud-badge.mud-badge-top.center{bottom:calc(100% - 4px)}.mud-badge.mud-badge-top.center.mud-badge-overlap{bottom:calc(100% - 12px)}.mud-badge.mud-badge-top.right{inset:auto auto calc(100% - 4px) calc(100% - 4px)}.mud-badge.mud-badge-top.right.mud-badge-overlap{inset:auto auto calc(100% - 12px) calc(100% - 12px)}.mud-badge.mud-badge-center.left{right:calc(100% - 4px)}.mud-badge.mud-badge-center.left.mud-badge-overlap{right:calc(100% - 12px)}.mud-badge.mud-badge-center.right{left:calc(100% - 4px)}.mud-badge.mud-badge-center.right.mud-badge-overlap{left:calc(100% - 12px)}.mud-badge.mud-badge-bottom.left{inset:calc(100% - 4px) calc(100% - 4px) auto auto}.mud-badge.mud-badge-bottom.left.mud-badge-overlap{inset:calc(100% - 12px) calc(100% - 12px) auto auto}.mud-badge.mud-badge-bottom.center{top:calc(100% - 4px)}.mud-badge.mud-badge-bottom.center.mud-badge-overlap{top:calc(100% - 12px)}.mud-badge.mud-badge-bottom.right{inset:calc(100% - 4px) auto auto calc(100% - 4px)}.mud-badge.mud-badge-bottom.right.mud-badge-overlap{inset:calc(100% - 12px) auto auto calc(100% - 12px)}.mud-toolbar{display:flex;position:relative;align-items:center;--mud-internal-toolbar-height: 56px;height:var(--mud-internal-toolbar-height)}.mud-toolbar-gutters{padding-left:16px;padding-right:16px}@media(min-width: 0px)and (orientation: landscape){.mud-toolbar{--mud-internal-toolbar-height: 48px}}@media(min-width: 600px){.mud-toolbar{--mud-internal-toolbar-height: 64px}.mud-toolbar-gutters{padding-left:24px;padding-right:24px}}.mud-toolbar-dense{--mud-internal-toolbar-height: 48px}.mud-toolbar.mud-toolbar-wrap-content{height:auto;min-height:var(--mud-internal-toolbar-height);flex-wrap:wrap}.mud-toolbar.mud-toolbar-wrap-content.mud-toolbar-appbar{min-height:min(var(--mud-appbar-height),var(--mud-internal-toolbar-height))}.mud-tooltip-root.mud-tooltip-inline{display:inline-block}.mud-tooltip-root.mud-tooltip-inline:has(>.mud-width-full){display:block;width:100%}.mud-tooltip{padding:4px 8px;text-align:center;align-items:center;justify-content:center;font-weight:500;font-size:12px;line-height:1.4em;border-radius:var(--mud-default-borderradius);z-index:var(--mud-zindex-tooltip)}.mud-tooltip.mud-tooltip-default{color:var(--mud-palette-dark-text);background-color:var(--mud-palette-gray-darker)}.mud-tooltip.mud-tooltip-default.mud-tooltip-arrow::after{border-color:var(--mud-palette-gray-darker) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0)}.mud-tooltip.mud-tooltip-center-left:not([data-mudpopover-flip]),.mud-tooltip.mud-tooltip-center-right[data-mudpopover-flip]{transform:translateX(-10px)}.mud-tooltip.mud-tooltip-center-left:not([data-mudpopover-flip]).mud-tooltip-arrow::after,.mud-tooltip.mud-tooltip-center-right[data-mudpopover-flip].mud-tooltip-arrow::after{left:100%;transform:rotate(270deg)}.mud-tooltip.mud-tooltip-center-right:not([data-mudpopover-flip]),.mud-tooltip.mud-tooltip-center-left[data-mudpopover-flip]{transform:translateX(10px)}.mud-tooltip.mud-tooltip-center-right:not([data-mudpopover-flip]).mud-tooltip-arrow::after,.mud-tooltip.mud-tooltip-center-left[data-mudpopover-flip].mud-tooltip-arrow::after{right:100%;transform:rotate(90deg)}.mud-tooltip.mud-tooltip-top-center:not([data-mudpopover-flip]),.mud-tooltip.mud-tooltip-bottom-center[data-mudpopover-flip]{transform:translateY(-10px)}.mud-tooltip.mud-tooltip-top-center:not([data-mudpopover-flip]).mud-tooltip-arrow::after,.mud-tooltip.mud-tooltip-bottom-center[data-mudpopover-flip].mud-tooltip-arrow::after{top:100%;transform:rotate(0deg)}.mud-tooltip.mud-tooltip-bottom-center:not([data-mudpopover-flip]),.mud-tooltip.mud-tooltip-top-center[data-mudpopover-flip]{transform:translateY(10px)}.mud-tooltip.mud-tooltip-bottom-center:not([data-mudpopover-flip]).mud-tooltip-arrow::after,.mud-tooltip.mud-tooltip-top-center[data-mudpopover-flip].mud-tooltip-arrow::after{bottom:100%;transform:rotate(180deg)}.mud-tooltip.mud-tooltip-arrow::after{content:"";position:absolute;border-width:6px;border-style:solid;border-color:rgba(0,0,0,0);border-top-color:inherit}.mud-avatar{display:inline-flex;overflow:hidden;position:relative;align-items:center;flex-shrink:0;line-height:1;user-select:none;border-radius:50%;justify-content:center;color:var(--mud-palette-white);background-color:var(--mud-palette-gray-light)}.mud-avatar.mud-avatar-small{width:24px;height:24px;font-size:.75rem}.mud-avatar.mud-avatar-medium{width:40px;height:40px;font-size:1.25rem}.mud-avatar.mud-avatar-large{width:56px;height:56px;font-size:1.5rem}.mud-avatar-rounded{border-radius:var(--mud-default-borderradius)}.mud-avatar-square{border-radius:0}.mud-avatar>.mud-image{color:rgba(0,0,0,0);width:100%;height:100%;object-fit:cover;text-align:center;text-indent:10000px}.mud-avatar-fallback{width:75%;height:75%}.mud-avatar-outlined{color:var(--mud-palette-text-primary);background-color:unset;border:1px solid rgba(var(--mud-palette-text-primary-rgb), var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-primary{color:var(--mud-palette-primary);border:1px solid rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-secondary{color:var(--mud-palette-secondary);border:1px solid rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-tertiary{color:var(--mud-palette-tertiary);border:1px solid rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-info{color:var(--mud-palette-info);border:1px solid rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-success{color:var(--mud-palette-success);border:1px solid rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-warning{color:var(--mud-palette-warning);border:1px solid rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-error{color:var(--mud-palette-error);border:1px solid rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity))}.mud-avatar-outlined.mud-avatar-outlined-dark{color:var(--mud-palette-dark);border:1px solid rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity))}.mud-avatar-filled{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-lines-inputs)}.mud-avatar-filled.mud-avatar-filled-primary{color:var(--mud-palette-primary-text);background-color:var(--mud-palette-primary)}.mud-avatar-filled.mud-avatar-filled-secondary{color:var(--mud-palette-secondary-text);background-color:var(--mud-palette-secondary)}.mud-avatar-filled.mud-avatar-filled-tertiary{color:var(--mud-palette-tertiary-text);background-color:var(--mud-palette-tertiary)}.mud-avatar-filled.mud-avatar-filled-info{color:var(--mud-palette-info-text);background-color:var(--mud-palette-info)}.mud-avatar-filled.mud-avatar-filled-success{color:var(--mud-palette-success-text);background-color:var(--mud-palette-success)}.mud-avatar-filled.mud-avatar-filled-warning{color:var(--mud-palette-warning-text);background-color:var(--mud-palette-warning)}.mud-avatar-filled.mud-avatar-filled-error{color:var(--mud-palette-error-text);background-color:var(--mud-palette-error)}.mud-avatar-filled.mud-avatar-filled-dark{color:var(--mud-palette-dark-text);background-color:var(--mud-palette-dark)}.mud-avatar-group{display:flex}.mud-avatar-group .mud-avatar:first-child{margin-inline-start:0px !important}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-transparent .mud-avatar:not(.mud-avatar-outlined){border-color:rgba(0,0,0,0)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-surface .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-surface)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-primary .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-primary)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-secondary .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-secondary)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-tertiary .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-tertiary)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-info .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-info)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-success .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-success)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-warning .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-warning)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-error .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-error)}.mud-avatar-group.mud-avatar-group-outlined.mud-avatar-group-outlined-dark .mud-avatar:not(.mud-avatar-outlined){border-color:var(--mud-palette-dark)}.mud-avatar-group.mud-avatar-group-outlined .mud-avatar{border:2px solid}.mud-avatar-group.mud-avatar-group-outlined .mud-avatar.mud-avatar-small{width:28px;height:28px}.mud-avatar-group.mud-avatar-group-outlined .mud-avatar.mud-avatar-medium{width:44px;height:44px}.mud-avatar-group.mud-avatar-group-outlined .mud-avatar.mud-avatar-large{width:60px;height:60px}.mud-breadcrumbs{display:flex;flex-wrap:wrap;flex:0 1 auto;align-items:center;list-style:none;margin:0;padding:16px 12px}.mud-breadcrumb-separator{display:inline-flex;padding:0 12px}.mud-breadcrumb-separator>span{color:var(--mud-palette-text-primary);opacity:.38}.mud-breadcrumb-item>a{display:flex;align-items:center}.mud-breadcrumb-item>a>svg.mud-icon-root{margin-right:4px;margin-inline-end:4px;margin-inline-start:unset}.mud-breadcrumb-item.mud-disabled>a{pointer-events:none;color:var(--mud-palette-action-disabled)}.mud-breadcrumbs-expander{cursor:pointer;display:flex;background-color:#eee}@media(hover: hover)and (pointer: fine){.mud-breadcrumbs-expander:hover{background-color:#e0e0e0}}.mud-breadcrumbs-expander>svg{width:26px}.mud-button-root{color:inherit;border:0;cursor:pointer;margin:0;display:inline-flex;outline:0;padding:0;position:relative;align-items:center;user-select:none;border-radius:0;vertical-align:middle;-moz-appearance:none;justify-content:center;text-decoration:none;background-color:rgba(0,0,0,0);-webkit-appearance:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mud-button-root::-moz-focus-inner{border-style:none}.mud-button-root:disabled{color:var(--mud-palette-action-disabled) !important;cursor:default;pointer-events:none}.mud-button{padding:6px 16px;font-family:var(--mud-typography-button-family);font-size:var(--mud-typography-button-size);font-weight:var(--mud-typography-button-weight);line-height:var(--mud-typography-button-lineheight);letter-spacing:var(--mud-typography-button-letterspacing);text-transform:var(--mud-typography-button-text-transform);min-width:64px;box-sizing:border-box;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:var(--mud-default-borderradius);color:var(--mud-palette-text-primary);--mud-ripple-color: var(--mud-palette-text-primary)}@media(hover: hover)and (pointer: fine){.mud-button:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-button:focus-visible,.mud-button:active{background-color:var(--mud-palette-action-default-hover)}.mud-button-text{padding:6px 8px}.mud-button-text.mud-button-text-inherit{color:inherit}.mud-button-text.mud-button-text-primary{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-primary:hover{background-color:var(--mud-palette-primary-hover)}}.mud-button-text.mud-button-text-primary:focus-visible,.mud-button-text.mud-button-text-primary:active{background-color:var(--mud-palette-primary-hover)}.mud-button-text.mud-button-text-secondary{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-secondary:hover{background-color:var(--mud-palette-secondary-hover)}}.mud-button-text.mud-button-text-secondary:focus-visible,.mud-button-text.mud-button-text-secondary:active{background-color:var(--mud-palette-secondary-hover)}.mud-button-text.mud-button-text-tertiary{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-tertiary:hover{background-color:var(--mud-palette-tertiary-hover)}}.mud-button-text.mud-button-text-tertiary:focus-visible,.mud-button-text.mud-button-text-tertiary:active{background-color:var(--mud-palette-tertiary-hover)}.mud-button-text.mud-button-text-info{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-info:hover{background-color:var(--mud-palette-info-hover)}}.mud-button-text.mud-button-text-info:focus-visible,.mud-button-text.mud-button-text-info:active{background-color:var(--mud-palette-info-hover)}.mud-button-text.mud-button-text-success{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-success:hover{background-color:var(--mud-palette-success-hover)}}.mud-button-text.mud-button-text-success:focus-visible,.mud-button-text.mud-button-text-success:active{background-color:var(--mud-palette-success-hover)}.mud-button-text.mud-button-text-warning{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-warning:hover{background-color:var(--mud-palette-warning-hover)}}.mud-button-text.mud-button-text-warning:focus-visible,.mud-button-text.mud-button-text-warning:active{background-color:var(--mud-palette-warning-hover)}.mud-button-text.mud-button-text-error{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-error:hover{background-color:var(--mud-palette-error-hover)}}.mud-button-text.mud-button-text-error:focus-visible,.mud-button-text.mud-button-text-error:active{background-color:var(--mud-palette-error-hover)}.mud-button-text.mud-button-text-dark{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-button-text.mud-button-text-dark:hover{background-color:var(--mud-palette-dark-hover)}}.mud-button-text.mud-button-text-dark:focus-visible,.mud-button-text.mud-button-text-dark:active{background-color:var(--mud-palette-dark-hover)}.mud-button-outlined{color:var(--mud-palette-text-primary);border:1px solid rgba(var(--mud-palette-text-primary-rgb), var(--mud-palette-border-opacity));padding:5px 15px}.mud-button-outlined.mud-button-outlined-inherit{color:inherit;border-color:currentColor}.mud-button-outlined.mud-icon-button{padding:5px}@media(hover: hover)and (pointer: fine){.mud-button-outlined:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-button-outlined:focus-visible,.mud-button-outlined:active{background-color:var(--mud-palette-action-default-hover)}.mud-button-outlined.mud-button-outlined-primary{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary);border:1px solid rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-primary:hover{border:1px solid rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-primary-hover)}}.mud-button-outlined.mud-button-outlined-primary:focus-visible,.mud-button-outlined.mud-button-outlined-primary:active{border:1px solid rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-primary-hover)}.mud-button-outlined.mud-button-outlined-secondary{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary);border:1px solid rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-secondary:hover{border:1px solid rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-secondary-hover)}}.mud-button-outlined.mud-button-outlined-secondary:focus-visible,.mud-button-outlined.mud-button-outlined-secondary:active{border:1px solid rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-secondary-hover)}.mud-button-outlined.mud-button-outlined-tertiary{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary);border:1px solid rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-tertiary:hover{border:1px solid rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-tertiary-hover)}}.mud-button-outlined.mud-button-outlined-tertiary:focus-visible,.mud-button-outlined.mud-button-outlined-tertiary:active{border:1px solid rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-tertiary-hover)}.mud-button-outlined.mud-button-outlined-info{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info);border:1px solid rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-info:hover{border:1px solid rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-info-hover)}}.mud-button-outlined.mud-button-outlined-info:focus-visible,.mud-button-outlined.mud-button-outlined-info:active{border:1px solid rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-info-hover)}.mud-button-outlined.mud-button-outlined-success{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success);border:1px solid rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-success:hover{border:1px solid rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-success-hover)}}.mud-button-outlined.mud-button-outlined-success:focus-visible,.mud-button-outlined.mud-button-outlined-success:active{border:1px solid rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-success-hover)}.mud-button-outlined.mud-button-outlined-warning{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning);border:1px solid rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-warning:hover{border:1px solid rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-warning-hover)}}.mud-button-outlined.mud-button-outlined-warning:focus-visible,.mud-button-outlined.mud-button-outlined-warning:active{border:1px solid rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-warning-hover)}.mud-button-outlined.mud-button-outlined-error{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error);border:1px solid rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-error:hover{border:1px solid rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-error-hover)}}.mud-button-outlined.mud-button-outlined-error:focus-visible,.mud-button-outlined.mud-button-outlined-error:active{border:1px solid rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-error-hover)}.mud-button-outlined.mud-button-outlined-dark{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark);border:1px solid rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-button-outlined.mud-button-outlined-dark:hover{border:1px solid rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-dark-hover)}}.mud-button-outlined.mud-button-outlined-dark:focus-visible,.mud-button-outlined.mud-button-outlined-dark:active{border:1px solid rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity));background-color:var(--mud-palette-dark-hover)}.mud-button-outlined:disabled{border:1px solid var(--mud-palette-action-disabled-background)}.mud-button-filled{color:var(--mud-palette-text-primary);--mud-ripple-color: var(--mud-palette-text-primary);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;box-shadow:0px 3px 1px -2px rgba(0,0,0,.2),0px 2px 2px 0px rgba(0,0,0,.14),0px 1px 5px 0px rgba(0,0,0,.12);background-color:var(--mud-palette-action-default-hover)}.mud-button-filled.mud-icon-button{padding:6px}@media(hover: hover)and (pointer: fine){.mud-button-filled:hover{box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}}.mud-button-filled:focus-visible{box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}.mud-button-filled:active{box-shadow:0px 5px 5px -3px rgba(0,0,0,.2),0px 8px 10px 1px rgba(0,0,0,.14),0px 3px 14px 2px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}.mud-button-filled:disabled{color:var(--mud-palette-action-disabled);box-shadow:none;background-color:var(--mud-palette-action-disabled-background) !important}.mud-button-filled.mud-button-filled-primary{color:var(--mud-palette-primary-text);--mud-ripple-color: var(--mud-palette-primary-text);background-color:var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-primary:hover{background-color:var(--mud-palette-primary-darken)}}.mud-button-filled.mud-button-filled-primary:focus-visible,.mud-button-filled.mud-button-filled-primary:active{background-color:var(--mud-palette-primary-darken)}.mud-button-filled.mud-button-filled-secondary{color:var(--mud-palette-secondary-text);--mud-ripple-color: var(--mud-palette-secondary-text);background-color:var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-secondary:hover{background-color:var(--mud-palette-secondary-darken)}}.mud-button-filled.mud-button-filled-secondary:focus-visible,.mud-button-filled.mud-button-filled-secondary:active{background-color:var(--mud-palette-secondary-darken)}.mud-button-filled.mud-button-filled-tertiary{color:var(--mud-palette-tertiary-text);--mud-ripple-color: var(--mud-palette-tertiary-text);background-color:var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-tertiary:hover{background-color:var(--mud-palette-tertiary-darken)}}.mud-button-filled.mud-button-filled-tertiary:focus-visible,.mud-button-filled.mud-button-filled-tertiary:active{background-color:var(--mud-palette-tertiary-darken)}.mud-button-filled.mud-button-filled-info{color:var(--mud-palette-info-text);--mud-ripple-color: var(--mud-palette-info-text);background-color:var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-info:hover{background-color:var(--mud-palette-info-darken)}}.mud-button-filled.mud-button-filled-info:focus-visible,.mud-button-filled.mud-button-filled-info:active{background-color:var(--mud-palette-info-darken)}.mud-button-filled.mud-button-filled-success{color:var(--mud-palette-success-text);--mud-ripple-color: var(--mud-palette-success-text);background-color:var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-success:hover{background-color:var(--mud-palette-success-darken)}}.mud-button-filled.mud-button-filled-success:focus-visible,.mud-button-filled.mud-button-filled-success:active{background-color:var(--mud-palette-success-darken)}.mud-button-filled.mud-button-filled-warning{color:var(--mud-palette-warning-text);--mud-ripple-color: var(--mud-palette-warning-text);background-color:var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-warning:hover{background-color:var(--mud-palette-warning-darken)}}.mud-button-filled.mud-button-filled-warning:focus-visible,.mud-button-filled.mud-button-filled-warning:active{background-color:var(--mud-palette-warning-darken)}.mud-button-filled.mud-button-filled-error{color:var(--mud-palette-error-text);--mud-ripple-color: var(--mud-palette-error-text);background-color:var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-error:hover{background-color:var(--mud-palette-error-darken)}}.mud-button-filled.mud-button-filled-error:focus-visible,.mud-button-filled.mud-button-filled-error:active{background-color:var(--mud-palette-error-darken)}.mud-button-filled.mud-button-filled-dark{color:var(--mud-palette-dark-text);--mud-ripple-color: var(--mud-palette-dark-text);background-color:var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-button-filled.mud-button-filled-dark:hover{background-color:var(--mud-palette-dark-darken)}}.mud-button-filled.mud-button-filled-dark:focus-visible,.mud-button-filled.mud-button-filled-dark:active{background-color:var(--mud-palette-dark-darken)}.mud-button-disable-elevation{box-shadow:none}@media(hover: hover)and (pointer: fine){.mud-button-disable-elevation:hover{box-shadow:none}}.mud-button-disable-elevation:active{box-shadow:none}.mud-button-disable-elevation.mud-focus-visible{box-shadow:none}.mud-button-disable-elevation:disabled{box-shadow:none}.mud-button-color-inherit{color:inherit;border-color:currentColor}.mud-button-text-size-small{padding:4px 5px;font-size:.8125rem}.mud-button-text-size-large{padding:8px 11px;font-size:.9375rem}.mud-button-outlined-size-small{padding:3px 9px;font-size:.8125rem}.mud-button-outlined-size-small.mud-icon-button{padding:4px}.mud-button-outlined-size-large{padding:7px 21px;font-size:.9375rem}.mud-button-outlined-size-large.mud-icon-button{padding:4px}.mud-button-filled-size-small{padding:4px 10px;font-size:.8125rem}.mud-button-filled-size-small.mud-icon-button{padding:5px}.mud-button-filled-size-large{padding:8px 22px;font-size:.9375rem}.mud-button-filled-size-large.mud-icon-button{padding:5px}.mud-button-full-width{width:100%}.mud-button-label{width:100%;display:inherit;align-items:inherit;justify-content:inherit}.mud-button-label .mud-button-icon-start{display:inherit;margin-left:-4px;margin-right:8px;margin-inline-start:-4px;margin-inline-end:8px}.mud-button-label .mud-button-icon-start.mud-button-icon-size-small{margin-left:-2px;margin-inline-start:-2px;margin-inline-end:8px}.mud-button-label .mud-button-icon-end{display:inherit;margin-left:8px;margin-right:-4px;margin-inline-start:8px;margin-inline-end:-4px}.mud-button-label .mud-button-icon-end.mud-button-icon-size-small{margin-right:-2px;margin-inline-end:-2px;margin-inline-start:8px}.mud-button-icon-size-small>*:first-child{font-size:18px}.mud-button-icon-size-medium>*:first-child{font-size:20px}.mud-button-icon-size-large>*:first-child{font-size:22px}.mud-button-group-root{border-radius:var(--mud-default-borderradius);display:inline-flex}.mud-button-group-root .mud-button-root{border-radius:var(--mud-default-borderradius)}.mud-button-group-root.mud-button-group-override-styles .mud-button{color:var(--mud-palette-text-primary);--mud-ripple-color: var(--mud-palette-text-primary)}.mud-button-group-root.mud-button-group-override-styles .mud-button-root{background-color:inherit;box-shadow:none;border:none}@media(hover: hover)and (pointer: fine){.mud-button-group-root.mud-button-group-override-styles .mud-button-root:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-button-group-root.mud-button-group-override-styles .mud-button-root:focus-visible,.mud-button-group-root.mud-button-group-override-styles .mud-button-root:active{background-color:var(--mud-palette-action-default-hover)}.mud-button-group-root.mud-button-group-override-styles .mud-button-root:disabled{border-color:var(--mud-palette-action-disabled-background) !important}.mud-button-group-root.mud-button-group-text-size-small .mud-button-root{padding:4px 5px;font-size:.8125rem}.mud-button-group-root.mud-button-group-text-size-small .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.422rem}.mud-button-group-root.mud-button-group-text-size-large .mud-button-root{padding:8px 11px;font-size:.9375rem}.mud-button-group-root.mud-button-group-text-size-large .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.641rem}.mud-button-group-root.mud-button-group-outlined-size-small .mud-button-root{padding:3px 9px;font-size:.8125rem}.mud-button-group-root.mud-button-group-outlined-size-small .mud-button-root.mud-icon-button{padding:3px 9px}.mud-button-group-root.mud-button-group-outlined-size-small .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.422rem}.mud-button-group-root.mud-button-group-outlined-size-large .mud-button-root{padding:7px 21px;font-size:.9375rem}.mud-button-group-root.mud-button-group-outlined-size-large .mud-button-root.mud-icon-button{padding:7px 15px}.mud-button-group-root.mud-button-group-outlined-size-large .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.641rem}.mud-button-group-root.mud-button-group-filled-size-small .mud-button-root{padding:4px 10px;font-size:.8125rem}.mud-button-group-root.mud-button-group-filled-size-small .mud-button-root.mud-icon-button{padding:4px 10px}.mud-button-group-root.mud-button-group-filled-size-small .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.422rem}.mud-button-group-root.mud-button-group-filled-size-large .mud-button-root{padding:8px 22px;font-size:.9375rem}.mud-button-group-root.mud-button-group-filled-size-large .mud-button-root.mud-icon-button{padding:8px 16px}.mud-button-group-root.mud-button-group-filled-size-large .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.641rem}.mud-button-group-root .mud-button-root.mud-icon-button{padding-right:12px;padding-left:12px}.mud-button-group-root .mud-button-root.mud-icon-button .mud-icon-root{font-size:1.516rem}.mud-button-group-root .mud-button-root.mud-icon-button.mud-ripple-icon:after{transform:scale(10, 10)}.mud-button-group-root .mud-button-root.mud-icon-button.mud-ripple-icon:active:after{transform:scale(0, 0);opacity:.1;transition:0s}.mud-button-group-horizontal:not(.mud-button-group-rtl)>.mud-button-root:not(:last-child),.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:last-child) .mud-button-root{border-top-right-radius:0;border-bottom-right-radius:0}.mud-button-group-horizontal:not(.mud-button-group-rtl)>.mud-button-root:not(:first-child),.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.mud-button-group-horizontal.mud-button-group-rtl>.mud-button-root:not(:last-child),.mud-button-group-horizontal.mud-button-group-rtl>:not(:last-child) .mud-button-root{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.mud-button-group-horizontal.mud-button-group-rtl>.mud-button-root:not(:first-child),.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-top-right-radius:0;border-bottom-right-radius:0}.mud-button-group-vertical{flex-direction:column}.mud-button-group-vertical .mud-icon-button{width:100%}.mud-button-group-vertical>.mud-button-root:not(:last-child),.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom-right-radius:0;border-bottom-left-radius:0}.mud-button-group-vertical>.mud-button-root:not(:first-child),.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top-right-radius:0;border-top-left-radius:0;margin-top:-1px}.mud-button-group-text.mud-button-group-override-styles .mud-button-root{padding:6px 8px}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgba(var(--mud-palette-text-primary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgba(var(--mud-palette-text-primary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgba(var(--mud-palette-text-primary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary .mud-button-root{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary .mud-button-root:hover{background-color:var(--mud-palette-primary-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary .mud-button-root:active{background-color:var(--mud-palette-primary-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-primary.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary .mud-button-root{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary .mud-button-root:hover{background-color:var(--mud-palette-secondary-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary .mud-button-root:active{background-color:var(--mud-palette-secondary-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-secondary.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary .mud-button-root{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary .mud-button-root:hover{background-color:var(--mud-palette-tertiary-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary .mud-button-root:active{background-color:var(--mud-palette-tertiary-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-tertiary.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info .mud-button-root{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info .mud-button-root:hover{background-color:var(--mud-palette-info-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info .mud-button-root:active{background-color:var(--mud-palette-info-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-info.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success .mud-button-root{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success .mud-button-root:hover{background-color:var(--mud-palette-success-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success .mud-button-root:active{background-color:var(--mud-palette-success-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-success.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning .mud-button-root{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning .mud-button-root:hover{background-color:var(--mud-palette-warning-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning .mud-button-root:active{background-color:var(--mud-palette-warning-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-warning.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error .mud-button-root{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error .mud-button-root:hover{background-color:var(--mud-palette-error-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error .mud-button-root:active{background-color:var(--mud-palette-error-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-error.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark .mud-button-root{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark .mud-button-root:hover{background-color:var(--mud-palette-dark-hover)}}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark .mud-button-root:focus-visible,.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark .mud-button-root:active{background-color:var(--mud-palette-dark-hover)}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity))}.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-vertical .mud-button-root:not(:last-child),.mud-button-group-text.mud-button-group-override-styles.mud-button-group-text-dark.mud-button-group-vertical>:not(:last-child) .mud-button-root{border-bottom:1px solid rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity))}.mud-button-group-outlined.mud-button-group-override-styles .mud-button-root{padding:5px 15px;border:1px solid rgba(var(--mud-palette-text-primary-rgb), var(--mud-palette-border-opacity))}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-primary .mud-button-root{color:var(--mud-palette-primary);border:1px solid rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-primary .mud-button-root:hover{background-color:var(--mud-palette-primary-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-primary .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-primary .mud-button-root:active{background-color:var(--mud-palette-primary-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-secondary .mud-button-root{color:var(--mud-palette-secondary);border:1px solid rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-secondary .mud-button-root:hover{background-color:var(--mud-palette-secondary-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-secondary .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-secondary .mud-button-root:active{background-color:var(--mud-palette-secondary-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-tertiary .mud-button-root{color:var(--mud-palette-tertiary);border:1px solid rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-tertiary .mud-button-root:hover{background-color:var(--mud-palette-tertiary-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-tertiary .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-tertiary .mud-button-root:active{background-color:var(--mud-palette-tertiary-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-info .mud-button-root{color:var(--mud-palette-info);border:1px solid rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-info .mud-button-root:hover{background-color:var(--mud-palette-info-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-info .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-info .mud-button-root:active{background-color:var(--mud-palette-info-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-success .mud-button-root{color:var(--mud-palette-success);border:1px solid rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-success .mud-button-root:hover{background-color:var(--mud-palette-success-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-success .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-success .mud-button-root:active{background-color:var(--mud-palette-success-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-warning .mud-button-root{color:var(--mud-palette-warning);border:1px solid rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-warning .mud-button-root:hover{background-color:var(--mud-palette-warning-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-warning .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-warning .mud-button-root:active{background-color:var(--mud-palette-warning-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-error .mud-button-root{color:var(--mud-palette-error);border:1px solid rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-error .mud-button-root:hover{background-color:var(--mud-palette-error-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-error .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-error .mud-button-root:active{background-color:var(--mud-palette-error-hover)}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-dark .mud-button-root{color:var(--mud-palette-dark);border:1px solid rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity));--mud-ripple-color: var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-dark .mud-button-root:hover{background-color:var(--mud-palette-dark-hover)}}.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-dark .mud-button-root:focus-visible,.mud-button-group-outlined.mud-button-group-override-styles.mud-button-group-outlined-dark .mud-button-root:active{background-color:var(--mud-palette-dark-hover)}.mud-button-group-filled{box-shadow:var(--mud-elevation-2)}.mud-button-group-filled .mud-button-root{box-shadow:none}@media(hover: hover)and (pointer: fine){.mud-button-group-filled .mud-button-root:hover{box-shadow:var(--mud-elevation-4)}}.mud-button-group-filled .mud-button-root:focus-visible,.mud-button-group-filled .mud-button-root:active{box-shadow:var(--mud-elevation-4)}.mud-button-group-filled.mud-button-group-override-styles .mud-button-root{background-color:var(--mud-palette-action-default-hover);padding:6px 16px}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid rgba(var(--mud-palette-divider-rgb), var(--mud-palette-border-opacity))}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid rgba(var(--mud-palette-divider-rgb), var(--mud-palette-border-opacity))}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid rgba(var(--mud-palette-divider-rgb), var(--mud-palette-border-opacity))}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary .mud-button-root{background-color:var(--mud-palette-primary);color:var(--mud-palette-primary-text);--mud-ripple-color: var(--mud-palette-primary-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary .mud-button-root:hover{background-color:var(--mud-palette-primary-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary .mud-button-root:active{background-color:var(--mud-palette-primary-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-primary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-primary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-primary.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-primary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary .mud-button-root{background-color:var(--mud-palette-secondary);color:var(--mud-palette-secondary-text);--mud-ripple-color: var(--mud-palette-secondary-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary .mud-button-root:hover{background-color:var(--mud-palette-secondary-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary .mud-button-root:active{background-color:var(--mud-palette-secondary-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-secondary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-secondary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-secondary.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-secondary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary .mud-button-root{background-color:var(--mud-palette-tertiary);color:var(--mud-palette-tertiary-text);--mud-ripple-color: var(--mud-palette-tertiary-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary .mud-button-root:hover{background-color:var(--mud-palette-tertiary-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary .mud-button-root:active{background-color:var(--mud-palette-tertiary-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-tertiary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-tertiary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-tertiary.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-tertiary-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info .mud-button-root{background-color:var(--mud-palette-info);color:var(--mud-palette-info-text);--mud-ripple-color: var(--mud-palette-info-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info .mud-button-root:hover{background-color:var(--mud-palette-info-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info .mud-button-root:active{background-color:var(--mud-palette-info-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-info-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-info-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-info.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-info-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success .mud-button-root{background-color:var(--mud-palette-success);color:var(--mud-palette-success-text);--mud-ripple-color: var(--mud-palette-success-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success .mud-button-root:hover{background-color:var(--mud-palette-success-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success .mud-button-root:active{background-color:var(--mud-palette-success-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-success-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-success-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-success.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-success-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning .mud-button-root{background-color:var(--mud-palette-warning);color:var(--mud-palette-warning-text);--mud-ripple-color: var(--mud-palette-warning-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning .mud-button-root:hover{background-color:var(--mud-palette-warning-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning .mud-button-root:active{background-color:var(--mud-palette-warning-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-warning-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-warning-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-warning.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-warning-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error .mud-button-root{background-color:var(--mud-palette-error);color:var(--mud-palette-error-text);--mud-ripple-color: var(--mud-palette-error-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error .mud-button-root:hover{background-color:var(--mud-palette-error-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error .mud-button-root:active{background-color:var(--mud-palette-error-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-error-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-error-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-error.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-error-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark .mud-button-root{background-color:var(--mud-palette-dark);color:var(--mud-palette-dark-text);--mud-ripple-color: var(--mud-palette-dark-text);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark .mud-button-root:hover{background-color:var(--mud-palette-dark-darken)}}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark .mud-button-root:focus-visible,.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark .mud-button-root:active{background-color:var(--mud-palette-dark-darken)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark .mud-button-root:disabled{background-color:var(--mud-palette-action-disabled-background)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-horizontal:not(.mud-button-group-rtl) .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-horizontal:not(.mud-button-group-rtl)>:not(:first-child) .mud-button-root{border-left:1px solid var(--mud-palette-dark-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-horizontal.mud-button-group-rtl .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-horizontal.mud-button-group-rtl>:not(:first-child) .mud-button-root{border-right:1px solid var(--mud-palette-dark-lighten)}.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-vertical .mud-button-root:not(:first-child),.mud-button-group-filled.mud-button-group-override-styles.mud-button-group-filled-dark.mud-button-group-vertical>:not(:first-child) .mud-button-root{border-top:1px solid var(--mud-palette-dark-lighten)}.mud-button-group-disable-elevation{box-shadow:none}.mud-icon-button{flex:0 0 auto;padding:12px;overflow:visible;font-size:1.5rem;text-align:center;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:50%;color:var(--mud-palette-action-default)}.mud-icon-button.mud-button{min-width:unset;border-radius:var(--mud-default-borderradius)}@media(hover: hover)and (pointer: fine){.mud-icon-button:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-icon-button:focus-within,.mud-icon-button:active{background-color:var(--mud-palette-action-default-hover)}.mud-icon-button:focus-within.mud-button-filled-primary,.mud-icon-button:active.mud-button-filled-primary{background-color:var(--mud-palette-primary-darken)}.mud-icon-button:focus-within.mud-button-filled-secondary,.mud-icon-button:active.mud-button-filled-secondary{background-color:var(--mud-palette-secondary-darken)}.mud-icon-button:focus-within.mud-button-filled-tertiary,.mud-icon-button:active.mud-button-filled-tertiary{background-color:var(--mud-palette-tertiary-darken)}.mud-icon-button:focus-within.mud-button-filled-info,.mud-icon-button:active.mud-button-filled-info{background-color:var(--mud-palette-info-darken)}.mud-icon-button:focus-within.mud-button-filled-success,.mud-icon-button:active.mud-button-filled-success{background-color:var(--mud-palette-success-darken)}.mud-icon-button:focus-within.mud-button-filled-warning,.mud-icon-button:active.mud-button-filled-warning{background-color:var(--mud-palette-warning-darken)}.mud-icon-button:focus-within.mud-button-filled-error,.mud-icon-button:active.mud-button-filled-error{background-color:var(--mud-palette-error-darken)}.mud-icon-button:focus-within.mud-button-filled-dark,.mud-icon-button:active.mud-button-filled-dark{background-color:var(--mud-palette-dark-darken)}.mud-icon-button:disabled{color:var(--mud-palette-action-disabled);background-color:rgba(0,0,0,0)}.mud-icon-button.mud-readonly,.mud-icon-button .mud-readonly:hover{cursor:default}.mud-icon-button-color-inherit{color:inherit}@media(hover: hover)and (pointer: fine){.mud-icon-button-color-inherit:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-icon-button-color-inherit:focus-within,.mud-icon-button-color-inherit:active{background-color:var(--mud-palette-action-default-hover)}.mud-icon-button-label{width:100%;display:flex;align-items:inherit;justify-content:inherit}.mud-icon-button-edge-start{margin-left:-12px;margin-inline-start:-12px;margin-inline-end:unset}.mud-icon-button-edge-end{margin-right:-12px;margin-inline-end:-12px;margin-inline-start:unset}.mud-icon-button-edge-margin-end{margin-right:8px;margin-inline-end:8px;margin-inline-start:unset}.mud-icon-button-size-small{padding:3px;font-size:1.125rem}.mud-icon-button-size-small.mud-icon-button-edge-start{margin-left:-3px;margin-inline-start:-3px;margin-inline-end:unset}.mud-icon-button-size-small.mud-icon-button-edge-end{margin-right:-3px;margin-inline-end:-3px;margin-inline-start:unset}.mud-icon-button-size-large.mud-button>.mud-icon-button-label>.mud-icon-size-large{font-size:2rem}.mud-card{display:flex;flex-direction:column}.mud-card-header{display:flex;padding:16px;align-items:center;border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-card-header .mud-card-header-avatar{flex:0 0 auto;margin-right:16px;margin-inline-end:16px;margin-inline-start:unset}.mud-card-header .mud-card-header-content{flex:1 1 auto}.mud-card-header .mud-card-header-content .mud-typography{margin-bottom:0}.mud-card-header .mud-card-header-actions{flex:0 0 auto;align-self:flex-start;margin-top:-8px;margin-right:-8px;margin-inline-end:-8px;margin-inline-start:unset}.mud-card-media{display:block;background-size:cover;background-repeat:no-repeat;background-position:center;border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-card-header+.mud-card-media{border-top-left-radius:0px;border-top-right-radius:0px}.mud-card-content{flex-grow:1;padding:16px}.mud-card-actions{display:flex;padding:8px;align-items:center}.mud-card-actions:empty{display:none}.mud-carousel{display:flex !important;position:relative;margin:0px !important;clip-path:inset(0px 0px 0px 0px);overflow:hidden}.mud-carousel.mud-carousel-primary{color:var(--mud-palette-primary-text)}.mud-carousel.mud-carousel-secondary{color:var(--mud-palette-secondary-text)}.mud-carousel.mud-carousel-tertiary{color:var(--mud-palette-tertiary-text)}.mud-carousel.mud-carousel-info{color:var(--mud-palette-info-text)}.mud-carousel.mud-carousel-success{color:var(--mud-palette-success-text)}.mud-carousel.mud-carousel-warning{color:var(--mud-palette-warning-text)}.mud-carousel.mud-carousel-error{color:var(--mud-palette-error-text)}.mud-carousel.mud-carousel-dark{color:var(--mud-palette-dark-text)}.mud-carousel-elements-rtl{transform:rotate(180deg) !important}.mud-carousel-item{position:absolute;left:0px;right:0px;top:0px;bottom:0px;margin:inherit;padding:inherit;z-index:2}.mud-carousel-item.mud-carousel-item-primary{color:var(--mud-palette-primary-text);background-color:var(--mud-palette-primary)}.mud-carousel-item.mud-carousel-item-secondary{color:var(--mud-palette-secondary-text);background-color:var(--mud-palette-secondary)}.mud-carousel-item.mud-carousel-item-tertiary{color:var(--mud-palette-tertiary-text);background-color:var(--mud-palette-tertiary)}.mud-carousel-item.mud-carousel-item-info{color:var(--mud-palette-info-text);background-color:var(--mud-palette-info)}.mud-carousel-item.mud-carousel-item-success{color:var(--mud-palette-success-text);background-color:var(--mud-palette-success)}.mud-carousel-item.mud-carousel-item-warning{color:var(--mud-palette-warning-text);background-color:var(--mud-palette-warning)}.mud-carousel-item.mud-carousel-item-error{color:var(--mud-palette-error-text);background-color:var(--mud-palette-error)}.mud-carousel-item.mud-carousel-item-dark{color:var(--mud-palette-dark-text);background-color:var(--mud-palette-dark)}.mud-carousel-item-exit{z-index:1}@keyframes mud-carousel-transition-fade-in-keyframe{from{opacity:0}to{opacity:1}}@keyframes mud-carousel-transition-fade-out-keyframe{from{opacity:1}to{opacity:0}}.mud-carousel-transition-fade-in{animation:.5s mud-carousel-transition-fade-in-keyframe}.mud-carousel-transition-fade-out{animation:.5s mud-carousel-transition-fade-out-keyframe;animation-fill-mode:forwards}.mud-carousel-transition-none{display:none}@keyframes mud-carousel-transition-slide-next-enter-keyframe{from{transform:translate3d(100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes mud-carousel-transition-slide-next-rtl-enter-keyframe{from{transform:translate3d(-100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes mud-carousel-transition-slide-next-exit-keyframe{from{transform:translate3d(0, 0, 0);visibility:visible}to{transform:translate3d(-100%, 0, 0)}}@keyframes mud-carousel-transition-slide-next-rtl-exit-keyframe{from{transform:translate3d(0, 0, 0);visibility:visible}to{transform:translate3d(100%, 0, 0)}}.mud-carousel-transition-slide-next-enter{animation:.5s mud-carousel-transition-slide-next-enter-keyframe}.mud-carousel-transition-slide-next-rtl-enter{animation:.5s mud-carousel-transition-slide-next-rtl-enter-keyframe}.mud-carousel-transition-slide-next-exit{animation:.5s mud-carousel-transition-slide-next-exit-keyframe;animation-fill-mode:forwards}.mud-carousel-transition-slide-next-rtl-exit{animation:.5s mud-carousel-transition-slide-next-rtl-exit-keyframe;animation-fill-mode:forwards}@keyframes mud-carousel-transition-slide-prev-enter-keyframe{from{transform:translate3d(-100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes mud-carousel-transition-slide-prev-rtl-enter-keyframe{from{transform:translate3d(100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes mud-carousel-transition-slide-prev-exit-keyframe{from{transform:translate3d(0, 0, 0);visibility:visible}to{transform:translate3d(100%, 0, 0)}}@keyframes mud-carousel-transition-slide-prev-rtl-exit-keyframe{from{transform:translate3d(0, 0, 0);visibility:visible}to{transform:translate3d(-100%, 0, 0)}}.mud-carousel-transition-slide-prev-enter{animation:.5s mud-carousel-transition-slide-prev-enter-keyframe}.mud-carousel-transition-slide-prev-rtl-enter{animation:.5s mud-carousel-transition-slide-prev-rtl-enter-keyframe}.mud-carousel-transition-slide-prev-exit{animation:.5s mud-carousel-transition-slide-prev-exit-keyframe;animation-fill-mode:forwards}.mud-carousel-transition-slide-prev-rtl-exit{animation:.5s mud-carousel-transition-slide-prev-rtl-exit-keyframe;animation-fill-mode:forwards}.mud-chart{display:flex;min-height:fit-content;min-width:fit-content}.mud-chart svg{order:2}.mud-chart.mud-chart-legend-bottom{flex-direction:column}.mud-chart.mud-chart-legend-bottom .mud-chart-legend{margin-top:10px;justify-content:center;width:100%;order:3}.mud-chart.mud-chart-legend-top{flex-direction:column}.mud-chart.mud-chart-legend-top .mud-chart-legend{justify-content:center;width:100%;order:1}.mud-chart.mud-chart-legend-right{flex-direction:row}.mud-chart.mud-chart-legend-right .mud-chart-legend{flex-direction:column;order:3;min-width:fit-content}.mud-chart.mud-chart-legend-left{flex-direction:row}.mud-chart.mud-chart-legend-left .mud-chart-legend{flex-direction:column;order:1;min-width:fit-content}.mud-chart .mud-chart-donut,.mud-chart .mud-chart-pie,.mud-chart mud-chart-line{display:flex;margin:auto}.mud-chart .mud-chart-legend{display:flex;padding:10px 0px;margin:auto;flex-wrap:wrap}.mud-chart .mud-chart-legend .mud-chart-legend-item{display:block;margin:2px 5px}.mud-chart .mud-chart-legend .mud-chart-legend-item .mud-chart-legend-marker{height:12px;width:12px;border-radius:50%;position:relative;display:inline-flex}.mud-chart .mud-chart-legend .mud-chart-legend-item .mud-chart-legend-text{display:inline-flex}.mud-chart .mud-chart-legend .mud-chart-legend-item .mud-chart-legend-checkbox{display:flex;align-items:center}.mud-chart .mud-chart-legend .mud-chart-legend-item .mud-input-control{width:35px !important}.mud-charts-yaxis{fill:var(--mud-palette-text-primary)}.mud-charts-xaxis{fill:var(--mud-palette-text-primary)}.mud-chart-donut .mud-donut-hole{fill:rgba(0,0,0,0);user-select:none;pointer-events:unset}.mud-chart-donut .mud-donut-ring{fill:rgba(0,0,0,0);stroke:#fff;pointer-events:unset}.mud-chart-donut .mud-donut-segment{fill:rgba(0,0,0,0);pointer-events:stroke;-webkit-transition:stroke .2s ease;-moz-transition:stroke .2s ease;-o-transition:stroke .2s ease;transition:stroke .2s ease}.mud-chart-legend-marker{height:12px;width:12px;border-radius:50%;position:relative;display:inline-block}.mud-chart-marker-color-0{background-color:#008ffb}.mud-chart-marker-color-1{background-color:#00e396}.mud-chart-marker-color-2{background-color:#feb019}.mud-chart-marker-color-3{background-color:#ff4560}.mud-chart-marker-color-4{background-color:#594ae2}.mud-chart-cell text{fill:#000}.mud-chart-heatmap-legend line{stroke:var(--mud-palette-text-primary)}.mud-chart-heatmap-legend text{fill:var(--mud-palette-text-primary)}.mud-chart-sankey{width:100%;height:100%}.mud-chart-sankey text{fill:var(--mud-palette-text-primary);font-family:var(--mud-typography-caption-family),sans-serif;font-weight:var(--mud-typography-caption-weight);line-height:var(--mud-typography-caption-lineheight);letter-spacing:var(--mud-typography-caption-letterspacing);text-transform:var(--mud-typography-caption-text-transform)}.mud-chat{display:grid;column-gap:.75rem;padding-top:.25rem;padding-bottom:.25rem;border-radius:var(--mud-default-borderradius)}.mud-chat.mud-dense .mud-chat-bubble{padding:.1875rem 1rem;min-height:.9166666667rem}.mud-chat.mud-dense .mud-chat-bubble+.mud-chat-bubble{margin-top:.1875rem}.mud-chat.mud-dense .mud-chat-header{line-height:.4166666667rem}.mud-chat.mud-square{border-radius:0px}.mud-chat.mud-square .mud-chat-bubble{border-radius:0px}.mud-chat.mud-chat-arrow-top .mud-chat-bubble:before{content:"";mask-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0nMycgaGVpZ2h0PSczJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwYXRoIGZpbGw9J2JsYWNrJyBkPSdtIDAgMCBMIDMgMCBMIDMgMyBDIDMgMiAxIDAgMCAwJy8+PC9zdmc+);bottom:auto;top:0}.mud-chat.mud-chat-arrow-top.mud-chat-start .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-top.mud-chat-end.mud-chat-rtl .mud-chat-bubble:before{transform:none}.mud-chat.mud-chat-arrow-top.mud-chat-end .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-top.mud-chat-start.mud-chat-rtl .mud-chat-bubble:before{transform:scaleX(-1)}.mud-chat.mud-chat-arrow-top.mud-chat-start .mud-chat-bubble,.mud-chat.mud-chat-arrow-top.mud-chat-end.mud-chat-rtl .mud-chat-bubble{border-top-left-radius:0}.mud-chat.mud-chat-arrow-top.mud-chat-end .mud-chat-bubble,.mud-chat.mud-chat-arrow-top.mud-chat-start.mud-chat-rtl .mud-chat-bubble{border-top-right-radius:0}.mud-chat.mud-chat-arrow-bottom .mud-chat-bubble:before{content:"";mask-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0nMycgaGVpZ2h0PSczJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwYXRoIGZpbGw9J2JsYWNrJyBkPSdtIDAgMyBMIDMgMyBMIDMgMCBDIDMgMSAxIDMgMCAzJy8+PC9zdmc+);bottom:0}.mud-chat.mud-chat-arrow-bottom.mud-chat-start .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-bottom.mud-chat-end.mud-chat-rtl .mud-chat-bubble:before{transform:none}.mud-chat.mud-chat-arrow-bottom.mud-chat-end .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-bottom.mud-chat-start.mud-chat-rtl .mud-chat-bubble:before{transform:scaleX(-1)}.mud-chat.mud-chat-arrow-bottom.mud-chat-start .mud-chat-bubble,.mud-chat.mud-chat-arrow-bottom.mud-chat-end.mud-chat-rtl .mud-chat-bubble{border-bottom-left-radius:0}.mud-chat.mud-chat-arrow-bottom.mud-chat-end .mud-chat-bubble,.mud-chat.mud-chat-arrow-bottom.mud-chat-start.mud-chat-rtl .mud-chat-bubble{border-bottom-right-radius:0}.mud-chat.mud-chat-arrow-middle .mud-chat-bubble:before{content:"";mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzIDMiIHdpZHRoPSIzMDAiIGhlaWdodD0iMzAwIj4KICA8cG9seWdvbiBwb2ludHM9IjMsMCAzLDMgMS41LDEuNSIgZmlsbD0iYmxhY2siIC8+Cjwvc3ZnPg==);top:50%}.mud-chat.mud-chat-arrow-middle.mud-chat-start .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-middle.mud-chat-end.mud-chat-rtl .mud-chat-bubble:before{transform:translateY(-50%)}.mud-chat.mud-chat-arrow-middle.mud-chat-end .mud-chat-bubble:before,.mud-chat.mud-chat-arrow-middle.mud-chat-start.mud-chat-rtl .mud-chat-bubble:before{transform:scaleX(-1) translateY(-50%)}.mud-chat-bubble{position:relative;text-align:start;align-content:center;width:fit-content;padding:.5rem 1rem;max-width:90%;border-radius:var(--mud-default-borderradius);min-width:2.75rem;min-height:2.75rem}.mud-chat-bubble.mud-chat-bubble-clickable{cursor:pointer;user-select:none;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;--mud-ripple-color: $default-foreground;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important}@media(hover: hover)and (pointer: fine){.mud-chat-bubble.mud-chat-bubble-clickable:hover{box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}}.mud-chat-bubble.mud-chat-bubble-clickable:focus-visible{box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}.mud-chat-bubble.mud-chat-bubble-clickable:active{box-shadow:0px 5px 5px -3px rgba(0,0,0,.2),0px 8px 10px 1px rgba(0,0,0,.14),0px 3px 14px 2px rgba(0,0,0,.12);background-color:var(--mud-palette-action-disabled-background)}.mud-chat-bubble:before{position:absolute;width:.75rem;height:.75rem;background-color:inherit;mask-size:contain;mask-repeat:no-repeat;mask-position:center}.mud-chat-bubble+.mud-chat-bubble{margin-top:.5rem}.mud-chat-bubble+.mud-chat-bubble:before{content:none !important}.mud-chat-header{grid-row-start:1;font-size:.875rem;line-height:1.25rem;margin-left:.25rem;margin-right:.25rem;min-height:.5rem}.mud-chat-header time{margin-left:.5rem;opacity:.5;font-size:.75rem;line-height:1rem}.mud-chat-footer{opacity:.5;font-size:.875rem;line-height:1rem;margin-left:.25rem;margin-right:.25rem;min-height:.5rem}.mud-chat .mud-avatar{align-self:center;grid-row-start:1}.mud-chat:has(.mud-chat-header) .mud-avatar{grid-row-start:2}.mud-chat-start{place-items:start;grid-template-columns:1fr 99fr}.mud-chat-start .mud-chat-header,.mud-chat-start .mud-chat-footer{grid-column-start:2}.mud-chat-start .mud-avatar{grid-column-start:1;margin-left:.25rem;margin-right:-0.35rem}.mud-chat-start .mud-chat-bubble{grid-column-start:2}.mud-chat-start .mud-chat-bubble:before{inset-inline-start:-0.749rem}.mud-chat-end{place-items:end;grid-template-columns:99fr 1fr}.mud-chat-end .mud-chat-header,.mud-chat-end .mud-chat-footer{grid-column-start:1}.mud-chat-end .mud-avatar{grid-column-start:2;margin-right:.25rem;margin-left:-0.35rem}.mud-chat-end .mud-chat-bubble{grid-column-start:1;text-align:end}.mud-chat-end .mud-chat-bubble:before{inset-inline-start:100%;transform:scaleX(-1)}.mud-chat-text-default{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-action-default-hover);--mud-ripple-color: $default-foreground}.mud-chat-text-primary{color:var(--mud-palette-primary-darken);background-color:var(--mud-palette-primary-hover);--mud-ripple-color: var(--mud-palette-primary-darken)}.mud-chat-text-secondary{color:var(--mud-palette-secondary-darken);background-color:var(--mud-palette-secondary-hover);--mud-ripple-color: var(--mud-palette-secondary-darken)}.mud-chat-text-tertiary{color:var(--mud-palette-tertiary-darken);background-color:var(--mud-palette-tertiary-hover);--mud-ripple-color: var(--mud-palette-tertiary-darken)}.mud-chat-text-info{color:var(--mud-palette-info-darken);background-color:var(--mud-palette-info-hover);--mud-ripple-color: var(--mud-palette-info-darken)}.mud-chat-text-success{color:var(--mud-palette-success-darken);background-color:var(--mud-palette-success-hover);--mud-ripple-color: var(--mud-palette-success-darken)}.mud-chat-text-warning{color:var(--mud-palette-warning-darken);background-color:var(--mud-palette-warning-hover);--mud-ripple-color: var(--mud-palette-warning-darken)}.mud-chat-text-error{color:var(--mud-palette-error-darken);background-color:var(--mud-palette-error-hover);--mud-ripple-color: var(--mud-palette-error-darken)}.mud-chat-text-dark{color:var(--mud-palette-dark-darken);background-color:var(--mud-palette-dark-hover);--mud-ripple-color: var(--mud-palette-dark-darken)}.mud-chat-outlined-default{color:var(--mud-palette-text-primary);border:1px solid var(--mud-palette-action-default-hover);--mud-ripple-color: $default-foreground}.mud-chat-outlined-default:before{background-color:var(--mud-palette-action-default-hover)}.mud-chat-outlined-default.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-default.mud-chat-arrow-bottom:before{bottom:-0.07rem !important}.mud-chat-outlined-primary{color:var(--mud-palette-primary-darken);border:1px solid var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary-darken)}.mud-chat-outlined-primary:before{background-color:var(--mud-palette-primary-darken)}.mud-chat-outlined-primary.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-primary.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-secondary{color:var(--mud-palette-secondary-darken);border:1px solid var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary-darken)}.mud-chat-outlined-secondary:before{background-color:var(--mud-palette-secondary-darken)}.mud-chat-outlined-secondary.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-secondary.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-tertiary{color:var(--mud-palette-tertiary-darken);border:1px solid var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary-darken)}.mud-chat-outlined-tertiary:before{background-color:var(--mud-palette-tertiary-darken)}.mud-chat-outlined-tertiary.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-tertiary.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-info{color:var(--mud-palette-info-darken);border:1px solid var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info-darken)}.mud-chat-outlined-info:before{background-color:var(--mud-palette-info-darken)}.mud-chat-outlined-info.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-info.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-success{color:var(--mud-palette-success-darken);border:1px solid var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success-darken)}.mud-chat-outlined-success:before{background-color:var(--mud-palette-success-darken)}.mud-chat-outlined-success.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-success.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-warning{color:var(--mud-palette-warning-darken);border:1px solid var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning-darken)}.mud-chat-outlined-warning:before{background-color:var(--mud-palette-warning-darken)}.mud-chat-outlined-warning.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-warning.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-error{color:var(--mud-palette-error-darken);border:1px solid var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error-darken)}.mud-chat-outlined-error:before{background-color:var(--mud-palette-error-darken)}.mud-chat-outlined-error.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-error.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-outlined-dark{color:var(--mud-palette-dark-darken);border:1px solid var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark-darken)}.mud-chat-outlined-dark:before{background-color:var(--mud-palette-dark-darken)}.mud-chat-outlined-dark.mud-chat-arrow-top:before{top:-0.05rem !important}.mud-chat-outlined-dark.mud-chat-arrow-bottom:before{bottom:-0.02rem !important}.mud-chat-filled-default{color:var(--mud-palette-text-primary);font-weight:500;background-color:var(--mud-palette-action-default-hover);--mud-ripple-color: $default-foreground}.mud-chat-filled-primary{color:var(--mud-palette-primary-text);font-weight:500;background-color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary-text)}.mud-chat-filled-secondary{color:var(--mud-palette-secondary-text);font-weight:500;background-color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary-text)}.mud-chat-filled-tertiary{color:var(--mud-palette-tertiary-text);font-weight:500;background-color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary-text)}.mud-chat-filled-info{color:var(--mud-palette-info-text);font-weight:500;background-color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info-text)}.mud-chat-filled-success{color:var(--mud-palette-success-text);font-weight:500;background-color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success-text)}.mud-chat-filled-warning{color:var(--mud-palette-warning-text);font-weight:500;background-color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning-text)}.mud-chat-filled-error{color:var(--mud-palette-error-text);font-weight:500;background-color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error-text)}.mud-chat-filled-dark{color:var(--mud-palette-dark-text);font-weight:500;background-color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark-text)}.mud-checkbox{cursor:pointer;display:inline-flex;align-items:center;vertical-align:middle;-webkit-tap-highlight-color:rgba(0,0,0,0)}@media(hover: hover)and (pointer: fine){.mud-checkbox .mud-disabled:hover{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-checkbox .mud-disabled:hover *{cursor:default;color:var(--mud-palette-text-disabled)}}.mud-checkbox.mud-disabled,.mud-checkbox .mud-disabled:focus-visible,.mud-checkbox .mud-disabled:active{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-checkbox.mud-disabled *,.mud-checkbox .mud-disabled:focus-visible *,.mud-checkbox .mud-disabled:active *{cursor:default;color:var(--mud-palette-text-disabled)}.mud-checkbox.mud-readonly,.mud-checkbox .mud-readonly:hover{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-checkbox .mud-checkbox-dense{padding:4px}.mud-checkbox-input{top:0;left:0;width:100%;cursor:inherit;height:100%;margin:0;opacity:0;padding:0;z-index:1;position:absolute}.mud-checkbox-span{display:inline-block;width:100%;cursor:pointer}.mud-chart-legend-checkbox .mud-checkbox svg path:last-child{fill:var(--checkbox-color) !important}.mud-chip-container{display:contents}.mud-chip{border:none;display:inline-flex;max-width:100%;outline:0;padding:0 12px;position:relative;box-sizing:border-box;transition:background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;align-items:center;white-space:nowrap;vertical-align:middle;justify-content:center;text-decoration:none;line-height:normal;margin:4px}.mud-chip.mud-disabled{opacity:.5;pointer-events:none}.mud-chip.mud-chip-size-small{border-radius:12px;font-size:12px;height:24px;padding:0 8px}.mud-chip.mud-chip-size-small .mud-avatar{margin-left:-4px;margin-right:4px;margin-inline-start:-4px;margin-inline-end:4px;width:18px;height:18px;font-size:.625rem}.mud-chip.mud-chip-size-small .mud-icon-root{font-size:1.125rem}.mud-chip.mud-chip-size-small .mud-chip-close-button{margin-right:-4px;margin-left:4px;margin-inline-end:-4px;margin-inline-start:4px}.mud-chip.mud-chip-size-medium{height:32px;font-size:14px;border-radius:16px}.mud-chip.mud-chip-size-medium .mud-avatar{margin-left:-8px;margin-right:8px;margin-inline-start:-8px;margin-inline-end:8px;width:24px;height:24px;font-size:.75rem}.mud-chip.mud-chip-size-large{height:40px;font-size:16px;border-radius:20px;padding:0 16px}.mud-chip.mud-chip-size-large .mud-avatar{margin-left:-12px;margin-right:8px;margin-inline-start:-12px;margin-inline-end:8px;width:32px;height:32px;font-size:1rem}.mud-chip.mud-chip-size-large .mud-chip-icon{font-size:1.5rem;margin-left:-6px;margin-right:6px;margin-inline-start:-6px;margin-inline-end:6px}.mud-chip.mud-chip-label{border-radius:var(--mud-default-borderradius)}.mud-chip.mud-clickable{cursor:pointer;user-select:none}.mud-chip .mud-chip-icon{margin-left:-4px;margin-right:4px;margin-inline-start:-4px;margin-inline-end:4px;color:inherit}.mud-chip .mud-chip-close-button{padding:1px;margin-right:-4px;margin-left:6px;margin-inline-end:-4px;margin-inline-start:6px;height:18px;width:18px;color:inherit;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1),visibility 0s}.mud-chip .mud-chip-close-button .mud-icon-size-small{font-size:1.15rem}@media(hover: hover)and (pointer: fine){.mud-chip .mud-chip-close-button:hover:not(.mud-disabled){opacity:.7}}.mud-chip .mud-chip-close-button:focus-visible:not(.mud-disabled),.mud-chip .mud-chip-close-button:active:not(.mud-disabled){opacity:.7}.mud-chip>.mud-chip-content{align-items:center;display:inline-flex;height:100%;max-width:100%}.mud-chip-filled{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-action-disabled-background);--mud-ripple-opacity: var(--mud-ripple-opacity-secondary)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-action-disabled)}}.mud-chip-filled.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-action-disabled)}.mud-chip-filled.mud-chip-color-primary{color:var(--mud-palette-primary-text);--mud-ripple-color: var(--mud-palette-primary-text) !important;background-color:var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-primary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-primary-darken)}}.mud-chip-filled.mud-chip-color-primary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-primary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-primary-darken)}.mud-chip-filled.mud-chip-color-secondary{color:var(--mud-palette-secondary-text);--mud-ripple-color: var(--mud-palette-secondary-text) !important;background-color:var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-secondary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-secondary-darken)}}.mud-chip-filled.mud-chip-color-secondary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-secondary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-secondary-darken)}.mud-chip-filled.mud-chip-color-tertiary{color:var(--mud-palette-tertiary-text);--mud-ripple-color: var(--mud-palette-tertiary-text) !important;background-color:var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-tertiary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-tertiary-darken)}}.mud-chip-filled.mud-chip-color-tertiary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-tertiary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-tertiary-darken)}.mud-chip-filled.mud-chip-color-info{color:var(--mud-palette-info-text);--mud-ripple-color: var(--mud-palette-info-text) !important;background-color:var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-info.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-info-darken)}}.mud-chip-filled.mud-chip-color-info.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-info.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-info-darken)}.mud-chip-filled.mud-chip-color-success{color:var(--mud-palette-success-text);--mud-ripple-color: var(--mud-palette-success-text) !important;background-color:var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-success.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-success-darken)}}.mud-chip-filled.mud-chip-color-success.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-success.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-success-darken)}.mud-chip-filled.mud-chip-color-warning{color:var(--mud-palette-warning-text);--mud-ripple-color: var(--mud-palette-warning-text) !important;background-color:var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-warning.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-warning-darken)}}.mud-chip-filled.mud-chip-color-warning.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-warning.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-warning-darken)}.mud-chip-filled.mud-chip-color-error{color:var(--mud-palette-error-text);--mud-ripple-color: var(--mud-palette-error-text) !important;background-color:var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-error.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-error-darken)}}.mud-chip-filled.mud-chip-color-error.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-error.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-error-darken)}.mud-chip-filled.mud-chip-color-dark{color:var(--mud-palette-dark-text);--mud-ripple-color: var(--mud-palette-dark-text) !important;background-color:var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-chip-filled.mud-chip-color-dark.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-dark-darken)}}.mud-chip-filled.mud-chip-color-dark.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-filled.mud-chip-color-dark.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-dark-darken)}.mud-chip-outlined{color:var(--mud-palette-text-primary);border:1px solid var(--mud-palette-lines-inputs)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-action-default-hover)}}.mud-chip-outlined.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-action-default-hover)}.mud-chip-outlined.mud-chip-color-primary{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary) !important;border:1px solid rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-primary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-primary-hover)}}.mud-chip-outlined.mud-chip-color-primary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-primary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-primary-hover)}.mud-chip-outlined.mud-chip-color-primary.mud-chip-selected{background-color:var(--mud-palette-primary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-primary.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-primary.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-primary.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-secondary{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary) !important;border:1px solid rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-secondary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-secondary-hover)}}.mud-chip-outlined.mud-chip-color-secondary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-secondary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-secondary-hover)}.mud-chip-outlined.mud-chip-color-secondary.mud-chip-selected{background-color:var(--mud-palette-secondary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-secondary.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-secondary.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-secondary.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-tertiary{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary) !important;border:1px solid rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-tertiary.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-tertiary-hover)}}.mud-chip-outlined.mud-chip-color-tertiary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-tertiary.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-tertiary-hover)}.mud-chip-outlined.mud-chip-color-tertiary.mud-chip-selected{background-color:var(--mud-palette-tertiary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-tertiary.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-tertiary.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-tertiary.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-info{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info) !important;border:1px solid rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-info.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-info-hover)}}.mud-chip-outlined.mud-chip-color-info.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-info.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-info-hover)}.mud-chip-outlined.mud-chip-color-info.mud-chip-selected{background-color:var(--mud-palette-info-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-info.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-info.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-info.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-success{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success) !important;border:1px solid rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-success.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-success-hover)}}.mud-chip-outlined.mud-chip-color-success.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-success.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-success-hover)}.mud-chip-outlined.mud-chip-color-success.mud-chip-selected{background-color:var(--mud-palette-success-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-success.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-success.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-success.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-warning{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning) !important;border:1px solid rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-warning.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-warning-hover)}}.mud-chip-outlined.mud-chip-color-warning.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-warning.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-warning-hover)}.mud-chip-outlined.mud-chip-color-warning.mud-chip-selected{background-color:var(--mud-palette-warning-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-warning.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-warning.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-warning.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-error{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error) !important;border:1px solid rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-error.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-error-hover)}}.mud-chip-outlined.mud-chip-color-error.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-error.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-error-hover)}.mud-chip-outlined.mud-chip-color-error.mud-chip-selected{background-color:var(--mud-palette-error-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-error.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-error.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-error.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}.mud-chip-outlined.mud-chip-color-dark{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark) !important;border:1px solid rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity))}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-dark.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-dark-hover)}}.mud-chip-outlined.mud-chip-color-dark.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-dark.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-dark-hover)}.mud-chip-outlined.mud-chip-color-dark.mud-chip-selected{background-color:var(--mud-palette-dark-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-outlined.mud-chip-color-dark.mud-chip-selected:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}}.mud-chip-outlined.mud-chip-color-dark.mud-chip-selected:focus-visible:not(.mud-disabled),.mud-chip-outlined.mud-chip-color-dark.mud-chip-selected:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}.mud-chip-text{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-action-default-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-clickable:hover:not(.mud-disabled){background-color:var(--mud-palette-action-disabled-background)}}.mud-chip-text.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-clickable:active:not(.mud-disabled){background-color:var(--mud-palette-action-disabled-background)}.mud-chip-text.mud-chip-color-primary{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary) !important;background-color:var(--mud-palette-primary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-primary.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}}.mud-chip-text.mud-chip-color-primary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-primary.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}.mud-chip-text.mud-chip-color-secondary{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary) !important;background-color:var(--mud-palette-secondary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-secondary.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}}.mud-chip-text.mud-chip-color-secondary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-secondary.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}.mud-chip-text.mud-chip-color-tertiary{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary) !important;background-color:var(--mud-palette-tertiary-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-tertiary.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}}.mud-chip-text.mud-chip-color-tertiary.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-tertiary.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}.mud-chip-text.mud-chip-color-info{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info) !important;background-color:var(--mud-palette-info-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-info.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}}.mud-chip-text.mud-chip-color-info.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-info.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}.mud-chip-text.mud-chip-color-success{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success) !important;background-color:var(--mud-palette-success-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-success.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}}.mud-chip-text.mud-chip-color-success.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-success.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}.mud-chip-text.mud-chip-color-warning{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning) !important;background-color:var(--mud-palette-warning-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-warning.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}}.mud-chip-text.mud-chip-color-warning.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-warning.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}.mud-chip-text.mud-chip-color-error{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error) !important;background-color:var(--mud-palette-error-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-error.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}}.mud-chip-text.mud-chip-color-error.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-error.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}.mud-chip-text.mud-chip-color-dark{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark) !important;background-color:var(--mud-palette-dark-hover)}@media(hover: hover)and (pointer: fine){.mud-chip-text.mud-chip-color-dark.mud-clickable:hover:not(.mud-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}}.mud-chip-text.mud-chip-color-dark.mud-clickable:focus-visible:not(.mud-disabled),.mud-chip-text.mud-chip-color-dark.mud-clickable:active:not(.mud-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}.mud-collapse-container{overflow:hidden;display:grid;grid-template-rows:minmax(0, 0fr);transition:grid-template-rows 300ms ease-in-out}.mud-collapse-entering{grid-template-rows:minmax(0, 1fr)}.mud-collapse-entered{overflow:initial;grid-template-rows:minmax(0, 1fr)}.mud-collapse-entered .mud-collapse-wrapper{overflow-y:auto}.mud-collapse-hidden{visibility:hidden}.mud-collapse-wrapper{overflow:hidden;display:flex}.mud-collapse-wrapper-inner{width:100%}.mud-dialog-container{display:flex;position:fixed;top:0;left:0;width:100%;height:100%;z-index:var(--mud-zindex-dialog)}.mud-dialog-container.mud-dialog-center{align-items:center;justify-content:center}.mud-dialog-container.mud-dialog-topcenter{align-items:flex-start;justify-content:center;padding-top:32px}.mud-dialog-container.mud-dialog-bottomcenter{align-items:flex-end;justify-content:center;padding-bottom:32px}.mud-dialog-container.mud-dialog-centerright{align-items:center;justify-content:flex-end;padding-right:32px}.mud-dialog-container.mud-dialog-centerleft{align-items:center;justify-content:flex-start;padding-left:32px}.mud-dialog-container.mud-dialog-topleft .mud-dialog{position:absolute;top:32px;left:32px}.mud-dialog-container.mud-dialog-topright .mud-dialog{position:absolute;top:32px;right:32px}.mud-dialog-container.mud-dialog-bottomleft .mud-dialog{position:absolute;bottom:32px;left:32px}.mud-dialog-container.mud-dialog-bottomright .mud-dialog{position:absolute;bottom:32px;right:32px}.mud-dialog{display:flex;z-index:calc(var(--mud-zindex-dialog) + 2);flex-direction:column;color:var(--mud-palette-text-primary);background-color:var(--mud-palette-surface);border-radius:var(--mud-default-borderradius);-webkit-animation:mud-open-dialog-center .1s cubic-bezier(0.39, 0.575, 0.565, 1) both;animation:mud-open-dialog-center .1s cubic-bezier(0.39, 0.575, 0.565, 1) both;box-shadow:0px 11px 15px -7px rgba(0,0,0,.2),0px 24px 38px 3px rgba(0,0,0,.14),0px 9px 46px 8px rgba(0,0,0,.12);max-height:calc(100vh - var(--mud-appbar-height));max-height:calc(100dvh - var(--mud-appbar-height));overflow-y:auto;outline-style:none}.mud-dialog.mud-dialog-rtl .mud-dialog-title .mud-button-close{right:unset;left:8px}.mud-dialog .mud-dialog-title{z-index:1;flex:0 0 auto;margin:0;padding:16px 24px;overflow-wrap:anywhere;border-top-left-radius:var(--mud-default-borderradius);border-top-right-radius:var(--mud-default-borderradius)}.mud-dialog .mud-dialog-title:has(.mud-button-close){padding-inline-end:64px}.mud-dialog .mud-dialog-title+*>.mud-dialog-content{border-radius:0}.mud-dialog .mud-dialog-title .mud-button-close{top:8px;right:8px;position:absolute}.mud-dialog .mud-dialog-content{position:relative;flex:1 1 auto;overflow:auto;padding:8px 24px;margin:0;-webkit-overflow-scrolling:touch;border-top-left-radius:var(--mud-default-borderradius);border-top-right-radius:var(--mud-default-borderradius)}.mud-dialog .mud-dialog-content.mud-dialog-no-side-padding{padding:12px 0px;margin:0}.mud-dialog .mud-dialog-actions{flex:0 0 auto;display:flex;gap:8px;padding:8px;align-items:center;justify-content:flex-end;border-bottom-left-radius:var(--mud-default-borderradius);border-bottom-right-radius:var(--mud-default-borderradius)}.mud-dialog .mud-dialog-actions:empty{display:none}.mud-dialog-width-false{max-width:calc(100% - 64px)}.mud-dialog-width-xs{max-width:444px}.mud-dialog-width-sm{max-width:600px}.mud-dialog-width-md{max-width:960px}.mud-dialog-width-lg{max-width:1280px}.mud-dialog-width-xl{max-width:1920px}.mud-dialog-width-xxl{max-width:2560px}.mud-dialog-width-full{width:calc(100% - 64px)}.mud-dialog-fullscreen{width:100%;height:100%;margin:0;max-width:100%;max-height:none;border-radius:0;overflow-y:hidden}@-webkit-keyframes mud-open-dialog-center{0%{opacity:0}1%{-webkit-transform:scale(0.5);transform:scale(0.5);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes mud-open-dialog-center{0%{opacity:0}1%{-webkit-transform:scale(0.5);transform:scale(0.5);opacity:1}100%{-webkit-transform:scale(1);transform:scale(1)}}.mud-focus-trap{display:contents}.mud-focus-trap .mud-focus-trap-child-container{display:contents}.mud-input-control.mud-field .mud-input-slot{height:auto;min-height:19px}.mud-input-control.mud-field .mud-input-slot.mud-input-root-outlined.mud-input-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:14px}.mud-input-control.mud-field .mud-input-slot.mud-input-root-filled.mud-input-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:12px}.mud-input-control.mud-field .mud-input-slot.mud-input-slot-nopadding{padding-top:0px;padding-bottom:0px}.mud-input-control.mud-field .mud-input-slot.mud-input-slot-nopadding.mud-input-root-filled{padding-top:21px;padding-bottom:2px}.mud-input-control.mud-field .mud-input-slot.mud-input-slot-nopadding.mud-input-root-outlined{padding-top:7px;padding-bottom:2px}.mud-flex-break{flex-basis:100%;width:0}.mud-grid{width:100%;display:flex;flex-wrap:wrap;box-sizing:border-box}.mud-grid-item{margin:0;box-sizing:border-box}.mud-grid-spacing-xs-1{width:calc(100% + 4px);margin-left:-4px;margin-top:-4px}.mud-grid-spacing-xs-1>.mud-grid-item{padding-left:4px;padding-top:4px}.mud-grid-spacing-xs-2{width:calc(100% + 8px);margin-left:-8px;margin-top:-8px}.mud-grid-spacing-xs-2>.mud-grid-item{padding-left:8px;padding-top:8px}.mud-grid-spacing-xs-3{width:calc(100% + 12px);margin-left:-12px;margin-top:-12px}.mud-grid-spacing-xs-3>.mud-grid-item{padding-left:12px;padding-top:12px}.mud-grid-spacing-xs-4{width:calc(100% + 16px);margin-left:-16px;margin-top:-16px}.mud-grid-spacing-xs-4>.mud-grid-item{padding-left:16px;padding-top:16px}.mud-grid-spacing-xs-5{width:calc(100% + 20px);margin-left:-20px;margin-top:-20px}.mud-grid-spacing-xs-5>.mud-grid-item{padding-left:20px;padding-top:20px}.mud-grid-spacing-xs-6{width:calc(100% + 24px);margin-left:-24px;margin-top:-24px}.mud-grid-spacing-xs-6>.mud-grid-item{padding-left:24px;padding-top:24px}.mud-grid-spacing-xs-7{width:calc(100% + 28px);margin-left:-28px;margin-top:-28px}.mud-grid-spacing-xs-7>.mud-grid-item{padding-left:28px;padding-top:28px}.mud-grid-spacing-xs-8{width:calc(100% + 32px);margin-left:-32px;margin-top:-32px}.mud-grid-spacing-xs-8>.mud-grid-item{padding-left:32px;padding-top:32px}.mud-grid-spacing-xs-9{width:calc(100% + 36px);margin-left:-36px;margin-top:-36px}.mud-grid-spacing-xs-9>.mud-grid-item{padding-left:36px;padding-top:36px}.mud-grid-spacing-xs-10{width:calc(100% + 40px);margin-left:-40px;margin-top:-40px}.mud-grid-spacing-xs-10>.mud-grid-item{padding-left:40px;padding-top:40px}.mud-grid-spacing-xs-11{width:calc(100% + 44px);margin-left:-44px;margin-top:-44px}.mud-grid-spacing-xs-11>.mud-grid-item{padding-left:44px;padding-top:44px}.mud-grid-spacing-xs-12{width:calc(100% + 48px);margin-left:-48px;margin-top:-48px}.mud-grid-spacing-xs-12>.mud-grid-item{padding-left:48px;padding-top:48px}.mud-grid-spacing-xs-13{width:calc(100% + 52px);margin-left:-52px;margin-top:-52px}.mud-grid-spacing-xs-13>.mud-grid-item{padding-left:52px;padding-top:52px}.mud-grid-spacing-xs-14{width:calc(100% + 56px);margin-left:-56px;margin-top:-56px}.mud-grid-spacing-xs-14>.mud-grid-item{padding-left:56px;padding-top:56px}.mud-grid-spacing-xs-15{width:calc(100% + 60px);margin-left:-60px;margin-top:-60px}.mud-grid-spacing-xs-15>.mud-grid-item{padding-left:60px;padding-top:60px}.mud-grid-spacing-xs-16{width:calc(100% + 64px);margin-left:-64px;margin-top:-64px}.mud-grid-spacing-xs-16>.mud-grid-item{padding-left:64px;padding-top:64px}.mud-grid-spacing-xs-17{width:calc(100% + 68px);margin-left:-68px;margin-top:-68px}.mud-grid-spacing-xs-17>.mud-grid-item{padding-left:68px;padding-top:68px}.mud-grid-spacing-xs-18{width:calc(100% + 72px);margin-left:-72px;margin-top:-72px}.mud-grid-spacing-xs-18>.mud-grid-item{padding-left:72px;padding-top:72px}.mud-grid-spacing-xs-19{width:calc(100% + 76px);margin-left:-76px;margin-top:-76px}.mud-grid-spacing-xs-19>.mud-grid-item{padding-left:76px;padding-top:76px}.mud-grid-spacing-xs-20{width:calc(100% + 80px);margin-left:-80px;margin-top:-80px}.mud-grid-spacing-xs-20>.mud-grid-item{padding-left:80px;padding-top:80px}@media(min-width: 0px){.mud-grid-item-xs-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-xs-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-xs-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-xs-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-xs-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-xs-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-xs-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-xs-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-xs-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-xs-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-xs-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-xs-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-xs-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-xs-true{flex-grow:1;max-width:100%;flex-basis:0}}@media(min-width: 600px){.mud-grid-item-sm-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-sm-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-sm-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-sm-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-sm-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-sm-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-sm-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-sm-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-sm-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-sm-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-sm-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-sm-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-sm-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-sm-true{flex-grow:1;max-width:100%;flex-basis:0}}@media(min-width: 960px){.mud-grid-item-md-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-md-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-md-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-md-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-md-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-md-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-md-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-md-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-md-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-md-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-md-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-md-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-md-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-md-true{flex-grow:1;max-width:100%;flex-basis:0}}@media(min-width: 1280px){.mud-grid-item-lg-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-lg-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-lg-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-lg-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-lg-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-lg-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-lg-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-lg-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-lg-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-lg-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-lg-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-lg-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-lg-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-lg-true{flex-grow:1;max-width:100%;flex-basis:0}}@media(min-width: 1920px){.mud-grid-item-xl-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-xl-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-xl-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-xl-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-xl-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-xl-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-xl-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-xl-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-xl-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-xl-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-xl-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-xl-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-xl-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-xl-true{flex-grow:1;max-width:100%;flex-basis:0}}@media(min-width: 2560px){.mud-grid-item-xxl-1{flex-grow:0;max-width:calc(100%/12*1);flex-basis:calc(100%/12*1)}.mud-grid-item-xxl-2{flex-grow:0;max-width:calc(100%/12*2);flex-basis:calc(100%/12*2)}.mud-grid-item-xxl-3{flex-grow:0;max-width:calc(100%/12*3);flex-basis:calc(100%/12*3)}.mud-grid-item-xxl-4{flex-grow:0;max-width:calc(100%/12*4);flex-basis:calc(100%/12*4)}.mud-grid-item-xxl-5{flex-grow:0;max-width:calc(100%/12*5);flex-basis:calc(100%/12*5)}.mud-grid-item-xxl-6{flex-grow:0;max-width:calc(100%/12*6);flex-basis:calc(100%/12*6)}.mud-grid-item-xxl-7{flex-grow:0;max-width:calc(100%/12*7);flex-basis:calc(100%/12*7)}.mud-grid-item-xxl-8{flex-grow:0;max-width:calc(100%/12*8);flex-basis:calc(100%/12*8)}.mud-grid-item-xxl-9{flex-grow:0;max-width:calc(100%/12*9);flex-basis:calc(100%/12*9)}.mud-grid-item-xxl-10{flex-grow:0;max-width:calc(100%/12*10);flex-basis:calc(100%/12*10)}.mud-grid-item-xxl-11{flex-grow:0;max-width:calc(100%/12*11);flex-basis:calc(100%/12*11)}.mud-grid-item-xxl-12{flex-grow:0;max-width:calc(100%/12*12);flex-basis:calc(100%/12*12)}.mud-grid-item-xxl-auto{flex-grow:0;max-width:none;flex-basis:auto}.mud-grid-item-xxl-true{flex-grow:1;max-width:100%;flex-basis:0}}.mud-paper{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-surface);border-radius:var(--mud-default-borderradius);transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-paper-square{border-radius:0px}.mud-paper-outlined{border:1px solid var(--mud-palette-lines-default)}.mud-icon-default{color:var(--mud-palette-text-secondary)}.mud-disabled .mud-icon-root,.mud-disabled .mud-svg-icon,.mud-disabled .mud-icon-default{color:var(--mud-palette-text-disabled)}.mud-icon-root{width:1em;height:1em;display:inline-block;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;flex-shrink:0;user-select:none}.mud-icon-root:focus{outline:none}.mud-icon-root.mud-svg-icon{fill:currentColor}.mud-icon-size-small{font-size:1.25rem}.mud-icon-size-medium{font-size:1.5rem}.mud-icon-size-large{font-size:2.25rem}.mud-divider{margin:0;flex-shrink:0;border-color:var(--mud-palette-divider);border-width:1px;border-style:solid none none none}.mud-divider-absolute{left:0;width:100%;bottom:0;position:absolute}.mud-divider-inset{margin-left:72px;margin-inline-start:72px;margin-inline-end:unset}.mud-divider-light{border-color:var(--mud-palette-divider-light)}.mud-divider-middle{margin-left:16px;margin-right:16px}.mud-divider-vertical{border-style:none solid none none;height:100%}.mud-divider-flexitem{height:auto;align-self:stretch}.mud-divider-fullwidth{flex-grow:1;width:100%}.mud-drop-zone{position:relative;transition:all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-drop-zone-drag-block>*{pointer-events:none}.mud-drop-zone-can-drop{background-color:var(--mud-palette-success-hover)}.mud-drop-zone-no-drop{background-color:var(--mud-palette-error-hover)}.mud-drop-item:not(.mud-drop-item-preview-start){cursor:grab;user-select:none}.mud-drop-item:not(.mud-drop-item-preview-start):active{cursor:grabbing}.mud-drop-item-preview-start{height:20px;width:100%;position:absolute;top:0;left:0;z-index:1;user-select:none}.mud-drop-item .mud-ripple:after{display:none;transform:none}.mud-expansion-panels{flex:0 1 auto;position:relative;max-width:100%;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1);border-radius:var(--mud-default-borderradius)}.mud-expansion-panels.mud-expansion-panels-square{border-radius:0px}.mud-expansion-panels.mud-expansion-panels-borders .mud-expand-panel{border-bottom:1px solid var(--mud-palette-lines-default)}.mud-expand-panel{flex:1 0 100%;max-width:100%;position:relative;transition:margin .3s cubic-bezier(0.25, 0.8, 0.5, 1);transition-delay:100ms;color:var(--mud-palette-text-primary);background-color:var(--mud-palette-surface)}.mud-expand-panel.mud-expand-panel-border{border-bottom:1px solid var(--mud-palette-lines-default)}.mud-expand-panel:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-expand-panel:last-child{border-bottom:none;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mud-expand-panel.mud-panel-expanded{margin:16px 0;border-radius:inherit;border-bottom:none;transition-delay:0ms}.mud-expand-panel.mud-panel-expanded:first-child{margin-top:0}.mud-expand-panel.mud-panel-expanded:last-child{margin-bottom:0}.mud-expand-panel.mud-panel-expanded+.mud-expand-panel{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-expand-panel.mud-panel-next-expanded{border-bottom:none;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mud-expand-panel .mud-expand-panel-header{width:100%;align-items:center;display:flex;font-size:.9375rem;line-height:1;min-height:48px;outline:none;padding:16px 0px;position:relative;transition:min-height .3s cubic-bezier(0.25, 0.8, 0.5, 1);user-select:none}.mud-expand-panel .mud-expand-panel-header.mud-expand-panel-header-gutters{padding-left:24px;padding-right:24px}.mud-expand-panel .mud-expand-panel-header:hover{cursor:pointer}.mud-expand-panel .mud-expand-panel-header .mud-expand-panel-text{flex:1 1 auto}.mud-expand-panel .mud-expand-panel-header .mud-expand-panel-icon{transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1),visibility 0s}.mud-expand-panel .mud-expand-panel-header .mud-expand-panel-icon.mud-transform{transform:rotate(-180deg)}.mud-expand-panel .mud-expand-panel-content{padding-bottom:16px;flex:1 1 auto;max-width:100%}.mud-expand-panel .mud-expand-panel-content.mud-expand-panel-gutters{padding-left:24px;padding-right:24px}.mud-expand-panel .mud-expand-panel-content.mud-expand-panel-dense{padding-top:0px;padding-bottom:0px}.mud-disabled>.mud-expand-panel-header{color:var(--mud-palette-text-disabled)}.mud-disabled>.mud-expand-panel-header:hover{cursor:default}.mud-fab{padding:0;font-family:var(--mud-typography-button-family);font-size:var(--mud-typography-button-size);font-weight:var(--mud-typography-button-weight);line-height:var(--mud-typography-button-lineheight);letter-spacing:var(--mud-typography-button-letterspacing);text-transform:var(--mud-typography-button-text-transform);min-width:0;box-shadow:0px 3px 5px -1px rgba(0,0,0,.2),0px 6px 10px 0px rgba(0,0,0,.14),0px 1px 18px 0px rgba(0,0,0,.12);box-sizing:border-box;min-height:36px;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:50%;color:var(--mud-palette-text-primary);--mud-ripple-color: var(--mud-palette-text-primary);background-color:var(--mud-palette-action-default-hover)}@media(hover: hover)and (pointer: fine){.mud-fab:hover{box-shadow:0px 5px 5px -3px rgba(0,0,0,.2),0px 8px 10px 1px rgba(0,0,0,.14),0px 3px 14px 2px rgba(0,0,0,.12);text-decoration:none;background-color:var(--mud-palette-action-disabled-background)}}.mud-fab:focus-visible{box-shadow:0px 5px 5px -3px rgba(0,0,0,.2),0px 8px 10px 1px rgba(0,0,0,.14),0px 3px 14px 2px rgba(0,0,0,.12);text-decoration:none;background-color:var(--mud-palette-action-disabled-background)}.mud-fab:active{box-shadow:0px 7px 8px -4px rgba(0,0,0,.2),0px 12px 17px 2px rgba(0,0,0,.14),0px 5px 22px 4px rgba(0,0,0,.12);text-decoration:none;background-color:var(--mud-palette-action-disabled-background)}.mud-fab:disabled{color:var(--mud-palette-action-disabled);box-shadow:none;background-color:var(--mud-palette-action-disabled-background);cursor:default;pointer-events:none}@media(hover: hover)and (pointer: fine){.mud-fab:disabled:hover{background-color:var(--mud-palette-action-disabled-background)}}.mud-fab-disable-elevation{box-shadow:none}@media(hover: hover)and (pointer: fine){.mud-fab-disable-elevation:hover{box-shadow:none}}.mud-fab-disable-elevation:active{box-shadow:none}.mud-fab-disable-elevation.mud-focus-visible{box-shadow:none}.mud-fab-disable-elevation:disabled{box-shadow:none}.mud-fab-label{width:100%;display:inherit;align-items:inherit;justify-content:inherit}.mud-fab-primary{color:var(--mud-palette-primary-text);--mud-ripple-color: var(--mud-palette-primary-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-fab-primary:hover{background-color:var(--mud-palette-primary-darken)}}.mud-fab-primary:focus-visible,.mud-fab-primary:active{background-color:var(--mud-palette-primary-darken)}.mud-fab-secondary{color:var(--mud-palette-secondary-text);--mud-ripple-color: var(--mud-palette-secondary-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-secondary)}@media(hover: hover)and (pointer: fine){.mud-fab-secondary:hover{background-color:var(--mud-palette-secondary-darken)}}.mud-fab-secondary:focus-visible,.mud-fab-secondary:active{background-color:var(--mud-palette-secondary-darken)}.mud-fab-tertiary{color:var(--mud-palette-tertiary-text);--mud-ripple-color: var(--mud-palette-tertiary-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-tertiary)}@media(hover: hover)and (pointer: fine){.mud-fab-tertiary:hover{background-color:var(--mud-palette-tertiary-darken)}}.mud-fab-tertiary:focus-visible,.mud-fab-tertiary:active{background-color:var(--mud-palette-tertiary-darken)}.mud-fab-info{color:var(--mud-palette-info-text);--mud-ripple-color: var(--mud-palette-info-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-info)}@media(hover: hover)and (pointer: fine){.mud-fab-info:hover{background-color:var(--mud-palette-info-darken)}}.mud-fab-info:focus-visible,.mud-fab-info:active{background-color:var(--mud-palette-info-darken)}.mud-fab-success{color:var(--mud-palette-success-text);--mud-ripple-color: var(--mud-palette-success-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-success)}@media(hover: hover)and (pointer: fine){.mud-fab-success:hover{background-color:var(--mud-palette-success-darken)}}.mud-fab-success:focus-visible,.mud-fab-success:active{background-color:var(--mud-palette-success-darken)}.mud-fab-warning{color:var(--mud-palette-warning-text);--mud-ripple-color: var(--mud-palette-warning-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-warning)}@media(hover: hover)and (pointer: fine){.mud-fab-warning:hover{background-color:var(--mud-palette-warning-darken)}}.mud-fab-warning:focus-visible,.mud-fab-warning:active{background-color:var(--mud-palette-warning-darken)}.mud-fab-error{color:var(--mud-palette-error-text);--mud-ripple-color: var(--mud-palette-error-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-error)}@media(hover: hover)and (pointer: fine){.mud-fab-error:hover{background-color:var(--mud-palette-error-darken)}}.mud-fab-error:focus-visible,.mud-fab-error:active{background-color:var(--mud-palette-error-darken)}.mud-fab-dark{color:var(--mud-palette-dark-text);--mud-ripple-color: var(--mud-palette-dark-text) !important;--mud-ripple-opacity: var(--mud-ripple-opacity-secondary) !important;background-color:var(--mud-palette-dark)}@media(hover: hover)and (pointer: fine){.mud-fab-dark:hover{background-color:var(--mud-palette-dark-darken)}}.mud-fab-dark:focus-visible,.mud-fab-dark:active{background-color:var(--mud-palette-dark-darken)}.mud-fab-extended.mud-fab-size-large{width:auto;height:48px;padding:0 16px;min-width:48px;min-height:auto;border-radius:24px}.mud-fab-extended.mud-fab-size-large .mud-fab-label{gap:8px}.mud-fab-extended.mud-fab-size-small{width:auto;height:34px;padding:0 12px;min-width:34px;border-radius:17px}.mud-fab-extended.mud-fab-size-small .mud-fab-label{gap:4px}.mud-fab-extended.mud-fab-size-medium{width:auto;height:40px;padding:0 16px;min-width:40px;border-radius:20px}.mud-fab-extended.mud-fab-size-medium .mud-fab-label{gap:8px}.mud-fab-color-inherit{color:inherit}.mud-fab-size-small{width:40px;height:40px}.mud-fab-size-medium{width:48px;height:48px}.mud-fab-size-large{width:56px;height:56px}.mud-form{display:flex;flex-direction:column}.mud-list{margin:0;padding:0;position:relative;list-style:none}.mud-list.mud-list-padding{padding-top:8px;padding-bottom:8px}.mud-list-item{width:100%;display:flex;position:relative;box-sizing:border-box;text-align:start;align-items:center;padding-top:8px;padding-bottom:8px;justify-content:flex-start;text-decoration:none}.mud-list-item.mud-list-item-dense{padding-top:4px;padding-bottom:4px}.mud-list-item.mud-list-item-disabled{color:var(--mud-palette-action-disabled) !important;cursor:default !important;pointer-events:none !important}.mud-list-item.mud-list-item-disabled .mud-list-item-icon{color:var(--mud-palette-action-disabled) !important}.mud-list-item.mud-list-item-disabled .mud-list-item-secondary-text{color:var(--mud-palette-action-disabled) !important}.mud-list-item-clickable{color:inherit;border:0;cursor:pointer;margin:0;outline:0;user-select:none;border-radius:0;vertical-align:middle;background-color:rgba(0,0,0,0);-webkit-appearance:none;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-list-item-clickable:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-list-item-clickable:focus:not(.mud-selected-item),.mud-list-item-clickable:active{background-color:var(--mud-palette-action-default-hover)}.mud-list-item-gutters{padding-left:16px;padding-right:16px}.mud-list-item-text{flex:1 1 auto;min-width:0;margin-top:4px;margin-bottom:4px}.mud-list-item-text-inset{padding-left:56px;padding-inline-start:56px;padding-inline-end:unset}.mud-list-item-icon{color:var(--mud-palette-action-default);display:inline-flex;min-width:56px;flex-shrink:0}.mud-list-subheader{color:var(--mud-palette-action-default);font-size:.875rem;box-sizing:border-box;list-style:none;font-weight:500;padding-top:8px;padding-bottom:20px}.mud-list-subheader-gutters{padding-left:16px;padding-right:16px}.mud-list-subheader-inset{padding-left:72px;padding-inline-start:72px;padding-inline-end:unset}.mud-list-subheader-sticky{top:0;z-index:1;position:sticky;background-color:inherit}.mud-list-item-avatar{min-width:56px;flex-shrink:0}.mud-nested-list>.mud-list-item{padding-left:32px;padding-inline-start:32px;padding-inline-end:unset}.mud-list-item-secondary-text{font-weight:500;color:var(--mud-palette-text-secondary)}.mud-application-layout-rtl{direction:rtl}.mud-menu{display:inline-flex;align-self:center;position:relative}.mud-menu *{cursor:pointer}.mud-menu>div.mud-disabled{cursor:default}.mud-menu>div.mud-disabled *{cursor:default}.mud-menu>div.mud-menu-activator{display:contents;user-select:none}.mud-menu-button-hidden{position:absolute}.mud-menu-list{padding:4px 0;min-width:112px}.mud-menu-list>.mud-menu{width:100%;display:inline}.mud-menu-list>.mud-divider{margin:4px 0}.mud-menu-item{width:100%;display:flex;position:relative;box-sizing:border-box;text-align:start;align-items:center;justify-content:flex-start;text-decoration:none;padding:8px 12px}.mud-menu-item>.mud-icon-root{color:var(--mud-palette-action-default)}.mud-menu-item .mud-menu-item-icon{display:inline-flex;flex-shrink:0;margin-inline-end:12px}.mud-menu-item .mud-menu-item-text{flex:1 1 auto;margin:4px 0}.mud-menu-item.mud-menu-item-dense{padding:2px 12px}.mud-menu-item.mud-disabled{color:var(--mud-palette-action-disabled) !important;cursor:default !important;pointer-events:none !important}.mud-menu-item.mud-disabled .mud-menu-item-icon{color:var(--mud-palette-action-disabled) !important}.mud-menu-list:has(.mud-menu-item-icon) .mud-menu-item:not(:has(.mud-menu-item-icon)) .mud-menu-item-text{margin-inline-start:36px}.mud-menu-list:has(.mud-menu-submenu-icon) .mud-menu-item:not(:has(.mud-menu-submenu-icon)) .mud-menu-item-text{margin-inline-end:36px}.mud-popover:has(>.mud-menu-list){overflow:hidden}.mud-popover:has(>.mud-menu-list):has(>.mud-menu-list:empty){visibility:hidden}.mud-link.mud-link-underline-none{text-decoration:none}.mud-link.mud-link-underline-hover{text-decoration:none}@media(hover: hover)and (pointer: fine){.mud-link.mud-link-underline-hover:hover{text-decoration:underline}}.mud-link.mud-link-underline-hover:focus-visible,.mud-link.mud-link-underline-hover:active{text-decoration:underline}.mud-link.mud-link-underline-always{text-decoration:underline}.mud-link.mud-link-disabled{cursor:default;color:var(--mud-palette-action-disabled) !important}.mud-link.mud-link-disabled:not(.mud-link-underline-always){text-decoration:none}.mud-navmenu{margin:0;position:relative;list-style:none;overscroll-behavior-y:contain}.mud-navmenu.mud-navmenu-dense .mud-nav-link{padding:4px 16px 4px 16px}.mud-navmenu.mud-navmenu-margin-dense .mud-nav-link{margin:2px 0}.mud-navmenu.mud-navmenu-margin-normal .mud-nav-link{margin:4px 0}.mud-navmenu.mud-navmenu-rounded .mud-nav-link{border-radius:var(--mud-default-borderradius)}.mud-navmenu.mud-navmenu-bordered .mud-nav-link.active:not(.mud-nav-link-disabled){border-inline-end-style:solid;border-inline-end-width:2px}.mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-primary);background-color:var(--mud-palette-action-default-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:var(--mud-palette-action-default-hover)}}.mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-default .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:var(--mud-palette-action-default-hover)}.mud-navmenu.mud-navmenu-default .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-primary)}.mud-navmenu.mud-navmenu-primary .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary);background-color:var(--mud-palette-primary-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-primary .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}}.mud-navmenu.mud-navmenu-primary .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-primary .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-primary-rgb), 0.12)}.mud-navmenu.mud-navmenu-primary .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-primary)}.mud-navmenu.mud-navmenu-primary .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-primary)}.mud-navmenu.mud-navmenu-secondary .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary);background-color:var(--mud-palette-secondary-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-secondary .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}}.mud-navmenu.mud-navmenu-secondary .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-secondary .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-secondary-rgb), 0.12)}.mud-navmenu.mud-navmenu-secondary .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-secondary)}.mud-navmenu.mud-navmenu-secondary .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-secondary)}.mud-navmenu.mud-navmenu-tertiary .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary);background-color:var(--mud-palette-tertiary-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-tertiary .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}}.mud-navmenu.mud-navmenu-tertiary .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-tertiary .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-tertiary-rgb), 0.12)}.mud-navmenu.mud-navmenu-tertiary .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-tertiary)}.mud-navmenu.mud-navmenu-tertiary .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-tertiary)}.mud-navmenu.mud-navmenu-info .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info);background-color:var(--mud-palette-info-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-info .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}}.mud-navmenu.mud-navmenu-info .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-info .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-info-rgb), 0.12)}.mud-navmenu.mud-navmenu-info .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-info)}.mud-navmenu.mud-navmenu-info .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-info)}.mud-navmenu.mud-navmenu-success .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success);background-color:var(--mud-palette-success-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-success .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}}.mud-navmenu.mud-navmenu-success .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-success .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-success-rgb), 0.12)}.mud-navmenu.mud-navmenu-success .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-success)}.mud-navmenu.mud-navmenu-success .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-success)}.mud-navmenu.mud-navmenu-warning .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning);background-color:var(--mud-palette-warning-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-warning .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}}.mud-navmenu.mud-navmenu-warning .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-warning .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-warning-rgb), 0.12)}.mud-navmenu.mud-navmenu-warning .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-warning)}.mud-navmenu.mud-navmenu-warning .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-warning)}.mud-navmenu.mud-navmenu-error .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error);background-color:var(--mud-palette-error-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-error .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}}.mud-navmenu.mud-navmenu-error .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-error .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-error-rgb), 0.12)}.mud-navmenu.mud-navmenu-error .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-error)}.mud-navmenu.mud-navmenu-error .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-error)}.mud-navmenu.mud-navmenu-dark .mud-nav-link.active:not(.mud-nav-link-disabled){color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark);background-color:var(--mud-palette-dark-hover)}@media(hover: hover)and (pointer: fine){.mud-navmenu.mud-navmenu-dark .mud-nav-link.active:not(.mud-nav-link-disabled):hover:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}}.mud-navmenu.mud-navmenu-dark .mud-nav-link.active:not(.mud-nav-link-disabled):focus-visible:not(.mud-nav-link-disabled),.mud-navmenu.mud-navmenu-dark .mud-nav-link.active:not(.mud-nav-link-disabled):active:not(.mud-nav-link-disabled){background-color:rgba(var(--mud-palette-dark-rgb), 0.12)}.mud-navmenu.mud-navmenu-dark .mud-nav-link.active:not(.mud-nav-link-disabled) .mud-nav-link-icon{color:var(--mud-palette-dark)}.mud-navmenu.mud-navmenu-dark .mud-nav-link-expand-icon.mud-transform{fill:var(--mud-palette-dark)}.mud-nav-group{width:100%;display:block;justify-content:flex-start}.mud-nav-group>.mud-nav-link>.mud-nav-link-text{font-weight:500}.mud-nav-group * .mud-nav-group>.mud-nav-link>.mud-nav-link-text{font-weight:400}.mud-nav-group * .mud-nav-group>.mud-nav-link.mud-expanded>.mud-nav-link-text{font-weight:500}.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding-left:36px;padding-inline-start:36px;padding-inline-end:unset}.mud-nav-group-disabled,.mud-nav-group-disabled .mud-nav-link-text,.mud-nav-group-disabled .mud-nav-link-expand-icon,.mud-nav-group-disabled .mud-nav-link-icon{color:var(--mud-palette-text-disabled) !important;cursor:default;pointer-events:none}.mud-nav-item{width:100%;display:flex;justify-content:flex-start;text-decoration:none}.mud-nav-link{width:100%;font-weight:400;padding:8px 16px 8px 16px;color:inherit;line-height:1.75;display:inline-flex;justify-content:flex-start;text-transform:inherit;background-color:rgba(0,0,0,0);transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,padding 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;align-items:flex-start}.mud-nav-link.mud-nav-link-disabled{color:var(--mud-palette-text-disabled) !important;cursor:default;pointer-events:none}@media(hover: hover)and (pointer: fine){.mud-nav-link:hover:not(.mud-nav-link-disabled){cursor:pointer;text-decoration:none;background-color:var(--mud-palette-action-default-hover)}}.mud-nav-link:focus-visible:not(.mud-nav-link-disabled){background-color:var(--mud-palette-action-default-hover)}.mud-nav-link.active:not(.mud-nav-link-disabled){font-weight:500 !important}.mud-nav-link:not(.mud-nav-link-disabled) .mud-nav-link-icon.mud-nav-link-icon-default{color:var(--mud-palette-drawer-icon)}.mud-nav-link.mud-nav-link-disabled .mud-nav-link-icon{color:var(--mud-palette-text-disabled)}.mud-nav-link .mud-nav-link-expand-icon{color:var(--mud-palette-drawer-icon);transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1),visibility 0s}.mud-nav-link .mud-nav-link-expand-icon.mud-transform{transform:rotate(-180deg)}.mud-nav-link .mud-nav-link-expand-icon.mud-transform-disabled{transform:rotate(-180deg)}.mud-nav-link .mud-nav-link-text{width:100%;text-align:start;margin-left:12px;margin-inline-start:12px;margin-inline-end:unset;letter-spacing:0}.mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding-left:36px;padding-inline-start:36px;padding-inline-end:16px}.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding-left:48px;padding-inline-start:48px}.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding-left:48px;padding-inline-start:48px;padding-inline-end:16px}.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding-left:60px;padding-inline-start:60px;padding-inline-end:0}.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding-left:60px;padding-inline-start:60px;padding-inline-end:16px}.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding-left:72px;padding-inline-start:72px;padding-inline-end:0}.mud-drawer-mini .mud-nav-link{line-height:1;display:flex;align-items:center}.mud-drawer--closed.mud-drawer-mini>.mud-drawer-content>.mud-navmenu .mud-nav-link .mud-icon-root:first-child+.mud-nav-link-text{display:none}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group .mud-nav-link{padding:8px 16px 8px 16px}.mud-drawer--closed.mud-drawer-mini .mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu>.mud-nav-group * .mud-navmenu .mud-nav-item .mud-nav-link{padding:8px 16px 8px 16px}.page-content-navigation .page-content-navigation-navlink.active .mud-nav-link{color:var(--mud-palette-primary);border-color:var(--mud-palette-primary);background-color:rgba(0,0,0,0)}.page-content-navigation .page-content-navigation-navlink .mud-nav-link{padding:4px 16px 4px 16px;color:var(--mud-palette-text-secondary);border-left:2px solid var(--mud-palette-action-disabled-background)}.page-content-navigation .page-content-navigation-navlink .mud-nav-link.active{color:var(--mud-palette-primary);border-color:var(--mud-palette-primary);background-color:rgba(0,0,0,0)}.page-content-navigation .page-content-navigation-navlink .mud-nav-link .mud-nav-link-text{margin-left:0px;margin-inline-start:0px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mud-pagination{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0;list-style:none}.mud-pagination .mud-pagination-item>*{height:32px;min-width:32px;margin:0 3px;padding:0 6px;text-align:center;border-radius:16px}.mud-pagination .mud-pagination-item :not(mud-pagination-item-selected)>*{box-shadow:none}.mud-pagination .mud-pagination-item .mud-button{line-height:normal}.mud-pagination .mud-pagination-item .mud-icon-button{padding:0}.mud-pagination .mud-pagination-item-rectangular .mud-button{border-radius:var(--mud-default-borderradius)}.mud-pagination .mud-pagination-item .mud-typography[disabled]{color:var(--mud-palette-action-disabled) !important}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-default{background-color:var(--mud-palette-action-default-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-primary{background-color:var(--mud-palette-primary-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-secondary{background-color:var(--mud-palette-secondary-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-tertiary{background-color:var(--mud-palette-tertiary-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-info{background-color:var(--mud-palette-info-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-success{background-color:var(--mud-palette-success-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-warning{background-color:var(--mud-palette-warning-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-error{background-color:var(--mud-palette-error-hover)}.mud-pagination-outlined .mud-pagination-item-selected .mud-button-outlined-dark{background-color:var(--mud-palette-dark-hover)}.mud-pagination-filled .mud-pagination-item:not(.mud-pagination-item-selected) .mud-button{background-color:var(--mud-palette-surface)}.mud-pagination-filled .mud-pagination-item .mud-button{box-shadow:var(--mud-elevation-1)}.mud-pagination-small .mud-pagination-item>*{height:26px;min-width:26px;margin:0 1px;padding:0 4px;border-radius:13px}.mud-pagination-large .mud-pagination-item>*{height:40px;min-width:40px;padding:0 10px;border-radius:20px}.mud-pagination-disable-elevation .mud-pagination-item .mud-button{box-shadow:none}.mud-pagination-rtl .mud-pagination-item .mud-icon-root{transform:scaleX(-1)}.mud-picker.mud-rounded{border-radius:var(--mud-default-borderradius)}.mud-picker .mud-picker-actions{flex:0 0 auto;display:flex;padding:8px;align-items:center;justify-content:flex-end}.mud-picker .mud-picker-actions>:not(:first-child){margin-left:8px;margin-inline-start:8px;margin-inline-end:unset}.mud-picker .mud-picker-actions:empty{display:none}.mud-picker-inline{display:flex;flex:1 1 auto;position:relative;max-width:100%}.mud-picker-inline.mud-picker-input-button .mud-input,.mud-picker-inline.mud-picker-input-button .mud-input .mud-input-root{cursor:pointer}.mud-picker-inline.mud-picker-input-button.mud-disabled .mud-input,.mud-picker-inline.mud-picker-input-button.mud-disabled .mud-input .mud-input-root{cursor:default}.mud-picker-inline.mud-picker-input-text{cursor:text}.mud-picker-inline.mud-picker-input-text:hover{cursor:text}.mud-picker-inline.mud-picker-input-text.mud-disabled{cursor:default}.mud-picker-inline.mud-picker-input-text.mud-disabled:hover{cursor:default}.mud-picker-static{display:flex;overflow:hidden;min-width:310px;flex-direction:column}.mud-picker-container{display:flex;flex-direction:column;border-radius:inherit}.mud-picker-container.mud-picker-container-landscape{flex-direction:row}.mud-picker-container .mud-toolbar{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-picker-popover-paper{outline:0;z-index:calc(var(--mud-zindex-popover) + 1);position:absolute;min-width:16px;min-height:16px;overflow-x:hidden;overflow-y:auto}.mud-picker-view{display:none}.mud-picker-view.mud-picker-open{display:block}.mud-picker-content{display:flex;max-width:100%;min-width:310px;min-height:305px;overflow:hidden;flex-direction:column;justify-content:center}.mud-picker-content.mud-picker-content-landscape{padding:0 8px}.mud-picker-toolbar{height:100px;display:flex;align-items:center;flex-direction:row;justify-content:center}.mud-picker-toolbar.mud-picker-toolbar-landscape{height:auto;padding:8px;max-width:150px;justify-content:flex-start}.mud-picker-toolbar.mud-button-root{padding:0;min-width:16px;text-transform:none}.mud-picker-inline-paper .mud-paper{position:relative !important}.mud-picker-hidden{visibility:hidden}.mud-picker-pos-top{top:0px;position:fixed;visibility:visible}.mud-picker-pos-top.mud-picker-pos-left{left:10px}.mud-picker-pos-top.mud-picker-pos-right{right:10px}.mud-picker-pos-above{bottom:0px;visibility:visible}.mud-picker-pos-above.mud-picker-pos-left{left:50%;transform:translateX(-50%)}.mud-picker-pos-above.mud-picker-pos-right{right:0px}.mud-picker-pos-bottom{bottom:10px;position:fixed;visibility:visible}.mud-picker-pos-bottom.mud-picker-pos-left{left:10px}.mud-picker-pos-bottom.mud-picker-pos-right{right:10px}.mud-picker-pos-below{visibility:visible}.mud-picker-pos-below.mud-picker-pos-left{left:50%;transform:translateX(-50%)}.mud-picker-pos-below.mud-picker-pos-right{right:0px}.mud-picker-datepicker-toolbar{align-items:flex-start;flex-direction:column}.mud-picker-datepicker-toolbar .mud-button-year{font-size:1rem;font-weight:400;line-height:1.75;letter-spacing:.00938em}.mud-picker-datepicker-toolbar .mud-button-date{font-size:2.125rem;font-weight:400;line-height:1.17;letter-spacing:.00735em;text-transform:none}.mud-picker-datepicker-toolbar-landscape{padding:16px}.mud-picker-datepicker-date-landscape{margin-right:16px;margin-inline-end:16px;margin-inline-start:unset}.mud-picker-calendar-header-switch{display:flex;margin-top:4px;align-items:center;margin-bottom:8px;justify-content:space-between}.mud-picker-calendar-header-switch>.mud-icon-button{z-index:1;padding:8px;margin:6px;background-color:var(--mud-palette-surface)}@media(hover: hover)and (pointer: fine){.mud-picker-calendar-header-switch>.mud-icon-button:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-picker-calendar-header-switch .mud-picker-calendar-header-transition{width:100%;height:23px;overflow:hidden}@media(hover: hover)and (pointer: fine){.mud-picker-calendar-header-switch .mud-picker-calendar-header-transition:hover .mud-typography{cursor:pointer;font-weight:500}}.mud-picker-calendar-header-day{display:flex;max-height:16px;align-items:center;justify-content:center}.mud-picker-calendar-header-day .mud-day-label{color:var(--mud-palette-text-secondary);width:36px;margin:0 2px;text-align:center}.mud-picker-year-container{height:300px;overflow-y:auto}.mud-picker-year-container .mud-picker-year{cursor:pointer;height:40px;display:flex;outline:none;align-items:center;justify-content:center;user-select:none;animation:mud-animation-fadein 500ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-picker-year-container .mud-picker-year:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-picker-year-container .mud-picker-year .mud-picker-year-selected{margin:10px 0;font-weight:500}.mud-picker-month-container{width:310px;display:flex;flex-wrap:wrap;align-content:stretch}.mud-picker-month-container .mud-picker-month{flex:1 0 33.33%;cursor:pointer;height:60px;display:flex;outline:none;align-items:center;justify-content:center;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-picker-month-container .mud-picker-month:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-picker-month-container .mud-picker-month .mud-picker-month-selected{font-weight:500}.mud-picker-month-container .mud-picker-month.mud-disabled{color:var(--mud-palette-text-disabled);pointer-events:none}.mud-picker-slide-transition{display:block;position:relative}.mud-picker-slide-transition>*{top:0;left:0;right:0;position:absolute}.mud-picker-calendar-transition{margin-top:12px;min-height:216px}.mud-picker-calendar-progress-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.mud-picker-calendar-content{display:grid;--selected-day: 0;grid-column-gap:10px;grid-template-columns:auto}@media(min-width: 600px){.mud-picker-calendar-content:not(.mud-picker-calendar-content-1){grid-template-columns:repeat(2, minmax(auto, 1fr))}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-1 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-3 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-5 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-7 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-9 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-11 .mud-picker-nav-button-next{visibility:hidden}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-1 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-3 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-5 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-7 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-9 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-11 .mud-picker-nav-button-prev{visibility:visible}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-2 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-4 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-6 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-8 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-10 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-12 .mud-picker-nav-button-next{visibility:visible}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-2 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-4 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-6 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-8 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-10 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1) .mud-picker-calendar-header-12 .mud-picker-nav-button-prev{visibility:hidden}}@media(min-width: 960px){.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2){grid-template-columns:repeat(3, minmax(auto, 1fr))}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-1 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-4 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-7 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-10 .mud-picker-nav-button-next{visibility:hidden}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-1 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-4 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-7 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-10 .mud-picker-nav-button-prev{visibility:visible}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-2 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-2 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-5 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-5 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-8 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-8 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-11 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-11 .mud-picker-nav-button-prev{visibility:hidden}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-3 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-6 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-9 .mud-picker-nav-button-next,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-12 .mud-picker-nav-button-next{visibility:visible}.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-3 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-6 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-9 .mud-picker-nav-button-prev,.mud-picker-calendar-content:not(.mud-picker-calendar-content-1):not(.mud-picker-calendar-content-2) .mud-picker-calendar-header-12 .mud-picker-nav-button-prev{visibility:hidden}}:not(.mud-picker-hidden) .mud-picker-calendar-header-last .mud-picker-nav-button-next{visibility:inherit !important}.mud-picker-hidden .mud-picker-nav-button-next,.mud-picker-hidden .mud-picker-nav-button-prev{visibility:hidden !important}.mud-picker-calendar-container{display:flex;width:310px;flex-direction:column}.mud-picker-calendar{display:flex;flex-wrap:wrap;justify-content:center}.mud-picker-calendar .mud-day{color:var(--mud-palette-text-primary);width:36px;height:36px;margin:0 2px;padding:0;font-size:.75rem;font-weight:500}@media(hover: hover)and (pointer: fine){.mud-picker-calendar .mud-day:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-picker-calendar .mud-day.mud-hidden{opacity:0;pointer-events:none}.mud-picker-calendar .mud-day.mud-current{font-weight:600}.mud-picker-calendar .mud-day.mud-selected{font-weight:500}.mud-picker-calendar .mud-day .mud-typography{margin-top:2px}.mud-picker-calendar .mud-day.mud-disabled{color:var(--mud-palette-text-disabled);pointer-events:none}.mud-picker-calendar .mud-day.mud-range{margin:0;width:40px;transition:none}.mud-picker-calendar .mud-day.mud-range.mud-range-start-selected{border-radius:50% 0% 0% 50%}.mud-picker-calendar .mud-day.mud-range.mud-range-end-selected{border-radius:0% 50% 50% 0%}.mud-picker-calendar .mud-day.mud-range.mud-range-between{border-radius:0;background-color:var(--mud-palette-action-default-hover)}@media(hover: hover)and (pointer: fine){.mud-picker-calendar .mud-day.mud-range.mud-range-selection:hover.mud-range-start-selected{border-radius:50%}.mud-picker-calendar .mud-day.mud-range.mud-range-selection:hover:not(.mud-range-start-selected){border-radius:0% 50% 50% 0%}}.mud-picker-calendar .mud-day.mud-range.mud-range-selection:not(:hover):not(.mud-range-start-selected){border-radius:0;background:linear-gradient(var(--mud-palette-action-default-hover) 100%, var(--mud-palette-action-default-hover) 100%, transparent 0%);background-size:100% calc(100%*(var(--selected-day) - var(--day-id)))}@media(hover: hover)and (pointer: fine){.mud-range-selection-primary:hover{color:var(--mud-palette-primary-text) !important;background-color:var(--mud-palette-primary) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-secondary:hover{color:var(--mud-palette-secondary-text) !important;background-color:var(--mud-palette-secondary) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-tertiary:hover{color:var(--mud-palette-tertiary-text) !important;background-color:var(--mud-palette-tertiary) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-info:hover{color:var(--mud-palette-info-text) !important;background-color:var(--mud-palette-info) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-success:hover{color:var(--mud-palette-success-text) !important;background-color:var(--mud-palette-success) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-warning:hover{color:var(--mud-palette-warning-text) !important;background-color:var(--mud-palette-warning) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-error:hover{color:var(--mud-palette-error-text) !important;background-color:var(--mud-palette-error) !important}}@media(hover: hover)and (pointer: fine){.mud-range-selection-dark:hover{color:var(--mud-palette-dark-text) !important;background-color:var(--mud-palette-dark) !important}}.mud-picker-calendar-week{display:flex;margin:0 5px;justify-content:center;align-items:center}.mud-picker-calendar-week .mud-picker-calendar-week-text{width:15px;margin-top:2px !important;color:var(--mud-palette-text-disabled)}.mud-application-layout-rtl .mud-picker-calendar .mud-day.mud-range.mud-range-start-selected{border-radius:0% 50% 50% 0%}.mud-application-layout-rtl .mud-picker-calendar .mud-day.mud-range.mud-range-end-selected{border-radius:50% 0% 0% 50%}@media(hover: hover)and (pointer: fine){.mud-application-layout-rtl .mud-picker-calendar .mud-day.mud-range.mud-range-selection:hover:not(.mud-range-start-selected){border-radius:50% 0% 0% 50%}}.mud-picker-timepicker-toolbar .mud-timepicker-button{padding:0;min-width:16px;text-transform:none}.mud-picker-timepicker-toolbar .mud-timepicker-button.mud-timepicker-toolbar-text{color:hsla(0,0%,100%,.54)}@media(hover: hover)and (pointer: fine){.mud-picker-timepicker-toolbar .mud-timepicker-button:hover{background-color:var(--mud-theme-default-hover)}}.mud-picker-timepicker-toolbar .mud-timepicker-hourminute{display:flex;align-items:baseline;justify-content:flex-end}.mud-picker-timepicker-toolbar .mud-timepicker-hourminute .mud-timepicker-button{font-size:3.75rem;font-weight:300;line-height:1;letter-spacing:-0.00833em}.mud-picker-timepicker-toolbar .mud-timepicker-ampm{display:flex;margin-left:20px;margin-right:-20px;margin-inline-start:20px;margin-inline-end:-20px;flex-direction:column}.mud-picker-timepicker-toolbar .mud-timepicker-ampm .mud-timepicker-button{font-size:18px;font-weight:400;line-height:1.75;letter-spacing:.00938em}.mud-picker-timepicker-toolbar .mud-timepicker-separator{cursor:default;margin:0 4px 0 2px;margin-inline-start:2px;margin-inline-end:4px}.mud-picker-timepicker-toolbar.mud-picker-timepicker-toolbar-landscape{flex-wrap:wrap;width:150px;justify-content:center}.mud-picker-timepicker-toolbar.mud-picker-timepicker-toolbar-landscape .mud-timepicker-hourminute .mud-timepicker-button{font-size:3rem;font-weight:400;line-height:1.04;letter-spacing:0em}.mud-picker-timepicker-toolbar.mud-picker-timepicker-toolbar-landscape .mud-timepicker-ampm{display:flex;margin-left:20px;margin-right:-20px;margin-inline-start:20px;margin-inline-end:-20px;flex-direction:column}.mud-picker-timepicker-toolbar.mud-picker-timepicker-toolbar-landscape .mud-timepicker-ampm .mud-timepicker-button{font-size:18px;font-weight:400;line-height:1.75;letter-spacing:.00938em}.mud-picker-timepicker-toolbar.mud-picker-timepicker-toolbar-landscape .mud-timepicker-separator{font-size:3rem;font-weight:400;line-height:1.04;letter-spacing:0em}.mud-picker-time-container{margin:16px 0 8px;display:flex;align-items:flex-end;justify-content:center}.mud-picker-time-container .mud-picker-time-clock{width:260px;height:260px;position:relative;border-radius:50%;pointer-events:none;touch-action:pinch-zoom;background-color:rgba(0,0,0,.07)}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-mask{width:100%;height:100%;outline:none;position:absolute;user-select:none;pointer-events:auto}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pin{top:50%;left:50%;width:6px;height:6px;position:absolute;transform:translate(-50%, -50%);border-radius:50%}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick-inner{left:calc(50% - 1px);width:3px;height:35%;bottom:0;position:absolute;transform-origin:center bottom 0px}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick-inner.mud-hour:after{content:"";position:absolute;left:50%;transform:translate(-50%, -50%);height:48px;width:48px;top:-60%;border-radius:50%;background-color:inherit}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick-outer{left:calc(50% - 1px);width:0;height:35%;bottom:35%;position:absolute;transform-origin:center bottom 0px}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick-outer.mud-hour:after{content:"";position:absolute;left:50%;transform:translate(-50%, -50%);height:48px;width:62px;top:-20px;border-radius:50%;background-color:inherit}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick{left:calc(50% - 1px);width:3px;height:50%;bottom:50%;position:absolute;transform-origin:center bottom 0px}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick.mud-hour:after{content:"";position:absolute;left:50%;transform:translate(-50%, -50%);height:62px;width:62px;top:20px;border-radius:50%;background-color:inherit}.mud-picker-time-container .mud-picker-time-clock .mud-picker-stick.mud-minute:after{content:"";position:absolute;left:50%;transform:translate(-50%, -50%);height:44px;width:15px;top:20px;border-radius:50%;background-color:inherit}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pointer{left:calc(50% - 1px);width:2px;bottom:50%;position:absolute;transform-origin:center bottom 0px}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pointer.mud-picker-time-clock-pointer-animation{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,height 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pointer .mud-picker-time-clock-pointer-thumb{position:absolute;border-radius:100%}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pointer .mud-picker-time-clock-pointer-thumb.mud-onclock-text{top:-19px;left:-13px;width:28px;height:28px;border:none;background-color:inherit}.mud-picker-time-container .mud-picker-time-clock .mud-picker-time-clock-pointer .mud-picker-time-clock-pointer-thumb.mud-onclock-minute{background:rgba(0,0,0,0);border:2px solid;width:10px;height:10px;top:-9px;left:-4px}.mud-picker-time-container .mud-picker-time-clock .mud-clock-number{left:calc((100% - 32px)/2);color:var(--mud-palette-text-primary);background-color:rgba(0,0,0,0) !important;width:32px;height:32px;display:inline-flex;position:absolute;align-items:center;user-select:none;border-radius:50%;justify-content:center;transition-duration:120ms;transition-property:color}.mud-time-picker-dial{width:100%;height:100%;position:absolute;transition:transform 350ms,opacity 350ms}.mud-time-picker-dial-out{opacity:0}.mud-time-picker-hour.mud-time-picker-dial-out{transform:scale(1.2, 1.2);transform-origin:center}.mud-time-picker-minute.mud-time-picker-dial-out{transform:scale(0.8, 0.8);transform-origin:center}.mud-time-picker-dial-hidden{visibility:hidden}.mud-picker-container+.mud-picker-color-toolbar{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-picker-container+.mud-picker-color-content{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-picker-color-toolbar{height:32px;padding-right:2px;padding-left:2px}.mud-picker-color-content{min-height:unset;position:relative}.mud-picker-color-picker{width:312px;height:250px;position:relative;overflow:hidden;touch-action:pinch-zoom}.mud-picker-color-picker .mud-picker-color-overlay{width:100%;height:100%;user-select:none}.mud-picker-color-picker .mud-picker-color-overlay.mud-picker-color-overlay-white{background:linear-gradient(to right, white 0%, rgba(255, 255, 255, 0) 100%)}.mud-picker-color-picker .mud-picker-color-overlay.mud-picker-color-overlay-black{background:linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, black 100%)}.mud-picker-color-picker .mud-picker-color-selector{position:absolute;top:-13px;left:-13px;pointer-events:none}.mud-picker-color-picker .mud-picker-color-grid{display:flex;flex-wrap:wrap}.mud-picker-color-picker .mud-picker-color-grid .mud-picker-color-dot{height:25px;min-width:26px;max-width:26px;border-radius:0px;box-shadow:none}.mud-picker-color-controls{width:312px;padding:16px;display:flex;flex-direction:column}.mud-picker-color-controls .mud-picker-color-controls-row{display:flex;align-items:center}.mud-picker-color-controls .mud-picker-color-controls-row+.mud-picker-color-controls-row{margin-top:24px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders{display:flex;flex:1 0 auto;flex-direction:column}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider{min-width:224px;border-radius:var(--mud-default-borderradius)}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input{height:10px;border-radius:var(--mud-default-borderradius)}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input::-webkit-slider-runnable-track{background:initial}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input::-moz-range-track{background:initial}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input::-webkit-slider-thumb{appearance:none;margin-top:-6px;height:14px;width:14px;transform:none;transition:none;background:#f0f0f0;box-shadow:rgba(0,0,0,.37) 0px 1px 4px 0px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input::-moz-range-thumb{appearance:none;margin-top:-6px;height:14px;width:14px;transform:none;transition:none;background:#f0f0f0;box-shadow:rgba(0,0,0,.37) 0px 1px 4px 0px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--mud-palette-action-default-hover) !important}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider .mud-slider-input:active::-moz-range-thumb{box-shadow:0 0 0 2px var(--mud-palette-action-default-hover) !important}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider.hue+.alpha{margin-top:18px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider.hue .mud-slider-input{background:linear-gradient(90deg, #FF0000, #ff0 16.66%, #0f0 33.33%, #0ff 50%, #00f 66.66%, #f0f 83.33%, #FF0000)}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-sliders .mud-picker-color-slider.alpha .mud-slider-input{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWNgYGCQwoKxgqGgcJA5h3yFAAs8BRWVSwooAAAAAElFTkSuQmCC) repeat}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs{display:flex;flex:1 1 auto}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs .mud-picker-color-inputfield{width:100%;margin-right:8px;margin-inline-end:8px;margin-inline-start:unset}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs .mud-picker-color-inputfield:last-of-type{margin-right:0;margin-inline-end:0;margin-inline-start:unset}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs .mud-picker-color-inputfield .mud-input input{padding:6px;height:1em;text-align:center;font-size:14px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs .mud-picker-color-inputfield .mud-input-helper-text{text-align:center}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-inputs .mud-picker-color-inputfield .mud-input-helper-text div div{margin:auto}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-control-switch{margin-left:8px;margin-inline-start:8px;margin-inline-end:unset;padding-bottom:16px}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-collection{display:flex;min-width:230px;justify-content:space-between}.mud-picker-color-controls .mud-picker-color-controls-row .mud-picker-color-collection .mud-picker-color-dot{max-width:38px}.mud-picker-color-dot{height:38px;min-width:38px;width:100%;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-radius 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:var(--mud-default-borderradius);box-shadow:0 0 6px rgba(127,130,134,.18)}@media(hover: hover)and (pointer: fine){.mud-picker-color-dot:hover{cursor:pointer;box-shadow:0px 3px 1px -2px rgba(0,0,0,.2),0px 2px 2px 0px rgba(0,0,0,.14),0px 1px 5px 0px rgba(0,0,0,.12)}}.mud-picker-color-dot.mud-picker-color-dot-current{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWNgYGCQwoKxgqGgcJA5h3yFAAs8BRWVSwooAAAAAElFTkSuQmCC) repeat}.mud-picker-color-dot .mud-picker-color-fill{width:100%;height:100%;border-radius:inherit}.mud-picker-color-dot+.mud-picker-color-sliders{margin-left:16px;margin-inline-start:16px;margin-inline-end:unset}.mud-picker-color-dot+.mud-picker-color-collection{margin-left:10px;margin-inline-start:10px;margin-inline-end:unset}.mud-picker-color-view{position:absolute;width:100%;height:100%;overflow:auto;padding:6px;background-color:var(--mud-palette-surface)}.mud-picker-color-view .mud-picker-color-view-collection{display:flex;flex-wrap:wrap;justify-content:space-evenly}.mud-picker-color-view .mud-picker-color-view-collection .mud-picker-color-dot{max-width:38px;margin:8px}.mud-picker-color-view .mud-picker-color-view-collection .mud-picker-color-dot.selected{border-radius:50%;box-shadow:0px 3px 1px -2px rgba(0,0,0,.2),0px 2px 2px 0px rgba(0,0,0,.14),0px 1px 5px 0px rgba(0,0,0,.12)}.mud-popover{outline:0;z-index:calc(var(--mud-zindex-popover) + 1);position:absolute;opacity:0;top:-9999px;left:-9999px}.mud-popover.mud-popover-fixed{position:fixed}.mud-popover.mud-popover-relative-width{width:100%}.mud-popover.mud-popover-open{opacity:1;transition:opacity}.mud-popover:not(.mud-popover-open){pointer-events:none;transition-duration:0ms !important;transition-delay:0ms !important}.mud-popover:empty{box-shadow:none !important}.mud-popover .mud-list{max-height:inherit;overflow-y:auto}.mud-popover .mud-popover{z-index:auto}.mud-appbar .mud-popover-cascading-value{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer:not(.mud-drawer-temporary) .mud-popover-cascading-value{z-index:calc(var(--mud-zindex-drawer) + 2)}.mud-drawer.mud-drawer-temporary .mud-popover-cascading-value,.mud-drawer.mud-drawer-responsive .mud-popover-cascading-value{z-index:calc(var(--mud-zindex-appbar) + 4)}.mud-dialog .mud-popover-cascading-value{z-index:calc(var(--mud-zindex-dialog) + 3)}.mud-select .mud-popover-cascading-value{z-index:calc(var(--mud-zindex-select) + 5)}.mud-simple-table table{width:100%;display:table;border-spacing:0;border-collapse:collapse}.mud-simple-table table thead{display:table-header-group}.mud-simple-table table tbody{display:table-row-group}.mud-simple-table table tbody>tr:last-child>td,.mud-simple-table table tbody>tr:last-child>th{border-bottom:none}.mud-simple-table table * tr{color:inherit;display:table-row;outline:0;vertical-align:middle}.mud-simple-table table * tr>td,.mud-simple-table table * tr th{display:table-cell;padding:16px;font-size:.875rem;text-align:start;font-weight:400;line-height:1.43;border-bottom:1px solid var(--mud-palette-table-lines);letter-spacing:.01071em;vertical-align:inherit}.mud-simple-table table * tr>th{font-weight:500;line-height:1.5rem}.mud-simple-table.mud-table-dense * tr td,.mud-simple-table.mud-table-dense * tr th{padding:6px 16px}@media(hover: hover)and (pointer: fine){.mud-simple-table.mud-table-hover .mud-table-container table tbody tr:hover{background-color:var(--mud-palette-table-hover)}}.mud-simple-table.mud-table-bordered .mud-table-container table tbody tr td{border-right:1px solid var(--mud-palette-table-lines)}.mud-simple-table.mud-table-bordered .mud-table-container table tbody tr td:last-child{border-right:none}.mud-simple-table.mud-table-striped .mud-table-container table tbody tr:nth-of-type(odd){background-color:var(--mud-palette-table-striped)}@media(hover: hover)and (pointer: fine){.mud-table-hover.mud-table-striped .mud-table-container table tbody tr:nth-of-type(odd):nth-of-type(odd):hover{background-color:var(--mud-palette-table-hover)}}.mud-simple-table.mud-table-sticky-header .mud-table-container{overflow-x:auto;max-height:100%}.mud-simple-table.mud-table-sticky-header * table{border-collapse:separate}.mud-simple-table.mud-table-sticky-header * table thead * th:first-child{border-radius:var(--mud-default-borderradius) 0 0 0}.mud-simple-table.mud-table-sticky-header * table thead * th:last-child{border-radius:0 var(--mud-default-borderradius) 0 0}.mud-simple-table.mud-table-sticky-header * table thead * th{background-color:var(--mud-palette-surface);position:sticky;z-index:1;top:0}.mud-simple-table.mud-table-sticky-footer .mud-table-container{overflow-x:auto;max-height:100%}.mud-simple-table.mud-table-sticky-footer * table{border-collapse:separate}.mud-simple-table.mud-table-sticky-footer * table tfoot * td{background-color:var(--mud-palette-surface);position:sticky;z-index:1;bottom:0}.mud-skeleton{height:1.2em;display:block;background-color:var(--mud-palette-skeleton)}.mud-skeleton-text{height:auto;transform:scale(1, 0.6);margin-top:0;border-radius:var(--mud-default-borderradius);margin-bottom:0;transform-origin:0 60%}.mud-skeleton-text:empty:before{content:" "}.mud-skeleton-circle{border-radius:50%}.mud-skeleton-pulse{animation:mud-skeleton-keyframes-pulse 1.5s ease-in-out .5s infinite}.mud-skeleton-wave{overflow:hidden;position:relative}.mud-skeleton-wave::after{top:0;left:0;right:0;bottom:0;content:"";position:absolute;animation:mud-skeleton-keyframes-wave 1.6s linear .5s infinite;transform:translateX(-100%);background:linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.04), transparent)}.mud-slider{color:var(--mud-palette-text-primary);display:inline-block;width:100%;user-select:none;touch-action:pinch-zoom}.mud-slider>.mud-typography{margin-top:10px}.mud-slider.mud-slider-vertical{transform:rotate(270deg);height:100%;width:unset}.mud-slider .mud-slider-input{-webkit-appearance:none;-moz-appearance:none;position:relative;display:block;width:100%;background-color:rgba(0,0,0,0);cursor:pointer}.mud-slider .mud-slider-input:focus{outline:none}.mud-slider .mud-slider-input:active+.mud-slider-value-label{opacity:1}.mud-slider .mud-slider-input::-webkit-slider-runnable-track{border-radius:var(--mud-default-borderradius);width:100%}.mud-slider .mud-slider-input::-moz-range-track{border-radius:var(--mud-default-borderradius);width:100%}.mud-slider .mud-slider-input::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;border:none;border-radius:50%;cursor:pointer;transition:box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-slider .mud-slider-input::-moz-range-thumb{appearance:none;-webkit-appearance:none;border:none;border-radius:50%;cursor:pointer;transition:box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-slider .mud-slider-input:disabled{cursor:default;opacity:.38}.mud-slider .mud-slider-input:disabled::-webkit-slider-runnable-track{background-color:var(--mud-palette-text-disabled)}.mud-slider .mud-slider-input:disabled::-moz-range-track{background-color:var(--mud-palette-text-disabled)}.mud-slider .mud-slider-input:disabled::-webkit-slider-thumb{background-color:#000;color:#fff;box-shadow:0 0 0 1px #fff !important;transform:scale(4, 4)}@media(hover: hover)and (pointer: fine){.mud-slider .mud-slider-input:disabled::-webkit-slider-thumb:hover{box-shadow:0 0 0 1px #fff !important}}.mud-slider .mud-slider-input:disabled::-moz-range-thumb{background-color:#000;color:#fff;box-shadow:0 0 0 1px #fff !important;transform:scale(4, 4)}@media(hover: hover)and (pointer: fine){.mud-slider .mud-slider-input:disabled::-moz-range-thumb:hover{box-shadow:0 0 0 1px #fff !important}}.mud-slider.mud-slider-primary .mud-slider-filled{background-color:var(--mud-palette-primary)}.mud-slider.mud-slider-primary .mud-slider-track-tick{background-color:var(--mud-palette-primary)}.mud-slider.mud-slider-primary .mud-slider-value-label{color:var(--mud-palette-primary-text);background-color:var(--mud-palette-primary)}.mud-slider.mud-slider-primary .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-primary-rgb), 0.3)}.mud-slider.mud-slider-primary .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-primary-rgb), 0.3)}.mud-slider.mud-slider-primary .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-primary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3)}.mud-slider.mud-slider-primary .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-primary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-primary .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-primary-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-primary .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-primary-rgb), 0.24)}}.mud-slider.mud-slider-primary .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-primary .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-primary-rgb), 0.24)}.mud-slider.mud-slider-primary .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-primary .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-primary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-primary-rgb), 0.24)}.mud-slider.mud-slider-secondary .mud-slider-filled{background-color:var(--mud-palette-secondary)}.mud-slider.mud-slider-secondary .mud-slider-track-tick{background-color:var(--mud-palette-secondary)}.mud-slider.mud-slider-secondary .mud-slider-value-label{color:var(--mud-palette-secondary-text);background-color:var(--mud-palette-secondary)}.mud-slider.mud-slider-secondary .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-secondary-rgb), 0.3)}.mud-slider.mud-slider-secondary .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-secondary-rgb), 0.3)}.mud-slider.mud-slider-secondary .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-secondary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3)}.mud-slider.mud-slider-secondary .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-secondary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-secondary .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-secondary-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-secondary .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-secondary-rgb), 0.24)}}.mud-slider.mud-slider-secondary .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-secondary .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-secondary-rgb), 0.24)}.mud-slider.mud-slider-secondary .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-secondary .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-secondary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-secondary-rgb), 0.24)}.mud-slider.mud-slider-tertiary .mud-slider-filled{background-color:var(--mud-palette-tertiary)}.mud-slider.mud-slider-tertiary .mud-slider-track-tick{background-color:var(--mud-palette-tertiary)}.mud-slider.mud-slider-tertiary .mud-slider-value-label{color:var(--mud-palette-tertiary-text);background-color:var(--mud-palette-tertiary)}.mud-slider.mud-slider-tertiary .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-tertiary-rgb), 0.3)}.mud-slider.mud-slider-tertiary .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-tertiary-rgb), 0.3)}.mud-slider.mud-slider-tertiary .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-tertiary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3)}.mud-slider.mud-slider-tertiary .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-tertiary);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-tertiary .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-tertiary-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-tertiary .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-tertiary-rgb), 0.24)}}.mud-slider.mud-slider-tertiary .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-tertiary .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-tertiary-rgb), 0.24)}.mud-slider.mud-slider-tertiary .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-tertiary .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-tertiary-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-tertiary-rgb), 0.24)}.mud-slider.mud-slider-info .mud-slider-filled{background-color:var(--mud-palette-info)}.mud-slider.mud-slider-info .mud-slider-track-tick{background-color:var(--mud-palette-info)}.mud-slider.mud-slider-info .mud-slider-value-label{color:var(--mud-palette-info-text);background-color:var(--mud-palette-info)}.mud-slider.mud-slider-info .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-info-rgb), 0.3)}.mud-slider.mud-slider-info .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-info-rgb), 0.3)}.mud-slider.mud-slider-info .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-info);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3)}.mud-slider.mud-slider-info .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-info);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-info .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-info-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-info .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-info-rgb), 0.24)}}.mud-slider.mud-slider-info .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-info .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-info-rgb), 0.24)}.mud-slider.mud-slider-info .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-info .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-info-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-info-rgb), 0.24)}.mud-slider.mud-slider-success .mud-slider-filled{background-color:var(--mud-palette-success)}.mud-slider.mud-slider-success .mud-slider-track-tick{background-color:var(--mud-palette-success)}.mud-slider.mud-slider-success .mud-slider-value-label{color:var(--mud-palette-success-text);background-color:var(--mud-palette-success)}.mud-slider.mud-slider-success .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-success-rgb), 0.3)}.mud-slider.mud-slider-success .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-success-rgb), 0.3)}.mud-slider.mud-slider-success .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-success);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3)}.mud-slider.mud-slider-success .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-success);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-success .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-success-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-success .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-success-rgb), 0.24)}}.mud-slider.mud-slider-success .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-success .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-success-rgb), 0.24)}.mud-slider.mud-slider-success .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-success .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-success-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-success-rgb), 0.24)}.mud-slider.mud-slider-warning .mud-slider-filled{background-color:var(--mud-palette-warning)}.mud-slider.mud-slider-warning .mud-slider-track-tick{background-color:var(--mud-palette-warning)}.mud-slider.mud-slider-warning .mud-slider-value-label{color:var(--mud-palette-warning-text);background-color:var(--mud-palette-warning)}.mud-slider.mud-slider-warning .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-warning-rgb), 0.3)}.mud-slider.mud-slider-warning .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-warning-rgb), 0.3)}.mud-slider.mud-slider-warning .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-warning);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3)}.mud-slider.mud-slider-warning .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-warning);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-warning .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-warning-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-warning .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-warning-rgb), 0.24)}}.mud-slider.mud-slider-warning .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-warning .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-warning-rgb), 0.24)}.mud-slider.mud-slider-warning .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-warning .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-warning-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-warning-rgb), 0.24)}.mud-slider.mud-slider-error .mud-slider-filled{background-color:var(--mud-palette-error)}.mud-slider.mud-slider-error .mud-slider-track-tick{background-color:var(--mud-palette-error)}.mud-slider.mud-slider-error .mud-slider-value-label{color:var(--mud-palette-error-text);background-color:var(--mud-palette-error)}.mud-slider.mud-slider-error .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-error-rgb), 0.3)}.mud-slider.mud-slider-error .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-error-rgb), 0.3)}.mud-slider.mud-slider-error .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-error);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3)}.mud-slider.mud-slider-error .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-error);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-error .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-error-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-error .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-error-rgb), 0.24)}}.mud-slider.mud-slider-error .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-error .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-error-rgb), 0.24)}.mud-slider.mud-slider-error .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-error .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-error-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-error-rgb), 0.24)}.mud-slider.mud-slider-dark .mud-slider-filled{background-color:var(--mud-palette-dark)}.mud-slider.mud-slider-dark .mud-slider-track-tick{background-color:var(--mud-palette-dark)}.mud-slider.mud-slider-dark .mud-slider-value-label{color:var(--mud-palette-dark-text);background-color:var(--mud-palette-dark)}.mud-slider.mud-slider-dark .mud-slider-input::-webkit-slider-runnable-track{background-color:rgba(var(--mud-palette-dark-rgb), 0.3)}.mud-slider.mud-slider-dark .mud-slider-input::-moz-range-track{background-color:rgba(var(--mud-palette-dark-rgb), 0.3)}.mud-slider.mud-slider-dark .mud-slider-input::-webkit-slider-thumb{background-color:var(--mud-palette-dark);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3)}.mud-slider.mud-slider-dark .mud-slider-input::-moz-range-thumb{background-color:var(--mud-palette-dark);box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3)}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-dark .mud-slider-input::-webkit-slider-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-dark-rgb), 0.24)}}@media(hover: hover)and (pointer: fine){.mud-slider.mud-slider-dark .mud-slider-input::-moz-range-thumb:hover{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3),0 0 0 1px rgba(var(--mud-palette-dark-rgb), 0.24)}}.mud-slider.mud-slider-dark .mud-slider-input:focus-visible::-webkit-slider-thumb,.mud-slider.mud-slider-dark .mud-slider-input:active::-webkit-slider-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-dark-rgb), 0.24)}.mud-slider.mud-slider-dark .mud-slider-input:focus-visible::-moz-range-thumb,.mud-slider.mud-slider-dark .mud-slider-input:active::-moz-range-thumb{box-shadow:0px 1px 2px -1px rgba(var(--mud-palette-dark-rgb), 0.3),0 0 0 2px rgba(var(--mud-palette-dark-rgb), 0.24)}.mud-slider.mud-slider-small .mud-slider-filled{height:2px}.mud-slider.mud-slider-small .mud-slider-track-tick{width:2px;height:2px}.mud-slider.mud-slider-small .mud-slider-track-tick-label{transform:translateX(-50%) translateY(50%)}.mud-slider.mud-slider-small .mud-slider-input::-webkit-slider-runnable-track{height:2px;margin:10px 0}.mud-slider.mud-slider-small .mud-slider-input::-moz-range-track{height:2px;margin:10px 0}.mud-slider.mud-slider-small .mud-slider-input::-webkit-slider-thumb{height:2px;width:2px;transform:scale(6, 6)}.mud-slider.mud-slider-small .mud-slider-input::-moz-range-thumb{height:2px;width:2px;transform:scale(6, 6)}.mud-slider.mud-slider-medium .mud-slider-filled{height:4px}.mud-slider.mud-slider-medium .mud-slider-track-tick{width:4px;height:4px}.mud-slider.mud-slider-medium .mud-slider-track-tick-label{transform:translateX(-50%) translateY(80%)}.mud-slider.mud-slider-medium .mud-slider-input::-webkit-slider-runnable-track{height:4px;margin:12px 0}.mud-slider.mud-slider-medium .mud-slider-input::-moz-range-track{height:4px;margin:12px 0}.mud-slider.mud-slider-medium .mud-slider-input::-webkit-slider-thumb{height:4px;width:4px;transform:scale(5, 5)}.mud-slider.mud-slider-medium .mud-slider-input::-moz-range-thumb{height:4px;width:4px;transform:scale(5, 5)}.mud-slider.mud-slider-large .mud-slider-filled{height:6px}.mud-slider.mud-slider-large .mud-slider-track-tick{width:6px;height:6px}.mud-slider.mud-slider-large .mud-slider-track-tick-label{transform:translateX(-50%) translateY(110%)}.mud-slider.mud-slider-large .mud-slider-input::-webkit-slider-runnable-track{height:6px;margin:14px 0}.mud-slider.mud-slider-large .mud-slider-input::-moz-range-track{height:6px;margin:14px 0}.mud-slider.mud-slider-large .mud-slider-input::-webkit-slider-thumb{height:6px;width:6px;transform:scale(4, 4)}.mud-slider.mud-slider-large .mud-slider-input::-moz-range-thumb{height:6px;width:6px;transform:scale(4, 4)}.mud-slider .mud-slider-container{position:relative;width:100%;display:flex;align-content:center}.mud-slider .mud-slider-filled{border-radius:var(--mud-default-borderradius)}.mud-slider .mud-slider-inner-container{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center}.mud-slider .mud-slider-value-label{position:absolute;top:0;transform:translateX(-50%) translateY(-125%);padding:4px 8px;text-align:center;align-items:center;justify-content:center;font-size:12px;border-radius:2px;line-height:normal;opacity:0;transition:opacity .2s ease-in-out;pointer-events:none;user-select:none}.mud-slider .mud-slider-tickmarks{display:flex;justify-content:space-between;flex-grow:1}.mud-slider .mud-slider-track-tick{border-radius:9999%;background-color:var(--mud-palette-primary)}.mud-slider .mud-slider-track-tick-label{position:absolute;top:0;left:50%}.mud-progress-circular{display:inline-block;position:relative;color:var(--mud-palette-text-secondary)}.mud-progress-circular.mud-progress-indeterminate{animation:mud-progress-circular-keyframes-circular-rotate 1.4s linear infinite}.mud-progress-circular.mud-progress-static{transition:transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-progress-circular.mud-progress-small{height:24px;width:24px}.mud-progress-circular.mud-progress-medium{height:40px;width:40px}.mud-progress-circular.mud-progress-large{height:56px;width:56px}.mud-progress-circular-svg{display:block;transform:rotate(-90deg)}.mud-progress-circular-indeterminate-child{animation:mud-progress-circular-keyframes-circular-rotate 1.4s linear reverse infinite}.mud-progress-circular-percentage{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center}.mud-progress-circular-circle{stroke:currentColor}.mud-progress-circular-circle.mud-progress-indeterminate{animation:mud-progress-circular-keyframes-circular-dash 1.4s ease-in-out infinite;stroke-dasharray:80px,200px;stroke-dashoffset:0px}.mud-progress-circular-circle.mud-progress-static{transition:stroke-dashoffset 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-progress-circular-circle.mud-progress-circular-circle-rounded{stroke-linecap:round}.mud-progress-circular-disable-shrink{animation:none}.mud-progress-linear{position:relative}.mud-progress-linear::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.2}.mud-progress-linear.horizontal{width:100%}.mud-progress-linear.horizontal.mud-progress-linear-small{height:4px}.mud-progress-linear.horizontal.mud-progress-linear-medium{height:8px}.mud-progress-linear.horizontal.mud-progress-linear-large{height:12px}.mud-progress-linear.horizontal .mud-progress-linear-dashed{animation:mud-progress-linear-horizontal-keyframes-buffer 3s infinite linear}.mud-progress-linear.vertical{height:100%}.mud-progress-linear.vertical.mud-progress-linear-small{width:4px}.mud-progress-linear.vertical.mud-progress-linear-medium{width:8px}.mud-progress-linear.vertical.mud-progress-linear-large{width:12px}.mud-progress-linear .mud-progress-linear-content{position:absolute;height:100%;width:100%;display:flex;justify-content:center;align-items:center}.mud-progress-linear .mud-progress-linear-bars{position:absolute;height:100%;width:100%;overflow:hidden}.mud-progress-linear .mud-progress-linear-bar{top:0;left:0;width:100%;bottom:0;position:absolute;transition:transform .2s linear;transform-origin:left}.mud-progress-linear .mud-progress-linear-bar.mud-progress-linear-1-indeterminate.horizontal{width:auto;animation:mud-progress-linear-horizontal-keyframes-indeterminate1 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.mud-progress-linear .mud-progress-linear-bar.mud-progress-linear-1-indeterminate.vertical{height:auto;animation:mud-progress-linear-vertical-keyframes-indeterminate1 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.mud-progress-linear .mud-progress-linear-bar.mud-progress-linear-2-indeterminate.horizontal{width:auto;animation:mud-progress-linear-horizontal-keyframes-indeterminate2 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite}.mud-progress-linear .mud-progress-linear-bar.mud-progress-linear-2-indeterminate.vertical{height:auto;animation:mud-progress-linear-vertical-keyframes-indeterminate2 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite}.mud-progress-linear.mud-progress-linear-color-default:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-action-disabled)}.mud-progress-linear.mud-progress-linear-color-default:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-action-default)}.mud-progress-linear.mud-progress-linear-color-default.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-action-disabled) 0%, var(--mud-palette-action-disabled) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-default.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-action-default)}.mud-progress-linear.mud-progress-linear-color-default.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-default.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-action-disabled)}.mud-progress-linear.mud-progress-linear-color-primary:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-primary)}.mud-progress-linear.mud-progress-linear-color-primary:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-primary)}.mud-progress-linear.mud-progress-linear-color-primary.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-primary) 0%, var(--mud-palette-primary) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-primary.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-primary)}.mud-progress-linear.mud-progress-linear-color-primary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-primary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-primary)}.mud-progress-linear.mud-progress-linear-color-secondary:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-secondary)}.mud-progress-linear.mud-progress-linear-color-secondary:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-secondary)}.mud-progress-linear.mud-progress-linear-color-secondary.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-secondary) 0%, var(--mud-palette-secondary) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-secondary.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-secondary)}.mud-progress-linear.mud-progress-linear-color-secondary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-secondary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-secondary)}.mud-progress-linear.mud-progress-linear-color-tertiary:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-tertiary)}.mud-progress-linear.mud-progress-linear-color-tertiary:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-tertiary)}.mud-progress-linear.mud-progress-linear-color-tertiary.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-tertiary) 0%, var(--mud-palette-tertiary) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-tertiary.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-tertiary)}.mud-progress-linear.mud-progress-linear-color-tertiary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-tertiary.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-tertiary)}.mud-progress-linear.mud-progress-linear-color-info:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-info)}.mud-progress-linear.mud-progress-linear-color-info:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-info)}.mud-progress-linear.mud-progress-linear-color-info.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-info) 0%, var(--mud-palette-info) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-info.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-info)}.mud-progress-linear.mud-progress-linear-color-info.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-info.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-info)}.mud-progress-linear.mud-progress-linear-color-success:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-success)}.mud-progress-linear.mud-progress-linear-color-success:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-success)}.mud-progress-linear.mud-progress-linear-color-success.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-success) 0%, var(--mud-palette-success) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-success.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-success)}.mud-progress-linear.mud-progress-linear-color-success.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-success.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-success)}.mud-progress-linear.mud-progress-linear-color-warning:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-warning)}.mud-progress-linear.mud-progress-linear-color-warning:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-warning)}.mud-progress-linear.mud-progress-linear-color-warning.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-warning) 0%, var(--mud-palette-warning) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-warning.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-warning)}.mud-progress-linear.mud-progress-linear-color-warning.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-warning.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-warning)}.mud-progress-linear.mud-progress-linear-color-error:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-error)}.mud-progress-linear.mud-progress-linear-color-error:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-error)}.mud-progress-linear.mud-progress-linear-color-error.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-error) 0%, var(--mud-palette-error) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-error.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-error)}.mud-progress-linear.mud-progress-linear-color-error.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-error.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-error)}.mud-progress-linear.mud-progress-linear-color-dark:not(.mud-progress-linear-buffer)::before{background-color:var(--mud-palette-dark)}.mud-progress-linear.mud-progress-linear-color-dark:not(.mud-progress-linear-buffer) .mud-progress-linear-bar{background-color:var(--mud-palette-dark)}.mud-progress-linear.mud-progress-linear-color-dark.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{background-size:10px 10px;background-image:radial-gradient(var(--mud-palette-dark) 0%, var(--mud-palette-dark) 16%, transparent 42%);background-position:0 50%}.mud-progress-linear.mud-progress-linear-color-dark.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){background-color:var(--mud-palette-dark)}.mud-progress-linear.mud-progress-linear-color-dark.mud-progress-linear-buffer .mud-progress-linear-bar:last-child{transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-color-dark.mud-progress-linear-buffer .mud-progress-linear-bar:last-child::before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;display:block;opacity:.4;background-color:var(--mud-palette-dark)}.mud-progress-linear.mud-progress-indeterminate.horizontal .mud-progress-linear-bar:first-child{width:auto;animation:mud-progress-linear-horizontal-keyframes-indeterminate1 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.mud-progress-linear.mud-progress-indeterminate.horizontal .mud-progress-linear-bar:last-child{width:auto;animation:mud-progress-linear-horizontal-keyframes-indeterminate2 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite}.mud-progress-linear.mud-progress-indeterminate.vertical .mud-progress-linear-bar:first-child{height:auto;animation:mud-progress-linear-vertical-keyframes-indeterminate1 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.mud-progress-linear.mud-progress-indeterminate.vertical .mud-progress-linear-bar:last-child{height:auto;animation:mud-progress-linear-vertical-keyframes-indeterminate2 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite}.mud-progress-linear.mud-progress-linear-buffer .mud-progress-linear-bar:first-child{width:100%;height:100%;position:absolute;margin-top:0}.mud-progress-linear.mud-progress-linear-buffer .mud-progress-linear-bar:nth-child(2){z-index:1;transition:transform .4s linear}.mud-progress-linear.mud-progress-linear-buffer.horizontal .mud-progress-linear-bar:first-child{animation:mud-progress-linear-horizontal-keyframes-buffer 3s infinite linear}.mud-progress-linear.mud-progress-linear-buffer.vertical .mud-progress-linear-bar:first-child{animation:mud-progress-linear-vertical-keyframes-buffer 3s infinite linear}.mud-progress-linear.mud-progress-linear-striped .mud-progress-linear-bar{background-image:linear-gradient(135deg, hsla(0, 0%, 100%, 0.25) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, 0.25) 0, hsla(0, 0%, 100%, 0.25) 75%, transparent 0, transparent);background-size:40px 40px;background-repeat:repeat;animation:mud-progress-linear-striped-loading 10s linear infinite}.mud-progress-linear.mud-progress-linear-rounded{border-radius:var(--mud-default-borderradius)}.mud-progress-linear.mud-progress-linear-rounded .mud-progress-linear-bars{border-radius:var(--mud-default-borderradius)}.mud-progress-linear.mud-progress-linear-rounded .mud-progress-linear-bar{border-radius:var(--mud-default-borderradius)}.mud-progress-linear.mud-progress-linear-rounded::before{border-radius:var(--mud-default-borderradius)}.mud-radio{cursor:pointer;display:inline-flex;align-items:center;vertical-align:middle;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mud-radio>.mud-radio-content{color:var(--mud-palette-text-primary)}@media(hover: hover)and (pointer: fine){.mud-radio .mud-disabled:hover{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-radio .mud-disabled:hover>.mud-radio-content{color:var(--mud-palette-text-disabled)}.mud-radio .mud-disabled:hover *{cursor:default;color:var(--mud-palette-text-disabled)}}.mud-radio.mud-disabled,.mud-radio .mud-disabled:focus-visible,.mud-radio .mud-disabled:active{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-radio.mud-disabled>.mud-radio-content,.mud-radio .mud-disabled:focus-visible>.mud-radio-content,.mud-radio .mud-disabled:active>.mud-radio-content{color:var(--mud-palette-text-disabled)}.mud-radio.mud-disabled *,.mud-radio .mud-disabled:focus-visible *,.mud-radio .mud-disabled:active *{cursor:default;color:var(--mud-palette-text-disabled)}.mud-radio.mud-readonly,.mud-radio .mud-readonly:hover{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-radio .mud-radio-dense{padding:4px}.mud-radio.mud-checked{color:var(--mud-palette-action-default)}@media(hover: hover)and (pointer: fine){.mud-radio.mud-checked:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-radio-input{top:0;left:0;width:100%;cursor:inherit;height:100%;margin:0;opacity:0;padding:0;z-index:1;position:absolute}.mud-radio-icons{display:flex;position:relative}.mud-radio-icons.mud-checked .mud-radio-icon-checked{transform:scale(1);transition:transform 150ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-radio-icon-checked{left:0;position:absolute;transform:scale(0);transition:transform 150ms cubic-bezier(0.4, 0, 1, 1) 0ms}.mud-rating-root{display:inline-flex;color:#ffb400}.mud-rating-root:focus-visible,.mud-rating-root:active{outline:none}.mud-rating-root:focus-visible:not(.mud-disabled),.mud-rating-root:active:not(.mud-disabled){background-color:var(--mud-palette-action-default-hover)}.mud-rating-item{cursor:pointer;transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-rating-item.mud-rating-item-active{transform:scale(1.2)}.mud-rating-item.mud-disabled{cursor:default;pointer-events:none}.mud-rating-item.mud-disabled *{cursor:default;color:var(--mud-palette-text-disabled)}@media(hover: hover)and (pointer: fine){.mud-rating-item .mud-disabled:hover{cursor:default;pointer-events:none}.mud-rating-item .mud-disabled:hover *{cursor:default;color:var(--mud-palette-text-disabled)}}.mud-rating-item.mud-readonly{cursor:default}.mud-rating-item .mud-rating-input{clip:rect(0, 0, 0, 0);margin:0;opacity:0;padding:0;z-index:1;position:absolute;cursor:inherit;overflow:hidden}.mud-rating-item svg{pointer-events:none}.mud-rating-item svg path{pointer-events:none}.mud-snackbar{display:flex;flex-grow:initial;padding:6px 16px;align-items:center;position:relative;pointer-events:auto;font-weight:400;line-height:1.43;overflow:hidden;margin-top:16px;min-width:288px;max-width:500px;border-radius:var(--mud-default-borderradius);box-shadow:0px 3px 5px -1px rgba(0,0,0,.2),0px 6px 10px 0px rgba(0,0,0,.14),0px 1px 18px 0px rgba(0,0,0,.12);touch-action:pinch-zoom}.mud-snackbar.force-cursor{cursor:pointer}.mud-snackbar.mud-snackbar-blurred{backdrop-filter:blur(18px)}.mud-snackbar.mud-snackbar-surface{background:var(--mud-palette-surface)}.mud-snackbar .mud-snackbar-content-message{padding:8px 0;overflow-wrap:anywhere}.mud-snackbar .mud-snackbar-content-action{display:flex;align-items:center;margin-left:auto;margin-right:-8px;padding-left:16px;margin-inline-start:auto;margin-inline-end:-8px;padding-inline-start:16px;padding-inline-end:unset}.mud-snackbar .mud-snackbar-content-action>button{color:inherit}.mud-snackbar-location-top-left{top:24px;left:24px}.mud-snackbar-location-top-center{top:24px;left:50%;transform:translateX(-50%)}.mud-snackbar-location-top-right{top:24px;right:24px}.mud-snackbar-location-bottom-right{right:24px;bottom:24px}.mud-snackbar-location-bottom-center{bottom:24px;left:50%;transform:translateX(-50%)}.mud-snackbar-location-bottom-left{bottom:24px;left:24px}#mud-snackbar-container{position:fixed;z-index:var(--mud-zindex-snackbar);pointer-events:none}.mud-snackbar-icon{display:flex;opacity:.9;padding:7px 0;font-size:22px;margin-right:12px;margin-inline-end:12px;margin-inline-start:unset}.mud-switch{cursor:pointer;display:inline-flex;align-items:center;vertical-align:middle;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mud-switch.mud-disabled{color:var(--mud-palette-text-disabled) !important;cursor:default}.mud-switch.mud-readonly{cursor:default;background-color:rgba(0,0,0,0) !important}@media(hover: hover)and (pointer: fine){.mud-switch .mud-readonly:hover{cursor:default;background-color:rgba(0,0,0,0) !important}}.mud-switch-span{width:58px;height:38px;display:inline-flex;padding:12px;z-index:0;overflow:hidden;position:relative;box-sizing:border-box;flex-shrink:0;vertical-align:middle}.mud-switch-span .mud-switch-track{width:100%;height:100%;opacity:.48;z-index:-1;transition:opacity 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:9px;background-color:var(--mud-palette-action-default)}.mud-switch-base{padding:9px;top:0;left:0;color:#fafafa;z-index:1;position:absolute;transition:left 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-switch-base.mud-checked{transform:translateX(20px)}.mud-switch-base.mud-checked+.mud-switch-track{opacity:.5}@media(hover: hover)and (pointer: fine){.mud-switch-base:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-switch-base.mud-switch-disabled{color:var(--mud-palette-gray-default) !important}.mud-switch-base.mud-switch-disabled+.mud-switch-track{opacity:.12 !important}@media(hover: hover)and (pointer: fine){.mud-switch-base.mud-switch-disabled:hover{cursor:default;background-color:rgba(0,0,0,0) !important}}.mud-switch-base.mud-switch-disabled:focus-visible,.mud-switch-base.mud-switch-disabled:active{cursor:default;background-color:rgba(0,0,0,0) !important}.mud-switch-button{display:flex;align-items:inherit;justify-content:inherit}.mud-switch-button .mud-switch-input{top:0;left:0;width:100%;cursor:inherit;height:100%;margin:0;opacity:0;padding:0;z-index:1;position:absolute}.mud-switch-button .mud-switch-thumb-small{width:14px;height:14px;box-shadow:0px 2px 1px -1px rgba(0,0,0,.2),0px 1px 1px 0px rgba(0,0,0,.14),0px 1px 3px 0px rgba(0,0,0,.12);border-radius:50%;background-color:currentColor}.mud-switch-button .mud-switch-thumb-medium{width:20px;height:20px;box-shadow:0px 2px 1px -1px rgba(0,0,0,.2),0px 1px 1px 0px rgba(0,0,0,.14),0px 1px 3px 0px rgba(0,0,0,.12);border-radius:50%;background-color:currentColor}.mud-switch-button .mud-switch-thumb-large{width:26px;height:26px;box-shadow:0px 2px 1px -1px rgba(0,0,0,.2),0px 1px 1px 0px rgba(0,0,0,.14),0px 1px 3px 0px rgba(0,0,0,.12);border-radius:50%;background-color:currentColor}.mud-switch-base-small.mud-switch-base{padding:5px}.mud-switch-base-medium.mud-switch-base{padding:9px}.mud-switch-base-large.mud-switch-base{padding:13px}.mud-switch-span-small.mud-switch-span{padding:7px;width:44px;height:24px}.mud-switch-span-medium.mud-switch-span{padding:12px;width:58px;height:38px}.mud-switch-span-large.mud-switch-span{padding:17px;width:72px;height:52px}.mud-switch-label-small{font-size:.8125rem !important}.mud-switch-label-medium{font-size:1rem !important}.mud-switch-label-large{font-size:1.1875rem !important}.mud-timeline{position:relative;display:flex}.mud-timeline-item{display:flex}.mud-timeline-item .mud-timeline-item-content{position:relative;height:100%;flex:1 1 auto}.mud-timeline-item .mud-timeline-item-divider{position:relative;display:flex;align-items:center;justify-content:center}.mud-timeline-item .mud-timeline-item-opposite{align-self:center}.mud-timeline-vertical{padding-top:24px;flex-direction:column}.mud-timeline-vertical .mud-timeline-item{padding-bottom:24px}.mud-timeline-vertical .mud-timeline-item .mud-timeline-item-content{max-width:calc(50% - 48px)}.mud-timeline-vertical .mud-timeline-item .mud-timeline-item-divider{min-width:96px}.mud-timeline-vertical .mud-timeline-item .mud-timeline-item-opposite{flex:1 1 auto;max-width:calc(50% - 48px)}.mud-timeline-vertical::before{top:0;bottom:0;content:"";height:100%;position:absolute;width:2px;background:var(--mud-palette-divider)}.mud-timeline-vertical.mud-timeline-align-start .mud-timeline-item-divider{align-items:flex-start}.mud-timeline-vertical.mud-timeline-align-start .mud-timeline-item-opposite{align-self:flex-start}.mud-timeline-vertical.mud-timeline-align-end .mud-timeline-item-divider{align-items:flex-end}.mud-timeline-vertical.mud-timeline-align-end .mud-timeline-item-opposite{align-self:flex-end}.mud-timeline-vertical.mud-timeline-position-alternate::before{left:auto;right:calc(50% - 1px)}.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start),.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end{flex-direction:row-reverse}.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-opposite,.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-opposite{text-align:end}.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end){flex-direction:row}.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-opposite{text-align:start}.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end),.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-start{flex-direction:row}.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-opposite,.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-opposite{text-align:start}.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start){flex-direction:row-reverse}.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-opposite{text-align:end}.mud-timeline-vertical.mud-timeline-position-start::before{right:auto;left:47px}.mud-timeline-vertical.mud-timeline-position-start.mud-timeline-rtl::before{right:47px;left:auto}.mud-timeline-vertical.mud-timeline-position-start .mud-timeline-item{flex-direction:row-reverse}.mud-timeline-vertical.mud-timeline-position-end::before{right:47px;left:auto}.mud-timeline-vertical.mud-timeline-position-end.mud-timeline-rtl::before{left:47px;right:auto}.mud-timeline-vertical.mud-timeline-position-end .mud-timeline-item{flex-direction:row}.mud-timeline-vertical.mud-timeline-position-start .mud-timeline-item-content,.mud-timeline-vertical.mud-timeline-position-end .mud-timeline-item-content{max-width:calc(100% - 96px)}.mud-timeline-vertical.mud-timeline-position-start .mud-timeline-item-opposite,.mud-timeline-vertical.mud-timeline-position-end .mud-timeline-item-opposite{display:none}.mud-timeline-horizontal{flex-direction:row}.mud-timeline-horizontal .mud-timeline-item{padding:0 24px;width:100%;min-width:0}.mud-timeline-horizontal .mud-timeline-item .mud-timeline-item-content{max-height:calc(50% - 48px)}.mud-timeline-horizontal .mud-timeline-item .mud-timeline-item-divider{min-height:96px}.mud-timeline-horizontal::before{top:0;bottom:0;content:"";height:2px;position:absolute;width:100%;background:var(--mud-palette-divider)}.mud-timeline-horizontal.mud-timeline-align-start .mud-timeline-item-divider{justify-content:flex-start}.mud-timeline-horizontal.mud-timeline-align-start .mud-timeline-item-opposite{align-self:flex-start}.mud-timeline-horizontal.mud-timeline-align-end .mud-timeline-item-divider{justify-content:flex-end}.mud-timeline-horizontal.mud-timeline-align-end .mud-timeline-item-opposite{align-self:flex-end}.mud-timeline-horizontal.mud-timeline-position-alternate::before{top:auto;bottom:calc(50% - 1px)}.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd),.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end{flex-direction:column-reverse}.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n),.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-start{flex-direction:column}.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd),.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-end{flex-direction:column}.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n),.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-start{flex-direction:column-reverse}.mud-timeline-horizontal.mud-timeline-position-top::before{top:47px;bottom:auto}.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item{flex-direction:column-reverse}.mud-timeline-horizontal.mud-timeline-position-bottom::before{top:auto;bottom:47px}.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item{flex-direction:column}.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item-content,.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item-content{max-height:calc(100% - 96px)}.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item-opposite,.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item-opposite{display:none}.mud-timeline-item-dot{display:flex;justify-content:center;align-items:center;background:var(--mud-palette-surface);border-radius:50%;left:calc(50% - 19px)}.mud-timeline-item-dot.mud-timeline-dot-size-small{width:24px;height:24px}.mud-timeline-item-dot.mud-timeline-dot-size-small .mud-timeline-item-dot-inner{height:18px;width:18px}.mud-timeline-item-dot.mud-timeline-dot-size-medium{width:38px;height:38px}.mud-timeline-item-dot.mud-timeline-dot-size-medium .mud-timeline-item-dot-inner{height:30px;width:30px}.mud-timeline-item-dot.mud-timeline-dot-size-large{width:52px;height:52px}.mud-timeline-item-dot.mud-timeline-dot-size-large .mud-timeline-item-dot-inner{height:42px;width:42px}.mud-timeline-item-dot .mud-timeline-item-dot-inner{border-radius:50%;display:flex;justify-content:center;align-items:center}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-fill{height:inherit;width:inherit}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-default{background-color:var(--mud-palette-gray-light)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-primary{color:var(--mud-palette-primary-text);background-color:var(--mud-palette-primary)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-secondary{color:var(--mud-palette-secondary-text);background-color:var(--mud-palette-secondary)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-tertiary{color:var(--mud-palette-tertiary-text);background-color:var(--mud-palette-tertiary)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-info{color:var(--mud-palette-info-text);background-color:var(--mud-palette-info)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-success{color:var(--mud-palette-success-text);background-color:var(--mud-palette-success)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-warning{color:var(--mud-palette-warning-text);background-color:var(--mud-palette-warning)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-error{color:var(--mud-palette-error-text);background-color:var(--mud-palette-error)}.mud-timeline-item-dot .mud-timeline-item-dot-inner.mud-timeline-dot-dark{color:var(--mud-palette-dark-text);background-color:var(--mud-palette-dark)}.mud-timeline-modifiers .mud-timeline-item-content .mud-card::before{content:"";position:absolute;border-top:16px solid rgba(0,0,0,0);border-bottom:16px solid rgba(0,0,0,0);border-right:16px solid rgba(0,0,0,.1);top:calc(50% - 14px)}.mud-timeline-modifiers .mud-timeline-item-content .mud-card::after{content:"";position:absolute;border-top:16px solid rgba(0,0,0,0);border-bottom:16px solid rgba(0,0,0,0);border-right:16px solid var(--mud-palette-surface);top:calc(50% - 16px)}.mud-timeline-modifiers .mud-timeline-item-content .mud-card.mud-paper-outlined::before{top:calc(50% - 16px);border-right-color:var(--mud-palette-lines-default)}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end.mud-timeline-rtl .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end.mud-timeline-rtl .mud-timeline-item-content .mud-card::after{transform:rotate(0);left:-16px;right:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end.mud-timeline-rtl .mud-timeline-item-content .mud-card.mud-paper-outlined::after{left:-15px}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start.mud-timeline-rtl .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start.mud-timeline-rtl .mud-timeline-item-content .mud-card::after{transform:rotate(180deg);right:-16px;left:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-end:not(.mud-timeline-rtl) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-start.mud-timeline-rtl .mud-timeline-item-content .mud-card.mud-paper-outlined::after{right:-15px}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::after{transform:rotate(0);left:-16px;right:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card.mud-paper-outlined::after{left:-15px}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::after{transform:rotate(180deg);right:-16px;left:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card.mud-paper-outlined::after{right:-15px}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card::after{transform:rotate(180deg);right:-16px;left:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item.mud-timeline-item-start .mud-timeline-item-content .mud-card.mud-paper-outlined::after{right:-15px}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::after{transform:rotate(0);left:-16px;right:auto}.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-reverse:not(.mud-timeline-rtl) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-vertical.mud-timeline-position-alternate.mud-timeline-rtl:not(.mud-timeline-reverse) .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card.mud-paper-outlined::after{left:-15px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item-content .mud-card::after{transform:rotate(90deg);top:-24px;bottom:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-top .mud-timeline-item-content .mud-card.mud-paper-outlined::after{top:-23px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item-content .mud-card::after{transform:rotate(270deg);bottom:-24px;top:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-bottom .mud-timeline-item-content .mud-card.mud-paper-outlined::after{bottom:-23px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::after{transform:rotate(90deg);top:-24px;bottom:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card.mud-paper-outlined::after{top:-23px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::after{transform:rotate(270deg);bottom:-24px;top:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card.mud-paper-outlined::after{bottom:-23px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card::after,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card::after{transform:rotate(270deg);bottom:-24px;top:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(odd):not(.mud-timeline-item-start) .mud-timeline-item-content .mud-card.mud-paper-outlined::after,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item.mud-timeline-item-end .mud-timeline-item-content .mud-card.mud-paper-outlined::after{bottom:-23px}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::before,.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card::after{transform:rotate(90deg);top:-24px;bottom:auto;left:calc(50% - 8px)}.mud-timeline-modifiers.mud-timeline-horizontal.mud-timeline-position-alternate.mud-timeline-reverse .mud-timeline-item:nth-child(2n):not(.mud-timeline-item-end) .mud-timeline-item-content .mud-card.mud-paper-outlined::after{top:-23px}.mud-typography{margin:0}.mud-typography-h1{font-size:var(--mud-typography-h1-size);font-family:var(--mud-typography-h1-family);font-weight:var(--mud-typography-h1-weight);line-height:var(--mud-typography-h1-lineheight);letter-spacing:var(--mud-typography-h1-letterspacing);text-transform:var(--mud-typography-h1-text-transform)}.mud-typography-h2{font-size:var(--mud-typography-h2-size);font-family:var(--mud-typography-h2-family);font-weight:var(--mud-typography-h2-weight);line-height:var(--mud-typography-h2-lineheight);letter-spacing:var(--mud-typography-h2-letterspacing);text-transform:var(--mud-typography-h2-text-transform)}.mud-typography-h3{font-size:var(--mud-typography-h3-size);font-family:var(--mud-typography-h3-family);font-weight:var(--mud-typography-h3-weight);line-height:var(--mud-typography-h3-lineheight);letter-spacing:var(--mud-typography-h3-letterspacing);text-transform:var(--mud-typography-h3-text-transform)}.mud-typography-h4{font-size:var(--mud-typography-h4-size);font-family:var(--mud-typography-h4-family);font-weight:var(--mud-typography-h4-weight);line-height:var(--mud-typography-h4-lineheight);letter-spacing:var(--mud-typography-h4-letterspacing);text-transform:var(--mud-typography-h4-text-transform)}.mud-typography-h5{font-size:var(--mud-typography-h5-size);font-family:var(--mud-typography-h5-family);font-weight:var(--mud-typography-h5-weight);line-height:var(--mud-typography-h5-lineheight);letter-spacing:var(--mud-typography-h5-letterspacing);text-transform:var(--mud-typography-h5-text-transform)}.mud-typography-h6{font-size:var(--mud-typography-h6-size);font-family:var(--mud-typography-h6-family);font-weight:var(--mud-typography-h6-weight);line-height:var(--mud-typography-h6-lineheight);letter-spacing:var(--mud-typography-h6-letterspacing);text-transform:var(--mud-typography-h6-text-transform)}.mud-typography-subtitle1{font-size:var(--mud-typography-subtitle1-size);font-family:var(--mud-typography-subtitle1-family);font-weight:var(--mud-typography-subtitle1-weight);line-height:var(--mud-typography-subtitle1-lineheight);letter-spacing:var(--mud-typography-subtitle1-letterspacing);text-transform:var(--mud-typography-subtitle1-text-transform)}.mud-typography-subtitle2{font-size:var(--mud-typography-subtitle2-size);font-family:var(--mud-typography-subtitle2-family);font-weight:var(--mud-typography-subtitle2-weight);line-height:var(--mud-typography-subtitle2-lineheight);letter-spacing:var(--mud-typography-subtitle2-letterspacing);text-transform:var(--mud-typography-subtitle2-text-transform)}.mud-typography-body1{font-size:var(--mud-typography-body1-size);font-family:var(--mud-typography-body1-family);font-weight:var(--mud-typography-body1-weight);line-height:var(--mud-typography-body1-lineheight);letter-spacing:var(--mud-typography-body1-letterspacing);text-transform:var(--mud-typography-body1-text-transform)}.mud-typography-body2{font-size:var(--mud-typography-body2-size);font-family:var(--mud-typography-body2-family);font-weight:var(--mud-typography-body2-weight);line-height:var(--mud-typography-body2-lineheight);letter-spacing:var(--mud-typography-body2-letterspacing);text-transform:var(--mud-typography-body2-text-transform)}.mud-typography-button{font-size:var(--mud-typography-button-size);font-family:var(--mud-typography-button-family);font-weight:var(--mud-typography-button-weight);line-height:var(--mud-typography-button-lineheight);letter-spacing:var(--mud-typography-button-letterspacing);text-transform:var(--mud-typography-button-text-transform)}.mud-typography-caption{font-size:var(--mud-typography-caption-size);font-family:var(--mud-typography-caption-family);font-weight:var(--mud-typography-caption-weight);line-height:var(--mud-typography-caption-lineheight);letter-spacing:var(--mud-typography-caption-letterspacing);text-transform:var(--mud-typography-caption-text-transform)}.mud-typography-overline{font-size:var(--mud-typography-overline-size);font-family:var(--mud-typography-overline-family);font-weight:var(--mud-typography-overline-weight);line-height:var(--mud-typography-overline-lineheight);letter-spacing:var(--mud-typography-overline-letterspacing);text-transform:var(--mud-typography-overline-text-transform)}.mud-typography-srOnly{width:1px;height:1px;overflow:hidden;position:absolute}.mud-typography-align-left{text-align:left}.mud-typography-align-center{text-align:center}.mud-typography-align-right{text-align:right}.mud-typography-align-justify{text-align:justify}.mud-typography-nowrap{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mud-typography-gutterbottom{margin-bottom:.35em}.mud-typography-paragraph{margin-bottom:16px}.mud-table{color:var(--mud-palette-text-primary);background-color:var(--mud-palette-surface);border-radius:var(--mud-default-borderradius);transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-table.mud-table-square{border-radius:0px}.mud-table.mud-table-outlined{border:1px solid var(--mud-palette-lines-default)}.mud-table-container{width:100%;overflow-y:auto}.mud-table-root{width:100%;border-spacing:0}.mud-table-root .mud-table-head{display:table-header-group}.mud-table-root .mud-table-head .mud-table-cell{color:var(--mud-palette-text-primary);font-weight:500;line-height:1.5rem}.mud-table-root .mud-table-body{display:table-row-group}.mud-table-root .mud-table-body .mud-table-cell{color:var(--mud-palette-text-primary)}.mud-table-root>.mud-table-body:last-child>.mud-table-row:last-child>.mud-table-cell,.mud-table-root>.mud-table-foot:last-child>.mud-table-row:last-child>.mud-table-cell{border-bottom:none}.mud-table-sort-label{display:inline-flex;align-items:center;flex-direction:inherit;justify-content:flex-start}.mud-table-sort-label.mud-clickable{cursor:pointer;user-select:none;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-table-sort-label.mud-clickable:hover{opacity:.64}.mud-table-sort-label.mud-clickable:hover .mud-table-sort-label-icon{opacity:1}}.mud-table-sort-label .mud-table-sort-label-icon{font-size:18px;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;margin-left:4px;user-select:none;margin-right:4px;opacity:0}.mud-table-sort-label .mud-table-sort-label-icon.mud-direction-desc{opacity:1;transform:rotate(180deg)}.mud-table-sort-label .mud-table-sort-label-icon.mud-direction-asc{opacity:1;transform:rotate(0deg)}.mud-table-toolbar{left:0;position:sticky;padding-left:16px;padding-right:8px;padding-inline-start:16px;padding-inline-end:8px}.mud-table-cell{display:table-cell;padding:16px;font-size:.875rem;text-align:start;font-weight:400;line-height:1.43;border-bottom:1px solid var(--mud-palette-table-lines);letter-spacing:.01071em;vertical-align:inherit}.mud-table-cell .mud-checkbox{margin:-4px}.mud-table-cell .mud-checkbox>.mud-icon-button{padding:4px}.mud-table-cell>.mud-input-control>div.mud-input.mud-input-text{color:var(--mud-theme-on-surface);font-size:.875rem;margin-top:-14px;margin-bottom:-8px}.mud-table-cell>.mud-select>.mud-input-control>div.mud-input.mud-input-text{color:var(--mud-theme-on-surface);font-size:.875rem;margin-top:-14px;margin-bottom:-8px}.mud-table-cell-footer{color:var(--mud-palette-text-secondary);font-size:.75rem;line-height:1.3125rem}.mud-table-dense * .mud-table-row .mud-table-cell{padding:6px 24px 6px 16px;padding-inline-start:16px;padding-inline-end:24px}.mud-table-dense * .mud-table-row .mud-table-cell .mud-table-cell-checkbox .mud-button-root{padding:4px}.mud-table-dense * .mud-table-row .mud-table-cell .mud-table-row-expander{padding:4px}.mud-table-dense * .mud-table-row .mud-table-cell:last-child{padding-right:16px;padding-inline-end:16px}.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell:not(:last-child){border-right:1px solid var(--mud-palette-table-lines)}.mud-table-bordered .mud-table-container .mud-table-root .mud-table-head.table-head-bordered .mud-table-row .mud-table-cell:not(:last-child){border-right:1px solid var(--mud-palette-table-lines)}.mud-table-bordered .mud-table-container .mud-table-root .mud-table-foot.table-foot-bordered .mud-table-row .mud-table-cell:not(:last-child){border-right:1px solid var(--mud-palette-table-lines)}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell:first-child{border-right:none;border-top-right-radius:0px}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell:last-child{border-right:1px solid var(--mud-palette-table-lines);border-top-right-radius:0px}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-head.table-head-bordered .mud-table-row .mud-table-cell:last-child{border-right:1px solid var(--mud-palette-table-lines);border-top-right-radius:0px}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-head.table-head-bordered .mud-table-row .mud-table-cell:only-child{border-right:none;border-top-right-radius:var(--mud-default-borderradius)}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-head .mud-table-row th.mud-table-cell:first-child{border-right:none;border-top-right-radius:var(--mud-default-borderradius)}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-foot.table-foot-bordered .mud-table-row .mud-table-cell:last-child{border-right:1px solid var(--mud-palette-table-lines);border-top-right-radius:0px}.mud-application-layout-rtl .mud-table-bordered .mud-table-container .mud-table-root .mud-table-foot .mud-table-row .mud-table-cell:first-child{border-right:none}.mud-table-sticky-header .mud-table-container{overflow-x:auto}.mud-table-sticky-header * .mud-table-root .mud-table-head * .mud-table-cell:first-child{border-radius:var(--mud-default-borderradius) 0px 0px 0px}.mud-table-sticky-header * .mud-table-root .mud-table-head * .mud-table-cell:last-child{border-radius:0px var(--mud-default-borderradius) 0px 0px}.mud-table-sticky-header * .mud-table-root .mud-table-head .mud-table-cell,.mud-table-sticky-header * .mud-table-root .mud-table-head .mud-table-loading{background-color:var(--mud-palette-surface);position:sticky;z-index:2}.mud-table-sticky-header * .mud-table-root .mud-table-head .mud-table-cell{top:0}.mud-table-sticky-header * .mud-table-root .mud-table-head .filter-header-cell{top:59px}.mud-table-sticky-header * .mud-table-root .mud-table-head.mud-table-dense .filter-header-cell{top:39px}.mud-table-sticky-header * .mud-table-root .mud-table-head .mud-table-loading{top:59px}.mud-table-sticky-header * .mud-table-root .mud-table-head.mud-table-dense .mud-table-loading{top:39px}.mud-table-sticky-header * .mud-table-root .mud-table-head:has(.filter-header-cell) .mud-table-loading{top:109px}.mud-table-sticky-header * .mud-table-root .mud-table-head.mud-table-dense:has(.filter-header-cell) .mud-table-loading{top:89px}.mud-table-sticky-header * .mud-table-root .mud-table-head * .mud-table-cell.sticky-left,.mud-table-sticky-header * .mud-table-root .mud-table-head * .mud-table-cell.sticky-right{z-index:3;background-color:var(--mud-palette-background-gray)}.mud-table-sticky-footer .mud-table-container{overflow-x:auto}.mud-table-sticky-footer * .mud-table-root .mud-table-foot{position:sticky;z-index:2;bottom:0}.mud-table-sticky-footer * .mud-table-root .mud-table-foot * .mud-table-cell{background-color:var(--mud-palette-surface)}.mud-table-row{color:inherit;display:table-row;outline:0;vertical-align:middle}@media(hover: hover)and (pointer: fine){.mud-table-hover .mud-table-container .mud-table-root .mud-table-body .mud-table-row:hover{background-color:var(--mud-palette-table-hover)}}.mud-table-striped .mud-table-container .mud-table-root .mud-table-body .mud-table-row:nth-of-type(odd){background-color:var(--mud-palette-table-striped)}@media(hover: hover)and (pointer: fine){.mud-table-hover.mud-table-striped .mud-table-container .mud-table-root .mud-table-body .mud-table-row:nth-of-type(odd):hover{background-color:var(--mud-palette-table-hover)}}.mud-table-cell-align-left{text-align:left}.mud-table-cell-align-center{text-align:center}.mud-table-cell-align-right{text-align:right;flex-direction:row-reverse}.mud-table-cell-align-justify{text-align:justify}.mud-table-pagination-display{display:flex;flex-shrink:0}.mud-table-pagination-display .mud-tablepager-left{flex-direction:row !important}.mud-table-pagination-display .mud-tablepager-right{flex-direction:row-reverse !important}.mud-table-pagination-information{white-space:nowrap;direction:initial}.mud-table-page-number-information{white-space:nowrap;direction:initial}.mud-table-pagination{color:var(--mud-theme-on-surface);overflow:auto;font-size:.875rem;display:initial;position:sticky;left:0}.mud-table-pagination:last-child{padding:0}.mud-table-pagination-toolbar{border-top:1px solid var(--mud-palette-table-lines);height:52px;padding-right:2px;padding-inline-end:2px;padding-inline-start:unset;flex-wrap:nowrap}.mud-table-pagination-toolbar .mud-tablepager-left{flex-direction:row !important}.mud-table-pagination-toolbar .mud-tablepager-right{flex-direction:row-reverse !important}.mud-table-pagination-spacer{flex:1 1 100%}.mud-table-pagination-caption{display:flex;flex-shrink:0;align-items:center;padding-left:10px;padding-right:10px}.mud-table-pagination-select{cursor:pointer;margin-left:10px !important;margin-right:10px !important;margin-top:0px !important;min-width:52px}.mud-table-pagination-select .mud-select-input{margin-top:0px !important;padding:0 7px !important}.mud-table-pagination-select .mud-input .mud-input-root{max-width:80px;cursor:pointer;margin-top:2px;border:none;font-size:.875rem;font-weight:400;line-height:1.43;letter-spacing:.01071em;color:var(--mud-theme-on-surface)}.mud-table-pagination-actions{flex-shrink:0;align-items:center;margin-left:10px;margin-inline-start:10px;margin-inline-end:unset}.mud-table-smalldevices-sortselect{display:none}.mud-table-loading{position:relative}.mud-table-loading .mud-table-loading-progress{width:100%}.mud-table-empty-row{background-color:var(--mud-palette-surface);vertical-align:middle;text-align:center}tr.mud-table-row-group-indented-1 td:first-child{padding-left:48px !important}tr.mud-table-row-group-indented-2 td:first-child{padding-left:96px !important}tr.mud-table-row-group-indented-3 td:first-child{padding-left:144px !important}tr.mud-table-row-group-indented-4 td:first-child{padding-left:192px !important}tr.mud-table-row-group-indented-5 td:first-child{padding-left:240px !important}.mud-header-togglehierarchy .mud-table-row-expander{padding:6px}.mud-table-row-expander{margin-top:-12px;margin-bottom:-12px;margin-inline-start:-12px;margin-inline-end:-2px}@media(max-width: 360px){.mud-table .mud-table-pagination .mud-select{margin-left:auto;margin-right:-14px;margin-inline-start:auto;margin-inline-end:-14px}.mud-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:unset !important;margin-inline-start:unset !important}}@media(max-width: 416px){.mud-table .mud-table-pagination .mud-table-pagination-toolbar{flex-wrap:wrap;padding-top:16px;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset;min-height:100px}.mud-table .mud-table-pagination .mud-table-pagination-toolbar .mud-table-pagination-actions{margin-left:auto;margin-right:-14px;margin-inline-start:auto;margin-inline-end:-14px}}@media(max-width: 600px){.mud-xs-table .mud-table-root .mud-table-head .mud-table-row,.mud-xs-table .mud-table-root .mud-table-foot{display:none}.mud-xs-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-xs-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-xs-table .mud-table-row{display:revert}.mud-xs-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-xs-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-xs-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-xs-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-xs-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-xs-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-xs-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-xs-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-xs-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-xs-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-xs-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-xs-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}@media(max-width: 960px){.mud-sm-table .mud-table-root .mud-table-head .mud-table-row,.mud-sm-table .mud-table-root .mud-table-foot{display:none}.mud-sm-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-sm-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-sm-table .mud-table-row{display:revert}.mud-sm-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-sm-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-sm-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-sm-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-sm-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-sm-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-sm-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-sm-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-sm-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-sm-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-sm-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-sm-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}@media(max-width: 1280px){.mud-md-table .mud-table-root .mud-table-head .mud-table-row,.mud-md-table .mud-table-root .mud-table-foot{display:none}.mud-md-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-md-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-md-table .mud-table-row{display:revert}.mud-md-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-md-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-md-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-md-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-md-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-md-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-md-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-md-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-md-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-md-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-md-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-md-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}@media(max-width: 1920px){.mud-lg-table .mud-table-root .mud-table-head .mud-table-row,.mud-lg-table .mud-table-root .mud-table-foot{display:none}.mud-lg-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-lg-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-lg-table .mud-table-row{display:revert}.mud-lg-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-lg-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-lg-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-lg-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-lg-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-lg-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-lg-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-lg-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-lg-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-lg-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-lg-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-lg-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}@media(max-width: 2560px){.mud-xl-table .mud-table-root .mud-table-head .mud-table-row,.mud-xl-table .mud-table-root .mud-table-foot{display:none}.mud-xl-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-xl-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-xl-table .mud-table-row{display:revert}.mud-xl-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-xl-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-xl-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-xl-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-xl-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-xl-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-xl-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-xl-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-xl-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-xl-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-xl-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-xl-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}@media(min-width: 2560px){.mud-xxl-table .mud-table-root .mud-table-head .mud-table-row,.mud-xxl-table .mud-table-root .mud-table-foot{display:none}.mud-xxl-table .mud-table-smalldevices-sortselect{display:block;padding:4px 16px 8px}.mud-xxl-table .mud-table-body{border-top:1px solid var(--mud-palette-table-lines)}.mud-xxl-table .mud-table-row{display:revert}.mud-xxl-table .mud-table-row .mud-table-cell:last-child{border-bottom:1px solid var(--mud-palette-table-lines)}.mud-xxl-table .mud-table-cell{display:flex;justify-content:space-between;align-items:center;border:none;padding:14px 16px;text-align:start !important}.mud-xxl-table.mud-table-dense .mud-table-cell{padding:6px 16px}.mud-xxl-table .mud-table-cell:before{content:attr(data-label);font-weight:500;padding-right:16px;padding-inline-end:16px;padding-inline-start:unset}.mud-xxl-table.mud-table-small-alignright .mud-table-cell:before{margin-right:auto}.mud-xxl-table .mud-table-cell-hide{visibility:collapse;height:0;padding:0;margin:0}.mud-xxl-table .mud-table-pagination .mud-table-pagination-spacer{flex:none}.mud-xxl-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:first-child{display:none}.mud-xxl-table .mud-table-pagination .mud-table-pagination-actions .mud-button-root:last-child{display:none}.mud-xxl-table .mud-table-pagination .mud-select~.mud-table-pagination-caption{margin-left:auto;margin-inline-start:auto}.mud-xxl-table.mud-table-bordered .mud-table-container .mud-table-root colgroup~.mud-table-body .mud-table-row .mud-table-cell{border-right:1px solid var(--mud-palette-table-lines) !important}.mud-xxl-table.mud-table-bordered .mud-table-container .mud-table-root .mud-table-body .mud-table-row .mud-table-cell{border-right:none !important}}.mud-tabs{display:flex;flex-direction:column}.mud-tabs.mud-tabs-reverse{flex-direction:column-reverse}.mud-tabs.mud-tabs-vertical{flex-direction:row}.mud-tabs.mud-tabs-vertical .mud-tooltip-root{width:auto}.mud-tabs.mud-tabs-vertical-reverse{flex-direction:row-reverse}.mud-tabs.mud-tabs-rounded{border-radius:var(--mud-default-borderradius);overflow:hidden}.mud-tabs.mud-tabs-rounded .mud-tabs-tabbar{border-radius:var(--mud-default-borderradius)}.mud-tabs.mud-tabs-rounded .mud-tabs-panels{border-radius:var(--mud-default-borderradius);flex-grow:1}.mud-tabs-tabbar{position:relative;background-color:var(--mud-palette-surface)}.mud-tabs-tabbar.mud-tabs-border-left{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important;border-right:1px solid var(--mud-palette-lines-default)}.mud-tabs-tabbar.mud-tabs-border-right{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important;border-left:1px solid var(--mud-palette-lines-default)}.mud-tabs-tabbar.mud-tabs-border-top{border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important;border-bottom:1px solid var(--mud-palette-lines-default)}.mud-tabs-tabbar.mud-tabs-border-bottom{border-top-left-radius:0 !important;border-top-right-radius:0 !important;border-top:1px solid var(--mud-palette-lines-default)}.mud-tabs-tabbar.mud-tabs-rounded{border-radius:var(--mud-default-borderradius)}.mud-tabs-tabbar.mud-tabs-vertical .mud-tabs-tabbar-inner{flex-direction:column}.mud-tabs-tabbar.mud-tabs-vertical .mud-tabs-tabbar-inner .mud-tabs-scroll-button .mud-button-root{width:100%;border-radius:0px;height:32px}.mud-tabs-tabbar.mud-tabs-vertical .mud-tabs-tabbar-inner .mud-tabs-scroll-button .mud-button-root .mud-icon-button-label .mud-icon-root{transform:rotate(90deg)}.mud-tabs-tabbar .mud-tabs-tabbar-inner{display:flex;min-height:48px}.mud-tabs-tabbar-content{width:100%;flex:1 1 auto;display:inline-block;position:relative;white-space:nowrap;overflow:hidden}.mud-tabs-tabbar-content .mud-tabs-tabbar-wrapper{width:max-content;position:inherit;display:flex;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1)}.mud-tabs-tabbar-content .mud-tabs-tabbar-wrapper.mud-tabs-centered{margin:auto}.mud-tabs-tabbar-content .mud-tabs-tabbar-wrapper.mud-tabs-vertical{flex-direction:column}.mud-tabs-panels{position:relative;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1)}.mud-tabs-panels.mud-tabs-vertical{display:flex;flex-grow:1}.mud-tab{width:100%;display:inline-flex;padding:6px 12px;min-height:48px;flex-shrink:0;font-weight:500;line-height:1.75;user-select:none;white-space:normal;letter-spacing:.02857em;text-transform:uppercase;text-align:center;align-items:center;justify-content:center;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-tab:hover{cursor:pointer;background-color:var(--mud-palette-action-default-hover)}}.mud-tab.mud-tab-active{color:var(--mud-palette-primary)}@media(hover: hover)and (pointer: fine){.mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-primary-hover)}}.mud-tab.mud-disabled{cursor:default;pointer-events:none;color:var(--mud-palette-text-disabled)}.mud-tab .mud-tab-icon-text{margin-right:8px;margin-inline-end:8px;margin-inline-start:unset}.mud-tab.mud-tab-panel-hidden{display:none}.mud-tab-slider{position:absolute;background:var(--mud-palette-primary)}.mud-tab-slider.mud-tab-slider-horizontal{height:2px;bottom:0;transition:left .3s cubic-bezier(0.64, 0.09, 0.08, 1);will-change:left}.mud-tab-slider.mud-tab-slider-horizontal.mud-tab-slider-horizontal-reverse{top:0;bottom:unset}.mud-tab-slider.mud-tab-slider-vertical{width:2px;right:0;transition:top .3s cubic-bezier(0.64, 0.09, 0.08, 1);will-change:top}.mud-tab-slider.mud-tab-slider-vertical.mud-tab-slider-vertical-reverse{left:0;right:unset}.mud-tab-badge{margin-left:8px;margin-inline-start:8px;margin-inline-end:unset}.mud-tabs-tabbar-primary{background-color:var(--mud-palette-primary);color:var(--mud-palette-primary-text)}.mud-tabs-tabbar-primary .mud-tab-slider{background:var(--mud-palette-primary-text)}.mud-tabs-tabbar-primary .mud-tab.mud-tab-active{color:var(--mud-palette-primary-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-primary .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-primary-lighten)}}.mud-tabs-tabbar-secondary{background-color:var(--mud-palette-secondary);color:var(--mud-palette-secondary-text)}.mud-tabs-tabbar-secondary .mud-tab-slider{background:var(--mud-palette-secondary-text)}.mud-tabs-tabbar-secondary .mud-tab.mud-tab-active{color:var(--mud-palette-secondary-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-secondary .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-secondary-lighten)}}.mud-tabs-tabbar-tertiary{background-color:var(--mud-palette-tertiary);color:var(--mud-palette-tertiary-text)}.mud-tabs-tabbar-tertiary .mud-tab-slider{background:var(--mud-palette-tertiary-text)}.mud-tabs-tabbar-tertiary .mud-tab.mud-tab-active{color:var(--mud-palette-tertiary-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-tertiary .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-tertiary-lighten)}}.mud-tabs-tabbar-info{background-color:var(--mud-palette-info);color:var(--mud-palette-info-text)}.mud-tabs-tabbar-info .mud-tab-slider{background:var(--mud-palette-info-text)}.mud-tabs-tabbar-info .mud-tab.mud-tab-active{color:var(--mud-palette-info-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-info .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-info-lighten)}}.mud-tabs-tabbar-success{background-color:var(--mud-palette-success);color:var(--mud-palette-success-text)}.mud-tabs-tabbar-success .mud-tab-slider{background:var(--mud-palette-success-text)}.mud-tabs-tabbar-success .mud-tab.mud-tab-active{color:var(--mud-palette-success-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-success .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-success-lighten)}}.mud-tabs-tabbar-warning{background-color:var(--mud-palette-warning);color:var(--mud-palette-warning-text)}.mud-tabs-tabbar-warning .mud-tab-slider{background:var(--mud-palette-warning-text)}.mud-tabs-tabbar-warning .mud-tab.mud-tab-active{color:var(--mud-palette-warning-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-warning .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-warning-lighten)}}.mud-tabs-tabbar-error{background-color:var(--mud-palette-error);color:var(--mud-palette-error-text)}.mud-tabs-tabbar-error .mud-tab-slider{background:var(--mud-palette-error-text)}.mud-tabs-tabbar-error .mud-tab.mud-tab-active{color:var(--mud-palette-error-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-error .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-error-lighten)}}.mud-tabs-tabbar-dark{background-color:var(--mud-palette-dark);color:var(--mud-palette-dark-text)}.mud-tabs-tabbar-dark .mud-tab-slider{background:var(--mud-palette-dark-text)}.mud-tabs-tabbar-dark .mud-tab.mud-tab-active{color:var(--mud-palette-dark-text)}@media(hover: hover)and (pointer: fine){.mud-tabs-tabbar-dark .mud-tab.mud-tab-active:hover{background-color:var(--mud-palette-dark-lighten)}}.tab-transition-enter{transform:translate(100%, 0)}.tab-transition-leave,.tab-transition-leave-active{position:absolute;top:0}.tab-transition-leave-to{position:absolute;transform:translate(-100%, 0)}.tab-reverse-transition-enter{transform:translate(-100%, 0)}.tab-reverse-transition-leave,.tab-reverse-transition-leave-to{top:0;position:absolute;transform:translate(100%, 0)}.mud-dynamic-tabs .mud-tabs-tabbar .mud-tab{padding:6px 14px}.mud-dynamic-tabs .mud-tabs-tabbar .mud-tab .mud-icon-button{padding:4px;margin-right:-4px;margin-inline-end:-4px;margin-inline-start:unset}.mud-dynamic-tabs .mud-tabs-tabbar .mud-tab .mud-tabs-panel-header-before{padding-right:8px;padding-inline-end:8px;padding-inline-start:unset}.mud-dynamic-tabs .mud-tabs-tabbar .mud-tab .mud-tabs-panel-header-after{padding-left:8px;padding-inline-start:8px;padding-inline-end:unset}.mud-tabs-header.mud-tabs-header-before{display:inherit}.mud-tabs-header.mud-tabs-header-after{display:inherit}.mud-tabs-panel-header{display:flex;flex:1 1 auto}.mud-tabs-panel-header.mud-tabs-panel-header-before{justify-content:flex-start}.mud-tabs-panel-header.mud-tabs-panel-header-after{justify-content:flex-end}.mud-select{display:flex;flex-grow:1;position:relative}.mud-select.mud-autocomplete{display:block}.mud-select.mud-autocomplete .mud-select-input{cursor:text}.mud-select.mud-autocomplete .mud-input-adornment{cursor:pointer}.mud-select.mud-autocomplete--with-progress .mud-select-input input{padding-right:3.5rem !important}.mud-select.mud-autocomplete--with-progress .mud-input-adorned-end input{padding-right:4.5rem !important}.mud-select.mud-autocomplete--with-progress:not(:has(.mud-input-adornment-start)):has(.progress-indicator-circular) .mud-select-input .mud-icon-button{display:none !important}.mud-select.mud-autocomplete--with-progress .progress-indicator-circular{position:absolute;width:100%;top:0;bottom:0;display:flex;align-items:center;justify-content:flex-end;padding-top:.25rem;padding-bottom:.25rem;padding-right:1rem}.mud-select.mud-autocomplete--with-progress .mud-progress-linear{position:absolute;bottom:-1px;height:2px}.mud-select .mud-select-input{cursor:pointer}.mud-select .mud-select-input .mud-input-slot{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.mud-select .mud-select-input .mud-input-adornment-end{margin-left:0}.mud-select .mud-select-input:disabled{cursor:default}.mud-select .mud-disabled .mud-select-input{cursor:default}.mud-rtl-provider .mud-select .progress-indicator-circular--with-adornment{padding-right:1rem}.mud-rtl-provider.mud-application-layout-rtl .mud-select .progress-indicator-circular--with-adornment{padding-right:0rem !important;padding-left:1rem !important}.mud-select>.mud-form-helpertext{margin-top:-21px}.mud-select-all{margin-top:10px;border-bottom:1px solid #d3d3d3;padding-bottom:18px}.mud-select-filler{white-space:nowrap;height:0px}.mud-width-content{max-width:min-content}.mud-input{position:relative;color:var(--mud-palette-text-primary);cursor:text;display:inline-flex;box-sizing:border-box;align-items:center;color-scheme:var(--mud-native-html-color-scheme);line-height:1.1876em}.mud-input.mud-input-full-width{width:100%}.mud-input.mud-disabled{color:var(--mud-palette-text-disabled);cursor:default}.mud-input.mud-disabled>.mud-input-adornment{color:var(--mud-palette-text-disabled);pointer-events:none}.mud-input.mud-input-underline:before{left:0;right:0;bottom:0;content:" ";position:absolute;transition:border-bottom .2s,background-color .2s;border-bottom:1px solid var(--mud-palette-lines-inputs);pointer-events:none}@media(hover: hover)and (pointer: fine){.mud-input.mud-input-underline:hover:not(.mud-disabled):before{border-bottom:1px solid var(--mud-palette-action-default)}}.mud-input.mud-input-underline:after{left:0;right:0;bottom:0;content:"";position:absolute;transform:scaleX(0);transition:transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;border-bottom:2px solid var(--mud-palette-primary);pointer-events:none}.mud-input.mud-input-underline.mud-disabled:before{border-bottom-style:dotted}.mud-input.mud-input-underline.mud-input-error:after{transform:scaleX(1);border-bottom-color:var(--mud-palette-error)}.mud-input.mud-input-filled{position:relative;transition:background-color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;background-color:rgba(0,0,0,.09);border-top-left-radius:4px;border-top-right-radius:4px}@media(hover: hover)and (pointer: fine){.mud-input.mud-input-filled:hover{background-color:rgba(0,0,0,.13)}}.mud-input.mud-input-filled.mud-focused{background-color:rgba(0,0,0,.09)}.mud-input.mud-input-filled.mud-disabled{background-color:rgba(0,0,0,.12)}.mud-input.mud-input-filled.mud-input-adorned-start{padding-left:12px;padding-inline-start:12px;padding-inline-end:unset}.mud-input.mud-input-filled.mud-input-adorned-end{padding-right:12px;padding-inline-end:12px;padding-inline-start:unset}.mud-input.mud-input-filled.mud-input-underline:before{left:0;right:0;bottom:0;content:" ";position:absolute;transition:border-bottom-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-bottom:1px solid var(--mud-palette-lines-inputs);pointer-events:none}.mud-input.mud-input-filled.mud-input-underline:after{left:0;right:0;bottom:0;content:"";position:absolute;transform:scaleX(0);transition:transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;border-bottom:2px solid var(--mud-palette-primary);pointer-events:none}@media(hover: hover)and (pointer: fine){.mud-input.mud-input-filled.mud-input-underline:hover:before{border-bottom:1px solid var(--mud-palette-action-default)}}.mud-input.mud-input-filled.mud-input-underline.mud-disabled:before{border-bottom-style:dotted}.mud-input.mud-input-filled.mud-input-underline.mud-input-error:after{transform:scaleX(1);border-bottom-color:var(--mud-palette-error)}.mud-input.mud-input-outlined{position:relative;border-width:0px}.mud-input.mud-input-outlined .mud-input-outlined-border{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;min-width:0%;height:100%;text-align:start;pointer-events:none;border-radius:var(--mud-default-borderradius);border-color:var(--mud-palette-lines-inputs);border-width:1px;border-style:solid;transition:border-width,border-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input.mud-input-outlined>.mud-input-outlined-border legend{float:none;visibility:hidden;font-size:.75rem;font-weight:inherit;width:0;height:0;margin:0 11px 0 11px;padding:0;position:relative}@media(hover: hover)and (pointer: fine){.mud-input.mud-input-outlined:not(.mud-disabled):not(:focus-within):hover .mud-input-outlined-border{border-color:var(--mud-palette-action-default)}}.mud-input.mud-input-outlined.mud-shrink>.mud-input-outlined-border legend{width:auto;padding:0 5px}.mud-input.mud-input-outlined:focus-within>.mud-input-outlined-border,.mud-input.mud-input-outlined:focus-within .mud-shrink>.mud-input-outlined-border{border-width:2px;border-color:var(--mud-palette-primary)}.mud-input.mud-input-outlined:focus-within>.mud-input-outlined-border legend,.mud-input.mud-input-outlined:focus-within .mud-shrink>.mud-input-outlined-border legend{width:auto;padding:0 5px}.mud-input.mud-input-outlined.mud-disabled .mud-input-outlined-border{border-color:var(--mud-palette-action-disabled)}.mud-input.mud-input-outlined.mud-input-adorned-start{padding-left:14px;padding-inline-start:14px;padding-inline-end:unset}.mud-input.mud-input-outlined.mud-input-adorned-end{padding-right:14px;padding-inline-end:14px;padding-inline-start:unset}.mud-input-error .mud-input-outlined-border{border-color:var(--mud-palette-error) !important}.mud-input:focus-within.mud-input-underline:after{transform:scaleX(1)}.mud-input>input.mud-input-root,div.mud-input-slot.mud-input-root{font:inherit;color:currentColor;width:100%;border:0;height:1lh;margin:0;display:block;padding:6px 0 7px;min-width:0;background:none;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mud-input>input.mud-input-root::placeholder,div.mud-input-slot.mud-input-root::placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root::-webkit-input-placeholder,div.mud-input-slot.mud-input-root::-webkit-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root:-moz-placeholder,div.mud-input-slot.mud-input-root:-moz-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root::-moz-placeholder,div.mud-input-slot.mud-input-root::-moz-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root:-ms-input-placeholder,div.mud-input-slot.mud-input-root:-ms-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root::-ms-input-placeholder,div.mud-input-slot.mud-input-root::-ms-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>input.mud-input-root.mud-input-root-margin-dense,div.mud-input-slot.mud-input-root.mud-input-root-margin-dense{padding-top:3px}.mud-input>input.mud-input-root.mud-input-root-multiline,div.mud-input-slot.mud-input-root.mud-input-root-multiline{height:auto;resize:none;padding:0}.mud-input>input.mud-input-root.mud-input-root-type-search,div.mud-input-slot.mud-input-root.mud-input-root-type-search{-moz-appearance:textfield;-webkit-appearance:textfield}.mud-input>input.mud-input-root:focus,.mud-input>input.mud-input-root:active,div.mud-input-slot.mud-input-root:focus,div.mud-input-slot.mud-input-root:active{outline:0}.mud-input>input.mud-input-root:invalid,div.mud-input-slot.mud-input-root:invalid{box-shadow:none}.mud-input>input.mud-input-root:disabled,div.mud-input-slot.mud-input-root:disabled{opacity:1}.mud-input>input.mud-input-root.mud-input-root-filled,div.mud-input-slot.mud-input-root.mud-input-root-filled{padding:27px 12px 10px}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-margin-dense,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-margin-dense{padding-top:23px;padding-bottom:6px}.mud-input>input.mud-input-root.mud-input-root-filled:-webkit-autofill,div.mud-input-slot.mud-input-root.mud-input-root-filled:-webkit-autofill{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label{padding-top:18px;padding-bottom:19px}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label.mud-input-root-margin-dense,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label.mud-input-root-margin-dense{padding-top:10px;padding-bottom:11px}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-multiline,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-multiline{padding:0}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-adorned-start,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:12px}.mud-input>input.mud-input-root.mud-input-root-filled.mud-input-root-adorned-end,div.mud-input-slot.mud-input-root.mud-input-root-filled.mud-input-root-adorned-end{padding-right:0;padding-inline-end:0;padding-inline-start:12px}.mud-input>input.mud-input-root-outlined,div.mud-input-slot.mud-input-root-outlined{padding:18.5px 14px}.mud-input>input.mud-input-root-outlined.mud-input-root:-webkit-autofill,div.mud-input-slot.mud-input-root-outlined.mud-input-root:-webkit-autofill{border-radius:inherit}.mud-input>input.mud-input-root-outlined.mud-input-root-margin-dense,div.mud-input-slot.mud-input-root-outlined.mud-input-root-margin-dense{padding-top:10.5px;padding-bottom:10.5px}.mud-input>input.mud-input-root-outlined.mud-input-root-adorned-start,div.mud-input-slot.mud-input-root-outlined.mud-input-root-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:14px}.mud-input>input.mud-input-root-outlined.mud-input-root-adorned-end,div.mud-input-slot.mud-input-root-outlined.mud-input-root-adorned-end{padding-right:0;padding-inline-end:0;padding-inline-start:14px}.mud-input>input::-ms-reveal,.mud-input>input::-ms-clear,div.mud-input-slot::-ms-reveal,div.mud-input-slot::-ms-clear{display:none !important}.mud-input>textarea.mud-input-root{font:inherit;color:currentColor;width:100%;border:0;height:auto;margin:6px 0 7px;padding:0;display:block;min-width:0;background:none;position:relative;box-sizing:content-box;letter-spacing:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);resize:none;cursor:auto}.mud-input>textarea.mud-input-root::placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root::-webkit-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root:-moz-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root::-moz-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root:-ms-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root::-ms-input-placeholder{color:currentColor;opacity:.42;transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-input>textarea.mud-input-root.mud-input-root-margin-dense{padding-top:3px}.mud-input>textarea.mud-input-root.mud-input-root-type-search{-moz-appearance:textfield;-webkit-appearance:textfield}.mud-input>textarea.mud-input-root:focus,.mud-input>textarea.mud-input-root:active{outline:0}.mud-input>textarea.mud-input-root:invalid{box-shadow:none}.mud-input>textarea.mud-input-root:disabled{opacity:1}.mud-input>textarea.mud-input-root.mud-input-root-filled{box-sizing:border-box;margin-top:27px;margin-bottom:0;padding:0px 12px 10px}.mud-input>textarea.mud-input-root.mud-input-root-filled.mud-input-root-margin-dense{padding-top:23px;padding-bottom:6px;mask-image:linear-gradient(to bottom, transparent 23px, black 23px)}.mud-input>textarea.mud-input-root.mud-input-root-filled:-webkit-autofill{border-top-left-radius:inherit;border-top-right-radius:inherit}.mud-input>textarea.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label{padding-top:18px;padding-bottom:19px;mask-image:linear-gradient(to bottom, transparent 18px, black 18px)}.mud-input>textarea.mud-input-root.mud-input-root-filled.mud-input-root-hidden-label.mud-input-root-margin-dense{padding-top:10px;padding-bottom:11px;mask-image:linear-gradient(to bottom, transparent 10px, black 10px)}.mud-input>textarea.mud-input-root.mud-input-root-filled.mud-input-root-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:12px}.mud-input>textarea.mud-input-root.mud-input-root-filled.mud-input-root-adorned-end{padding-right:0;padding-inline-end:unset;padding-inline-start:12px}.mud-input>textarea.mud-input-root::-webkit-scrollbar{width:8px;height:8px;z-index:1;cursor:crosshair}.mud-input>textarea.mud-input-root::-webkit-scrollbar-thumb{background:var(--mud-palette-lines-inputs);border-radius:1px}.mud-input>textarea.mud-input-root::-webkit-scrollbar-track{background:rgba(0,0,0,0)}.mud-input>textarea.mud-input-root-outlined{box-sizing:border-box;margin-top:18.5px;margin-bottom:0;padding:0px 14px 18.5px}.mud-input>textarea.mud-input-root-outlined.mud-input-root:-webkit-autofill{border-radius:inherit}.mud-input>textarea.mud-input-root-outlined.mud-input-root-margin-dense{margin-top:0px;padding-top:10.5px;padding-bottom:10.5px;mask-image:linear-gradient(to bottom, transparent 10.5px, black 10.5px)}.mud-input>textarea.mud-input-root-outlined.mud-input-root-adorned-start{padding-left:0;padding-inline-start:0;padding-inline-end:14px}.mud-input>textarea.mud-input-root-outlined.mud-input-root-adorned-end{padding-right:0;padding-inline-end:0;padding-inline-start:14px}.mud-input-adornment{height:.01em;display:flex;max-height:2em;align-items:center;white-space:nowrap}.mud-input-adornment-start{margin-right:8px;margin-inline-end:8px;margin-inline-start:unset}.mud-input-adornment-start.mud-input-root-filled-shrink{margin-top:16px}.mud-input-adornment-end{margin-left:8px;margin-inline-start:8px;margin-inline-end:unset}.mud-input-number-control.mud-input-showspin .mud-input-adornment-end{margin-right:12px;margin-inline-end:12px;margin-inline-start:unset}.mud-input-number-control.mud-input-showspin .mud-input-underline:not(.mud-input-filled) .mud-input-adornment-end{margin-right:24px;margin-inline-end:24px;margin-inline-start:unset}.mud-input-adornment-disable-pointerevents{pointer-events:none}.mud-range-input-separator{visibility:hidden;margin:0 4px}.mud-input:focus-within .mud-range-input-separator{visibility:visible}.mud-picker .mud-shrink .mud-range-input-separator{visibility:visible}.mud-input-input-control{user-select:none}.mud-input-control{border:0;margin:0;padding:0;display:flex;flex:1 1 auto;max-width:100%;position:relative;flex-direction:column;vertical-align:top}.mud-input-control.mud-input-control-full-width{width:100%}.mud-input-control.mud-input-control-boolean-input{flex:none;margin:0}.mud-input-control.mud-input-control-boolean-input .mud-radio-group{display:inherit;flex-direction:row;align-items:center;flex-wrap:wrap}.mud-input-control.mud-input-outlined-with-label{margin-top:8px;margin-bottom:4px}.mud-input-control.mud-input-control-margin-dense{margin:4px 0px}.mud-input-control.mud-input-control-margin-dense.mud-input-outlined-with-label{margin-top:8px;margin-bottom:4px}.mud-input-control.mud-input-control-margin-normal{margin:8px 0px}.mud-input-control.mud-input-control-margin-normal.mud-input-outlined-with-label{margin-top:16px;margin-bottom:8px}.mud-input-control>.mud-input-control-input-container{position:relative;display:flex;flex-direction:column}.mud-input-control>.mud-input-control-input-container>div.mud-input.mud-input-text.mud-input-text-with-label{margin-top:16px}.mud-input-control>.mud-input-control-input-container>.mud-input-label-outlined.mud-input-label-inputcontrol{line-height:1.15rem}.mud-input-control>.mud-input-control-input-container>.mud-input-label-inputcontrol{color:var(--mud-palette-text-secondary);padding:0;font-size:1rem;font-weight:400;line-height:1.15rem;letter-spacing:.00938em;z-index:0;pointer-events:none}.mud-input-control>.mud-input-control-input-container>.mud-input-label-inputcontrol.mud-disabled{color:var(--mud-palette-text-disabled)}.mud-input-control>.mud-input-control-input-container>.mud-input-label-inputcontrol.mud-input-error{color:var(--mud-palette-error) !important}.mud-input-control.mud-input-required>.mud-input-control-input-container>.mud-input-label::after{content:"*"}.mud-input-control.mud-input-number-control input::-webkit-outer-spin-button,.mud-input-control.mud-input-number-control input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.mud-input-control.mud-input-number-control input[type=number]{-moz-appearance:textfield}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end) input{padding-right:24px;padding-inline-end:24px}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end) input.mud-input-root-margin-dense{padding-right:20px;padding-inline-end:20px}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-text input{padding-inline-start:0}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-text input.mud-input-root-margin-dense{padding-inline-start:0}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-filled input{padding-inline-start:12px}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-filled input.mud-input-root-margin-dense{padding-inline-start:12px}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-outlined input{padding-inline-start:14px}.mud-input-control.mud-input-number-control.mud-input-showspin .mud-input:not(.mud-input-adorned-end).mud-input-outlined input.mud-input-root-margin-dense{padding-inline-start:14px}.mud-input-control.mud-input-number-control .mud-input-numeric-spin{display:inline-flex;flex-direction:column;justify-content:space-between;position:absolute;right:0;top:0;bottom:0}.mud-input-control.mud-input-number-control .mud-input-numeric-spin button{padding:2px 0;min-width:unset;min-height:unset}.mud-input-control:focus-within .mud-input-helper-text.mud-input-helper-onfocus,.mud-input-control.mud-input-error .mud-input-helper-text.mud-input-helper-onfocus{transform:translateY(0)}.mud-input-control-helper-container{overflow:hidden;margin-top:3px}.mud-input-helper-text{color:var(--mud-palette-text-secondary);margin:0;font-size:.75rem;text-align:start;font-weight:400;line-height:1.66;letter-spacing:.03333em}.mud-input-helper-text.mud-input-helper-onfocus{transform:translateY(-100%);transition:color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-input-helper-text.mud-disabled{color:var(--mud-palette-text-disabled)}.mud-input-helper-text.mud-input-error{color:var(--mud-palette-error) !important}.mud-input-helper-text-margin-dense{margin-top:4px}.mud-input-helper-text-contained{margin-left:14px;margin-right:14px}.mud-application-layout-rtl .mud-input-control.mud-input-number-control .mud-input-numeric-spin{left:0;right:unset}.mud-input-label{display:block;transform-origin:top left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.mud-input-label-inputcontrol{top:0;left:0;position:absolute;transform:translate(0, 24px) scale(1)}.mud-input-label-margindense{transform:translate(0, 21px) scale(1)}.mud-input-label-shrink{transform:translate(0, 1.5px) scale(0.75);transform-origin:top left}.mud-input-label-animated{transition:color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-input-label-filled{z-index:1;transform:translate(12px, 20px) scale(1);max-width:calc(100% - 12px);pointer-events:none}.mud-input-label-filled.mud-input-label-margin-dense{transform:translate(12px, 17px) scale(1)}.mud-input-label-outlined{transform:translate(14px, 20px) scale(1);max-width:calc(100% - 14px);pointer-events:none;background-color:rgba(0,0,0,0);padding:0px 5px !important}.mud-input-label-outlined.mud-input-label-margin-dense{transform:translate(14px, 12px) scale(1)}.mud-shrink~label.mud-input-label.mud-input-label-inputcontrol{color:var(--mud-palette-text-primary)}.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol{color:var(--mud-palette-primary)}.mud-shrink~label.mud-input-label.mud-input-label-inputcontrol,.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol{transform:translate(0, 1.5px) scale(0.75);transform-origin:top left}.mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled,.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled{transform:translate(12px, 10px) scale(0.75);max-width:calc((100% - 12px)/.75)}.mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled.mud-input-label-margin-dense,.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled.mud-input-label-margin-dense{transform:translate(12px, 7px) scale(0.75)}.mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-outlined,.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-outlined{transform:translate(14px, -6px) scale(0.75);max-width:calc((100% - 14px)/.75)}.mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-error{color:var(--mud-palette-error)}.mud-application-layout-rtl .mud-input-label{transform-origin:top right}.mud-application-layout-rtl .mud-input-label-inputcontrol{left:unset;right:0}.mud-application-layout-rtl .mud-input-label-shrink{transform-origin:top right}.mud-application-layout-rtl .mud-input-label-filled{transform:translate(-12px, 20px) scale(1)}.mud-application-layout-rtl .mud-input-label-filled.mud-input-label-margin-dense{transform:translate(-12px, 17px) scale(1)}.mud-application-layout-rtl .mud-input-label-outlined{transform:translate(-14px, 20px) scale(1)}.mud-application-layout-rtl .mud-input-label-outlined.mud-input-label-margin-dense{transform:translate(-14px, 12px) scale(1)}.mud-application-layout-rtl .mud-shrink~label.mud-input-label.mud-input-label-inputcontrol,.mud-application-layout-rtl .mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol{transform-origin:top right}.mud-application-layout-rtl .mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled,.mud-application-layout-rtl .mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled{transform:translate(-12px, 10px) scale(0.75)}.mud-application-layout-rtl .mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled.mud-input-label-margin-dense,.mud-application-layout-rtl .mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-filled.mud-input-label-margin-dense{transform:translate(-12px, 7px) scale(0.75)}.mud-application-layout-rtl .mud-shrink~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-outlined,.mud-application-layout-rtl .mud-input:focus-within~label.mud-input-label.mud-input-label-inputcontrol.mud-input-label-outlined{transform:translate(-14px, -6px) scale(0.75)}.mud-input-content-placement-start{flex-direction:row-reverse}.mud-input-content-placement-start.mud-input-with-content{margin-left:16px;margin-inline-start:16px}.mud-input-content-placement-end{flex-direction:row}.mud-input-content-placement-end.mud-input-with-content{margin-right:16px;margin-inline-end:16px}.mud-input-content-placement-top{margin-inline-end:unset;flex-direction:column-reverse}.mud-input-content-placement-top.mud-input-with-content{margin-left:16px;margin-inline-start:16px}.mud-input-content-placement-bottom{margin-inline-end:unset;flex-direction:column}.mud-input-content-placement-bottom.mud-input-with-content{margin-left:16px;margin-inline-start:16px}.mud-file-upload{flex-grow:0}.mud-file-upload>.mud-input-control-input-container{display:initial !important}.mud-file-upload.mud-input-control{margin-top:0}.mud-image.fluid{max-width:100%;height:auto}.mud-overlay{top:0;left:0;right:0;bottom:0;margin:0 !important;align-items:center;justify-content:center;border-radius:inherit;display:flex;position:fixed;transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1),z-index 1ms;z-index:5}.mud-overlay.mud-overlay-absolute{position:absolute}.mud-overlay .mud-overlay-scrim{top:0;left:0;right:0;bottom:0;border-radius:inherit;position:absolute;height:100%;width:100%;border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);animation:mud-animation-fadein ease .15s;-webkit-animation:mud-animation-fadein ease .15s;-moz-animation:mud-animation-fadein ease .15s;-o-animation:mud-animation-fadein ease .15s}.mud-overlay .mud-overlay-scrim.mud-overlay-dark{border-color:var(--mud-palette-overlay-dark);background-color:var(--mud-palette-overlay-dark)}.mud-overlay .mud-overlay-scrim.mud-overlay-light{border-color:var(--mud-palette-overlay-light);background-color:var(--mud-palette-overlay-light)}.mud-overlay .mud-overlay-scrim:hover{cursor:default}.mud-overlay .mud-overlay-content{position:relative}.mud-overlay.mud-overlay-popover{z-index:var(--mud-zindex-popover)}.mud-overlay.mud-overlay-dialog{z-index:calc(var(--mud-zindex-dialog) + 1)}.mud-overlay.mud-overlay-drawer{z-index:calc(var(--mud-zindex-appbar) + 1)}.mud-treeview{margin:0px;padding:0px;list-style:none;overflow:auto}.mud-treeview.mud-treeview-selected-primary .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-primary);--mud-ripple-color: var(--mud-palette-primary);background-color:var(--mud-palette-primary-hover)}.mud-treeview.mud-treeview-selected-secondary .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-secondary);--mud-ripple-color: var(--mud-palette-secondary);background-color:var(--mud-palette-secondary-hover)}.mud-treeview.mud-treeview-selected-tertiary .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-tertiary);--mud-ripple-color: var(--mud-palette-tertiary);background-color:var(--mud-palette-tertiary-hover)}.mud-treeview.mud-treeview-selected-info .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-info);--mud-ripple-color: var(--mud-palette-info);background-color:var(--mud-palette-info-hover)}.mud-treeview.mud-treeview-selected-success .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-success);--mud-ripple-color: var(--mud-palette-success);background-color:var(--mud-palette-success-hover)}.mud-treeview.mud-treeview-selected-warning .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-warning);--mud-ripple-color: var(--mud-palette-warning);background-color:var(--mud-palette-warning-hover)}.mud-treeview.mud-treeview-selected-error .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-error);--mud-ripple-color: var(--mud-palette-error);background-color:var(--mud-palette-error-hover)}.mud-treeview.mud-treeview-selected-dark .mud-treeview-item-content.mud-treeview-item-selected{color:var(--mud-palette-dark);--mud-ripple-color: var(--mud-palette-dark);background-color:var(--mud-palette-dark-hover)}.mud-treeview.mud-treeview-checked-primary .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-primary)}.mud-treeview.mud-treeview-checked-secondary .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-secondary)}.mud-treeview.mud-treeview-checked-tertiary .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-tertiary)}.mud-treeview.mud-treeview-checked-info .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-info)}.mud-treeview.mud-treeview-checked-success .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-success)}.mud-treeview.mud-treeview-checked-warning .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-warning)}.mud-treeview.mud-treeview-checked-error .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-error)}.mud-treeview.mud-treeview-checked-dark .mud-treeview-item-checkbox .mud-button-root.mud-icon-button{color:var(--mud-palette-dark)}.mud-treeview-group{margin:0px;padding:0px;margin-left:17px;margin-inline-start:17px;margin-inline-end:unset;list-style:none}.mud-treeview-item{margin:0;outline:0;padding:0;cursor:default;list-style:none;min-height:2rem;align-items:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mud-treeview-item .mud-treeview-item-arrow .mud-icon-button,.mud-treeview-item .mud-treeview-item-checkbox .mud-icon-button{padding:4px}.mud-treeview-item.mud-treeview-item-disabled{color:var(--mud-palette-action-disabled) !important;cursor:default !important;pointer-events:none !important}.mud-treeview-item-content{width:100%;display:flex;padding:4px 8px;align-items:center;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-treeview-hover .mud-treeview-item-content:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-treeview-item-arrow{width:2rem;display:flex;flex-shrink:0;margin:0 4px;min-height:32px;justify-content:center}.mud-treeview-item-arrow .mud-treeview-item-arrow-expand{transition:.3s cubic-bezier(0.25, 0.8, 0.5, 1),visibility 0s}.mud-treeview-item-arrow .mud-treeview-item-arrow-expand.mud-transform{transform:rotate(90deg)}.mud-treeview-item-arrow .mud-treeview-item-arrow-load{animation:rotation 1s infinite linear}.mud-treeview-item-icon{width:32px;display:flex;flex-shrink:0;margin-right:4px;margin-inline-end:4px;margin-inline-start:unset;justify-content:center}.mud-treeview-item-label{flex-grow:1;padding-left:4px;padding-right:4px}.mud-treeview-dense .mud-treeview-item{min-height:unset}.mud-treeview-dense .mud-treeview-item-content{padding:1px 4px}.mud-treeview-dense .mud-treeview-item-arrow{min-height:unset}.mud-treeview-dense .mud-icon-button{padding:0}.mud-treeview-select-none{user-select:none}@keyframes rotation{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.mud-application-layout-rtl .mud-treeview-item-arrow{transform:scaleX(-1)}.mud-data-grid th{position:relative}.mud-data-grid .drop-allowed{color:var(--mud-palette-success)}.mud-data-grid .drop-not-allowed{color:var(--mud-palette-error)}.mud-data-grid .drag-icon-options{transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;opacity:0;cursor:grab}.mud-data-grid .mud-table-cell.edit-mode-cell .mud-input-control{margin:0 !important}.mud-data-grid .mud-table-cell.edit-mode-cell .mud-input{font-size:inherit}.mud-data-grid .mud-table-cell.edit-mode-cell .mud-input:before{content:none}.mud-data-grid .mud-table-cell.edit-mode-cell .mud-inputafter{content:none}.mud-data-grid .mud-table-cell.edit-mode-cell .mud-input .mud-input-outlined-border{border:none}.mud-data-grid .mud-table-cell.filter-header-cell{padding:6px 24px 6px 16px;padding-inline-start:16px;padding-inline-end:24px}.mud-data-grid .mud-table-cell.sticky-left,.mud-data-grid .mud-table-cell.sticky-right{position:sticky;background-color:var(--mud-palette-background-gray);z-index:1}.mud-data-grid .mud-table-cell.sticky-left{left:0px}.mud-data-grid .mud-table-cell.sticky-right{right:0px}.mud-data-grid .mud-table-cell:not(.mud-table-child-content) .mud-input-text{margin-top:0 !important}.mud-data-grid .mud-table-cell .column-header{display:flex;align-items:center;justify-content:space-between}.mud-data-grid .mud-table-cell .column-header .sortable-column-header{width:100%}@media(hover: hover)and (pointer: fine){.mud-data-grid .mud-table-cell .column-header:hover .column-options .sort-direction-icon,.mud-data-grid .mud-table-cell .column-header:hover .column-options .column-options-icon,.mud-data-grid .mud-table-cell .column-header:hover .column-options .drag-icon-options{opacity:.8;color:var(--mud-palette-action-default)}.mud-data-grid .mud-table-cell .column-header:hover .column-options .mud-menu .mud-icon-button-label{opacity:1;color:var(--mud-palette-action-default)}}.mud-data-grid .mud-table-cell .column-header .column-options{display:inline-flex;align-items:center;flex-direction:inherit;justify-content:flex-start}.mud-data-grid .mud-table-cell .column-header .sort-direction-icon{font-size:18px;margin-left:4px;margin-inline-start:4px;margin-inline-end:unset;user-select:none;transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;opacity:0}.mud-data-grid .mud-table-cell .column-header .sort-direction-icon.mud-direction-desc{opacity:1;transform:rotate(180deg)}.mud-data-grid .mud-table-cell .column-header .sort-direction-icon.mud-direction-asc{opacity:1;transform:rotate(0deg)}.mud-data-grid .mud-table-cell .column-header .mud-sort-index{transform:scale(0.9) translate(-2px, -2px)}.mud-data-grid .mud-table-cell .column-header .column-options .mud-menu .mud-icon-button-label{user-select:none;transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;opacity:0}.mud-data-grid .mud-table-cell .mud-resizer{position:absolute;top:0;right:0;width:8px;cursor:col-resize;user-select:none}.mud-application-layout-rtl .mud-data-grid .mud-table-cell .mud-resizer{right:auto;left:0}@media(hover: hover)and (pointer: fine){.mud-data-grid .mud-table-cell .mud-resizer:hover{border-right:2px solid var(--mud-palette-primary)}}.mud-data-grid .mud-table-cell .mud-resizing{border-right:2px solid var(--mud-palette-primary)}.mud-data-grid .mud-table-cell.mud-datagrid-group{background-color:var(--mud-palette-background-gray)}.mud-data-grid .mud-table-cell.mud-row-group-indented-2{padding-left:48px !important}.mud-data-grid .mud-table-cell.mud-row-group-indented-3{padding-left:96px !important}.mud-data-grid .mud-table-cell.mud-row-group-indented-4{padding-left:144px !important}.mud-data-grid .mud-table-cell.mud-row-group-indented-5{padding-left:192px !important}@media(hover: hover)and (pointer: fine){.mud-data-grid-columns-panel:hover .column-options .sort-direction-icon,.mud-data-grid-columns-panel:hover .column-options .column-options-icon,.mud-data-grid-columns-panel:hover .column-options .drag-icon-options{opacity:.8;color:var(--mud-palette-action-default)}.mud-data-grid-columns-panel:hover .column-options .mud-menu .mud-icon-button-label{opacity:1;color:var(--mud-palette-action-default)}}.mud-data-grid-columns-panel .sort-direction-icon{font-size:18px;margin-left:4px;margin-inline-start:4px;margin-inline-end:unset;user-select:none;transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.mud-data-grid-columns-panel .sort-direction-icon.mud-direction-desc{opacity:1;transform:rotate(180deg)}.mud-data-grid-columns-panel .sort-direction-icon.mud-direction-asc{opacity:1;transform:rotate(0deg)}.mud-data-grid-columns-panel .mud-sort-index{transform:scale(0.9) translate(-2px, -2px)}.mud-data-grid-columns-panel .drag-icon-options{transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;opacity:1;cursor:grab}.mud-data-grid-columns-panel .mud-drop-item-preview-start{z-index:0}.mud-toggle-group{display:grid;overflow:hidden;box-sizing:border-box;border-radius:var(--mud-default-borderradius)}.mud-toggle-group>.mud-toggle-item{box-shadow:none;border-width:inherit;border-color:inherit;border-radius:0}.mud-toggle-group-outlined{border-width:1px;border-color:rgba(var(--mud-palette-text-primary-rgb), var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-primary{border-color:rgba(var(--mud-palette-primary-rgb), var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-secondary{border-color:rgba(var(--mud-palette-secondary-rgb), var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-tertiary{border-color:rgba(var(--mud-palette-tertiary-rgb), var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-info{border-color:rgba(var(--mud-palette-info-rgb), var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-success{border-color:rgba(var(--mud-palette-success-rgb), var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-warning{border-color:rgba(var(--mud-palette-warning-rgb), var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-error{border-color:rgba(var(--mud-palette-error-rgb), var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-dark{border-color:rgba(var(--mud-palette-dark-rgb), var(--mud-palette-border-opacity))}.mud-toggle-group-outlined.mud-toggle-group-horizontal:not(.mud-toggle-group-rtl)>.mud-toggle-item:not(:first-child),.mud-toggle-group-outlined.mud-toggle-group-horizontal:not(.mud-toggle-group-rtl)>:not(:first-child) .mud-toggle-item{margin-left:-1px}.mud-toggle-group-outlined.mud-toggle-group-horizontal:not(.mud-toggle-group-rtl)>.mud-toggle-item:not(:first-child).mud-toggle-item-delimiter,.mud-toggle-group-outlined.mud-toggle-group-horizontal:not(.mud-toggle-group-rtl)>:not(:first-child) .mud-toggle-item.mud-toggle-item-delimiter{border-left-style:solid !important}.mud-toggle-group-outlined.mud-toggle-group-horizontal.mud-toggle-group-rtl>.mud-toggle-item:not(:last-child),.mud-toggle-group-outlined.mud-toggle-group-horizontal.mud-toggle-group-rtl>:not(:last-child) .mud-toggle-item{margin-left:-1px}.mud-toggle-group-outlined.mud-toggle-group-horizontal.mud-toggle-group-rtl>.mud-toggle-item:not(:last-child).mud-toggle-item-delimiter,.mud-toggle-group-outlined.mud-toggle-group-horizontal.mud-toggle-group-rtl>:not(:last-child) .mud-toggle-item.mud-toggle-item-delimiter{border-left-style:solid !important}.mud-toggle-group-outlined.mud-toggle-group-vertical>.mud-toggle-item:not(:first-child),.mud-toggle-group-outlined.mud-toggle-group-vertical>:not(:first-child) .mud-toggle-item{margin-top:-1px}.mud-toggle-group-outlined.mud-toggle-group-vertical>.mud-toggle-item:not(:first-child).mud-toggle-item-delimiter,.mud-toggle-group-outlined.mud-toggle-group-vertical>:not(:first-child) .mud-toggle-item.mud-toggle-item-delimiter{border-top-style:solid !important}.mud-toggle-item{padding:6px;min-width:auto;border-style:none !important;display:flex;justify-content:center}.mud-toggle-item>.mud-button-label{min-height:20px}.mud-toggle-item .mud-toggle-item-check-icon{margin:0 6px;font-size:20px}.mud-toggle-item-size-small{padding:4px}.mud-toggle-item-size-small .mud-toggle-item-check-icon{margin:0 4px;font-size:18px}.mud-toggle-item-size-large{padding:8px}.mud-toggle-item-size-large .mud-toggle-item-check-icon{margin:0 8px;font-size:22px}.mud-toggle-item-fixed>.mud-button-label:has(>.mud-toggle-item-check-icon){display:grid;grid-template-columns:1fr repeat(3, auto) 1fr}.mud-toggle-item-check-icon{justify-self:start}.mud-toggle-item-content{display:contents}.mud-stepper .mud-stepper-nav .mud-step{padding:24px;position:relative;cursor:default;pointer-events:none;user-select:text}.mud-stepper .mud-stepper-nav .mud-step.mud-clickable{cursor:pointer;pointer-events:auto;user-select:none;transition:background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}@media(hover: hover)and (pointer: fine){.mud-stepper .mud-stepper-nav .mud-step.mud-clickable:hover{background-color:var(--mud-palette-action-default-hover)}}.mud-stepper .mud-stepper-nav .mud-step.mud-clickable:focus-visible,.mud-stepper .mud-stepper-nav .mud-step.mud-clickable:active{background-color:var(--mud-palette-action-default-hover)}.mud-stepper .mud-stepper-nav .mud-step:disabled .mud-step-label-icon{background-color:var(--mud-palette-lines-default) !important;color:var(--mud-palette-text-disabled) !important}.mud-stepper .mud-stepper-nav .mud-step:disabled .mud-step-label-content{color:var(--mud-palette-text-disabled) !important}.mud-stepper .mud-stepper-nav .mud-step .mud-step-label{display:flex;align-items:center;flex-direction:row;height:100%;gap:8px}.mud-stepper .mud-stepper-nav .mud-step .mud-step-label .mud-step-label-icon{display:flex;flex-shrink:0;color:var(--mud-palette-white);border-radius:50%;background-color:var(--mud-palette-text-disabled);height:24px;width:24px;align-items:center;justify-content:center;font-size:12px;letter-spacing:0;text-indent:0;white-space:nowrap}.mud-stepper .mud-stepper-nav .mud-step .mud-step-label .mud-step-label-icon .mud-typography{line-height:1}.mud-stepper .mud-stepper-nav .mud-step .mud-step-label .mud-step-label-content{width:100%;color:var(--mud-palette-text-secondary);--mud-ripple-color: var(--mud-palette-text-secondary);text-align:start}.mud-stepper .mud-stepper-nav .mud-step .mud-step-label .mud-step-label-content-title{line-height:var(--mud-typography-body2-lineheight)}.mud-stepper .mud-stepper-nav .mud-step.active .mud-step-label-content{color:var(--mud-palette-text-primary);--mud-ripple-color: var(--mud-palette-text-primary)}.mud-stepper .mud-stepper-nav.mud-stepper-nav-scrollable{overflow:auto}.mud-stepper .mud-stepper-nav.mud-stepper-nav-scrollable .mud-step{min-width:fit-content}.mud-stepper .mud-stepper-nav.mud-stepper-nav-scrollable .mud-stepper-nav-connector{min-width:32px}.mud-stepper .mud-stepper-content{padding:0 24px}.mud-stepper .mud-stepper-nav-connector{flex:1 1 auto}.mud-stepper .mud-stepper-nav-connector .mud-stepper-nav-connector-line{display:block;border-color:var(--mud-palette-lines-inputs)}.mud-stepper.mud-stepper__horizontal .mud-stepper-nav{display:flex}.mud-stepper.mud-stepper__horizontal.mud-stepper__center-labels .mud-step{flex-basis:175px}.mud-stepper.mud-stepper__horizontal.mud-stepper__center-labels .mud-step-label{flex-direction:column;justify-content:flex-start;align-items:center}.mud-stepper.mud-stepper__horizontal.mud-stepper__center-labels .mud-step-label .mud-step-label-icon{margin-inline-end:0px !important}.mud-stepper.mud-stepper__horizontal.mud-stepper__center-labels .mud-step-label .mud-step-label-content{margin-top:12px;text-align:center}.mud-stepper.mud-stepper__horizontal.mud-stepper__center-labels .mud-stepper-nav-connector{margin:35px -67px 0;align-self:flex-start}.mud-stepper.mud-stepper__horizontal .mud-stepper-nav-connector{align-self:center;margin:0 -16px}.mud-stepper.mud-stepper__horizontal .mud-stepper-nav-connector .mud-stepper-nav-connector-line{border-top-style:solid;border-top-width:1px}.mud-stepper.mud-stepper__vertical .mud-stepper-nav{padding:8px 0px}.mud-stepper.mud-stepper__vertical .mud-step{padding:0 16px}.mud-stepper.mud-stepper__vertical .mud-step .mud-step-label{padding:8px 0px}.mud-stepper.mud-stepper__vertical .mud-stepper-nav-connector{margin-inline-start:28px;margin-inline-end:0}.mud-stepper.mud-stepper__vertical .mud-stepper-nav-connector .mud-stepper-nav-connector-line{border-inline-start:1px solid #bdbdbd;min-height:24px}.mud-stepper.mud-stepper__vertical .mud-stepper-content{margin-inline-start:28px;margin-inline-end:0;padding-inline-start:20px;padding-inline-end:0;border-inline-start:1px solid var(--mud-palette-lines-inputs)}.mud-stepper-step-button{display:inline-flex;-moz-box-align:center;align-items:center;-moz-box-pack:center;justify-content:center;position:relative;background-color:rgba(0,0,0,0);outline:0px;border:0px;border-radius:0px;cursor:pointer;user-select:none;vertical-align:middle;appearance:none;text-decoration:none;color:inherit;width:100%;padding:24px 16px;margin:-24px -16px;box-sizing:content-box}.mud-swipearea{touch-action:none}.rounded-0{border-radius:0 !important}.rounded-t-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-r-0,.rounded-e-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-b-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-l-0,.rounded-s-0{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-tl-0,.rounded-ts-0{border-top-left-radius:0 !important}.rounded-tr-0,.rounded-te-0{border-top-right-radius:0 !important}.rounded-br-0,.rounded-be-0{border-bottom-right-radius:0 !important}.rounded-bl-0,.rounded-bs-0{border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-s-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-e-0{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.mud-application-layout-rtl .rounded-ts-0{border-top-right-radius:0 !important;border-top-left-radius:0 !important}.mud-application-layout-rtl .rounded-te-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.mud-application-layout-rtl .rounded-bs-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-be-0{border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-sm{border-radius:2px !important}.rounded-t-sm{border-top-left-radius:2px !important;border-top-right-radius:2px !important}.rounded-r-sm,.rounded-e-sm{border-top-right-radius:2px !important;border-bottom-right-radius:2px !important}.rounded-b-sm{border-bottom-right-radius:2px !important;border-bottom-left-radius:2px !important}.rounded-l-sm,.rounded-s-sm{border-top-left-radius:2px !important;border-bottom-left-radius:2px !important}.rounded-tl-sm,.rounded-ts-sm{border-top-left-radius:2px !important}.rounded-tr-sm,.rounded-te-sm{border-top-right-radius:2px !important}.rounded-br-sm,.rounded-be-sm{border-bottom-right-radius:2px !important}.rounded-bl-sm,.rounded-bs-sm{border-bottom-left-radius:2px !important}.mud-application-layout-rtl .rounded-s-sm{border-top-right-radius:2px !important;border-bottom-right-radius:2px !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-e-sm{border-top-left-radius:2px !important;border-bottom-left-radius:2px !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.mud-application-layout-rtl .rounded-ts-sm{border-top-right-radius:2px !important;border-top-left-radius:0 !important}.mud-application-layout-rtl .rounded-te-sm{border-top-left-radius:2px !important;border-top-right-radius:0 !important}.mud-application-layout-rtl .rounded-bs-sm{border-bottom-right-radius:2px !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-be-sm{border-bottom-left-radius:2px !important;border-bottom-right-radius:0 !important}.rounded-lg{border-radius:8px !important}.rounded-t-lg{border-top-left-radius:8px !important;border-top-right-radius:8px !important}.rounded-r-lg,.rounded-e-lg{border-top-right-radius:8px !important;border-bottom-right-radius:8px !important}.rounded-b-lg{border-bottom-right-radius:8px !important;border-bottom-left-radius:8px !important}.rounded-l-lg,.rounded-s-lg{border-top-left-radius:8px !important;border-bottom-left-radius:8px !important}.rounded-tl-lg,.rounded-ts-lg{border-top-left-radius:8px !important}.rounded-tr-lg,.rounded-te-lg{border-top-right-radius:8px !important}.rounded-br-lg,.rounded-be-lg{border-bottom-right-radius:8px !important}.rounded-bl-lg,.rounded-bs-lg{border-bottom-left-radius:8px !important}.mud-application-layout-rtl .rounded-s-lg{border-top-right-radius:8px !important;border-bottom-right-radius:8px !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-e-lg{border-top-left-radius:8px !important;border-bottom-left-radius:8px !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.mud-application-layout-rtl .rounded-ts-lg{border-top-right-radius:8px !important;border-top-left-radius:0 !important}.mud-application-layout-rtl .rounded-te-lg{border-top-left-radius:8px !important;border-top-right-radius:0 !important}.mud-application-layout-rtl .rounded-bs-lg{border-bottom-right-radius:8px !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-be-lg{border-bottom-left-radius:8px !important;border-bottom-right-radius:0 !important}.rounded-xl{border-radius:24px !important}.rounded-t-xl{border-top-left-radius:24px !important;border-top-right-radius:24px !important}.rounded-r-xl,.rounded-e-xl{border-top-right-radius:24px !important;border-bottom-right-radius:24px !important}.rounded-b-xl{border-bottom-right-radius:24px !important;border-bottom-left-radius:24px !important}.rounded-l-xl,.rounded-s-xl{border-top-left-radius:24px !important;border-bottom-left-radius:24px !important}.rounded-tl-xl,.rounded-ts-xl{border-top-left-radius:24px !important}.rounded-tr-xl,.rounded-te-xl{border-top-right-radius:24px !important}.rounded-br-xl,.rounded-be-xl{border-bottom-right-radius:24px !important}.rounded-bl-xl,.rounded-bs-xl{border-bottom-left-radius:24px !important}.mud-application-layout-rtl .rounded-s-xl{border-top-right-radius:24px !important;border-bottom-right-radius:24px !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-e-xl{border-top-left-radius:24px !important;border-bottom-left-radius:24px !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.mud-application-layout-rtl .rounded-ts-xl{border-top-right-radius:24px !important;border-top-left-radius:0 !important}.mud-application-layout-rtl .rounded-te-xl{border-top-left-radius:24px !important;border-top-right-radius:0 !important}.mud-application-layout-rtl .rounded-bs-xl{border-bottom-right-radius:24px !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-be-xl{border-bottom-left-radius:24px !important;border-bottom-right-radius:0 !important}.rounded{border-radius:var(--mud-default-borderradius) !important}.rounded-t{border-top-left-radius:var(--mud-default-borderradius) !important;border-top-right-radius:var(--mud-default-borderradius) !important}.rounded-r,.rounded-e{border-top-right-radius:var(--mud-default-borderradius) !important;border-bottom-right-radius:var(--mud-default-borderradius) !important}.rounded-b{border-bottom-right-radius:var(--mud-default-borderradius) !important;border-bottom-left-radius:var(--mud-default-borderradius) !important}.rounded-l,.rounded-s{border-top-left-radius:var(--mud-default-borderradius) !important;border-bottom-left-radius:var(--mud-default-borderradius) !important}.rounded-tl,.rounded-ts{border-top-left-radius:var(--mud-default-borderradius) !important}.rounded-tr,.rounded-te{border-top-right-radius:var(--mud-default-borderradius) !important}.rounded-br,.rounded-be{border-bottom-right-radius:var(--mud-default-borderradius) !important}.rounded-bl,.rounded-bs{border-bottom-left-radius:var(--mud-default-borderradius) !important}.mud-application-layout-rtl .rounded-s{border-top-right-radius:var(--mud-default-borderradius) !important;border-bottom-right-radius:var(--mud-default-borderradius) !important;border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-e{border-top-left-radius:var(--mud-default-borderradius) !important;border-bottom-left-radius:var(--mud-default-borderradius) !important;border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.mud-application-layout-rtl .rounded-ts{border-top-right-radius:var(--mud-default-borderradius) !important;border-top-left-radius:0 !important}.mud-application-layout-rtl .rounded-te{border-top-left-radius:var(--mud-default-borderradius) !important;border-top-right-radius:0 !important}.mud-application-layout-rtl .rounded-bs{border-bottom-right-radius:var(--mud-default-borderradius) !important;border-bottom-left-radius:0 !important}.mud-application-layout-rtl .rounded-be{border-bottom-left-radius:var(--mud-default-borderradius) !important;border-bottom-right-radius:0 !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:9999px !important}.border-solid{border-style:solid !important}.border-dashed{border-style:dashed !important}.border-dotted{border-style:dotted !important}.border-double{border-style:double !important}.border-hidden{border-style:hidden !important}.border-none{border-style:none !important}.border-0{border-width:0px !important}.border-t-0{border-top-width:0px !important}.border-r-0{border-right-width:0px !important}.border-b-0{border-bottom-width:0px !important}.border-l-0{border-left-width:0px !important}.border-x-0{border-left-width:0px !important;border-right-width:0px !important}.border-y-0{border-top-width:0px !important;border-bottom-width:0px !important}.border{border-width:1px !important}.border-t{border-top-width:1px !important}.border-r{border-right-width:1px !important}.border-b{border-bottom-width:1px !important}.border-l{border-left-width:1px !important}.border-x{border-left-width:1px !important;border-right-width:1px !important}.border-y{border-top-width:1px !important;border-bottom-width:1px !important}.border-2{border-width:2px !important}.border-t-2{border-top-width:2px !important}.border-r-2{border-right-width:2px !important}.border-b-2{border-bottom-width:2px !important}.border-l-2{border-left-width:2px !important}.border-x-2{border-left-width:2px !important;border-right-width:2px !important}.border-y-2{border-top-width:2px !important;border-bottom-width:2px !important}.border-4{border-width:4px !important}.border-t-4{border-top-width:4px !important}.border-r-4{border-right-width:4px !important}.border-b-4{border-bottom-width:4px !important}.border-l-4{border-left-width:4px !important}.border-x-4{border-left-width:4px !important;border-right-width:4px !important}.border-y-4{border-top-width:4px !important;border-bottom-width:4px !important}.border-8{border-width:8px !important}.border-t-8{border-top-width:8px !important}.border-r-8{border-right-width:8px !important}.border-b-8{border-bottom-width:8px !important}.border-l-8{border-left-width:8px !important}.border-x-8{border-left-width:8px !important;border-right-width:8px !important}.border-y-8{border-top-width:8px !important;border-bottom-width:8px !important}.outline-none{outline-style:none}.outline-solid{outline-style:solid}.outline-dashed{outline-style:dashed}.outline-dotted{outline-style:dotted}.outline-double{outline-style:double}.outline-hidden{outline-style:hidden}.flex-1{flex:1 1 0% !important}.flex-auto{flex:1 1 auto !important}.flex-initial{flex:0 1 auto !important}.flex-none{flex:none !important}.flex-row{flex-direction:row !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column{flex-direction:column !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-grow-start>*:first-child{flex-grow:1 !important}.flex-grow-end>*:last-child{flex-grow:1 !important}.flex-grow-start-and-end>:first-child,.flex-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-grow-all>*{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}.justify-start{justify-content:flex-start !important}.justify-end{justify-content:flex-end !important}.justify-center{justify-content:center !important}.justify-space-between{justify-content:space-between !important}.justify-space-around{justify-content:space-around !important}.justify-space-evenly{justify-content:space-evenly !important}.order-first{order:-9999 !important}.order-last{order:9999 !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-6{order:6 !important}.order-7{order:7 !important}.order-8{order:8 !important}.order-9{order:9 !important}.order-10{order:10 !important}.order-11{order:11 !important}.order-12{order:12 !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-space-between{align-content:space-between !important}.align-content-space-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-start{align-items:flex-start !important}.align-end{align-items:flex-end !important}.align-center{align-items:center !important}.align-baseline{align-items:baseline !important}.align-stretch{align-items: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-stretch{align-self:stretch !important}.gap-0{gap:0px}.gap-x-0{column-gap:0px}.gap-y-0{row-gap:0px}.gap-1{gap:4px}.gap-x-1{column-gap:4px}.gap-y-1{row-gap:4px}.gap-2{gap:8px}.gap-x-2{column-gap:8px}.gap-y-2{row-gap:8px}.gap-3{gap:12px}.gap-x-3{column-gap:12px}.gap-y-3{row-gap:12px}.gap-4{gap:16px}.gap-x-4{column-gap:16px}.gap-y-4{row-gap:16px}.gap-5{gap:20px}.gap-x-5{column-gap:20px}.gap-y-5{row-gap:20px}.gap-6{gap:24px}.gap-x-6{column-gap:24px}.gap-y-6{row-gap:24px}.gap-7{gap:28px}.gap-x-7{column-gap:28px}.gap-y-7{row-gap:28px}.gap-8{gap:32px}.gap-x-8{column-gap:32px}.gap-y-8{row-gap:32px}.gap-9{gap:36px}.gap-x-9{column-gap:36px}.gap-y-9{row-gap:36px}.gap-10{gap:40px}.gap-x-10{column-gap:40px}.gap-y-10{row-gap:40px}.gap-11{gap:44px}.gap-x-11{column-gap:44px}.gap-y-11{row-gap:44px}.gap-12{gap:48px}.gap-x-12{column-gap:48px}.gap-y-12{row-gap:48px}.gap-13{gap:52px}.gap-x-13{column-gap:52px}.gap-y-13{row-gap:52px}.gap-14{gap:56px}.gap-x-14{column-gap:56px}.gap-y-14{row-gap:56px}.gap-15{gap:60px}.gap-x-15{column-gap:60px}.gap-y-15{row-gap:60px}.gap-16{gap:64px}.gap-x-16{column-gap:64px}.gap-y-16{row-gap:64px}.gap-17{gap:68px}.gap-x-17{column-gap:68px}.gap-y-17{row-gap:68px}.gap-18{gap:72px}.gap-x-18{column-gap:72px}.gap-y-18{row-gap:72px}.gap-19{gap:76px}.gap-x-19{column-gap:76px}.gap-y-19{row-gap:76px}.gap-20{gap:80px}.gap-x-20{column-gap:80px}.gap-y-20{row-gap:80px}@media(min-width: 600px){.flex-sm-1{flex:1 1 0% !important}.flex-sm-auto{flex:1 1 auto !important}.flex-sm-initial{flex:0 1 auto !important}.flex-sm-none{flex:none !important}.flex-sm-row{flex-direction:row !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column{flex-direction:column !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-grow-start>*:first-child{flex-grow:1 !important}.flex-sm-grow-end>*:last-child{flex-grow:1 !important}.flex-sm-grow-start-and-end>:first-child,.flex-sm-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-sm-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-sm-grow-all>*{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}.justify-sm-start{justify-content:flex-start !important}.justify-sm-end{justify-content:flex-end !important}.justify-sm-center{justify-content:center !important}.justify-sm-space-between{justify-content:space-between !important}.justify-sm-space-around{justify-content:space-around !important}.justify-sm-space-evenly{justify-content:space-evenly !important}.order-sm-first{order:-9999 !important}.order-sm-last{order:9999 !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-6{order:6 !important}.order-sm-7{order:7 !important}.order-sm-8{order:8 !important}.order-sm-9{order:9 !important}.order-sm-10{order:10 !important}.order-sm-11{order:11 !important}.order-sm-12{order:12 !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-space-between{align-content:space-between !important}.align-content-sm-space-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-sm-start{align-items:flex-start !important}.align-sm-end{align-items:flex-end !important}.align-sm-center{align-items:center !important}.align-sm-baseline{align-items:baseline !important}.align-sm-stretch{align-items: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-stretch{align-self:stretch !important}.gap-sm-0{gap:0px}.gap-x-sm-0{column-gap:0px}.gap-y-sm-0{row-gap:0px}.gap-sm-1{gap:4px}.gap-x-sm-1{column-gap:4px}.gap-y-sm-1{row-gap:4px}.gap-sm-2{gap:8px}.gap-x-sm-2{column-gap:8px}.gap-y-sm-2{row-gap:8px}.gap-sm-3{gap:12px}.gap-x-sm-3{column-gap:12px}.gap-y-sm-3{row-gap:12px}.gap-sm-4{gap:16px}.gap-x-sm-4{column-gap:16px}.gap-y-sm-4{row-gap:16px}.gap-sm-5{gap:20px}.gap-x-sm-5{column-gap:20px}.gap-y-sm-5{row-gap:20px}.gap-sm-6{gap:24px}.gap-x-sm-6{column-gap:24px}.gap-y-sm-6{row-gap:24px}.gap-sm-7{gap:28px}.gap-x-sm-7{column-gap:28px}.gap-y-sm-7{row-gap:28px}.gap-sm-8{gap:32px}.gap-x-sm-8{column-gap:32px}.gap-y-sm-8{row-gap:32px}.gap-sm-9{gap:36px}.gap-x-sm-9{column-gap:36px}.gap-y-sm-9{row-gap:36px}.gap-sm-10{gap:40px}.gap-x-sm-10{column-gap:40px}.gap-y-sm-10{row-gap:40px}.gap-sm-11{gap:44px}.gap-x-sm-11{column-gap:44px}.gap-y-sm-11{row-gap:44px}.gap-sm-12{gap:48px}.gap-x-sm-12{column-gap:48px}.gap-y-sm-12{row-gap:48px}.gap-sm-13{gap:52px}.gap-x-sm-13{column-gap:52px}.gap-y-sm-13{row-gap:52px}.gap-sm-14{gap:56px}.gap-x-sm-14{column-gap:56px}.gap-y-sm-14{row-gap:56px}.gap-sm-15{gap:60px}.gap-x-sm-15{column-gap:60px}.gap-y-sm-15{row-gap:60px}.gap-sm-16{gap:64px}.gap-x-sm-16{column-gap:64px}.gap-y-sm-16{row-gap:64px}.gap-sm-17{gap:68px}.gap-x-sm-17{column-gap:68px}.gap-y-sm-17{row-gap:68px}.gap-sm-18{gap:72px}.gap-x-sm-18{column-gap:72px}.gap-y-sm-18{row-gap:72px}.gap-sm-19{gap:76px}.gap-x-sm-19{column-gap:76px}.gap-y-sm-19{row-gap:76px}.gap-sm-20{gap:80px}.gap-x-sm-20{column-gap:80px}.gap-y-sm-20{row-gap:80px}}@media(min-width: 960px){.flex-md-1{flex:1 1 0% !important}.flex-md-auto{flex:1 1 auto !important}.flex-md-initial{flex:0 1 auto !important}.flex-md-none{flex:none !important}.flex-md-row{flex-direction:row !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column{flex-direction:column !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-grow-start>*:first-child{flex-grow:1 !important}.flex-md-grow-end>*:last-child{flex-grow:1 !important}.flex-md-grow-start-and-end>:first-child,.flex-md-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-md-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-md-grow-all>*{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}.justify-md-start{justify-content:flex-start !important}.justify-md-end{justify-content:flex-end !important}.justify-md-center{justify-content:center !important}.justify-md-space-between{justify-content:space-between !important}.justify-md-space-around{justify-content:space-around !important}.justify-md-space-evenly{justify-content:space-evenly !important}.order-md-first{order:-9999 !important}.order-md-last{order:9999 !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-6{order:6 !important}.order-md-7{order:7 !important}.order-md-8{order:8 !important}.order-md-9{order:9 !important}.order-md-10{order:10 !important}.order-md-11{order:11 !important}.order-md-12{order:12 !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-space-between{align-content:space-between !important}.align-content-md-space-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-md-start{align-items:flex-start !important}.align-md-end{align-items:flex-end !important}.align-md-center{align-items:center !important}.align-md-baseline{align-items:baseline !important}.align-md-stretch{align-items: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-stretch{align-self:stretch !important}.gap-md-0{gap:0px}.gap-x-md-0{column-gap:0px}.gap-y-md-0{row-gap:0px}.gap-md-1{gap:4px}.gap-x-md-1{column-gap:4px}.gap-y-md-1{row-gap:4px}.gap-md-2{gap:8px}.gap-x-md-2{column-gap:8px}.gap-y-md-2{row-gap:8px}.gap-md-3{gap:12px}.gap-x-md-3{column-gap:12px}.gap-y-md-3{row-gap:12px}.gap-md-4{gap:16px}.gap-x-md-4{column-gap:16px}.gap-y-md-4{row-gap:16px}.gap-md-5{gap:20px}.gap-x-md-5{column-gap:20px}.gap-y-md-5{row-gap:20px}.gap-md-6{gap:24px}.gap-x-md-6{column-gap:24px}.gap-y-md-6{row-gap:24px}.gap-md-7{gap:28px}.gap-x-md-7{column-gap:28px}.gap-y-md-7{row-gap:28px}.gap-md-8{gap:32px}.gap-x-md-8{column-gap:32px}.gap-y-md-8{row-gap:32px}.gap-md-9{gap:36px}.gap-x-md-9{column-gap:36px}.gap-y-md-9{row-gap:36px}.gap-md-10{gap:40px}.gap-x-md-10{column-gap:40px}.gap-y-md-10{row-gap:40px}.gap-md-11{gap:44px}.gap-x-md-11{column-gap:44px}.gap-y-md-11{row-gap:44px}.gap-md-12{gap:48px}.gap-x-md-12{column-gap:48px}.gap-y-md-12{row-gap:48px}.gap-md-13{gap:52px}.gap-x-md-13{column-gap:52px}.gap-y-md-13{row-gap:52px}.gap-md-14{gap:56px}.gap-x-md-14{column-gap:56px}.gap-y-md-14{row-gap:56px}.gap-md-15{gap:60px}.gap-x-md-15{column-gap:60px}.gap-y-md-15{row-gap:60px}.gap-md-16{gap:64px}.gap-x-md-16{column-gap:64px}.gap-y-md-16{row-gap:64px}.gap-md-17{gap:68px}.gap-x-md-17{column-gap:68px}.gap-y-md-17{row-gap:68px}.gap-md-18{gap:72px}.gap-x-md-18{column-gap:72px}.gap-y-md-18{row-gap:72px}.gap-md-19{gap:76px}.gap-x-md-19{column-gap:76px}.gap-y-md-19{row-gap:76px}.gap-md-20{gap:80px}.gap-x-md-20{column-gap:80px}.gap-y-md-20{row-gap:80px}}@media(min-width: 1280px){.flex-lg-1{flex:1 1 0% !important}.flex-lg-auto{flex:1 1 auto !important}.flex-lg-initial{flex:0 1 auto !important}.flex-lg-none{flex:none !important}.flex-lg-row{flex-direction:row !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column{flex-direction:column !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-grow-start>*:first-child{flex-grow:1 !important}.flex-lg-grow-end>*:last-child{flex-grow:1 !important}.flex-lg-grow-start-and-end>:first-child,.flex-lg-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-lg-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-lg-grow-all>*{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}.justify-lg-start{justify-content:flex-start !important}.justify-lg-end{justify-content:flex-end !important}.justify-lg-center{justify-content:center !important}.justify-lg-space-between{justify-content:space-between !important}.justify-lg-space-around{justify-content:space-around !important}.justify-lg-space-evenly{justify-content:space-evenly !important}.order-lg-first{order:-9999 !important}.order-lg-last{order:9999 !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-6{order:6 !important}.order-lg-7{order:7 !important}.order-lg-8{order:8 !important}.order-lg-9{order:9 !important}.order-lg-10{order:10 !important}.order-lg-11{order:11 !important}.order-lg-12{order:12 !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-space-between{align-content:space-between !important}.align-content-lg-space-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-lg-start{align-items:flex-start !important}.align-lg-end{align-items:flex-end !important}.align-lg-center{align-items:center !important}.align-lg-baseline{align-items:baseline !important}.align-lg-stretch{align-items: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-stretch{align-self:stretch !important}.gap-lg-0{gap:0px}.gap-x-lg-0{column-gap:0px}.gap-y-lg-0{row-gap:0px}.gap-lg-1{gap:4px}.gap-x-lg-1{column-gap:4px}.gap-y-lg-1{row-gap:4px}.gap-lg-2{gap:8px}.gap-x-lg-2{column-gap:8px}.gap-y-lg-2{row-gap:8px}.gap-lg-3{gap:12px}.gap-x-lg-3{column-gap:12px}.gap-y-lg-3{row-gap:12px}.gap-lg-4{gap:16px}.gap-x-lg-4{column-gap:16px}.gap-y-lg-4{row-gap:16px}.gap-lg-5{gap:20px}.gap-x-lg-5{column-gap:20px}.gap-y-lg-5{row-gap:20px}.gap-lg-6{gap:24px}.gap-x-lg-6{column-gap:24px}.gap-y-lg-6{row-gap:24px}.gap-lg-7{gap:28px}.gap-x-lg-7{column-gap:28px}.gap-y-lg-7{row-gap:28px}.gap-lg-8{gap:32px}.gap-x-lg-8{column-gap:32px}.gap-y-lg-8{row-gap:32px}.gap-lg-9{gap:36px}.gap-x-lg-9{column-gap:36px}.gap-y-lg-9{row-gap:36px}.gap-lg-10{gap:40px}.gap-x-lg-10{column-gap:40px}.gap-y-lg-10{row-gap:40px}.gap-lg-11{gap:44px}.gap-x-lg-11{column-gap:44px}.gap-y-lg-11{row-gap:44px}.gap-lg-12{gap:48px}.gap-x-lg-12{column-gap:48px}.gap-y-lg-12{row-gap:48px}.gap-lg-13{gap:52px}.gap-x-lg-13{column-gap:52px}.gap-y-lg-13{row-gap:52px}.gap-lg-14{gap:56px}.gap-x-lg-14{column-gap:56px}.gap-y-lg-14{row-gap:56px}.gap-lg-15{gap:60px}.gap-x-lg-15{column-gap:60px}.gap-y-lg-15{row-gap:60px}.gap-lg-16{gap:64px}.gap-x-lg-16{column-gap:64px}.gap-y-lg-16{row-gap:64px}.gap-lg-17{gap:68px}.gap-x-lg-17{column-gap:68px}.gap-y-lg-17{row-gap:68px}.gap-lg-18{gap:72px}.gap-x-lg-18{column-gap:72px}.gap-y-lg-18{row-gap:72px}.gap-lg-19{gap:76px}.gap-x-lg-19{column-gap:76px}.gap-y-lg-19{row-gap:76px}.gap-lg-20{gap:80px}.gap-x-lg-20{column-gap:80px}.gap-y-lg-20{row-gap:80px}}@media(min-width: 1920px){.flex-xl-1{flex:1 1 0% !important}.flex-xl-auto{flex:1 1 auto !important}.flex-xl-initial{flex:0 1 auto !important}.flex-xl-none{flex:none !important}.flex-xl-row{flex-direction:row !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column{flex-direction:column !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-grow-start>*:first-child{flex-grow:1 !important}.flex-xl-grow-end>*:last-child{flex-grow:1 !important}.flex-xl-grow-start-and-end>:first-child,.flex-xl-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-xl-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-xl-grow-all>*{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}.justify-xl-start{justify-content:flex-start !important}.justify-xl-end{justify-content:flex-end !important}.justify-xl-center{justify-content:center !important}.justify-xl-space-between{justify-content:space-between !important}.justify-xl-space-around{justify-content:space-around !important}.justify-xl-space-evenly{justify-content:space-evenly !important}.order-xl-first{order:-9999 !important}.order-xl-last{order:9999 !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-6{order:6 !important}.order-xl-7{order:7 !important}.order-xl-8{order:8 !important}.order-xl-9{order:9 !important}.order-xl-10{order:10 !important}.order-xl-11{order:11 !important}.order-xl-12{order:12 !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-space-between{align-content:space-between !important}.align-content-xl-space-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-xl-start{align-items:flex-start !important}.align-xl-end{align-items:flex-end !important}.align-xl-center{align-items:center !important}.align-xl-baseline{align-items:baseline !important}.align-xl-stretch{align-items: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-stretch{align-self:stretch !important}.gap-xl-0{gap:0px}.gap-x-xl-0{column-gap:0px}.gap-y-xl-0{row-gap:0px}.gap-xl-1{gap:4px}.gap-x-xl-1{column-gap:4px}.gap-y-xl-1{row-gap:4px}.gap-xl-2{gap:8px}.gap-x-xl-2{column-gap:8px}.gap-y-xl-2{row-gap:8px}.gap-xl-3{gap:12px}.gap-x-xl-3{column-gap:12px}.gap-y-xl-3{row-gap:12px}.gap-xl-4{gap:16px}.gap-x-xl-4{column-gap:16px}.gap-y-xl-4{row-gap:16px}.gap-xl-5{gap:20px}.gap-x-xl-5{column-gap:20px}.gap-y-xl-5{row-gap:20px}.gap-xl-6{gap:24px}.gap-x-xl-6{column-gap:24px}.gap-y-xl-6{row-gap:24px}.gap-xl-7{gap:28px}.gap-x-xl-7{column-gap:28px}.gap-y-xl-7{row-gap:28px}.gap-xl-8{gap:32px}.gap-x-xl-8{column-gap:32px}.gap-y-xl-8{row-gap:32px}.gap-xl-9{gap:36px}.gap-x-xl-9{column-gap:36px}.gap-y-xl-9{row-gap:36px}.gap-xl-10{gap:40px}.gap-x-xl-10{column-gap:40px}.gap-y-xl-10{row-gap:40px}.gap-xl-11{gap:44px}.gap-x-xl-11{column-gap:44px}.gap-y-xl-11{row-gap:44px}.gap-xl-12{gap:48px}.gap-x-xl-12{column-gap:48px}.gap-y-xl-12{row-gap:48px}.gap-xl-13{gap:52px}.gap-x-xl-13{column-gap:52px}.gap-y-xl-13{row-gap:52px}.gap-xl-14{gap:56px}.gap-x-xl-14{column-gap:56px}.gap-y-xl-14{row-gap:56px}.gap-xl-15{gap:60px}.gap-x-xl-15{column-gap:60px}.gap-y-xl-15{row-gap:60px}.gap-xl-16{gap:64px}.gap-x-xl-16{column-gap:64px}.gap-y-xl-16{row-gap:64px}.gap-xl-17{gap:68px}.gap-x-xl-17{column-gap:68px}.gap-y-xl-17{row-gap:68px}.gap-xl-18{gap:72px}.gap-x-xl-18{column-gap:72px}.gap-y-xl-18{row-gap:72px}.gap-xl-19{gap:76px}.gap-x-xl-19{column-gap:76px}.gap-y-xl-19{row-gap:76px}.gap-xl-20{gap:80px}.gap-x-xl-20{column-gap:80px}.gap-y-xl-20{row-gap:80px}}@media(min-width: 2560px){.flex-xxl-1{flex:1 1 0% !important}.flex-xxl-auto{flex:1 1 auto !important}.flex-xxl-initial{flex:0 1 auto !important}.flex-xxl-none{flex:none !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column{flex-direction:column !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-grow-start>*:first-child{flex-grow:1 !important}.flex-xxl-grow-end>*:last-child{flex-grow:1 !important}.flex-xxl-grow-start-and-end>:first-child,.flex-xxl-grow-start-and-end>:last-child{flex-grow:1 !important}.flex-xxl-grow-middle>*:not(:first-child):not(:last-child){flex-grow:1 !important}.flex-xxl-grow-all>*{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}.justify-xxl-start{justify-content:flex-start !important}.justify-xxl-end{justify-content:flex-end !important}.justify-xxl-center{justify-content:center !important}.justify-xxl-space-between{justify-content:space-between !important}.justify-xxl-space-around{justify-content:space-around !important}.justify-xxl-space-evenly{justify-content:space-evenly !important}.order-xxl-first{order:-9999 !important}.order-xxl-last{order:9999 !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-6{order:6 !important}.order-xxl-7{order:7 !important}.order-xxl-8{order:8 !important}.order-xxl-9{order:9 !important}.order-xxl-10{order:10 !important}.order-xxl-11{order:11 !important}.order-xxl-12{order:12 !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-space-between{align-content:space-between !important}.align-content-xxl-space-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-xxl-start{align-items:flex-start !important}.align-xxl-end{align-items:flex-end !important}.align-xxl-center{align-items:center !important}.align-xxl-baseline{align-items:baseline !important}.align-xxl-stretch{align-items: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-stretch{align-self:stretch !important}.gap-xxl-0{gap:0px}.gap-x-xxl-0{column-gap:0px}.gap-y-xxl-0{row-gap:0px}.gap-xxl-1{gap:4px}.gap-x-xxl-1{column-gap:4px}.gap-y-xxl-1{row-gap:4px}.gap-xxl-2{gap:8px}.gap-x-xxl-2{column-gap:8px}.gap-y-xxl-2{row-gap:8px}.gap-xxl-3{gap:12px}.gap-x-xxl-3{column-gap:12px}.gap-y-xxl-3{row-gap:12px}.gap-xxl-4{gap:16px}.gap-x-xxl-4{column-gap:16px}.gap-y-xxl-4{row-gap:16px}.gap-xxl-5{gap:20px}.gap-x-xxl-5{column-gap:20px}.gap-y-xxl-5{row-gap:20px}.gap-xxl-6{gap:24px}.gap-x-xxl-6{column-gap:24px}.gap-y-xxl-6{row-gap:24px}.gap-xxl-7{gap:28px}.gap-x-xxl-7{column-gap:28px}.gap-y-xxl-7{row-gap:28px}.gap-xxl-8{gap:32px}.gap-x-xxl-8{column-gap:32px}.gap-y-xxl-8{row-gap:32px}.gap-xxl-9{gap:36px}.gap-x-xxl-9{column-gap:36px}.gap-y-xxl-9{row-gap:36px}.gap-xxl-10{gap:40px}.gap-x-xxl-10{column-gap:40px}.gap-y-xxl-10{row-gap:40px}.gap-xxl-11{gap:44px}.gap-x-xxl-11{column-gap:44px}.gap-y-xxl-11{row-gap:44px}.gap-xxl-12{gap:48px}.gap-x-xxl-12{column-gap:48px}.gap-y-xxl-12{row-gap:48px}.gap-xxl-13{gap:52px}.gap-x-xxl-13{column-gap:52px}.gap-y-xxl-13{row-gap:52px}.gap-xxl-14{gap:56px}.gap-x-xxl-14{column-gap:56px}.gap-y-xxl-14{row-gap:56px}.gap-xxl-15{gap:60px}.gap-x-xxl-15{column-gap:60px}.gap-y-xxl-15{row-gap:60px}.gap-xxl-16{gap:64px}.gap-x-xxl-16{column-gap:64px}.gap-y-xxl-16{row-gap:64px}.gap-xxl-17{gap:68px}.gap-x-xxl-17{column-gap:68px}.gap-y-xxl-17{row-gap:68px}.gap-xxl-18{gap:72px}.gap-x-xxl-18{column-gap:72px}.gap-y-xxl-18{row-gap:72px}.gap-xxl-19{gap:76px}.gap-x-xxl-19{column-gap:76px}.gap-y-xxl-19{row-gap:76px}.gap-xxl-20{gap:80px}.gap-x-xxl-20{column-gap:80px}.gap-y-xxl-20{row-gap:80px}}.cursor-auto{cursor:auto !important}.cursor-default{cursor:default !important}.cursor-pointer{cursor:pointer !important}.cursor-wait{cursor:wait !important}.cursor-text{cursor:text !important}.cursor-move{cursor:move !important}.cursor-help{cursor:help !important}.cursor-not-allowed{cursor:not-allowed !important}.cursor-none{cursor:none !important}.cursor-progress{cursor:progress !important}.cursor-cell{cursor:cell !important}.cursor-crosshair{cursor:crosshair !important}.cursor-vertical-text{cursor:vertical-text !important}.cursor-alias{cursor:alias !important}.cursor-copy{cursor:copy !important}.cursor-no-drop{cursor:no-drop !important}.cursor-grab{cursor:grab !important}.cursor-grabbing{cursor:grabbing !important}.cursor-all-scroll{cursor:all-scroll !important}.cursor-col-resize{cursor:col-resize !important}.cursor-row-resize{cursor:row-resize !important}.cursor-n-resize{cursor:n-resize !important}.cursor-w-resize{cursor:w-resize !important}.cursor-zoom-in{cursor:zoom-in !important}.cursor-zoom-out{cursor:zoom-out !important}.cursor-url{cursor:url !important}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-contents{display:contents !important}@media(min-width: 600px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-contents{display:contents !important}}@media(min-width: 960px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-contents{display:contents !important}}@media(min-width: 1280px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-contents{display:contents !important}}@media(min-width: 1920px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-contents{display:contents !important}}@media(min-width: 2560px){.d-xxl-none{display:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !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-contents{display:contents !important}}.object-none{object-fit:none !important}.object-cover{object-fit:cover !important}.object-contain{object-fit:contain !important}.object-fill{object-fit:fill !important}.object-scale-down{object-fit:scale-down !important}.object-center{object-position:center !important}.object-top{object-position:top !important}.object-bottom{object-position:bottom !important}.object-left{object-position:left !important}.object-left-top{object-position:left top !important}.object-left-bottom{object-position:left bottom !important}.object-right{object-position:right !important}.object-right-top{object-position:right top !important}.object-right-bottom{object-position:right bottom !important}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.absolute{position:absolute !important}.fixed{position:fixed !important}.relative{position:relative !important}.static{position:static !important}.sticky{position:sticky !important}.visible{visibility:visible}.invisible{visibility:hidden}[hidden]{display:none !important}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-60{z-index:60}.z-70{z-index:70}.z-80{z-index:80}.z-90{z-index:90}.z-100{z-index:100}.z-auto{z-index:auto}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.ml-0,.mx-0{margin-left:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ms-0{margin-inline-start:0 !important}.me-0{margin-inline-end:0 !important}.ma-0{margin:0 !important}.mt-1,.my-1{margin-top:4px !important}.mr-1,.mx-1{margin-right:4px !important}.ml-1,.mx-1{margin-left:4px !important}.mb-1,.my-1{margin-bottom:4px !important}.ms-1{margin-inline-start:4px !important}.me-1{margin-inline-end:4px !important}.ma-1{margin:4px !important}.mt-2,.my-2{margin-top:8px !important}.mr-2,.mx-2{margin-right:8px !important}.ml-2,.mx-2{margin-left:8px !important}.mb-2,.my-2{margin-bottom:8px !important}.ms-2{margin-inline-start:8px !important}.me-2{margin-inline-end:8px !important}.ma-2{margin:8px !important}.mt-3,.my-3{margin-top:12px !important}.mr-3,.mx-3{margin-right:12px !important}.ml-3,.mx-3{margin-left:12px !important}.mb-3,.my-3{margin-bottom:12px !important}.ms-3{margin-inline-start:12px !important}.me-3{margin-inline-end:12px !important}.ma-3{margin:12px !important}.mt-4,.my-4{margin-top:16px !important}.mr-4,.mx-4{margin-right:16px !important}.ml-4,.mx-4{margin-left:16px !important}.mb-4,.my-4{margin-bottom:16px !important}.ms-4{margin-inline-start:16px !important}.me-4{margin-inline-end:16px !important}.ma-4{margin:16px !important}.mt-5,.my-5{margin-top:20px !important}.mr-5,.mx-5{margin-right:20px !important}.ml-5,.mx-5{margin-left:20px !important}.mb-5,.my-5{margin-bottom:20px !important}.ms-5{margin-inline-start:20px !important}.me-5{margin-inline-end:20px !important}.ma-5{margin:20px !important}.mt-6,.my-6{margin-top:24px !important}.mr-6,.mx-6{margin-right:24px !important}.ml-6,.mx-6{margin-left:24px !important}.mb-6,.my-6{margin-bottom:24px !important}.ms-6{margin-inline-start:24px !important}.me-6{margin-inline-end:24px !important}.ma-6{margin:24px !important}.mt-7,.my-7{margin-top:28px !important}.mr-7,.mx-7{margin-right:28px !important}.ml-7,.mx-7{margin-left:28px !important}.mb-7,.my-7{margin-bottom:28px !important}.ms-7{margin-inline-start:28px !important}.me-7{margin-inline-end:28px !important}.ma-7{margin:28px !important}.mt-8,.my-8{margin-top:32px !important}.mr-8,.mx-8{margin-right:32px !important}.ml-8,.mx-8{margin-left:32px !important}.mb-8,.my-8{margin-bottom:32px !important}.ms-8{margin-inline-start:32px !important}.me-8{margin-inline-end:32px !important}.ma-8{margin:32px !important}.mt-9,.my-9{margin-top:36px !important}.mr-9,.mx-9{margin-right:36px !important}.ml-9,.mx-9{margin-left:36px !important}.mb-9,.my-9{margin-bottom:36px !important}.ms-9{margin-inline-start:36px !important}.me-9{margin-inline-end:36px !important}.ma-9{margin:36px !important}.mt-10,.my-10{margin-top:40px !important}.mr-10,.mx-10{margin-right:40px !important}.ml-10,.mx-10{margin-left:40px !important}.mb-10,.my-10{margin-bottom:40px !important}.ms-10{margin-inline-start:40px !important}.me-10{margin-inline-end:40px !important}.ma-10{margin:40px !important}.mt-11,.my-11{margin-top:44px !important}.mr-11,.mx-11{margin-right:44px !important}.ml-11,.mx-11{margin-left:44px !important}.mb-11,.my-11{margin-bottom:44px !important}.ms-11{margin-inline-start:44px !important}.me-11{margin-inline-end:44px !important}.ma-11{margin:44px !important}.mt-12,.my-12{margin-top:48px !important}.mr-12,.mx-12{margin-right:48px !important}.ml-12,.mx-12{margin-left:48px !important}.mb-12,.my-12{margin-bottom:48px !important}.ms-12{margin-inline-start:48px !important}.me-12{margin-inline-end:48px !important}.ma-12{margin:48px !important}.mt-13,.my-13{margin-top:52px !important}.mr-13,.mx-13{margin-right:52px !important}.ml-13,.mx-13{margin-left:52px !important}.mb-13,.my-13{margin-bottom:52px !important}.ms-13{margin-inline-start:52px !important}.me-13{margin-inline-end:52px !important}.ma-13{margin:52px !important}.mt-14,.my-14{margin-top:56px !important}.mr-14,.mx-14{margin-right:56px !important}.ml-14,.mx-14{margin-left:56px !important}.mb-14,.my-14{margin-bottom:56px !important}.ms-14{margin-inline-start:56px !important}.me-14{margin-inline-end:56px !important}.ma-14{margin:56px !important}.mt-15,.my-15{margin-top:60px !important}.mr-15,.mx-15{margin-right:60px !important}.ml-15,.mx-15{margin-left:60px !important}.mb-15,.my-15{margin-bottom:60px !important}.ms-15{margin-inline-start:60px !important}.me-15{margin-inline-end:60px !important}.ma-15{margin:60px !important}.mt-16,.my-16{margin-top:64px !important}.mr-16,.mx-16{margin-right:64px !important}.ml-16,.mx-16{margin-left:64px !important}.mb-16,.my-16{margin-bottom:64px !important}.ms-16{margin-inline-start:64px !important}.me-16{margin-inline-end:64px !important}.ma-16{margin:64px !important}.mt-17,.my-17{margin-top:68px !important}.mr-17,.mx-17{margin-right:68px !important}.ml-17,.mx-17{margin-left:68px !important}.mb-17,.my-17{margin-bottom:68px !important}.ms-17{margin-inline-start:68px !important}.me-17{margin-inline-end:68px !important}.ma-17{margin:68px !important}.mt-18,.my-18{margin-top:72px !important}.mr-18,.mx-18{margin-right:72px !important}.ml-18,.mx-18{margin-left:72px !important}.mb-18,.my-18{margin-bottom:72px !important}.ms-18{margin-inline-start:72px !important}.me-18{margin-inline-end:72px !important}.ma-18{margin:72px !important}.mt-19,.my-19{margin-top:76px !important}.mr-19,.mx-19{margin-right:76px !important}.ml-19,.mx-19{margin-left:76px !important}.mb-19,.my-19{margin-bottom:76px !important}.ms-19{margin-inline-start:76px !important}.me-19{margin-inline-end:76px !important}.ma-19{margin:76px !important}.mt-20,.my-20{margin-top:80px !important}.mr-20,.mx-20{margin-right:80px !important}.ml-20,.mx-20{margin-left:80px !important}.mb-20,.my-20{margin-bottom:80px !important}.ms-20{margin-inline-start:80px !important}.me-20{margin-inline-end:80px !important}.ma-20{margin:80px !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ms-auto{margin-inline-start:auto !important}.me-auto{margin-inline-end:auto !important}.ma-auto{margin:auto !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pl-0,.px-0{padding-left:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.ps-0{padding-inline-start:0 !important}.pe-0{padding-inline-end:0 !important}.pa-0{padding:0 !important}.pt-1,.py-1{padding-top:4px !important}.pr-1,.px-1{padding-right:4px !important}.pl-1,.px-1{padding-left:4px !important}.pb-1,.py-1{padding-bottom:4px !important}.ps-1{padding-inline-start:4px !important}.pe-1{padding-inline-end:4px !important}.pa-1{padding:4px !important}.pt-2,.py-2{padding-top:8px !important}.pr-2,.px-2{padding-right:8px !important}.pl-2,.px-2{padding-left:8px !important}.pb-2,.py-2{padding-bottom:8px !important}.ps-2{padding-inline-start:8px !important}.pe-2{padding-inline-end:8px !important}.pa-2{padding:8px !important}.pt-3,.py-3{padding-top:12px !important}.pr-3,.px-3{padding-right:12px !important}.pl-3,.px-3{padding-left:12px !important}.pb-3,.py-3{padding-bottom:12px !important}.ps-3{padding-inline-start:12px !important}.pe-3{padding-inline-end:12px !important}.pa-3{padding:12px !important}.pt-4,.py-4{padding-top:16px !important}.pr-4,.px-4{padding-right:16px !important}.pl-4,.px-4{padding-left:16px !important}.pb-4,.py-4{padding-bottom:16px !important}.ps-4{padding-inline-start:16px !important}.pe-4{padding-inline-end:16px !important}.pa-4{padding:16px !important}.pt-5,.py-5{padding-top:20px !important}.pr-5,.px-5{padding-right:20px !important}.pl-5,.px-5{padding-left:20px !important}.pb-5,.py-5{padding-bottom:20px !important}.ps-5{padding-inline-start:20px !important}.pe-5{padding-inline-end:20px !important}.pa-5{padding:20px !important}.pt-6,.py-6{padding-top:24px !important}.pr-6,.px-6{padding-right:24px !important}.pl-6,.px-6{padding-left:24px !important}.pb-6,.py-6{padding-bottom:24px !important}.ps-6{padding-inline-start:24px !important}.pe-6{padding-inline-end:24px !important}.pa-6{padding:24px !important}.pt-7,.py-7{padding-top:28px !important}.pr-7,.px-7{padding-right:28px !important}.pl-7,.px-7{padding-left:28px !important}.pb-7,.py-7{padding-bottom:28px !important}.ps-7{padding-inline-start:28px !important}.pe-7{padding-inline-end:28px !important}.pa-7{padding:28px !important}.pt-8,.py-8{padding-top:32px !important}.pr-8,.px-8{padding-right:32px !important}.pl-8,.px-8{padding-left:32px !important}.pb-8,.py-8{padding-bottom:32px !important}.ps-8{padding-inline-start:32px !important}.pe-8{padding-inline-end:32px !important}.pa-8{padding:32px !important}.pt-9,.py-9{padding-top:36px !important}.pr-9,.px-9{padding-right:36px !important}.pl-9,.px-9{padding-left:36px !important}.pb-9,.py-9{padding-bottom:36px !important}.ps-9{padding-inline-start:36px !important}.pe-9{padding-inline-end:36px !important}.pa-9{padding:36px !important}.pt-10,.py-10{padding-top:40px !important}.pr-10,.px-10{padding-right:40px !important}.pl-10,.px-10{padding-left:40px !important}.pb-10,.py-10{padding-bottom:40px !important}.ps-10{padding-inline-start:40px !important}.pe-10{padding-inline-end:40px !important}.pa-10{padding:40px !important}.pt-11,.py-11{padding-top:44px !important}.pr-11,.px-11{padding-right:44px !important}.pl-11,.px-11{padding-left:44px !important}.pb-11,.py-11{padding-bottom:44px !important}.ps-11{padding-inline-start:44px !important}.pe-11{padding-inline-end:44px !important}.pa-11{padding:44px !important}.pt-12,.py-12{padding-top:48px !important}.pr-12,.px-12{padding-right:48px !important}.pl-12,.px-12{padding-left:48px !important}.pb-12,.py-12{padding-bottom:48px !important}.ps-12{padding-inline-start:48px !important}.pe-12{padding-inline-end:48px !important}.pa-12{padding:48px !important}.pt-13,.py-13{padding-top:52px !important}.pr-13,.px-13{padding-right:52px !important}.pl-13,.px-13{padding-left:52px !important}.pb-13,.py-13{padding-bottom:52px !important}.ps-13{padding-inline-start:52px !important}.pe-13{padding-inline-end:52px !important}.pa-13{padding:52px !important}.pt-14,.py-14{padding-top:56px !important}.pr-14,.px-14{padding-right:56px !important}.pl-14,.px-14{padding-left:56px !important}.pb-14,.py-14{padding-bottom:56px !important}.ps-14{padding-inline-start:56px !important}.pe-14{padding-inline-end:56px !important}.pa-14{padding:56px !important}.pt-15,.py-15{padding-top:60px !important}.pr-15,.px-15{padding-right:60px !important}.pl-15,.px-15{padding-left:60px !important}.pb-15,.py-15{padding-bottom:60px !important}.ps-15{padding-inline-start:60px !important}.pe-15{padding-inline-end:60px !important}.pa-15{padding:60px !important}.pt-16,.py-16{padding-top:64px !important}.pr-16,.px-16{padding-right:64px !important}.pl-16,.px-16{padding-left:64px !important}.pb-16,.py-16{padding-bottom:64px !important}.ps-16{padding-inline-start:64px !important}.pe-16{padding-inline-end:64px !important}.pa-16{padding:64px !important}.pt-17,.py-17{padding-top:68px !important}.pr-17,.px-17{padding-right:68px !important}.pl-17,.px-17{padding-left:68px !important}.pb-17,.py-17{padding-bottom:68px !important}.ps-17{padding-inline-start:68px !important}.pe-17{padding-inline-end:68px !important}.pa-17{padding:68px !important}.pt-18,.py-18{padding-top:72px !important}.pr-18,.px-18{padding-right:72px !important}.pl-18,.px-18{padding-left:72px !important}.pb-18,.py-18{padding-bottom:72px !important}.ps-18{padding-inline-start:72px !important}.pe-18{padding-inline-end:72px !important}.pa-18{padding:72px !important}.pt-19,.py-19{padding-top:76px !important}.pr-19,.px-19{padding-right:76px !important}.pl-19,.px-19{padding-left:76px !important}.pb-19,.py-19{padding-bottom:76px !important}.ps-19{padding-inline-start:76px !important}.pe-19{padding-inline-end:76px !important}.pa-19{padding:76px !important}.pt-20,.py-20{padding-top:80px !important}.pr-20,.px-20{padding-right:80px !important}.pl-20,.px-20{padding-left:80px !important}.pb-20,.py-20{padding-bottom:80px !important}.ps-20{padding-inline-start:80px !important}.pe-20{padding-inline-end:80px !important}.pa-20{padding:80px !important}.pt-auto,.py-auto{padding-top:auto !important}.pr-auto,.px-auto{padding-right:auto !important}.pl-auto,.px-auto{padding-left:auto !important}.pb-auto,.py-auto{padding-bottom:auto !important}.ps-auto{padding-inline-start:auto !important}.pe-auto{padding-inline-end:auto !important}.pa-auto{padding:auto !important}.mt-n1,.my-n1{margin-top:-4px !important}.mr-n1,.mx-n1{margin-right:-4px !important}.ml-n1,.mx-n1{margin-left:-4px !important}.mb-n1,.my-n1{margin-bottom:-4px !important}.ms-n1{margin-inline-start:-4px !important}.me-n1{margin-inline-end:-4px !important}.ma-n1{margin:-4px !important}.mt-n2,.my-n2{margin-top:-8px !important}.mr-n2,.mx-n2{margin-right:-8px !important}.ml-n2,.mx-n2{margin-left:-8px !important}.mb-n2,.my-n2{margin-bottom:-8px !important}.ms-n2{margin-inline-start:-8px !important}.me-n2{margin-inline-end:-8px !important}.ma-n2{margin:-8px !important}.mt-n3,.my-n3{margin-top:-12px !important}.mr-n3,.mx-n3{margin-right:-12px !important}.ml-n3,.mx-n3{margin-left:-12px !important}.mb-n3,.my-n3{margin-bottom:-12px !important}.ms-n3{margin-inline-start:-12px !important}.me-n3{margin-inline-end:-12px !important}.ma-n3{margin:-12px !important}.mt-n4,.my-n4{margin-top:-16px !important}.mr-n4,.mx-n4{margin-right:-16px !important}.ml-n4,.mx-n4{margin-left:-16px !important}.mb-n4,.my-n4{margin-bottom:-16px !important}.ms-n4{margin-inline-start:-16px !important}.me-n4{margin-inline-end:-16px !important}.ma-n4{margin:-16px !important}.mt-n5,.my-n5{margin-top:-20px !important}.mr-n5,.mx-n5{margin-right:-20px !important}.ml-n5,.mx-n5{margin-left:-20px !important}.mb-n5,.my-n5{margin-bottom:-20px !important}.ms-n5{margin-inline-start:-20px !important}.me-n5{margin-inline-end:-20px !important}.ma-n5{margin:-20px !important}.mt-n6,.my-n6{margin-top:-24px !important}.mr-n6,.mx-n6{margin-right:-24px !important}.ml-n6,.mx-n6{margin-left:-24px !important}.mb-n6,.my-n6{margin-bottom:-24px !important}.ms-n6{margin-inline-start:-24px !important}.me-n6{margin-inline-end:-24px !important}.ma-n6{margin:-24px !important}.mt-n7,.my-n7{margin-top:-28px !important}.mr-n7,.mx-n7{margin-right:-28px !important}.ml-n7,.mx-n7{margin-left:-28px !important}.mb-n7,.my-n7{margin-bottom:-28px !important}.ms-n7{margin-inline-start:-28px !important}.me-n7{margin-inline-end:-28px !important}.ma-n7{margin:-28px !important}.mt-n8,.my-n8{margin-top:-32px !important}.mr-n8,.mx-n8{margin-right:-32px !important}.ml-n8,.mx-n8{margin-left:-32px !important}.mb-n8,.my-n8{margin-bottom:-32px !important}.ms-n8{margin-inline-start:-32px !important}.me-n8{margin-inline-end:-32px !important}.ma-n8{margin:-32px !important}.mt-n9,.my-n9{margin-top:-36px !important}.mr-n9,.mx-n9{margin-right:-36px !important}.ml-n9,.mx-n9{margin-left:-36px !important}.mb-n9,.my-n9{margin-bottom:-36px !important}.ms-n9{margin-inline-start:-36px !important}.me-n9{margin-inline-end:-36px !important}.ma-n9{margin:-36px !important}.mt-n10,.my-n10{margin-top:-40px !important}.mr-n10,.mx-n10{margin-right:-40px !important}.ml-n10,.mx-n10{margin-left:-40px !important}.mb-n10,.my-n10{margin-bottom:-40px !important}.ms-n10{margin-inline-start:-40px !important}.me-n10{margin-inline-end:-40px !important}.ma-n10{margin:-40px !important}.mt-n11,.my-n11{margin-top:-44px !important}.mr-n11,.mx-n11{margin-right:-44px !important}.ml-n11,.mx-n11{margin-left:-44px !important}.mb-n11,.my-n11{margin-bottom:-44px !important}.ms-n11{margin-inline-start:-44px !important}.me-n11{margin-inline-end:-44px !important}.ma-n11{margin:-44px !important}.mt-n12,.my-n12{margin-top:-48px !important}.mr-n12,.mx-n12{margin-right:-48px !important}.ml-n12,.mx-n12{margin-left:-48px !important}.mb-n12,.my-n12{margin-bottom:-48px !important}.ms-n12{margin-inline-start:-48px !important}.me-n12{margin-inline-end:-48px !important}.ma-n12{margin:-48px !important}.mt-n13,.my-n13{margin-top:-52px !important}.mr-n13,.mx-n13{margin-right:-52px !important}.ml-n13,.mx-n13{margin-left:-52px !important}.mb-n13,.my-n13{margin-bottom:-52px !important}.ms-n13{margin-inline-start:-52px !important}.me-n13{margin-inline-end:-52px !important}.ma-n13{margin:-52px !important}.mt-n14,.my-n14{margin-top:-56px !important}.mr-n14,.mx-n14{margin-right:-56px !important}.ml-n14,.mx-n14{margin-left:-56px !important}.mb-n14,.my-n14{margin-bottom:-56px !important}.ms-n14{margin-inline-start:-56px !important}.me-n14{margin-inline-end:-56px !important}.ma-n14{margin:-56px !important}.mt-n15,.my-n15{margin-top:-60px !important}.mr-n15,.mx-n15{margin-right:-60px !important}.ml-n15,.mx-n15{margin-left:-60px !important}.mb-n15,.my-n15{margin-bottom:-60px !important}.ms-n15{margin-inline-start:-60px !important}.me-n15{margin-inline-end:-60px !important}.ma-n15{margin:-60px !important}.mt-n16,.my-n16{margin-top:-64px !important}.mr-n16,.mx-n16{margin-right:-64px !important}.ml-n16,.mx-n16{margin-left:-64px !important}.mb-n16,.my-n16{margin-bottom:-64px !important}.ms-n16{margin-inline-start:-64px !important}.me-n16{margin-inline-end:-64px !important}.ma-n16{margin:-64px !important}.mt-n17,.my-n17{margin-top:-68px !important}.mr-n17,.mx-n17{margin-right:-68px !important}.ml-n17,.mx-n17{margin-left:-68px !important}.mb-n17,.my-n17{margin-bottom:-68px !important}.ms-n17{margin-inline-start:-68px !important}.me-n17{margin-inline-end:-68px !important}.ma-n17{margin:-68px !important}.mt-n18,.my-n18{margin-top:-72px !important}.mr-n18,.mx-n18{margin-right:-72px !important}.ml-n18,.mx-n18{margin-left:-72px !important}.mb-n18,.my-n18{margin-bottom:-72px !important}.ms-n18{margin-inline-start:-72px !important}.me-n18{margin-inline-end:-72px !important}.ma-n18{margin:-72px !important}.mt-n19,.my-n19{margin-top:-76px !important}.mr-n19,.mx-n19{margin-right:-76px !important}.ml-n19,.mx-n19{margin-left:-76px !important}.mb-n19,.my-n19{margin-bottom:-76px !important}.ms-n19{margin-inline-start:-76px !important}.me-n19{margin-inline-end:-76px !important}.ma-n19{margin:-76px !important}.mt-n20,.my-n20{margin-top:-80px !important}.mr-n20,.mx-n20{margin-right:-80px !important}.ml-n20,.mx-n20{margin-left:-80px !important}.mb-n20,.my-n20{margin-bottom:-80px !important}.ms-n20{margin-inline-start:-80px !important}.me-n20{margin-inline-end:-80px !important}.ma-n20{margin:-80px !important}@media screen and (min-width: 600px){.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ms-sm-0{margin-inline-start:0 !important}.me-sm-0{margin-inline-end:0 !important}.ma-sm-0{margin:0 !important}.mt-sm-1,.my-sm-1{margin-top:4px !important}.mr-sm-1,.mx-sm-1{margin-right:4px !important}.ml-sm-1,.mx-sm-1{margin-left:4px !important}.mb-sm-1,.my-sm-1{margin-bottom:4px !important}.ms-sm-1{margin-inline-start:4px !important}.me-sm-1{margin-inline-end:4px !important}.ma-sm-1{margin:4px !important}.mt-sm-2,.my-sm-2{margin-top:8px !important}.mr-sm-2,.mx-sm-2{margin-right:8px !important}.ml-sm-2,.mx-sm-2{margin-left:8px !important}.mb-sm-2,.my-sm-2{margin-bottom:8px !important}.ms-sm-2{margin-inline-start:8px !important}.me-sm-2{margin-inline-end:8px !important}.ma-sm-2{margin:8px !important}.mt-sm-3,.my-sm-3{margin-top:12px !important}.mr-sm-3,.mx-sm-3{margin-right:12px !important}.ml-sm-3,.mx-sm-3{margin-left:12px !important}.mb-sm-3,.my-sm-3{margin-bottom:12px !important}.ms-sm-3{margin-inline-start:12px !important}.me-sm-3{margin-inline-end:12px !important}.ma-sm-3{margin:12px !important}.mt-sm-4,.my-sm-4{margin-top:16px !important}.mr-sm-4,.mx-sm-4{margin-right:16px !important}.ml-sm-4,.mx-sm-4{margin-left:16px !important}.mb-sm-4,.my-sm-4{margin-bottom:16px !important}.ms-sm-4{margin-inline-start:16px !important}.me-sm-4{margin-inline-end:16px !important}.ma-sm-4{margin:16px !important}.mt-sm-5,.my-sm-5{margin-top:20px !important}.mr-sm-5,.mx-sm-5{margin-right:20px !important}.ml-sm-5,.mx-sm-5{margin-left:20px !important}.mb-sm-5,.my-sm-5{margin-bottom:20px !important}.ms-sm-5{margin-inline-start:20px !important}.me-sm-5{margin-inline-end:20px !important}.ma-sm-5{margin:20px !important}.mt-sm-6,.my-sm-6{margin-top:24px !important}.mr-sm-6,.mx-sm-6{margin-right:24px !important}.ml-sm-6,.mx-sm-6{margin-left:24px !important}.mb-sm-6,.my-sm-6{margin-bottom:24px !important}.ms-sm-6{margin-inline-start:24px !important}.me-sm-6{margin-inline-end:24px !important}.ma-sm-6{margin:24px !important}.mt-sm-7,.my-sm-7{margin-top:28px !important}.mr-sm-7,.mx-sm-7{margin-right:28px !important}.ml-sm-7,.mx-sm-7{margin-left:28px !important}.mb-sm-7,.my-sm-7{margin-bottom:28px !important}.ms-sm-7{margin-inline-start:28px !important}.me-sm-7{margin-inline-end:28px !important}.ma-sm-7{margin:28px !important}.mt-sm-8,.my-sm-8{margin-top:32px !important}.mr-sm-8,.mx-sm-8{margin-right:32px !important}.ml-sm-8,.mx-sm-8{margin-left:32px !important}.mb-sm-8,.my-sm-8{margin-bottom:32px !important}.ms-sm-8{margin-inline-start:32px !important}.me-sm-8{margin-inline-end:32px !important}.ma-sm-8{margin:32px !important}.mt-sm-9,.my-sm-9{margin-top:36px !important}.mr-sm-9,.mx-sm-9{margin-right:36px !important}.ml-sm-9,.mx-sm-9{margin-left:36px !important}.mb-sm-9,.my-sm-9{margin-bottom:36px !important}.ms-sm-9{margin-inline-start:36px !important}.me-sm-9{margin-inline-end:36px !important}.ma-sm-9{margin:36px !important}.mt-sm-10,.my-sm-10{margin-top:40px !important}.mr-sm-10,.mx-sm-10{margin-right:40px !important}.ml-sm-10,.mx-sm-10{margin-left:40px !important}.mb-sm-10,.my-sm-10{margin-bottom:40px !important}.ms-sm-10{margin-inline-start:40px !important}.me-sm-10{margin-inline-end:40px !important}.ma-sm-10{margin:40px !important}.mt-sm-11,.my-sm-11{margin-top:44px !important}.mr-sm-11,.mx-sm-11{margin-right:44px !important}.ml-sm-11,.mx-sm-11{margin-left:44px !important}.mb-sm-11,.my-sm-11{margin-bottom:44px !important}.ms-sm-11{margin-inline-start:44px !important}.me-sm-11{margin-inline-end:44px !important}.ma-sm-11{margin:44px !important}.mt-sm-12,.my-sm-12{margin-top:48px !important}.mr-sm-12,.mx-sm-12{margin-right:48px !important}.ml-sm-12,.mx-sm-12{margin-left:48px !important}.mb-sm-12,.my-sm-12{margin-bottom:48px !important}.ms-sm-12{margin-inline-start:48px !important}.me-sm-12{margin-inline-end:48px !important}.ma-sm-12{margin:48px !important}.mt-sm-13,.my-sm-13{margin-top:52px !important}.mr-sm-13,.mx-sm-13{margin-right:52px !important}.ml-sm-13,.mx-sm-13{margin-left:52px !important}.mb-sm-13,.my-sm-13{margin-bottom:52px !important}.ms-sm-13{margin-inline-start:52px !important}.me-sm-13{margin-inline-end:52px !important}.ma-sm-13{margin:52px !important}.mt-sm-14,.my-sm-14{margin-top:56px !important}.mr-sm-14,.mx-sm-14{margin-right:56px !important}.ml-sm-14,.mx-sm-14{margin-left:56px !important}.mb-sm-14,.my-sm-14{margin-bottom:56px !important}.ms-sm-14{margin-inline-start:56px !important}.me-sm-14{margin-inline-end:56px !important}.ma-sm-14{margin:56px !important}.mt-sm-15,.my-sm-15{margin-top:60px !important}.mr-sm-15,.mx-sm-15{margin-right:60px !important}.ml-sm-15,.mx-sm-15{margin-left:60px !important}.mb-sm-15,.my-sm-15{margin-bottom:60px !important}.ms-sm-15{margin-inline-start:60px !important}.me-sm-15{margin-inline-end:60px !important}.ma-sm-15{margin:60px !important}.mt-sm-16,.my-sm-16{margin-top:64px !important}.mr-sm-16,.mx-sm-16{margin-right:64px !important}.ml-sm-16,.mx-sm-16{margin-left:64px !important}.mb-sm-16,.my-sm-16{margin-bottom:64px !important}.ms-sm-16{margin-inline-start:64px !important}.me-sm-16{margin-inline-end:64px !important}.ma-sm-16{margin:64px !important}.mt-sm-17,.my-sm-17{margin-top:68px !important}.mr-sm-17,.mx-sm-17{margin-right:68px !important}.ml-sm-17,.mx-sm-17{margin-left:68px !important}.mb-sm-17,.my-sm-17{margin-bottom:68px !important}.ms-sm-17{margin-inline-start:68px !important}.me-sm-17{margin-inline-end:68px !important}.ma-sm-17{margin:68px !important}.mt-sm-18,.my-sm-18{margin-top:72px !important}.mr-sm-18,.mx-sm-18{margin-right:72px !important}.ml-sm-18,.mx-sm-18{margin-left:72px !important}.mb-sm-18,.my-sm-18{margin-bottom:72px !important}.ms-sm-18{margin-inline-start:72px !important}.me-sm-18{margin-inline-end:72px !important}.ma-sm-18{margin:72px !important}.mt-sm-19,.my-sm-19{margin-top:76px !important}.mr-sm-19,.mx-sm-19{margin-right:76px !important}.ml-sm-19,.mx-sm-19{margin-left:76px !important}.mb-sm-19,.my-sm-19{margin-bottom:76px !important}.ms-sm-19{margin-inline-start:76px !important}.me-sm-19{margin-inline-end:76px !important}.ma-sm-19{margin:76px !important}.mt-sm-20,.my-sm-20{margin-top:80px !important}.mr-sm-20,.mx-sm-20{margin-right:80px !important}.ml-sm-20,.mx-sm-20{margin-left:80px !important}.mb-sm-20,.my-sm-20{margin-bottom:80px !important}.ms-sm-20{margin-inline-start:80px !important}.me-sm-20{margin-inline-end:80px !important}.ma-sm-20{margin:80px !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ms-sm-auto{margin-inline-start:auto !important}.me-sm-auto{margin-inline-end:auto !important}.ma-sm-auto{margin:auto !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.ps-sm-0{padding-inline-start:0 !important}.pe-sm-0{padding-inline-end:0 !important}.pa-sm-0{padding:0 !important}.pt-sm-1,.py-sm-1{padding-top:4px !important}.pr-sm-1,.px-sm-1{padding-right:4px !important}.pl-sm-1,.px-sm-1{padding-left:4px !important}.pb-sm-1,.py-sm-1{padding-bottom:4px !important}.ps-sm-1{padding-inline-start:4px !important}.pe-sm-1{padding-inline-end:4px !important}.pa-sm-1{padding:4px !important}.pt-sm-2,.py-sm-2{padding-top:8px !important}.pr-sm-2,.px-sm-2{padding-right:8px !important}.pl-sm-2,.px-sm-2{padding-left:8px !important}.pb-sm-2,.py-sm-2{padding-bottom:8px !important}.ps-sm-2{padding-inline-start:8px !important}.pe-sm-2{padding-inline-end:8px !important}.pa-sm-2{padding:8px !important}.pt-sm-3,.py-sm-3{padding-top:12px !important}.pr-sm-3,.px-sm-3{padding-right:12px !important}.pl-sm-3,.px-sm-3{padding-left:12px !important}.pb-sm-3,.py-sm-3{padding-bottom:12px !important}.ps-sm-3{padding-inline-start:12px !important}.pe-sm-3{padding-inline-end:12px !important}.pa-sm-3{padding:12px !important}.pt-sm-4,.py-sm-4{padding-top:16px !important}.pr-sm-4,.px-sm-4{padding-right:16px !important}.pl-sm-4,.px-sm-4{padding-left:16px !important}.pb-sm-4,.py-sm-4{padding-bottom:16px !important}.ps-sm-4{padding-inline-start:16px !important}.pe-sm-4{padding-inline-end:16px !important}.pa-sm-4{padding:16px !important}.pt-sm-5,.py-sm-5{padding-top:20px !important}.pr-sm-5,.px-sm-5{padding-right:20px !important}.pl-sm-5,.px-sm-5{padding-left:20px !important}.pb-sm-5,.py-sm-5{padding-bottom:20px !important}.ps-sm-5{padding-inline-start:20px !important}.pe-sm-5{padding-inline-end:20px !important}.pa-sm-5{padding:20px !important}.pt-sm-6,.py-sm-6{padding-top:24px !important}.pr-sm-6,.px-sm-6{padding-right:24px !important}.pl-sm-6,.px-sm-6{padding-left:24px !important}.pb-sm-6,.py-sm-6{padding-bottom:24px !important}.ps-sm-6{padding-inline-start:24px !important}.pe-sm-6{padding-inline-end:24px !important}.pa-sm-6{padding:24px !important}.pt-sm-7,.py-sm-7{padding-top:28px !important}.pr-sm-7,.px-sm-7{padding-right:28px !important}.pl-sm-7,.px-sm-7{padding-left:28px !important}.pb-sm-7,.py-sm-7{padding-bottom:28px !important}.ps-sm-7{padding-inline-start:28px !important}.pe-sm-7{padding-inline-end:28px !important}.pa-sm-7{padding:28px !important}.pt-sm-8,.py-sm-8{padding-top:32px !important}.pr-sm-8,.px-sm-8{padding-right:32px !important}.pl-sm-8,.px-sm-8{padding-left:32px !important}.pb-sm-8,.py-sm-8{padding-bottom:32px !important}.ps-sm-8{padding-inline-start:32px !important}.pe-sm-8{padding-inline-end:32px !important}.pa-sm-8{padding:32px !important}.pt-sm-9,.py-sm-9{padding-top:36px !important}.pr-sm-9,.px-sm-9{padding-right:36px !important}.pl-sm-9,.px-sm-9{padding-left:36px !important}.pb-sm-9,.py-sm-9{padding-bottom:36px !important}.ps-sm-9{padding-inline-start:36px !important}.pe-sm-9{padding-inline-end:36px !important}.pa-sm-9{padding:36px !important}.pt-sm-10,.py-sm-10{padding-top:40px !important}.pr-sm-10,.px-sm-10{padding-right:40px !important}.pl-sm-10,.px-sm-10{padding-left:40px !important}.pb-sm-10,.py-sm-10{padding-bottom:40px !important}.ps-sm-10{padding-inline-start:40px !important}.pe-sm-10{padding-inline-end:40px !important}.pa-sm-10{padding:40px !important}.pt-sm-11,.py-sm-11{padding-top:44px !important}.pr-sm-11,.px-sm-11{padding-right:44px !important}.pl-sm-11,.px-sm-11{padding-left:44px !important}.pb-sm-11,.py-sm-11{padding-bottom:44px !important}.ps-sm-11{padding-inline-start:44px !important}.pe-sm-11{padding-inline-end:44px !important}.pa-sm-11{padding:44px !important}.pt-sm-12,.py-sm-12{padding-top:48px !important}.pr-sm-12,.px-sm-12{padding-right:48px !important}.pl-sm-12,.px-sm-12{padding-left:48px !important}.pb-sm-12,.py-sm-12{padding-bottom:48px !important}.ps-sm-12{padding-inline-start:48px !important}.pe-sm-12{padding-inline-end:48px !important}.pa-sm-12{padding:48px !important}.pt-sm-13,.py-sm-13{padding-top:52px !important}.pr-sm-13,.px-sm-13{padding-right:52px !important}.pl-sm-13,.px-sm-13{padding-left:52px !important}.pb-sm-13,.py-sm-13{padding-bottom:52px !important}.ps-sm-13{padding-inline-start:52px !important}.pe-sm-13{padding-inline-end:52px !important}.pa-sm-13{padding:52px !important}.pt-sm-14,.py-sm-14{padding-top:56px !important}.pr-sm-14,.px-sm-14{padding-right:56px !important}.pl-sm-14,.px-sm-14{padding-left:56px !important}.pb-sm-14,.py-sm-14{padding-bottom:56px !important}.ps-sm-14{padding-inline-start:56px !important}.pe-sm-14{padding-inline-end:56px !important}.pa-sm-14{padding:56px !important}.pt-sm-15,.py-sm-15{padding-top:60px !important}.pr-sm-15,.px-sm-15{padding-right:60px !important}.pl-sm-15,.px-sm-15{padding-left:60px !important}.pb-sm-15,.py-sm-15{padding-bottom:60px !important}.ps-sm-15{padding-inline-start:60px !important}.pe-sm-15{padding-inline-end:60px !important}.pa-sm-15{padding:60px !important}.pt-sm-16,.py-sm-16{padding-top:64px !important}.pr-sm-16,.px-sm-16{padding-right:64px !important}.pl-sm-16,.px-sm-16{padding-left:64px !important}.pb-sm-16,.py-sm-16{padding-bottom:64px !important}.ps-sm-16{padding-inline-start:64px !important}.pe-sm-16{padding-inline-end:64px !important}.pa-sm-16{padding:64px !important}.pt-sm-17,.py-sm-17{padding-top:68px !important}.pr-sm-17,.px-sm-17{padding-right:68px !important}.pl-sm-17,.px-sm-17{padding-left:68px !important}.pb-sm-17,.py-sm-17{padding-bottom:68px !important}.ps-sm-17{padding-inline-start:68px !important}.pe-sm-17{padding-inline-end:68px !important}.pa-sm-17{padding:68px !important}.pt-sm-18,.py-sm-18{padding-top:72px !important}.pr-sm-18,.px-sm-18{padding-right:72px !important}.pl-sm-18,.px-sm-18{padding-left:72px !important}.pb-sm-18,.py-sm-18{padding-bottom:72px !important}.ps-sm-18{padding-inline-start:72px !important}.pe-sm-18{padding-inline-end:72px !important}.pa-sm-18{padding:72px !important}.pt-sm-19,.py-sm-19{padding-top:76px !important}.pr-sm-19,.px-sm-19{padding-right:76px !important}.pl-sm-19,.px-sm-19{padding-left:76px !important}.pb-sm-19,.py-sm-19{padding-bottom:76px !important}.ps-sm-19{padding-inline-start:76px !important}.pe-sm-19{padding-inline-end:76px !important}.pa-sm-19{padding:76px !important}.pt-sm-20,.py-sm-20{padding-top:80px !important}.pr-sm-20,.px-sm-20{padding-right:80px !important}.pl-sm-20,.px-sm-20{padding-left:80px !important}.pb-sm-20,.py-sm-20{padding-bottom:80px !important}.ps-sm-20{padding-inline-start:80px !important}.pe-sm-20{padding-inline-end:80px !important}.pa-sm-20{padding:80px !important}.pt-sm-auto,.py-sm-auto{padding-top:auto !important}.pr-sm-auto,.px-sm-auto{padding-right:auto !important}.pl-sm-auto,.px-sm-auto{padding-left:auto !important}.pb-sm-auto,.py-sm-auto{padding-bottom:auto !important}.ps-sm-auto{padding-inline-start:auto !important}.pe-sm-auto{padding-inline-end:auto !important}.pa-sm-auto{padding:auto !important}.mt-sm-n1,.my-sm-n1{margin-top:-4px !important}.mr-sm-n1,.mx-sm-n1{margin-right:-4px !important}.ml-sm-n1,.mx-sm-n1{margin-left:-4px !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-4px !important}.ms-sm-n1{margin-inline-start:-4px !important}.me-sm-n1{margin-inline-end:-4px !important}.ma-sm-n1{margin:-4px !important}.mt-sm-n2,.my-sm-n2{margin-top:-8px !important}.mr-sm-n2,.mx-sm-n2{margin-right:-8px !important}.ml-sm-n2,.mx-sm-n2{margin-left:-8px !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-8px !important}.ms-sm-n2{margin-inline-start:-8px !important}.me-sm-n2{margin-inline-end:-8px !important}.ma-sm-n2{margin:-8px !important}.mt-sm-n3,.my-sm-n3{margin-top:-12px !important}.mr-sm-n3,.mx-sm-n3{margin-right:-12px !important}.ml-sm-n3,.mx-sm-n3{margin-left:-12px !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-12px !important}.ms-sm-n3{margin-inline-start:-12px !important}.me-sm-n3{margin-inline-end:-12px !important}.ma-sm-n3{margin:-12px !important}.mt-sm-n4,.my-sm-n4{margin-top:-16px !important}.mr-sm-n4,.mx-sm-n4{margin-right:-16px !important}.ml-sm-n4,.mx-sm-n4{margin-left:-16px !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-16px !important}.ms-sm-n4{margin-inline-start:-16px !important}.me-sm-n4{margin-inline-end:-16px !important}.ma-sm-n4{margin:-16px !important}.mt-sm-n5,.my-sm-n5{margin-top:-20px !important}.mr-sm-n5,.mx-sm-n5{margin-right:-20px !important}.ml-sm-n5,.mx-sm-n5{margin-left:-20px !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-20px !important}.ms-sm-n5{margin-inline-start:-20px !important}.me-sm-n5{margin-inline-end:-20px !important}.ma-sm-n5{margin:-20px !important}.mt-sm-n6,.my-sm-n6{margin-top:-24px !important}.mr-sm-n6,.mx-sm-n6{margin-right:-24px !important}.ml-sm-n6,.mx-sm-n6{margin-left:-24px !important}.mb-sm-n6,.my-sm-n6{margin-bottom:-24px !important}.ms-sm-n6{margin-inline-start:-24px !important}.me-sm-n6{margin-inline-end:-24px !important}.ma-sm-n6{margin:-24px !important}.mt-sm-n7,.my-sm-n7{margin-top:-28px !important}.mr-sm-n7,.mx-sm-n7{margin-right:-28px !important}.ml-sm-n7,.mx-sm-n7{margin-left:-28px !important}.mb-sm-n7,.my-sm-n7{margin-bottom:-28px !important}.ms-sm-n7{margin-inline-start:-28px !important}.me-sm-n7{margin-inline-end:-28px !important}.ma-sm-n7{margin:-28px !important}.mt-sm-n8,.my-sm-n8{margin-top:-32px !important}.mr-sm-n8,.mx-sm-n8{margin-right:-32px !important}.ml-sm-n8,.mx-sm-n8{margin-left:-32px !important}.mb-sm-n8,.my-sm-n8{margin-bottom:-32px !important}.ms-sm-n8{margin-inline-start:-32px !important}.me-sm-n8{margin-inline-end:-32px !important}.ma-sm-n8{margin:-32px !important}.mt-sm-n9,.my-sm-n9{margin-top:-36px !important}.mr-sm-n9,.mx-sm-n9{margin-right:-36px !important}.ml-sm-n9,.mx-sm-n9{margin-left:-36px !important}.mb-sm-n9,.my-sm-n9{margin-bottom:-36px !important}.ms-sm-n9{margin-inline-start:-36px !important}.me-sm-n9{margin-inline-end:-36px !important}.ma-sm-n9{margin:-36px !important}.mt-sm-n10,.my-sm-n10{margin-top:-40px !important}.mr-sm-n10,.mx-sm-n10{margin-right:-40px !important}.ml-sm-n10,.mx-sm-n10{margin-left:-40px !important}.mb-sm-n10,.my-sm-n10{margin-bottom:-40px !important}.ms-sm-n10{margin-inline-start:-40px !important}.me-sm-n10{margin-inline-end:-40px !important}.ma-sm-n10{margin:-40px !important}.mt-sm-n11,.my-sm-n11{margin-top:-44px !important}.mr-sm-n11,.mx-sm-n11{margin-right:-44px !important}.ml-sm-n11,.mx-sm-n11{margin-left:-44px !important}.mb-sm-n11,.my-sm-n11{margin-bottom:-44px !important}.ms-sm-n11{margin-inline-start:-44px !important}.me-sm-n11{margin-inline-end:-44px !important}.ma-sm-n11{margin:-44px !important}.mt-sm-n12,.my-sm-n12{margin-top:-48px !important}.mr-sm-n12,.mx-sm-n12{margin-right:-48px !important}.ml-sm-n12,.mx-sm-n12{margin-left:-48px !important}.mb-sm-n12,.my-sm-n12{margin-bottom:-48px !important}.ms-sm-n12{margin-inline-start:-48px !important}.me-sm-n12{margin-inline-end:-48px !important}.ma-sm-n12{margin:-48px !important}.mt-sm-n13,.my-sm-n13{margin-top:-52px !important}.mr-sm-n13,.mx-sm-n13{margin-right:-52px !important}.ml-sm-n13,.mx-sm-n13{margin-left:-52px !important}.mb-sm-n13,.my-sm-n13{margin-bottom:-52px !important}.ms-sm-n13{margin-inline-start:-52px !important}.me-sm-n13{margin-inline-end:-52px !important}.ma-sm-n13{margin:-52px !important}.mt-sm-n14,.my-sm-n14{margin-top:-56px !important}.mr-sm-n14,.mx-sm-n14{margin-right:-56px !important}.ml-sm-n14,.mx-sm-n14{margin-left:-56px !important}.mb-sm-n14,.my-sm-n14{margin-bottom:-56px !important}.ms-sm-n14{margin-inline-start:-56px !important}.me-sm-n14{margin-inline-end:-56px !important}.ma-sm-n14{margin:-56px !important}.mt-sm-n15,.my-sm-n15{margin-top:-60px !important}.mr-sm-n15,.mx-sm-n15{margin-right:-60px !important}.ml-sm-n15,.mx-sm-n15{margin-left:-60px !important}.mb-sm-n15,.my-sm-n15{margin-bottom:-60px !important}.ms-sm-n15{margin-inline-start:-60px !important}.me-sm-n15{margin-inline-end:-60px !important}.ma-sm-n15{margin:-60px !important}.mt-sm-n16,.my-sm-n16{margin-top:-64px !important}.mr-sm-n16,.mx-sm-n16{margin-right:-64px !important}.ml-sm-n16,.mx-sm-n16{margin-left:-64px !important}.mb-sm-n16,.my-sm-n16{margin-bottom:-64px !important}.ms-sm-n16{margin-inline-start:-64px !important}.me-sm-n16{margin-inline-end:-64px !important}.ma-sm-n16{margin:-64px !important}.mt-sm-n17,.my-sm-n17{margin-top:-68px !important}.mr-sm-n17,.mx-sm-n17{margin-right:-68px !important}.ml-sm-n17,.mx-sm-n17{margin-left:-68px !important}.mb-sm-n17,.my-sm-n17{margin-bottom:-68px !important}.ms-sm-n17{margin-inline-start:-68px !important}.me-sm-n17{margin-inline-end:-68px !important}.ma-sm-n17{margin:-68px !important}.mt-sm-n18,.my-sm-n18{margin-top:-72px !important}.mr-sm-n18,.mx-sm-n18{margin-right:-72px !important}.ml-sm-n18,.mx-sm-n18{margin-left:-72px !important}.mb-sm-n18,.my-sm-n18{margin-bottom:-72px !important}.ms-sm-n18{margin-inline-start:-72px !important}.me-sm-n18{margin-inline-end:-72px !important}.ma-sm-n18{margin:-72px !important}.mt-sm-n19,.my-sm-n19{margin-top:-76px !important}.mr-sm-n19,.mx-sm-n19{margin-right:-76px !important}.ml-sm-n19,.mx-sm-n19{margin-left:-76px !important}.mb-sm-n19,.my-sm-n19{margin-bottom:-76px !important}.ms-sm-n19{margin-inline-start:-76px !important}.me-sm-n19{margin-inline-end:-76px !important}.ma-sm-n19{margin:-76px !important}.mt-sm-n20,.my-sm-n20{margin-top:-80px !important}.mr-sm-n20,.mx-sm-n20{margin-right:-80px !important}.ml-sm-n20,.mx-sm-n20{margin-left:-80px !important}.mb-sm-n20,.my-sm-n20{margin-bottom:-80px !important}.ms-sm-n20{margin-inline-start:-80px !important}.me-sm-n20{margin-inline-end:-80px !important}.ma-sm-n20{margin:-80px !important}}@media screen and (min-width: 960px){.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ms-md-0{margin-inline-start:0 !important}.me-md-0{margin-inline-end:0 !important}.ma-md-0{margin:0 !important}.mt-md-1,.my-md-1{margin-top:4px !important}.mr-md-1,.mx-md-1{margin-right:4px !important}.ml-md-1,.mx-md-1{margin-left:4px !important}.mb-md-1,.my-md-1{margin-bottom:4px !important}.ms-md-1{margin-inline-start:4px !important}.me-md-1{margin-inline-end:4px !important}.ma-md-1{margin:4px !important}.mt-md-2,.my-md-2{margin-top:8px !important}.mr-md-2,.mx-md-2{margin-right:8px !important}.ml-md-2,.mx-md-2{margin-left:8px !important}.mb-md-2,.my-md-2{margin-bottom:8px !important}.ms-md-2{margin-inline-start:8px !important}.me-md-2{margin-inline-end:8px !important}.ma-md-2{margin:8px !important}.mt-md-3,.my-md-3{margin-top:12px !important}.mr-md-3,.mx-md-3{margin-right:12px !important}.ml-md-3,.mx-md-3{margin-left:12px !important}.mb-md-3,.my-md-3{margin-bottom:12px !important}.ms-md-3{margin-inline-start:12px !important}.me-md-3{margin-inline-end:12px !important}.ma-md-3{margin:12px !important}.mt-md-4,.my-md-4{margin-top:16px !important}.mr-md-4,.mx-md-4{margin-right:16px !important}.ml-md-4,.mx-md-4{margin-left:16px !important}.mb-md-4,.my-md-4{margin-bottom:16px !important}.ms-md-4{margin-inline-start:16px !important}.me-md-4{margin-inline-end:16px !important}.ma-md-4{margin:16px !important}.mt-md-5,.my-md-5{margin-top:20px !important}.mr-md-5,.mx-md-5{margin-right:20px !important}.ml-md-5,.mx-md-5{margin-left:20px !important}.mb-md-5,.my-md-5{margin-bottom:20px !important}.ms-md-5{margin-inline-start:20px !important}.me-md-5{margin-inline-end:20px !important}.ma-md-5{margin:20px !important}.mt-md-6,.my-md-6{margin-top:24px !important}.mr-md-6,.mx-md-6{margin-right:24px !important}.ml-md-6,.mx-md-6{margin-left:24px !important}.mb-md-6,.my-md-6{margin-bottom:24px !important}.ms-md-6{margin-inline-start:24px !important}.me-md-6{margin-inline-end:24px !important}.ma-md-6{margin:24px !important}.mt-md-7,.my-md-7{margin-top:28px !important}.mr-md-7,.mx-md-7{margin-right:28px !important}.ml-md-7,.mx-md-7{margin-left:28px !important}.mb-md-7,.my-md-7{margin-bottom:28px !important}.ms-md-7{margin-inline-start:28px !important}.me-md-7{margin-inline-end:28px !important}.ma-md-7{margin:28px !important}.mt-md-8,.my-md-8{margin-top:32px !important}.mr-md-8,.mx-md-8{margin-right:32px !important}.ml-md-8,.mx-md-8{margin-left:32px !important}.mb-md-8,.my-md-8{margin-bottom:32px !important}.ms-md-8{margin-inline-start:32px !important}.me-md-8{margin-inline-end:32px !important}.ma-md-8{margin:32px !important}.mt-md-9,.my-md-9{margin-top:36px !important}.mr-md-9,.mx-md-9{margin-right:36px !important}.ml-md-9,.mx-md-9{margin-left:36px !important}.mb-md-9,.my-md-9{margin-bottom:36px !important}.ms-md-9{margin-inline-start:36px !important}.me-md-9{margin-inline-end:36px !important}.ma-md-9{margin:36px !important}.mt-md-10,.my-md-10{margin-top:40px !important}.mr-md-10,.mx-md-10{margin-right:40px !important}.ml-md-10,.mx-md-10{margin-left:40px !important}.mb-md-10,.my-md-10{margin-bottom:40px !important}.ms-md-10{margin-inline-start:40px !important}.me-md-10{margin-inline-end:40px !important}.ma-md-10{margin:40px !important}.mt-md-11,.my-md-11{margin-top:44px !important}.mr-md-11,.mx-md-11{margin-right:44px !important}.ml-md-11,.mx-md-11{margin-left:44px !important}.mb-md-11,.my-md-11{margin-bottom:44px !important}.ms-md-11{margin-inline-start:44px !important}.me-md-11{margin-inline-end:44px !important}.ma-md-11{margin:44px !important}.mt-md-12,.my-md-12{margin-top:48px !important}.mr-md-12,.mx-md-12{margin-right:48px !important}.ml-md-12,.mx-md-12{margin-left:48px !important}.mb-md-12,.my-md-12{margin-bottom:48px !important}.ms-md-12{margin-inline-start:48px !important}.me-md-12{margin-inline-end:48px !important}.ma-md-12{margin:48px !important}.mt-md-13,.my-md-13{margin-top:52px !important}.mr-md-13,.mx-md-13{margin-right:52px !important}.ml-md-13,.mx-md-13{margin-left:52px !important}.mb-md-13,.my-md-13{margin-bottom:52px !important}.ms-md-13{margin-inline-start:52px !important}.me-md-13{margin-inline-end:52px !important}.ma-md-13{margin:52px !important}.mt-md-14,.my-md-14{margin-top:56px !important}.mr-md-14,.mx-md-14{margin-right:56px !important}.ml-md-14,.mx-md-14{margin-left:56px !important}.mb-md-14,.my-md-14{margin-bottom:56px !important}.ms-md-14{margin-inline-start:56px !important}.me-md-14{margin-inline-end:56px !important}.ma-md-14{margin:56px !important}.mt-md-15,.my-md-15{margin-top:60px !important}.mr-md-15,.mx-md-15{margin-right:60px !important}.ml-md-15,.mx-md-15{margin-left:60px !important}.mb-md-15,.my-md-15{margin-bottom:60px !important}.ms-md-15{margin-inline-start:60px !important}.me-md-15{margin-inline-end:60px !important}.ma-md-15{margin:60px !important}.mt-md-16,.my-md-16{margin-top:64px !important}.mr-md-16,.mx-md-16{margin-right:64px !important}.ml-md-16,.mx-md-16{margin-left:64px !important}.mb-md-16,.my-md-16{margin-bottom:64px !important}.ms-md-16{margin-inline-start:64px !important}.me-md-16{margin-inline-end:64px !important}.ma-md-16{margin:64px !important}.mt-md-17,.my-md-17{margin-top:68px !important}.mr-md-17,.mx-md-17{margin-right:68px !important}.ml-md-17,.mx-md-17{margin-left:68px !important}.mb-md-17,.my-md-17{margin-bottom:68px !important}.ms-md-17{margin-inline-start:68px !important}.me-md-17{margin-inline-end:68px !important}.ma-md-17{margin:68px !important}.mt-md-18,.my-md-18{margin-top:72px !important}.mr-md-18,.mx-md-18{margin-right:72px !important}.ml-md-18,.mx-md-18{margin-left:72px !important}.mb-md-18,.my-md-18{margin-bottom:72px !important}.ms-md-18{margin-inline-start:72px !important}.me-md-18{margin-inline-end:72px !important}.ma-md-18{margin:72px !important}.mt-md-19,.my-md-19{margin-top:76px !important}.mr-md-19,.mx-md-19{margin-right:76px !important}.ml-md-19,.mx-md-19{margin-left:76px !important}.mb-md-19,.my-md-19{margin-bottom:76px !important}.ms-md-19{margin-inline-start:76px !important}.me-md-19{margin-inline-end:76px !important}.ma-md-19{margin:76px !important}.mt-md-20,.my-md-20{margin-top:80px !important}.mr-md-20,.mx-md-20{margin-right:80px !important}.ml-md-20,.mx-md-20{margin-left:80px !important}.mb-md-20,.my-md-20{margin-bottom:80px !important}.ms-md-20{margin-inline-start:80px !important}.me-md-20{margin-inline-end:80px !important}.ma-md-20{margin:80px !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ms-md-auto{margin-inline-start:auto !important}.me-md-auto{margin-inline-end:auto !important}.ma-md-auto{margin:auto !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.ps-md-0{padding-inline-start:0 !important}.pe-md-0{padding-inline-end:0 !important}.pa-md-0{padding:0 !important}.pt-md-1,.py-md-1{padding-top:4px !important}.pr-md-1,.px-md-1{padding-right:4px !important}.pl-md-1,.px-md-1{padding-left:4px !important}.pb-md-1,.py-md-1{padding-bottom:4px !important}.ps-md-1{padding-inline-start:4px !important}.pe-md-1{padding-inline-end:4px !important}.pa-md-1{padding:4px !important}.pt-md-2,.py-md-2{padding-top:8px !important}.pr-md-2,.px-md-2{padding-right:8px !important}.pl-md-2,.px-md-2{padding-left:8px !important}.pb-md-2,.py-md-2{padding-bottom:8px !important}.ps-md-2{padding-inline-start:8px !important}.pe-md-2{padding-inline-end:8px !important}.pa-md-2{padding:8px !important}.pt-md-3,.py-md-3{padding-top:12px !important}.pr-md-3,.px-md-3{padding-right:12px !important}.pl-md-3,.px-md-3{padding-left:12px !important}.pb-md-3,.py-md-3{padding-bottom:12px !important}.ps-md-3{padding-inline-start:12px !important}.pe-md-3{padding-inline-end:12px !important}.pa-md-3{padding:12px !important}.pt-md-4,.py-md-4{padding-top:16px !important}.pr-md-4,.px-md-4{padding-right:16px !important}.pl-md-4,.px-md-4{padding-left:16px !important}.pb-md-4,.py-md-4{padding-bottom:16px !important}.ps-md-4{padding-inline-start:16px !important}.pe-md-4{padding-inline-end:16px !important}.pa-md-4{padding:16px !important}.pt-md-5,.py-md-5{padding-top:20px !important}.pr-md-5,.px-md-5{padding-right:20px !important}.pl-md-5,.px-md-5{padding-left:20px !important}.pb-md-5,.py-md-5{padding-bottom:20px !important}.ps-md-5{padding-inline-start:20px !important}.pe-md-5{padding-inline-end:20px !important}.pa-md-5{padding:20px !important}.pt-md-6,.py-md-6{padding-top:24px !important}.pr-md-6,.px-md-6{padding-right:24px !important}.pl-md-6,.px-md-6{padding-left:24px !important}.pb-md-6,.py-md-6{padding-bottom:24px !important}.ps-md-6{padding-inline-start:24px !important}.pe-md-6{padding-inline-end:24px !important}.pa-md-6{padding:24px !important}.pt-md-7,.py-md-7{padding-top:28px !important}.pr-md-7,.px-md-7{padding-right:28px !important}.pl-md-7,.px-md-7{padding-left:28px !important}.pb-md-7,.py-md-7{padding-bottom:28px !important}.ps-md-7{padding-inline-start:28px !important}.pe-md-7{padding-inline-end:28px !important}.pa-md-7{padding:28px !important}.pt-md-8,.py-md-8{padding-top:32px !important}.pr-md-8,.px-md-8{padding-right:32px !important}.pl-md-8,.px-md-8{padding-left:32px !important}.pb-md-8,.py-md-8{padding-bottom:32px !important}.ps-md-8{padding-inline-start:32px !important}.pe-md-8{padding-inline-end:32px !important}.pa-md-8{padding:32px !important}.pt-md-9,.py-md-9{padding-top:36px !important}.pr-md-9,.px-md-9{padding-right:36px !important}.pl-md-9,.px-md-9{padding-left:36px !important}.pb-md-9,.py-md-9{padding-bottom:36px !important}.ps-md-9{padding-inline-start:36px !important}.pe-md-9{padding-inline-end:36px !important}.pa-md-9{padding:36px !important}.pt-md-10,.py-md-10{padding-top:40px !important}.pr-md-10,.px-md-10{padding-right:40px !important}.pl-md-10,.px-md-10{padding-left:40px !important}.pb-md-10,.py-md-10{padding-bottom:40px !important}.ps-md-10{padding-inline-start:40px !important}.pe-md-10{padding-inline-end:40px !important}.pa-md-10{padding:40px !important}.pt-md-11,.py-md-11{padding-top:44px !important}.pr-md-11,.px-md-11{padding-right:44px !important}.pl-md-11,.px-md-11{padding-left:44px !important}.pb-md-11,.py-md-11{padding-bottom:44px !important}.ps-md-11{padding-inline-start:44px !important}.pe-md-11{padding-inline-end:44px !important}.pa-md-11{padding:44px !important}.pt-md-12,.py-md-12{padding-top:48px !important}.pr-md-12,.px-md-12{padding-right:48px !important}.pl-md-12,.px-md-12{padding-left:48px !important}.pb-md-12,.py-md-12{padding-bottom:48px !important}.ps-md-12{padding-inline-start:48px !important}.pe-md-12{padding-inline-end:48px !important}.pa-md-12{padding:48px !important}.pt-md-13,.py-md-13{padding-top:52px !important}.pr-md-13,.px-md-13{padding-right:52px !important}.pl-md-13,.px-md-13{padding-left:52px !important}.pb-md-13,.py-md-13{padding-bottom:52px !important}.ps-md-13{padding-inline-start:52px !important}.pe-md-13{padding-inline-end:52px !important}.pa-md-13{padding:52px !important}.pt-md-14,.py-md-14{padding-top:56px !important}.pr-md-14,.px-md-14{padding-right:56px !important}.pl-md-14,.px-md-14{padding-left:56px !important}.pb-md-14,.py-md-14{padding-bottom:56px !important}.ps-md-14{padding-inline-start:56px !important}.pe-md-14{padding-inline-end:56px !important}.pa-md-14{padding:56px !important}.pt-md-15,.py-md-15{padding-top:60px !important}.pr-md-15,.px-md-15{padding-right:60px !important}.pl-md-15,.px-md-15{padding-left:60px !important}.pb-md-15,.py-md-15{padding-bottom:60px !important}.ps-md-15{padding-inline-start:60px !important}.pe-md-15{padding-inline-end:60px !important}.pa-md-15{padding:60px !important}.pt-md-16,.py-md-16{padding-top:64px !important}.pr-md-16,.px-md-16{padding-right:64px !important}.pl-md-16,.px-md-16{padding-left:64px !important}.pb-md-16,.py-md-16{padding-bottom:64px !important}.ps-md-16{padding-inline-start:64px !important}.pe-md-16{padding-inline-end:64px !important}.pa-md-16{padding:64px !important}.pt-md-17,.py-md-17{padding-top:68px !important}.pr-md-17,.px-md-17{padding-right:68px !important}.pl-md-17,.px-md-17{padding-left:68px !important}.pb-md-17,.py-md-17{padding-bottom:68px !important}.ps-md-17{padding-inline-start:68px !important}.pe-md-17{padding-inline-end:68px !important}.pa-md-17{padding:68px !important}.pt-md-18,.py-md-18{padding-top:72px !important}.pr-md-18,.px-md-18{padding-right:72px !important}.pl-md-18,.px-md-18{padding-left:72px !important}.pb-md-18,.py-md-18{padding-bottom:72px !important}.ps-md-18{padding-inline-start:72px !important}.pe-md-18{padding-inline-end:72px !important}.pa-md-18{padding:72px !important}.pt-md-19,.py-md-19{padding-top:76px !important}.pr-md-19,.px-md-19{padding-right:76px !important}.pl-md-19,.px-md-19{padding-left:76px !important}.pb-md-19,.py-md-19{padding-bottom:76px !important}.ps-md-19{padding-inline-start:76px !important}.pe-md-19{padding-inline-end:76px !important}.pa-md-19{padding:76px !important}.pt-md-20,.py-md-20{padding-top:80px !important}.pr-md-20,.px-md-20{padding-right:80px !important}.pl-md-20,.px-md-20{padding-left:80px !important}.pb-md-20,.py-md-20{padding-bottom:80px !important}.ps-md-20{padding-inline-start:80px !important}.pe-md-20{padding-inline-end:80px !important}.pa-md-20{padding:80px !important}.pt-md-auto,.py-md-auto{padding-top:auto !important}.pr-md-auto,.px-md-auto{padding-right:auto !important}.pl-md-auto,.px-md-auto{padding-left:auto !important}.pb-md-auto,.py-md-auto{padding-bottom:auto !important}.ps-md-auto{padding-inline-start:auto !important}.pe-md-auto{padding-inline-end:auto !important}.pa-md-auto{padding:auto !important}.mt-md-n1,.my-md-n1{margin-top:-4px !important}.mr-md-n1,.mx-md-n1{margin-right:-4px !important}.ml-md-n1,.mx-md-n1{margin-left:-4px !important}.mb-md-n1,.my-md-n1{margin-bottom:-4px !important}.ms-md-n1{margin-inline-start:-4px !important}.me-md-n1{margin-inline-end:-4px !important}.ma-md-n1{margin:-4px !important}.mt-md-n2,.my-md-n2{margin-top:-8px !important}.mr-md-n2,.mx-md-n2{margin-right:-8px !important}.ml-md-n2,.mx-md-n2{margin-left:-8px !important}.mb-md-n2,.my-md-n2{margin-bottom:-8px !important}.ms-md-n2{margin-inline-start:-8px !important}.me-md-n2{margin-inline-end:-8px !important}.ma-md-n2{margin:-8px !important}.mt-md-n3,.my-md-n3{margin-top:-12px !important}.mr-md-n3,.mx-md-n3{margin-right:-12px !important}.ml-md-n3,.mx-md-n3{margin-left:-12px !important}.mb-md-n3,.my-md-n3{margin-bottom:-12px !important}.ms-md-n3{margin-inline-start:-12px !important}.me-md-n3{margin-inline-end:-12px !important}.ma-md-n3{margin:-12px !important}.mt-md-n4,.my-md-n4{margin-top:-16px !important}.mr-md-n4,.mx-md-n4{margin-right:-16px !important}.ml-md-n4,.mx-md-n4{margin-left:-16px !important}.mb-md-n4,.my-md-n4{margin-bottom:-16px !important}.ms-md-n4{margin-inline-start:-16px !important}.me-md-n4{margin-inline-end:-16px !important}.ma-md-n4{margin:-16px !important}.mt-md-n5,.my-md-n5{margin-top:-20px !important}.mr-md-n5,.mx-md-n5{margin-right:-20px !important}.ml-md-n5,.mx-md-n5{margin-left:-20px !important}.mb-md-n5,.my-md-n5{margin-bottom:-20px !important}.ms-md-n5{margin-inline-start:-20px !important}.me-md-n5{margin-inline-end:-20px !important}.ma-md-n5{margin:-20px !important}.mt-md-n6,.my-md-n6{margin-top:-24px !important}.mr-md-n6,.mx-md-n6{margin-right:-24px !important}.ml-md-n6,.mx-md-n6{margin-left:-24px !important}.mb-md-n6,.my-md-n6{margin-bottom:-24px !important}.ms-md-n6{margin-inline-start:-24px !important}.me-md-n6{margin-inline-end:-24px !important}.ma-md-n6{margin:-24px !important}.mt-md-n7,.my-md-n7{margin-top:-28px !important}.mr-md-n7,.mx-md-n7{margin-right:-28px !important}.ml-md-n7,.mx-md-n7{margin-left:-28px !important}.mb-md-n7,.my-md-n7{margin-bottom:-28px !important}.ms-md-n7{margin-inline-start:-28px !important}.me-md-n7{margin-inline-end:-28px !important}.ma-md-n7{margin:-28px !important}.mt-md-n8,.my-md-n8{margin-top:-32px !important}.mr-md-n8,.mx-md-n8{margin-right:-32px !important}.ml-md-n8,.mx-md-n8{margin-left:-32px !important}.mb-md-n8,.my-md-n8{margin-bottom:-32px !important}.ms-md-n8{margin-inline-start:-32px !important}.me-md-n8{margin-inline-end:-32px !important}.ma-md-n8{margin:-32px !important}.mt-md-n9,.my-md-n9{margin-top:-36px !important}.mr-md-n9,.mx-md-n9{margin-right:-36px !important}.ml-md-n9,.mx-md-n9{margin-left:-36px !important}.mb-md-n9,.my-md-n9{margin-bottom:-36px !important}.ms-md-n9{margin-inline-start:-36px !important}.me-md-n9{margin-inline-end:-36px !important}.ma-md-n9{margin:-36px !important}.mt-md-n10,.my-md-n10{margin-top:-40px !important}.mr-md-n10,.mx-md-n10{margin-right:-40px !important}.ml-md-n10,.mx-md-n10{margin-left:-40px !important}.mb-md-n10,.my-md-n10{margin-bottom:-40px !important}.ms-md-n10{margin-inline-start:-40px !important}.me-md-n10{margin-inline-end:-40px !important}.ma-md-n10{margin:-40px !important}.mt-md-n11,.my-md-n11{margin-top:-44px !important}.mr-md-n11,.mx-md-n11{margin-right:-44px !important}.ml-md-n11,.mx-md-n11{margin-left:-44px !important}.mb-md-n11,.my-md-n11{margin-bottom:-44px !important}.ms-md-n11{margin-inline-start:-44px !important}.me-md-n11{margin-inline-end:-44px !important}.ma-md-n11{margin:-44px !important}.mt-md-n12,.my-md-n12{margin-top:-48px !important}.mr-md-n12,.mx-md-n12{margin-right:-48px !important}.ml-md-n12,.mx-md-n12{margin-left:-48px !important}.mb-md-n12,.my-md-n12{margin-bottom:-48px !important}.ms-md-n12{margin-inline-start:-48px !important}.me-md-n12{margin-inline-end:-48px !important}.ma-md-n12{margin:-48px !important}.mt-md-n13,.my-md-n13{margin-top:-52px !important}.mr-md-n13,.mx-md-n13{margin-right:-52px !important}.ml-md-n13,.mx-md-n13{margin-left:-52px !important}.mb-md-n13,.my-md-n13{margin-bottom:-52px !important}.ms-md-n13{margin-inline-start:-52px !important}.me-md-n13{margin-inline-end:-52px !important}.ma-md-n13{margin:-52px !important}.mt-md-n14,.my-md-n14{margin-top:-56px !important}.mr-md-n14,.mx-md-n14{margin-right:-56px !important}.ml-md-n14,.mx-md-n14{margin-left:-56px !important}.mb-md-n14,.my-md-n14{margin-bottom:-56px !important}.ms-md-n14{margin-inline-start:-56px !important}.me-md-n14{margin-inline-end:-56px !important}.ma-md-n14{margin:-56px !important}.mt-md-n15,.my-md-n15{margin-top:-60px !important}.mr-md-n15,.mx-md-n15{margin-right:-60px !important}.ml-md-n15,.mx-md-n15{margin-left:-60px !important}.mb-md-n15,.my-md-n15{margin-bottom:-60px !important}.ms-md-n15{margin-inline-start:-60px !important}.me-md-n15{margin-inline-end:-60px !important}.ma-md-n15{margin:-60px !important}.mt-md-n16,.my-md-n16{margin-top:-64px !important}.mr-md-n16,.mx-md-n16{margin-right:-64px !important}.ml-md-n16,.mx-md-n16{margin-left:-64px !important}.mb-md-n16,.my-md-n16{margin-bottom:-64px !important}.ms-md-n16{margin-inline-start:-64px !important}.me-md-n16{margin-inline-end:-64px !important}.ma-md-n16{margin:-64px !important}.mt-md-n17,.my-md-n17{margin-top:-68px !important}.mr-md-n17,.mx-md-n17{margin-right:-68px !important}.ml-md-n17,.mx-md-n17{margin-left:-68px !important}.mb-md-n17,.my-md-n17{margin-bottom:-68px !important}.ms-md-n17{margin-inline-start:-68px !important}.me-md-n17{margin-inline-end:-68px !important}.ma-md-n17{margin:-68px !important}.mt-md-n18,.my-md-n18{margin-top:-72px !important}.mr-md-n18,.mx-md-n18{margin-right:-72px !important}.ml-md-n18,.mx-md-n18{margin-left:-72px !important}.mb-md-n18,.my-md-n18{margin-bottom:-72px !important}.ms-md-n18{margin-inline-start:-72px !important}.me-md-n18{margin-inline-end:-72px !important}.ma-md-n18{margin:-72px !important}.mt-md-n19,.my-md-n19{margin-top:-76px !important}.mr-md-n19,.mx-md-n19{margin-right:-76px !important}.ml-md-n19,.mx-md-n19{margin-left:-76px !important}.mb-md-n19,.my-md-n19{margin-bottom:-76px !important}.ms-md-n19{margin-inline-start:-76px !important}.me-md-n19{margin-inline-end:-76px !important}.ma-md-n19{margin:-76px !important}.mt-md-n20,.my-md-n20{margin-top:-80px !important}.mr-md-n20,.mx-md-n20{margin-right:-80px !important}.ml-md-n20,.mx-md-n20{margin-left:-80px !important}.mb-md-n20,.my-md-n20{margin-bottom:-80px !important}.ms-md-n20{margin-inline-start:-80px !important}.me-md-n20{margin-inline-end:-80px !important}.ma-md-n20{margin:-80px !important}}@media screen and (min-width: 1280px){.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ms-lg-0{margin-inline-start:0 !important}.me-lg-0{margin-inline-end:0 !important}.ma-lg-0{margin:0 !important}.mt-lg-1,.my-lg-1{margin-top:4px !important}.mr-lg-1,.mx-lg-1{margin-right:4px !important}.ml-lg-1,.mx-lg-1{margin-left:4px !important}.mb-lg-1,.my-lg-1{margin-bottom:4px !important}.ms-lg-1{margin-inline-start:4px !important}.me-lg-1{margin-inline-end:4px !important}.ma-lg-1{margin:4px !important}.mt-lg-2,.my-lg-2{margin-top:8px !important}.mr-lg-2,.mx-lg-2{margin-right:8px !important}.ml-lg-2,.mx-lg-2{margin-left:8px !important}.mb-lg-2,.my-lg-2{margin-bottom:8px !important}.ms-lg-2{margin-inline-start:8px !important}.me-lg-2{margin-inline-end:8px !important}.ma-lg-2{margin:8px !important}.mt-lg-3,.my-lg-3{margin-top:12px !important}.mr-lg-3,.mx-lg-3{margin-right:12px !important}.ml-lg-3,.mx-lg-3{margin-left:12px !important}.mb-lg-3,.my-lg-3{margin-bottom:12px !important}.ms-lg-3{margin-inline-start:12px !important}.me-lg-3{margin-inline-end:12px !important}.ma-lg-3{margin:12px !important}.mt-lg-4,.my-lg-4{margin-top:16px !important}.mr-lg-4,.mx-lg-4{margin-right:16px !important}.ml-lg-4,.mx-lg-4{margin-left:16px !important}.mb-lg-4,.my-lg-4{margin-bottom:16px !important}.ms-lg-4{margin-inline-start:16px !important}.me-lg-4{margin-inline-end:16px !important}.ma-lg-4{margin:16px !important}.mt-lg-5,.my-lg-5{margin-top:20px !important}.mr-lg-5,.mx-lg-5{margin-right:20px !important}.ml-lg-5,.mx-lg-5{margin-left:20px !important}.mb-lg-5,.my-lg-5{margin-bottom:20px !important}.ms-lg-5{margin-inline-start:20px !important}.me-lg-5{margin-inline-end:20px !important}.ma-lg-5{margin:20px !important}.mt-lg-6,.my-lg-6{margin-top:24px !important}.mr-lg-6,.mx-lg-6{margin-right:24px !important}.ml-lg-6,.mx-lg-6{margin-left:24px !important}.mb-lg-6,.my-lg-6{margin-bottom:24px !important}.ms-lg-6{margin-inline-start:24px !important}.me-lg-6{margin-inline-end:24px !important}.ma-lg-6{margin:24px !important}.mt-lg-7,.my-lg-7{margin-top:28px !important}.mr-lg-7,.mx-lg-7{margin-right:28px !important}.ml-lg-7,.mx-lg-7{margin-left:28px !important}.mb-lg-7,.my-lg-7{margin-bottom:28px !important}.ms-lg-7{margin-inline-start:28px !important}.me-lg-7{margin-inline-end:28px !important}.ma-lg-7{margin:28px !important}.mt-lg-8,.my-lg-8{margin-top:32px !important}.mr-lg-8,.mx-lg-8{margin-right:32px !important}.ml-lg-8,.mx-lg-8{margin-left:32px !important}.mb-lg-8,.my-lg-8{margin-bottom:32px !important}.ms-lg-8{margin-inline-start:32px !important}.me-lg-8{margin-inline-end:32px !important}.ma-lg-8{margin:32px !important}.mt-lg-9,.my-lg-9{margin-top:36px !important}.mr-lg-9,.mx-lg-9{margin-right:36px !important}.ml-lg-9,.mx-lg-9{margin-left:36px !important}.mb-lg-9,.my-lg-9{margin-bottom:36px !important}.ms-lg-9{margin-inline-start:36px !important}.me-lg-9{margin-inline-end:36px !important}.ma-lg-9{margin:36px !important}.mt-lg-10,.my-lg-10{margin-top:40px !important}.mr-lg-10,.mx-lg-10{margin-right:40px !important}.ml-lg-10,.mx-lg-10{margin-left:40px !important}.mb-lg-10,.my-lg-10{margin-bottom:40px !important}.ms-lg-10{margin-inline-start:40px !important}.me-lg-10{margin-inline-end:40px !important}.ma-lg-10{margin:40px !important}.mt-lg-11,.my-lg-11{margin-top:44px !important}.mr-lg-11,.mx-lg-11{margin-right:44px !important}.ml-lg-11,.mx-lg-11{margin-left:44px !important}.mb-lg-11,.my-lg-11{margin-bottom:44px !important}.ms-lg-11{margin-inline-start:44px !important}.me-lg-11{margin-inline-end:44px !important}.ma-lg-11{margin:44px !important}.mt-lg-12,.my-lg-12{margin-top:48px !important}.mr-lg-12,.mx-lg-12{margin-right:48px !important}.ml-lg-12,.mx-lg-12{margin-left:48px !important}.mb-lg-12,.my-lg-12{margin-bottom:48px !important}.ms-lg-12{margin-inline-start:48px !important}.me-lg-12{margin-inline-end:48px !important}.ma-lg-12{margin:48px !important}.mt-lg-13,.my-lg-13{margin-top:52px !important}.mr-lg-13,.mx-lg-13{margin-right:52px !important}.ml-lg-13,.mx-lg-13{margin-left:52px !important}.mb-lg-13,.my-lg-13{margin-bottom:52px !important}.ms-lg-13{margin-inline-start:52px !important}.me-lg-13{margin-inline-end:52px !important}.ma-lg-13{margin:52px !important}.mt-lg-14,.my-lg-14{margin-top:56px !important}.mr-lg-14,.mx-lg-14{margin-right:56px !important}.ml-lg-14,.mx-lg-14{margin-left:56px !important}.mb-lg-14,.my-lg-14{margin-bottom:56px !important}.ms-lg-14{margin-inline-start:56px !important}.me-lg-14{margin-inline-end:56px !important}.ma-lg-14{margin:56px !important}.mt-lg-15,.my-lg-15{margin-top:60px !important}.mr-lg-15,.mx-lg-15{margin-right:60px !important}.ml-lg-15,.mx-lg-15{margin-left:60px !important}.mb-lg-15,.my-lg-15{margin-bottom:60px !important}.ms-lg-15{margin-inline-start:60px !important}.me-lg-15{margin-inline-end:60px !important}.ma-lg-15{margin:60px !important}.mt-lg-16,.my-lg-16{margin-top:64px !important}.mr-lg-16,.mx-lg-16{margin-right:64px !important}.ml-lg-16,.mx-lg-16{margin-left:64px !important}.mb-lg-16,.my-lg-16{margin-bottom:64px !important}.ms-lg-16{margin-inline-start:64px !important}.me-lg-16{margin-inline-end:64px !important}.ma-lg-16{margin:64px !important}.mt-lg-17,.my-lg-17{margin-top:68px !important}.mr-lg-17,.mx-lg-17{margin-right:68px !important}.ml-lg-17,.mx-lg-17{margin-left:68px !important}.mb-lg-17,.my-lg-17{margin-bottom:68px !important}.ms-lg-17{margin-inline-start:68px !important}.me-lg-17{margin-inline-end:68px !important}.ma-lg-17{margin:68px !important}.mt-lg-18,.my-lg-18{margin-top:72px !important}.mr-lg-18,.mx-lg-18{margin-right:72px !important}.ml-lg-18,.mx-lg-18{margin-left:72px !important}.mb-lg-18,.my-lg-18{margin-bottom:72px !important}.ms-lg-18{margin-inline-start:72px !important}.me-lg-18{margin-inline-end:72px !important}.ma-lg-18{margin:72px !important}.mt-lg-19,.my-lg-19{margin-top:76px !important}.mr-lg-19,.mx-lg-19{margin-right:76px !important}.ml-lg-19,.mx-lg-19{margin-left:76px !important}.mb-lg-19,.my-lg-19{margin-bottom:76px !important}.ms-lg-19{margin-inline-start:76px !important}.me-lg-19{margin-inline-end:76px !important}.ma-lg-19{margin:76px !important}.mt-lg-20,.my-lg-20{margin-top:80px !important}.mr-lg-20,.mx-lg-20{margin-right:80px !important}.ml-lg-20,.mx-lg-20{margin-left:80px !important}.mb-lg-20,.my-lg-20{margin-bottom:80px !important}.ms-lg-20{margin-inline-start:80px !important}.me-lg-20{margin-inline-end:80px !important}.ma-lg-20{margin:80px !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ms-lg-auto{margin-inline-start:auto !important}.me-lg-auto{margin-inline-end:auto !important}.ma-lg-auto{margin:auto !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.ps-lg-0{padding-inline-start:0 !important}.pe-lg-0{padding-inline-end:0 !important}.pa-lg-0{padding:0 !important}.pt-lg-1,.py-lg-1{padding-top:4px !important}.pr-lg-1,.px-lg-1{padding-right:4px !important}.pl-lg-1,.px-lg-1{padding-left:4px !important}.pb-lg-1,.py-lg-1{padding-bottom:4px !important}.ps-lg-1{padding-inline-start:4px !important}.pe-lg-1{padding-inline-end:4px !important}.pa-lg-1{padding:4px !important}.pt-lg-2,.py-lg-2{padding-top:8px !important}.pr-lg-2,.px-lg-2{padding-right:8px !important}.pl-lg-2,.px-lg-2{padding-left:8px !important}.pb-lg-2,.py-lg-2{padding-bottom:8px !important}.ps-lg-2{padding-inline-start:8px !important}.pe-lg-2{padding-inline-end:8px !important}.pa-lg-2{padding:8px !important}.pt-lg-3,.py-lg-3{padding-top:12px !important}.pr-lg-3,.px-lg-3{padding-right:12px !important}.pl-lg-3,.px-lg-3{padding-left:12px !important}.pb-lg-3,.py-lg-3{padding-bottom:12px !important}.ps-lg-3{padding-inline-start:12px !important}.pe-lg-3{padding-inline-end:12px !important}.pa-lg-3{padding:12px !important}.pt-lg-4,.py-lg-4{padding-top:16px !important}.pr-lg-4,.px-lg-4{padding-right:16px !important}.pl-lg-4,.px-lg-4{padding-left:16px !important}.pb-lg-4,.py-lg-4{padding-bottom:16px !important}.ps-lg-4{padding-inline-start:16px !important}.pe-lg-4{padding-inline-end:16px !important}.pa-lg-4{padding:16px !important}.pt-lg-5,.py-lg-5{padding-top:20px !important}.pr-lg-5,.px-lg-5{padding-right:20px !important}.pl-lg-5,.px-lg-5{padding-left:20px !important}.pb-lg-5,.py-lg-5{padding-bottom:20px !important}.ps-lg-5{padding-inline-start:20px !important}.pe-lg-5{padding-inline-end:20px !important}.pa-lg-5{padding:20px !important}.pt-lg-6,.py-lg-6{padding-top:24px !important}.pr-lg-6,.px-lg-6{padding-right:24px !important}.pl-lg-6,.px-lg-6{padding-left:24px !important}.pb-lg-6,.py-lg-6{padding-bottom:24px !important}.ps-lg-6{padding-inline-start:24px !important}.pe-lg-6{padding-inline-end:24px !important}.pa-lg-6{padding:24px !important}.pt-lg-7,.py-lg-7{padding-top:28px !important}.pr-lg-7,.px-lg-7{padding-right:28px !important}.pl-lg-7,.px-lg-7{padding-left:28px !important}.pb-lg-7,.py-lg-7{padding-bottom:28px !important}.ps-lg-7{padding-inline-start:28px !important}.pe-lg-7{padding-inline-end:28px !important}.pa-lg-7{padding:28px !important}.pt-lg-8,.py-lg-8{padding-top:32px !important}.pr-lg-8,.px-lg-8{padding-right:32px !important}.pl-lg-8,.px-lg-8{padding-left:32px !important}.pb-lg-8,.py-lg-8{padding-bottom:32px !important}.ps-lg-8{padding-inline-start:32px !important}.pe-lg-8{padding-inline-end:32px !important}.pa-lg-8{padding:32px !important}.pt-lg-9,.py-lg-9{padding-top:36px !important}.pr-lg-9,.px-lg-9{padding-right:36px !important}.pl-lg-9,.px-lg-9{padding-left:36px !important}.pb-lg-9,.py-lg-9{padding-bottom:36px !important}.ps-lg-9{padding-inline-start:36px !important}.pe-lg-9{padding-inline-end:36px !important}.pa-lg-9{padding:36px !important}.pt-lg-10,.py-lg-10{padding-top:40px !important}.pr-lg-10,.px-lg-10{padding-right:40px !important}.pl-lg-10,.px-lg-10{padding-left:40px !important}.pb-lg-10,.py-lg-10{padding-bottom:40px !important}.ps-lg-10{padding-inline-start:40px !important}.pe-lg-10{padding-inline-end:40px !important}.pa-lg-10{padding:40px !important}.pt-lg-11,.py-lg-11{padding-top:44px !important}.pr-lg-11,.px-lg-11{padding-right:44px !important}.pl-lg-11,.px-lg-11{padding-left:44px !important}.pb-lg-11,.py-lg-11{padding-bottom:44px !important}.ps-lg-11{padding-inline-start:44px !important}.pe-lg-11{padding-inline-end:44px !important}.pa-lg-11{padding:44px !important}.pt-lg-12,.py-lg-12{padding-top:48px !important}.pr-lg-12,.px-lg-12{padding-right:48px !important}.pl-lg-12,.px-lg-12{padding-left:48px !important}.pb-lg-12,.py-lg-12{padding-bottom:48px !important}.ps-lg-12{padding-inline-start:48px !important}.pe-lg-12{padding-inline-end:48px !important}.pa-lg-12{padding:48px !important}.pt-lg-13,.py-lg-13{padding-top:52px !important}.pr-lg-13,.px-lg-13{padding-right:52px !important}.pl-lg-13,.px-lg-13{padding-left:52px !important}.pb-lg-13,.py-lg-13{padding-bottom:52px !important}.ps-lg-13{padding-inline-start:52px !important}.pe-lg-13{padding-inline-end:52px !important}.pa-lg-13{padding:52px !important}.pt-lg-14,.py-lg-14{padding-top:56px !important}.pr-lg-14,.px-lg-14{padding-right:56px !important}.pl-lg-14,.px-lg-14{padding-left:56px !important}.pb-lg-14,.py-lg-14{padding-bottom:56px !important}.ps-lg-14{padding-inline-start:56px !important}.pe-lg-14{padding-inline-end:56px !important}.pa-lg-14{padding:56px !important}.pt-lg-15,.py-lg-15{padding-top:60px !important}.pr-lg-15,.px-lg-15{padding-right:60px !important}.pl-lg-15,.px-lg-15{padding-left:60px !important}.pb-lg-15,.py-lg-15{padding-bottom:60px !important}.ps-lg-15{padding-inline-start:60px !important}.pe-lg-15{padding-inline-end:60px !important}.pa-lg-15{padding:60px !important}.pt-lg-16,.py-lg-16{padding-top:64px !important}.pr-lg-16,.px-lg-16{padding-right:64px !important}.pl-lg-16,.px-lg-16{padding-left:64px !important}.pb-lg-16,.py-lg-16{padding-bottom:64px !important}.ps-lg-16{padding-inline-start:64px !important}.pe-lg-16{padding-inline-end:64px !important}.pa-lg-16{padding:64px !important}.pt-lg-17,.py-lg-17{padding-top:68px !important}.pr-lg-17,.px-lg-17{padding-right:68px !important}.pl-lg-17,.px-lg-17{padding-left:68px !important}.pb-lg-17,.py-lg-17{padding-bottom:68px !important}.ps-lg-17{padding-inline-start:68px !important}.pe-lg-17{padding-inline-end:68px !important}.pa-lg-17{padding:68px !important}.pt-lg-18,.py-lg-18{padding-top:72px !important}.pr-lg-18,.px-lg-18{padding-right:72px !important}.pl-lg-18,.px-lg-18{padding-left:72px !important}.pb-lg-18,.py-lg-18{padding-bottom:72px !important}.ps-lg-18{padding-inline-start:72px !important}.pe-lg-18{padding-inline-end:72px !important}.pa-lg-18{padding:72px !important}.pt-lg-19,.py-lg-19{padding-top:76px !important}.pr-lg-19,.px-lg-19{padding-right:76px !important}.pl-lg-19,.px-lg-19{padding-left:76px !important}.pb-lg-19,.py-lg-19{padding-bottom:76px !important}.ps-lg-19{padding-inline-start:76px !important}.pe-lg-19{padding-inline-end:76px !important}.pa-lg-19{padding:76px !important}.pt-lg-20,.py-lg-20{padding-top:80px !important}.pr-lg-20,.px-lg-20{padding-right:80px !important}.pl-lg-20,.px-lg-20{padding-left:80px !important}.pb-lg-20,.py-lg-20{padding-bottom:80px !important}.ps-lg-20{padding-inline-start:80px !important}.pe-lg-20{padding-inline-end:80px !important}.pa-lg-20{padding:80px !important}.pt-lg-auto,.py-lg-auto{padding-top:auto !important}.pr-lg-auto,.px-lg-auto{padding-right:auto !important}.pl-lg-auto,.px-lg-auto{padding-left:auto !important}.pb-lg-auto,.py-lg-auto{padding-bottom:auto !important}.ps-lg-auto{padding-inline-start:auto !important}.pe-lg-auto{padding-inline-end:auto !important}.pa-lg-auto{padding:auto !important}.mt-lg-n1,.my-lg-n1{margin-top:-4px !important}.mr-lg-n1,.mx-lg-n1{margin-right:-4px !important}.ml-lg-n1,.mx-lg-n1{margin-left:-4px !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-4px !important}.ms-lg-n1{margin-inline-start:-4px !important}.me-lg-n1{margin-inline-end:-4px !important}.ma-lg-n1{margin:-4px !important}.mt-lg-n2,.my-lg-n2{margin-top:-8px !important}.mr-lg-n2,.mx-lg-n2{margin-right:-8px !important}.ml-lg-n2,.mx-lg-n2{margin-left:-8px !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-8px !important}.ms-lg-n2{margin-inline-start:-8px !important}.me-lg-n2{margin-inline-end:-8px !important}.ma-lg-n2{margin:-8px !important}.mt-lg-n3,.my-lg-n3{margin-top:-12px !important}.mr-lg-n3,.mx-lg-n3{margin-right:-12px !important}.ml-lg-n3,.mx-lg-n3{margin-left:-12px !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-12px !important}.ms-lg-n3{margin-inline-start:-12px !important}.me-lg-n3{margin-inline-end:-12px !important}.ma-lg-n3{margin:-12px !important}.mt-lg-n4,.my-lg-n4{margin-top:-16px !important}.mr-lg-n4,.mx-lg-n4{margin-right:-16px !important}.ml-lg-n4,.mx-lg-n4{margin-left:-16px !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-16px !important}.ms-lg-n4{margin-inline-start:-16px !important}.me-lg-n4{margin-inline-end:-16px !important}.ma-lg-n4{margin:-16px !important}.mt-lg-n5,.my-lg-n5{margin-top:-20px !important}.mr-lg-n5,.mx-lg-n5{margin-right:-20px !important}.ml-lg-n5,.mx-lg-n5{margin-left:-20px !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-20px !important}.ms-lg-n5{margin-inline-start:-20px !important}.me-lg-n5{margin-inline-end:-20px !important}.ma-lg-n5{margin:-20px !important}.mt-lg-n6,.my-lg-n6{margin-top:-24px !important}.mr-lg-n6,.mx-lg-n6{margin-right:-24px !important}.ml-lg-n6,.mx-lg-n6{margin-left:-24px !important}.mb-lg-n6,.my-lg-n6{margin-bottom:-24px !important}.ms-lg-n6{margin-inline-start:-24px !important}.me-lg-n6{margin-inline-end:-24px !important}.ma-lg-n6{margin:-24px !important}.mt-lg-n7,.my-lg-n7{margin-top:-28px !important}.mr-lg-n7,.mx-lg-n7{margin-right:-28px !important}.ml-lg-n7,.mx-lg-n7{margin-left:-28px !important}.mb-lg-n7,.my-lg-n7{margin-bottom:-28px !important}.ms-lg-n7{margin-inline-start:-28px !important}.me-lg-n7{margin-inline-end:-28px !important}.ma-lg-n7{margin:-28px !important}.mt-lg-n8,.my-lg-n8{margin-top:-32px !important}.mr-lg-n8,.mx-lg-n8{margin-right:-32px !important}.ml-lg-n8,.mx-lg-n8{margin-left:-32px !important}.mb-lg-n8,.my-lg-n8{margin-bottom:-32px !important}.ms-lg-n8{margin-inline-start:-32px !important}.me-lg-n8{margin-inline-end:-32px !important}.ma-lg-n8{margin:-32px !important}.mt-lg-n9,.my-lg-n9{margin-top:-36px !important}.mr-lg-n9,.mx-lg-n9{margin-right:-36px !important}.ml-lg-n9,.mx-lg-n9{margin-left:-36px !important}.mb-lg-n9,.my-lg-n9{margin-bottom:-36px !important}.ms-lg-n9{margin-inline-start:-36px !important}.me-lg-n9{margin-inline-end:-36px !important}.ma-lg-n9{margin:-36px !important}.mt-lg-n10,.my-lg-n10{margin-top:-40px !important}.mr-lg-n10,.mx-lg-n10{margin-right:-40px !important}.ml-lg-n10,.mx-lg-n10{margin-left:-40px !important}.mb-lg-n10,.my-lg-n10{margin-bottom:-40px !important}.ms-lg-n10{margin-inline-start:-40px !important}.me-lg-n10{margin-inline-end:-40px !important}.ma-lg-n10{margin:-40px !important}.mt-lg-n11,.my-lg-n11{margin-top:-44px !important}.mr-lg-n11,.mx-lg-n11{margin-right:-44px !important}.ml-lg-n11,.mx-lg-n11{margin-left:-44px !important}.mb-lg-n11,.my-lg-n11{margin-bottom:-44px !important}.ms-lg-n11{margin-inline-start:-44px !important}.me-lg-n11{margin-inline-end:-44px !important}.ma-lg-n11{margin:-44px !important}.mt-lg-n12,.my-lg-n12{margin-top:-48px !important}.mr-lg-n12,.mx-lg-n12{margin-right:-48px !important}.ml-lg-n12,.mx-lg-n12{margin-left:-48px !important}.mb-lg-n12,.my-lg-n12{margin-bottom:-48px !important}.ms-lg-n12{margin-inline-start:-48px !important}.me-lg-n12{margin-inline-end:-48px !important}.ma-lg-n12{margin:-48px !important}.mt-lg-n13,.my-lg-n13{margin-top:-52px !important}.mr-lg-n13,.mx-lg-n13{margin-right:-52px !important}.ml-lg-n13,.mx-lg-n13{margin-left:-52px !important}.mb-lg-n13,.my-lg-n13{margin-bottom:-52px !important}.ms-lg-n13{margin-inline-start:-52px !important}.me-lg-n13{margin-inline-end:-52px !important}.ma-lg-n13{margin:-52px !important}.mt-lg-n14,.my-lg-n14{margin-top:-56px !important}.mr-lg-n14,.mx-lg-n14{margin-right:-56px !important}.ml-lg-n14,.mx-lg-n14{margin-left:-56px !important}.mb-lg-n14,.my-lg-n14{margin-bottom:-56px !important}.ms-lg-n14{margin-inline-start:-56px !important}.me-lg-n14{margin-inline-end:-56px !important}.ma-lg-n14{margin:-56px !important}.mt-lg-n15,.my-lg-n15{margin-top:-60px !important}.mr-lg-n15,.mx-lg-n15{margin-right:-60px !important}.ml-lg-n15,.mx-lg-n15{margin-left:-60px !important}.mb-lg-n15,.my-lg-n15{margin-bottom:-60px !important}.ms-lg-n15{margin-inline-start:-60px !important}.me-lg-n15{margin-inline-end:-60px !important}.ma-lg-n15{margin:-60px !important}.mt-lg-n16,.my-lg-n16{margin-top:-64px !important}.mr-lg-n16,.mx-lg-n16{margin-right:-64px !important}.ml-lg-n16,.mx-lg-n16{margin-left:-64px !important}.mb-lg-n16,.my-lg-n16{margin-bottom:-64px !important}.ms-lg-n16{margin-inline-start:-64px !important}.me-lg-n16{margin-inline-end:-64px !important}.ma-lg-n16{margin:-64px !important}.mt-lg-n17,.my-lg-n17{margin-top:-68px !important}.mr-lg-n17,.mx-lg-n17{margin-right:-68px !important}.ml-lg-n17,.mx-lg-n17{margin-left:-68px !important}.mb-lg-n17,.my-lg-n17{margin-bottom:-68px !important}.ms-lg-n17{margin-inline-start:-68px !important}.me-lg-n17{margin-inline-end:-68px !important}.ma-lg-n17{margin:-68px !important}.mt-lg-n18,.my-lg-n18{margin-top:-72px !important}.mr-lg-n18,.mx-lg-n18{margin-right:-72px !important}.ml-lg-n18,.mx-lg-n18{margin-left:-72px !important}.mb-lg-n18,.my-lg-n18{margin-bottom:-72px !important}.ms-lg-n18{margin-inline-start:-72px !important}.me-lg-n18{margin-inline-end:-72px !important}.ma-lg-n18{margin:-72px !important}.mt-lg-n19,.my-lg-n19{margin-top:-76px !important}.mr-lg-n19,.mx-lg-n19{margin-right:-76px !important}.ml-lg-n19,.mx-lg-n19{margin-left:-76px !important}.mb-lg-n19,.my-lg-n19{margin-bottom:-76px !important}.ms-lg-n19{margin-inline-start:-76px !important}.me-lg-n19{margin-inline-end:-76px !important}.ma-lg-n19{margin:-76px !important}.mt-lg-n20,.my-lg-n20{margin-top:-80px !important}.mr-lg-n20,.mx-lg-n20{margin-right:-80px !important}.ml-lg-n20,.mx-lg-n20{margin-left:-80px !important}.mb-lg-n20,.my-lg-n20{margin-bottom:-80px !important}.ms-lg-n20{margin-inline-start:-80px !important}.me-lg-n20{margin-inline-end:-80px !important}.ma-lg-n20{margin:-80px !important}}@media screen and (min-width: 1920px){.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ms-xl-0{margin-inline-start:0 !important}.me-xl-0{margin-inline-end:0 !important}.ma-xl-0{margin:0 !important}.mt-xl-1,.my-xl-1{margin-top:4px !important}.mr-xl-1,.mx-xl-1{margin-right:4px !important}.ml-xl-1,.mx-xl-1{margin-left:4px !important}.mb-xl-1,.my-xl-1{margin-bottom:4px !important}.ms-xl-1{margin-inline-start:4px !important}.me-xl-1{margin-inline-end:4px !important}.ma-xl-1{margin:4px !important}.mt-xl-2,.my-xl-2{margin-top:8px !important}.mr-xl-2,.mx-xl-2{margin-right:8px !important}.ml-xl-2,.mx-xl-2{margin-left:8px !important}.mb-xl-2,.my-xl-2{margin-bottom:8px !important}.ms-xl-2{margin-inline-start:8px !important}.me-xl-2{margin-inline-end:8px !important}.ma-xl-2{margin:8px !important}.mt-xl-3,.my-xl-3{margin-top:12px !important}.mr-xl-3,.mx-xl-3{margin-right:12px !important}.ml-xl-3,.mx-xl-3{margin-left:12px !important}.mb-xl-3,.my-xl-3{margin-bottom:12px !important}.ms-xl-3{margin-inline-start:12px !important}.me-xl-3{margin-inline-end:12px !important}.ma-xl-3{margin:12px !important}.mt-xl-4,.my-xl-4{margin-top:16px !important}.mr-xl-4,.mx-xl-4{margin-right:16px !important}.ml-xl-4,.mx-xl-4{margin-left:16px !important}.mb-xl-4,.my-xl-4{margin-bottom:16px !important}.ms-xl-4{margin-inline-start:16px !important}.me-xl-4{margin-inline-end:16px !important}.ma-xl-4{margin:16px !important}.mt-xl-5,.my-xl-5{margin-top:20px !important}.mr-xl-5,.mx-xl-5{margin-right:20px !important}.ml-xl-5,.mx-xl-5{margin-left:20px !important}.mb-xl-5,.my-xl-5{margin-bottom:20px !important}.ms-xl-5{margin-inline-start:20px !important}.me-xl-5{margin-inline-end:20px !important}.ma-xl-5{margin:20px !important}.mt-xl-6,.my-xl-6{margin-top:24px !important}.mr-xl-6,.mx-xl-6{margin-right:24px !important}.ml-xl-6,.mx-xl-6{margin-left:24px !important}.mb-xl-6,.my-xl-6{margin-bottom:24px !important}.ms-xl-6{margin-inline-start:24px !important}.me-xl-6{margin-inline-end:24px !important}.ma-xl-6{margin:24px !important}.mt-xl-7,.my-xl-7{margin-top:28px !important}.mr-xl-7,.mx-xl-7{margin-right:28px !important}.ml-xl-7,.mx-xl-7{margin-left:28px !important}.mb-xl-7,.my-xl-7{margin-bottom:28px !important}.ms-xl-7{margin-inline-start:28px !important}.me-xl-7{margin-inline-end:28px !important}.ma-xl-7{margin:28px !important}.mt-xl-8,.my-xl-8{margin-top:32px !important}.mr-xl-8,.mx-xl-8{margin-right:32px !important}.ml-xl-8,.mx-xl-8{margin-left:32px !important}.mb-xl-8,.my-xl-8{margin-bottom:32px !important}.ms-xl-8{margin-inline-start:32px !important}.me-xl-8{margin-inline-end:32px !important}.ma-xl-8{margin:32px !important}.mt-xl-9,.my-xl-9{margin-top:36px !important}.mr-xl-9,.mx-xl-9{margin-right:36px !important}.ml-xl-9,.mx-xl-9{margin-left:36px !important}.mb-xl-9,.my-xl-9{margin-bottom:36px !important}.ms-xl-9{margin-inline-start:36px !important}.me-xl-9{margin-inline-end:36px !important}.ma-xl-9{margin:36px !important}.mt-xl-10,.my-xl-10{margin-top:40px !important}.mr-xl-10,.mx-xl-10{margin-right:40px !important}.ml-xl-10,.mx-xl-10{margin-left:40px !important}.mb-xl-10,.my-xl-10{margin-bottom:40px !important}.ms-xl-10{margin-inline-start:40px !important}.me-xl-10{margin-inline-end:40px !important}.ma-xl-10{margin:40px !important}.mt-xl-11,.my-xl-11{margin-top:44px !important}.mr-xl-11,.mx-xl-11{margin-right:44px !important}.ml-xl-11,.mx-xl-11{margin-left:44px !important}.mb-xl-11,.my-xl-11{margin-bottom:44px !important}.ms-xl-11{margin-inline-start:44px !important}.me-xl-11{margin-inline-end:44px !important}.ma-xl-11{margin:44px !important}.mt-xl-12,.my-xl-12{margin-top:48px !important}.mr-xl-12,.mx-xl-12{margin-right:48px !important}.ml-xl-12,.mx-xl-12{margin-left:48px !important}.mb-xl-12,.my-xl-12{margin-bottom:48px !important}.ms-xl-12{margin-inline-start:48px !important}.me-xl-12{margin-inline-end:48px !important}.ma-xl-12{margin:48px !important}.mt-xl-13,.my-xl-13{margin-top:52px !important}.mr-xl-13,.mx-xl-13{margin-right:52px !important}.ml-xl-13,.mx-xl-13{margin-left:52px !important}.mb-xl-13,.my-xl-13{margin-bottom:52px !important}.ms-xl-13{margin-inline-start:52px !important}.me-xl-13{margin-inline-end:52px !important}.ma-xl-13{margin:52px !important}.mt-xl-14,.my-xl-14{margin-top:56px !important}.mr-xl-14,.mx-xl-14{margin-right:56px !important}.ml-xl-14,.mx-xl-14{margin-left:56px !important}.mb-xl-14,.my-xl-14{margin-bottom:56px !important}.ms-xl-14{margin-inline-start:56px !important}.me-xl-14{margin-inline-end:56px !important}.ma-xl-14{margin:56px !important}.mt-xl-15,.my-xl-15{margin-top:60px !important}.mr-xl-15,.mx-xl-15{margin-right:60px !important}.ml-xl-15,.mx-xl-15{margin-left:60px !important}.mb-xl-15,.my-xl-15{margin-bottom:60px !important}.ms-xl-15{margin-inline-start:60px !important}.me-xl-15{margin-inline-end:60px !important}.ma-xl-15{margin:60px !important}.mt-xl-16,.my-xl-16{margin-top:64px !important}.mr-xl-16,.mx-xl-16{margin-right:64px !important}.ml-xl-16,.mx-xl-16{margin-left:64px !important}.mb-xl-16,.my-xl-16{margin-bottom:64px !important}.ms-xl-16{margin-inline-start:64px !important}.me-xl-16{margin-inline-end:64px !important}.ma-xl-16{margin:64px !important}.mt-xl-17,.my-xl-17{margin-top:68px !important}.mr-xl-17,.mx-xl-17{margin-right:68px !important}.ml-xl-17,.mx-xl-17{margin-left:68px !important}.mb-xl-17,.my-xl-17{margin-bottom:68px !important}.ms-xl-17{margin-inline-start:68px !important}.me-xl-17{margin-inline-end:68px !important}.ma-xl-17{margin:68px !important}.mt-xl-18,.my-xl-18{margin-top:72px !important}.mr-xl-18,.mx-xl-18{margin-right:72px !important}.ml-xl-18,.mx-xl-18{margin-left:72px !important}.mb-xl-18,.my-xl-18{margin-bottom:72px !important}.ms-xl-18{margin-inline-start:72px !important}.me-xl-18{margin-inline-end:72px !important}.ma-xl-18{margin:72px !important}.mt-xl-19,.my-xl-19{margin-top:76px !important}.mr-xl-19,.mx-xl-19{margin-right:76px !important}.ml-xl-19,.mx-xl-19{margin-left:76px !important}.mb-xl-19,.my-xl-19{margin-bottom:76px !important}.ms-xl-19{margin-inline-start:76px !important}.me-xl-19{margin-inline-end:76px !important}.ma-xl-19{margin:76px !important}.mt-xl-20,.my-xl-20{margin-top:80px !important}.mr-xl-20,.mx-xl-20{margin-right:80px !important}.ml-xl-20,.mx-xl-20{margin-left:80px !important}.mb-xl-20,.my-xl-20{margin-bottom:80px !important}.ms-xl-20{margin-inline-start:80px !important}.me-xl-20{margin-inline-end:80px !important}.ma-xl-20{margin:80px !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ms-xl-auto{margin-inline-start:auto !important}.me-xl-auto{margin-inline-end:auto !important}.ma-xl-auto{margin:auto !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.ps-xl-0{padding-inline-start:0 !important}.pe-xl-0{padding-inline-end:0 !important}.pa-xl-0{padding:0 !important}.pt-xl-1,.py-xl-1{padding-top:4px !important}.pr-xl-1,.px-xl-1{padding-right:4px !important}.pl-xl-1,.px-xl-1{padding-left:4px !important}.pb-xl-1,.py-xl-1{padding-bottom:4px !important}.ps-xl-1{padding-inline-start:4px !important}.pe-xl-1{padding-inline-end:4px !important}.pa-xl-1{padding:4px !important}.pt-xl-2,.py-xl-2{padding-top:8px !important}.pr-xl-2,.px-xl-2{padding-right:8px !important}.pl-xl-2,.px-xl-2{padding-left:8px !important}.pb-xl-2,.py-xl-2{padding-bottom:8px !important}.ps-xl-2{padding-inline-start:8px !important}.pe-xl-2{padding-inline-end:8px !important}.pa-xl-2{padding:8px !important}.pt-xl-3,.py-xl-3{padding-top:12px !important}.pr-xl-3,.px-xl-3{padding-right:12px !important}.pl-xl-3,.px-xl-3{padding-left:12px !important}.pb-xl-3,.py-xl-3{padding-bottom:12px !important}.ps-xl-3{padding-inline-start:12px !important}.pe-xl-3{padding-inline-end:12px !important}.pa-xl-3{padding:12px !important}.pt-xl-4,.py-xl-4{padding-top:16px !important}.pr-xl-4,.px-xl-4{padding-right:16px !important}.pl-xl-4,.px-xl-4{padding-left:16px !important}.pb-xl-4,.py-xl-4{padding-bottom:16px !important}.ps-xl-4{padding-inline-start:16px !important}.pe-xl-4{padding-inline-end:16px !important}.pa-xl-4{padding:16px !important}.pt-xl-5,.py-xl-5{padding-top:20px !important}.pr-xl-5,.px-xl-5{padding-right:20px !important}.pl-xl-5,.px-xl-5{padding-left:20px !important}.pb-xl-5,.py-xl-5{padding-bottom:20px !important}.ps-xl-5{padding-inline-start:20px !important}.pe-xl-5{padding-inline-end:20px !important}.pa-xl-5{padding:20px !important}.pt-xl-6,.py-xl-6{padding-top:24px !important}.pr-xl-6,.px-xl-6{padding-right:24px !important}.pl-xl-6,.px-xl-6{padding-left:24px !important}.pb-xl-6,.py-xl-6{padding-bottom:24px !important}.ps-xl-6{padding-inline-start:24px !important}.pe-xl-6{padding-inline-end:24px !important}.pa-xl-6{padding:24px !important}.pt-xl-7,.py-xl-7{padding-top:28px !important}.pr-xl-7,.px-xl-7{padding-right:28px !important}.pl-xl-7,.px-xl-7{padding-left:28px !important}.pb-xl-7,.py-xl-7{padding-bottom:28px !important}.ps-xl-7{padding-inline-start:28px !important}.pe-xl-7{padding-inline-end:28px !important}.pa-xl-7{padding:28px !important}.pt-xl-8,.py-xl-8{padding-top:32px !important}.pr-xl-8,.px-xl-8{padding-right:32px !important}.pl-xl-8,.px-xl-8{padding-left:32px !important}.pb-xl-8,.py-xl-8{padding-bottom:32px !important}.ps-xl-8{padding-inline-start:32px !important}.pe-xl-8{padding-inline-end:32px !important}.pa-xl-8{padding:32px !important}.pt-xl-9,.py-xl-9{padding-top:36px !important}.pr-xl-9,.px-xl-9{padding-right:36px !important}.pl-xl-9,.px-xl-9{padding-left:36px !important}.pb-xl-9,.py-xl-9{padding-bottom:36px !important}.ps-xl-9{padding-inline-start:36px !important}.pe-xl-9{padding-inline-end:36px !important}.pa-xl-9{padding:36px !important}.pt-xl-10,.py-xl-10{padding-top:40px !important}.pr-xl-10,.px-xl-10{padding-right:40px !important}.pl-xl-10,.px-xl-10{padding-left:40px !important}.pb-xl-10,.py-xl-10{padding-bottom:40px !important}.ps-xl-10{padding-inline-start:40px !important}.pe-xl-10{padding-inline-end:40px !important}.pa-xl-10{padding:40px !important}.pt-xl-11,.py-xl-11{padding-top:44px !important}.pr-xl-11,.px-xl-11{padding-right:44px !important}.pl-xl-11,.px-xl-11{padding-left:44px !important}.pb-xl-11,.py-xl-11{padding-bottom:44px !important}.ps-xl-11{padding-inline-start:44px !important}.pe-xl-11{padding-inline-end:44px !important}.pa-xl-11{padding:44px !important}.pt-xl-12,.py-xl-12{padding-top:48px !important}.pr-xl-12,.px-xl-12{padding-right:48px !important}.pl-xl-12,.px-xl-12{padding-left:48px !important}.pb-xl-12,.py-xl-12{padding-bottom:48px !important}.ps-xl-12{padding-inline-start:48px !important}.pe-xl-12{padding-inline-end:48px !important}.pa-xl-12{padding:48px !important}.pt-xl-13,.py-xl-13{padding-top:52px !important}.pr-xl-13,.px-xl-13{padding-right:52px !important}.pl-xl-13,.px-xl-13{padding-left:52px !important}.pb-xl-13,.py-xl-13{padding-bottom:52px !important}.ps-xl-13{padding-inline-start:52px !important}.pe-xl-13{padding-inline-end:52px !important}.pa-xl-13{padding:52px !important}.pt-xl-14,.py-xl-14{padding-top:56px !important}.pr-xl-14,.px-xl-14{padding-right:56px !important}.pl-xl-14,.px-xl-14{padding-left:56px !important}.pb-xl-14,.py-xl-14{padding-bottom:56px !important}.ps-xl-14{padding-inline-start:56px !important}.pe-xl-14{padding-inline-end:56px !important}.pa-xl-14{padding:56px !important}.pt-xl-15,.py-xl-15{padding-top:60px !important}.pr-xl-15,.px-xl-15{padding-right:60px !important}.pl-xl-15,.px-xl-15{padding-left:60px !important}.pb-xl-15,.py-xl-15{padding-bottom:60px !important}.ps-xl-15{padding-inline-start:60px !important}.pe-xl-15{padding-inline-end:60px !important}.pa-xl-15{padding:60px !important}.pt-xl-16,.py-xl-16{padding-top:64px !important}.pr-xl-16,.px-xl-16{padding-right:64px !important}.pl-xl-16,.px-xl-16{padding-left:64px !important}.pb-xl-16,.py-xl-16{padding-bottom:64px !important}.ps-xl-16{padding-inline-start:64px !important}.pe-xl-16{padding-inline-end:64px !important}.pa-xl-16{padding:64px !important}.pt-xl-17,.py-xl-17{padding-top:68px !important}.pr-xl-17,.px-xl-17{padding-right:68px !important}.pl-xl-17,.px-xl-17{padding-left:68px !important}.pb-xl-17,.py-xl-17{padding-bottom:68px !important}.ps-xl-17{padding-inline-start:68px !important}.pe-xl-17{padding-inline-end:68px !important}.pa-xl-17{padding:68px !important}.pt-xl-18,.py-xl-18{padding-top:72px !important}.pr-xl-18,.px-xl-18{padding-right:72px !important}.pl-xl-18,.px-xl-18{padding-left:72px !important}.pb-xl-18,.py-xl-18{padding-bottom:72px !important}.ps-xl-18{padding-inline-start:72px !important}.pe-xl-18{padding-inline-end:72px !important}.pa-xl-18{padding:72px !important}.pt-xl-19,.py-xl-19{padding-top:76px !important}.pr-xl-19,.px-xl-19{padding-right:76px !important}.pl-xl-19,.px-xl-19{padding-left:76px !important}.pb-xl-19,.py-xl-19{padding-bottom:76px !important}.ps-xl-19{padding-inline-start:76px !important}.pe-xl-19{padding-inline-end:76px !important}.pa-xl-19{padding:76px !important}.pt-xl-20,.py-xl-20{padding-top:80px !important}.pr-xl-20,.px-xl-20{padding-right:80px !important}.pl-xl-20,.px-xl-20{padding-left:80px !important}.pb-xl-20,.py-xl-20{padding-bottom:80px !important}.ps-xl-20{padding-inline-start:80px !important}.pe-xl-20{padding-inline-end:80px !important}.pa-xl-20{padding:80px !important}.pt-xl-auto,.py-xl-auto{padding-top:auto !important}.pr-xl-auto,.px-xl-auto{padding-right:auto !important}.pl-xl-auto,.px-xl-auto{padding-left:auto !important}.pb-xl-auto,.py-xl-auto{padding-bottom:auto !important}.ps-xl-auto{padding-inline-start:auto !important}.pe-xl-auto{padding-inline-end:auto !important}.pa-xl-auto{padding:auto !important}.mt-xl-n1,.my-xl-n1{margin-top:-4px !important}.mr-xl-n1,.mx-xl-n1{margin-right:-4px !important}.ml-xl-n1,.mx-xl-n1{margin-left:-4px !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-4px !important}.ms-xl-n1{margin-inline-start:-4px !important}.me-xl-n1{margin-inline-end:-4px !important}.ma-xl-n1{margin:-4px !important}.mt-xl-n2,.my-xl-n2{margin-top:-8px !important}.mr-xl-n2,.mx-xl-n2{margin-right:-8px !important}.ml-xl-n2,.mx-xl-n2{margin-left:-8px !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-8px !important}.ms-xl-n2{margin-inline-start:-8px !important}.me-xl-n2{margin-inline-end:-8px !important}.ma-xl-n2{margin:-8px !important}.mt-xl-n3,.my-xl-n3{margin-top:-12px !important}.mr-xl-n3,.mx-xl-n3{margin-right:-12px !important}.ml-xl-n3,.mx-xl-n3{margin-left:-12px !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-12px !important}.ms-xl-n3{margin-inline-start:-12px !important}.me-xl-n3{margin-inline-end:-12px !important}.ma-xl-n3{margin:-12px !important}.mt-xl-n4,.my-xl-n4{margin-top:-16px !important}.mr-xl-n4,.mx-xl-n4{margin-right:-16px !important}.ml-xl-n4,.mx-xl-n4{margin-left:-16px !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-16px !important}.ms-xl-n4{margin-inline-start:-16px !important}.me-xl-n4{margin-inline-end:-16px !important}.ma-xl-n4{margin:-16px !important}.mt-xl-n5,.my-xl-n5{margin-top:-20px !important}.mr-xl-n5,.mx-xl-n5{margin-right:-20px !important}.ml-xl-n5,.mx-xl-n5{margin-left:-20px !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-20px !important}.ms-xl-n5{margin-inline-start:-20px !important}.me-xl-n5{margin-inline-end:-20px !important}.ma-xl-n5{margin:-20px !important}.mt-xl-n6,.my-xl-n6{margin-top:-24px !important}.mr-xl-n6,.mx-xl-n6{margin-right:-24px !important}.ml-xl-n6,.mx-xl-n6{margin-left:-24px !important}.mb-xl-n6,.my-xl-n6{margin-bottom:-24px !important}.ms-xl-n6{margin-inline-start:-24px !important}.me-xl-n6{margin-inline-end:-24px !important}.ma-xl-n6{margin:-24px !important}.mt-xl-n7,.my-xl-n7{margin-top:-28px !important}.mr-xl-n7,.mx-xl-n7{margin-right:-28px !important}.ml-xl-n7,.mx-xl-n7{margin-left:-28px !important}.mb-xl-n7,.my-xl-n7{margin-bottom:-28px !important}.ms-xl-n7{margin-inline-start:-28px !important}.me-xl-n7{margin-inline-end:-28px !important}.ma-xl-n7{margin:-28px !important}.mt-xl-n8,.my-xl-n8{margin-top:-32px !important}.mr-xl-n8,.mx-xl-n8{margin-right:-32px !important}.ml-xl-n8,.mx-xl-n8{margin-left:-32px !important}.mb-xl-n8,.my-xl-n8{margin-bottom:-32px !important}.ms-xl-n8{margin-inline-start:-32px !important}.me-xl-n8{margin-inline-end:-32px !important}.ma-xl-n8{margin:-32px !important}.mt-xl-n9,.my-xl-n9{margin-top:-36px !important}.mr-xl-n9,.mx-xl-n9{margin-right:-36px !important}.ml-xl-n9,.mx-xl-n9{margin-left:-36px !important}.mb-xl-n9,.my-xl-n9{margin-bottom:-36px !important}.ms-xl-n9{margin-inline-start:-36px !important}.me-xl-n9{margin-inline-end:-36px !important}.ma-xl-n9{margin:-36px !important}.mt-xl-n10,.my-xl-n10{margin-top:-40px !important}.mr-xl-n10,.mx-xl-n10{margin-right:-40px !important}.ml-xl-n10,.mx-xl-n10{margin-left:-40px !important}.mb-xl-n10,.my-xl-n10{margin-bottom:-40px !important}.ms-xl-n10{margin-inline-start:-40px !important}.me-xl-n10{margin-inline-end:-40px !important}.ma-xl-n10{margin:-40px !important}.mt-xl-n11,.my-xl-n11{margin-top:-44px !important}.mr-xl-n11,.mx-xl-n11{margin-right:-44px !important}.ml-xl-n11,.mx-xl-n11{margin-left:-44px !important}.mb-xl-n11,.my-xl-n11{margin-bottom:-44px !important}.ms-xl-n11{margin-inline-start:-44px !important}.me-xl-n11{margin-inline-end:-44px !important}.ma-xl-n11{margin:-44px !important}.mt-xl-n12,.my-xl-n12{margin-top:-48px !important}.mr-xl-n12,.mx-xl-n12{margin-right:-48px !important}.ml-xl-n12,.mx-xl-n12{margin-left:-48px !important}.mb-xl-n12,.my-xl-n12{margin-bottom:-48px !important}.ms-xl-n12{margin-inline-start:-48px !important}.me-xl-n12{margin-inline-end:-48px !important}.ma-xl-n12{margin:-48px !important}.mt-xl-n13,.my-xl-n13{margin-top:-52px !important}.mr-xl-n13,.mx-xl-n13{margin-right:-52px !important}.ml-xl-n13,.mx-xl-n13{margin-left:-52px !important}.mb-xl-n13,.my-xl-n13{margin-bottom:-52px !important}.ms-xl-n13{margin-inline-start:-52px !important}.me-xl-n13{margin-inline-end:-52px !important}.ma-xl-n13{margin:-52px !important}.mt-xl-n14,.my-xl-n14{margin-top:-56px !important}.mr-xl-n14,.mx-xl-n14{margin-right:-56px !important}.ml-xl-n14,.mx-xl-n14{margin-left:-56px !important}.mb-xl-n14,.my-xl-n14{margin-bottom:-56px !important}.ms-xl-n14{margin-inline-start:-56px !important}.me-xl-n14{margin-inline-end:-56px !important}.ma-xl-n14{margin:-56px !important}.mt-xl-n15,.my-xl-n15{margin-top:-60px !important}.mr-xl-n15,.mx-xl-n15{margin-right:-60px !important}.ml-xl-n15,.mx-xl-n15{margin-left:-60px !important}.mb-xl-n15,.my-xl-n15{margin-bottom:-60px !important}.ms-xl-n15{margin-inline-start:-60px !important}.me-xl-n15{margin-inline-end:-60px !important}.ma-xl-n15{margin:-60px !important}.mt-xl-n16,.my-xl-n16{margin-top:-64px !important}.mr-xl-n16,.mx-xl-n16{margin-right:-64px !important}.ml-xl-n16,.mx-xl-n16{margin-left:-64px !important}.mb-xl-n16,.my-xl-n16{margin-bottom:-64px !important}.ms-xl-n16{margin-inline-start:-64px !important}.me-xl-n16{margin-inline-end:-64px !important}.ma-xl-n16{margin:-64px !important}.mt-xl-n17,.my-xl-n17{margin-top:-68px !important}.mr-xl-n17,.mx-xl-n17{margin-right:-68px !important}.ml-xl-n17,.mx-xl-n17{margin-left:-68px !important}.mb-xl-n17,.my-xl-n17{margin-bottom:-68px !important}.ms-xl-n17{margin-inline-start:-68px !important}.me-xl-n17{margin-inline-end:-68px !important}.ma-xl-n17{margin:-68px !important}.mt-xl-n18,.my-xl-n18{margin-top:-72px !important}.mr-xl-n18,.mx-xl-n18{margin-right:-72px !important}.ml-xl-n18,.mx-xl-n18{margin-left:-72px !important}.mb-xl-n18,.my-xl-n18{margin-bottom:-72px !important}.ms-xl-n18{margin-inline-start:-72px !important}.me-xl-n18{margin-inline-end:-72px !important}.ma-xl-n18{margin:-72px !important}.mt-xl-n19,.my-xl-n19{margin-top:-76px !important}.mr-xl-n19,.mx-xl-n19{margin-right:-76px !important}.ml-xl-n19,.mx-xl-n19{margin-left:-76px !important}.mb-xl-n19,.my-xl-n19{margin-bottom:-76px !important}.ms-xl-n19{margin-inline-start:-76px !important}.me-xl-n19{margin-inline-end:-76px !important}.ma-xl-n19{margin:-76px !important}.mt-xl-n20,.my-xl-n20{margin-top:-80px !important}.mr-xl-n20,.mx-xl-n20{margin-right:-80px !important}.ml-xl-n20,.mx-xl-n20{margin-left:-80px !important}.mb-xl-n20,.my-xl-n20{margin-bottom:-80px !important}.ms-xl-n20{margin-inline-start:-80px !important}.me-xl-n20{margin-inline-end:-80px !important}.ma-xl-n20{margin:-80px !important}}@media screen and (min-width: 2560px){.mt-xxl-0,.my-xxl-0{margin-top:0 !important}.mr-xxl-0,.mx-xxl-0{margin-right:0 !important}.ml-xxl-0,.mx-xxl-0{margin-left:0 !important}.mb-xxl-0,.my-xxl-0{margin-bottom:0 !important}.ms-xxl-0{margin-inline-start:0 !important}.me-xxl-0{margin-inline-end:0 !important}.ma-xxl-0{margin:0 !important}.mt-xxl-1,.my-xxl-1{margin-top:4px !important}.mr-xxl-1,.mx-xxl-1{margin-right:4px !important}.ml-xxl-1,.mx-xxl-1{margin-left:4px !important}.mb-xxl-1,.my-xxl-1{margin-bottom:4px !important}.ms-xxl-1{margin-inline-start:4px !important}.me-xxl-1{margin-inline-end:4px !important}.ma-xxl-1{margin:4px !important}.mt-xxl-2,.my-xxl-2{margin-top:8px !important}.mr-xxl-2,.mx-xxl-2{margin-right:8px !important}.ml-xxl-2,.mx-xxl-2{margin-left:8px !important}.mb-xxl-2,.my-xxl-2{margin-bottom:8px !important}.ms-xxl-2{margin-inline-start:8px !important}.me-xxl-2{margin-inline-end:8px !important}.ma-xxl-2{margin:8px !important}.mt-xxl-3,.my-xxl-3{margin-top:12px !important}.mr-xxl-3,.mx-xxl-3{margin-right:12px !important}.ml-xxl-3,.mx-xxl-3{margin-left:12px !important}.mb-xxl-3,.my-xxl-3{margin-bottom:12px !important}.ms-xxl-3{margin-inline-start:12px !important}.me-xxl-3{margin-inline-end:12px !important}.ma-xxl-3{margin:12px !important}.mt-xxl-4,.my-xxl-4{margin-top:16px !important}.mr-xxl-4,.mx-xxl-4{margin-right:16px !important}.ml-xxl-4,.mx-xxl-4{margin-left:16px !important}.mb-xxl-4,.my-xxl-4{margin-bottom:16px !important}.ms-xxl-4{margin-inline-start:16px !important}.me-xxl-4{margin-inline-end:16px !important}.ma-xxl-4{margin:16px !important}.mt-xxl-5,.my-xxl-5{margin-top:20px !important}.mr-xxl-5,.mx-xxl-5{margin-right:20px !important}.ml-xxl-5,.mx-xxl-5{margin-left:20px !important}.mb-xxl-5,.my-xxl-5{margin-bottom:20px !important}.ms-xxl-5{margin-inline-start:20px !important}.me-xxl-5{margin-inline-end:20px !important}.ma-xxl-5{margin:20px !important}.mt-xxl-6,.my-xxl-6{margin-top:24px !important}.mr-xxl-6,.mx-xxl-6{margin-right:24px !important}.ml-xxl-6,.mx-xxl-6{margin-left:24px !important}.mb-xxl-6,.my-xxl-6{margin-bottom:24px !important}.ms-xxl-6{margin-inline-start:24px !important}.me-xxl-6{margin-inline-end:24px !important}.ma-xxl-6{margin:24px !important}.mt-xxl-7,.my-xxl-7{margin-top:28px !important}.mr-xxl-7,.mx-xxl-7{margin-right:28px !important}.ml-xxl-7,.mx-xxl-7{margin-left:28px !important}.mb-xxl-7,.my-xxl-7{margin-bottom:28px !important}.ms-xxl-7{margin-inline-start:28px !important}.me-xxl-7{margin-inline-end:28px !important}.ma-xxl-7{margin:28px !important}.mt-xxl-8,.my-xxl-8{margin-top:32px !important}.mr-xxl-8,.mx-xxl-8{margin-right:32px !important}.ml-xxl-8,.mx-xxl-8{margin-left:32px !important}.mb-xxl-8,.my-xxl-8{margin-bottom:32px !important}.ms-xxl-8{margin-inline-start:32px !important}.me-xxl-8{margin-inline-end:32px !important}.ma-xxl-8{margin:32px !important}.mt-xxl-9,.my-xxl-9{margin-top:36px !important}.mr-xxl-9,.mx-xxl-9{margin-right:36px !important}.ml-xxl-9,.mx-xxl-9{margin-left:36px !important}.mb-xxl-9,.my-xxl-9{margin-bottom:36px !important}.ms-xxl-9{margin-inline-start:36px !important}.me-xxl-9{margin-inline-end:36px !important}.ma-xxl-9{margin:36px !important}.mt-xxl-10,.my-xxl-10{margin-top:40px !important}.mr-xxl-10,.mx-xxl-10{margin-right:40px !important}.ml-xxl-10,.mx-xxl-10{margin-left:40px !important}.mb-xxl-10,.my-xxl-10{margin-bottom:40px !important}.ms-xxl-10{margin-inline-start:40px !important}.me-xxl-10{margin-inline-end:40px !important}.ma-xxl-10{margin:40px !important}.mt-xxl-11,.my-xxl-11{margin-top:44px !important}.mr-xxl-11,.mx-xxl-11{margin-right:44px !important}.ml-xxl-11,.mx-xxl-11{margin-left:44px !important}.mb-xxl-11,.my-xxl-11{margin-bottom:44px !important}.ms-xxl-11{margin-inline-start:44px !important}.me-xxl-11{margin-inline-end:44px !important}.ma-xxl-11{margin:44px !important}.mt-xxl-12,.my-xxl-12{margin-top:48px !important}.mr-xxl-12,.mx-xxl-12{margin-right:48px !important}.ml-xxl-12,.mx-xxl-12{margin-left:48px !important}.mb-xxl-12,.my-xxl-12{margin-bottom:48px !important}.ms-xxl-12{margin-inline-start:48px !important}.me-xxl-12{margin-inline-end:48px !important}.ma-xxl-12{margin:48px !important}.mt-xxl-13,.my-xxl-13{margin-top:52px !important}.mr-xxl-13,.mx-xxl-13{margin-right:52px !important}.ml-xxl-13,.mx-xxl-13{margin-left:52px !important}.mb-xxl-13,.my-xxl-13{margin-bottom:52px !important}.ms-xxl-13{margin-inline-start:52px !important}.me-xxl-13{margin-inline-end:52px !important}.ma-xxl-13{margin:52px !important}.mt-xxl-14,.my-xxl-14{margin-top:56px !important}.mr-xxl-14,.mx-xxl-14{margin-right:56px !important}.ml-xxl-14,.mx-xxl-14{margin-left:56px !important}.mb-xxl-14,.my-xxl-14{margin-bottom:56px !important}.ms-xxl-14{margin-inline-start:56px !important}.me-xxl-14{margin-inline-end:56px !important}.ma-xxl-14{margin:56px !important}.mt-xxl-15,.my-xxl-15{margin-top:60px !important}.mr-xxl-15,.mx-xxl-15{margin-right:60px !important}.ml-xxl-15,.mx-xxl-15{margin-left:60px !important}.mb-xxl-15,.my-xxl-15{margin-bottom:60px !important}.ms-xxl-15{margin-inline-start:60px !important}.me-xxl-15{margin-inline-end:60px !important}.ma-xxl-15{margin:60px !important}.mt-xxl-16,.my-xxl-16{margin-top:64px !important}.mr-xxl-16,.mx-xxl-16{margin-right:64px !important}.ml-xxl-16,.mx-xxl-16{margin-left:64px !important}.mb-xxl-16,.my-xxl-16{margin-bottom:64px !important}.ms-xxl-16{margin-inline-start:64px !important}.me-xxl-16{margin-inline-end:64px !important}.ma-xxl-16{margin:64px !important}.mt-xxl-17,.my-xxl-17{margin-top:68px !important}.mr-xxl-17,.mx-xxl-17{margin-right:68px !important}.ml-xxl-17,.mx-xxl-17{margin-left:68px !important}.mb-xxl-17,.my-xxl-17{margin-bottom:68px !important}.ms-xxl-17{margin-inline-start:68px !important}.me-xxl-17{margin-inline-end:68px !important}.ma-xxl-17{margin:68px !important}.mt-xxl-18,.my-xxl-18{margin-top:72px !important}.mr-xxl-18,.mx-xxl-18{margin-right:72px !important}.ml-xxl-18,.mx-xxl-18{margin-left:72px !important}.mb-xxl-18,.my-xxl-18{margin-bottom:72px !important}.ms-xxl-18{margin-inline-start:72px !important}.me-xxl-18{margin-inline-end:72px !important}.ma-xxl-18{margin:72px !important}.mt-xxl-19,.my-xxl-19{margin-top:76px !important}.mr-xxl-19,.mx-xxl-19{margin-right:76px !important}.ml-xxl-19,.mx-xxl-19{margin-left:76px !important}.mb-xxl-19,.my-xxl-19{margin-bottom:76px !important}.ms-xxl-19{margin-inline-start:76px !important}.me-xxl-19{margin-inline-end:76px !important}.ma-xxl-19{margin:76px !important}.mt-xxl-20,.my-xxl-20{margin-top:80px !important}.mr-xxl-20,.mx-xxl-20{margin-right:80px !important}.ml-xxl-20,.mx-xxl-20{margin-left:80px !important}.mb-xxl-20,.my-xxl-20{margin-bottom:80px !important}.ms-xxl-20{margin-inline-start:80px !important}.me-xxl-20{margin-inline-end:80px !important}.ma-xxl-20{margin:80px !important}.mt-xxl-auto,.my-xxl-auto{margin-top:auto !important}.mr-xxl-auto,.mx-xxl-auto{margin-right:auto !important}.ml-xxl-auto,.mx-xxl-auto{margin-left:auto !important}.mb-xxl-auto,.my-xxl-auto{margin-bottom:auto !important}.ms-xxl-auto{margin-inline-start:auto !important}.me-xxl-auto{margin-inline-end:auto !important}.ma-xxl-auto{margin:auto !important}.pt-xxl-0,.py-xxl-0{padding-top:0 !important}.pr-xxl-0,.px-xxl-0{padding-right:0 !important}.pl-xxl-0,.px-xxl-0{padding-left:0 !important}.pb-xxl-0,.py-xxl-0{padding-bottom:0 !important}.ps-xxl-0{padding-inline-start:0 !important}.pe-xxl-0{padding-inline-end:0 !important}.pa-xxl-0{padding:0 !important}.pt-xxl-1,.py-xxl-1{padding-top:4px !important}.pr-xxl-1,.px-xxl-1{padding-right:4px !important}.pl-xxl-1,.px-xxl-1{padding-left:4px !important}.pb-xxl-1,.py-xxl-1{padding-bottom:4px !important}.ps-xxl-1{padding-inline-start:4px !important}.pe-xxl-1{padding-inline-end:4px !important}.pa-xxl-1{padding:4px !important}.pt-xxl-2,.py-xxl-2{padding-top:8px !important}.pr-xxl-2,.px-xxl-2{padding-right:8px !important}.pl-xxl-2,.px-xxl-2{padding-left:8px !important}.pb-xxl-2,.py-xxl-2{padding-bottom:8px !important}.ps-xxl-2{padding-inline-start:8px !important}.pe-xxl-2{padding-inline-end:8px !important}.pa-xxl-2{padding:8px !important}.pt-xxl-3,.py-xxl-3{padding-top:12px !important}.pr-xxl-3,.px-xxl-3{padding-right:12px !important}.pl-xxl-3,.px-xxl-3{padding-left:12px !important}.pb-xxl-3,.py-xxl-3{padding-bottom:12px !important}.ps-xxl-3{padding-inline-start:12px !important}.pe-xxl-3{padding-inline-end:12px !important}.pa-xxl-3{padding:12px !important}.pt-xxl-4,.py-xxl-4{padding-top:16px !important}.pr-xxl-4,.px-xxl-4{padding-right:16px !important}.pl-xxl-4,.px-xxl-4{padding-left:16px !important}.pb-xxl-4,.py-xxl-4{padding-bottom:16px !important}.ps-xxl-4{padding-inline-start:16px !important}.pe-xxl-4{padding-inline-end:16px !important}.pa-xxl-4{padding:16px !important}.pt-xxl-5,.py-xxl-5{padding-top:20px !important}.pr-xxl-5,.px-xxl-5{padding-right:20px !important}.pl-xxl-5,.px-xxl-5{padding-left:20px !important}.pb-xxl-5,.py-xxl-5{padding-bottom:20px !important}.ps-xxl-5{padding-inline-start:20px !important}.pe-xxl-5{padding-inline-end:20px !important}.pa-xxl-5{padding:20px !important}.pt-xxl-6,.py-xxl-6{padding-top:24px !important}.pr-xxl-6,.px-xxl-6{padding-right:24px !important}.pl-xxl-6,.px-xxl-6{padding-left:24px !important}.pb-xxl-6,.py-xxl-6{padding-bottom:24px !important}.ps-xxl-6{padding-inline-start:24px !important}.pe-xxl-6{padding-inline-end:24px !important}.pa-xxl-6{padding:24px !important}.pt-xxl-7,.py-xxl-7{padding-top:28px !important}.pr-xxl-7,.px-xxl-7{padding-right:28px !important}.pl-xxl-7,.px-xxl-7{padding-left:28px !important}.pb-xxl-7,.py-xxl-7{padding-bottom:28px !important}.ps-xxl-7{padding-inline-start:28px !important}.pe-xxl-7{padding-inline-end:28px !important}.pa-xxl-7{padding:28px !important}.pt-xxl-8,.py-xxl-8{padding-top:32px !important}.pr-xxl-8,.px-xxl-8{padding-right:32px !important}.pl-xxl-8,.px-xxl-8{padding-left:32px !important}.pb-xxl-8,.py-xxl-8{padding-bottom:32px !important}.ps-xxl-8{padding-inline-start:32px !important}.pe-xxl-8{padding-inline-end:32px !important}.pa-xxl-8{padding:32px !important}.pt-xxl-9,.py-xxl-9{padding-top:36px !important}.pr-xxl-9,.px-xxl-9{padding-right:36px !important}.pl-xxl-9,.px-xxl-9{padding-left:36px !important}.pb-xxl-9,.py-xxl-9{padding-bottom:36px !important}.ps-xxl-9{padding-inline-start:36px !important}.pe-xxl-9{padding-inline-end:36px !important}.pa-xxl-9{padding:36px !important}.pt-xxl-10,.py-xxl-10{padding-top:40px !important}.pr-xxl-10,.px-xxl-10{padding-right:40px !important}.pl-xxl-10,.px-xxl-10{padding-left:40px !important}.pb-xxl-10,.py-xxl-10{padding-bottom:40px !important}.ps-xxl-10{padding-inline-start:40px !important}.pe-xxl-10{padding-inline-end:40px !important}.pa-xxl-10{padding:40px !important}.pt-xxl-11,.py-xxl-11{padding-top:44px !important}.pr-xxl-11,.px-xxl-11{padding-right:44px !important}.pl-xxl-11,.px-xxl-11{padding-left:44px !important}.pb-xxl-11,.py-xxl-11{padding-bottom:44px !important}.ps-xxl-11{padding-inline-start:44px !important}.pe-xxl-11{padding-inline-end:44px !important}.pa-xxl-11{padding:44px !important}.pt-xxl-12,.py-xxl-12{padding-top:48px !important}.pr-xxl-12,.px-xxl-12{padding-right:48px !important}.pl-xxl-12,.px-xxl-12{padding-left:48px !important}.pb-xxl-12,.py-xxl-12{padding-bottom:48px !important}.ps-xxl-12{padding-inline-start:48px !important}.pe-xxl-12{padding-inline-end:48px !important}.pa-xxl-12{padding:48px !important}.pt-xxl-13,.py-xxl-13{padding-top:52px !important}.pr-xxl-13,.px-xxl-13{padding-right:52px !important}.pl-xxl-13,.px-xxl-13{padding-left:52px !important}.pb-xxl-13,.py-xxl-13{padding-bottom:52px !important}.ps-xxl-13{padding-inline-start:52px !important}.pe-xxl-13{padding-inline-end:52px !important}.pa-xxl-13{padding:52px !important}.pt-xxl-14,.py-xxl-14{padding-top:56px !important}.pr-xxl-14,.px-xxl-14{padding-right:56px !important}.pl-xxl-14,.px-xxl-14{padding-left:56px !important}.pb-xxl-14,.py-xxl-14{padding-bottom:56px !important}.ps-xxl-14{padding-inline-start:56px !important}.pe-xxl-14{padding-inline-end:56px !important}.pa-xxl-14{padding:56px !important}.pt-xxl-15,.py-xxl-15{padding-top:60px !important}.pr-xxl-15,.px-xxl-15{padding-right:60px !important}.pl-xxl-15,.px-xxl-15{padding-left:60px !important}.pb-xxl-15,.py-xxl-15{padding-bottom:60px !important}.ps-xxl-15{padding-inline-start:60px !important}.pe-xxl-15{padding-inline-end:60px !important}.pa-xxl-15{padding:60px !important}.pt-xxl-16,.py-xxl-16{padding-top:64px !important}.pr-xxl-16,.px-xxl-16{padding-right:64px !important}.pl-xxl-16,.px-xxl-16{padding-left:64px !important}.pb-xxl-16,.py-xxl-16{padding-bottom:64px !important}.ps-xxl-16{padding-inline-start:64px !important}.pe-xxl-16{padding-inline-end:64px !important}.pa-xxl-16{padding:64px !important}.pt-xxl-17,.py-xxl-17{padding-top:68px !important}.pr-xxl-17,.px-xxl-17{padding-right:68px !important}.pl-xxl-17,.px-xxl-17{padding-left:68px !important}.pb-xxl-17,.py-xxl-17{padding-bottom:68px !important}.ps-xxl-17{padding-inline-start:68px !important}.pe-xxl-17{padding-inline-end:68px !important}.pa-xxl-17{padding:68px !important}.pt-xxl-18,.py-xxl-18{padding-top:72px !important}.pr-xxl-18,.px-xxl-18{padding-right:72px !important}.pl-xxl-18,.px-xxl-18{padding-left:72px !important}.pb-xxl-18,.py-xxl-18{padding-bottom:72px !important}.ps-xxl-18{padding-inline-start:72px !important}.pe-xxl-18{padding-inline-end:72px !important}.pa-xxl-18{padding:72px !important}.pt-xxl-19,.py-xxl-19{padding-top:76px !important}.pr-xxl-19,.px-xxl-19{padding-right:76px !important}.pl-xxl-19,.px-xxl-19{padding-left:76px !important}.pb-xxl-19,.py-xxl-19{padding-bottom:76px !important}.ps-xxl-19{padding-inline-start:76px !important}.pe-xxl-19{padding-inline-end:76px !important}.pa-xxl-19{padding:76px !important}.pt-xxl-20,.py-xxl-20{padding-top:80px !important}.pr-xxl-20,.px-xxl-20{padding-right:80px !important}.pl-xxl-20,.px-xxl-20{padding-left:80px !important}.pb-xxl-20,.py-xxl-20{padding-bottom:80px !important}.ps-xxl-20{padding-inline-start:80px !important}.pe-xxl-20{padding-inline-end:80px !important}.pa-xxl-20{padding:80px !important}.pt-xxl-auto,.py-xxl-auto{padding-top:auto !important}.pr-xxl-auto,.px-xxl-auto{padding-right:auto !important}.pl-xxl-auto,.px-xxl-auto{padding-left:auto !important}.pb-xxl-auto,.py-xxl-auto{padding-bottom:auto !important}.ps-xxl-auto{padding-inline-start:auto !important}.pe-xxl-auto{padding-inline-end:auto !important}.pa-xxl-auto{padding:auto !important}.mt-xxl-n1,.my-xxl-n1{margin-top:-4px !important}.mr-xxl-n1,.mx-xxl-n1{margin-right:-4px !important}.ml-xxl-n1,.mx-xxl-n1{margin-left:-4px !important}.mb-xxl-n1,.my-xxl-n1{margin-bottom:-4px !important}.ms-xxl-n1{margin-inline-start:-4px !important}.me-xxl-n1{margin-inline-end:-4px !important}.ma-xxl-n1{margin:-4px !important}.mt-xxl-n2,.my-xxl-n2{margin-top:-8px !important}.mr-xxl-n2,.mx-xxl-n2{margin-right:-8px !important}.ml-xxl-n2,.mx-xxl-n2{margin-left:-8px !important}.mb-xxl-n2,.my-xxl-n2{margin-bottom:-8px !important}.ms-xxl-n2{margin-inline-start:-8px !important}.me-xxl-n2{margin-inline-end:-8px !important}.ma-xxl-n2{margin:-8px !important}.mt-xxl-n3,.my-xxl-n3{margin-top:-12px !important}.mr-xxl-n3,.mx-xxl-n3{margin-right:-12px !important}.ml-xxl-n3,.mx-xxl-n3{margin-left:-12px !important}.mb-xxl-n3,.my-xxl-n3{margin-bottom:-12px !important}.ms-xxl-n3{margin-inline-start:-12px !important}.me-xxl-n3{margin-inline-end:-12px !important}.ma-xxl-n3{margin:-12px !important}.mt-xxl-n4,.my-xxl-n4{margin-top:-16px !important}.mr-xxl-n4,.mx-xxl-n4{margin-right:-16px !important}.ml-xxl-n4,.mx-xxl-n4{margin-left:-16px !important}.mb-xxl-n4,.my-xxl-n4{margin-bottom:-16px !important}.ms-xxl-n4{margin-inline-start:-16px !important}.me-xxl-n4{margin-inline-end:-16px !important}.ma-xxl-n4{margin:-16px !important}.mt-xxl-n5,.my-xxl-n5{margin-top:-20px !important}.mr-xxl-n5,.mx-xxl-n5{margin-right:-20px !important}.ml-xxl-n5,.mx-xxl-n5{margin-left:-20px !important}.mb-xxl-n5,.my-xxl-n5{margin-bottom:-20px !important}.ms-xxl-n5{margin-inline-start:-20px !important}.me-xxl-n5{margin-inline-end:-20px !important}.ma-xxl-n5{margin:-20px !important}.mt-xxl-n6,.my-xxl-n6{margin-top:-24px !important}.mr-xxl-n6,.mx-xxl-n6{margin-right:-24px !important}.ml-xxl-n6,.mx-xxl-n6{margin-left:-24px !important}.mb-xxl-n6,.my-xxl-n6{margin-bottom:-24px !important}.ms-xxl-n6{margin-inline-start:-24px !important}.me-xxl-n6{margin-inline-end:-24px !important}.ma-xxl-n6{margin:-24px !important}.mt-xxl-n7,.my-xxl-n7{margin-top:-28px !important}.mr-xxl-n7,.mx-xxl-n7{margin-right:-28px !important}.ml-xxl-n7,.mx-xxl-n7{margin-left:-28px !important}.mb-xxl-n7,.my-xxl-n7{margin-bottom:-28px !important}.ms-xxl-n7{margin-inline-start:-28px !important}.me-xxl-n7{margin-inline-end:-28px !important}.ma-xxl-n7{margin:-28px !important}.mt-xxl-n8,.my-xxl-n8{margin-top:-32px !important}.mr-xxl-n8,.mx-xxl-n8{margin-right:-32px !important}.ml-xxl-n8,.mx-xxl-n8{margin-left:-32px !important}.mb-xxl-n8,.my-xxl-n8{margin-bottom:-32px !important}.ms-xxl-n8{margin-inline-start:-32px !important}.me-xxl-n8{margin-inline-end:-32px !important}.ma-xxl-n8{margin:-32px !important}.mt-xxl-n9,.my-xxl-n9{margin-top:-36px !important}.mr-xxl-n9,.mx-xxl-n9{margin-right:-36px !important}.ml-xxl-n9,.mx-xxl-n9{margin-left:-36px !important}.mb-xxl-n9,.my-xxl-n9{margin-bottom:-36px !important}.ms-xxl-n9{margin-inline-start:-36px !important}.me-xxl-n9{margin-inline-end:-36px !important}.ma-xxl-n9{margin:-36px !important}.mt-xxl-n10,.my-xxl-n10{margin-top:-40px !important}.mr-xxl-n10,.mx-xxl-n10{margin-right:-40px !important}.ml-xxl-n10,.mx-xxl-n10{margin-left:-40px !important}.mb-xxl-n10,.my-xxl-n10{margin-bottom:-40px !important}.ms-xxl-n10{margin-inline-start:-40px !important}.me-xxl-n10{margin-inline-end:-40px !important}.ma-xxl-n10{margin:-40px !important}.mt-xxl-n11,.my-xxl-n11{margin-top:-44px !important}.mr-xxl-n11,.mx-xxl-n11{margin-right:-44px !important}.ml-xxl-n11,.mx-xxl-n11{margin-left:-44px !important}.mb-xxl-n11,.my-xxl-n11{margin-bottom:-44px !important}.ms-xxl-n11{margin-inline-start:-44px !important}.me-xxl-n11{margin-inline-end:-44px !important}.ma-xxl-n11{margin:-44px !important}.mt-xxl-n12,.my-xxl-n12{margin-top:-48px !important}.mr-xxl-n12,.mx-xxl-n12{margin-right:-48px !important}.ml-xxl-n12,.mx-xxl-n12{margin-left:-48px !important}.mb-xxl-n12,.my-xxl-n12{margin-bottom:-48px !important}.ms-xxl-n12{margin-inline-start:-48px !important}.me-xxl-n12{margin-inline-end:-48px !important}.ma-xxl-n12{margin:-48px !important}.mt-xxl-n13,.my-xxl-n13{margin-top:-52px !important}.mr-xxl-n13,.mx-xxl-n13{margin-right:-52px !important}.ml-xxl-n13,.mx-xxl-n13{margin-left:-52px !important}.mb-xxl-n13,.my-xxl-n13{margin-bottom:-52px !important}.ms-xxl-n13{margin-inline-start:-52px !important}.me-xxl-n13{margin-inline-end:-52px !important}.ma-xxl-n13{margin:-52px !important}.mt-xxl-n14,.my-xxl-n14{margin-top:-56px !important}.mr-xxl-n14,.mx-xxl-n14{margin-right:-56px !important}.ml-xxl-n14,.mx-xxl-n14{margin-left:-56px !important}.mb-xxl-n14,.my-xxl-n14{margin-bottom:-56px !important}.ms-xxl-n14{margin-inline-start:-56px !important}.me-xxl-n14{margin-inline-end:-56px !important}.ma-xxl-n14{margin:-56px !important}.mt-xxl-n15,.my-xxl-n15{margin-top:-60px !important}.mr-xxl-n15,.mx-xxl-n15{margin-right:-60px !important}.ml-xxl-n15,.mx-xxl-n15{margin-left:-60px !important}.mb-xxl-n15,.my-xxl-n15{margin-bottom:-60px !important}.ms-xxl-n15{margin-inline-start:-60px !important}.me-xxl-n15{margin-inline-end:-60px !important}.ma-xxl-n15{margin:-60px !important}.mt-xxl-n16,.my-xxl-n16{margin-top:-64px !important}.mr-xxl-n16,.mx-xxl-n16{margin-right:-64px !important}.ml-xxl-n16,.mx-xxl-n16{margin-left:-64px !important}.mb-xxl-n16,.my-xxl-n16{margin-bottom:-64px !important}.ms-xxl-n16{margin-inline-start:-64px !important}.me-xxl-n16{margin-inline-end:-64px !important}.ma-xxl-n16{margin:-64px !important}.mt-xxl-n17,.my-xxl-n17{margin-top:-68px !important}.mr-xxl-n17,.mx-xxl-n17{margin-right:-68px !important}.ml-xxl-n17,.mx-xxl-n17{margin-left:-68px !important}.mb-xxl-n17,.my-xxl-n17{margin-bottom:-68px !important}.ms-xxl-n17{margin-inline-start:-68px !important}.me-xxl-n17{margin-inline-end:-68px !important}.ma-xxl-n17{margin:-68px !important}.mt-xxl-n18,.my-xxl-n18{margin-top:-72px !important}.mr-xxl-n18,.mx-xxl-n18{margin-right:-72px !important}.ml-xxl-n18,.mx-xxl-n18{margin-left:-72px !important}.mb-xxl-n18,.my-xxl-n18{margin-bottom:-72px !important}.ms-xxl-n18{margin-inline-start:-72px !important}.me-xxl-n18{margin-inline-end:-72px !important}.ma-xxl-n18{margin:-72px !important}.mt-xxl-n19,.my-xxl-n19{margin-top:-76px !important}.mr-xxl-n19,.mx-xxl-n19{margin-right:-76px !important}.ml-xxl-n19,.mx-xxl-n19{margin-left:-76px !important}.mb-xxl-n19,.my-xxl-n19{margin-bottom:-76px !important}.ms-xxl-n19{margin-inline-start:-76px !important}.me-xxl-n19{margin-inline-end:-76px !important}.ma-xxl-n19{margin:-76px !important}.mt-xxl-n20,.my-xxl-n20{margin-top:-80px !important}.mr-xxl-n20,.mx-xxl-n20{margin-right:-80px !important}.ml-xxl-n20,.mx-xxl-n20{margin-left:-80px !important}.mb-xxl-n20,.my-xxl-n20{margin-bottom:-80px !important}.ms-xxl-n20{margin-inline-start:-80px !important}.me-xxl-n20{margin-inline-end:-80px !important}.ma-xxl-n20{margin:-80px !important}}.mud-width-full{width:100%}.mud-height-full{height:100%}.w-max{width:max-content}.mud-appbar{width:100%;display:flex;z-index:var(--mud-zindex-appbar);position:relative;box-sizing:border-box;flex-shrink:0;flex-direction:column;color:var(--mud-palette-appbar-text);background-color:var(--mud-palette-appbar-background);transition:margin 225ms cubic-bezier(0, 0, 0.2, 1) 0ms,width 225ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-appbar.mud-appbar-fixed-top{position:fixed;top:0;right:0;left:0}.mud-appbar.mud-appbar-fixed-top .mud-popover-cascading-value{position:fixed}.mud-appbar.mud-appbar-fixed-bottom{position:fixed;bottom:0;right:0;left:0}.mud-appbar.mud-appbar-fixed-bottom .mud-popover-cascading-value{position:fixed}.mud-appbar .mud-toolbar-appbar{height:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8)}@media(min-width: 0px)and (orientation: landscape){.mud-appbar .mud-toolbar-appbar{height:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 600px){.mud-appbar .mud-toolbar-appbar{height:var(--mud-appbar-height)}}.mud-appbar.mud-appbar-dense .mud-toolbar-appbar{height:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4)}@media(min-width: 0px){.mud-drawer-open-responsive-xs-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-xs-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 600px){.mud-drawer-open-responsive-sm-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-sm-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 960px){.mud-drawer-open-responsive-md-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-md-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 1280px){.mud-drawer-open-responsive-lg-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-lg-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 1920px){.mud-drawer-open-responsive-xl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-xl-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 2560px){.mud-drawer-open-responsive-xxl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-responsive-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-responsive-xxl-left.mud-drawer-left-clipped-never.mud-drawer-open-responsive-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}.mud-drawer-open-persistent-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-persistent-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-persistent-left.mud-drawer-left-clipped-never.mud-drawer-open-persistent-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}@media(min-width: 0px){.mud-drawer-open-mini-xs-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-xs-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 600px){.mud-drawer-open-mini-sm-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-sm-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 960px){.mud-drawer-open-mini-md-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-md-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 1280px){.mud-drawer-open-mini-lg-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-lg-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 1920px){.mud-drawer-open-mini-xl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-xl-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}@media(min-width: 2560px){.mud-drawer-open-mini-xxl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);width:calc(100% - var(--mud-drawer-width-left))}.mud-drawer-open-mini-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-right))}.mud-drawer-open-mini-xxl-left.mud-drawer-left-clipped-never.mud-drawer-open-mini-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-left);margin-right:var(--mud-drawer-width-right);width:calc(100% - var(--mud-drawer-width-left) - var(--mud-drawer-width-right))}}.mud-drawer-close-mini-xs-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xs-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-xs-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 0px){.mud-drawer-close-mini-xs-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xs-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xs-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-xs-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer-close-mini-sm-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-sm-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-sm-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 600px){.mud-drawer-close-mini-sm-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-sm-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-sm-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-sm-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer-close-mini-md-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-md-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-md-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 960px){.mud-drawer-close-mini-md-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-md-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-md-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-md-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer-close-mini-lg-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-lg-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-lg-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 1280px){.mud-drawer-close-mini-lg-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-lg-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-lg-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-lg-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer-close-mini-xl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xl-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-xl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 1920px){.mud-drawer-close-mini-xl-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xl-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xl-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-xl-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer-close-mini-xxl-left.mud-drawer-left-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xxl-left.mud-drawer-left-clipped-never.mud-drawer-close-mini-xxl-right.mud-drawer-right-clipped-never .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}@media(max-width: 2560px){.mud-drawer-close-mini-xxl-left.mud-drawer-left-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);width:calc(100% - var(--mud-drawer-width-mini-left))}.mud-drawer-close-mini-xxl-right.mud-drawer-right-clipped-docked .mud-appbar{margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-right))}.mud-drawer-close-mini-xxl-left.mud-drawer-left-clipped-docked.mud-drawer-close-mini-xxl-right.mud-drawer-right-clipped-docked .mud-appbar{margin-left:var(--mud-drawer-width-mini-left);margin-right:var(--mud-drawer-width-mini-right);width:calc(100% - var(--mud-drawer-width-mini-left) - var(--mud-drawer-width-mini-right))}}.mud-drawer{display:flex;flex:0 0 auto;outline:0;position:fixed;z-index:var(--mud-zindex-drawer);overflow-y:auto;flex-direction:column;color:var(--mud-palette-drawer-text);background-color:var(--mud-palette-drawer-background)}.mud-drawer .mud-drawer-content{height:100%;max-height:100%;display:flex;flex:0 0 auto;flex-direction:column}.mud-drawer:not(.mud-drawer-fixed){position:absolute}@media(max-width: -1px){.mud-drawer.mud-drawer-mini.mud-drawer-xs:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-xs{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-xs:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-xs.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}@media(max-width: 599px){.mud-drawer.mud-drawer-mini.mud-drawer-sm:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-sm{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-sm:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-sm.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}@media(max-width: 959px){.mud-drawer.mud-drawer-mini.mud-drawer-md:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-md{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-md:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-md.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}@media(max-width: 1279px){.mud-drawer.mud-drawer-mini.mud-drawer-lg:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-lg{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-lg:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-lg.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}@media(max-width: 1919px){.mud-drawer.mud-drawer-mini.mud-drawer-xl:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-xl{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-xl:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-xl.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}@media(max-width: 2559px){.mud-drawer.mud-drawer-mini.mud-drawer-xxl:not(.mud-drawer--closed),.mud-drawer.mud-drawer-responsive.mud-drawer-xxl{z-index:calc(var(--mud-zindex-appbar) + 2)}.mud-drawer.mud-drawer-mini.mud-drawer-xxl:not(.mud-drawer--closed).mud-drawer--initial:not(.mud-drawer-mini),.mud-drawer.mud-drawer-responsive.mud-drawer-xxl.mud-drawer--initial:not(.mud-drawer-mini){display:none !important}}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-left,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left{height:100%;right:auto;width:var(--mud-drawer-width, var(--mud-drawer-width-left))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-left.mud-drawer--open,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left.mud-drawer--open{left:0}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-left.mud-drawer--open:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-left 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-left.mud-drawer--closed,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left.mud-drawer--closed{box-shadow:none;left:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-left)))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-left.mud-drawer--closed:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-left 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-right,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right{height:100%;left:auto;width:var(--mud-drawer-width, var(--mud-drawer-width-right))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-right.mud-drawer--open,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right.mud-drawer--open{right:0}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-right.mud-drawer--open:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-right 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-right.mud-drawer--closed,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right.mud-drawer--closed{box-shadow:none;right:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-right)))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-right.mud-drawer--closed:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-right 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-bottom,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-bottom{width:100%;top:auto;height:var(--mud-drawer-height, var(--mud-drawer-height-bottom))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-bottom.mud-drawer--open,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-bottom.mud-drawer--open{bottom:0}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-bottom.mud-drawer--open:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-bottom.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-bottom 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-bottom.mud-drawer--closed,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-bottom.mud-drawer--closed{box-shadow:none;bottom:calc(-1*var(--mud-drawer-height, var(--mud-drawer-height-bottom)))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-bottom.mud-drawer--closed:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-bottom.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-bottom 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-top,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-top{width:100%;bottom:auto;height:var(--mud-drawer-height, var(--mud-drawer-height-top))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-top.mud-drawer--open,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-top.mud-drawer--open{top:0}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-top.mud-drawer--open:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-top.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-top 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-top.mud-drawer--closed,.mud-drawer.mud-drawer-persistent.mud-drawer-pos-top.mud-drawer--closed{box-shadow:none;top:calc(-1*var(--mud-drawer-height, var(--mud-drawer-height-top)))}.mud-drawer.mud-drawer-responsive.mud-drawer-pos-top.mud-drawer--closed:not(.mud-drawer--initial),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-top.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-top 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-mini{height:100%;transition:width 225ms cubic-bezier(0, 0, 0.2, 1)}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left{left:0;right:auto}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left.mud-drawer--closed{width:var(--mud-drawer-width-mini-left)}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left.mud-drawer--open{width:var(--mud-drawer-width-left)}.mud-drawer.mud-drawer-mini.mud-drawer-pos-right{left:auto;right:0}.mud-drawer.mud-drawer-mini.mud-drawer-pos-right.mud-drawer--closed{width:var(--mud-drawer-width-mini-right)}.mud-drawer.mud-drawer-mini.mud-drawer-pos-right.mud-drawer--open{width:var(--mud-drawer-width-right)}.mud-drawer.mud-drawer-temporary{margin:0 !important;z-index:calc(var(--mud-zindex-appbar) + 2);transition:transform 225ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left{right:auto;top:0;height:100%;width:var(--mud-drawer-width, var(--mud-drawer-width-left))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--open{left:0}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-left 225ms cubic-bezier(0, 0, 0.2, 1) forwards}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--closed{left:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-left)))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-left.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-left 225ms cubic-bezier(0, 0, 0.2, 1) forwards}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-right{left:auto;top:0;height:100%;width:var(--mud-drawer-width, var(--mud-drawer-width-right))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-right.mud-drawer--open{right:0}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-right.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-right 225ms cubic-bezier(0, 0, 0.2, 1) forwards}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-right.mud-drawer--closed{right:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-right)))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-right.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-right 225ms cubic-bezier(0, 0, 0.2, 1) forwards}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-bottom{left:0;top:auto;width:100%}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-bottom.mud-drawer--open{bottom:0}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-bottom.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-bottom 225ms cubic-bezier(0, 0, 0.2, 1) 0ms 1}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-bottom.mud-drawer--closed{bottom:calc(-1*var(--mud-drawer-height, var(--mud-drawer-height-bottom)))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-bottom.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-bottom 225ms cubic-bezier(0, 0, 0.2, 1) 0ms 1}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-top{left:0;bottom:auto;width:100%}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-top.mud-drawer--open{top:0}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-top.mud-drawer--open:not(.mud-drawer--initial){animation:mud-drawer-slide-in-top 225ms cubic-bezier(0, 0, 0.2, 1) 0ms 1}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-top.mud-drawer--closed{top:calc(-1*var(--mud-drawer-height, var(--mud-drawer-height-top)))}.mud-drawer.mud-drawer-temporary.mud-drawer-pos-top.mud-drawer--closed:not(.mud-drawer--initial){animation:mud-drawer-slide-out-top 225ms cubic-bezier(0, 0, 0.2, 1) 0ms 1}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left~div:not(.mud-main-content),.mud-drawer.mud-drawer-mini.mud-drawer-pos-right~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-top~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-bottom~div:not(.mud-main-content){transition:margin 225ms cubic-bezier(0, 0, 0.2, 1) 0ms}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left.mud-drawer--open~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-left.mud-drawer--open~div:not(.mud-main-content){margin-left:var(--mud-drawer-width, var(--mud-drawer-width-left))}.mud-drawer.mud-drawer-mini.mud-drawer-pos-right.mud-drawer--open~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-right.mud-drawer--open~div:not(.mud-main-content){margin-right:var(--mud-drawer-width, var(--mud-drawer-width-right))}.mud-drawer.mud-drawer-mini.mud-drawer-pos-top.mud-drawer--open~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-top.mud-drawer--open~div:not(.mud-main-content){margin-top:var(--mud-drawer-height, var(--mud-drawer-height-top))}.mud-drawer.mud-drawer-mini.mud-drawer-pos-bottom.mud-drawer--open~div:not(.mud-main-content),.mud-drawer.mud-drawer-persistent.mud-drawer-pos-bottom.mud-drawer--open~div:not(.mud-main-content){margin-bottom:var(--mud-drawer-height, var(--mud-drawer-height-bottom))}.mud-drawer.mud-drawer-mini.mud-drawer-pos-left.mud-drawer--closed~div:not(.mud-main-content){margin-left:var(--mud-drawer-width, var(--mud-drawer-width-mini-left))}.mud-drawer.mud-drawer-mini.mud-drawer-pos-right.mud-drawer--closed~div:not(.mud-main-content){margin-right:var(--mud-drawer-width, var(--mud-drawer-width-mini-right))}.mud-drawer-header{display:flex;min-height:var(--mud-appbar-height);padding:12px 24px 12px 24px}.mud-drawer-header.mud-drawer-header-dense{min-height:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);padding:8px 24px 8px 24px}.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-persistent:not(.mud-drawer-clipped-never),.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-temporary.mud-drawer-clipped-always{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}@media(max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-persistent:not(.mud-drawer-clipped-never),.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-temporary.mud-drawer-clipped-always{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - (var(--mud-appbar-height) - var(--mud-appbar-height)/4))}}@media(max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-persistent:not(.mud-drawer-clipped-never),.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-always,.mud-drawer-fixed.mud-drawer-temporary.mud-drawer-clipped-always{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - (var(--mud-appbar-height) - var(--mud-appbar-height)/8))}}@media(min-width: 0px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xs,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xs{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 0px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xs,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xs{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 0px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xs,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xs{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}@media(min-width: 600px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-sm,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-sm{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 600px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-sm,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-sm{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 600px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-sm,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-sm{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}@media(min-width: 960px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-md,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-md{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 960px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-md,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-md{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 960px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-md,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-md{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}@media(min-width: 1280px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-lg,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-lg{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 1280px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-lg,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-lg{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 1280px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-lg,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-lg{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}@media(min-width: 1920px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xl{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 1920px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 1920px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}@media(min-width: 2560px){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xxl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xxl{top:var(--mud-appbar-height);height:calc(100% - var(--mud-appbar-height))}}@media(min-width: 2560px)and (max-width: 599px)and (orientation: landscape){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xxl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xxl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 2560px)and (max-width: 599px)and (orientation: portrait){.mud-drawer-fixed.mud-drawer-mini.mud-drawer-clipped-docked.mud-drawer-xxl,.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xxl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);height:calc(100% - var(--mud-appbar-height)/8)}}.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-mini:not(.mud-drawer-clipped-never),.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-persistent:not(.mud-drawer-clipped-never),.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-always,.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-temporary.mud-drawer-clipped-always{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}@media(min-width: 0px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xs{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}@media(min-width: 600px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-sm{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}@media(min-width: 960px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-md{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}@media(min-width: 1280px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-lg{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}@media(min-width: 1920px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}@media(min-width: 2560px){.mud-appbar-dense~.mud-drawer-fixed.mud-drawer-responsive.mud-drawer-clipped-docked.mud-drawer-xxl{top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4);height:calc(100% - var(--mud-appbar-height) + var(--mud-appbar-height)/4)}}.mud-drawer-overlay{display:none}@media(max-width: -1px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xs{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xs.mud-drawer--initial{display:none}}@media(max-width: -1px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-xs{display:block}}@media(max-width: 599px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-sm{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-sm.mud-drawer--initial{display:none}}@media(max-width: 599px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-sm{display:block}}@media(max-width: 959px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-md{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-md.mud-drawer--initial{display:none}}@media(max-width: 959px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-md{display:block}}@media(max-width: 1279px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-lg{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-lg.mud-drawer--initial{display:none}}@media(max-width: 1279px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-lg{display:block}}@media(max-width: 1919px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xl{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xl.mud-drawer--initial{display:none}}@media(max-width: 1919px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-xl{display:block}}@media(max-width: 2559px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xxl{display:block}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-responsive.mud-drawer-overlay-xxl.mud-drawer--initial{display:none}}@media(max-width: 2559px){.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-mini.mud-drawer-overlay-xxl{display:block}}.mud-drawer-overlay.mud-drawer-overlay--open.mud-drawer-overlay-temporary{display:block}@keyframes mud-drawer-slide-in-left{from{left:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-left)))}}@keyframes mud-drawer-slide-out-left{from{left:0}}@keyframes mud-drawer-slide-in-right{from{right:calc(-1*var(--mud-drawer-width, var(--mud-drawer-width-right)))}}@keyframes mud-drawer-slide-out-right{from{right:0}}@keyframes mud-drawer-slide-in-bottom{from{bottom:calc(-1*var(--mud-drawer-height, var(--mud-drawer-height-bottom)))}}@keyframes mud-drawer-slide-out-bottom{from{bottom:0}}@keyframes mud-drawer-slide-in-top{from{top:calc(-1*var(--mud-drawer-height, var(--mud-drawer-height-top)))}}@keyframes mud-drawer-slide-out-top{from{top:0}}.mud-main-content{margin:0;flex:1 1 auto;padding-top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/8);transition:margin 225ms cubic-bezier(0, 0, 0.2, 1) 0ms}@media(min-width: 0px)and (orientation: landscape){.mud-main-content{padding-top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4)}}@media(min-width: 600px){.mud-main-content{padding-top:var(--mud-appbar-height)}}.mud-appbar-dense~.mud-main-content{padding-top:calc(var(--mud-appbar-height) - var(--mud-appbar-height)/4)}@media(min-width: 0px){.mud-drawer-open-responsive-xs-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-xs-left.mud-drawer-open-responsive-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}@media(min-width: 600px){.mud-drawer-open-responsive-sm-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-sm-left.mud-drawer-open-responsive-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}@media(min-width: 960px){.mud-drawer-open-responsive-md-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-md-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-md-left.mud-drawer-open-responsive-md-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}@media(min-width: 1280px){.mud-drawer-open-responsive-lg-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-lg-left.mud-drawer-open-responsive-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}@media(min-width: 1920px){.mud-drawer-open-responsive-xl-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-xl-left.mud-drawer-open-responsive-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}@media(min-width: 2560px){.mud-drawer-open-responsive-xxl-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-responsive-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-responsive-xxl-left.mud-drawer-open-responsive-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}}.mud-drawer-open-persistent-left:not(.mud-drawer-open-persistent-right) .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-persistent-right:not(.mud-drawer-open-persistent-left) .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-persistent-left.mud-drawer-open-persistent-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xs-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-xs-left.mud-drawer-open-mini-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-sm-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-sm-left.mud-drawer-open-mini-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-md-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-md-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-md-left.mud-drawer-open-mini-md-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-lg-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-lg-left.mud-drawer-open-mini-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xl-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-xl-left.mud-drawer-open-mini-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xxl-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-xxl-left.mud-drawer-open-mini-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-none-left .mud-main-content,.mud-drawer-open-mini-always-left .mud-main-content{margin-left:var(--mud-drawer-width-left)}.mud-drawer-open-mini-none-right .mud-main-content,.mud-drawer-open-mini-always-right .mud-main-content{margin-right:var(--mud-drawer-width-right)}.mud-drawer-open-mini-none-left.mud-drawer-open-mini-none,.mud-drawer-open-mini-none .mud-drawer-open-mini-always-right .mud-main-content,.mud-drawer-open-mini-always-left.mud-drawer-open-mini-none,.mud-drawer-open-mini-always .mud-drawer-open-mini-always-right .mud-main-content{margin-right:var(--mud-drawer-width-right);margin-left:var(--mud-drawer-width-left)}.mud-drawer-close-mini-xs-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-xs-left.mud-drawer-close-mini-xs-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-sm-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-sm-left.mud-drawer-close-mini-sm-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-md-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-md-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-md-left.mud-drawer-close-mini-md-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-lg-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-lg-left.mud-drawer-close-mini-lg-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-xl-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-xl-left.mud-drawer-close-mini-xl-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-xxl-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-xxl-left.mud-drawer-close-mini-xxl-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-none-left .mud-main-content,.mud-drawer-close-mini-always-left .mud-main-content{margin-left:var(--mud-drawer-width-mini-left)}.mud-drawer-close-mini-none-right .mud-main-content,.mud-drawer-close-mini-always-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right)}.mud-drawer-close-mini-none-left.mud-drawer-close-mini-none,.mud-drawer-close-mini-none .mud-drawer-close-mini-always-right .mud-main-content,.mud-drawer-close-mini-always-left.mud-drawer-close-mini-none,.mud-drawer-close-mini-always .mud-drawer-close-mini-always-right .mud-main-content{margin-right:var(--mud-drawer-width-mini-right);margin-left:var(--mud-drawer-width-mini-left)}.mud-container{width:100%;display:block;box-sizing:border-box;margin-left:auto;margin-right:auto}.mud-container--gutters{padding-left:16px;padding-right:16px}@media(min-width: 600px){.mud-container--gutters{padding-left:24px;padding-right:24px}}@media(min-width: 600px){.mud-container-fixed{max-width:600px}}@media(min-width: 960px){.mud-container-fixed{max-width:960px}}@media(min-width: 1280px){.mud-container-fixed{max-width:1280px}}@media(min-width: 1920px){.mud-container-fixed{max-width:1920px}}@media(min-width: 2560px){.mud-container-fixed{max-width:2560px}}@media(min-width: 0px){.mud-container-maxwidth-xs{max-width:444px}}@media(min-width: 600px){.mud-container-maxwidth-sm{max-width:600px}}@media(min-width: 960px){.mud-container-maxwidth-md{max-width:960px}}@media(min-width: 1280px){.mud-container-maxwidth-lg{max-width:1280px}}@media(min-width: 1920px){.mud-container-maxwidth-xl{max-width:1920px}}@media(min-width: 2560px){.mud-container-maxwidth-xxl{max-width:2560px}}.scroll-locked{padding-right:8px;overflow:hidden}.scroll-locked .mud-layout .mud-appbar{padding-right:8px}.scroll-locked .mud-layout .mud-main-content .mud-scroll-to-top{padding-right:8px}.scroll-locked-no-padding{overflow:hidden}@-moz-document url-prefix(){.scroll-locked{padding-right:17px}.scroll-locked .mud-layout .mud-appbar{padding-right:17px}.scroll-locked .mud-layout .mud-main-content .mud-scroll-to-top{padding-right:17px}}.mud-scroll-to-top{position:fixed;cursor:pointer;z-index:100}.mud-scroll-to-top.visible{bottom:16px;right:16px;opacity:1;transition:transform .5s;flex:1}.mud-scroll-to-top.hidden{bottom:16px;right:16px;opacity:0;transition:all .5s;visibility:hidden;transform:scale(0) rotate(180deg);flex:0}.mud-scroll-to-top:after{content:"";background:rgba(0,0,0,0);top:0;bottom:0;left:0;right:0;position:absolute;z-index:var(--mud-zindex-tooltip)}.red{background-color:#f44336}.red-text{color:#f44336}.red.lighten-5{background-color:#ffebee}.red-text.text-lighten-5{color:#ffebee}.red.lighten-4{background-color:#ffcdd2}.red-text.text-lighten-4{color:#ffcdd2}.red.lighten-3{background-color:#ef9a9a}.red-text.text-lighten-3{color:#ef9a9a}.red.lighten-2{background-color:#e57373}.red-text.text-lighten-2{color:#e57373}.red.lighten-1{background-color:#ef5350}.red-text.text-lighten-1{color:#ef5350}.red.darken-1{background-color:#e53935}.red-text.text-darken-1{color:#e53935}.red.darken-2{background-color:#d32f2f}.red-text.text-darken-2{color:#d32f2f}.red.darken-3{background-color:#c62828}.red-text.text-darken-3{color:#c62828}.red.darken-4{background-color:#b71c1c}.red-text.text-darken-4{color:#b71c1c}.red.accent-1{background-color:#ff8a80}.red-text.text-accent-1{color:#ff8a80}.red.accent-2{background-color:#ff5252}.red-text.text-accent-2{color:#ff5252}.red.accent-3{background-color:#ff1744}.red-text.text-accent-3{color:#ff1744}.red.accent-4{background-color:#d50000}.red-text.text-accent-4{color:#d50000}.pink{background-color:#e91e63}.pink-text{color:#e91e63}.pink.lighten-5{background-color:#fce4ec}.pink-text.text-lighten-5{color:#fce4ec}.pink.lighten-4{background-color:#f8bbd0}.pink-text.text-lighten-4{color:#f8bbd0}.pink.lighten-3{background-color:#f48fb1}.pink-text.text-lighten-3{color:#f48fb1}.pink.lighten-2{background-color:#f06292}.pink-text.text-lighten-2{color:#f06292}.pink.lighten-1{background-color:#ec407a}.pink-text.text-lighten-1{color:#ec407a}.pink.darken-1{background-color:#d81b60}.pink-text.text-darken-1{color:#d81b60}.pink.darken-2{background-color:#c2185b}.pink-text.text-darken-2{color:#c2185b}.pink.darken-3{background-color:#ad1457}.pink-text.text-darken-3{color:#ad1457}.pink.darken-4{background-color:#880e4f}.pink-text.text-darken-4{color:#880e4f}.pink.accent-1{background-color:#ff80ab}.pink-text.text-accent-1{color:#ff80ab}.pink.accent-2{background-color:#ff4081}.pink-text.text-accent-2{color:#ff4081}.pink.accent-3{background-color:#f50057}.pink-text.text-accent-3{color:#f50057}.pink.accent-4{background-color:#c51162}.pink-text.text-accent-4{color:#c51162}.purple{background-color:#9c27b0}.purple-text{color:#9c27b0}.purple.lighten-5{background-color:#f3e5f5}.purple-text.text-lighten-5{color:#f3e5f5}.purple.lighten-4{background-color:#e1bee7}.purple-text.text-lighten-4{color:#e1bee7}.purple.lighten-3{background-color:#ce93d8}.purple-text.text-lighten-3{color:#ce93d8}.purple.lighten-2{background-color:#ba68c8}.purple-text.text-lighten-2{color:#ba68c8}.purple.lighten-1{background-color:#ab47bc}.purple-text.text-lighten-1{color:#ab47bc}.purple.darken-1{background-color:#8e24aa}.purple-text.text-darken-1{color:#8e24aa}.purple.darken-2{background-color:#7b1fa2}.purple-text.text-darken-2{color:#7b1fa2}.purple.darken-3{background-color:#6a1b9a}.purple-text.text-darken-3{color:#6a1b9a}.purple.darken-4{background-color:#4a148c}.purple-text.text-darken-4{color:#4a148c}.purple.accent-1{background-color:#ea80fc}.purple-text.text-accent-1{color:#ea80fc}.purple.accent-2{background-color:#e040fb}.purple-text.text-accent-2{color:#e040fb}.purple.accent-3{background-color:#d500f9}.purple-text.text-accent-3{color:#d500f9}.purple.accent-4{background-color:#a0f}.purple-text.text-accent-4{color:#a0f}.deep-purple{background-color:#673ab7}.deep-purple-text{color:#673ab7}.deep-purple.lighten-5{background-color:#ede7f6}.deep-purple-text.text-lighten-5{color:#ede7f6}.deep-purple.lighten-4{background-color:#d1c4e9}.deep-purple-text.text-lighten-4{color:#d1c4e9}.deep-purple.lighten-3{background-color:#b39ddb}.deep-purple-text.text-lighten-3{color:#b39ddb}.deep-purple.lighten-2{background-color:#9575cd}.deep-purple-text.text-lighten-2{color:#9575cd}.deep-purple.lighten-1{background-color:#7e57c2}.deep-purple-text.text-lighten-1{color:#7e57c2}.deep-purple.darken-1{background-color:#5e35b1}.deep-purple-text.text-darken-1{color:#5e35b1}.deep-purple.darken-2{background-color:#512da8}.deep-purple-text.text-darken-2{color:#512da8}.deep-purple.darken-3{background-color:#4527a0}.deep-purple-text.text-darken-3{color:#4527a0}.deep-purple.darken-4{background-color:#311b92}.deep-purple-text.text-darken-4{color:#311b92}.deep-purple.accent-1{background-color:#b388ff}.deep-purple-text.text-accent-1{color:#b388ff}.deep-purple.accent-2{background-color:#7c4dff}.deep-purple-text.text-accent-2{color:#7c4dff}.deep-purple.accent-3{background-color:#651fff}.deep-purple-text.text-accent-3{color:#651fff}.deep-purple.accent-4{background-color:#6200ea}.deep-purple-text.text-accent-4{color:#6200ea}.indigo{background-color:#3f51b5}.indigo-text{color:#3f51b5}.indigo.lighten-5{background-color:#e8eaf6}.indigo-text.text-lighten-5{color:#e8eaf6}.indigo.lighten-4{background-color:#c5cae9}.indigo-text.text-lighten-4{color:#c5cae9}.indigo.lighten-3{background-color:#9fa8da}.indigo-text.text-lighten-3{color:#9fa8da}.indigo.lighten-2{background-color:#7986cb}.indigo-text.text-lighten-2{color:#7986cb}.indigo.lighten-1{background-color:#5c6bc0}.indigo-text.text-lighten-1{color:#5c6bc0}.indigo.darken-1{background-color:#3949ab}.indigo-text.text-darken-1{color:#3949ab}.indigo.darken-2{background-color:#303f9f}.indigo-text.text-darken-2{color:#303f9f}.indigo.darken-3{background-color:#283593}.indigo-text.text-darken-3{color:#283593}.indigo.darken-4{background-color:#1a237e}.indigo-text.text-darken-4{color:#1a237e}.indigo.accent-1{background-color:#8c9eff}.indigo-text.text-accent-1{color:#8c9eff}.indigo.accent-2{background-color:#536dfe}.indigo-text.text-accent-2{color:#536dfe}.indigo.accent-3{background-color:#3d5afe}.indigo-text.text-accent-3{color:#3d5afe}.indigo.accent-4{background-color:#304ffe}.indigo-text.text-accent-4{color:#304ffe}.blue{background-color:#2196f3}.blue-text{color:#2196f3}.blue.lighten-5{background-color:#e3f2fd}.blue-text.text-lighten-5{color:#e3f2fd}.blue.lighten-4{background-color:#bbdefb}.blue-text.text-lighten-4{color:#bbdefb}.blue.lighten-3{background-color:#90caf9}.blue-text.text-lighten-3{color:#90caf9}.blue.lighten-2{background-color:#64b5f6}.blue-text.text-lighten-2{color:#64b5f6}.blue.lighten-1{background-color:#42a5f5}.blue-text.text-lighten-1{color:#42a5f5}.blue.darken-1{background-color:#1e88e5}.blue-text.text-darken-1{color:#1e88e5}.blue.darken-2{background-color:#1976d2}.blue-text.text-darken-2{color:#1976d2}.blue.darken-3{background-color:#1565c0}.blue-text.text-darken-3{color:#1565c0}.blue.darken-4{background-color:#0d47a1}.blue-text.text-darken-4{color:#0d47a1}.blue.accent-1{background-color:#82b1ff}.blue-text.text-accent-1{color:#82b1ff}.blue.accent-2{background-color:#448aff}.blue-text.text-accent-2{color:#448aff}.blue.accent-3{background-color:#2979ff}.blue-text.text-accent-3{color:#2979ff}.blue.accent-4{background-color:#2962ff}.blue-text.text-accent-4{color:#2962ff}.light-blue{background-color:#03a9f4}.light-blue-text{color:#03a9f4}.light-blue.lighten-5{background-color:#e1f5fe}.light-blue-text.text-lighten-5{color:#e1f5fe}.light-blue.lighten-4{background-color:#b3e5fc}.light-blue-text.text-lighten-4{color:#b3e5fc}.light-blue.lighten-3{background-color:#81d4fa}.light-blue-text.text-lighten-3{color:#81d4fa}.light-blue.lighten-2{background-color:#4fc3f7}.light-blue-text.text-lighten-2{color:#4fc3f7}.light-blue.lighten-1{background-color:#29b6f6}.light-blue-text.text-lighten-1{color:#29b6f6}.light-blue.darken-1{background-color:#039be5}.light-blue-text.text-darken-1{color:#039be5}.light-blue.darken-2{background-color:#0288d1}.light-blue-text.text-darken-2{color:#0288d1}.light-blue.darken-3{background-color:#0277bd}.light-blue-text.text-darken-3{color:#0277bd}.light-blue.darken-4{background-color:#01579b}.light-blue-text.text-darken-4{color:#01579b}.light-blue.accent-1{background-color:#80d8ff}.light-blue-text.text-accent-1{color:#80d8ff}.light-blue.accent-2{background-color:#40c4ff}.light-blue-text.text-accent-2{color:#40c4ff}.light-blue.accent-3{background-color:#00b0ff}.light-blue-text.text-accent-3{color:#00b0ff}.light-blue.accent-4{background-color:#0091ea}.light-blue-text.text-accent-4{color:#0091ea}.cyan{background-color:#00bcd4}.cyan-text{color:#00bcd4}.cyan.lighten-5{background-color:#e0f7fa}.cyan-text.text-lighten-5{color:#e0f7fa}.cyan.lighten-4{background-color:#b2ebf2}.cyan-text.text-lighten-4{color:#b2ebf2}.cyan.lighten-3{background-color:#80deea}.cyan-text.text-lighten-3{color:#80deea}.cyan.lighten-2{background-color:#4dd0e1}.cyan-text.text-lighten-2{color:#4dd0e1}.cyan.lighten-1{background-color:#26c6da}.cyan-text.text-lighten-1{color:#26c6da}.cyan.darken-1{background-color:#00acc1}.cyan-text.text-darken-1{color:#00acc1}.cyan.darken-2{background-color:#0097a7}.cyan-text.text-darken-2{color:#0097a7}.cyan.darken-3{background-color:#00838f}.cyan-text.text-darken-3{color:#00838f}.cyan.darken-4{background-color:#006064}.cyan-text.text-darken-4{color:#006064}.cyan.accent-1{background-color:#84ffff}.cyan-text.text-accent-1{color:#84ffff}.cyan.accent-2{background-color:#18ffff}.cyan-text.text-accent-2{color:#18ffff}.cyan.accent-3{background-color:#00e5ff}.cyan-text.text-accent-3{color:#00e5ff}.cyan.accent-4{background-color:#00b8d4}.cyan-text.text-accent-4{color:#00b8d4}.teal{background-color:#009688}.teal-text{color:#009688}.teal.lighten-5{background-color:#e0f2f1}.teal-text.text-lighten-5{color:#e0f2f1}.teal.lighten-4{background-color:#b2dfdb}.teal-text.text-lighten-4{color:#b2dfdb}.teal.lighten-3{background-color:#80cbc4}.teal-text.text-lighten-3{color:#80cbc4}.teal.lighten-2{background-color:#4db6ac}.teal-text.text-lighten-2{color:#4db6ac}.teal.lighten-1{background-color:#26a69a}.teal-text.text-lighten-1{color:#26a69a}.teal.darken-1{background-color:#00897b}.teal-text.text-darken-1{color:#00897b}.teal.darken-2{background-color:#00796b}.teal-text.text-darken-2{color:#00796b}.teal.darken-3{background-color:#00695c}.teal-text.text-darken-3{color:#00695c}.teal.darken-4{background-color:#004d40}.teal-text.text-darken-4{color:#004d40}.teal.accent-1{background-color:#a7ffeb}.teal-text.text-accent-1{color:#a7ffeb}.teal.accent-2{background-color:#64ffda}.teal-text.text-accent-2{color:#64ffda}.teal.accent-3{background-color:#1de9b6}.teal-text.text-accent-3{color:#1de9b6}.teal.accent-4{background-color:#00bfa5}.teal-text.text-accent-4{color:#00bfa5}.green{background-color:#4caf50}.green-text{color:#4caf50}.green.lighten-5{background-color:#e8f5e9}.green-text.text-lighten-5{color:#e8f5e9}.green.lighten-4{background-color:#c8e6c9}.green-text.text-lighten-4{color:#c8e6c9}.green.lighten-3{background-color:#a5d6a7}.green-text.text-lighten-3{color:#a5d6a7}.green.lighten-2{background-color:#81c784}.green-text.text-lighten-2{color:#81c784}.green.lighten-1{background-color:#66bb6a}.green-text.text-lighten-1{color:#66bb6a}.green.darken-1{background-color:#43a047}.green-text.text-darken-1{color:#43a047}.green.darken-2{background-color:#388e3c}.green-text.text-darken-2{color:#388e3c}.green.darken-3{background-color:#2e7d32}.green-text.text-darken-3{color:#2e7d32}.green.darken-4{background-color:#1b5e20}.green-text.text-darken-4{color:#1b5e20}.green.accent-1{background-color:#b9f6ca}.green-text.text-accent-1{color:#b9f6ca}.green.accent-2{background-color:#69f0ae}.green-text.text-accent-2{color:#69f0ae}.green.accent-3{background-color:#00e676}.green-text.text-accent-3{color:#00e676}.green.accent-4{background-color:#00c853}.green-text.text-accent-4{color:#00c853}.light-green{background-color:#8bc34a}.light-green-text{color:#8bc34a}.light-green.lighten-5{background-color:#f1f8e9}.light-green-text.text-lighten-5{color:#f1f8e9}.light-green.lighten-4{background-color:#dcedc8}.light-green-text.text-lighten-4{color:#dcedc8}.light-green.lighten-3{background-color:#c5e1a5}.light-green-text.text-lighten-3{color:#c5e1a5}.light-green.lighten-2{background-color:#aed581}.light-green-text.text-lighten-2{color:#aed581}.light-green.lighten-1{background-color:#9ccc65}.light-green-text.text-lighten-1{color:#9ccc65}.light-green.darken-1{background-color:#7cb342}.light-green-text.text-darken-1{color:#7cb342}.light-green.darken-2{background-color:#689f38}.light-green-text.text-darken-2{color:#689f38}.light-green.darken-3{background-color:#558b2f}.light-green-text.text-darken-3{color:#558b2f}.light-green.darken-4{background-color:#33691e}.light-green-text.text-darken-4{color:#33691e}.light-green.accent-1{background-color:#ccff90}.light-green-text.text-accent-1{color:#ccff90}.light-green.accent-2{background-color:#b2ff59}.light-green-text.text-accent-2{color:#b2ff59}.light-green.accent-3{background-color:#76ff03}.light-green-text.text-accent-3{color:#76ff03}.light-green.accent-4{background-color:#64dd17}.light-green-text.text-accent-4{color:#64dd17}.lime{background-color:#cddc39}.lime-text{color:#cddc39}.lime.lighten-5{background-color:#f9fbe7}.lime-text.text-lighten-5{color:#f9fbe7}.lime.lighten-4{background-color:#f0f4c3}.lime-text.text-lighten-4{color:#f0f4c3}.lime.lighten-3{background-color:#e6ee9c}.lime-text.text-lighten-3{color:#e6ee9c}.lime.lighten-2{background-color:#dce775}.lime-text.text-lighten-2{color:#dce775}.lime.lighten-1{background-color:#d4e157}.lime-text.text-lighten-1{color:#d4e157}.lime.darken-1{background-color:#c0ca33}.lime-text.text-darken-1{color:#c0ca33}.lime.darken-2{background-color:#afb42b}.lime-text.text-darken-2{color:#afb42b}.lime.darken-3{background-color:#9e9d24}.lime-text.text-darken-3{color:#9e9d24}.lime.darken-4{background-color:#827717}.lime-text.text-darken-4{color:#827717}.lime.accent-1{background-color:#f4ff81}.lime-text.text-accent-1{color:#f4ff81}.lime.accent-2{background-color:#eeff41}.lime-text.text-accent-2{color:#eeff41}.lime.accent-3{background-color:#c6ff00}.lime-text.text-accent-3{color:#c6ff00}.lime.accent-4{background-color:#aeea00}.lime-text.text-accent-4{color:#aeea00}.yellow{background-color:#ffeb3b}.yellow-text{color:#ffeb3b}.yellow.lighten-5{background-color:#fffde7}.yellow-text.text-lighten-5{color:#fffde7}.yellow.lighten-4{background-color:#fff9c4}.yellow-text.text-lighten-4{color:#fff9c4}.yellow.lighten-3{background-color:#fff59d}.yellow-text.text-lighten-3{color:#fff59d}.yellow.lighten-2{background-color:#fff176}.yellow-text.text-lighten-2{color:#fff176}.yellow.lighten-1{background-color:#ffee58}.yellow-text.text-lighten-1{color:#ffee58}.yellow.darken-1{background-color:#fdd835}.yellow-text.text-darken-1{color:#fdd835}.yellow.darken-2{background-color:#fbc02d}.yellow-text.text-darken-2{color:#fbc02d}.yellow.darken-3{background-color:#f9a825}.yellow-text.text-darken-3{color:#f9a825}.yellow.darken-4{background-color:#f57f17}.yellow-text.text-darken-4{color:#f57f17}.yellow.accent-1{background-color:#ffff8d}.yellow-text.text-accent-1{color:#ffff8d}.yellow.accent-2{background-color:#ff0}.yellow-text.text-accent-2{color:#ff0}.yellow.accent-3{background-color:#ffea00}.yellow-text.text-accent-3{color:#ffea00}.yellow.accent-4{background-color:#ffd600}.yellow-text.text-accent-4{color:#ffd600}.amber{background-color:#ffc107}.amber-text{color:#ffc107}.amber.lighten-5{background-color:#fff8e1}.amber-text.text-lighten-5{color:#fff8e1}.amber.lighten-4{background-color:#ffecb3}.amber-text.text-lighten-4{color:#ffecb3}.amber.lighten-3{background-color:#ffe082}.amber-text.text-lighten-3{color:#ffe082}.amber.lighten-2{background-color:#ffd54f}.amber-text.text-lighten-2{color:#ffd54f}.amber.lighten-1{background-color:#ffca28}.amber-text.text-lighten-1{color:#ffca28}.amber.darken-1{background-color:#ffb300}.amber-text.text-darken-1{color:#ffb300}.amber.darken-2{background-color:#ffa000}.amber-text.text-darken-2{color:#ffa000}.amber.darken-3{background-color:#ff8f00}.amber-text.text-darken-3{color:#ff8f00}.amber.darken-4{background-color:#ff6f00}.amber-text.text-darken-4{color:#ff6f00}.amber.accent-1{background-color:#ffe57f}.amber-text.text-accent-1{color:#ffe57f}.amber.accent-2{background-color:#ffd740}.amber-text.text-accent-2{color:#ffd740}.amber.accent-3{background-color:#ffc400}.amber-text.text-accent-3{color:#ffc400}.amber.accent-4{background-color:#ffab00}.amber-text.text-accent-4{color:#ffab00}.orange{background-color:#ff9800}.orange-text{color:#ff9800}.orange.lighten-5{background-color:#fff3e0}.orange-text.text-lighten-5{color:#fff3e0}.orange.lighten-4{background-color:#ffe0b2}.orange-text.text-lighten-4{color:#ffe0b2}.orange.lighten-3{background-color:#ffcc80}.orange-text.text-lighten-3{color:#ffcc80}.orange.lighten-2{background-color:#ffb74d}.orange-text.text-lighten-2{color:#ffb74d}.orange.lighten-1{background-color:#ffa726}.orange-text.text-lighten-1{color:#ffa726}.orange.darken-1{background-color:#fb8c00}.orange-text.text-darken-1{color:#fb8c00}.orange.darken-2{background-color:#f57c00}.orange-text.text-darken-2{color:#f57c00}.orange.darken-3{background-color:#ef6c00}.orange-text.text-darken-3{color:#ef6c00}.orange.darken-4{background-color:#e65100}.orange-text.text-darken-4{color:#e65100}.orange.accent-1{background-color:#ffd180}.orange-text.text-accent-1{color:#ffd180}.orange.accent-2{background-color:#ffab40}.orange-text.text-accent-2{color:#ffab40}.orange.accent-3{background-color:#ff9100}.orange-text.text-accent-3{color:#ff9100}.orange.accent-4{background-color:#ff6d00}.orange-text.text-accent-4{color:#ff6d00}.deep-orange{background-color:#ff5722}.deep-orange-text{color:#ff5722}.deep-orange.lighten-5{background-color:#fbe9e7}.deep-orange-text.text-lighten-5{color:#fbe9e7}.deep-orange.lighten-4{background-color:#ffccbc}.deep-orange-text.text-lighten-4{color:#ffccbc}.deep-orange.lighten-3{background-color:#ffab91}.deep-orange-text.text-lighten-3{color:#ffab91}.deep-orange.lighten-2{background-color:#ff8a65}.deep-orange-text.text-lighten-2{color:#ff8a65}.deep-orange.lighten-1{background-color:#ff7043}.deep-orange-text.text-lighten-1{color:#ff7043}.deep-orange.darken-1{background-color:#f4511e}.deep-orange-text.text-darken-1{color:#f4511e}.deep-orange.darken-2{background-color:#e64a19}.deep-orange-text.text-darken-2{color:#e64a19}.deep-orange.darken-3{background-color:#d84315}.deep-orange-text.text-darken-3{color:#d84315}.deep-orange.darken-4{background-color:#bf360c}.deep-orange-text.text-darken-4{color:#bf360c}.deep-orange.accent-1{background-color:#ff9e80}.deep-orange-text.text-accent-1{color:#ff9e80}.deep-orange.accent-2{background-color:#ff6e40}.deep-orange-text.text-accent-2{color:#ff6e40}.deep-orange.accent-3{background-color:#ff3d00}.deep-orange-text.text-accent-3{color:#ff3d00}.deep-orange.accent-4{background-color:#dd2c00}.deep-orange-text.text-accent-4{color:#dd2c00}.brown{background-color:#795548}.brown-text{color:#795548}.brown.lighten-5{background-color:#efebe9}.brown-text.text-lighten-5{color:#efebe9}.brown.lighten-4{background-color:#d7ccc8}.brown-text.text-lighten-4{color:#d7ccc8}.brown.lighten-3{background-color:#bcaaa4}.brown-text.text-lighten-3{color:#bcaaa4}.brown.lighten-2{background-color:#a1887f}.brown-text.text-lighten-2{color:#a1887f}.brown.lighten-1{background-color:#8d6e63}.brown-text.text-lighten-1{color:#8d6e63}.brown.darken-1{background-color:#6d4c41}.brown-text.text-darken-1{color:#6d4c41}.brown.darken-2{background-color:#5d4037}.brown-text.text-darken-2{color:#5d4037}.brown.darken-3{background-color:#4e342e}.brown-text.text-darken-3{color:#4e342e}.brown.darken-4{background-color:#3e2723}.brown-text.text-darken-4{color:#3e2723}.blue-gray{background-color:#607d8b}.blue-gray-text{color:#607d8b}.blue-gray.lighten-5{background-color:#eceff1}.blue-gray-text.text-lighten-5{color:#eceff1}.blue-gray.lighten-4{background-color:#cfd8dc}.blue-gray-text.text-lighten-4{color:#cfd8dc}.blue-gray.lighten-3{background-color:#b0bec5}.blue-gray-text.text-lighten-3{color:#b0bec5}.blue-gray.lighten-2{background-color:#90a4ae}.blue-gray-text.text-lighten-2{color:#90a4ae}.blue-gray.lighten-1{background-color:#78909c}.blue-gray-text.text-lighten-1{color:#78909c}.blue-gray.darken-1{background-color:#546e7a}.blue-gray-text.text-darken-1{color:#546e7a}.blue-gray.darken-2{background-color:#455a64}.blue-gray-text.text-darken-2{color:#455a64}.blue-gray.darken-3{background-color:#37474f}.blue-gray-text.text-darken-3{color:#37474f}.blue-gray.darken-4{background-color:#263238}.blue-gray-text.text-darken-4{color:#263238}.gray{background-color:#9e9e9e}.gray-text{color:#9e9e9e}.gray.lighten-5{background-color:#fafafa}.gray-text.text-lighten-5{color:#fafafa}.gray.lighten-4{background-color:#f5f5f5}.gray-text.text-lighten-4{color:#f5f5f5}.gray.lighten-3{background-color:#eee}.gray-text.text-lighten-3{color:#eee}.gray.lighten-2{background-color:#e0e0e0}.gray-text.text-lighten-2{color:#e0e0e0}.gray.lighten-1{background-color:#bdbdbd}.gray-text.text-lighten-1{color:#bdbdbd}.gray.darken-1{background-color:#757575}.gray-text.text-darken-1{color:#757575}.gray.darken-2{background-color:#616161}.gray-text.text-darken-2{color:#616161}.gray.darken-3{background-color:#424242}.gray-text.text-darken-3{color:#424242}.gray.darken-4{background-color:#212121}.gray-text.text-darken-4{color:#212121}.shades.black{background-color:#000}.shades-text.text-black{color:#000}.shades.white{background-color:#fff}.shades-text.text-white{color:#fff}.shades.transparent{background-color:rgba(0,0,0,0)}.shades-text.text-transparent{color:rgba(0,0,0,0)}.mud-ripple{--mud-ripple-offset-x: 0;--mud-ripple-offset-y: 0;position:relative;overflow:hidden}.mud-ripple:after{content:"";display:block;position:absolute;width:100%;height:100%;top:var(--mud-ripple-offset-y);left:var(--mud-ripple-offset-x);pointer-events:none;background-image:radial-gradient(circle, var(--mud-ripple-color) 10%, transparent 10.01%);background-repeat:no-repeat;background-position:50%;transform:scale(20, 20);opacity:0;transition:transform .6s,opacity 1s}.mud-ripple:active:after{transform:scale(0, 0);opacity:var(--mud-ripple-opacity);transition:0s}.mud-ripple:has(.mud-ripple:active):after{opacity:0}.mud-ripple-icon:after,.mud-ripple-checkbox:after,.mud-ripple-switch:after,.mud-ripple-radio:after{transform:scale(14, 14)}.mud-ripple-switch{position:absolute}.mud-rtl{direction:rtl !important}.mud-ltr{direction:ltr !important}.mud-application-layout-rtl .mud-flip-x-rtl{transform:scaleX(-1)} diff --git a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css.br b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css.br index 36054074..cf48c3c2 100644 Binary files a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css.br and b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css.br differ diff --git a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css.gz b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css.gz index f7d20a4d..d8459f27 100644 Binary files a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css.gz and b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.css.gz differ diff --git a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js index 375c7481..4ded15e1 100755 --- a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js +++ b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js @@ -1,42 +1,85 @@ -class MudInput{resetValue(id){const input=document.getElementById(id);if(input){input.value='';}}} +class MudPointerEventsNone{constructor(){this.dotnet=null;this.logger=(msg,...args)=>{};this.pointerDownHandlerRef=null;this.pointerUpHandlerRef=null;this.pointerDownMap=new Map();this.pointerUpMap=new Map();} +listenForPointerEvents(dotNetReference,elementId,options){if(!options){this.logger("options object is required but was not provided");return;} +if(options.enableLogging){this.logger=(msg,...args)=>console.log("[MudBlazor | PointerEventsNone]",msg,...args);}else{this.logger=(msg,...args)=>{};} +this.logger("Called listenForPointerEvents",{dotNetReference,elementId,options});if(!dotNetReference){this.logger("dotNetReference is required but was not provided");return;} +if(!elementId){this.logger("elementId is required but was not provided");return;} +if(!options.subscribeDown&&!options.subscribeUp){this.logger("No subscriptions added: both subscribeDown and subscribeUp are false");return;} +if(!this.dotnet){this.dotnet=dotNetReference;} +if(options.subscribeDown){this.logger("Subscribing to 'pointerdown' for element:",elementId);this.pointerDownMap.set(elementId,options);if(!this.pointerDownHandlerRef){this.logger("Registering global 'pointerdown' event listener");this.pointerDownHandlerRef=this.pointerDownHandler.bind(this);document.addEventListener("pointerdown",this.pointerDownHandlerRef,false);}} +if(options.subscribeUp){this.logger("Subscribing to 'pointerup' events for element:",elementId);this.pointerUpMap.set(elementId,options);if(!this.pointerUpHandlerRef){this.logger("Registering global 'pointerup' event listener");this.pointerUpHandlerRef=this.pointerUpHandler.bind(this);document.addEventListener("pointerup",this.pointerUpHandlerRef,false);}}} +pointerDownHandler(event){this._handlePointerEvent(event,this.pointerDownMap,"RaiseOnPointerDown");} +pointerUpHandler(event){this._handlePointerEvent(event,this.pointerUpMap,"RaiseOnPointerUp");} +_handlePointerEvent(event,map,raiseMethod){if(map.size===0){this.logger("No elements registered for",raiseMethod);return;} +const elements=[];for(const id of map.keys()){const element=document.getElementById(id);if(element){elements.push(element);}else{this.logger("Element",id,"not found in DOM");}} +if(elements.length===0){this.logger("None of the registered elements were found in the DOM for",raiseMethod);return;} +elements.forEach(x=>x.style.pointerEvents="auto");const elementsFromPoint=document.elementsFromPoint(event.clientX,event.clientY);elements.forEach(x=>x.style.pointerEvents="none");const matchingIds=[];for(const element of elementsFromPoint){if(!element.id||!map.has(element.id)){break;} +matchingIds.push(element.id);} +if(matchingIds.length===0){this.logger("No matching registered elements found under pointer for",raiseMethod);return;} +this.logger("Raising",raiseMethod,"for matching element(s):",matchingIds);this.dotnet.invokeMethodAsync(raiseMethod,matchingIds);} +cancelListener(elementId){if(!elementId){this.logger("cancelListener called with invalid elementId");return;} +const hadDown=this.pointerDownMap.delete(elementId);const hadUp=this.pointerUpMap.delete(elementId);if(hadDown||hadUp){this.logger("Cancelled listener for element",elementId);}else{this.logger("No active listener found for element",elementId);} +if(this.pointerDownMap.size===0&&this.pointerDownHandlerRef){this.logger("No more elements listening for 'pointerdown' — removing global event listener");document.removeEventListener("pointerdown",this.pointerDownHandlerRef);this.pointerDownHandlerRef=null;} +if(this.pointerUpMap.size===0&&this.pointerUpHandlerRef){this.logger("No more elements listening for 'pointerup' — removing global event listener");document.removeEventListener("pointerup",this.pointerUpHandlerRef);this.pointerUpHandlerRef=null;}} +dispose(){if(!this.dotnet&&!this.pointerDownHandlerRef&&!this.pointerUpHandlerRef){this.logger("dispose() called but instance was already cleaned up");return;} +this.logger("Disposing");if(this.pointerDownHandlerRef){this.logger("Removing global 'pointerdown' event listener");document.removeEventListener("pointerdown",this.pointerDownHandlerRef);this.pointerDownHandlerRef=null;} +if(this.pointerUpHandlerRef){this.logger("Removing global 'pointerup' event listener");document.removeEventListener("pointerup",this.pointerUpHandlerRef);this.pointerUpHandlerRef=null;} +const downCount=this.pointerDownMap.size;const upCount=this.pointerUpMap.size;if(downCount>0){this.logger("Clearing",downCount,"element(s) from pointerDownMap");} +if(upCount>0){this.logger("Clearing",upCount,"element(s) from pointerUpMap");} +this.pointerDownMap.clear();this.pointerUpMap.clear();this.dotnet=null;}} +window.mudPointerEventsNone=new MudPointerEventsNone();window.mudTimePicker={initPointerEvents:(clock,dotNetHelper)=>{let isPointerDown=false;const startHandler=(event)=>{if(event.button!==0){return;} +isPointerDown=true;event.target.releasePointerCapture(event.pointerId);if(event.target.classList.contains('mud-hour')||event.target.classList.contains('mud-minute')){let attributeValue=event.target.getAttribute('data-stick-value');let stickValue=attributeValue?parseInt(attributeValue):-1;dotNetHelper.invokeMethodAsync('SelectTimeFromStick',stickValue,false);} +event.preventDefault();};const endHandler=(event)=>{if(event.button!==0){return;} +isPointerDown=false;if(event.target.classList.contains('mud-hour')||event.target.classList.contains('mud-minute')){let attributeValue=event.target.getAttribute('data-stick-value');let stickValue=attributeValue?parseInt(attributeValue):-1;dotNetHelper.invokeMethodAsync('OnStickClick',stickValue);} +event.preventDefault();};const moveHandler=(event)=>{if(!isPointerDown||(!event.target.classList.contains('mud-hour')&&!event.target.classList.contains('mud-minute'))){return;} +let attributeValue=event.target.getAttribute('data-stick-value');let stickValue=attributeValue?parseInt(attributeValue):-1;dotNetHelper.invokeMethodAsync('SelectTimeFromStick',stickValue,true);event.preventDefault();};clock.addEventListener('pointerdown',startHandler);clock.addEventListener('pointerup',endHandler);clock.addEventListener('pointercancel',endHandler);clock.addEventListener('pointerover',moveHandler);clock.destroy=()=>{clock.removeEventListener('pointerdown',startHandler);clock.removeEventListener('pointerup',endHandler);clock.removeEventListener('pointercancel',endHandler);clock.removeEventListener('pointerover',moveHandler);};},destroyPointerEvents:(container)=>{if(container==null){return;} +if(typeof container.destroy==='function'){container.destroy();}}};class MudResizeObserverFactory{constructor(){this._maps={};} +connect(id,dotNetRef,elements,elementIds,options){var existingEntry=this._maps[id];if(!existingEntry){var observer=new MudResizeObserver(dotNetRef,options);this._maps[id]=observer;} +var result=this._maps[id].connect(elements,elementIds);return result;} +disconnect(id,element){var existingEntry=this._maps[id];if(existingEntry){existingEntry.disconnect(element);}} +cancelListener(id){var existingEntry=this._maps[id];if(existingEntry){existingEntry.cancelListener();delete this._maps[id];}}} +class MudResizeObserver{constructor(dotNetRef,options){this.logger=options.enableLogging?console.log:(message)=>{};this.options=options;this._dotNetRef=dotNetRef +var delay=(this.options||{}).reportRate||200;this.throttleResizeHandlerId=-1;var observervedElements=[];this._observervedElements=observervedElements;this.logger('[MudBlazor | ResizeObserver] Observer initialized');this._resizeObserver=new ResizeObserver(entries=>{var changes=[];this.logger('[MudBlazor | ResizeObserver] changes detected');for(let entry of entries){var target=entry.target;var affectedObservedElement=observervedElements.find((x)=>x.element==target);if(affectedObservedElement){var size=entry.target.getBoundingClientRect();if(affectedObservedElement.isInitialized==true){changes.push({id:affectedObservedElement.id,size:size});} +else{affectedObservedElement.isInitialized=true;}}} +if(changes.length>0){if(this.throttleResizeHandlerId>=0){clearTimeout(this.throttleResizeHandlerId);} +this.throttleResizeHandlerId=window.setTimeout(this.resizeHandler.bind(this,changes),delay);}});} +resizeHandler(changes){try{this.logger("[MudBlazor | ResizeObserver] OnSizeChanged handler invoked");this._dotNetRef.invokeMethodAsync("OnSizeChanged",changes);}catch(error){this.logger("[MudBlazor | ResizeObserver] Error in OnSizeChanged handler:",{error});}} +connect(elements,ids){var result=[];this.logger('[MudBlazor | ResizeObserver] Start observing elements...');for(var i=0;ix.id==elementId);if(affectedObservedElement){var element=affectedObservedElement.element;this._resizeObserver.unobserve(element);this.logger('[MudBlazor | ResizeObserver] Element found. Ubobserving size changes of element',{element});var index=this._observervedElements.indexOf(affectedObservedElement);this._observervedElements.splice(index,1);}} +cancelListener(){this.logger('[MudBlazor | ResizeObserver] Closing ResizeObserver. Detaching all observed elements');this._resizeObserver.disconnect();this._dotNetRef=undefined;}} +window.mudResizeObserver=new MudResizeObserverFactory();class MudInput{resetValue(id){const input=document.getElementById(id);if(input){input.value='';}}} window.mudInput=new MudInput();const darkThemeMediaQuery=window.matchMedia("(prefers-color-scheme: dark)");window.darkModeChange=()=>{return darkThemeMediaQuery.matches;};function darkModeChangeListener(e){dotNetHelperTheme.invokeMethodAsync('SystemDarkModeChangedAsync',e.matches);} function watchDarkThemeMedia(dotNetHelper){dotNetHelperTheme=dotNetHelper;darkThemeMediaQuery.addEventListener('change',darkModeChangeListener);} function stopWatchingDarkThemeMedia(){darkThemeMediaQuery.removeEventListener('change',darkModeChangeListener);} -class MudThrottledEventManager{constructor(){this.mapper={};} -subscribe(eventName,elementId,projection,throotleInterval,key,properties,dotnetReference){const handlerRef=this.throttleEventHandler.bind(this,key);let elem=document.getElementById(elementId);if(elem){elem.addEventListener(eventName,handlerRef,false);let projector=null;if(projection){const parts=projection.split('.');let functionPointer=window;let functionReferenceFound=true;if(parts.length==0||parts.length==1){functionPointer=functionPointer[projection];} -else{for(let i=0;i0?this.throttleEventHandler.bind(this,key):this.eventHandler.bind(this,key);document.addEventListener(eventName,handlerRef,false);this.mapper[key]={eventName:eventName,handler:handlerRef,delay:throotleInterval,timerId:-1,reference:dotnetReference,elementId:document,properties:properties,projection:null,};} -throttleEventHandler(key,event){const entry=this.mapper[key];if(!entry){return;} -clearTimeout(entry.timerId);entry.timerId=window.setTimeout(this.eventHandler.bind(this,key,event),entry.delay);} -eventHandler(key,event){const entry=this.mapper[key];if(!entry){return;} -var elem=document.getElementById(entry.elementId);if(elem!=event.srcElement&&entry.elementId!=document){return;} -const eventEntry={};for(var i=0;i({identifier:touchPoint.identifier,screenX:touchPoint.screenX,screenY:touchPoint.screenY,clientX:touchPoint.clientX,clientY:touchPoint.clientY,pageX:touchPoint.pageX,pageY:touchPoint.pageY,}));} -else{eventEntry[propertyName]=propertyValue;}} -if(entry.projection){if(typeof entry.projection==="function"){entry.projection.apply(null,[eventEntry,event]);}} -entry.reference.invokeMethodAsync('OnEventOccur',key,JSON.stringify(eventEntry));} -unsubscribe(key){const entry=this.mapper[key];if(!entry){return;} -entry.reference=null;if(document==entry.elementId){document.removeEventListener(entry.eventName,entry.handler,false);}else{const elem=document.getElementById(entry.elementId);if(elem){elem.removeEventListener(entry.eventName,entry.handler,false);}} -delete this.mapper[key];}};window.mudThrottledEventManager=new MudThrottledEventManager();window.mudEventProjections={correctOffset:function(eventEntry,event){var target=event.target.getBoundingClientRect();eventEntry.offsetX=event.clientX-target.x;eventEntry.offsetY=event.clientY-target.y;}};window.getTabbableElements=(element)=>{return element.querySelectorAll("a[href]:not([tabindex='-1']),"+"area[href]:not([tabindex='-1']),"+"button:not([disabled]):not([tabindex='-1']),"+"input:not([disabled]):not([tabindex='-1']):not([type='hidden']),"+"select:not([disabled]):not([tabindex='-1']),"+"textarea:not([disabled]):not([tabindex='-1']),"+"iframe:not([tabindex='-1']),"+"details:not([tabindex='-1']),"+"[tabindex]:not([tabindex='-1']),"+"[contentEditable=true]:not([tabindex='-1'])");};window.serializeParameter=(data,spec)=>{if(typeof data=="undefined"||data===null){return null;} -if(typeof data==="number"||typeof data==="string"||typeof data=="boolean"){return data;} -let res=(Array.isArray(data))?[]:{};if(!spec){spec="*";} -for(let i in data){let currentMember=data[i];if(typeof currentMember==='function'||currentMember===null){continue;} -let currentMemberSpec;if(spec!="*"){currentMemberSpec=Array.isArray(data)?spec:spec[i];if(!currentMemberSpec){continue;}}else{currentMemberSpec="*"} -if(typeof currentMember==='object'){if(Array.isArray(currentMember)||currentMember.length){res[i]=[];for(let j=0;j{if(svgElement==null)return null;const bbox=svgElement.getBBox();return{x:bbox.x,y:bbox.y,width:bbox.width,height:bbox.height};};window.mudObserveElementSize=(dotNetReference,element,functionName='OnElementSizeChanged',debounceMillis=200)=>{if(!element)return;let lastNotifiedTime=0;let scheduledCall=null;const throttledNotify=(width,height)=>{const timestamp=Date.now();const timeSinceLast=timestamp-lastNotifiedTime;if(timeSinceLast>=debounceMillis){lastNotifiedTime=timestamp;try{dotNetReference.invokeMethodAsync(functionName,{width,height,timestamp});} -catch(error){this.logger("[MudBlazor] Error in mudObserveElementSize:",{error});}}else{if(scheduledCall!==null){clearTimeout(scheduledCall);} -scheduledCall=setTimeout(()=>{lastNotifiedTime=Date.now();scheduledCall=null;try{dotNetReference.invokeMethodAsync(functionName,{width,height,timestamp});} -catch(error){this.logger("[MudBlazor] Error in mudObserveElementSize:",{error});}},debounceMillis-timeSinceLast);}};const resizeObserver=new ResizeObserver(entries=>{if(element.isConnected===false){return;} -let width=element.clientWidth;let height=element.clientHeight;for(const entry of entries){width=entry.contentRect.width;height=entry.contentRect.height;} -width=Math.floor(width);height=Math.floor(height);throttledNotify(width,height);});resizeObserver.observe(element);let mutationObserver=null;const parent=element.parentNode;if(parent){mutationObserver=new MutationObserver(mutations=>{for(const mutation of mutations){for(const removedNode of mutation.removedNodes){if(removedNode===element){cleanup();}}}});mutationObserver.observe(parent,{childList:true});} -function cleanup(){resizeObserver.disconnect();if(mutationObserver){mutationObserver.disconnect();} -if(scheduledCall!==null){clearTimeout(scheduledCall);}} -return{width:element.clientWidth,height:element.clientHeight};};function setRippleOffset(event,target){const rect=target.getBoundingClientRect();const x=event.clientX-rect.left-rect.width/2;const y=event.clientY-rect.top-rect.height/2;target.style.setProperty("--mud-ripple-offset-x",`${x}px`);target.style.setProperty("--mud-ripple-offset-y",`${y}px`);} -document.addEventListener("click",function(event){const target=event.target.closest(".mud-ripple");if(target){setRippleOffset(event,target);}});class MudJsEventFactory{connect(dotNetRef,elementId,options){if(!elementId) +window.mudInputAutoGrow={initAutoGrow:(elem,maxLines)=>{const compStyle=getComputedStyle(elem);const lineHeight=parseFloat(compStyle.getPropertyValue('line-height'));const paddingTop=parseFloat(compStyle.getPropertyValue('padding-top'));let maxHeight=0;elem.updateParameters=function(newMaxLines){if(newMaxLines>0){maxHeight=lineHeight*newMaxLines+paddingTop;}else{maxHeight=0;}} +elem.adjustAutoGrowHeight=function(didReflow=false){const scrollTops=[];let curElem=elem;while(curElem&&curElem.parentNode&&curElem.parentNode instanceof Element){if(curElem.parentNode.scrollTop){scrollTops.push([curElem.parentNode,curElem.parentNode.scrollTop]);} +curElem=curElem.parentNode;} +elem.style.height=0;if(didReflow){elem.style.textAlign=null;} +let minHeight=lineHeight*elem.rows+paddingTop;let newHeight=Math.max(minHeight,elem.scrollHeight);let initialOverflowY=elem.style.overflowY;if(maxHeight>0&&newHeight>maxHeight){elem.style.overflowY='auto';newHeight=maxHeight;}else{elem.style.overflowY='hidden';} +elem.style.height=newHeight+"px";scrollTops.forEach(([node,scrollTop])=>{node.style.scrollBehavior='auto';node.scrollTop=scrollTop;node.style.scrollBehavior=null;});if(!didReflow&&initialOverflowY!==elem.style.overflowY&&elem.style.overflowY==='hidden'){elem.style.textAlign='end';elem.adjustAutoGrowHeight(true);}} +elem.restoreToInitialState=function(){elem.removeEventListener('input',elem.adjustAutoGrowHeight);elem.style.overflowY=null;elem.style.height=null;} +elem.addEventListener('input',elem.adjustAutoGrowHeight);window.addEventListener('resize',elem.adjustAutoGrowHeight);elem.updateParameters(maxLines);elem.adjustAutoGrowHeight();},adjustHeight:(elem)=>{if(typeof elem.adjustAutoGrowHeight==='function'){elem.adjustAutoGrowHeight();}},updateParams:(elem,maxLines)=>{if(typeof elem.updateParameters==='function'){elem.updateParameters(maxLines);} +if(typeof elem.adjustAutoGrowHeight==='function'){elem.adjustAutoGrowHeight();}},destroy:(elem)=>{if(elem==null){return;} +window.removeEventListener('resize',elem.adjustAutoGrowHeight);if(typeof elem.restoreToInitialState==='function'){elem.restoreToInitialState();}}};function setRippleOffset(event,target){const rect=target.getBoundingClientRect();const x=event.clientX-rect.left-rect.width/2;const y=event.clientY-rect.top-rect.height/2;target.style.setProperty("--mud-ripple-offset-x",`${x}px`);target.style.setProperty("--mud-ripple-offset-y",`${y}px`);} +document.addEventListener("click",function(event){const target=event.target.closest(".mud-ripple");if(target){setRippleOffset(event,target);}});class MudScrollManager{constructor(){this._lockCount=0;} +scrollToYear(elementId,offset){let element=document.getElementById(elementId);if(element){element.parentNode.scrollTop=element.offsetTop-element.parentNode.offsetTop-element.scrollHeight*3;}} +scrollToListItem(elementId){let element=document.getElementById(elementId);if(element){let parent=element.parentElement;if(parent){parent.scrollTop=element.offsetTop;}}} +scrollTo(selector,left,top,behavior){let element=document.querySelector(selector)||document.documentElement;element.scrollTo({left,top,behavior});} +scrollIntoView(selector,behavior){let element=document.querySelector(selector)||document.documentElement;if(element) +element.scrollIntoView({behavior,block:'center',inline:'start'});} +scrollToBottom(selector,behavior){let element=document.querySelector(selector);if(element){element.scrollTo({top:element.scrollHeight,behavior:behavior});}else{window.scrollTo({top:document.body.scrollHeight,behavior:behavior});}} +lockScroll(selector,lockclass){if(this._lockCount===0){const element=document.querySelector(selector)||document.body;const hasScrollBar=window.innerWidth>document.body.clientWidth;const classToAdd=hasScrollBar?lockclass:lockclass+"-no-padding";element.classList.add(classToAdd);} +this._lockCount++;} +unlockScroll(selector,lockclass){this._lockCount=Math.max(0,this._lockCount-1);if(this._lockCount===0){const element=document.querySelector(selector)||document.body;element.classList.remove(lockclass);element.classList.remove(lockclass+"-no-padding");}} +scrollToVirtualizedItem(containerId,itemIndex,itemHeight,targetItemId,behaviorString){const container=document.getElementById(containerId);if(!container){console.warn(`ScrollManager.scrollToVirtualizedItem:Container with id'${containerId}'not found.`);return;} +const isScrollable=container.scrollHeight>container.clientHeight||container.scrollWidth>container.clientWidth;const actualContainer=(container===document.documentElement||container===document.body)&&!isScrollable?window:container;requestAnimationFrame(()=>{if(actualContainer===window){actualContainer.scrollTo(0,itemIndex*itemHeight);}else{actualContainer.scrollTop=itemIndex*itemHeight;} +requestAnimationFrame(()=>{const targetElement=document.getElementById(targetItemId);if(targetElement){let scrollBehavior=behaviorString==='smooth'?'smooth':'auto';targetElement.scrollIntoView({behavior:scrollBehavior,block:'nearest',inline:'nearest'});}});});}};window.mudScrollManager=new MudScrollManager();class MudWindow{copyToClipboard(text){navigator.clipboard.writeText(text);} +changeCssById(id,css){var element=document.getElementById(id);if(element){element.className=css;}} +updateStyleProperty(elementId,propertyName,value){const element=document.getElementById(elementId);if(element){element.style.setProperty(propertyName,value);}} +changeGlobalCssVariable(name,newValue){document.documentElement.style.setProperty(name,newValue);} +open(args){window.open(args);}} +window.mudWindow=new MudWindow();class MudJsEventFactory{connect(dotNetRef,elementId,options){if(!elementId) throw"[MudBlazor | JsEvent] elementId: expected element id!";var element=document.getElementById(elementId);if(!element) throw"[MudBlazor | JsEvent] no element found for id: "+elementId;if(!element.mudJsEvent) element.mudJsEvent=new MudJsEvent(dotNetRef,options);element.mudJsEvent.connect(element);} @@ -80,7 +123,15 @@ onpaste(self,e){const invoke=self._subscribedEvents["paste"];if(invoke){e.preven const text=clipboardData.getData('text/plain');self._dotNetRef.invokeMethodAsync('OnPaste',text);}} onselect(self,e){const invoke=self._subscribedEvents["select"];if(invoke){const start=e.target.selectionStart;const end=e.target.selectionEnd;if(start===end) return;self._dotNetRef.invokeMethodAsync('OnSelect',start,end);}}} -window.mudpopoverHelper={mainContainerClass:null,overflowPadding:24,flipMargin:0,debounce:function(func,wait){let timeout;return function executedFunction(...args){const later=()=>{clearTimeout(timeout);func(...args);};clearTimeout(timeout);timeout=setTimeout(later,wait);};},basePopoverZIndex:parseInt(getComputedStyle(document.documentElement).getPropertyValue('--mud-zindex-popover'))||1200,baseTooltipZIndex:parseInt(getComputedStyle(document.documentElement).getPropertyValue('--mud-zindex-tooltip'))||1600,flipClassReplacements:{'top':{'mud-popover-top-left':'mud-popover-bottom-left','mud-popover-top-center':'mud-popover-bottom-center','mud-popover-top-right':'mud-popover-bottom-right','mud-popover-anchor-bottom-center':'mud-popover-anchor-top-center','mud-popover-anchor-bottom-left':'mud-popover-anchor-top-left','mud-popover-anchor-bottom-right':'mud-popover-anchor-top-right',},'left':{'mud-popover-top-left':'mud-popover-top-right','mud-popover-center-left':'mud-popover-center-right','mud-popover-bottom-left':'mud-popover-bottom-right','mud-popover-anchor-center-right':'mud-popover-anchor-center-left','mud-popover-anchor-bottom-right':'mud-popover-anchor-bottom-left','mud-popover-anchor-top-right':'mud-popover-anchor-top-left',},'right':{'mud-popover-top-right':'mud-popover-top-left','mud-popover-center-right':'mud-popover-center-left','mud-popover-bottom-right':'mud-popover-bottom-left','mud-popover-anchor-center-left':'mud-popover-anchor-center-right','mud-popover-anchor-bottom-left':'mud-popover-anchor-bottom-right','mud-popover-anchor-top-left':'mud-popover-anchor-top-right',},'bottom':{'mud-popover-bottom-left':'mud-popover-top-left','mud-popover-bottom-center':'mud-popover-top-center','mud-popover-bottom-right':'mud-popover-top-right','mud-popover-anchor-top-center':'mud-popover-anchor-bottom-center','mud-popover-anchor-top-left':'mud-popover-anchor-bottom-left','mud-popover-anchor-top-right':'mud-popover-anchor-bottom-right',},'top-and-left':{'mud-popover-top-left':'mud-popover-bottom-right','mud-popover-anchor-bottom-right':'mud-popover-anchor-top-left','mud-popover-anchor-bottom-center':'mud-popover-anchor-top-center','mud-popover-anchor-bottom-left':'mud-popover-anchor-top-right','mud-popover-anchor-top-right':'mud-popover-anchor-bottom-left','mud-popover-anchor-top-center':'mud-popover-anchor-bottom-center','mud-popover-anchor-top-left':'mud-popover-anchor-bottom-right',},'top-and-right':{'mud-popover-top-right':'mud-popover-bottom-left','mud-popover-anchor-bottom-left':'mud-popover-anchor-top-right','mud-popover-anchor-bottom-center':'mud-popover-anchor-top-center','mud-popover-anchor-bottom-right':'mud-popover-anchor-top-left','mud-popover-anchor-top-left':'mud-popover-anchor-bottom-right','mud-popover-anchor-top-center':'mud-popover-anchor-bottom-center','mud-popover-anchor-top-right':'mud-popover-anchor-bottom-left',},'bottom-and-left':{'mud-popover-bottom-left':'mud-popover-top-right','mud-popover-anchor-top-right':'mud-popover-anchor-bottom-left','mud-popover-anchor-top-center':'mud-popover-anchor-bottom-center','mud-popover-anchor-top-left':'mud-popover-anchor-bottom-right','mud-popover-anchor-bottom-right':'mud-popover-anchor-top-left','mud-popover-anchor-bottom-center':'mud-popover-anchor-top-center','mud-popover-anchor-bottom-left':'mud-popover-anchor-top-right',},'bottom-and-right':{'mud-popover-bottom-right':'mud-popover-top-left','mud-popover-anchor-top-left':'mud-popover-anchor-bottom-right','mud-popover-anchor-top-center':'mud-popover-anchor-bottom-center','mud-popover-anchor-top-right':'mud-popover-anchor-bottom-left','mud-popover-anchor-bottom-left':'mud-popover-anchor-top-right','mud-popover-anchor-bottom-center':'mud-popover-anchor-top-center','mud-popover-anchor-bottom-right':'mud-popover-anchor-top-left',},},calculatePopoverPosition:function(list,boundingRect,selfRect){let top=boundingRect.top;let left=boundingRect.left;const isPositionOverride=list.indexOf('mud-popover-position-override')>=0;let offsetX=0;let offsetY=0;if(list.indexOf('mud-popover-top-left')>=0){offsetX=0;offsetY=0;}else if(list.indexOf('mud-popover-top-center')>=0){offsetX=-selfRect.width/2;offsetY=0;}else if(list.indexOf('mud-popover-top-right')>=0){offsetX=-selfRect.width;offsetY=0;} +class MudFileUpload{openFilePicker(id){const element=document.getElementById(id);if(!element){return;} +try{element.showPicker();}catch(error){element.click();}}} +window.mudFileUpload=new MudFileUpload();window.mudDragAndDrop={initDropZone:(id)=>{const elem=document.getElementById(id);elem.addEventListener('dragover',()=>event.preventDefault());elem.addEventListener('dragstart',()=>event.dataTransfer.setData('',event.target.id));},makeDropZonesNotRelative:()=>{var firstDropItems=Array.from(document.getElementsByClassName('mud-drop-item')).filter(x=>x.getAttribute('index')=="-1");for(let dropItem of firstDropItems){dropItem.style.position='static';} +const dropZones=document.getElementsByClassName('mud-drop-zone');for(let dropZone of dropZones){dropZone.style.position='unset';}},getDropZoneIdentifierOnPosition:(x,y)=>{const elems=document.elementsFromPoint(x,y);const dropZones=elems.filter(e=>e.classList.contains('mud-drop-zone')) +const dropZone=dropZones[0];if(dropZone){return dropZone.getAttribute('identifier')||"";} +return"";},getDropIndexOnPosition:(x,y,id)=>{const elems=document.elementsFromPoint(x,y);const dropItems=elems.filter(e=>e.classList.contains('mud-drop-item')&&e.id!=id) +const dropItem=dropItems[0];if(dropItem){return dropItem.getAttribute('index')||"";} +return"";},makeDropZonesRelative:()=>{const dropZones=document.getElementsByClassName('mud-drop-zone');for(let dropZone of dropZones){dropZone.style.position='relative';} +var firstDropItems=Array.from(document.getElementsByClassName('mud-drop-item')).filter(x=>x.getAttribute('index')=="-1");for(let dropItem of firstDropItems){dropItem.style.position='relative';}},moveItemByDifference:(id,dx,dy)=>{const elem=document.getElementById(id);var tx=(parseFloat(elem.getAttribute('data-x'))||0)+dx;var ty=(parseFloat(elem.getAttribute('data-y'))||0)+dy;elem.style.webkitTransform=elem.style.transform='translate3d('+tx+'px, '+ty+'px, 10px)';elem.setAttribute('data-x',tx);elem.setAttribute('data-y',ty);},resetItem:(id)=>{const elem=document.getElementById(id);if(elem){elem.style.webkitTransform=elem.style.transform='';elem.setAttribute('data-x',0);elem.setAttribute('data-y',0);}}};window.mudpopoverHelper={mainContainerClass:null,overflowPadding:24,flipMargin:0,debounce:function(func,wait){let timeout;return function executedFunction(...args){const later=()=>{clearTimeout(timeout);func(...args);};clearTimeout(timeout);timeout=setTimeout(later,wait);};},basePopoverZIndex:parseInt(getComputedStyle(document.documentElement).getPropertyValue('--mud-zindex-popover'))||1200,baseTooltipZIndex:parseInt(getComputedStyle(document.documentElement).getPropertyValue('--mud-zindex-tooltip'))||1600,flipClassReplacements:{'top':{'mud-popover-top-left':'mud-popover-bottom-left','mud-popover-top-center':'mud-popover-bottom-center','mud-popover-top-right':'mud-popover-bottom-right','mud-popover-anchor-bottom-center':'mud-popover-anchor-top-center','mud-popover-anchor-bottom-left':'mud-popover-anchor-top-left','mud-popover-anchor-bottom-right':'mud-popover-anchor-top-right',},'left':{'mud-popover-top-left':'mud-popover-top-right','mud-popover-center-left':'mud-popover-center-right','mud-popover-bottom-left':'mud-popover-bottom-right','mud-popover-anchor-center-right':'mud-popover-anchor-center-left','mud-popover-anchor-bottom-right':'mud-popover-anchor-bottom-left','mud-popover-anchor-top-right':'mud-popover-anchor-top-left',},'right':{'mud-popover-top-right':'mud-popover-top-left','mud-popover-center-right':'mud-popover-center-left','mud-popover-bottom-right':'mud-popover-bottom-left','mud-popover-anchor-center-left':'mud-popover-anchor-center-right','mud-popover-anchor-bottom-left':'mud-popover-anchor-bottom-right','mud-popover-anchor-top-left':'mud-popover-anchor-top-right',},'bottom':{'mud-popover-bottom-left':'mud-popover-top-left','mud-popover-bottom-center':'mud-popover-top-center','mud-popover-bottom-right':'mud-popover-top-right','mud-popover-anchor-top-center':'mud-popover-anchor-bottom-center','mud-popover-anchor-top-left':'mud-popover-anchor-bottom-left','mud-popover-anchor-top-right':'mud-popover-anchor-bottom-right',},'top-and-left':{'mud-popover-top-left':'mud-popover-bottom-right','mud-popover-anchor-bottom-right':'mud-popover-anchor-top-left','mud-popover-anchor-bottom-center':'mud-popover-anchor-top-center','mud-popover-anchor-bottom-left':'mud-popover-anchor-top-right','mud-popover-anchor-top-right':'mud-popover-anchor-bottom-left','mud-popover-anchor-top-center':'mud-popover-anchor-bottom-center','mud-popover-anchor-top-left':'mud-popover-anchor-bottom-right',},'top-and-right':{'mud-popover-top-right':'mud-popover-bottom-left','mud-popover-anchor-bottom-left':'mud-popover-anchor-top-right','mud-popover-anchor-bottom-center':'mud-popover-anchor-top-center','mud-popover-anchor-bottom-right':'mud-popover-anchor-top-left','mud-popover-anchor-top-left':'mud-popover-anchor-bottom-right','mud-popover-anchor-top-center':'mud-popover-anchor-bottom-center','mud-popover-anchor-top-right':'mud-popover-anchor-bottom-left',},'bottom-and-left':{'mud-popover-bottom-left':'mud-popover-top-right','mud-popover-anchor-top-right':'mud-popover-anchor-bottom-left','mud-popover-anchor-top-center':'mud-popover-anchor-bottom-center','mud-popover-anchor-top-left':'mud-popover-anchor-bottom-right','mud-popover-anchor-bottom-right':'mud-popover-anchor-top-left','mud-popover-anchor-bottom-center':'mud-popover-anchor-top-center','mud-popover-anchor-bottom-left':'mud-popover-anchor-top-right',},'bottom-and-right':{'mud-popover-bottom-right':'mud-popover-top-left','mud-popover-anchor-top-left':'mud-popover-anchor-bottom-right','mud-popover-anchor-top-center':'mud-popover-anchor-bottom-center','mud-popover-anchor-top-right':'mud-popover-anchor-bottom-left','mud-popover-anchor-bottom-left':'mud-popover-anchor-top-right','mud-popover-anchor-bottom-center':'mud-popover-anchor-top-center','mud-popover-anchor-bottom-right':'mud-popover-anchor-top-left',},},calculatePopoverPosition:function(list,boundingRect,selfRect){let top=boundingRect.top;let left=boundingRect.left;const isPositionOverride=list.indexOf('mud-popover-position-override')>=0;let offsetX=0;let offsetY=0;if(list.indexOf('mud-popover-top-left')>=0){offsetX=0;offsetY=0;}else if(list.indexOf('mud-popover-top-center')>=0){offsetX=-selfRect.width/2;offsetY=0;}else if(list.indexOf('mud-popover-top-right')>=0){offsetX=-selfRect.width;offsetY=0;} else if(list.indexOf('mud-popover-center-left')>=0){offsetX=0;offsetY=-selfRect.height/2;}else if(list.indexOf('mud-popover-center-center')>=0){offsetX=-selfRect.width/2;offsetY=-selfRect.height/2;}else if(list.indexOf('mud-popover-center-right')>=0){offsetX=-selfRect.width;offsetY=-selfRect.height/2;} else if(list.indexOf('mud-popover-bottom-left')>=0){offsetX=0;offsetY=-selfRect.height;}else if(list.indexOf('mud-popover-bottom-center')>=0){offsetX=-selfRect.width/2;offsetY=-selfRect.height;}else if(list.indexOf('mud-popover-bottom-right')>=0){offsetX=-selfRect.width;offsetY=-selfRect.height;} if(!isPositionOverride){if(list.indexOf('mud-popover-anchor-top-left')>=0){left=boundingRect.left;top=boundingRect.top;}else if(list.indexOf('mud-popover-anchor-top-center')>=0){left=boundingRect.left+boundingRect.width/2;top=boundingRect.top;}else if(list.indexOf('mud-popover-anchor-top-right')>=0){left=boundingRect.left+boundingRect.width;top=boundingRect.top;}else if(list.indexOf('mud-popover-anchor-center-left')>=0){left=boundingRect.left;top=boundingRect.top+boundingRect.height/2;}else if(list.indexOf('mud-popover-anchor-center-center')>=0){left=boundingRect.left+boundingRect.width/2;top=boundingRect.top+boundingRect.height/2;}else if(list.indexOf('mud-popover-anchor-center-right')>=0){left=boundingRect.left+boundingRect.width;top=boundingRect.top+boundingRect.height/2;}else if(list.indexOf('mud-popover-anchor-bottom-left')>=0){left=boundingRect.left;top=boundingRect.top+boundingRect.height;}else if(list.indexOf('mud-popover-anchor-bottom-center')>=0){left=boundingRect.left+boundingRect.width/2;top=boundingRect.top+boundingRect.height;}else if(list.indexOf('mud-popover-anchor-bottom-right')>=0){left=boundingRect.left+boundingRect.width;top=boundingRect.top+boundingRect.height;}} @@ -90,7 +141,7 @@ return window.mudpopoverHelper.calculatePopoverPosition(classList,boundingRect,s let current=node.parentNode;while(current&¤t!==document.body){const style=window.getComputedStyle(current);const overflowY=style.overflowY;const overflowX=style.overflowX;const isScrollableY=(overflowY==='auto'||overflowY==='scroll')&¤t.scrollHeight>current.clientHeight;const isScrollableX=(overflowX==='auto'||overflowX==='scroll')&¤t.scrollWidth>current.clientWidth;if(isScrollableY||isScrollableX){return false;} current=current.parentNode;} return true;},placePopover:function(popoverNode,classSelector){if(popoverNode&&popoverNode.parentNode){const id=popoverNode.id.substr(8);const popoverContentNode=document.getElementById('popovercontent-'+id);if(!popoverContentNode)return;const classList=popoverContentNode.classList;if(!classList.contains('mud-popover-open'))return;if(classSelector&&!classList.contains(classSelector))return;let boundingRect=popoverNode.parentNode.getBoundingClientRect();if(!window.mudpopoverHelper.isInViewport(popoverNode,boundingRect)){return;} -const selfRect=popoverContentNode.getBoundingClientRect();const popoverNodeStyle=window.getComputedStyle(popoverNode);const isPositionFixed=popoverNodeStyle.position==='fixed';const isPositionOverride=classList.contains('mud-popover-position-override');const isRelativeWidth=classList.contains('mud-popover-relative-width');const isAdaptiveWidth=classList.contains('mud-popover-adaptive-width');const isFlipOnOpen=classList.contains('mud-popover-overflow-flip-onopen');const isFlipAlways=classList.contains('mud-popover-overflow-flip-always');const zIndexAuto=popoverNodeStyle.getPropertyValue('z-index')==='auto';const classListArray=Array.from(classList);if(isPositionOverride){const positiontop=parseInt(popoverContentNode.getAttribute('data-pc-y'))||boundingRect.top;const positionleft=parseInt(popoverContentNode.getAttribute('data-pc-x'))||boundingRect.left;const scrollLeft=window.scrollX;const scrollTop=window.scrollY;boundingRect={left:positionleft-scrollLeft,top:positiontop-scrollTop,right:positionleft+1,bottom:positiontop+1,width:1,height:1};} +const selfRect=popoverContentNode.getBoundingClientRect();const popoverNodeStyle=window.getComputedStyle(popoverNode);const isPositionFixed=popoverNodeStyle.position==='fixed';const isPositionOverride=classList.contains('mud-popover-position-override');const isRelativeWidth=classList.contains('mud-popover-relative-width');const isAdaptiveWidth=classList.contains('mud-popover-adaptive-width');const isFlipOnOpen=classList.contains('mud-popover-overflow-flip-onopen');const isFlipAlways=classList.contains('mud-popover-overflow-flip-always');const zIndexAuto=popoverNodeStyle.getPropertyValue('z-index')==='auto';const classListArray=Array.from(classList);if(isPositionOverride){const attrY=popoverContentNode.getAttribute('data-pc-y');const positiontop=attrY==null?boundingRect.top:parseInt(attrY,10);const attrX=popoverContentNode.getAttribute('data-pc-x');const positionleft=attrX==null?boundingRect.left:parseInt(attrX,10);const scrollLeft=window.scrollX;const scrollTop=window.scrollY;boundingRect={left:positionleft-scrollLeft,top:positiontop-scrollTop,right:positionleft+1,bottom:positiontop+1,width:1,height:1};} const position=window.mudpopoverHelper.calculatePopoverPosition(classListArray,boundingRect,selfRect);let left=position.left;let top=position.top;let offsetX=position.offsetX;let offsetY=position.offsetY;let anchorY=position.anchorY;let anchorX=position.anchorX;popoverContentNode.style['max-width']='none';popoverContentNode.style['min-width']='none';if(isRelativeWidth){popoverContentNode.style['max-width']=(boundingRect.width)+'px';} else if(isAdaptiveWidth){popoverContentNode.style['min-width']=(boundingRect.width)+'px';} if(isFlipOnOpen||isFlipAlways){const firstChild=popoverContentNode.firstElementChild;const isList=firstChild&&firstChild.classList&&firstChild.classList.contains("mud-list");if(popoverContentNode.mudHeight&&anchorY>0&&anchorY0){this.updatePopoverZIndex(p if(isList){const popoverStyle=popoverContentNode.style;const listStyle=firstChild.style;const isUnset=(val)=>val==null||val===''||val==='none';const checkHeight=isUnset(popoverStyle.maxHeight)&&isUnset(listStyle.maxHeight);if(checkHeight){const overflowPadding=window.mudpopoverHelper.overflowPadding;const isCentered=Array.from(classList).some(cls=>cls.includes('mud-popover-anchor-center'));const flipAttr=popoverContentNode.getAttribute('data-mudpopover-flip');const isFlippedUpward=!isCentered&&(flipAttr==='top'||flipAttr==='top-and-left'||flipAttr==='top-and-right');let availableHeight;let shouldClamp=false;if(isFlippedUpward){availableHeight=anchorY-overflowPadding-popoverNode.offsetHeight;shouldClamp=availableHeightavailableHeight;} if(shouldClamp){const minVisibleHeight=overflowPadding*3;const newMaxHeight=Math.max(availableHeight,minVisibleHeight);popoverContentNode.style.maxHeight=`${newMaxHeight}px`;firstChild.style.maxHeight=`${newMaxHeight}px`;popoverContentNode.mudHeight="setmaxheight";if(popoverContentNode.mudScrollTop){firstChild.scrollTop=popoverContentNode.mudScrollTop;popoverContentNode.mudScrollTop=null;}}}}} if(isPositionFixed){popoverContentNode.style['position']='fixed';} -else if(!classList.contains('mud-popover-fixed')){offsetX+=window.scrollX;offsetY+=window.scrollY} +else if(!classList.contains('mud-popover-fixed')){offsetX+=window.scrollX;offsetY+=window.scrollY;} popoverContentNode.style['left']=(left+offsetX)+'px';popoverContentNode.style['top']=(top+offsetY)+'px';this.updatePopoverZIndex(popoverContentNode,popoverNode.parentNode);if(!zIndexAuto){popoverContentNode.style['z-index']=Math.max(popoverNodeStyle.getPropertyValue('z-index'),popoverContentNode.style['z-index']);popoverContentNode.skipZIndex=true;} window.mudpopoverHelper.popoverOverlayUpdates();} else{}},placePopoverByClassSelector:function(classSelector=null){var items=window.mudPopover.getAllObservedContainers();for(let i=0;i{window.mudpopoverHelper.placePopoverByClassSelector();},25);window.mudpopoverHelper.handleScroll=function(node=null){if(node){window.mudpopoverHelper.placePopover(node);} else{window.mudpopoverHelper.placePopoverByClassSelector('mud-popover-fixed');window.mudpopoverHelper.placePopoverByClassSelector('mud-popover-overflow-flip-always');} -window.mudpopoverHelper.debouncedResize();};window.mudPopover=new MudPopover();window.mudInputAutoGrow={initAutoGrow:(elem,maxLines)=>{const compStyle=getComputedStyle(elem);const lineHeight=parseFloat(compStyle.getPropertyValue('line-height'));const paddingTop=parseFloat(compStyle.getPropertyValue('padding-top'));let maxHeight=0;elem.updateParameters=function(newMaxLines){if(newMaxLines>0){maxHeight=lineHeight*newMaxLines+paddingTop;}else{maxHeight=0;}} -elem.adjustAutoGrowHeight=function(didReflow=false){const scrollTops=[];let curElem=elem;while(curElem&&curElem.parentNode&&curElem.parentNode instanceof Element){if(curElem.parentNode.scrollTop){scrollTops.push([curElem.parentNode,curElem.parentNode.scrollTop]);} -curElem=curElem.parentNode;} -elem.style.height=0;if(didReflow){elem.style.textAlign=null;} -let minHeight=lineHeight*elem.rows+paddingTop;let newHeight=Math.max(minHeight,elem.scrollHeight);let initialOverflowY=elem.style.overflowY;if(maxHeight>0&&newHeight>maxHeight){elem.style.overflowY='auto';newHeight=maxHeight;}else{elem.style.overflowY='hidden';} -elem.style.height=newHeight+"px";scrollTops.forEach(([node,scrollTop])=>{node.style.scrollBehavior='auto';node.scrollTop=scrollTop;node.style.scrollBehavior=null;});if(!didReflow&&initialOverflowY!==elem.style.overflowY&&elem.style.overflowY==='hidden'){elem.style.textAlign='end';elem.adjustAutoGrowHeight(true);}} -elem.restoreToInitialState=function(){elem.removeEventListener('input',elem.adjustAutoGrowHeight);elem.style.overflowY=null;elem.style.height=null;} -elem.addEventListener('input',elem.adjustAutoGrowHeight);window.addEventListener('resize',elem.adjustAutoGrowHeight);elem.updateParameters(maxLines);elem.adjustAutoGrowHeight();},adjustHeight:(elem)=>{if(typeof elem.adjustAutoGrowHeight==='function'){elem.adjustAutoGrowHeight();}},updateParams:(elem,maxLines)=>{if(typeof elem.updateParameters==='function'){elem.updateParameters(maxLines);} -if(typeof elem.adjustAutoGrowHeight==='function'){elem.adjustAutoGrowHeight();}},destroy:(elem)=>{if(elem==null){return;} -window.removeEventListener('resize',elem.adjustAutoGrowHeight);if(typeof elem.restoreToInitialState==='function'){elem.restoreToInitialState();}}};class MudResizeListener{constructor(id){this.logger=function(message){};this.options={};this.throttleResizeHandlerId=-1;this.dotnet=undefined;this.breakpoint=-1;this.id=id;this.handleResize=this.throttleResizeHandler.bind(this);} +window.mudpopoverHelper.debouncedResize();};window.mudPopover=new MudPopover();class MudResizeListener{constructor(id){this.logger=function(message){};this.options={};this.throttleResizeHandlerId=-1;this.dotnet=undefined;this.breakpoint=-1;this.id=id;this.handleResize=this.throttleResizeHandler.bind(this);} listenForResize(dotnetRef,options){if(this.dotnet){this.options=options;return;} this.options=options;this.dotnet=dotnetRef;this.logger=options.enableLogging?console.log:(message)=>{};this.logger(`[MudBlazor]Reporting resize events at rate of:${this.options.reportRate}ms`);window.addEventListener("resize",this.handleResize,false);if(!this.options.suppressInitEvent){this.resizeHandler();} this.breakpoint=this.getBreakpoint(window.innerWidth);} @@ -211,22 +253,29 @@ return 1;else return 0;}};window.mudResizeListener=new MudResizeListener();window.mudResizeListenerFactory={mapping:{},listenForResize:(dotnetRef,options,id)=>{var map=window.mudResizeListenerFactory.mapping;if(map[id]){return;} var listener=new MudResizeListener(id);listener.listenForResize(dotnetRef,options);map[id]=listener;},cancelListener:(id)=>{var map=window.mudResizeListenerFactory.mapping;if(!map[id]){return;} var listener=map[id];listener.cancelListener();delete map[id];},cancelListeners:(ids)=>{for(let i=0;i0?this.throttleEventHandler.bind(this,key):this.eventHandler.bind(this,key);document.addEventListener(eventName,handlerRef,false);this.mapper[key]={eventName:eventName,handler:handlerRef,delay:throotleInterval,timerId:-1,reference:dotnetReference,elementId:document,properties:properties,projection:null,};} +throttleEventHandler(key,event){const entry=this.mapper[key];if(!entry){return;} +clearTimeout(entry.timerId);entry.timerId=window.setTimeout(this.eventHandler.bind(this,key,event),entry.delay);} +eventHandler(key,event){const entry=this.mapper[key];if(!entry){return;} +var elem=document.getElementById(entry.elementId);if(elem!=event.srcElement&&entry.elementId!=document){return;} +const eventEntry={};for(var i=0;i({identifier:touchPoint.identifier,screenX:touchPoint.screenX,screenY:touchPoint.screenY,clientX:touchPoint.clientX,clientY:touchPoint.clientY,pageX:touchPoint.pageX,pageY:touchPoint.pageY,}));} +else{eventEntry[propertyName]=propertyValue;}} +if(entry.projection){if(typeof entry.projection==="function"){entry.projection.apply(null,[eventEntry,event]);}} +entry.reference.invokeMethodAsync('OnEventOccur',key,JSON.stringify(eventEntry));} +unsubscribe(key){const entry=this.mapper[key];if(!entry){return;} +entry.reference=null;if(document==entry.elementId){document.removeEventListener(entry.eventName,entry.handler,false);}else{const elem=document.getElementById(entry.elementId);if(elem){elem.removeEventListener(entry.eventName,entry.handler,false);}} +delete this.mapper[key];}};window.mudThrottledEventManager=new MudThrottledEventManager();window.mudEventProjections={correctOffset:function(eventEntry,event){var target=event.target.getBoundingClientRect();eventEntry.offsetX=event.clientX-target.x;eventEntry.offsetY=event.clientY-target.y;}};class MudScrollListener{constructor(){this.throttleScrollHandlerId=-1;this.handlerRef=null;} listenForScroll(dotnetReference,selector){let element=selector?document.querySelector(selector):document;this.handlerRef=this.throttleScrollHandler.bind(this,dotnetReference);element.addEventListener('scroll',this.handlerRef,false);} throttleScrollHandler(dotnetReference,event){clearTimeout(this.throttleScrollHandlerId);this.throttleScrollHandlerId=window.setTimeout(this.scrollHandler.bind(this,dotnetReference,event),100);} -scrollHandler(dotnetReference,event){try{let element=event.target;let scrollTop=element.scrollTop;let scrollHeight=element.scrollHeight;let scrollWidth=element.scrollWidth;let scrollLeft=element.scrollLeft;let nodeName=element.nodeName;let firstChild=element.firstElementChild;let firstChildBoundingClientRect=firstChild.getBoundingClientRect();dotnetReference.invokeMethodAsync('RaiseOnScroll',{firstChildBoundingClientRect,scrollLeft,scrollTop,scrollHeight,scrollWidth,nodeName,});}catch(error){console.log('[MudBlazor] Error in scrollHandler:',{error});}} -cancelListener(selector){let element=selector?document.querySelector(selector):document;element.removeEventListener('scroll',this.handlerRef);}};window.mudScrollListener=new MudScrollListener();class MudWindow{copyToClipboard(text){navigator.clipboard.writeText(text);} -changeCssById(id,css){var element=document.getElementById(id);if(element){element.className=css;}} -updateStyleProperty(elementId,propertyName,value){const element=document.getElementById(elementId);if(element){element.style.setProperty(propertyName,value);}} -changeGlobalCssVariable(name,newValue){document.documentElement.style.setProperty(name,newValue);} -open(args){window.open(args);}} -window.mudWindow=new MudWindow();window.mudTimePicker={initPointerEvents:(clock,dotNetHelper)=>{let isPointerDown=false;const startHandler=(event)=>{if(event.button!==0){return;} -isPointerDown=true;event.target.releasePointerCapture(event.pointerId);if(event.target.classList.contains('mud-hour')||event.target.classList.contains('mud-minute')){let attributeValue=event.target.getAttribute('data-stick-value');let stickValue=attributeValue?parseInt(attributeValue):-1;dotNetHelper.invokeMethodAsync('SelectTimeFromStick',stickValue,false);} -event.preventDefault();};const endHandler=(event)=>{if(event.button!==0){return;} -isPointerDown=false;if(event.target.classList.contains('mud-hour')||event.target.classList.contains('mud-minute')){let attributeValue=event.target.getAttribute('data-stick-value');let stickValue=attributeValue?parseInt(attributeValue):-1;dotNetHelper.invokeMethodAsync('OnStickClick',stickValue);} -event.preventDefault();};const moveHandler=(event)=>{if(!isPointerDown||(!event.target.classList.contains('mud-hour')&&!event.target.classList.contains('mud-minute'))){return;} -let attributeValue=event.target.getAttribute('data-stick-value');let stickValue=attributeValue?parseInt(attributeValue):-1;dotNetHelper.invokeMethodAsync('SelectTimeFromStick',stickValue,true);event.preventDefault();};clock.addEventListener('pointerdown',startHandler);clock.addEventListener('pointerup',endHandler);clock.addEventListener('pointercancel',endHandler);clock.addEventListener('pointerover',moveHandler);clock.destroy=()=>{clock.removeEventListener('pointerdown',startHandler);clock.removeEventListener('pointerup',endHandler);clock.removeEventListener('pointercancel',endHandler);clock.removeEventListener('pointerover',moveHandler);};},destroyPointerEvents:(container)=>{if(container==null){return;} -if(typeof container.destroy==='function'){container.destroy();}}};class MudScrollSpy{constructor(){this.lastKnowElement=null;this.handlerRef=null;} +scrollHandler(dotnetReference,event){try{let element=event.target;const isDocument=element===document;const scrollSource=isDocument?(document.scrollingElement||document.documentElement||document.body):element;let scrollTop=scrollSource.scrollTop||0;let scrollHeight=scrollSource.scrollHeight||0;let scrollWidth=scrollSource.scrollWidth||0;let scrollLeft=scrollSource.scrollLeft||0;let nodeName=element.nodeName;let firstChild=element.firstElementChild;let firstChildBoundingClientRect=firstChild.getBoundingClientRect();dotnetReference.invokeMethodAsync('RaiseOnScroll',{firstChildBoundingClientRect,scrollLeft,scrollTop,scrollHeight,scrollWidth,nodeName,});}catch(error){console.error('[MudBlazor] Error in scrollHandler:',{error});}} +cancelListener(selector){let element=selector?document.querySelector(selector):document;element.removeEventListener('scroll',this.handlerRef);}};window.mudScrollListener=new MudScrollListener();window.mudTableCell={focusCell(rowId,cellIndex){const row=document.getElementById(rowId);if(!row)return;const cells=row.querySelectorAll('td, th');if(cellIndex>=0&&cellIndex=0&&cellIndexdocument.body.clientWidth;const classToAdd=hasScrollBar?lockclass:lockclass+"-no-padding";element.classList.add(classToAdd);} -this._lockCount++;} -unlockScroll(selector,lockclass){this._lockCount=Math.max(0,this._lockCount-1);if(this._lockCount===0){const element=document.querySelector(selector)||document.body;element.classList.remove(lockclass);element.classList.remove(lockclass+"-no-padding");}}};window.mudScrollManager=new MudScrollManager();class MudElementReference{constructor(){this.listenerId=0;this.eventListeners={};} +window.getTabbableElements=(element)=>{return element.querySelectorAll("a[href]:not([tabindex='-1']),"+"area[href]:not([tabindex='-1']),"+"button:not([disabled]):not([tabindex='-1']),"+"input:not([disabled]):not([tabindex='-1']):not([type='hidden']),"+"select:not([disabled]):not([tabindex='-1']),"+"textarea:not([disabled]):not([tabindex='-1']),"+"iframe:not([tabindex='-1']),"+"details:not([tabindex='-1']),"+"[tabindex]:not([tabindex='-1']),"+"[contentEditable=true]:not([tabindex='-1'])");};window.serializeParameter=(data,spec)=>{if(typeof data=="undefined"||data===null){return null;} +if(typeof data==="number"||typeof data==="string"||typeof data=="boolean"){return data;} +let res=(Array.isArray(data))?[]:{};if(!spec){spec="*";} +for(let i in data){let currentMember=data[i];if(typeof currentMember==='function'||currentMember===null){continue;} +let currentMemberSpec;if(spec!="*"){currentMemberSpec=Array.isArray(data)?spec:spec[i];if(!currentMemberSpec){continue;}}else{currentMemberSpec="*"} +if(typeof currentMember==='object'){if(Array.isArray(currentMember)||currentMember.length){res[i]=[];for(let j=0;j{if(svgElement==null)return null;const bbox=svgElement.getBBox();return{x:bbox.x,y:bbox.y,width:bbox.width,height:bbox.height};};window.mudObserveElementSize=(dotNetReference,element,functionName='OnElementSizeChanged',debounceMillis=200)=>{if(!element)return;let lastNotifiedTime=0;let scheduledCall=null;const throttledNotify=(width,height)=>{const timestamp=Date.now();const timeSinceLast=timestamp-lastNotifiedTime;if(timeSinceLast>=debounceMillis){lastNotifiedTime=timestamp;try{dotNetReference.invokeMethodAsync(functionName,{width,height,timestamp});} +catch(error){this.logger("[MudBlazor] Error in mudObserveElementSize:",{error});}}else{if(scheduledCall!==null){clearTimeout(scheduledCall);} +scheduledCall=setTimeout(()=>{lastNotifiedTime=Date.now();scheduledCall=null;try{dotNetReference.invokeMethodAsync(functionName,{width,height,timestamp});} +catch(error){this.logger("[MudBlazor] Error in mudObserveElementSize:",{error});}},debounceMillis-timeSinceLast);}};const resizeObserver=new ResizeObserver(entries=>{if(element.isConnected===false){return;} +let width=element.clientWidth;let height=element.clientHeight;for(const entry of entries){width=entry.contentRect.width;height=entry.contentRect.height;} +width=Math.floor(width);height=Math.floor(height);throttledNotify(width,height);});resizeObserver.observe(element);let mutationObserver=null;const parent=element.parentNode;if(parent){mutationObserver=new MutationObserver(mutations=>{for(const mutation of mutations){for(const removedNode of mutation.removedNodes){if(removedNode===element){cleanup();}}}});mutationObserver.observe(parent,{childList:true});} +function cleanup(){resizeObserver.disconnect();if(mutationObserver){mutationObserver.disconnect();} +if(scheduledCall!==null){clearTimeout(scheduledCall);}} +return{width:element.clientWidth,height:element.clientHeight};};class MudElementReference{constructor(){this.listenerId=0;this.eventListeners={};} focus(element){if(element) {element.focus();}} blur(element){if(element){element.blur();}} @@ -338,53 +391,4 @@ return listeners;} removeDefaultPreventingHandlers(element,eventNames,listenerIds){for(let index=0;index{console.warn("Error invoking CallOnBlurredAsync, possibly disposed:",err);window.mudElementRef.removeOnBlurEvent(element);});}else{console.error("No dotNetReference found for iosKeyboardFocus");}};element.addEventListener('blur',element._mudBlurHandler);} -removeOnBlurEvent(element){if(!element)return;if(element._mudBlurHandler){element.removeEventListener('blur',element._mudBlurHandler);delete element._mudBlurHandler;}}};window.mudElementRef=new MudElementReference();class MudPointerEventsNone{constructor(){this.dotnet=null;this.logger=(msg,...args)=>{};this.pointerDownHandlerRef=null;this.pointerUpHandlerRef=null;this.pointerDownMap=new Map();this.pointerUpMap=new Map();} -listenForPointerEvents(dotNetReference,elementId,options){if(!options){this.logger("options object is required but was not provided");return;} -if(options.enableLogging){this.logger=(msg,...args)=>console.log("[MudBlazor | PointerEventsNone]",msg,...args);}else{this.logger=(msg,...args)=>{};} -this.logger("Called listenForPointerEvents",{dotNetReference,elementId,options});if(!dotNetReference){this.logger("dotNetReference is required but was not provided");return;} -if(!elementId){this.logger("elementId is required but was not provided");return;} -if(!options.subscribeDown&&!options.subscribeUp){this.logger("No subscriptions added: both subscribeDown and subscribeUp are false");return;} -if(!this.dotnet){this.dotnet=dotNetReference;} -if(options.subscribeDown){this.logger("Subscribing to 'pointerdown' for element:",elementId);this.pointerDownMap.set(elementId,options);if(!this.pointerDownHandlerRef){this.logger("Registering global 'pointerdown' event listener");this.pointerDownHandlerRef=this.pointerDownHandler.bind(this);document.addEventListener("pointerdown",this.pointerDownHandlerRef,false);}} -if(options.subscribeUp){this.logger("Subscribing to 'pointerup' events for element:",elementId);this.pointerUpMap.set(elementId,options);if(!this.pointerUpHandlerRef){this.logger("Registering global 'pointerup' event listener");this.pointerUpHandlerRef=this.pointerUpHandler.bind(this);document.addEventListener("pointerup",this.pointerUpHandlerRef,false);}}} -pointerDownHandler(event){this._handlePointerEvent(event,this.pointerDownMap,"RaiseOnPointerDown");} -pointerUpHandler(event){this._handlePointerEvent(event,this.pointerUpMap,"RaiseOnPointerUp");} -_handlePointerEvent(event,map,raiseMethod){if(map.size===0){this.logger("No elements registered for",raiseMethod);return;} -const elements=[];for(const id of map.keys()){const element=document.getElementById(id);if(element){elements.push(element);}else{this.logger("Element",id,"not found in DOM");}} -if(elements.length===0){this.logger("None of the registered elements were found in the DOM for",raiseMethod);return;} -elements.forEach(x=>x.style.pointerEvents="auto");const elementsFromPoint=document.elementsFromPoint(event.clientX,event.clientY);elements.forEach(x=>x.style.pointerEvents="none");const matchingIds=[];for(const element of elementsFromPoint){if(!element.id||!map.has(element.id)){break;} -matchingIds.push(element.id);} -if(matchingIds.length===0){this.logger("No matching registered elements found under pointer for",raiseMethod);return;} -this.logger("Raising",raiseMethod,"for matching element(s):",matchingIds);this.dotnet.invokeMethodAsync(raiseMethod,matchingIds);} -cancelListener(elementId){if(!elementId){this.logger("cancelListener called with invalid elementId");return;} -const hadDown=this.pointerDownMap.delete(elementId);const hadUp=this.pointerUpMap.delete(elementId);if(hadDown||hadUp){this.logger("Cancelled listener for element",elementId);}else{this.logger("No active listener found for element",elementId);} -if(this.pointerDownMap.size===0&&this.pointerDownHandlerRef){this.logger("No more elements listening for 'pointerdown' — removing global event listener");document.removeEventListener("pointerdown",this.pointerDownHandlerRef);this.pointerDownHandlerRef=null;} -if(this.pointerUpMap.size===0&&this.pointerUpHandlerRef){this.logger("No more elements listening for 'pointerup' — removing global event listener");document.removeEventListener("pointerup",this.pointerUpHandlerRef);this.pointerUpHandlerRef=null;}} -dispose(){if(!this.dotnet&&!this.pointerDownHandlerRef&&!this.pointerUpHandlerRef){this.logger("dispose() called but instance was already cleaned up");return;} -this.logger("Disposing");if(this.pointerDownHandlerRef){this.logger("Removing global 'pointerdown' event listener");document.removeEventListener("pointerdown",this.pointerDownHandlerRef);this.pointerDownHandlerRef=null;} -if(this.pointerUpHandlerRef){this.logger("Removing global 'pointerup' event listener");document.removeEventListener("pointerup",this.pointerUpHandlerRef);this.pointerUpHandlerRef=null;} -const downCount=this.pointerDownMap.size;const upCount=this.pointerUpMap.size;if(downCount>0){this.logger("Clearing",downCount,"element(s) from pointerDownMap");} -if(upCount>0){this.logger("Clearing",upCount,"element(s) from pointerUpMap");} -this.pointerDownMap.clear();this.pointerUpMap.clear();this.dotnet=null;}} -window.mudPointerEventsNone=new MudPointerEventsNone();class MudResizeObserverFactory{constructor(){this._maps={};} -connect(id,dotNetRef,elements,elementIds,options){var existingEntry=this._maps[id];if(!existingEntry){var observer=new MudResizeObserver(dotNetRef,options);this._maps[id]=observer;} -var result=this._maps[id].connect(elements,elementIds);return result;} -disconnect(id,element){var existingEntry=this._maps[id];if(existingEntry){existingEntry.disconnect(element);}} -cancelListener(id){var existingEntry=this._maps[id];if(existingEntry){existingEntry.cancelListener();delete this._maps[id];}}} -class MudResizeObserver{constructor(dotNetRef,options){this.logger=options.enableLogging?console.log:(message)=>{};this.options=options;this._dotNetRef=dotNetRef -var delay=(this.options||{}).reportRate||200;this.throttleResizeHandlerId=-1;var observervedElements=[];this._observervedElements=observervedElements;this.logger('[MudBlazor | ResizeObserver] Observer initialized');this._resizeObserver=new ResizeObserver(entries=>{var changes=[];this.logger('[MudBlazor | ResizeObserver] changes detected');for(let entry of entries){var target=entry.target;var affectedObservedElement=observervedElements.find((x)=>x.element==target);if(affectedObservedElement){var size=entry.target.getBoundingClientRect();if(affectedObservedElement.isInitialized==true){changes.push({id:affectedObservedElement.id,size:size});} -else{affectedObservedElement.isInitialized=true;}}} -if(changes.length>0){if(this.throttleResizeHandlerId>=0){clearTimeout(this.throttleResizeHandlerId);} -this.throttleResizeHandlerId=window.setTimeout(this.resizeHandler.bind(this,changes),delay);}});} -resizeHandler(changes){try{this.logger("[MudBlazor | ResizeObserver] OnSizeChanged handler invoked");this._dotNetRef.invokeMethodAsync("OnSizeChanged",changes);}catch(error){this.logger("[MudBlazor | ResizeObserver] Error in OnSizeChanged handler:",{error});}} -connect(elements,ids){var result=[];this.logger('[MudBlazor | ResizeObserver] Start observing elements...');for(var i=0;ix.id==elementId);if(affectedObservedElement){var element=affectedObservedElement.element;this._resizeObserver.unobserve(element);this.logger('[MudBlazor | ResizeObserver] Element found. Ubobserving size changes of element',{element});var index=this._observervedElements.indexOf(affectedObservedElement);this._observervedElements.splice(index,1);}} -cancelListener(){this.logger('[MudBlazor | ResizeObserver] Closing ResizeObserver. Detaching all observed elements');this._resizeObserver.disconnect();this._dotNetRef=undefined;}} -window.mudResizeObserver=new MudResizeObserverFactory();window.mudDragAndDrop={initDropZone:(id)=>{const elem=document.getElementById(id);elem.addEventListener('dragover',()=>event.preventDefault());elem.addEventListener('dragstart',()=>event.dataTransfer.setData('',event.target.id));},makeDropZonesNotRelative:()=>{var firstDropItems=Array.from(document.getElementsByClassName('mud-drop-item')).filter(x=>x.getAttribute('index')=="-1");for(let dropItem of firstDropItems){dropItem.style.position='static';} -const dropZones=document.getElementsByClassName('mud-drop-zone');for(let dropZone of dropZones){dropZone.style.position='unset';}},getDropZoneIdentifierOnPosition:(x,y)=>{const elems=document.elementsFromPoint(x,y);const dropZones=elems.filter(e=>e.classList.contains('mud-drop-zone')) -const dropZone=dropZones[0];if(dropZone){return dropZone.getAttribute('identifier')||"";} -return"";},getDropIndexOnPosition:(x,y,id)=>{const elems=document.elementsFromPoint(x,y);const dropItems=elems.filter(e=>e.classList.contains('mud-drop-item')&&e.id!=id) -const dropItem=dropItems[0];if(dropItem){return dropItem.getAttribute('index')||"";} -return"";},makeDropZonesRelative:()=>{const dropZones=document.getElementsByClassName('mud-drop-zone');for(let dropZone of dropZones){dropZone.style.position='relative';} -var firstDropItems=Array.from(document.getElementsByClassName('mud-drop-item')).filter(x=>x.getAttribute('index')=="-1");for(let dropItem of firstDropItems){dropItem.style.position='relative';}},moveItemByDifference:(id,dx,dy)=>{const elem=document.getElementById(id);var tx=(parseFloat(elem.getAttribute('data-x'))||0)+dx;var ty=(parseFloat(elem.getAttribute('data-y'))||0)+dy;elem.style.webkitTransform=elem.style.transform='translate3d('+tx+'px, '+ty+'px, 10px)';elem.setAttribute('data-x',tx);elem.setAttribute('data-y',ty);},resetItem:(id)=>{const elem=document.getElementById(id);if(elem){elem.style.webkitTransform=elem.style.transform='';elem.setAttribute('data-x',0);elem.setAttribute('data-y',0);}}}; \ No newline at end of file +removeOnBlurEvent(element){if(!element)return;if(element._mudBlurHandler){element.removeEventListener('blur',element._mudBlurHandler);delete element._mudBlurHandler;}}};window.mudElementRef=new MudElementReference(); \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js.br b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js.br index ca9a55d5..64bb8da1 100644 Binary files a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js.br and b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js.br differ diff --git a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js.gz b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js.gz index cc3ba086..be2351f6 100644 Binary files a/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js.gz and b/app/MindWork AI Studio/wwwroot/system/MudBlazor/MudBlazor.min.js.gz differ diff --git a/metadata.txt b/metadata.txt index 5746ea97..f87818bf 100644 --- a/metadata.txt +++ b/metadata.txt @@ -1,12 +1,12 @@ -0.9.54 -2025-11-24 18:28:32 UTC -229 +26.1.1 +2026-01-11 15:53:55 UTC +231 9.0.112 (commit 49aa03442a) 9.0.11 (commit fa7cdded37) -1.91.1 (commit ed61e7d7e) -8.12.0 +1.92.0 (commit ded5c06cf) +8.15.0 1.8.1 -009bb33d839, release +4cf44e91d2c, release osx-arm64 137.0.7215.0 1.16.1 \ No newline at end of file diff --git a/runtime/Cargo.lock b/runtime/Cargo.lock index 73ab6952..7da20043 100644 --- a/runtime/Cargo.lock +++ b/runtime/Cargo.lock @@ -198,6 +198,29 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "aws-lc-rs" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c953fe1ba023e6b7730c0d4b031d06f267f23a46167dcbd40316644b10a17ba" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", +] + [[package]] name = "backtrace" version = "0.3.73" @@ -246,6 +269,29 @@ dependencies = [ "serde", ] +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.93", + "which", +] + [[package]] name = "bit_field" version = "0.10.2" @@ -397,9 +443,9 @@ dependencies = [ [[package]] name = "calamine" -version = "0.30.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aeb09f84576a634da713630e11e431a744b91f1f8114c2ff0760189783a8a1" +checksum = "41bdeb83af82cd9cb686a19ed7efc2f50a21c262610f51ce945a8528860725ce" dependencies = [ "atoi_simd", "byteorder", @@ -407,7 +453,7 @@ dependencies = [ "encoding_rs", "fast-float2", "log", - "quick-xml 0.37.5", + "quick-xml 0.38.4", "serde", "zip 4.2.0", ] @@ -433,10 +479,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.16" +version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" +checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -448,6 +495,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfb" version = "0.7.3" @@ -484,6 +540,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.40" @@ -496,7 +558,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -509,6 +571,17 @@ dependencies = [ "inout", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clipboard-win" version = "5.4.0" @@ -518,6 +591,15 @@ dependencies = [ "error-code", ] +[[package]] +name = "cmake" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +dependencies = [ + "cc", +] + [[package]] name = "cocoa" version = "0.24.1" @@ -1123,6 +1205,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" + [[package]] name = "flate2" version = "1.1.2" @@ -1179,13 +1267,19 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futf" version = "0.1.5" @@ -1431,8 +1525,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -1733,6 +1829,15 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "html5ever" version = "0.26.0" @@ -1875,7 +1980,7 @@ dependencies = [ "http 1.1.0", "hyper 1.6.0", "hyper-util", - "rustls 0.23.22", + "rustls 0.23.28", "rustls-pki-types", "tokio", "tokio-rustls 0.26.1", @@ -1934,7 +2039,7 @@ dependencies = [ "tokio", "tower-service", "tracing", - "windows-registry", + "windows-registry 0.5.3", ] [[package]] @@ -2096,9 +2201,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -2247,6 +2352,15 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.14.0" @@ -2305,6 +2419,22 @@ dependencies = [ "walkdir", ] +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.63", + "walkdir", + "windows-sys 0.45.0", +] + [[package]] name = "jni-sys" version = "0.3.0" @@ -2383,7 +2513,7 @@ dependencies = [ "dbus-secret-service", "log", "security-framework 2.11.1", - "security-framework 3.0.0", + "security-framework 3.5.1", "windows-sys 0.59.0", ] @@ -2406,6 +2536,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "lebe" version = "0.5.2" @@ -2505,6 +2641,12 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "lzma-rs" version = "0.3.0" @@ -2599,7 +2741,7 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mindwork-ai-studio" -version = "0.9.54" +version = "26.1.1" dependencies = [ "aes", "arboard", @@ -2624,7 +2766,7 @@ dependencies = [ "rand 0.9.1", "rand_chacha 0.9.0", "rcgen", - "reqwest 0.12.22", + "reqwest 0.13.1", "ring", "rocket", "serde", @@ -2638,9 +2780,15 @@ dependencies = [ "tokio-stream", "tracing-subscriber", "url", - "windows-registry", + "windows-registry 0.6.1", ] +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "minisign-verify" version = "0.2.1" @@ -2706,7 +2854,7 @@ dependencies = [ "libc", "log", "openssl", - "openssl-probe", + "openssl-probe 0.1.5", "openssl-sys", "schannel", "security-framework 2.11.1", @@ -2754,6 +2902,16 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "nu-ansi-term" version = "0.50.1" @@ -3040,6 +3198,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openssl-probe" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" + [[package]] name = "openssl-src" version = "300.3.1+3.3.1" @@ -3149,7 +3313,7 @@ dependencies = [ "console_error_panic_hook", "console_log", "image 0.25.2", - "itertools", + "itertools 0.14.0", "js-sys", "libloading", "log", @@ -3197,9 +3361,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "phf" @@ -3417,6 +3581,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn 2.0.93", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -3499,14 +3673,70 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.37.5" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" dependencies = [ "encoding_rs", "memchr", ] +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.1", + "rustls 0.23.28", + "socket2", + "thiserror 2.0.12", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +dependencies = [ + "aws-lc-rs", + "bytes", + "getrandom 0.3.1", + "lru-slab", + "rand 0.9.1", + "ring", + "rustc-hash 2.1.1", + "rustls 0.23.28", + "rustls-pki-types", + "slab", + "thiserror 2.0.12", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" version = "1.0.36" @@ -3788,9 +4018,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.22" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" dependencies = [ "base64 0.22.1", "bytes", @@ -3810,13 +4040,14 @@ dependencies = [ "native-tls", "percent-encoding", "pin-project-lite", + "quinn", + "rustls 0.23.28", "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", + "rustls-platform-verifier", "sync_wrapper 1.0.2", "tokio", "tokio-native-tls", + "tokio-rustls 0.26.1", "tower", "tower-http", "tower-service", @@ -3961,6 +4192,18 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustc_version" version = "0.4.0" @@ -3997,17 +4240,30 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.22" +version = "0.23.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" dependencies = [ + "aws-lc-rs", "once_cell", "rustls-pki-types", - "rustls-webpki 0.102.8", + "rustls-webpki 0.103.3", "subtle", "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +dependencies = [ + "openssl-probe 0.2.0", + "rustls-pki-types", + "schannel", + "security-framework 3.5.1", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -4022,6 +4278,36 @@ name = "rustls-pki-types" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +dependencies = [ + "web-time", +] + +[[package]] +name = "rustls-platform-verifier" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +dependencies = [ + "core-foundation 0.10.0", + "core-foundation-sys", + "jni 0.21.1", + "log", + "once_cell", + "rustls 0.23.28", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.3", + "security-framework 3.5.1", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" @@ -4035,10 +4321,11 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -4111,9 +4398,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.0.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d0283c0a4a22a0f1b0e4edca251aa20b92fc96eaa09b84bec052f9415e9d71" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ "bitflags 2.6.0", "core-foundation 0.10.0", @@ -4124,9 +4411,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -4636,7 +4923,7 @@ dependencies = [ "gtk", "image 0.24.9", "instant", - "jni", + "jni 0.20.0", "lazy_static", "libc", "log", @@ -5033,6 +5320,21 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" version = "1.45.1" @@ -5087,7 +5389,7 @@ version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.22", + "rustls 0.23.28", "tokio", ] @@ -5200,9 +5502,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "bitflags 2.6.0", "bytes", @@ -5230,9 +5532,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -5241,9 +5543,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -5252,9 +5554,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -5273,9 +5575,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", @@ -5346,9 +5648,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -5584,6 +5886,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "webkit2gtk" version = "0.18.2" @@ -5631,6 +5943,15 @@ dependencies = [ "system-deps 6.2.2", ] +[[package]] +name = "webpki-root-certs" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee3e3b5f5e80bc89f30ce8d0343bf4e5f12341c51f3e26cbeecbc7c85443e85b" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webview2-com" version = "0.19.1" @@ -5675,6 +5996,18 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "winapi" version = "0.3.9" @@ -5777,6 +6110,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-metadata" version = "0.39.0" @@ -5789,9 +6128,20 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] @@ -5800,7 +6150,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -5809,7 +6168,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -5827,6 +6195,15 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -5854,6 +6231,30 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index bb28ee6e..35d052a0 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mindwork-ai-studio" -version = "0.9.54" +version = "26.1.1" edition = "2021" description = "MindWork AI Studio" authors = ["Thorsten Sommer"] @@ -35,7 +35,7 @@ hmac = "0.12.1" sha2 = "0.10.8" rcgen = { version = "0.14.3", features = ["pem"] } file-format = "0.28.0" -calamine = "0.30.0" +calamine = "0.32.0" pdfium-render = "0.8.34" sys-locale = "0.3.2" cfg-if = "1.0.1" @@ -43,7 +43,7 @@ pptx-to-md = "0.4.0" tempfile = "3.8" # Fixes security vulnerability downstream, where the upstream is not fixed yet: -url = "2.5" +url = "2.5.7" ring = "0.17.14" crossbeam-channel = "0.5.15" tracing-subscriber = "0.3.20" @@ -51,13 +51,13 @@ dirs = "6.0.0" [target.'cfg(target_os = "linux")'.dependencies] # See issue https://github.com/tauri-apps/tauri/issues/4470 -reqwest = { version = "0.12.22", features = ["native-tls-vendored"] } +reqwest = { version = "0.13.1", features = ["native-tls-vendored"] } # Fixes security vulnerability downstream, where the upstream is not fixed yet: openssl = "0.10.73" [target.'cfg(target_os = "windows")'.dependencies] -windows-registry = "0.5.3" +windows-registry = "0.6.1" [features] custom-protocol = ["tauri/custom-protocol"] diff --git a/runtime/Info.plist b/runtime/Info.plist new file mode 100644 index 00000000..61967ac4 --- /dev/null +++ b/runtime/Info.plist @@ -0,0 +1,8 @@ + + + + + NSMicrophoneUsageDescription + Request microphone access for voice recording + + diff --git a/runtime/src/app_window.rs b/runtime/src/app_window.rs index dbb521b6..dc254cd4 100644 --- a/runtime/src/app_window.rs +++ b/runtime/src/app_window.rs @@ -573,6 +573,56 @@ pub fn select_file(_token: APIToken, payload: Json) -> Json) -> Json { + + // Create a new file dialog builder: + let file_dialog = FileDialogBuilder::new(); + + // Set the title of the file dialog: + let file_dialog = file_dialog.set_title(&payload.title); + + // Set the file type filter if provided: + let file_dialog = match &payload.filter { + Some(filter) => { + file_dialog.add_filter(&filter.filter_name, &filter.filter_extensions.iter().map(|s| s.as_str()).collect::>()) + }, + + None => file_dialog, + }; + + // Set the previous file path if provided: + let file_dialog = match &payload.previous_file { + Some(previous) => { + let previous_path = previous.file_path.as_str(); + file_dialog.set_directory(previous_path) + }, + + None => file_dialog, + }; + + // Show the file dialog and get the selected file path: + let file_paths = file_dialog.pick_files(); + match file_paths { + Some(paths) => { + info!("User selected {} files.", paths.len()); + Json(FilesSelectionResponse { + user_cancelled: false, + selected_file_paths: paths.iter().map(|p| p.to_str().unwrap().to_string()).collect(), + }) + } + + None => { + info!("User cancelled file selection."); + Json(FilesSelectionResponse { + user_cancelled: true, + selected_file_paths: Vec::new(), + }) + }, + } +} + #[post("/save/file", data = "")] pub fn save_file(_token: APIToken, payload: Json) -> Json { @@ -632,6 +682,13 @@ pub struct FileSelectionResponse { user_cancelled: bool, selected_file_path: String, } + +#[derive(Serialize)] +pub struct FilesSelectionResponse { + user_cancelled: bool, + selected_file_paths: Vec, +} + #[derive(Serialize)] pub struct FileSaveResponse { user_cancelled: bool, diff --git a/runtime/src/dotnet.rs b/runtime/src/dotnet.rs index 7d2bc9c8..944e1d95 100644 --- a/runtime/src/dotnet.rs +++ b/runtime/src/dotnet.rs @@ -3,7 +3,7 @@ use std::path::Path; use std::sync::{Arc, Mutex}; use base64::Engine; use base64::prelude::BASE64_STANDARD; -use log::{debug, error, info, warn}; +use log::{error, info, warn}; use once_cell::sync::Lazy; use rocket::get; use tauri::api::process::{Command, CommandChild, CommandEvent}; @@ -106,43 +106,11 @@ pub fn start_dotnet_server() { *server_spawn_clone.lock().unwrap() = Some(child); // Log the output of the .NET server: + // NOTE: Log events are sent via structured HTTP API calls. + // This loop serves for fundamental output (e.g., startup errors). while let Some(CommandEvent::Stdout(line)) = rx.recv().await { - - // Remove newline characters from the end: let line = line.trim_end(); - - // Starts the line with '=>'? - if line.starts_with("=>") { - // Yes. This means that the line is a log message from the .NET server. - // The format is: ' [] : '. - // We try to parse this line and log it with the correct log level: - let line = line.trim_start_matches("=>").trim(); - let parts = line.split_once(": ").unwrap(); - let left_part = parts.0.trim(); - let message = parts.1.trim(); - let parts = left_part.split_once("] ").unwrap(); - let level = parts.0.split_once("[").unwrap().1.trim(); - let source = parts.1.trim(); - match level { - "Trace" => debug!(Source = ".NET Server", Comp = source; "{message}"), - "Debug" => debug!(Source = ".NET Server", Comp = source; "{message}"), - "Information" => info!(Source = ".NET Server", Comp = source; "{message}"), - "Warning" => warn!(Source = ".NET Server", Comp = source; "{message}"), - "Error" => error!(Source = ".NET Server", Comp = source; "{message}"), - "Critical" => error!(Source = ".NET Server", Comp = source; "{message}"), - - _ => error!(Source = ".NET Server", Comp = source; "{message} (unknown log level '{level}')"), - } - } else { - let lower_line = line.to_lowercase(); - if lower_line.contains("error") { - error!(Source = ".NET Server"; "{line}"); - } else if lower_line.contains("warning") { - warn!(Source = ".NET Server"; "{line}"); - } else { - info!(Source = ".NET Server"; "{line}"); - } - } + info!(Source = ".NET Server (stdout)"; "{line}"); } }); diff --git a/runtime/src/log.rs b/runtime/src/log.rs index b626639a..a38d942c 100644 --- a/runtime/src/log.rs +++ b/runtime/src/log.rs @@ -6,11 +6,11 @@ use std::path::{absolute, PathBuf}; use std::sync::OnceLock; use flexi_logger::{DeferredNow, Duplicate, FileSpec, Logger, LoggerHandle}; use flexi_logger::writers::FileLogWriter; -use log::kv; +use log::{kv, Level}; use log::kv::{Key, Value, VisitSource}; -use rocket::get; +use rocket::{get, post}; use rocket::serde::json::Json; -use rocket::serde::Serialize; +use rocket::serde::{Deserialize, Serialize}; use crate::api_token::APIToken; use crate::environment::is_dev; @@ -65,6 +65,7 @@ pub fn init_logging() { .duplicate_to_stdout(Duplicate::All) .use_utc() .format_for_files(file_logger_format) + .set_palette("196;208;34;7;8".to_string()) // error, warn, info, debug, trace .format_for_stderr(terminal_colored_logger_format) .format_for_stdout(terminal_colored_logger_format) .start().expect("Cannot start logging"); @@ -231,9 +232,88 @@ pub async fn get_log_paths(_token: APIToken) -> Json { }) } +/// Converts a .NET log level string to a Rust log::Level. +fn parse_dotnet_log_level(level: &str) -> Level { + match level { + "Trace" | "Debug" => Level::Debug, + "Information" => Level::Info, + "Warning" => Level::Warn, + "Error" | "Critical" => Level::Error, + + _ => Level::Error, // Fallback for unknown levels + } +} + +/// Logs a message with the specified level, including optional exception and stack trace. +fn log_with_level( + level: Level, + category: &str, + message: &str, + exception: Option<&String>, + stack_trace: Option<&String> +) { + // Log the main message: + log::log!(level, Source = ".NET Server", Comp = category; "{message}"); + + // Log exception if present: + if let Some(ex) = exception { + log::log!(level, Source = ".NET Server", Comp = category; " Exception: {ex}"); + } + + // Log stack trace if present: + if let Some(stack_trace) = stack_trace { + for line in stack_trace.lines() { + log::log!(level, Source = ".NET Server", Comp = category; " {line}"); + } + } +} + +/// Logs an event from the .NET server. +#[post("/log/event", data = "")] +pub fn log_event(_token: APIToken, event: Json) -> Json { + let event = event.into_inner(); + let level = parse_dotnet_log_level(&event.level); + let message = event.message.as_str(); + let category = event.category.as_str(); + + log_with_level( + level, + category, + message, + event.exception.as_ref(), + event.stack_trace.as_ref() + ); + + // Log warning for unknown levels: + if !matches!(event.level.as_str(), "Trace" | "Debug" | "Information" | "Warning" | "Error" | "Critical") { + log::warn!(Source = ".NET Server", Comp = category; "Unknown log level '{}' received.", event.level); + } + + Json(LogEventResponse { success: true, issue: String::new() }) +} + /// The response the get log paths request. #[derive(Serialize)] pub struct LogPathsResponse { log_startup_path: String, log_app_path: String, +} + +/// A log event from the .NET server. +#[derive(Deserialize)] +#[allow(unused)] +pub struct LogEvent { + timestamp: String, + level: String, + category: String, + message: String, + exception: Option, + stack_trace: Option, +} + +/// The response to a log event request. +#[derive(Serialize)] +pub struct LogEventResponse { + success: bool, + issue: String, } \ No newline at end of file diff --git a/runtime/src/runtime_api.rs b/runtime/src/runtime_api.rs index d08c5abe..e517068d 100644 --- a/runtime/src/runtime_api.rs +++ b/runtime/src/runtime_api.rs @@ -74,6 +74,7 @@ pub fn start_runtime_api() { crate::app_window::install_update, crate::app_window::select_directory, crate::app_window::select_file, + crate::app_window::select_files, crate::app_window::save_file, crate::secret::get_secret, crate::secret::store_secret, @@ -86,6 +87,7 @@ pub fn start_runtime_api() { crate::environment::read_enterprise_env_config_server_url, crate::file_data::extract_data, crate::log::get_log_paths, + crate::log::log_event, ]) .ignite().await.unwrap() .launch().await.unwrap(); diff --git a/runtime/tauri.conf.json b/runtime/tauri.conf.json index 8b2cb703..ec4ef9f0 100644 --- a/runtime/tauri.conf.json +++ b/runtime/tauri.conf.json @@ -6,7 +6,7 @@ }, "package": { "productName": "MindWork AI Studio", - "version": "0.9.54" + "version": "26.1.1" }, "tauri": { "allowlist": {