diff --git a/MP.Data/DatabaseModels/MappaStatoExpl.cs b/MP.Data/DatabaseModels/MappaStatoExpl.cs index e529b4ea..bebcf16e 100644 --- a/MP.Data/DatabaseModels/MappaStatoExpl.cs +++ b/MP.Data/DatabaseModels/MappaStatoExpl.cs @@ -15,7 +15,7 @@ namespace MP.Data.DatabaseModels public string CodArticolo { get; set; } public string Disegno { get; set; } public int? NumPezzi { get; set; } - public decimal? Tcassegnato { get; set; } + public decimal? TCAssegnato { get; set; } public DateTime? DataInizioOdl { get; set; } public string Semaforo { get; set; } public int? IdxStato { get; set; } @@ -26,11 +26,11 @@ namespace MP.Data.DatabaseModels public decimal? TempoOn { get; set; } public decimal? TempoAuto { get; set; } public decimal? TempoRun { get; set; } - public decimal? Tcmedio { get; set; } - public decimal? Tclav { get; set; } - public decimal? Tceff { get; set; } - public decimal? TcmedioRt { get; set; } - public decimal? TclavRt { get; set; } - public decimal? TceffRt { get; set; } + public decimal? TCMedio { get; set; } + public decimal? TCLav { get; set; } + public decimal? TCEff { get; set; } + public decimal? TCMedioRt { get; set; } + public decimal? TCLavRt { get; set; } + public decimal? TCEffRt { get; set; } } } diff --git a/MP.Data/MoonProContext.cs b/MP.Data/MoonProContext.cs index 40b2ed1c..7cd12b19 100644 --- a/MP.Data/MoonProContext.cs +++ b/MP.Data/MoonProContext.cs @@ -153,37 +153,37 @@ namespace MP.Data .HasMaxLength(50) .HasDefaultValueSql("('')"); - entity.Property(e => e.Tcassegnato) + entity.Property(e => e.TCAssegnato) .HasColumnType("decimal(18, 8)") .HasColumnName("TCAssegnato") .HasDefaultValueSql("((1))"); - entity.Property(e => e.Tceff) + entity.Property(e => e.TCEff) .HasColumnType("decimal(18, 8)") .HasColumnName("TCEff") .HasDefaultValueSql("((0))"); - entity.Property(e => e.TceffRt) + entity.Property(e => e.TCEffRt) .HasColumnType("decimal(18, 8)") .HasColumnName("TCEffRT") .HasDefaultValueSql("((0))"); - entity.Property(e => e.Tclav) + entity.Property(e => e.TCLav) .HasColumnType("decimal(18, 8)") .HasColumnName("TCLav") .HasDefaultValueSql("((0))"); - entity.Property(e => e.TclavRt) + entity.Property(e => e.TCLavRt) .HasColumnType("decimal(18, 8)") .HasColumnName("TCLavRT") .HasDefaultValueSql("((0))"); - entity.Property(e => e.Tcmedio) + entity.Property(e => e.TCMedio) .HasColumnType("decimal(18, 8)") .HasColumnName("TCMedio") .HasDefaultValueSql("((0))"); - entity.Property(e => e.TcmedioRt) + entity.Property(e => e.TCMedioRt) .HasColumnType("decimal(18, 8)") .HasColumnName("TCMedioRT") .HasDefaultValueSql("((0))"); diff --git a/MP.Mon/Data/WeatherForecast.cs b/MP.Mon/Data/WeatherForecast.cs deleted file mode 100644 index c0004e5e..00000000 --- a/MP.Mon/Data/WeatherForecast.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MP.Mon.Data -{ - public class WeatherForecast - { - public DateTime Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } - } -} \ No newline at end of file diff --git a/MP.Mon/Data/WeatherForecastService.cs b/MP.Mon/Data/WeatherForecastService.cs deleted file mode 100644 index 6b8e22db..00000000 --- a/MP.Mon/Data/WeatherForecastService.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace MP.Mon.Data -{ - public class WeatherForecastService - { - private static readonly string[] Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - public Task GetForecastAsync(DateTime startDate) - { - return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = startDate.AddDays(index), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }).ToArray()); - } - } -} \ No newline at end of file diff --git a/MP.Mon/MP.Mon.csproj b/MP.Mon/MP.Mon.csproj index 054f6762..12c79581 100644 --- a/MP.Mon/MP.Mon.csproj +++ b/MP.Mon/MP.Mon.csproj @@ -6,6 +6,14 @@ enable + + + + + + + + diff --git a/MP.Mon/Pages/Counter.razor b/MP.Mon/Pages/Counter.razor deleted file mode 100644 index ef23cb31..00000000 --- a/MP.Mon/Pages/Counter.razor +++ /dev/null @@ -1,18 +0,0 @@ -@page "/counter" - -Counter - -

Counter

- -

Current count: @currentCount

- - - -@code { - private int currentCount = 0; - - private void IncrementCount() - { - currentCount++; - } -} diff --git a/MP.Mon/Pages/FetchData.razor b/MP.Mon/Pages/FetchData.razor deleted file mode 100644 index b5ba00c3..00000000 --- a/MP.Mon/Pages/FetchData.razor +++ /dev/null @@ -1,48 +0,0 @@ -@page "/fetchdata" - -Weather forecast - -@using MP.Mon.Data -@inject WeatherForecastService ForecastService - -

