@sailingrotevista/rotevista-dash 7.0.45 → 8.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @sailingrotevista/rotevista-dash might be problematic. Click here for more details.

package/style.css DELETED
@@ -1,640 +0,0 @@
1
- /* ==========================================================================
2
- 1. BASE E RESET DI SISTEMA
3
- ========================================================================== */
4
- body {
5
- background-color: #fff;
6
- color: #000;
7
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
8
- margin: 0; padding: 0;
9
- height: 100vh; width: 100vw;
10
- overflow: hidden;
11
- -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; touch-action: none;
12
- }
13
-
14
- /* ==========================================================================
15
- 2. LAYOUT PRINCIPALE (GRID AREAS)
16
- ========================================================================== */
17
- .main-container {
18
- display: grid;
19
- width: 100%; height: 100%;
20
- padding: 5px; box-sizing: border-box; gap: 8px;
21
- grid-template-areas:
22
- "stw gauge depth"
23
- "sog gauge tws"
24
- "hdg gauge twa"
25
- "cog gauge awa"
26
- "tack gauge twd";
27
- grid-template-rows: 1.75fr 1.75fr 0.75fr 0.75fr 1.25fr;
28
- grid-template-columns: 1fr 1.5fr 1fr;
29
- transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
30
- }
31
-
32
- .box-stw { grid-area: stw; }
33
- .box-sog { grid-area: sog; }
34
- .box-hdg { grid-area: hdg; }
35
- .box-cog { grid-area: cog; }
36
- .box-tack { grid-area: tack; }
37
- .box-gauge { grid-area: gauge; display: flex; align-items: center; justify-content: center; position: relative; }
38
- .box-depth { grid-area: depth; }
39
- .box-tws { grid-area: tws; }
40
- .box-twa { grid-area: twa; }
41
- .box-awa { grid-area: awa; }
42
- .box-twd { grid-area: twd; }
43
-
44
- /* ==========================================================================
45
- 3. DATA-BOX: STRUTTURA E ALLINEAMENTO (Bordi Schermo & Display Curvi)
46
- ========================================================================== */
47
- .data-box {
48
- position: relative; border-bottom: 1px solid #eee;
49
- /* Padding alto (1.2rem) per non far toccare il numero al titolo assoluto */
50
- padding: 1.2rem 8px 4px 8px;
51
- display: flex; flex-direction: column; width: 100%;
52
- box-sizing: border-box; container-type: size;
53
- min-height: 0; overflow: hidden;
54
- background: rgba(0, 0, 0, 0.03); border-radius: 12px;
55
- transition: background-color 0.2s ease;
56
- /* Forza la centratura verticale del valore per display curvi */
57
- justify-content: center !important;
58
- }
59
-
60
- /* Titoli ancorati sempre in alto */
61
- .label-row {
62
- position: absolute; top: 4px; left: 8px; right: 8px;
63
- display: flex; align-items: baseline; z-index: 10;
64
- }
65
-
66
- .label { color: #888; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; }
67
- .unit { color: #aaa; font-size: 0.6rem; font-weight: bold; }
68
-
69
- /* --- ALLINEAMENTO SPECULARE RIGIDO --- */
70
-
71
- /* COLONNA SINISTRA: Titolo a SX (bordo), Unità a DX */
72
- .box-stw, .box-sog, .box-hdg, .box-cog, .box-tack { align-items: flex-start !important; text-align: left !important; }
73
- .box-stw .label-row, .box-sog .label-row, .box-hdg .label-row, .box-cog .label-row, .box-tack .label-row {
74
- flex-direction: row !important; justify-content: space-between !important;
75
- }
76
-
77
- /* COLONNA DESTRA: Titolo a DX (bordo), Unità a SX */
78
- .box-depth, .box-tws, .box-twa, .box-awa, .box-twd {
79
- align-items: flex-end !important;
80
- text-align: right !important;
81
- padding-right: 14px !important; /* BUG RISOLTO: Aumenta il padding destro per evitare il clipping dei numeri sul bordo */
82
- }
83
- .box-depth .label-row, .box-tws .label-row, .box-twa .label-row, .box-awa .label-row, .box-twd .label-row {
84
- flex-direction: row-reverse !important; justify-content: space-between !important;
85
- }
86
-
87
- /* ==========================================================================
88
- 4. TIPOGRAFIA GERARCHICA (OTTIMIZZATA PER TUTTI I DISPLAY)
89
- ========================================================================== */
90
-
91
- /* --- VALORI STANDARD (STW, SOG, DEPTH, TWS) --- */
92
- .value {
93
- color: #000;
94
- /* Su Tablet: 25% altezza box. Su schermi stretti max 32% larghezza */
95
- font-size: clamp(1.1rem, 25cqh, 32cqw);
96
- font-weight: 600; line-height: 0.85; letter-spacing: -1.5px;
97
- margin-top: auto; margin-bottom: 2px;
98
- }
99
-
100
- /* Protezione iPhone Landscape: Schermi molto bassi */
101
- @media screen and (max-height: 450px) {
102
- .value { font-size: clamp(1rem, 18cqh, 25cqw) !important; }
103
- }
104
-
105
- /* --- VALORI MEDIATI (HEADING, COG, TWA, AWA) --- */
106
- .value-large {
107
- font-weight: 600; line-height: 1; margin: auto 0;
108
- /* 55cqh riempie il box verticalmente, 22cqw protegge la larghezza */
109
- font-size: clamp(1.5rem, 55cqh, 22cqw) !important;
110
- }
111
-
112
- @media screen and (max-height: 450px) {
113
- .value-large { font-size: clamp(1.4rem, 40cqh, 20cqw) !important; }
114
- }
115
-
116
- /* --- BOX TWD (Bussola Meteo) --- */
117
- .value-with-compass {
118
- display: flex; flex-direction: row; justify-content: space-between;
119
- align-items: center; width: 100%; height: 85%;
120
- }
121
- .box-twd .mini-compass {
122
- height: 85cqh !important; width: auto !important; aspect-ratio: 1/1; flex-shrink: 0;
123
- }
124
- @media screen and (max-height: 450px) {
125
- .box-twd .mini-compass { height: 65cqh !important; }
126
- .box-twd #twd-avg { font-size: clamp(1.4rem, 45cqh, 20cqw) !important; }
127
- }
128
-
129
- /* --- OTTIMIZZAZIONE SPECIFICA TWD PER EVITARE ANDATA A CAPO in landscape--- */
130
- .box-twd .value-large {
131
- /* Riduciamo il limite di larghezza (18cqw) per far spazio al simbolo ± rimpicciolendo il testo se serve */
132
- font-size: clamp(1.2rem, 55cqh, 18cqw) !important;
133
- }
134
-
135
- /* --- BOX TACK (Mure Opposte) --- */
136
- .box-tack .dual-value-container { display: flex; flex-direction: row; justify-content: space-between; align-items: center; width: 100%; height: 100%; }
137
- .box-tack .dual-value-col { display: flex; flex-direction: column; justify-content: center; }
138
- .box-tack .dual-value-col:first-child { align-items: flex-start; }
139
- .box-tack .dual-value-col:last-child { align-items: flex-end; }
140
- .box-tack .dual-label { color: #888; font-size: 0.5rem; font-weight: 800; margin-bottom: -2px; }
141
- .box-tack .value.dual-val { font-size: clamp(1rem, 32cqh, 10cqw) !important; line-height: 0.9; }
142
-
143
- @media screen and (max-height: 450px) {
144
- .box-tack .value.dual-val { font-size: clamp(0.9rem, 28cqh, 10cqw) !important; }
145
- }
146
-
147
- /* ==========================================================================
148
- AGGIUNTA: Gestione Allarmi Profondità
149
- ========================================================================== */
150
- .alarm-warning {
151
- color: #e67e22 !important; /* Arancione per Warning */
152
- }
153
-
154
- .alarm-danger {
155
- color: #c0392b !important; /* Rosso per Danger */
156
- }
157
-
158
- .blink-alarm {
159
- animation: blink-depth 0.8s infinite alternate;
160
- }
161
-
162
- @keyframes blink-depth {
163
- from { opacity: 1; }
164
- to { opacity: 0.3; }
165
- }
166
-
167
- /* Override per la Night Mode: se siamo in modalità notte,
168
- il rosso deve restare ben visibile o diventare più acceso */
169
- body.night-mode .alarm-danger {
170
- color: #ff0000 !important;
171
- text-shadow: 0 0 10px rgba(255, 0, 0, 0.8) !important;
172
- }
173
-
174
- /* ==========================================================================
175
- 5. TACTICAL FOCUS MODE
176
- ========================================================================== */
177
- .focus-active .data-box:not(.is-focused),
178
- .focus-active .box-gauge { display: none !important; }
179
-
180
- .focus-active.focus-side-left {
181
- grid-template-columns: 3fr 2fr !important;
182
- grid-template-areas: "focused gauge" !important;
183
- grid-template-rows: 100% !important;
184
- }
185
- .focus-active.focus-side-right {
186
- grid-template-columns: 2fr 3fr !important;
187
- grid-template-areas: "gauge focused" !important;
188
- grid-template-rows: 100% !important;
189
- }
190
-
191
- .focus-active .is-focused {
192
- grid-area: focused !important;
193
- height: 100vh !important;
194
- background: rgba(0, 0, 0, 0.02) !important;
195
- padding: 2vw 3vw !important;
196
- justify-content: center !important;
197
- }
198
-
199
- /* Ingrandimento scale nel Focus Mode */
200
- .focus-active .is-focused .scale-labels {
201
- font-size: clamp(14px, 2vw, 24px) !important;
202
- min-width: 60px !important;
203
- color: #444 !important;
204
- }
205
-
206
- /* Margine extra per le scale nel Focus */
207
- .focus-active .is-focused .graph-wrapper { margin-top: 25px !important; }
208
-
209
- /* PRIORITÀ COLORE HERCULES IN FOCUS */
210
- .focus-active .is-focused.box-hercules {
211
- background: rgba(255, 0, 0, 0.12) !important;
212
- box-shadow: inset 0 0 30px rgba(255, 0, 0, 0.1);
213
- }
214
-
215
- .focus-active .is-focused .value {
216
- font-size: clamp(4rem, 25cqh, 15rem) !important;
217
- margin-top: 20px !important;
218
- }
219
-
220
- .focus-active .box-gauge { display: flex !important; grid-area: gauge !important; }
221
-
222
- /* ==========================================================================
223
- 6. VIEWPORT QUADRATA (U-SHAPE) - LOGICA ANTI-COLLISIONE
224
- ========================================================================== */
225
- @media screen and (min-aspect-ratio: 0.86/1) and (max-aspect-ratio: 1.25/1) {
226
- .main-container {
227
- grid-template-columns: 1fr 1fr 1fr 1fr !important;
228
- grid-template-areas:
229
- "stw gauge gauge depth"
230
- "sog gauge gauge tws"
231
- "hdg gauge gauge twa"
232
- "cog tack twd awa" !important;
233
- grid-template-rows: 1.75fr 1.75fr 0.75fr 1.25fr !important;
234
- }
235
-
236
- /* Sfondo per distinguere la riga tattica inferiore */
237
- .box-cog, .box-tack, .box-twd, .box-awa {
238
- border-top: 1px solid #eee;
239
- background: rgba(0, 0, 0, 0.04) !important;
240
- }
241
-
242
- /* --- TACK: Impilamento Verticale Rigido in U-Shape --- */
243
- .box-tack .dual-value-container {
244
- flex-direction: column !important;
245
- justify-content: center !important;
246
- align-items: flex-start !important;
247
- gap: 8px !important;
248
- }
249
-
250
- .box-tack .dual-value-col {
251
- display: flex !important;
252
- flex-direction: column !important;
253
- align-items: flex-start !important;
254
- text-align: left !important;
255
- width: 100% !important;
256
- }
257
-
258
- .box-tack .value.dual-val {
259
- font-size: clamp(1rem, 30cqh, 15cqw) !important;
260
- line-height: 1 !important;
261
- }
262
-
263
- .box-tack .dual-label {
264
- margin-bottom: 0px !important;
265
- }
266
-
267
- /* --- TWD: Calibrazione per box stretto --- */
268
- .box-twd .value-with-compass { justify-content: center; gap: 5px; }
269
- .box-twd .mini-compass { height: 60cqh !important; }
270
- .box-twd #twd-avg { font-size: clamp(1.2rem, 50cqh, 20cqw) !important; }
271
- }
272
-
273
- /* ==========================================================================
274
- 7. GRAFICI, SCALE E STILE DINAMICO
275
- ========================================================================== */
276
- .graph-wrapper {
277
- position: relative;
278
- width: 100%;
279
- flex-grow: 1;
280
- min-height: 0;
281
- margin-top: 5px;
282
- display: flex;
283
- flex-direction: row;
284
- align-items: stretch;
285
- background: rgba(0, 0, 0, 0.04);
286
- border-radius: 4px;
287
- }
288
-
289
- .sparkline {
290
- flex-grow: 1;
291
- height: 100%;
292
- width: 100% !important;
293
- background: transparent !important;
294
- }
295
-
296
- /* I componenti interni dell'SVG gestiscono autonomamente spessori e colori via JS */
297
- .graph-wrapper polygon,
298
- .graph-wrapper line {
299
- transition: all 0.3s ease;
300
- shape-rendering: geometricPrecision;
301
- }
302
-
303
- .graph-wrapper polygon {
304
- filter: drop-shadow(0 0 2px rgba(0,0,0,0.05));
305
- }
306
-
307
- .scale-labels {
308
- display: flex;
309
- flex-direction: column;
310
- justify-content: space-between;
311
- font-size: 9px;
312
- color: #666;
313
- font-weight: 800;
314
- min-width: 22px;
315
- height: 100%;
316
- line-height: 1;
317
- z-index: 5;
318
- }
319
-
320
- /* --- COLONNA SINISTRA (STW, SOG) --- */
321
- .box-stw .sparkline, .box-sog .sparkline { order: 1; }
322
- .box-stw .scale-labels, .box-sog .scale-labels { order: 2; text-align: left; padding-left: 4px; }
323
-
324
- /* --- COLONNA DESTRA (DEPTH, TWS) --- */
325
- .box-depth .scale-labels, .box-tws .scale-labels { order: 1; text-align: right; padding-right: 4px; }
326
- .box-depth .sparkline, .box-tws .sparkline { order: 2; }
327
-
328
- /* --- REGOLE HERCULES (Zoom) --- */
329
- .box-hercules { background: rgba(255, 0, 0, 0.05) !important; }
330
- .box-hercules .scale-labels { color: #ff5555; }
331
- .box-hercules .unit::before {
332
- font-size: 7px; color: #ff4444; font-weight: 900;
333
- letter-spacing: 1px; text-transform: uppercase; content: "HERCULES ";
334
- }
335
-
336
- .line-hercules {
337
- filter: drop-shadow(0 0 5px #ff0000);
338
- }
339
-
340
- /* ==========================================================================
341
- 8. RESPONSIVE (PORTRAIT MODE - Rapporto < 0.85)
342
- ========================================================================== */
343
- @media screen and (max-aspect-ratio: 0.85/1) {
344
- .main-container {
345
- grid-template-areas: "gauge gauge" "stw depth" "sog tws" "hdg twa" "cog awa" "tack twd" !important;
346
- grid-template-columns: 1fr 1fr !important;
347
- grid-template-rows: 40vh 1.75fr 1.75fr 0.75fr 0.75fr 1.25fr !important;
348
- }
349
-
350
- .data-box { height: auto !important; }
351
-
352
- .box-stw, .box-sog, .box-depth, .box-tws { justify-content: flex-start !important; padding-top: 1.2rem !important; }
353
-
354
- .box-stw .value, .box-sog .value, .box-depth .value, .box-tws .value {
355
- font-size: clamp(1.2rem, 30cqh, 35cqw) !important;
356
- line-height: 0.8 !important;
357
- margin-top: -4px !important;
358
- margin-bottom: 4px !important;
359
- padding-bottom: 0 !important;
360
- font-weight: 700;
361
- }
362
-
363
- .box-stw .graph-wrapper, .box-sog .graph-wrapper, .box-depth .graph-wrapper, .box-tws .graph-wrapper {
364
- margin-top: 0 !important;
365
- flex-grow: 1 !important;
366
- }
367
-
368
- .box-hdg, .box-cog, .box-twa, .box-awa, .box-twd, .box-tack { justify-content: center !important; padding-top: 1.2rem !important; }
369
-
370
- .main-container.focus-active {
371
- grid-template-columns: 1fr !important;
372
- grid-template-rows: 65vh 35vh !important;
373
- grid-template-areas: "focused" "gauge" !important;
374
- }
375
- .focus-active .is-focused { height: 65vh !important; width: 100vw !important; padding: 5vh 5vw !important; justify-content: center !important; }
376
- .focus-active .is-focused .value { font-size: clamp(4rem, 20cqh, 15rem) !important; margin-top: 20px !important; }
377
- .focus-active .box-gauge { height: 35vh !important; width: 100vw !important; display: flex !important; align-items: center; justify-content: center; }
378
-
379
- .box-tack .dual-value-container { flex-direction: row !important; justify-content: space-between !important; align-items: center !important; }
380
- .box-tack .dual-value-col { display: flex !important; flex-direction: column !important; justify-content: center; }
381
- .box-tack .dual-value-col:first-child { align-items: flex-start !important; text-align: left !important; }
382
- .box-tack .dual-value-col:last-child { align-items: flex-end !important; text-align: right !important; }
383
- .box-tack .value.dual-val { font-size: clamp(1rem, 38cqh, 15cqw) !important; }
384
- }
385
-
386
- /* ==========================================================================
387
- 9. WIDGETS E OVERRIDE SVG (GIORNO)
388
- ========================================================================= */
389
- #status {
390
- position: absolute;
391
- top: 15px; right: 15px;
392
- font-size: 0.6rem; font-weight: 900;
393
- text-transform: uppercase; z-index: 1000;
394
- background: rgba(0,0,0,0.08);
395
- padding: 3px 8px; border-radius: 4px; letter-spacing: 1px;
396
- }
397
- .online { color: #27ae60; opacity: 0.8; }
398
- .offline { color: #c0392b; font-weight: bold; }
399
-
400
- .mini-compass { background: #f0f0f0; border-radius: 50%; border: 1.5px solid #ddd; }
401
- .mini-compass text:last-of-type { fill: #000 !important; opacity: 0.4; }
402
- #twd-boat-wrap path { fill: #000 !important; opacity: 0.3; }
403
- #twd-wind-chevron { stroke: #000 !important; }
404
-
405
- #wind-gauge circle[fill="#050505"] { fill: #fcfcfc; }
406
- #wind-gauge circle[fill="#121212"] { fill: #f0f0f0; }
407
- #boat-icon { fill: #000 !important; opacity: 1; }
408
- #tick-labels { fill: #444 !important; }
409
- #aws-val-svg { fill: #000 !important; }
410
- #aws-display-group text { fill: #333 !important; }
411
- #fullscreen-hotspot { fill: #eee !important; stroke: #ccc !important; }
412
- #ticks line[stroke="#fff"] { stroke: #000 !important; }
413
- #ticks line[stroke="#666"] { stroke: #bbb !important; }
414
- rect[fill="#222"] { fill: #eee !important; }
415
- #leeway-val { color: #000 !important; }
416
-
417
- #wind-gauge { width: 100%; height: 100%; max-height: 100%; object-fit: contain; }
418
-
419
- /* ==========================================================================
420
- 10. NIGHT MODE (TACTICAL RED - ARCHITETTURA INTEGRALE)
421
- ========================================================================== */
422
- body.night-mode {
423
- background-color: #000 !important;
424
- color: #ff3333 !important;
425
- }
426
-
427
- /* --- 10.1 STRUTTURA DEI CONTENITORI --- */
428
- .night-mode .data-box {
429
- background: rgba(20, 0, 0, 0.4) !important;
430
- border-color: #440000 !important;
431
- box-shadow: inset 0 0 15px rgba(255, 0, 0, 0.05) !important;
432
- }
433
-
434
- /* --- 10.2 TIPOGRAFIA E TESTI --- */
435
- .night-mode .label, .night-mode .unit, .night-mode .dual-label { color: #800000 !important; }
436
- .night-mode .value-large { color: #ff3333 !important; text-shadow: 0 0 8px rgba(255, 0, 0, 0.4) !important; }
437
- .night-mode .value { color: #ff3333; text-shadow: 0 0 8px rgba(255, 0, 0, 0.3); }
438
- .night-mode #status { background: rgba(255, 0, 0, 0.1) !important; color: #ff3333 !important; }
439
-
440
- /* --- 10.3 GRAFICI (STILE DINAMICO NIGHT MODE) --- */
441
- .night-mode .graph-wrapper {
442
- background: rgba(10, 0, 0, 0.8) !important; /* Sfondo scurissimo per alto contrasto */
443
- border: 1px solid #330000;
444
- }
445
-
446
- /* Griglia temporale (minuti e livelli): quasi impercettibile */
447
- .night-mode .sparkline line[stroke="rgba(0,0,0,0.12)"],
448
- .night-mode .sparkline line[stroke="rgba(0,0,0,0.08)"] {
449
- stroke: rgba(255, 0, 0, 0.1) !important; /* Griglia temporale rossa soffusa */
450
- }
451
-
452
- /* Regolazione della luminosità notturna per preservare i gradienti e i colori del JS */
453
- .night-mode .graph-wrapper svg {
454
- filter: brightness(0.6) contrast(1.2);
455
- }
456
-
457
- .night-mode .graph-wrapper line[style] {
458
- stroke-width: 1px !important;
459
- filter: drop-shadow(0 0 2px rgba(255, 0, 0, 0.3));
460
- }
461
-
462
- .night-mode .scale-labels { color: #800000 !important; }
463
- .night-mode .is-focused .scale-labels { color: #ff3333 !important; }
464
-
465
- /* --- 10.4 WIND GAUGE (STRUMENTO CENTRALE) --- */
466
- .night-mode #wind-gauge circle:not(#trend-gauge-cw):not(#trend-gauge-ccw) {
467
- fill: #000000 !important;
468
- stroke: #220000 !important;
469
- }
470
- .night-mode #wind-gauge > circle:nth-of-type(2), .night-mode #fullscreen-hotspot {
471
- fill: #050000 !important;
472
- stroke: #330000 !important;
473
- }
474
-
475
- /* 1. STATO SPENTO/RIPOSO: Attivo solo se l'attributo fill originario è grigio (#bbb o #bbbbbb) */
476
- .night-mode #trend-gauge-cw[fill="#bbb"],
477
- .night-mode #trend-gauge-ccw[fill="#bbb"],
478
- .night-mode #trend-gauge-cw[fill="#bbbbbb"],
479
- .night-mode #trend-gauge-ccw[fill="#bbbbbb"] {
480
- fill: #440000 !important; /* Rosso scurissimo soffuso */
481
- stroke: none !important;
482
- filter: none !important;
483
- opacity: 0.3 !important;
484
- }
485
-
486
- /* 2. STATO ATTIVO VERDE (Buono/Sotto-vento): Attivo solo se JS imposta il colore di lift (#27ae60) */
487
- .night-mode #trend-gauge-cw[fill="#27ae60"],
488
- .night-mode #trend-gauge-ccw[fill="#27ae60"] {
489
- fill: #00C851 !important; /* Verde smeraldo brillante */
490
- stroke: none !important;
491
- filter: drop-shadow(0 0 5px #00C851) !important;
492
- opacity: 1 !important;
493
- }
494
-
495
- /* 3. STATO ATTIVO ROSSO (Scarso/Sopra-vento o strambata): Attivo se JS imposta il colore di header (#c0392b) o se in allarme strambata */
496
- .night-mode #trend-gauge-cw[fill="#c0392b"],
497
- .night-mode #trend-gauge-ccw[fill="#c0392b"],
498
- .night-mode #trend-gauge-cw.is-gybing,
499
- .night-mode #trend-gauge-ccw.is-gybing {
500
- fill: #ff3b30 !important; /* Rosso brillante */
501
- stroke: none !important;
502
- filter: drop-shadow(0 0 5px #ff3b30) !important;
503
- opacity: 1 !important;
504
- }
505
-
506
- .night-mode #center-glow feDropShadow { flood-color: #ff0000 !important; flood-opacity: 0.6 !important; }
507
- .night-mode #boat-icon { fill: #220000 !important; stroke: #ff0000 !important; stroke-width: 0.8px !important; opacity: 1 !important; }
508
- .night-mode #aws-display-group text { fill: #800000 !important; }
509
- .night-mode #aws-val-svg { fill: #ff3333 !important; }
510
- .night-mode #ticks line { stroke: #550000 !important; }
511
- .night-mode #tick-labels { fill: #800000 !important; }
512
- .night-mode #wind-gauge path[stroke="#ff0000"] { stroke: #800000 !important; opacity: 0.8; }
513
- .night-mode #wind-gauge path[stroke="#00ff00"] { stroke: #440000 !important; stroke-dasharray: 5, 4 !important; opacity: 0.7; }
514
- .night-mode #wind-gauge path[stroke="#ff8800"] { stroke: #330000 !important; opacity: 0.6; }
515
- .night-mode #awa-pointer path { fill: #ff0000 !important; stroke: #000 !important; }
516
- .night-mode #twa-pointer path { fill: #800000 !important; stroke: #000 !important; }
517
- .night-mode #track-pointer path { fill: #ff3333 !important; stroke: none !important; }
518
-
519
- /* --- 10.5 WIDGETS ACCESSORI --- */
520
- .night-mode #leeway-val { fill: #ff3333 !important; color: #ff3333 !important; }
521
- .night-mode rect[fill="url(#leeway-grad)"] { fill: url(#leeway-night-grad) !important; }
522
- .night-mode rect[fill="#eee"], .night-mode rect[fill="#222"] { fill: #0a0000 !important; stroke: #330000 !important; }
523
- .night-mode g[stroke="#555"] line { stroke: #440000 !important; }
524
- .night-mode g[fill="#555"] text { fill: #800000 !important; }
525
- .night-mode .mini-compass { border-color: #330000 !important; background: #000 !important; }
526
- .night-mode .mini-compass text { fill: #800000 !important; }
527
- .night-mode .mini-compass text:last-of-type { fill: #800000 !important; opacity: 1; }
528
- .night-mode #twd-boat-wrap path { fill: #ff3333 !important; opacity: 0.4 !important; }
529
- .night-mode #twd-arrow #twd-wind-chevron { stroke: #ff3333 !important; }
530
-
531
- /* --- 10.6 LOGICA RED-SHIFT TREND (PULITA) --- */
532
- .night-mode circle[fill="#bbb"]:not(#trend-gauge-cw):not(#trend-gauge-ccw), .night-mode circle[fill="#bbbbbb"]:not(#trend-gauge-cw):not(#trend-gauge-ccw) {
533
- fill: #440000 !important;
534
- }
535
- .night-mode circle[fill="#27ae60"]:not(#trend-gauge-cw):not(#trend-gauge-ccw) {
536
- fill: #ff0000 !important;
537
- }
538
- .night-mode circle[fill="#c0392b"]:not(#trend-gauge-cw):not(#trend-gauge-ccw) {
539
- fill: #800000 !important;
540
- }
541
-
542
- /* ==========================================================================
543
- 11. TREND E ANIMAZIONI
544
- ========================================================================== */
545
- @keyframes blink-trend { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }
546
- #trend-dot-cw, #trend-dot-ccw, #trend-gauge-cw, #trend-gauge-ccw { opacity: 0.3; transition: opacity 0.3s ease; }
547
- .is-trending { opacity: 1 !important; animation: blink-trend 1s infinite !important; }
548
- .is-gybing { opacity: 1 !important; animation: none !important; filter: drop-shadow(0 0 8px #ff0000) !important; }
549
- .unstable-data { animation: blink-trend 1.5s infinite ease-in-out; color: #e67e22 !important; }
550
-
551
- /* --- CORREZIONE VISIBILITÀ COLORI BASE SCURI IN NIGHT MODE --- */
552
- /* Il Navy Slate (#2c3e50) diventa nero con il filtro notturno. Lo schiariamo a un Grigio-Azzurro. */
553
- .night-mode .graph-wrapper line[style*="#2c3e50"] {
554
- stroke: #6c8ea0 !important;
555
- }
556
- .night-mode .graph-wrapper polygon[style*="#2c3e50"] {
557
- fill: #6c8ea0 !important;
558
- }
559
-
560
- /* Opzionale: Diamo una piccola "spinta" anche all'azzurro della Depth per bilanciarlo */
561
- .night-mode .graph-wrapper line[style*="#0088cc"] {
562
- stroke: #33aadd !important;
563
- }
564
- .night-mode .graph-wrapper polygon[style*="#0088cc"] {
565
- fill: #33aadd !important;
566
- }
567
-
568
- /* ==========================================================================
569
- 12. INTEGRAZIONE DUAL-SVG COMPASS & RADAR
570
- ========================================================================== */
571
- #wind-gauge, #wind-radar {
572
- width: 100%;
573
- height: 100%;
574
- max-height: 100%;
575
- object-fit: contain;
576
- transition: opacity 0.2s ease-in-out;
577
- }
578
-
579
- /* --- OVERRIDE NIGHT MODE PER IL WIND RADAR --- */
580
- .night-mode #wind-radar circle:not(.is-trending) {
581
- fill: #000000 !important;
582
- stroke: #220000 !important;
583
- }
584
- .night-mode #wind-radar circle:nth-of-type(2):not(.is-trending),
585
- .night-mode #radar-hotspot {
586
- fill: #050000 !important;
587
- stroke: #330000 !important;
588
- }
589
- .night-mode #radar-tick-labels {
590
- fill: #800000 !important;
591
- }
592
- .night-mode #radar-boat-icon {
593
- fill: #220000 !important;
594
- stroke: #ff0000 !important;
595
- stroke-width: 0.8px !important;
596
- opacity: 1 !important;
597
- }
598
- .night-mode #ora-orbit {
599
- stroke: #330000 !important;
600
- }
601
- .night-mode #wind-radar circle[stroke="#b0bec5"] {
602
- stroke: #440000 !important;
603
- }
604
-
605
- /* ==========================================================================
606
- 13. SMORZAMENTO FLUIDO AGHI A 60FPS (DAMPING HARDWARE) non utilizzato consuma troppa cpu
607
- ==========================================================================
608
-
609
- Applichiamo la transizione fluida a tutti i puntatori mantenendo i perni nativi dell'SVG
610
- #awa-pointer, #twa-pointer, #track-pointer, #twd-arrow, #twd-boat-wrap {
611
- transition: transform 0.9s cubic-bezier(0.25, 0.8, 0.25, 1);
612
- }
613
-
614
- */
615
-
616
- /* ==========================================================================
617
- 14. POSIZIONAMENTO SOVRAPPOSTO LAYERED COMPASS (0% CARICO CPU)
618
- ========================================================================== */
619
-
620
- /* Contenitore padre relativo */
621
- .wind-gauge-container {
622
- position: relative;
623
- width: 100%;
624
- height: 100%;
625
- max-height: 100%;
626
- display: flex;
627
- align-items: center;
628
- justify-content: center;
629
- }
630
-
631
- /* Sovrapposizione assoluta perfetta del livello lancette sopra lo sfondo */
632
- #wind-gauge-pointers {
633
- position: absolute;
634
- top: 0;
635
- left: 0;
636
- width: 100%;
637
- height: 100%;
638
- object-fit: contain;
639
- pointer-events: none; /* Permette al tocco del mouse di passare sotto al centro interattivo */
640
- }