From 31f5a79b5242e2e52b2413ac004aa0b7f68451e1 Mon Sep 17 00:00:00 2001 From: thepra Date: Wed, 29 Jul 2020 01:31:32 +0200 Subject: [PATCH] Implementing console commands --- Seenginx/Components/FilesWithEditor.razor | 43 ++++++++++---------- Seenginx/Components/FilesWithEditor.razor.cs | 2 + Seenginx/Pages/Nginx.razor.cs | 23 +++++++---- Seenginx/SCSS/override-framework.scss | 11 +++++ Seenginx/SCSS/utility.scss | 10 +++++ Seenginx/Services/CommandService.cs | 39 ++++++++++++++++++ Seenginx/Services/NginxService.cs | 38 +++++++++++++---- Seenginx/Shared/GenericPopup.razor | 32 +++++++-------- Seenginx/Startup.cs | 1 + Seenginx/wwwroot/css/main.css | 16 ++++++++ Seenginx/wwwroot/css/main.min.css | 2 +- 11 files changed, 163 insertions(+), 54 deletions(-) create mode 100644 Seenginx/Services/CommandService.cs diff --git a/Seenginx/Components/FilesWithEditor.razor b/Seenginx/Components/FilesWithEditor.razor index 794dc99..0530919 100644 --- a/Seenginx/Components/FilesWithEditor.razor +++ b/Seenginx/Components/FilesWithEditor.razor @@ -17,14 +17,6 @@ @if (IsAnyFileSelected) {
-
-
-
- - -
-
-
@SelectedFile.Name
@@ -91,20 +83,27 @@
@if (IsAnyFileSelected) { -
- - @if (HasTesting && !IsDraftMode) - { - - } - @if (IsDraftMode) - { - - } - else - { - - } +
+
+
+
+
+ + +
+
+
+
+
+
+
+ + + + +
+
+
} else diff --git a/Seenginx/Components/FilesWithEditor.razor.cs b/Seenginx/Components/FilesWithEditor.razor.cs index cae2e9e..dc471ba 100644 --- a/Seenginx/Components/FilesWithEditor.razor.cs +++ b/Seenginx/Components/FilesWithEditor.razor.cs @@ -86,6 +86,8 @@ namespace Seenginx.Components DraftMode = IsDraftMode ? "on" : "off"; if (IsDraftMode) await JsRuntime.InvokeVoidAsync("UpdateEditor", SelectedFile.DraftBody ?? SelectedFile.Body); + else + await JsRuntime.InvokeVoidAsync("UpdateEditor", SelectedFile.Body); } protected async Task OnFileClick(MouseEventArgs e, CFile file) diff --git a/Seenginx/Pages/Nginx.razor.cs b/Seenginx/Pages/Nginx.razor.cs index 528fc2d..794e3d1 100644 --- a/Seenginx/Pages/Nginx.razor.cs +++ b/Seenginx/Pages/Nginx.razor.cs @@ -87,7 +87,7 @@ namespace Seenginx.Pages var validationResult = await NginxService.ValidateForRenameFileAsync(ConfigFiles, SelectedFile, result.Data.ToString()); if (!validationResult.AllOk) { - var popupAwait = Modal.Show(string.Empty, new ModalParameters().Setup(PopupType.Ok, validationResult.ErrorMessage)); + var popupAwait = Modal.Show(string.Empty, new ModalParameters().Setup(PopupType.Ok, validationResult.ErrorMessage)); await popupAwait.Result; return; } @@ -95,7 +95,7 @@ namespace Seenginx.Pages var renameResult = await NginxService.RenameFileAsync(SelectedFile, $"{result.Data}.conf"); if (!renameResult.AllOk) { - var popupAwait = Modal.Show(string.Empty, new ModalParameters().Setup(PopupType.Ok, renameResult.ErrorMessage)); + var popupAwait = Modal.Show(string.Empty, new ModalParameters().Setup(PopupType.Ok, renameResult.ErrorMessage)); await popupAwait.Result; return; } @@ -124,13 +124,13 @@ namespace Seenginx.Pages public async Task SaveDraftFileAsync() { - var validationResult = await NginxService.ValidateForSaveDraftFileAsync(SelectedFile); + //var validationResult = await NginxService.ValidateForSaveDraftFileAsync(SelectedFile); - if (!validationResult.AllOk) - { - await Modal.Show(string.Empty, new ModalParameters().Setup(PopupType.Ok, validationResult.ErrorMessage)).Result; - return; - } + //if (!validationResult.AllOk) + //{ + // await Modal.Show(string.Empty, new ModalParameters().Setup(PopupType.Ok, validationResult.ErrorMessage)).Result; + // return; + //} var saveDraftResult = await NginxService.SaveDraftFileAsync(SelectedFile); @@ -143,7 +143,14 @@ namespace Seenginx.Pages public async Task TestConfiguration() { + var testResult = await NginxService.TestFileAsync(SelectedFile); + if (!testResult.AllOk) + { + await Modal.Show(string.Empty, new ModalParameters().Setup(PopupType.Ok, $"{testResult.ErrorMessage}, ex [{testResult.Exception.Message}]")).Result; + return; + } + await Modal.Show(string.Empty, new ModalParameters().Setup(PopupType.Ok, testResult.Data)).Result; } public async Task DeleteFile() diff --git a/Seenginx/SCSS/override-framework.scss b/Seenginx/SCSS/override-framework.scss index ab2300c..ac60780 100644 --- a/Seenginx/SCSS/override-framework.scss +++ b/Seenginx/SCSS/override-framework.scss @@ -101,3 +101,14 @@ html { .switch[type="checkbox"] + label { font-size: inherit } + +.switch[type="checkbox"].is-rounded + label::before, +.switch[type="checkbox"].is-rounded + label::before { + box-shadow: inset -3px -3px 6px rgba($light-shadow, .5), inset 3px 3px 6px rgba($dark-shadow, .5); + border: none +} + +.button.noStyle { + border: none; + background: transparent; +} diff --git a/Seenginx/SCSS/utility.scss b/Seenginx/SCSS/utility.scss index 3117e09..dc87f08 100644 --- a/Seenginx/SCSS/utility.scss +++ b/Seenginx/SCSS/utility.scss @@ -32,6 +32,10 @@ &Finger { cursor: pointer } + + &NoFinger { + cursor: none + } } .neomorph { @@ -105,6 +109,12 @@ transform: scale(1.1); } + &InsetPlain { + box-shadow: inset 3px 3px 6px rgba($dark-shadow, .5), inset -3px -3px 6px rgba($light-shadow, .5); + background: none !important; + border: none !important; + } + &Plain { box-shadow: -3px -3px 6px rgba($light-shadow, .5), 3px 3px 6px rgba($dark-shadow, .5); background: none !important; diff --git a/Seenginx/Services/CommandService.cs b/Seenginx/Services/CommandService.cs new file mode 100644 index 0000000..598b50b --- /dev/null +++ b/Seenginx/Services/CommandService.cs @@ -0,0 +1,39 @@ +using Seenginx.Models; +using System; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; + +namespace Seenginx.Services +{ + public class CommandService + { + public async Task> RunCommandAsync(string command) + { + var runResult = new Result(); + try + { + var output = string.Empty; + + var cmd = new ProcessStartInfo("CMD.exe", $"/C {command}"); + cmd.UseShellExecute = false; + cmd.RedirectStandardInput = true; + cmd.RedirectStandardOutput = true; + cmd.CreateNoWindow = true; + if (Environment.OSVersion.Platform.ToString().StartsWith("Win")) + cmd.WorkingDirectory = @"C:\Program Files\nginx"; + + using (var process = Process.Start(cmd)) + using (var reader = process.StandardOutput) + output = reader.ReadToEnd(); + + runResult.SetData(output); + return runResult; + } + catch (Exception ex) + { + return runResult.Invalidate($"Error at running the command '{command}'", ex); + } + } + } +} diff --git a/Seenginx/Services/NginxService.cs b/Seenginx/Services/NginxService.cs index a8b70bc..c5669e9 100644 --- a/Seenginx/Services/NginxService.cs +++ b/Seenginx/Services/NginxService.cs @@ -3,6 +3,7 @@ using Seenginx.Models; using Seenginx.Services.Models; using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Security.AccessControl; @@ -15,9 +16,12 @@ namespace Seenginx.Services { private readonly ConfigPaths ConfigPaths; - public NginxService(ConfigPaths configPaths) + private readonly CommandService CommandService; + + public NginxService(ConfigPaths configPaths, CommandService commandService) { ConfigPaths = configPaths; + CommandService = commandService; } public async Task> GetFilesAsync() @@ -250,7 +254,7 @@ namespace Seenginx.Services { var draftPathName = $"{configFile.FullPath}.draft"; - if (File.Exists(draftPathName)) + if (!File.Exists(draftPathName)) return validationResult.Invalidate($"File '{draftPathName}' not found."); return validationResult; @@ -290,7 +294,7 @@ namespace Seenginx.Services - if (File.Exists(selectedConfigFile.FullPath)) + if (!File.Exists(selectedConfigFile.FullPath)) return renameResult.Invalidate($"Original file '{selectedConfigFile.FullPath}' not found."); var newPathName = Path.Combine(ConfigPaths.NginxPath, selectedConfigFile.Folder, $"{newName}.conf"); @@ -327,10 +331,30 @@ namespace Seenginx.Services public async Task> TestFileAsync(ConfigFile configFile) { - await Task.Run(() => { }); - var result = new Result(); - result.SetData("Uhu"); - return result; + var command1 = string.Empty; + var command2 = string.Empty; + var runResult = new Result(); + var originalPathName = Path.Combine(ConfigPaths.NginxPath, configFile.Folder, $"{configFile.Name}.conf"); + switch (Environment.OSVersion.Platform) + { + case PlatformID.Win32S: + case PlatformID.Win32Windows: + case PlatformID.Win32NT: + case PlatformID.WinCE: + //command1 = @$"cd ""C:\Program Files\nginx"""; + command2 = @$"nginx.exe -c ""{originalPathName}"" -t"; + break; + case PlatformID.Unix: + command1 = ""; + break; + case PlatformID.Xbox: + case PlatformID.MacOSX: + return runResult.Invalidate($"Invalid platform '{Environment.OSVersion.Platform}'"); + } + + runResult = await CommandService.RunCommandAsync(/*command1,*/ command2); + + return runResult; } //public async Task DeleteFileAsync(ConfigFile configFile) diff --git a/Seenginx/Shared/GenericPopup.razor b/Seenginx/Shared/GenericPopup.razor index 6cbc5e2..33824ea 100644 --- a/Seenginx/Shared/GenericPopup.razor +++ b/Seenginx/Shared/GenericPopup.razor @@ -23,86 +23,86 @@
- +
break; case PopupType.OkCancel:
- +
- +
break; case PopupType.YesNo:
- +
- +
break; case PopupType.YesNoCancel:
- +
- +
- +
break; diff --git a/Seenginx/Startup.cs b/Seenginx/Startup.cs index 83bc61d..aab6541 100644 --- a/Seenginx/Startup.cs +++ b/Seenginx/Startup.cs @@ -38,6 +38,7 @@ namespace Seenginx configPaths.SystemDPath = @"C:\systemd\system\"; services.AddSingleton(configPaths); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/Seenginx/wwwroot/css/main.css b/Seenginx/wwwroot/css/main.css index 814a317..3fa52d1 100644 --- a/Seenginx/wwwroot/css/main.css +++ b/Seenginx/wwwroot/css/main.css @@ -59,6 +59,9 @@ html { .isFinger { cursor: pointer; } +.isNoFinger { + cursor: none; } + .neomorph { /*box-shadow: 0px 0px 4px 4px rgba($background, 1), -8px -8px 16px rgba($light-shadow, 1), 8px 8px 16px rgba($dark-shadow, 1);*/ box-shadow: -8px -8px 16px rgba(251, 238, 208, 0.5), 8px 8px 16px rgba(241, 185, 65, 0.5); } @@ -106,6 +109,10 @@ html { background: none !important; border: none !important; transform: scale(1.1); } + .neoBtnSmallInsetPlain { + box-shadow: inset 3px 3px 6px rgba(241, 185, 65, 0.5), inset -3px -3px 6px rgba(251, 238, 208, 0.5); + background: none !important; + border: none !important; } .neoBtnSmallPlain { box-shadow: -3px -3px 6px rgba(251, 238, 208, 0.5), 3px 3px 6px rgba(241, 185, 65, 0.5); background: none !important; @@ -235,6 +242,15 @@ html { .switch[type="checkbox"] + label { font-size: inherit; } +.switch[type="checkbox"].is-rounded + label::before, +.switch[type="checkbox"].is-rounded + label::before { + box-shadow: inset -3px -3px 6px rgba(251, 238, 208, 0.5), inset 3px 3px 6px rgba(241, 185, 65, 0.5); + border: none; } + +.button.noStyle { + border: none; + background: transparent; } + .main { display: flex; flex-wrap: nowrap; diff --git a/Seenginx/wwwroot/css/main.min.css b/Seenginx/wwwroot/css/main.min.css index 2212e71..3609163 100644 --- a/Seenginx/wwwroot/css/main.min.css +++ b/Seenginx/wwwroot/css/main.min.css @@ -1 +1 @@ -#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;}html{scrollbar-color:#f1b941 transparent;scrollbar-width:thin;scrollbar-arrow-color:#fbeed0;scrollbar-base-color:#f6d287;scrollbar-darkshadow-color:#f1b941;overflow-x:auto;overflow-y:auto;}*{scrollbar-width:inherit;}.isHidden{display:none;}@media only screen and (max-width:37.5em){.isHiddenMobile{display:none;}}.petiteCaps{font-variant:petite-caps;}.flexCenter{display:flex;align-content:center;align-items:center;}.noBottomMargin{margin-bottom:0 !important;}.isNoWrap{white-space:nowrap;}.isFinger{cursor:pointer;}.neomorph{box-shadow:-8px -8px 16px rgba(251,238,208,.5),8px 8px 16px rgba(241,185,65,.5);}.neomorphSmall{box-shadow:-6px -6px 12px rgba(251,238,208,.5),6px 6px 12px rgba(241,185,65,.5);}.neomorphXSmall{box-shadow:-3px -3px 6px rgba(251,238,208,.5),3px 3px 6px rgba(241,185,65,.5);}.neomorphBottom{filter:drop-shadow(8px 8px 14px #f1b941);}.neomorphInset{box-shadow:inset 8px 8px 16px rgba(241,185,65,.5),inset -8px -8px 16px rgba(251,238,208,.5);}.neomorphInsetSmall{box-shadow:inset 6px 6px 12px rgba(241,185,65,.5),inset -6px -6px 12px rgba(251,238,208,.5);}.neomorphInsetXSmall{box-shadow:inset 3px 3px 6px rgba(241,185,65,.5),inset -3px -3px 6px rgba(251,238,208,.5);}.neoBtn{box-shadow:-3px -3px 6px rgba(251,238,208,.5),3px 3px 6px rgba(241,185,65,.5);background:none !important;border:none !important;transition:all .2s linear;-webkit-backface-visibility:hidden;backface-visibility:hidden;}.neoBtn:focus{box-shadow:-3px -3px 6px rgba(251,238,208,.5),3px 3px 6px rgba(241,185,65,.5) !important;}.neoBtn:hover{box-shadow:-6px -6px 12px rgba(251,238,208,.5),6px 6px 12px rgba(241,185,65,.5);background:none !important;border:none !important;transform:scale(1.1);}.neoBtnSmall{box-shadow:-2px -2px 4px rgba(251,238,208,.5),2px 2px 4px rgba(241,185,65,.5);background:none !important;border:none !important;transition:all .2s linear;-webkit-backface-visibility:hidden;backface-visibility:hidden;}.neoBtnSmall:focus{box-shadow:-2px -2px 4px rgba(251,238,208,.5),2px 2px 4px rgba(241,185,65,.5) !important;}.neoBtnSmall:hover{box-shadow:-4px -4px 8px rgba(251,238,208,.5),4px 4px 8px rgba(241,185,65,.5);background:none !important;border:none !important;transform:scale(1.1);}.neoBtnSmallPlain{box-shadow:-3px -3px 6px rgba(251,238,208,.5),3px 3px 6px rgba(241,185,65,.5);background:none !important;border:none !important;}.neoFile{box-shadow:0 0 0 rgba(251,238,208,.5),0 0 0 rgba(241,185,65,.5) !important;transition:all .2s linear;-webkit-backface-visibility:hidden !important;backface-visibility:hidden !important;background:#f6d287 !important;}.neoFile:hover{box-shadow:-3px -3px 6px rgba(251,238,208,.5),3px 3px 6px rgba(241,185,65,.5) !important;}.neoFile.isSelected{box-shadow:inset 3px 3px 6px rgba(241,185,65,.5),inset -3px -3px 6px rgba(251,238,208,.5) !important;}.neoFile.is-active,.neoFile.active{box-shadow:inset 3px 3px 6px rgba(241,185,65,.5),inset -3px -3px 6px rgba(251,238,208,.5) !important;color:#181515 !important;}.neoInput{box-shadow:inset 2px 2px 4px rgba(241,185,65,.5),inset -2px -2px 4px rgba(251,238,208,.5) !important;background:#f6d287 !important;border:none !important;}.neoInput:focus{border:none !important;}.neoSelect>select{box-shadow:inset 2px 2px 4px rgba(241,185,65,.5),inset -2px -2px 4px rgba(251,238,208,.5) !important;background:#f6d287 !important;border:none !important;}.neoSelect>select:focus{border:none !important;}.gradientBackground{background:linear-gradient(to right bottom,#f7d794,#f5cd79);}.borderR{border-radius:14px;}.borderRSmall{border-radius:7px !important;}.borderRBig{border-radius:28px;}.bg{background:#f6d287;}.sameMarginBottom{margin-bottom:1rem !important;}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.fullwidth{width:100%;}@font-face{font-family:'Ubuntu';src:url(/fonts/ubuntu-light-webfont.woff2) format("woff2");font-weight:300;font-style:normal;}@font-face{font-family:'Ubuntu-Mono';src:url(/fonts/ubuntumono-regular-webfont.woff2) format("woff2");font-style:normal;}html{font-family:Ubuntu,sans-serif;}.menu-list li a{font-family:Ubuntu-Mono,'Noto Mono';}#editor{position:absolute;top:0;right:0;bottom:0;left:0;}.select:not(.is-multiple):not(.is-loading)::after{border-color:#f1b941;}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#be860e;}.ace-solarized-light{background:#f6d287;}.ace-solarized-light .ace_gutter{background:#f5cd79;}.ace-solarized-light .ace_gutter-active-line{border-radius:50px 0 0 50px;}.ace-solarized-light .ace_marker-layer .ace_active-line{border-radius:0 50px 50px 0;}.modal-content{border-radius:28px;}.modal-card-head,.modal-card-foot{background:#f6d287;}.modal-card-head{border:none;border-radius:0;}.modal-card-body{background:#f6d287;}.modal-card-foot{border:none;border-radius:0;}.blazored-modal{background-color:transparent;border-radius:0;border:none;padding:0;box-shadow:none;}.blazored-modal-container{left:0;top:0;}.blazored-modal-overlay{background:#f6d287;}.switch[type="checkbox"]+label{font-size:inherit;}.main{display:flex;flex-wrap:nowrap;align-items:start;width:100%;height:100vh;padding:2.5%;}.mainNav{overflow-y:auto;padding:14px;width:17%;margin-right:40px;}.mainPage{overflow-y:auto;padding:28px;width:calc(83% - 40px);align-self:stretch;}.filesWithEditor{display:grid;grid-template-areas:"filterFiles fileTitle" "files codeEditor" "filesActions editorActions";grid-gap:25px;height:100%;max-height:100%;min-height:10%;grid-template-rows:30px auto 30px;grid-template-columns:28% auto;width:100%;}.filesWithEditor .filterFiles{grid-area:filterFiles;}.filesWithEditor .fileTitle{grid-area:fileTitle;}.filesWithEditor .fileTitle .field,.filesWithEditor .fileTitle .control{height:100%;}.filesWithEditor .files{grid-area:files;display:block;min-height:10%;padding:4% 0;}.filesWithEditor .filesList{display:flex;flex-direction:column;align-items:stretch;height:100%;min-height:10%;width:auto;padding:4% 7% 4% 8%;overflow-y:auto;margin-right:4%;}.filesWithEditor .codeEditor{grid-area:codeEditor;min-height:0;height:100%;position:relative;display:flex;justify-content:center;align-items:center;}.filesWithEditor .codeEditor .editor{height:100%;margin:0;width:100%;}.filesWithEditor .filesActions{grid-area:filesActions;}.filesWithEditor .editorActions{grid-area:editorActions;}.menu-list>li>.neoFile{margin-bottom:4%;}.confFile{padding:4% 6%;margin-bottom:3%;}.confFile:last-child{margin-bottom:0;}.stripe{display:flex;width:100%;height:100%;align-items:center;justify-content:center;font-size:300%;background:radial-gradient(90% 90%,#f7d794,#f5cd79);} \ No newline at end of file +#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;}html{scrollbar-color:#f1b941 transparent;scrollbar-width:thin;scrollbar-arrow-color:#fbeed0;scrollbar-base-color:#f6d287;scrollbar-darkshadow-color:#f1b941;overflow-x:auto;overflow-y:auto;}*{scrollbar-width:inherit;}.isHidden{display:none;}@media only screen and (max-width:37.5em){.isHiddenMobile{display:none;}}.petiteCaps{font-variant:petite-caps;}.flexCenter{display:flex;align-content:center;align-items:center;}.noBottomMargin{margin-bottom:0 !important;}.isNoWrap{white-space:nowrap;}.isFinger{cursor:pointer;}.isNoFinger{cursor:none;}.neomorph{box-shadow:-8px -8px 16px rgba(251,238,208,.5),8px 8px 16px rgba(241,185,65,.5);}.neomorphSmall{box-shadow:-6px -6px 12px rgba(251,238,208,.5),6px 6px 12px rgba(241,185,65,.5);}.neomorphXSmall{box-shadow:-3px -3px 6px rgba(251,238,208,.5),3px 3px 6px rgba(241,185,65,.5);}.neomorphBottom{filter:drop-shadow(8px 8px 14px #f1b941);}.neomorphInset{box-shadow:inset 8px 8px 16px rgba(241,185,65,.5),inset -8px -8px 16px rgba(251,238,208,.5);}.neomorphInsetSmall{box-shadow:inset 6px 6px 12px rgba(241,185,65,.5),inset -6px -6px 12px rgba(251,238,208,.5);}.neomorphInsetXSmall{box-shadow:inset 3px 3px 6px rgba(241,185,65,.5),inset -3px -3px 6px rgba(251,238,208,.5);}.neoBtn{box-shadow:-3px -3px 6px rgba(251,238,208,.5),3px 3px 6px rgba(241,185,65,.5);background:none !important;border:none !important;transition:all .2s linear;-webkit-backface-visibility:hidden;backface-visibility:hidden;}.neoBtn:focus{box-shadow:-3px -3px 6px rgba(251,238,208,.5),3px 3px 6px rgba(241,185,65,.5) !important;}.neoBtn:hover{box-shadow:-6px -6px 12px rgba(251,238,208,.5),6px 6px 12px rgba(241,185,65,.5);background:none !important;border:none !important;transform:scale(1.1);}.neoBtnSmall{box-shadow:-2px -2px 4px rgba(251,238,208,.5),2px 2px 4px rgba(241,185,65,.5);background:none !important;border:none !important;transition:all .2s linear;-webkit-backface-visibility:hidden;backface-visibility:hidden;}.neoBtnSmall:focus{box-shadow:-2px -2px 4px rgba(251,238,208,.5),2px 2px 4px rgba(241,185,65,.5) !important;}.neoBtnSmall:hover{box-shadow:-4px -4px 8px rgba(251,238,208,.5),4px 4px 8px rgba(241,185,65,.5);background:none !important;border:none !important;transform:scale(1.1);}.neoBtnSmallInsetPlain{box-shadow:inset 3px 3px 6px rgba(241,185,65,.5),inset -3px -3px 6px rgba(251,238,208,.5);background:none !important;border:none !important;}.neoBtnSmallPlain{box-shadow:-3px -3px 6px rgba(251,238,208,.5),3px 3px 6px rgba(241,185,65,.5);background:none !important;border:none !important;}.neoFile{box-shadow:0 0 0 rgba(251,238,208,.5),0 0 0 rgba(241,185,65,.5) !important;transition:all .2s linear;-webkit-backface-visibility:hidden !important;backface-visibility:hidden !important;background:#f6d287 !important;}.neoFile:hover{box-shadow:-3px -3px 6px rgba(251,238,208,.5),3px 3px 6px rgba(241,185,65,.5) !important;}.neoFile.isSelected{box-shadow:inset 3px 3px 6px rgba(241,185,65,.5),inset -3px -3px 6px rgba(251,238,208,.5) !important;}.neoFile.is-active,.neoFile.active{box-shadow:inset 3px 3px 6px rgba(241,185,65,.5),inset -3px -3px 6px rgba(251,238,208,.5) !important;color:#181515 !important;}.neoInput{box-shadow:inset 2px 2px 4px rgba(241,185,65,.5),inset -2px -2px 4px rgba(251,238,208,.5) !important;background:#f6d287 !important;border:none !important;}.neoInput:focus{border:none !important;}.neoSelect>select{box-shadow:inset 2px 2px 4px rgba(241,185,65,.5),inset -2px -2px 4px rgba(251,238,208,.5) !important;background:#f6d287 !important;border:none !important;}.neoSelect>select:focus{border:none !important;}.gradientBackground{background:linear-gradient(to right bottom,#f7d794,#f5cd79);}.borderR{border-radius:14px;}.borderRSmall{border-radius:7px !important;}.borderRBig{border-radius:28px;}.bg{background:#f6d287;}.sameMarginBottom{margin-bottom:1rem !important;}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.fullwidth{width:100%;}@font-face{font-family:'Ubuntu';src:url(/fonts/ubuntu-light-webfont.woff2) format("woff2");font-weight:300;font-style:normal;}@font-face{font-family:'Ubuntu-Mono';src:url(/fonts/ubuntumono-regular-webfont.woff2) format("woff2");font-style:normal;}html{font-family:Ubuntu,sans-serif;}.menu-list li a{font-family:Ubuntu-Mono,'Noto Mono';}#editor{position:absolute;top:0;right:0;bottom:0;left:0;}.select:not(.is-multiple):not(.is-loading)::after{border-color:#f1b941;}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#be860e;}.ace-solarized-light{background:#f6d287;}.ace-solarized-light .ace_gutter{background:#f5cd79;}.ace-solarized-light .ace_gutter-active-line{border-radius:50px 0 0 50px;}.ace-solarized-light .ace_marker-layer .ace_active-line{border-radius:0 50px 50px 0;}.modal-content{border-radius:28px;}.modal-card-head,.modal-card-foot{background:#f6d287;}.modal-card-head{border:none;border-radius:0;}.modal-card-body{background:#f6d287;}.modal-card-foot{border:none;border-radius:0;}.blazored-modal{background-color:transparent;border-radius:0;border:none;padding:0;box-shadow:none;}.blazored-modal-container{left:0;top:0;}.blazored-modal-overlay{background:#f6d287;}.switch[type="checkbox"]+label{font-size:inherit;}.switch[type="checkbox"].is-rounded+label::before,.switch[type="checkbox"].is-rounded+label::before{box-shadow:inset -3px -3px 6px rgba(251,238,208,.5),inset 3px 3px 6px rgba(241,185,65,.5);border:none;}.button.noStyle{border:none;background:transparent;}.main{display:flex;flex-wrap:nowrap;align-items:start;width:100%;height:100vh;padding:2.5%;}.mainNav{overflow-y:auto;padding:14px;width:17%;margin-right:40px;}.mainPage{overflow-y:auto;padding:28px;width:calc(83% - 40px);align-self:stretch;}.filesWithEditor{display:grid;grid-template-areas:"filterFiles fileTitle" "files codeEditor" "filesActions editorActions";grid-gap:25px;height:100%;max-height:100%;min-height:10%;grid-template-rows:30px auto 30px;grid-template-columns:28% auto;width:100%;}.filesWithEditor .filterFiles{grid-area:filterFiles;}.filesWithEditor .fileTitle{grid-area:fileTitle;}.filesWithEditor .fileTitle .field,.filesWithEditor .fileTitle .control{height:100%;}.filesWithEditor .files{grid-area:files;display:block;min-height:10%;padding:4% 0;}.filesWithEditor .filesList{display:flex;flex-direction:column;align-items:stretch;height:100%;min-height:10%;width:auto;padding:4% 7% 4% 8%;overflow-y:auto;margin-right:4%;}.filesWithEditor .codeEditor{grid-area:codeEditor;min-height:0;height:100%;position:relative;display:flex;justify-content:center;align-items:center;}.filesWithEditor .codeEditor .editor{height:100%;margin:0;width:100%;}.filesWithEditor .filesActions{grid-area:filesActions;}.filesWithEditor .editorActions{grid-area:editorActions;}.menu-list>li>.neoFile{margin-bottom:4%;}.confFile{padding:4% 6%;margin-bottom:3%;}.confFile:last-child{margin-bottom:0;}.stripe{display:flex;width:100%;height:100%;align-items:center;justify-content:center;font-size:300%;background:radial-gradient(90% 90%,#f7d794,#f5cd79);} \ No newline at end of file