@sailingrotevista/rotevista-dash 3.0.5 → 4.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.
- package/app.js +459 -278
- package/index.js +72 -54
- package/package.json +1 -1
- package/settings.json +15 -9
- package/style.css +86 -57
package/index.js
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ==========================================================================
|
|
3
|
+
* Rotevista Dash Configuration Plugin
|
|
4
|
+
* ==========================================================================
|
|
5
|
+
* Definisce l'interfaccia di configurazione in Signal K Admin.
|
|
6
|
+
* Le descrizioni sono ottimizzate per riflettere l'utilizzo tattico e strategico.
|
|
7
|
+
*/
|
|
8
|
+
|
|
1
9
|
module.exports = function (app) {
|
|
2
10
|
const plugin = {};
|
|
3
11
|
plugin.id = 'rotevista-dash';
|
|
4
12
|
plugin.name = 'Rotevista Dash Configuration';
|
|
5
|
-
plugin.description = 'Configure boat-specific parameters for the Dashboard';
|
|
13
|
+
plugin.description = 'Configure boat-specific tactical and safety parameters for the Dashboard';
|
|
6
14
|
|
|
7
15
|
plugin.start = function (options) { };
|
|
8
16
|
plugin.stop = function () { };
|
|
@@ -11,122 +19,132 @@ module.exports = function (app) {
|
|
|
11
19
|
type: 'object',
|
|
12
20
|
title: 'Rotevista Dashboard Settings',
|
|
13
21
|
properties: {
|
|
22
|
+
// --- SEZIONE ALLARMI PROFONDITÀ ---
|
|
14
23
|
alarms: {
|
|
15
24
|
type: 'object',
|
|
16
|
-
title: 'Depth Alarms
|
|
17
|
-
description: "Configure safety thresholds for depth monitoring.",
|
|
25
|
+
title: 'Depth Safety Alarms',
|
|
26
|
+
description: "Configure safety thresholds for depth monitoring based on your boat's draft.",
|
|
18
27
|
properties: {
|
|
19
28
|
depthDanger: {
|
|
20
29
|
type: 'number',
|
|
21
|
-
title: '
|
|
22
|
-
description: "Critical depth level.
|
|
30
|
+
title: 'Emergency Depth (Red + Sound)',
|
|
31
|
+
description: "Critical depth level. Below this limit, the display turns RED and the audible 'Bing-Bing' alarm starts.",
|
|
23
32
|
default: 2.5
|
|
24
33
|
},
|
|
25
34
|
depthWarning: {
|
|
26
35
|
type: 'number',
|
|
27
|
-
title: '
|
|
28
|
-
description: "Shallow water
|
|
36
|
+
title: 'Safety Margin (Yellow)',
|
|
37
|
+
description: "Shallow water warning. The depth value turns YELLOW below this threshold to alert you to pay attention.",
|
|
29
38
|
default: 5.0
|
|
30
39
|
}
|
|
31
40
|
}
|
|
32
41
|
},
|
|
42
|
+
// --- SEZIONE GRAFICI E REEF ---
|
|
33
43
|
graphs: {
|
|
34
44
|
type: 'object',
|
|
35
|
-
title: '
|
|
36
|
-
description: "
|
|
45
|
+
title: 'Performance History & Reef Alerts',
|
|
46
|
+
description: "Settings for chart timelines and tactical wind alerts.",
|
|
37
47
|
properties: {
|
|
38
48
|
reef1: {
|
|
39
49
|
type: 'number',
|
|
40
|
-
title: '1st Reef
|
|
41
|
-
description: "TWS
|
|
50
|
+
title: '1st Reef Alert (Orange)',
|
|
51
|
+
description: "Wind speed (TWS) at which the graph turns orange, suggesting it's time to prepare for the first sail reduction.",
|
|
42
52
|
default: 15.0
|
|
43
53
|
},
|
|
44
54
|
reef2: {
|
|
45
55
|
type: 'number',
|
|
46
|
-
title: '2nd Reef
|
|
47
|
-
description: "TWS
|
|
56
|
+
title: '2nd Reef Alert (Red)',
|
|
57
|
+
description: "Wind speed (TWS) at which the graph turns red, indicating urgent need for sail reduction.",
|
|
48
58
|
default: 20.0
|
|
49
59
|
},
|
|
50
60
|
historyMinutes: {
|
|
51
61
|
type: 'number',
|
|
52
|
-
title: '
|
|
53
|
-
description: "Total
|
|
54
|
-
default: 5
|
|
62
|
+
title: 'Strategic Timeline (Minutes)',
|
|
63
|
+
description: "Total duration shown in the charts. Vertical grid lines mark 1-minute intervals for short durations and 5-minute intervals for long ones.",
|
|
64
|
+
default: 5,
|
|
65
|
+
// Menu a tendina per evitare inserimenti errati
|
|
66
|
+
enum: [5, 10, 15, 30, 60]
|
|
55
67
|
}
|
|
56
68
|
}
|
|
57
69
|
},
|
|
70
|
+
// --- SEZIONE MEDIE E STABILITÀ ---
|
|
58
71
|
averaging: {
|
|
59
72
|
type: 'object',
|
|
60
|
-
title: '
|
|
61
|
-
description: "Fine-tune
|
|
73
|
+
title: 'Tactical Brain & Stability',
|
|
74
|
+
description: "Fine-tune how the dashboard reacts to boat movements and maneuvers.",
|
|
62
75
|
properties: {
|
|
63
76
|
longWindow: {
|
|
64
77
|
type: 'number',
|
|
65
|
-
title: '
|
|
66
|
-
description: "
|
|
78
|
+
title: 'Decision Stability Window (ms)',
|
|
79
|
+
description: "The time range used to calculate MEAN values. A longer window (e.g. 30s) provides a solid base for strategy, while a shorter one reacts faster to ogni oscillation.",
|
|
67
80
|
default: 30000
|
|
68
81
|
},
|
|
69
82
|
smoothWindow: {
|
|
70
83
|
type: 'number',
|
|
71
|
-
title: '
|
|
72
|
-
description: "
|
|
84
|
+
title: 'Needle Fluidity (ms)',
|
|
85
|
+
description: "Controls how smoothly pointers move. It filters out sensor 'shaking' without delaying the real-time feel.",
|
|
73
86
|
default: 2000
|
|
74
87
|
},
|
|
75
88
|
minSpeed: {
|
|
76
89
|
type: 'number',
|
|
77
|
-
title: '
|
|
78
|
-
description: "
|
|
90
|
+
title: 'Harbor Silence (knots)',
|
|
91
|
+
description: "Minimum speed required to enable orange blinking alerts. This prevents the display from flashing due to GPS noise while docked or at anchor.",
|
|
79
92
|
default: 0.5
|
|
93
|
+
},
|
|
94
|
+
stabilityThreshold: {
|
|
95
|
+
type: 'number',
|
|
96
|
+
title: 'Steering Precision (Sensitivity)',
|
|
97
|
+
description: "Controls how strictly the system judges your course coherence. 0.95 requires pro precision; 0.85 is more realistic for cruising in waves.",
|
|
98
|
+
default: 0.85
|
|
99
|
+
},
|
|
100
|
+
stabilityBreakout: {
|
|
101
|
+
type: 'number',
|
|
102
|
+
title: 'Maneuver Detection Limit (degrees)',
|
|
103
|
+
description: "If the boat or wind shifts more than these degrees, the display blinks orange to warn you that the current average is no longer reliable.",
|
|
104
|
+
default: 15
|
|
80
105
|
}
|
|
81
106
|
}
|
|
82
107
|
},
|
|
108
|
+
// --- SEZIONE CALIBRAZIONE SCALE ---
|
|
83
109
|
scales: {
|
|
84
110
|
type: 'object',
|
|
85
|
-
title: '
|
|
86
|
-
description: "Customize how
|
|
111
|
+
title: 'Chart Scale Calibration',
|
|
112
|
+
description: "Customize how charts adapt to your boat's performance in both Standard and Hercules Zoom modes.",
|
|
87
113
|
properties: {
|
|
88
114
|
stw: {
|
|
89
|
-
type: 'object',
|
|
115
|
+
type: 'object',
|
|
116
|
+
title: 'STW (Speed Through Water)',
|
|
90
117
|
properties: {
|
|
91
|
-
stdMax: {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
default: 12
|
|
95
|
-
},
|
|
96
|
-
step: {
|
|
97
|
-
type: 'number', title: 'Rounding Step',
|
|
98
|
-
description: "The fixed increment used when speed exceeds the Max (e.g., scale jumps from 0-12 to 0-14, 0-16).",
|
|
99
|
-
default: 2
|
|
100
|
-
},
|
|
101
|
-
hercSpan: {
|
|
102
|
-
type: 'number', title: 'Hercules Zoom Span',
|
|
103
|
-
description: "The minimum knots window centered on current speed. Smaller values increase 'zoom' on small variations.",
|
|
104
|
-
default: 4
|
|
105
|
-
}
|
|
118
|
+
stdMax: { type: 'number', title: 'Standard Max', description: "Default top limit of the graph.", default: 12 },
|
|
119
|
+
step: { type: 'number', title: 'Scale Jump', description: "Amount the scale increases when you exceed the limit.", default: 2 },
|
|
120
|
+
hercSpan: { type: 'number', title: 'Hercules Zoom Span', description: "Width of the zoom window around your current speed.", default: 4 }
|
|
106
121
|
}
|
|
107
122
|
},
|
|
108
123
|
sog: {
|
|
109
|
-
type: 'object',
|
|
124
|
+
type: 'object',
|
|
125
|
+
title: 'SOG (Speed Over Ground)',
|
|
110
126
|
properties: {
|
|
111
|
-
stdMax: { type: 'number', title: 'Standard
|
|
112
|
-
step: { type: 'number', title: '
|
|
113
|
-
hercSpan: { type: 'number', title: 'Hercules Zoom Span',
|
|
127
|
+
stdMax: { type: 'number', title: 'Standard Max', default: 12 },
|
|
128
|
+
step: { type: 'number', title: 'Scale Jump', default: 2 },
|
|
129
|
+
hercSpan: { type: 'number', title: 'Hercules Zoom Span', default: 4 }
|
|
114
130
|
}
|
|
115
131
|
},
|
|
116
132
|
tws: {
|
|
117
|
-
type: 'object',
|
|
133
|
+
type: 'object',
|
|
134
|
+
title: 'TWS (True Wind Speed)',
|
|
118
135
|
properties: {
|
|
119
|
-
stdMax: { type: 'number', title: 'Standard
|
|
120
|
-
step: { type: 'number', title: '
|
|
121
|
-
hercSpan: { type: 'number', title: 'Hercules Zoom Span',
|
|
136
|
+
stdMax: { type: 'number', title: 'Standard Max', default: 25 },
|
|
137
|
+
step: { type: 'number', title: 'Scale Jump', default: 5 },
|
|
138
|
+
hercSpan: { type: 'number', title: 'Hercules Zoom Span', default: 10 }
|
|
122
139
|
}
|
|
123
140
|
},
|
|
124
141
|
depth: {
|
|
125
|
-
type: 'object',
|
|
142
|
+
type: 'object',
|
|
143
|
+
title: 'Depth',
|
|
126
144
|
properties: {
|
|
127
|
-
stdMax: { type: 'number', title: 'Standard
|
|
128
|
-
step: { type: 'number', title: '
|
|
129
|
-
hercSpan: { type: 'number', title: 'Hercules Zoom Span',
|
|
145
|
+
stdMax: { type: 'number', title: 'Standard Max', default: 20 },
|
|
146
|
+
step: { type: 'number', title: 'Scale Jump', default: 10 },
|
|
147
|
+
hercSpan: { type: 'number', title: 'Hercules Zoom Span', default: 10 }
|
|
130
148
|
}
|
|
131
149
|
}
|
|
132
150
|
}
|
package/package.json
CHANGED
package/settings.json
CHANGED
|
@@ -3,16 +3,22 @@
|
|
|
3
3
|
"depthDanger": 2.5,
|
|
4
4
|
"depthWarning": 5.0
|
|
5
5
|
},
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
6
|
+
"graphs": {
|
|
7
|
+
"reef1": 15.0,
|
|
8
|
+
"reef2": 20.0,
|
|
9
|
+
"historyMinutes": 5
|
|
9
10
|
},
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
11
|
+
"averaging": {
|
|
12
|
+
"longWindow": 30000,
|
|
13
|
+
"smoothWindow": 2000,
|
|
14
|
+
"minSpeed": 0.5,
|
|
15
|
+
"stabilityThreshold": 0.85,
|
|
16
|
+
"stabilityBreakout": 15
|
|
13
17
|
},
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
18
|
+
"scales": {
|
|
19
|
+
"stw": { "stdMax": 12, "step": 2, "hercSpan": 4 },
|
|
20
|
+
"sog": { "stdMax": 12, "step": 2, "hercSpan": 4 },
|
|
21
|
+
"tws": { "stdMax": 25, "step": 5, "hercSpan": 10 },
|
|
22
|
+
"depth": { "stdMax": 20, "step": 10, "hercSpan": 10 }
|
|
17
23
|
}
|
|
18
24
|
}
|
package/style.css
CHANGED
|
@@ -140,6 +140,11 @@ body {
|
|
|
140
140
|
.focus-active .data-box:not(.is-focused),
|
|
141
141
|
.focus-active .box-gauge { display: none !important; }
|
|
142
142
|
|
|
143
|
+
.focus-active .is-focused .sparkline path,
|
|
144
|
+
.focus-active .is-focused .sparkline line {
|
|
145
|
+
stroke-width: 1.5px !important; /* Un briciolo più spessa per la stabilità visiva su schermi grandi */
|
|
146
|
+
}
|
|
147
|
+
|
|
143
148
|
.focus-active.focus-side-left {
|
|
144
149
|
grid-template-columns: 3fr 2fr !important;
|
|
145
150
|
grid-template-areas: "focused gauge" !important;
|
|
@@ -265,6 +270,10 @@ body {
|
|
|
265
270
|
.sparkline line {
|
|
266
271
|
stroke-width: 1px !important;
|
|
267
272
|
transition: all 0.3s ease;
|
|
273
|
+
/* --- FIX LINEE SPEZZATE --- */
|
|
274
|
+
stroke-linecap: round; /* Arrotonda le estremità dei segmenti */
|
|
275
|
+
stroke-linejoin: round; /* Arrotonda le giunture tra i segmenti */
|
|
276
|
+
shape-rendering: geometricPrecision; /* Forza il browser a calcolare la linea con precisione sub-pixel */
|
|
268
277
|
}
|
|
269
278
|
|
|
270
279
|
.scale-labels {
|
|
@@ -425,136 +434,156 @@ rect[fill="#222"] { fill: #eee !important; }
|
|
|
425
434
|
#wind-gauge { width: 100%; height: 100%; max-height: 100%; object-fit: contain; }
|
|
426
435
|
|
|
427
436
|
/* ==========================================================================
|
|
428
|
-
10. NIGHT MODE (TACTICAL RED -
|
|
437
|
+
10. NIGHT MODE (TACTICAL RED - ARCHITETTURA INTEGRALE)
|
|
438
|
+
==========================================================================
|
|
439
|
+
Questa sezione sovrascrive interamente lo schema Day Mode.
|
|
440
|
+
Obiettivo: Massima leggibilità, zero abbagliamento, preservazione visione notturna.
|
|
429
441
|
========================================================================== */
|
|
442
|
+
|
|
430
443
|
body.night-mode {
|
|
431
444
|
background-color: #000 !important;
|
|
432
445
|
color: #ff3333 !important;
|
|
433
446
|
}
|
|
434
447
|
|
|
435
|
-
/* --- STRUTTURA
|
|
448
|
+
/* --- 10.1 STRUTTURA DEI CONTENITORI --- */
|
|
436
449
|
.night-mode .data-box {
|
|
437
|
-
background: rgba(
|
|
438
|
-
border-color: #440000 !important; /* Confini
|
|
450
|
+
background: rgba(20, 0, 0, 0.4) !important;
|
|
451
|
+
border-color: #440000 !important; /* Confini rossi cupi per orientamento spaziale */
|
|
452
|
+
box-shadow: inset 0 0 15px rgba(255, 0, 0, 0.05) !important;
|
|
439
453
|
}
|
|
440
454
|
|
|
441
|
-
/*
|
|
455
|
+
/* --- 10.2 TIPOGRAFIA E TESTI --- */
|
|
456
|
+
/* Etichette primarie (Titoli dei box) */
|
|
442
457
|
.night-mode .label,
|
|
443
458
|
.night-mode .unit,
|
|
444
|
-
.night-mode .dual-label,
|
|
445
459
|
.night-mode .dual-label {
|
|
446
|
-
color: #800000 !important;
|
|
460
|
+
color: #800000 !important; /* Rosso sangue scuro per non distrarre */
|
|
447
461
|
}
|
|
448
462
|
|
|
449
|
-
/* Valori
|
|
450
|
-
.night-mode .value,
|
|
463
|
+
/* Valori digitali primari (Heading, Cog, Awa, Twa) */
|
|
451
464
|
.night-mode .value-large {
|
|
452
465
|
color: #ff3333 !important;
|
|
453
|
-
text-shadow: 0 0 8px rgba(255, 0, 0, 0.4);
|
|
466
|
+
text-shadow: 0 0 8px rgba(255, 0, 0, 0.4) !important;
|
|
454
467
|
}
|
|
455
468
|
|
|
456
|
-
/*
|
|
469
|
+
/* Valori dinamici (SOG, TWS, STW):
|
|
470
|
+
Non usiamo !important per permettere al JavaScript di iniettare i colori dei Reef/Corrente */
|
|
471
|
+
.night-mode .value {
|
|
472
|
+
color: #ff3333;
|
|
473
|
+
text-shadow: 0 0 8px rgba(255, 0, 0, 0.3);
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/* Widget di Stato */
|
|
457
477
|
.night-mode #status {
|
|
458
478
|
background: rgba(255, 0, 0, 0.1) !important;
|
|
459
479
|
color: #ff3333 !important;
|
|
460
480
|
}
|
|
461
481
|
|
|
462
|
-
/* --- GRAFICI (
|
|
463
|
-
.night-mode .graph-wrapper {
|
|
464
|
-
|
|
482
|
+
/* --- 10.3 GRAFICI (STILE CHIRURGICO 1PX) --- */
|
|
483
|
+
.night-mode .graph-wrapper {
|
|
484
|
+
background: rgba(0, 0, 0, 0.6) !important;
|
|
485
|
+
border: 1px solid #330000;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/* Rimuove l'area di riempimento per evitare luce diffusa sul display */
|
|
489
|
+
.night-mode .sparkline path:first-of-type {
|
|
490
|
+
display: none !important;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/* Linea dati: rossa, sottile e nitida */
|
|
465
494
|
.night-mode .sparkline path {
|
|
466
495
|
fill: none !important;
|
|
467
496
|
stroke: #ff3333 !important;
|
|
468
497
|
stroke-width: 1px !important;
|
|
469
498
|
filter: drop-shadow(0 0 2px rgba(255, 0, 0, 0.4));
|
|
470
499
|
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
stroke
|
|
500
|
+
|
|
501
|
+
/* Griglia temporale (minuti e livelli): quasi impercettibile */
|
|
502
|
+
.night-mode .sparkline line {
|
|
503
|
+
stroke: rgba(150, 0, 0, 0.15) !important;
|
|
475
504
|
}
|
|
476
505
|
|
|
506
|
+
/* LOGICA REEF TWS: Mantiene i colori degli allarmi sul grafico */
|
|
507
|
+
.night-mode .tws-reef-line { stroke-width: 1px !important; opacity: 0.9 !important; }
|
|
508
|
+
.night-mode .tws-reef-line[stroke="#000000"],
|
|
509
|
+
.night-mode .tws-reef-line[stroke="#000"] { stroke: #440000 !important; } /* Vento basso */
|
|
510
|
+
.night-mode .tws-reef-line[stroke="#e67e22"] { stroke: #b35500 !important; } /* 1° Reef */
|
|
511
|
+
.night-mode .tws-reef-line[stroke="#e74c3c"] {
|
|
512
|
+
stroke: #ff0000 !important;
|
|
513
|
+
filter: drop-shadow(0 0 2px #ff0000);
|
|
514
|
+
} /* 2° Reef */
|
|
515
|
+
|
|
477
516
|
/* Scale graduate dei grafici */
|
|
478
517
|
.night-mode .scale-labels { color: #800000 !important; }
|
|
479
518
|
.night-mode .is-focused .scale-labels { color: #ff3333 !important; }
|
|
480
519
|
|
|
481
|
-
/* --- WIND GAUGE
|
|
482
|
-
/*
|
|
520
|
+
/* --- 10.4 WIND GAUGE (STRUMENTO CENTRALE) --- */
|
|
521
|
+
/* Oscuramento cerchi concentrici per eliminare bagliori bianchi */
|
|
483
522
|
.night-mode #wind-gauge circle {
|
|
484
523
|
fill: #000 !important;
|
|
485
524
|
stroke: #220000 !important;
|
|
486
525
|
}
|
|
487
526
|
|
|
488
|
-
/* Cerchio
|
|
527
|
+
/* Cerchio interno e hotspot centrale (nero profondo) */
|
|
489
528
|
.night-mode #wind-gauge circle:nth-of-type(2),
|
|
490
529
|
.night-mode #fullscreen-hotspot {
|
|
491
530
|
fill: #050000 !important;
|
|
492
531
|
stroke: #330000 !important;
|
|
493
532
|
}
|
|
494
533
|
|
|
495
|
-
/*
|
|
496
|
-
.night-mode #center-glow feDropShadow {
|
|
497
|
-
|
|
498
|
-
|
|
534
|
+
/* Effetto Glow e Logo Barca */
|
|
535
|
+
.night-mode #center-glow feDropShadow { flood-color: #ff0000 !important; flood-opacity: 0.6 !important; }
|
|
536
|
+
/* ICONA BARCA NIGHT: Definizione migliorata con bordo rosso */
|
|
537
|
+
.night-mode #boat-icon {
|
|
538
|
+
fill: #220000 !important; /* Rosso scurissimo per il corpo della barca */
|
|
539
|
+
stroke: #ff0000 !important; /* Bordo rosso vivo per definire la sagoma */
|
|
540
|
+
stroke-width: 0.8px !important; /* Spessore sottile ma netto */
|
|
541
|
+
opacity: 1 !important; /* Piena opacità per far risaltare il bordo */
|
|
499
542
|
}
|
|
500
|
-
|
|
501
|
-
/* AWS Interno: Etichetta e Valore */
|
|
543
|
+
/* Valori interni (AWS) */
|
|
502
544
|
.night-mode #aws-display-group text { fill: #800000 !important; }
|
|
503
545
|
.night-mode #aws-val-svg { fill: #ff3333 !important; }
|
|
504
546
|
|
|
505
|
-
/*
|
|
506
|
-
.night-mode #boat-icon {
|
|
507
|
-
fill: #150000 !important;
|
|
508
|
-
opacity: 0.8 !important;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
/* FIX COG/TRACK: Triangolo rosso senza bordo bianco */
|
|
512
|
-
.night-mode #track-pointer path {
|
|
513
|
-
fill: #ff3333 !important;
|
|
514
|
-
stroke: none !important;
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
/* Tacche e Numeri Gradi Bussola */
|
|
547
|
+
/* Tacche e Numeri Gradi della Bussola */
|
|
518
548
|
.night-mode #ticks line { stroke: #550000 !important; }
|
|
519
549
|
.night-mode #tick-labels { fill: #800000 !important; }
|
|
520
550
|
|
|
521
|
-
/*
|
|
551
|
+
/* SETTORI VENTO: Conversione sicura per la notte */
|
|
522
552
|
.night-mode #wind-gauge path[stroke="#ff0000"] { stroke: #800000 !important; opacity: 0.8; }
|
|
523
553
|
.night-mode #wind-gauge path[stroke="#00ff00"] {
|
|
524
554
|
stroke: #440000 !important;
|
|
525
555
|
stroke-dasharray: 5, 4 !important;
|
|
526
556
|
opacity: 0.7;
|
|
527
|
-
}
|
|
557
|
+
} /* Verde Starboard -> Rosso tratteggiato */
|
|
528
558
|
.night-mode #wind-gauge path[stroke="#ff8800"] { stroke: #330000 !important; opacity: 0.6; }
|
|
529
559
|
|
|
530
|
-
/* Lancette AWA/TWA */
|
|
560
|
+
/* Lancette AWA/TWA e COG */
|
|
531
561
|
.night-mode #awa-pointer path { fill: #ff0000 !important; stroke: #000 !important; }
|
|
532
562
|
.night-mode #twa-pointer path { fill: #800000 !important; stroke: #000 !important; }
|
|
563
|
+
.night-mode #track-pointer path { fill: #ff3333 !important; stroke: none !important; }
|
|
533
564
|
|
|
534
|
-
/* ---
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
color: #ff3333 !important;
|
|
538
|
-
}
|
|
565
|
+
/* --- 10.5 WIDGETS ACCESSORI --- */
|
|
566
|
+
/* Barra Leeway */
|
|
567
|
+
.night-mode #leeway-val { fill: #ff3333 !important; color: #ff3333 !important; }
|
|
539
568
|
.night-mode rect[fill="url(#leeway-grad)"] { fill: url(#leeway-night-grad) !important; }
|
|
540
569
|
.night-mode rect[fill="#eee"],
|
|
541
|
-
.night-mode rect[fill="#222"] {
|
|
542
|
-
fill: #0a0000 !important;
|
|
543
|
-
stroke: #330000 !important;
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
/* Scala graduata Leeway (tacche e numeri) */
|
|
570
|
+
.night-mode rect[fill="#222"] { fill: #0a0000 !important; stroke: #330000 !important; }
|
|
547
571
|
.night-mode g[stroke="#555"] line { stroke: #440000 !important; }
|
|
548
572
|
.night-mode g[fill="#555"] text { fill: #800000 !important; }
|
|
549
573
|
|
|
550
|
-
/*
|
|
574
|
+
/* Mini Bussola TWD */
|
|
551
575
|
.night-mode .mini-compass { border-color: #330000 !important; background: #000 !important; }
|
|
552
|
-
.night-mode .mini-compass circle { stroke: #330000 !important; }
|
|
553
576
|
.night-mode .mini-compass text { fill: #800000 !important; }
|
|
554
|
-
.night-mode .mini-compass text:last-of-type { fill: #800000 !important; opacity: 1; }
|
|
577
|
+
.night-mode .mini-compass text:last-of-type { fill: #800000 !important; opacity: 1; }
|
|
555
578
|
.night-mode #twd-boat-wrap path { fill: #ff3333 !important; opacity: 0.4 !important; }
|
|
556
579
|
.night-mode #twd-arrow #twd-wind-chevron { stroke: #ff3333 !important; }
|
|
557
580
|
|
|
581
|
+
/* --- 10.6 LOGICA RED-SHIFT TREND --- */
|
|
582
|
+
/* Converte i colori generati dal JS per i pallini di trend */
|
|
583
|
+
.night-mode circle[fill="#bbb"], .night-mode circle[fill="#bbbbbb"] { fill: #440000 !important; } /* Neutro */
|
|
584
|
+
.night-mode circle[fill="#27ae60"] { fill: #ff0000 !important; } /* Lift */
|
|
585
|
+
.night-mode circle[fill="#c0392b"] { fill: #800000 !important; } /* Header */
|
|
586
|
+
|
|
558
587
|
/* ==========================================================================
|
|
559
588
|
11. TREND E ANIMAZIONI
|
|
560
589
|
========================================================================== */
|