Weather forecast

- -

This component demonstrates fetching data from a service.

- -@if (forecasts == null) -{ -

Loading...

-} -else -{ - - - - - - - - - - - @foreach (var forecast in forecasts) - { - - - - - - - } - -
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
-} - -@code { - private WeatherForecast[]? forecasts; - - protected override async Task OnInitializedAsync() - { - forecasts = await ForecastService.GetForecastAsync(DateTime.Now); - } -} diff --git a/MP.Mon/Pages/Index.razor b/MP.Mon/Pages/Index.razor index 3f9202cf..76a6da3e 100644 --- a/MP.Mon/Pages/Index.razor +++ b/MP.Mon/Pages/Index.razor @@ -6,12 +6,7 @@ -
-
-

Hello, world!

- - Welcome to your new app. -
+
@if (ListMSE == null) {
@@ -28,11 +23,70 @@ } else { + int currIdx = 0; foreach (var macchina in ListMSE) { -
- @macchina.CodMacchina +
+
+
+
+
@macchina.Nome
+
+
+
+
Art.
+
@macchina.CodArticolo
+
+
+
@macchina.DescrizioneStato
+
@($"{macchina.Durata:0.00}")
+ @*
OEE
+
xx%
*@ +
T.Ciclo
+
std: @getMinSec(macchina.TCAssegnato)
+
act: @getMinSec(macchina.TCLavRt)
+
Pezzi(prod/ord)
+
@macchina.PezziProd / @macchina.NumPezzi
+
+
+
+
+
+ +
+
+
+ currIdx++; + if (currIdx >= maxCol) + { + @*
+
*@ + currIdx = 0; + @((MarkupString)"
") + ; + } + } + // controllo se devo "chiudere riga... + int currNum = (currIdx % maxCol); + while (currNum < (maxCol)) + { + @((MarkupString)"
 
") + ; + currNum++; + } }
diff --git a/MP.Mon/Pages/Index.razor.cs b/MP.Mon/Pages/Index.razor.cs index 3ae92d10..3df00241 100644 --- a/MP.Mon/Pages/Index.razor.cs +++ b/MP.Mon/Pages/Index.razor.cs @@ -24,12 +24,28 @@ namespace MP.Mon.Pages { protected List? ListMSE = null; + protected int keepAliveMin = 5; // leggere da conf? + + protected int maxCol = 6; // leggere da conf? + + protected bool doAnimate = true; // leggere da conf? + + //protected string baseCss = "sem"; + //protected string baseCss = "semBlink"; + protected string baseCss = ""; + protected override async Task OnInitializedAsync() { + setupConf(); await reloadData(); //return base.OnInitializedAsync(); } + private void setupConf() + { + baseCss = doAnimate ? "semBlink" : "sem"; + } + [Inject] protected MpDataService MMDataService { get; set; } @@ -38,5 +54,45 @@ namespace MP.Mon.Pages ListMSE = await MMDataService.MseGetAll(); } + private string cssStatus(string codSemaforo) + { + return $"{baseCss}{codSemaforo.Substring(1,2)}"; + } + + private string cssComStatus(string semaforo, DateTime? lastUpdateN) + { + DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1); + string answ = cssStatus(semaforo); + if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * 60 / 2)) + { + answ = $"{baseCss}Ro"; + } + return answ; + } + + private bool showComErr(DateTime? lastUpdateN) + { + DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1); + bool answ = false; + if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * 60 / 2)) + { + answ = true; + } + return answ; + } + + private string getMinSec(decimal? currTimeMin) + { + string answ = "nd"; + TimeSpan tSpan = new TimeSpan(0); + try + { + tSpan = TimeSpan.FromMinutes((double)currTimeMin); + answ = tSpan.ToString("mm:ss"); + } + catch + { } + return answ; + } } } \ No newline at end of file diff --git a/MP.Mon/Program.cs b/MP.Mon/Program.cs index 068f5954..5d1efe06 100644 --- a/MP.Mon/Program.cs +++ b/MP.Mon/Program.cs @@ -29,8 +29,6 @@ builder.Services.AddSingleton(redisMultiplexer); builder.Services.AddSingleton(); //builder.Services.AddScoped(); -builder.Services.AddSingleton(); - var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/MP.Mon/Shared/MainLayout.razor b/MP.Mon/Shared/MainLayout.razor index 7da4e90a..f17b6251 100644 --- a/MP.Mon/Shared/MainLayout.razor +++ b/MP.Mon/Shared/MainLayout.razor @@ -3,16 +3,22 @@ MP.Mon
- -
-
- About +
+
+ + MP MONitor +
+
+ + @($"{DateTime.Now:dddd dd MMMM yyyy, HH:mm}") + + + EgalWare +
-
+
@Body
diff --git a/MP.Mon/Shared/MainLayout.razor.css b/MP.Mon/Shared/MainLayout.razor.css index 495fb804..f46e7c65 100644 --- a/MP.Mon/Shared/MainLayout.razor.css +++ b/MP.Mon/Shared/MainLayout.razor.css @@ -8,19 +8,19 @@ main { flex: 1; } -.sidebar,.sidebarSmall { - background-image: linear-gradient(180deg, rgb(5, 39, 103) 20%, #3aa6ff 90%); -} - .top-row { - background-color: #f7f7f7; - border-bottom: 1px solid #d6d5d5; - justify-content: flex-end; - height: 3.5rem; + background-color: #000000; + /*border-bottom: 1px solid #696969;*/ + color: #696969; + font-size: 1.4em; + height: 3rem; display: flex; align-items: center; - /*justify-content: space-evenly; - display: flex;*/ + justify-content: space-evenly; +} + +.mainHead{ + font-size: 1.7rem; } .top-row ::deep a, diff --git a/MP.Mon/compilerconfig.json b/MP.Mon/compilerconfig.json new file mode 100644 index 00000000..caa3f6ec --- /dev/null +++ b/MP.Mon/compilerconfig.json @@ -0,0 +1,10 @@ +[ + { + "outputFile": "wwwroot/css/site.css", + "inputFile": "wwwroot/css/site.less" + }, + { + "outputFile": "wwwroot/css/fonts.css", + "inputFile": "wwwroot/css/fonts.less" + } +] \ No newline at end of file diff --git a/MP.Mon/compilerconfig.json.defaults b/MP.Mon/compilerconfig.json.defaults new file mode 100644 index 00000000..41870cc5 --- /dev/null +++ b/MP.Mon/compilerconfig.json.defaults @@ -0,0 +1,71 @@ +{ + "compilers": { + "less": { + "autoPrefix": "", + "cssComb": "none", + "ieCompat": true, + "math": null, + "strictMath": false, + "strictUnits": false, + "relativeUrls": true, + "rootPath": "", + "sourceMapRoot": "", + "sourceMapBasePath": "", + "sourceMap": false + }, + "sass": { + "autoPrefix": "", + "loadPaths": "", + "style": "expanded", + "relativeUrls": true, + "sourceMap": false + }, + "nodesass": { + "autoPrefix": "", + "includePath": "", + "indentType": "space", + "indentWidth": 2, + "outputStyle": "nested", + "precision": 5, + "relativeUrls": true, + "sourceMapRoot": "", + "lineFeed": "", + "sourceMap": false + }, + "stylus": { + "sourceMap": false + }, + "babel": { + "sourceMap": false + }, + "coffeescript": { + "bare": false, + "runtimeMode": "node", + "sourceMap": false + }, + "handlebars": { + "root": "", + "noBOM": false, + "name": "", + "namespace": "", + "knownHelpersOnly": false, + "forcePartial": false, + "knownHelpers": [], + "commonjs": "", + "amd": false, + "sourceMap": false + } + }, + "minifiers": { + "css": { + "enabled": true, + "termSemicolons": true, + "gzip": false + }, + "javascript": { + "enabled": true, + "termSemicolons": true, + "gzip": false + } + } +} \ No newline at end of file diff --git a/MP.Mon/wwwroot/css/site.css b/MP.Mon/wwwroot/css/site.css index 4a8ba847..331403ae 100644 --- a/MP.Mon/wwwroot/css/site.css +++ b/MP.Mon/wwwroot/css/site.css @@ -15,10 +15,17 @@ display-4 { font-family: 'Lato', sans-serif; } html, +body { + height: 100%; +} +html, body { /*font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;*/ font-family: 'Roboto Condensed', sans-serif; line-height: 1.3; + background-image: linear-gradient(180deg, #010816 20%, #3aa6ff 90%); + background-size: auto 100%; + background-repeat: no-repeat; } h1:focus { outline: none; @@ -53,89 +60,6 @@ a, .striked { text-decoration: line-through; } -/* Gestione dropdown menu x week planner */ -.dropdown { - position: relative; - display: inline-block; -} -.dropdown:hover .dropdown-content, -.dropdown:hover .dropdown-content-top, -.dropdown:hover .dropdown-content-left, -.dropdown:hover .dropdown-content-top-left { - display: block; -} -.dropdown-content { - display: none; - position: absolute; - left: -10em; - min-width: 8em; - box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); - z-index: 1; -} -.dropdown-content .a { - color: black; - padding: 12px 16px; - text-decoration: none; - display: block; -} -.dropdown-content .a:hover { - background-color: #ddd; -} -.dropdown-content-top { - display: none; - position: absolute; - min-width: 8em; - box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); - z-index: 1; - top: -13.5em; - left: -10em; -} -.dropdown-content-top .a { - color: black; - padding: 12px 16px; - text-decoration: none; - display: block; -} -.dropdown-content-top .a:hover { - background-color: #ddd; -} -.dropdown-content-left { - display: none; - position: absolute; - left: -10em; - min-width: 8em; - box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); - z-index: 1; - left: -24em; -} -.dropdown-content-left .a { - color: black; - padding: 12px 16px; - text-decoration: none; - display: block; -} -.dropdown-content-left .a:hover { - background-color: #ddd; -} -.dropdown-content-top-left { - display: none; - position: absolute; - left: -10em; - min-width: 8em; - box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); - z-index: 1; - top: -13.5em; - left: -24em; -} -.dropdown-content-top-left .a { - color: black; - padding: 12px 16px; - text-decoration: none; - display: block; -} -.dropdown-content-top-left .a:hover { - background-color: #ddd; -} .textTrim { white-space: nowrap; overflow: hidden; @@ -216,109 +140,165 @@ a, .blazor-error-boundary::after { content: "An error has occurred."; } -/*------------------------------------------------------------------ -[ Shortcuts / .shortcuts ] -*/ -.shortcuts { - text-align: center; +/* Gestione specifica oggetti MON*/ +/* MAIN: gestione layout dinamico mappa... */ +.fontSmall { + font-size: 0.75em; } -.shortcuts .shortcut-icon { - font-size: 2rem; +.fontSmaller { + font-size: 0.6em; } -.shortcuts .shortcut { - min-width: 9rem; - min-height: 5rem; - display: inline-block; - padding: 2rem/3 0; - margin: 0 2px 1em; - vertical-align: top; - text-decoration: none; - background: #F3F3F3; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#eeeeee)); - background-image: -webkit-linear-gradient(top, #ffffff, 0%, #eeeeee, 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #eeeeee 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0); - border: 1px solid #ddd; - box-sizing: border-box; - border-radius: 1rem/2; +.statusMap { + background: #222; } -.shortcuts .shortcut-sm { - min-width: 4.5rem; - min-height: 3rem; - display: inline-block; - padding: 1rem/4 0; - margin: 0 2px 1em; - vertical-align: top; - text-decoration: none; - background: #F3F3F3; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#eeeeee)); - background-image: -webkit-linear-gradient(top, #ffffff, 0%, #eeeeee, 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #eeeeee 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0); - border: 1px solid #ddd; - box-sizing: border-box; - border-radius: 1rem/2; -} -.shortcuts .shortcut .shortcut-icon { - width: 100%; - margin-top: 0; - margin-bottom: 0; - font-size: 2rem; - color: #333; -} -.shortcuts .shortcut-sm .shortcut-icon { - width: 100%; - margin-top: 0; - margin-bottom: 0; - font-size: 2rem; - color: #333; -} -.shortcuts .shortcut:hover { - background: #E8E8E8; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fafafa), to(#e1e1e1)); - background-image: -webkit-linear-gradient(top, #fafafa, 0%, #e1e1e1, 100%); - background-image: -moz-linear-gradient(top, #fafafa 0%, #e1e1e1 100%); - background-image: linear-gradient(to bottom, #fafafa 0%, #e1e1e1 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0); -} -.shortcuts .shortcut-sm:hover { - background: #E8E8E8; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fafafa), to(#e1e1e1)); - background-image: -webkit-linear-gradient(top, #fafafa, 0%, #e1e1e1, 100%); - background-image: -moz-linear-gradient(top, #fafafa 0%, #e1e1e1 100%); - background-image: linear-gradient(to bottom, #fafafa 0%, #e1e1e1 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0); -} -.shortcuts .shortcut:active { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.shortcuts .shortcut-sm:active { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.shortcuts .shortcut:hover .shortcut-icon { - color: #C93; -} -.shortcuts .shortcut-sm:hover .shortcut-icon { - color: #666; -} -.shortcuts .shortcut-label { - display: block; - margin-top: 0.75em; +.statusMap .ui-title, +.statusMap .ui-li-aside { font-weight: 400; - color: #666; + text-transform: uppercase; + font-size: 2.5em; + line-height: 1.1em; + color: #DEDEDE; + text-shadow: 2px 2px 4px #000; + text-align: center; + background: linear-gradient(270deg, rgba(20, 20, 20, 0.7), rgba(100, 100, 100, 0.7), rgba(20, 20, 20, 0.7)); } -@media (max-width: 640px) { - .shortcuts .shortcut { - min-width: 8rem; - min-height: 4rem; +.statusMap .ui-footer { + color: #CDCDCD; + background: linear-gradient(270deg, rgba(10, 10, 10, 0.7), rgba(80, 80, 80, 0.7), rgba(10, 10, 10, 0.7)); +} +/* END: gestione layout dinamico mappa... */ +/* area semafori*/ +.semBlinkVe, +.semFixVe, +.semFixVe_b, +.semVe, +.semVe_b { + background: #009036; + background: rgba(0, 255, 80, 0.6); + color: #FFFFAA; +} +.semBlinkGr, +.semFixGr, +.semFixGr_b, +.semGr, +.semGr_b { + background-color: #bcbcbc; + background: rgba(180, 180, 180, 0.6); +} +.semGi { + text-align: left; + background: #8a8d27; + background: rgba(230, 210, 0, 0.6); + padding: 0px 4px 0px 4px; + color: #000; +} +.semGi_b, +.semFixGi, +.semFixGi_b { + text-align: left; + background: #f9ff18; + background: rgba(255, 255, 0, 0.8); + padding: 0px 4px 0px 4px; + color: #333; +} +.semBl { + text-align: left; + background: #000E7A; + background: rgba(0, 5, 200, 0.6); + padding: 0px 4px 0px 4px; + color: #959500; +} +.semBl_b, +.semFixBl, +.semFixBl_b { + text-align: left; + background: #243FFF; + background: rgba(60, 80, 255, 0.8); + padding: 0px 4px 0px 4px; + color: #ffff32; +} +.semRo { + text-align: left; + background-color: #7a000e; + background: rgba(200, 0, 5, 0.6); + padding: 0px 4px 0px 4px; + color: #959500; +} +.semRo_b, +.semFixRo, +.semFixRo_b { + text-align: left; + background-color: #ff243f; + background: rgba(255, 60, 80, 0.8); + padding: 0px 4px 0px 4px; + color: #ffff32; +} +/* semafori con animazione blinking */ +.no-cpu { + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} +@-webkit-keyframes blinkBack { + 0% { + background-position: 0% 50%; } - body { - font-size: 0.8em; + 50% { + background-position: 100% 50%; } + 100% { + background-position: 0% 50%; + } +} +@-moz-keyframes blinkBack { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} +@-o-keyframes blinkBack { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} +@keyframes blinkBack { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} +.semBlinkGi { + background: linear-gradient(270deg, #8a8d27, #f9ff18); + background-size: 400% 400%; + -webkit-animation: blinkBack 2s ease infinite; + -moz-animation: blinkBack 2s ease infinite; + -o-animation: blinkBack 2s ease infinite; + animation: blinkBack 2s ease infinite; +} +.semBlinkRo { + background: linear-gradient(270deg, #7a000e, #ff243f); + background-size: 400% 400%; + -webkit-animation: blinkBack 2s ease infinite; + -moz-animation: blinkBack 2s ease infinite; + -o-animation: blinkBack 2s ease infinite; + animation: blinkBack 2s ease infinite; + color: Yellow; } \ No newline at end of file diff --git a/MP.Mon/wwwroot/css/site.less b/MP.Mon/wwwroot/css/site.less index bda17c4b..70bc5e66 100644 --- a/MP.Mon/wwwroot/css/site.less +++ b/MP.Mon/wwwroot/css/site.less @@ -6,10 +6,17 @@ h1, h2, h3, h4, h5, h6, b, display-1, display-2, display-3, display-4 { font-family: 'Lato', sans-serif; } +html, body { + height: 100%; +} + html, body { /*font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;*/ font-family: 'Roboto Condensed', sans-serif; line-height: 1.3; + background-image: linear-gradient(180deg, rgb(1, 8, 22) 20%, #3aa6ff 90%); + background-size: auto 100%; + background-repeat: no-repeat; } @@ -55,61 +62,6 @@ a, .btn-link { text-decoration: line-through; } - -/* Gestione dropdown menu x week planner */ - -@dropTop: -13.5em; -@dropLeftL: -10em; -@dropLeftR: -24em; - -.dropdown { - position: relative; - display: inline-block; - - &:hover .dropdown-content, &:hover .dropdown-content-top, &:hover .dropdown-content-left, &:hover .dropdown-content-top-left { - display: block; - } -} - -.dropdown-content { - display: none; - position: absolute; - left: @dropLeftL; - min-width: 8em; - box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); - z-index: 1; - - .a { - color: black; - padding: 12px 16px; - text-decoration: none; - display: block; - } - - .a:hover { - background-color: #ddd; - } -} - - -.dropdown-content-top { - .dropdown-content(); - top: @dropTop; - left: @dropLeftL; -} - -.dropdown-content-left { - .dropdown-content(); - left: @dropLeftR; -} - -.dropdown-content-top-left { - .dropdown-content(); - top: @dropTop; - left: @dropLeftR; -} - - .textTrim { white-space: nowrap; overflow: hidden; @@ -191,128 +143,192 @@ a, .btn-link { .blazor-error-boundary::after { content: "An error has occurred." } - - -/*------------------------------------------------------------------ -[ Shortcuts / .shortcuts ] -*/ - -@blSCut: 1rem; - -.shortcuts { - text-align: center; +/* Gestione specifica oggetti MON*/ +/* MAIN: gestione layout dinamico mappa... */ +.fontSmall { + font-size: 0.75em; } -.shortcuts .shortcut-icon { - font-size: 2*@blSCut; +.fontSmaller { + font-size: 0.6em; } -.shortcuts .shortcut { - min-width: @blSCut * 9; - min-height: @blSCut * 5; - display: inline-block; - padding: @blSCut*2/3 0; - margin: 0 2px 1em; - vertical-align: top; - text-decoration: none; - background: #F3F3F3; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#eeeeee)); - background-image: -webkit-linear-gradient(top, #ffffff, 0%, #eeeeee, 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #eeeeee 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0); - border: 1px solid #ddd; - box-sizing: border-box; - border-radius: @blSCut/2; +.statusMap { + background: #222; } -.shortcuts .shortcut-sm { - min-width: @blSCut * 4.5; - min-height: @blSCut * 3; - display: inline-block; - padding: @blSCut/4 0; - margin: 0 2px 1em; - vertical-align: top; - text-decoration: none; - background: #F3F3F3; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#eeeeee)); - background-image: -webkit-linear-gradient(top, #ffffff, 0%, #eeeeee, 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #eeeeee 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #eeeeee 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0); - border: 1px solid #ddd; - box-sizing: border-box; - border-radius: @blSCut/2; -} - -.shortcuts .shortcut .shortcut-icon { - width: 100%; - margin-top: 0; - margin-bottom: 0; - font-size: @blSCut*2; - color: #333; -} - -.shortcuts .shortcut-sm .shortcut-icon { - width: 100%; - margin-top: 0; - margin-bottom: 0; - font-size: @blSCut*2; - color: #333; -} - -.shortcuts .shortcut:hover { - background: #E8E8E8; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fafafa), to(#e1e1e1)); - background-image: -webkit-linear-gradient(top, #fafafa, 0%, #e1e1e1, 100%); - background-image: -moz-linear-gradient(top, #fafafa 0%, #e1e1e1 100%); - background-image: linear-gradient(to bottom, #fafafa 0%, #e1e1e1 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0); -} - -.shortcuts .shortcut-sm:hover { - background: #E8E8E8; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fafafa), to(#e1e1e1)); - background-image: -webkit-linear-gradient(top, #fafafa, 0%, #e1e1e1, 100%); - background-image: -moz-linear-gradient(top, #fafafa 0%, #e1e1e1 100%); - background-image: linear-gradient(to bottom, #fafafa 0%, #e1e1e1 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0); -} - -.shortcuts .shortcut:active { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.shortcuts .shortcut-sm:active { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.shortcuts .shortcut:hover .shortcut-icon { - color: #C93; -} - -.shortcuts .shortcut-sm:hover .shortcut-icon { - color: #666; -} - -.shortcuts .shortcut-label { - display: block; - margin-top: .75em; +.statusMap .ui-title, .statusMap .ui-li-aside { font-weight: 400; - color: #666; + text-transform: uppercase; + font-size: 2.5em; + line-height: 1.1em; + color: #DEDEDE; + text-shadow: 2px 2px 4px #000; + text-align: center; + background: linear-gradient(270deg, rgba(20,20,20,0.7), rgba(100,100,100,0.7), rgba(20,20,20,0.7)); } -@media (max-width: 640px) { - .shortcuts .shortcut { - min-width: @blSCut * 8; - min-height: @blSCut * 4; +.statusMap .ui-art { +} + +.statusMap .ui-footer { + color: #CDCDCD; + background: linear-gradient(270deg, rgba(10,10,10,0.7), rgba(80,80,80,0.7), rgba(10,10,10,0.7)); +} +/* END: gestione layout dinamico mappa... */ +/* area semafori*/ +.semBlinkVe, +.semFixVe, +.semFixVe_b, +.semVe, +.semVe_b { + background: #009036; + background: rgba(0,255,80,.6); + color: #FFFFAA; +} + +.semBlinkGr, +.semFixGr, +.semFixGr_b, +.semGr, +.semGr_b { + background-color: #bcbcbc; + background: rgba(180,180,180,.6); +} + +.semGi { + text-align: left; + background: #8a8d27; + background: rgba(230,210,0,.6); + padding: 0px 4px 0px 4px; + color: #000; +} + +.semGi_b, +.semFixGi, +.semFixGi_b { + text-align: left; + background: #f9ff18; + background: rgba(255,255,0,.8); + padding: 0px 4px 0px 4px; + color: #333; +} + +.semBl { + text-align: left; + background: #000E7A; + background: rgba(0,5,200,.6); + padding: 0px 4px 0px 4px; + color: #959500; +} + +.semBl_b, +.semFixBl, +.semFixBl_b { + text-align: left; + background: #243FFF; + background: rgba(60,80,255,.8); + padding: 0px 4px 0px 4px; + color: #ffff32; +} + +.semRo { + text-align: left; + background-color: #7a000e; + background: rgba(200,0,5,.6); + padding: 0px 4px 0px 4px; + color: #959500; +} + +.semRo_b, +.semFixRo, +.semFixRo_b { + text-align: left; + background-color: #ff243f; + background: rgba(255,60,80,.8); + padding: 0px 4px 0px 4px; + color: #ffff32; +} +/* semafori con animazione blinking */ +.no-cpu { + -moz-transform: translateZ(0); + -o-transform: translateZ(0); + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); +} + +@-webkit-keyframes blinkBack { + 0% { + background-position: 0% 50%; } - body { - font-size: 0.8em; + 50% { + background-position: 100% 50%; + } + + 100% { + background-position: 0% 50%; } } + +@-moz-keyframes blinkBack { + 0% { + background-position: 0% 50%; + } + + 50% { + background-position: 100% 50%; + } + + 100% { + background-position: 0% 50%; + } +} + +@-o-keyframes blinkBack { + 0% { + background-position: 0% 50%; + } + + 50% { + background-position: 100% 50%; + } + + 100% { + background-position: 0% 50%; + } +} + +@keyframes blinkBack { + 0% { + background-position: 0% 50%; + } + + 50% { + background-position: 100% 50%; + } + + 100% { + background-position: 0% 50%; + } +} + +.semBlinkGi { + background: linear-gradient(270deg, #8a8d27, #f9ff18); + background-size: 400% 400%; + -webkit-animation: blinkBack 2s ease infinite; + -moz-animation: blinkBack 2s ease infinite; + -o-animation: blinkBack 2s ease infinite; + animation: blinkBack 2s ease infinite; +} + +.semBlinkRo { + background: linear-gradient(270deg, #7a000e, #ff243f); + background-size: 400% 400%; + -webkit-animation: blinkBack 2s ease infinite; + -moz-animation: blinkBack 2s ease infinite; + -o-animation: blinkBack 2s ease infinite; + animation: blinkBack 2s ease infinite; + color: Yellow; +} diff --git a/MP.Mon/wwwroot/css/site.min.css b/MP.Mon/wwwroot/css/site.min.css index ad652924..c5d46f4d 100644 --- a/MP.Mon/wwwroot/css/site.min.css +++ b/MP.Mon/wwwroot/css/site.min.css @@ -1 +1 @@ -@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');@import url('fonts.min.css');h1,h2,h3,h4,h5,h6,b,display-1,display-2,display-3,display-4{font-family:'Lato',sans-serif;}html,body{font-family:'Roboto Condensed',sans-serif;line-height:1.3;}h1:focus{outline:none;}a,.btn-link{color:#0071c1;}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac;}.content{padding-top:1.1rem;}.valid.modified:not([type=checkbox]){outline:1px solid #26b050;}.invalid{outline:1px solid #f00;}.validation-message{color:#f00;}.regionnotclicked{fill:white;}.regionclicked{fill:red;}.striked{text-decoration:line-through;}.dropdown{position:relative;display:inline-block;}.dropdown:hover .dropdown-content,.dropdown:hover .dropdown-content-top,.dropdown:hover .dropdown-content-left,.dropdown:hover .dropdown-content-top-left{display:block;}.dropdown-content{display:none;position:absolute;left:-10em;min-width:8em;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);z-index:1;}.dropdown-content .a{color:#000;padding:12px 16px;text-decoration:none;display:block;}.dropdown-content .a:hover{background-color:#ddd;}.dropdown-content-top{display:none;position:absolute;min-width:8em;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);z-index:1;top:-13.5em;left:-10em;}.dropdown-content-top .a{color:#000;padding:12px 16px;text-decoration:none;display:block;}.dropdown-content-top .a:hover{background-color:#ddd;}.dropdown-content-left{display:none;position:absolute;left:-10em;min-width:8em;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);z-index:1;left:-24em;}.dropdown-content-left .a{color:#000;padding:12px 16px;text-decoration:none;display:block;}.dropdown-content-left .a:hover{background-color:#ddd;}.dropdown-content-top-left{display:none;position:absolute;left:-10em;min-width:8em;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);z-index:1;top:-13.5em;left:-24em;}.dropdown-content-top-left .a{color:#000;padding:12px 16px;text-decoration:none;display:block;}.dropdown-content-top-left .a:hover{background-color:#ddd;}.textTrim{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.maxChar{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.max5Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:5rem;}.max10Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:10rem;}.max20Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:20rem;}.max30Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:30rem;}.max40Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:40rem;}.max50Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:50rem;}.max100Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100rem;}.footer{line-height:1.8em;}#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;}.blazor-error-boundary{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem,#b32121;padding:1rem 1rem 1rem 3.7rem;color:#fff;}.blazor-error-boundary::after{content:"An error has occurred.";}.shortcuts{text-align:center;}.shortcuts .shortcut-icon{font-size:2rem;}.shortcuts .shortcut{min-width:9rem;min-height:5rem;display:inline-block;padding:2rem/3 0;margin:0 2px 1em;vertical-align:top;text-decoration:none;background:#f3f3f3;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fff),to(#eee));background-image:-webkit-linear-gradient(top,#fff,0%,#eee,100%);background-image:-moz-linear-gradient(top,#fff 0%,#eee 100%);background-image:linear-gradient(to bottom,#fff 0%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffeeeeee',GradientType=0);border:1px solid #ddd;box-sizing:border-box;border-radius:1rem/2;}.shortcuts .shortcut-sm{min-width:4.5rem;min-height:3rem;display:inline-block;padding:1rem/4 0;margin:0 2px 1em;vertical-align:top;text-decoration:none;background:#f3f3f3;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fff),to(#eee));background-image:-webkit-linear-gradient(top,#fff,0%,#eee,100%);background-image:-moz-linear-gradient(top,#fff 0%,#eee 100%);background-image:linear-gradient(to bottom,#fff 0%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffeeeeee',GradientType=0);border:1px solid #ddd;box-sizing:border-box;border-radius:1rem/2;}.shortcuts .shortcut .shortcut-icon{width:100%;margin-top:0;margin-bottom:0;font-size:2rem;color:#333;}.shortcuts .shortcut-sm .shortcut-icon{width:100%;margin-top:0;margin-bottom:0;font-size:2rem;color:#333;}.shortcuts .shortcut:hover{background:#e8e8e8;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fafafa),to(#e1e1e1));background-image:-webkit-linear-gradient(top,#fafafa,0%,#e1e1e1,100%);background-image:-moz-linear-gradient(top,#fafafa 0%,#e1e1e1 100%);background-image:linear-gradient(to bottom,#fafafa 0%,#e1e1e1 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa',endColorstr='#ffe1e1e1',GradientType=0);}.shortcuts .shortcut-sm:hover{background:#e8e8e8;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fafafa),to(#e1e1e1));background-image:-webkit-linear-gradient(top,#fafafa,0%,#e1e1e1,100%);background-image:-moz-linear-gradient(top,#fafafa 0%,#e1e1e1 100%);background-image:linear-gradient(to bottom,#fafafa 0%,#e1e1e1 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa',endColorstr='#ffe1e1e1',GradientType=0);}.shortcuts .shortcut:active{box-shadow:inset 0 3px 5px rgba(0,0,0,.125);}.shortcuts .shortcut-sm:active{box-shadow:inset 0 3px 5px rgba(0,0,0,.125);}.shortcuts .shortcut:hover .shortcut-icon{color:#c93;}.shortcuts .shortcut-sm:hover .shortcut-icon{color:#666;}.shortcuts .shortcut-label{display:block;margin-top:.75em;font-weight:400;color:#666;}@media(max-width:640px){.shortcuts .shortcut{min-width:8rem;min-height:4rem;}body{font-size:.8em;}} \ No newline at end of file +@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');@import url('fonts.min.css');h1,h2,h3,h4,h5,h6,b,display-1,display-2,display-3,display-4{font-family:'Lato',sans-serif;}html,body{height:100%;}html,body{font-family:'Roboto Condensed',sans-serif;line-height:1.3;background-image:linear-gradient(180deg,#010816 20%,#3aa6ff 90%);background-size:auto 100%;background-repeat:no-repeat;}h1:focus{outline:none;}a,.btn-link{color:#0071c1;}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac;}.content{padding-top:1.1rem;}.valid.modified:not([type=checkbox]){outline:1px solid #26b050;}.invalid{outline:1px solid #f00;}.validation-message{color:#f00;}.regionnotclicked{fill:white;}.regionclicked{fill:red;}.striked{text-decoration:line-through;}.textTrim{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.maxChar{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.max5Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:5rem;}.max10Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:10rem;}.max20Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:20rem;}.max30Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:30rem;}.max40Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:40rem;}.max50Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:50rem;}.max100Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100rem;}.footer{line-height:1.8em;}#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;}.blazor-error-boundary{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem,#b32121;padding:1rem 1rem 1rem 3.7rem;color:#fff;}.blazor-error-boundary::after{content:"An error has occurred.";}.fontSmall{font-size:.75em;}.fontSmaller{font-size:.6em;}.statusMap{background:#222;}.statusMap .ui-title,.statusMap .ui-li-aside{font-weight:400;text-transform:uppercase;font-size:2.5em;line-height:1.1em;color:#dedede;text-shadow:2px 2px 4px #000;text-align:center;background:linear-gradient(270deg,rgba(20,20,20,.7),rgba(100,100,100,.7),rgba(20,20,20,.7));}.statusMap .ui-footer{color:#cdcdcd;background:linear-gradient(270deg,rgba(10,10,10,.7),rgba(80,80,80,.7),rgba(10,10,10,.7));}.semBlinkVe,.semFixVe,.semFixVe_b,.semVe,.semVe_b{background:#009036;background:rgba(0,255,80,.6);color:#ffa;}.semBlinkGr,.semFixGr,.semFixGr_b,.semGr,.semGr_b{background-color:#bcbcbc;background:rgba(180,180,180,.6);}.semGi{text-align:left;background:#8a8d27;background:rgba(230,210,0,.6);padding:0 4px 0 4px;color:#000;}.semGi_b,.semFixGi,.semFixGi_b{text-align:left;background:#f9ff18;background:rgba(255,255,0,.8);padding:0 4px 0 4px;color:#333;}.semBl{text-align:left;background:#000e7a;background:rgba(0,5,200,.6);padding:0 4px 0 4px;color:#959500;}.semBl_b,.semFixBl,.semFixBl_b{text-align:left;background:#243fff;background:rgba(60,80,255,.8);padding:0 4px 0 4px;color:#ffff32;}.semRo{text-align:left;background-color:#7a000e;background:rgba(200,0,5,.6);padding:0 4px 0 4px;color:#959500;}.semRo_b,.semFixRo,.semFixRo_b{text-align:left;background-color:#ff243f;background:rgba(255,60,80,.8);padding:0 4px 0 4px;color:#ffff32;}.no-cpu{-moz-transform:translateZ(0);-o-transform:translateZ(0);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);}@-webkit-keyframes blinkBack{0%{background-position:0% 50%;}50%{background-position:100% 50%;}100%{background-position:0% 50%;}}@-moz-keyframes blinkBack{0%{background-position:0% 50%;}50%{background-position:100% 50%;}100%{background-position:0% 50%;}}@-o-keyframes blinkBack{0%{background-position:0% 50%;}50%{background-position:100% 50%;}100%{background-position:0% 50%;}}@keyframes blinkBack{0%{background-position:0% 50%;}50%{background-position:100% 50%;}100%{background-position:0% 50%;}}.semBlinkGi{background:linear-gradient(270deg,#8a8d27,#f9ff18);background-size:400% 400%;-webkit-animation:blinkBack 2s ease infinite;-moz-animation:blinkBack 2s ease infinite;-o-animation:blinkBack 2s ease infinite;animation:blinkBack 2s ease infinite;}.semBlinkRo{background:linear-gradient(270deg,#7a000e,#ff243f);background-size:400% 400%;-webkit-animation:blinkBack 2s ease infinite;-moz-animation:blinkBack 2s ease infinite;-o-animation:blinkBack 2s ease infinite;animation:blinkBack 2s ease infinite;color:#ff0;} \ No newline at end of file diff --git a/MP.Mon/wwwroot/images/LogoCliente.png b/MP.Mon/wwwroot/images/LogoCliente.png new file mode 100644 index 00000000..8d5a7c1f Binary files /dev/null and b/MP.Mon/wwwroot/images/LogoCliente.png differ diff --git a/MP.Mon/wwwroot/images/LogoMapo.png b/MP.Mon/wwwroot/images/LogoMapo.png new file mode 100644 index 00000000..579e0fe3 Binary files /dev/null and b/MP.Mon/wwwroot/images/LogoMapo.png differ