From e7dcefb06972c910645e81072f54582c73eff28d Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 21 Mar 2025 10:18:45 +0100 Subject: [PATCH] MON: - Rivisitazione completa gestione riconnessione blazor 8 - fic logico e grafico --- MP.MON.Client/Components/CmpFooter.razor.cs | 48 +++++++++++-------- MP.MON.Client/Components/CmpHeader.razor | 2 - MP.MON.Client/Components/CmpHeader.razor.cs | 2 +- .../Components/DetailMapSelector.razor | 44 ----------------- MP.MON.Client/wwwroot/lib/boot.js | 19 +++++--- MP.MON/Components/App.razor | 28 +++++------ MP.MON/Components/Pages/Index.razor | 1 - MP.MON/MP.MON.csproj | 2 +- MP.MON/Resources/ChangeLog.html | 2 +- MP.MON/Resources/VersNum.txt | 2 +- MP.MON/Resources/manifest.xml | 2 +- MP.MON/wwwroot/css/site.css | 34 +++++++++++++ MP.MON/wwwroot/css/site.less | 39 ++++++++++++++- MP.MON/wwwroot/css/site.min.css | 2 +- 14 files changed, 129 insertions(+), 98 deletions(-) delete mode 100644 MP.MON.Client/Components/DetailMapSelector.razor diff --git a/MP.MON.Client/Components/CmpFooter.razor.cs b/MP.MON.Client/Components/CmpFooter.razor.cs index 72943d35..d07d625e 100644 --- a/MP.MON.Client/Components/CmpFooter.razor.cs +++ b/MP.MON.Client/Components/CmpFooter.razor.cs @@ -9,10 +9,10 @@ namespace MP.MON.Client.Components #region Public Properties [Parameter] - public Version version { get; set; } = null!; + public int slowRefreshSec { get; set; } = 300; [Parameter] - public int slowRefreshSec { get; set; } = 300; + public Version version { get; set; } = null!; #endregion Public Properties @@ -27,16 +27,6 @@ namespace MP.MON.Client.Components } } - protected int slowRefreshMs - { - get - { - // tempo variabile tra +/- 10% del target - int answ = rnd.Next(900, 1100) * slowRefreshSec; - return answ; - } - } - private Random rnd; public void ElapsedTimer(object? source, System.Timers.ElapsedEventArgs e) { // dispongo i vari timers... @@ -46,12 +36,6 @@ namespace MP.MON.Client.Components NavManager.NavigateTo(NavManager.Uri, true); } - private void disposeTimers() - { - aTimer.Elapsed -= ElapsedTimer; - aTimer.Stop(); - aTimer.Dispose(); - } public void StartTimer() { // timer lento @@ -85,6 +69,16 @@ namespace MP.MON.Client.Components [Inject] protected NavigationManager NavManager { get; set; } = null!; + protected int slowRefreshMs + { + get + { + // tempo variabile tra +/- 10% del target + int answ = rnd.Next(900, 1100) * slowRefreshSec; + return answ; + } + } + #endregion Protected Properties #region Protected Methods @@ -103,15 +97,15 @@ namespace MP.MON.Client.Components await getWDim(); StateHasChanged(); StartTimer(); - Console.WriteLine($"Dimensioni schermo: {Width}x{Height} - timer avviato"); + Console.WriteLine($"Footer | Dimensioni schermo: {Width}x{Height} | slowRefreshSec: {slowRefreshSec}"); } - //Console.WriteLine($"OnAfterRenderAsync completato"); + Console.WriteLine($"Footer | OnAfterRenderAsync completato"); } protected override void OnInitialized() { rnd = new Random(); - Console.WriteLine($"OnInitialized Footer completato | slowRefreshSec: {slowRefreshSec} "); + Console.WriteLine($"Footer | OnInitialized completato"); } #endregion Protected Methods @@ -119,6 +113,7 @@ namespace MP.MON.Client.Components #region Private Fields private static System.Timers.Timer aTimer = null!; + private Random rnd; #endregion Private Fields @@ -129,5 +124,16 @@ namespace MP.MON.Client.Components private int Width { get; set; } = 0; #endregion Private Properties + + #region Private Methods + + private void disposeTimers() + { + aTimer.Elapsed -= ElapsedTimer; + aTimer.Stop(); + aTimer.Dispose(); + } + + #endregion Private Methods } } \ No newline at end of file diff --git a/MP.MON.Client/Components/CmpHeader.razor b/MP.MON.Client/Components/CmpHeader.razor index 28357073..2705a192 100644 --- a/MP.MON.Client/Components/CmpHeader.razor +++ b/MP.MON.Client/Components/CmpHeader.razor @@ -14,7 +14,5 @@ @($"{DateTime.Now:HH:mm:ss}") - @* - EgalWare *@ diff --git a/MP.MON.Client/Components/CmpHeader.razor.cs b/MP.MON.Client/Components/CmpHeader.razor.cs index f37f4852..c8dde3f3 100644 --- a/MP.MON.Client/Components/CmpHeader.razor.cs +++ b/MP.MON.Client/Components/CmpHeader.razor.cs @@ -8,7 +8,7 @@ namespace MP.MON.Client.Components protected override void OnInitialized() { StartTimer(); - Console.WriteLine($"OnInitialized Header completato"); + Console.WriteLine($"Header | OnInitialized completato"); } diff --git a/MP.MON.Client/Components/DetailMapSelector.razor b/MP.MON.Client/Components/DetailMapSelector.razor deleted file mode 100644 index a6911977..00000000 --- a/MP.MON.Client/Components/DetailMapSelector.razor +++ /dev/null @@ -1,44 +0,0 @@ -@using MP.Core.Conf -@using MP.Core.DTO; - -@if (useNewDisplay) -{ - -} -else -{ - -} - -@code { - - [Parameter] - public MappaStatoExplDTO? currRecord { get; set; } = null; - - [Parameter] - public List? currTagConf { get; set; } = null; - - [Parameter] - public Dictionary currTagVal { get; set; } = new Dictionary(); - - [Parameter] - public bool doAnimate { get; set; } = true; - - [Parameter] - public bool doBlink { get; set; } = false; - - [Parameter] - public int keepAliveMin { get; set; } = 5; - - [Parameter] - public int maxChar4Scroll { get; set; } = 20; - - [Parameter] - public string showArt { get; set; } = ""; - [Parameter] - public bool useNewDisplay { get; set; } = true; - - - [Parameter] - public string cssOverlayOff { get; set; } = ""; -} diff --git a/MP.MON.Client/wwwroot/lib/boot.js b/MP.MON.Client/wwwroot/lib/boot.js index baf62de9..35cc455a 100644 --- a/MP.MON.Client/wwwroot/lib/boot.js +++ b/MP.MON.Client/wwwroot/lib/boot.js @@ -1,16 +1,17 @@ (() => { - const maximumRetryCount = 3600; - const retryIntervalMilliseconds = 1000; - const reconnectModal = document.getElementById('reconnect-modal'); + const maximumRetryCount = 1800; + const retryIntervalMilliseconds = 2000; + const rectModalBox = document.getElementById('reconnect-modal'); + const recModal = document.getElementById('reconnect-modal-text'); const startReconnectionProcess = () => { - reconnectModal.style.display = 'block'; + rectModalBox.style.display = 'block'; let isCanceled = false; (async () => { for (let i = 0; i < maximumRetryCount; i++) { - reconnectModal.innerText = `Attempting to reconnect: ${i + 1} of ${maximumRetryCount}`; + recModal.innerText = `Tentativo riconnessione: ${i + 1} / ${maximumRetryCount}`; await new Promise(resolve => setTimeout(resolve, retryIntervalMilliseconds)); @@ -40,7 +41,7 @@ return { cancel: () => { isCanceled = true; - reconnectModal.style.display = 'none'; + rectModalBox.style.display = 'none'; }, }; }; @@ -50,10 +51,14 @@ Blazor.start({ circuit: { reconnectionHandler: { - onConnectionDown: () => currentReconnectionProcess ??= startReconnectionProcess(), + onConnectionDown: () => { + currentReconnectionProcess ??= startReconnectionProcess(); + console.log("Connection Lost!"); + }, onConnectionUp: () => { currentReconnectionProcess?.cancel(); currentReconnectionProcess = null; + console.log("Connection restored!"); } } } diff --git a/MP.MON/Components/App.razor b/MP.MON/Components/App.razor index 0ae8e7bc..f751408f 100644 --- a/MP.MON/Components/App.razor +++ b/MP.MON/Components/App.razor @@ -16,26 +16,22 @@ -
+ +
+
+
Reconnecting...
+
+ +
+
+ mancanza di comunicazione con il server +
+
+
@* *@ - @* *@ diff --git a/MP.MON/Components/Pages/Index.razor b/MP.MON/Components/Pages/Index.razor index 6896740c..cd18ab0c 100644 --- a/MP.MON/Components/Pages/Index.razor +++ b/MP.MON/Components/Pages/Index.razor @@ -40,7 +40,6 @@ else if (currMse != null) {
- @* *@ @if (newDisplay) { diff --git a/MP.MON/MP.MON.csproj b/MP.MON/MP.MON.csproj index 485cdb56..7babc1c8 100644 --- a/MP.MON/MP.MON.csproj +++ b/MP.MON/MP.MON.csproj @@ -6,7 +6,7 @@ enable MP.MON $(AssemblyName.Replace(' ', '_')) - 6.16.2503.2019 + 6.16.2503.2110 diff --git a/MP.MON/Resources/ChangeLog.html b/MP.MON/Resources/ChangeLog.html index 6c59e885..c6503078 100644 --- a/MP.MON/Resources/ChangeLog.html +++ b/MP.MON/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

Versione: 6.16.2503.2019

+

Versione: 6.16.2503.2110


Note di rilascio:
  • diff --git a/MP.MON/Resources/VersNum.txt b/MP.MON/Resources/VersNum.txt index 1c9ad5d9..47c5b1ad 100644 --- a/MP.MON/Resources/VersNum.txt +++ b/MP.MON/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2503.2019 +6.16.2503.2110 diff --git a/MP.MON/Resources/manifest.xml b/MP.MON/Resources/manifest.xml index 11eabe15..f24fbe1d 100644 --- a/MP.MON/Resources/manifest.xml +++ b/MP.MON/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2503.2019 + 6.16.2503.2110 https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/MP.MON.zip https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/ChangeLog.html false diff --git a/MP.MON/wwwroot/css/site.css b/MP.MON/wwwroot/css/site.css index edfb5677..9b2b4e61 100644 --- a/MP.MON/wwwroot/css/site.css +++ b/MP.MON/wwwroot/css/site.css @@ -175,6 +175,9 @@ a, .opacity-90 { opacity: 0.9; } +.opacity-95 { + opacity: 0.95; +} /* MAIN: gestione layout dinamico mappa... */ .fontSmall { font-size: 0.75rem; @@ -345,6 +348,37 @@ a, transform: translateX(-150%); } } +/* gestone reconnect modal*/ +#reconnect-modal { + display: none; + /* Hidden by default */ + position: fixed; + /* Stay in place */ + z-index: 1; + /* Sit on top */ + left: 0; + top: 0; + width: 100%; + /* Full width */ + height: 100%; + /* Full height */ + overflow: auto; + /* Enable scroll if needed */ + background-color: #000000; + /* Fallback color */ + background-color: rgba(0, 0, 0, 0.5); + /* Black w/ opacity */ +} +#reconnect-modal-box { + position: fixed; + top: 20%; + left: 20%; + width: 60%; + height: 30%; +} +#reconnect-modal-box .titolo { + font-size: 4rem; +} /* area semafori*/ .semBlinkVe, .semFixVe, diff --git a/MP.MON/wwwroot/css/site.less b/MP.MON/wwwroot/css/site.less index a7ee7d6b..93b6c9b1 100644 --- a/MP.MON/wwwroot/css/site.less +++ b/MP.MON/wwwroot/css/site.less @@ -150,26 +150,34 @@ a, .btn-link { .bright50 { filter: brightness(50%); } + .bright75 { filter: brightness(75%); } + .bright90 { filter: brightness(90%); } + .bright100 { } + .bright110 { filter: brightness(110%); } + .bright125 { filter: brightness(125%); } + .bright150 { filter: brightness(150%); } + .bright175 { filter: brightness(175%); } + .bright200 { filter: brightness(200%); } @@ -177,13 +185,19 @@ a, .btn-link { .opacity-80 { opacity: 0.8 } + .opacity-85 { opacity: 0.85 } + .opacity-90 { opacity: 0.9 } +.opacity-95 { + opacity: 0.95 +} + /* MAIN: gestione layout dinamico mappa... */ .fontSmall { font-size: 0.75rem; @@ -387,8 +401,32 @@ a, .btn-link { } } +/* gestone reconnect modal*/ +#reconnect-modal { + display: none; /* Hidden by default */ + position: fixed; /* Stay in place */ + z-index: 1; /* Sit on top */ + left: 0; + top: 0; + width: 100%; /* Full width */ + height: 100%; /* Full height */ + overflow: auto; /* Enable scroll if needed */ + background-color: rgb(0,0,0); /* Fallback color */ + background-color: rgba(0,0,0,0.5); /* Black w/ opacity */ +} +#reconnect-modal-box { + position: fixed; + top: 20%; + left: 20%; + width: 60%; + height: 30%; + + .titolo { + font-size: 4rem; + } +} /* area semafori*/ .semBlinkVe, .semFixVe, @@ -545,7 +583,6 @@ a, .btn-link { animation: blinkBack 2s ease infinite; color: Yellow; } - /* Gestione size caratteri */ .mainHead, .logoImg { diff --git a/MP.MON/wwwroot/css/site.min.css b/MP.MON/wwwroot/css/site.min.css index 39dbccc6..f5af385f 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{height:100%;}html,body{font-family:'Roboto Condensed',sans-serif;line-height:1.25;background-image:linear-gradient(180deg,#010816 20%,#3aa6ff 90%);background-size:auto 100%;background-repeat:no-repeat;}h1:focus{outline:0;}a,.btn-link{color:#0071c1;}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac;}.content{padding-top:1.1rrem;}.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:5rrem;}.max10Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:10rrem;}.max20Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:20rrem;}.max30Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:30rrem;}.max40Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:40rrem;}.max50Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:50rrem;}.max100Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100rrem;}.footer{line-height:1.8rem;}#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.25rrem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rrem;top:.5rrem;}.blazor-error-boundary{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem,#b32121;padding:1rem 1rem 1rem 3.7rrem;color:#fff;}.blazor-error-boundary::after{content:"An error has occurred.";}.bright50{filter:brightness(50%);}.bright75{filter:brightness(75%);}.bright90{filter:brightness(90%);}.bright110{filter:brightness(110%);}.bright125{filter:brightness(125%);}.bright150{filter:brightness(150%);}.bright175{filter:brightness(175%);}.bright200{filter:brightness(200%);}.opacity-80{opacity:.8;}.opacity-85{opacity:.85;}.opacity-90{opacity:.9;}.fontSmall{font-size:.75rem;}.fontSmaller{font-size:.6rem;}.statusMap .ui-title,.statusMap .ui-li-aside{text-transform:uppercase;font-size:1.5rem;line-height:1.1rem;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-subtitle{line-height:1.1rem;color:#dedede;text-shadow:2px 2px 4px #000;text-align:center;background:linear-gradient(270deg,rgba(0,0,0,.4),rgba(100,100,100,.4),rgba(0,0,0,.4));}.statusMap .ui-footer{color:#cdcdcd;background:linear-gradient(270deg,rgba(10,10,10,.7),rgba(80,80,80,.7),rgba(10,10,10,.7));}.machBlock{padding:0 2px 0 2px;}@media all and (min-width:320px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:1.5rem;}}@media all and (min-width:800px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:1.6rem;}}@media all and (min-width:1024px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:1.7rem;}}@media all and (min-width:1440px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:1.8rem;}}@media all and (min-width:1980px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:1.9rem;}}@media all and (min-width:3960px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:2rem;}}.text-reduced,.text-reduced-a,.text-reduced-b,.text-reduced-c{height:1.1rem;line-height:.9em;overflow-wrap:anywhere;}.text-reduced-a{font-size:.96rem;}.text-reduced-b{font-size:.92rem;}.text-reduced-c{font-size:.88rem;}.scroll-left,.scroll-left-a,.scroll-left-b,.scroll-left-c{height:1.25em;overflow:hidden;position:relative;width:100%;white-space:nowrap;}.scroll-left span,.scroll-left-a span,.scroll-left-b span,.scroll-left-c span{position:absolute;width:100%;height:100%;margin:0;line-height:1.25em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);}.scroll-left-a span{-moz-animation:scroll-left-a 10s ease infinite;-webkit-animation:scroll-left-a 10s ease infinite;animation:scroll-left-a 10s ease infinite;}@keyframes scroll-left-a{0%{transform:translateX(0%);}30%{transform:translateX(0%);}100%{transform:translateX(-90%);}}.scroll-left-b span{-moz-animation:scroll-left-b 10s ease infinite;-webkit-animation:scroll-left-b 10s ease infinite;animation:scroll-left-b 10s ease infinite;}@keyframes scroll-left-b{0%{transform:translateX(0%);}30%{transform:translateX(0%);}100%{transform:translateX(-120%);}}.scroll-left-c span{-moz-animation:scroll-left-c 10s ease infinite;-webkit-animation:scroll-left-c 10s ease infinite;animation:scroll-left-c 10s ease infinite;}@keyframes scroll-left-c{0%{transform:translateX(0%);}30%{transform:translateX(0%);}100%{transform:translateX(-150%);}}.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;}.mainHead,.logoImg{height:1.6rem;}@media all and (max-width:425px){body{font-size:.7rem;}}@media all and (min-width:425px){.mainHead{font-size:1.3rem;}body{font-size:.8rem;}.logoImg{height:30px;}}@media all and (min-width:768px){.mainHead{font-size:1.4rem;}body{font-size:1rem;}.logoImg{height:35px;}}@media all and (min-width:800px){.mainHead{font-size:.9rem;}body{font-size:.6rem;}.logoImg{height:40px;}}@media all and (min-width:1024px){.mainHead{font-size:1rem;}body{font-size:.7rem;}}@media all and (min-width:1280px){.mainHead{font-size:1.1rem;}body{font-size:.8rem;}}@media all and (min-width:1440px){.mainHead{font-size:1.3rem;}body{font-size:1rem;}}@media all and (min-width:1680px){.mainHead{font-size:1.4rem;}body{font-size:1.1rem;}}@media all and (min-width:1920px){.mainHead{font-size:1.6rem;}body{font-size:1.3rem;}}@media all and (min-width:2560px){.mainHead{font-size:1.4rem;}body{font-size:1.8rem;}} \ 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.25;background-image:linear-gradient(180deg,#010816 20%,#3aa6ff 90%);background-size:auto 100%;background-repeat:no-repeat;}h1:focus{outline:0;}a,.btn-link{color:#0071c1;}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac;}.content{padding-top:1.1rrem;}.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:5rrem;}.max10Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:10rrem;}.max20Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:20rrem;}.max30Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:30rrem;}.max40Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:40rrem;}.max50Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:50rrem;}.max100Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100rrem;}.footer{line-height:1.8rem;}#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.25rrem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rrem;top:.5rrem;}.blazor-error-boundary{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem,#b32121;padding:1rem 1rem 1rem 3.7rrem;color:#fff;}.blazor-error-boundary::after{content:"An error has occurred.";}.bright50{filter:brightness(50%);}.bright75{filter:brightness(75%);}.bright90{filter:brightness(90%);}.bright110{filter:brightness(110%);}.bright125{filter:brightness(125%);}.bright150{filter:brightness(150%);}.bright175{filter:brightness(175%);}.bright200{filter:brightness(200%);}.opacity-80{opacity:.8;}.opacity-85{opacity:.85;}.opacity-90{opacity:.9;}.opacity-95{opacity:.95;}.fontSmall{font-size:.75rem;}.fontSmaller{font-size:.6rem;}.statusMap .ui-title,.statusMap .ui-li-aside{text-transform:uppercase;font-size:1.5rem;line-height:1.1rem;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-subtitle{line-height:1.1rem;color:#dedede;text-shadow:2px 2px 4px #000;text-align:center;background:linear-gradient(270deg,rgba(0,0,0,.4),rgba(100,100,100,.4),rgba(0,0,0,.4));}.statusMap .ui-footer{color:#cdcdcd;background:linear-gradient(270deg,rgba(10,10,10,.7),rgba(80,80,80,.7),rgba(10,10,10,.7));}.machBlock{padding:0 2px 0 2px;}@media all and (min-width:320px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:1.5rem;}}@media all and (min-width:800px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:1.6rem;}}@media all and (min-width:1024px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:1.7rem;}}@media all and (min-width:1440px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:1.8rem;}}@media all and (min-width:1980px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:1.9rem;}}@media all and (min-width:3960px){.statusMap .ui-title,.statusMap .ui-li-aside{font-size:2rem;}}.text-reduced,.text-reduced-a,.text-reduced-b,.text-reduced-c{height:1.1rem;line-height:.9em;overflow-wrap:anywhere;}.text-reduced-a{font-size:.96rem;}.text-reduced-b{font-size:.92rem;}.text-reduced-c{font-size:.88rem;}.scroll-left,.scroll-left-a,.scroll-left-b,.scroll-left-c{height:1.25em;overflow:hidden;position:relative;width:100%;white-space:nowrap;}.scroll-left span,.scroll-left-a span,.scroll-left-b span,.scroll-left-c span{position:absolute;width:100%;height:100%;margin:0;line-height:1.25em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);}.scroll-left-a span{-moz-animation:scroll-left-a 10s ease infinite;-webkit-animation:scroll-left-a 10s ease infinite;animation:scroll-left-a 10s ease infinite;}@keyframes scroll-left-a{0%{transform:translateX(0%);}30%{transform:translateX(0%);}100%{transform:translateX(-90%);}}.scroll-left-b span{-moz-animation:scroll-left-b 10s ease infinite;-webkit-animation:scroll-left-b 10s ease infinite;animation:scroll-left-b 10s ease infinite;}@keyframes scroll-left-b{0%{transform:translateX(0%);}30%{transform:translateX(0%);}100%{transform:translateX(-120%);}}.scroll-left-c span{-moz-animation:scroll-left-c 10s ease infinite;-webkit-animation:scroll-left-c 10s ease infinite;animation:scroll-left-c 10s ease infinite;}@keyframes scroll-left-c{0%{transform:translateX(0%);}30%{transform:translateX(0%);}100%{transform:translateX(-150%);}}#reconnect-modal{display:none;position:fixed;z-index:1;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.5);}#reconnect-modal-box{position:fixed;top:20%;left:20%;width:60%;height:30%;}#reconnect-modal-box .titolo{font-size:4rem;}.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;}.mainHead,.logoImg{height:1.6rem;}@media all and (max-width:425px){body{font-size:.7rem;}}@media all and (min-width:425px){.mainHead{font-size:1.3rem;}body{font-size:.8rem;}.logoImg{height:30px;}}@media all and (min-width:768px){.mainHead{font-size:1.4rem;}body{font-size:1rem;}.logoImg{height:35px;}}@media all and (min-width:800px){.mainHead{font-size:.9rem;}body{font-size:.6rem;}.logoImg{height:40px;}}@media all and (min-width:1024px){.mainHead{font-size:1rem;}body{font-size:.7rem;}}@media all and (min-width:1280px){.mainHead{font-size:1.1rem;}body{font-size:.8rem;}}@media all and (min-width:1440px){.mainHead{font-size:1.3rem;}body{font-size:1rem;}}@media all and (min-width:1680px){.mainHead{font-size:1.4rem;}body{font-size:1.1rem;}}@media all and (min-width:1920px){.mainHead{font-size:1.6rem;}body{font-size:1.3rem;}}@media all and (min-width:2560px){.mainHead{font-size:1.4rem;}body{font-size:1.8rem;}} \ No newline at end of file