@sailingrotevista/rotevista-dash 2.0.5 → 2.0.7

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/style.css +105 -38
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sailingrotevista/rotevista-dash",
3
- "version": "2.0.5",
3
+ "version": "2.0.7",
4
4
  "description": "Public Wind Dashboard with navigation and course aids",
5
5
  "main": "index.js",
6
6
  "publishConfig": {
package/style.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /* ==========================================================================
2
- 1. BASE E STRUTTURA GENERALE
2
+ 1. BASE E STRUTTURA GENERALE (LIQUID GRID LAYOUT)
3
3
  ========================================================================== */
4
4
  body {
5
5
  background-color: #000;
@@ -8,7 +8,6 @@ body {
8
8
  margin: 0; padding: 0;
9
9
  height: 100vh; width: 100vw;
10
10
  overflow: hidden;
11
- /* BLOCCO TOTALE GESTI DI SISTEMA (Android/iOS) */
12
11
  -webkit-touch-callout: none;
13
12
  -webkit-user-select: none;
14
13
  user-select: none;
@@ -20,11 +19,29 @@ body {
20
19
  width: 100%; height: 100%;
21
20
  padding: 5px; box-sizing: border-box;
22
21
  gap: 8px;
23
- grid-template-columns: 1.7fr 3fr 1.7fr;
22
+
23
+ /*
24
+ LAYOUT LIQUIDO DEFINITIVO:
25
+ SX: Prende 1 frazione di tutto lo spazio libero, minimo 160px.
26
+ CENTRO: Prende ESATTAMENTE la larghezza che serve al cerchio SVG (auto).
27
+ DX: Prende 1 frazione di tutto lo spazio libero, minimo 160px.
28
+ */
29
+ grid-template-columns: minmax(240px, 1fr) auto minmax(240px, 1fr);
24
30
  grid-template-rows: 100%;
25
31
  transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
32
+
33
+ /* Assicura che la griglia usi tutto lo spazio orizzontale */
34
+ justify-content: stretch;
26
35
  }
27
36
 
37
+ /* Espansione colonne per schermi larghi (16:10) */
38
+ @media (min-aspect-ratio: 1.5) {
39
+ .main-container {
40
+ /* Aumentiamo il gap e il minimo vitale per schermi enormi */
41
+ grid-template-columns: minmax(200px, 1fr) auto minmax(200px, 1fr);
42
+ gap: 15px;
43
+ }
44
+ }
28
45
  /* ==========================================================================
29
46
  2. PANNELLI E DATA-BOX
30
47
  ========================================================================== */
@@ -49,54 +66,81 @@ body {
49
66
  touch-action: none;
50
67
  }
51
68
 
52
- /* Altezze Desktop */
69
+ /* Altezze Desktop (Validate) */
53
70
  .data-box:nth-child(1), .data-box:nth-child(2) { height: 25vh; }
54
71
  .data-box:nth-child(3), .data-box:nth-child(4), .data-box:nth-child(5) { height: 16.666vh; }
55
72
 
56
- /* Allineamento Speculare Data Box */
73
+ /* Allineamento Speculare Box */
57
74
  .left-panel .data-box { align-items: flex-start; text-align: left; }
58
75
  .right-panel .data-box { align-items: flex-end; text-align: right; }
59
76
 
60
77
  /* ==========================================================================
61
- 3. TACTICAL FOCUS MODE (ORIZZONTALE) E INGRANDIMENTI
78
+ 3. TACTICAL FOCUS MODE (AUTO-EXPANDING SPLIT)
62
79
  ========================================================================== */
63
- .focus-active { grid-template-columns: 1fr 1fr !important; }
80
+
81
+ /* Nascondi i pannelli laterali non interessati */
64
82
  .focus-active .side-panel:not(.has-focus) { display: none !important; }
83
+ .focus-active .side-panel.has-focus {
84
+ min-width: 400px !important;
85
+ }
86
+
65
87
 
66
- /* Simmetria Orizzontale */
88
+
89
+ /*
90
+ LOGICA POSIZIONE E LARGHEZZA:
91
+ Il Vento prende solo la larghezza del suo cerchio (auto).
92
+ Il Box focalizzato si prende TUTTO il resto dello schermo (1fr).
93
+ */
94
+ .focus-active.focus-side-left {
95
+ grid-template-columns: 1fr auto !important; /* Dati SX giganti, Vento DX compatto */
96
+ }
67
97
  .focus-active.focus-side-left .side-panel.has-focus { grid-column: 1 !important; }
68
- .focus-active.focus-side-left .center-panel { grid-column: 2 !important; }
69
- .focus-active.focus-side-right .center-panel { grid-column: 1 !important; }
98
+ .focus-active.focus-side-left .center-panel { grid-column: 2 !important; justify-content: flex-start; }
99
+
100
+ .focus-active.focus-side-right {
101
+ grid-template-columns: auto 1fr !important; /* Vento SX compatto, Dati DX giganti */
102
+ }
103
+ .focus-active.focus-side-right .center-panel { grid-column: 1 !important; justify-content: flex-start; }
70
104
  .focus-active.focus-side-right .side-panel.has-focus { grid-column: 2 !important; }
71
105
 
106
+ /* Gestione Box Focalizzato a tutto schermo */
72
107
  .focus-active .has-focus .data-box:not(.is-focused) { display: none !important; }
73
- .focus-active .has-focus .data-box.is-focused { height: 100vh !important; border: none; background: rgba(255, 255, 255, 0.05); padding: 20px; }
108
+ .focus-active .has-focus .data-box.is-focused {
109
+ height: 100vh !important;
110
+ border: none;
111
+ background: rgba(255, 255, 255, 0.05);
112
+ padding: 20px;
113
+ }
74
114
 
75
- /* Ingrandimenti in Focus Mode */
76
- .focus-active .is-focused .value { font-size: clamp(4rem, 25cqh, 10rem) !important; margin-top: 15px; }
77
- .focus-active .is-focused .scale-labels { font-size: 24px !important; min-width: 60px !important; line-height: 1.2; }
78
- .focus-active .is-focused .label-row .label { font-size: 1.5rem !important; }
79
- .focus-active .is-focused .label-row .unit { font-size: 1.5rem !important; }
115
+ /* Tipografia Extreme per Focus Mode */
116
+ .focus-active .is-focused .value { font-size: clamp(4rem, 25cqh, 4rem) !important; margin-top: 15px; }
117
+ .focus-active .is-focused .scale-labels { font-size: 32px !important; min-width: 40px !important; line-height: 1.2; }
118
+ .focus-active .is-focused .label-row .label { font-size: 2rem !important; }
119
+ .focus-active .is-focused .label-row .unit { font-size: 2rem !important; }
80
120
 
81
- /* Ingrandimento scritta Hercules */
121
+ /* Ingrandimento scritta Hercules in Focus */
82
122
  .focus-active .is-focused.box-hercules .unit::before,
83
123
  .focus-active .is-focused.box-hercules .unit::after,
84
124
  .focus-active .is-focused.box-hercules .label::before,
85
125
  .focus-active .is-focused.box-hercules .label::after {
86
- font-size: 14px !important;
87
- letter-spacing: 2px;
126
+ font-size: 1.5rem !important;
127
+ letter-spacing: 2px !important;
88
128
  }
89
129
 
90
- .focus-active .is-focused .sparkline path { stroke-width: 0.8px !important; }
130
+ .focus-active .is-focused .sparkline path { stroke-width: 1px !important; }
91
131
 
92
132
  /* ==========================================================================
93
- 4. TIPOGRAFIA DINAMICA E SIMMETRIA
133
+ 4. TIPOGRAFIA E LABEL-ROW (SIMMETRIA)
94
134
  ========================================================================== */
95
135
  .label-row { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 2px; width: 100%; }
96
136
 
97
- /* Simmetria Titoli/Unità */
98
- .left-panel .label-row { justify-content: space-between; }
137
+ /* SX: [Titolo] ... [Unità] */
138
+ .left-panel .label-row { justify-content: space-between; flex-direction: row; }
139
+
140
+ /* DX: [Unità] ... [Titolo] */
99
141
  .right-panel .label-row { justify-content: space-between; flex-direction: row; }
142
+
143
+ /* FIX: Spinge i titoli MEAN a destra nella colonna DX */
100
144
  .right-panel .label-row .label:only-child { margin-left: auto; }
101
145
 
102
146
  .label { color: #666; font-size: 0.65rem; font-weight: bold; text-transform: uppercase; }
@@ -106,32 +150,45 @@ body {
106
150
  .value-large, .dual-value-container, .value-with-compass { margin-top: auto; margin-bottom: auto; }
107
151
  .value-large { font-size: clamp(1.5rem, 35cqh, 4.5rem); line-height: 0.85; }
108
152
 
153
+ /* TACK Layout */
109
154
  .dual-value-container { display: flex; justify-content: space-between; width: 100%; }
110
155
  .dual-value-col { display: flex; flex-direction: column; width: 48%; }
111
156
  .dual-label { color: #666; font-size: 0.55rem; font-weight: bold; text-transform: uppercase; margin-bottom: 2px; }
112
157
  .value.dual-val { font-size: clamp(1rem, 22cqh, 2rem); padding-bottom: 0; line-height: 0.9; }
113
158
 
159
+ /* BUSSOLA TWD */
114
160
  .value-with-compass { display: flex; justify-content: space-between; align-items: center; width: 100%; gap: 10px; }
115
- .mini-compass { width: clamp(40px, 60cqh, 120px); height: clamp(40px, 60cqh, 120px); background: #000; border-radius: 50%; flex-shrink: 0; border: 1.5px solid #333; box-shadow: inset 0 0 10px rgba(0,0,0,0.8); }
161
+ .mini-compass { width: clamp(40px, 60cqh, 120px); height: clamp(40px, 60cqh, 120px); background: #000; border-radius: 50%; flex-shrink: 0; border: 1.5px solid #333; box-shadow: inset 0 0 10px rgba(0,0,0,0.8); transition: all 0.4s ease; }
116
162
  .value-with-compass .value-large { margin: 0; flex-grow: 1; text-align: right; font-size: clamp(1.2rem, 35cqh, 4rem); }
117
163
 
118
164
  /* ==========================================================================
119
165
  5. GRAFICI E SCALE
120
166
  ========================================================================== */
121
- .graph-wrapper { position: relative; width: 100%; flex-grow: 1; min-height: 0; margin-top: 4px; display: flex; align-items: stretch; gap: 6px; }
122
- .sparkline { flex-grow: 1; height: 100%; background: rgba(255, 255, 255, 0.03); border-radius: 4px; }
167
+ .graph-wrapper {
168
+ position: relative; width: 100%; flex-grow: 1; min-height: 0; margin-top: 4px;
169
+ display: flex; align-items: stretch; background: rgba(255, 255, 255, 0.03);
170
+ border-radius: 4px; gap: 2px;
171
+ }
172
+
173
+ /* Spostamento verso il centro */
174
+ .left-panel .graph-wrapper { margin-right: -6px; }
175
+ .right-panel .graph-wrapper { margin-left: 666px; }
176
+
177
+ .sparkline { flex-grow: 1; height: 100%; background: transparent !important; display: block; }
123
178
  .sparkline path, .sparkline line { stroke-width: 1px !important; transition: all 0.3s ease; }
124
179
 
125
- .scale-labels { display: flex; flex-direction: column; justify-content: space-between; font-size: 10px; color: #777; font-weight: bold; min-width: 20px; height: 100%; line-height: 1; }
126
- .left-panel .scale-labels { order: 2; text-align: left; }
180
+ .scale-labels { display: flex; flex-direction: column; justify-content: space-between; font-size: 10px; color: #777; font-weight: bold; min-width: 10px; height: 100%; line-height: 1; padding: 2px 0; }
181
+
182
+ /* Simmetria Scale */
183
+ .left-panel .scale-labels { order: 2; text-align: left; padding-left: 4px; border-left: 1px solid rgba(255,255,255,0.08); }
127
184
  .left-panel .sparkline { order: 1; }
128
- .right-panel .scale-labels { order: 1; text-align: right; }
185
+ .right-panel .scale-labels { order: 1; text-align: right; padding-right: 4px; border-right: 1px solid rgba(255,255,255,0.08); }
129
186
  .right-panel .sparkline { order: 2; }
130
187
 
131
188
  #stw-graph { stroke: #2ecc71; fill: rgba(46, 204, 113, 0.12); }
132
189
  #sog-graph { stroke: #f39c12; fill: rgba(243, 156, 18, 0.12); }
133
190
  #depth-graph { stroke: #3498db; fill: rgba(52, 152, 219, 0.12); }
134
- #tws-graph { stroke: #f1c40f; fill: rgba(241, 196, 15, 0.12); }
191
+ #tws-graph { stroke: #ffffff; fill: rgba(255, 255, 255, 0.08); }
135
192
 
136
193
  /* ==========================================================================
137
194
  6. HERCULES MODE (LABEL TOP E SIMMETRIA)
@@ -139,13 +196,27 @@ body {
139
196
  .line-hercules { filter: drop-shadow(0 0 5px #ff0000); stroke-width: 1.8px !important; }
140
197
  .box-hercules { background: rgba(255, 0, 0, 0.08) !important; }
141
198
 
142
- /* Simmetria Scritta Hercules */
199
+ /* Ingrandimento Hercules in Focus Mode */
200
+ .focus-active .is-focused.box-hercules .unit::before,
201
+ .focus-active .is-focused.box-hercules .unit::after,
202
+ .focus-active .is-focused.box-hercules .label::before {
203
+ font-size: 16px !important; /* Raddoppiato in Focus */
204
+ letter-spacing: 2px;
205
+ }
206
+
207
+ /* Stile base Hercules */
143
208
  .box-hercules .unit::before, .box-hercules .unit::after,
144
- .box-hercules .label::before, .box-hercules .label::after {
209
+ .box-hercules .label::before {
145
210
  font-size: 7px; color: #ff4444; font-weight: 900; letter-spacing: 1px; text-transform: uppercase;
146
211
  }
212
+
213
+ /* Simmetria Hercules SX: "STW [HERCULES kts]" */
147
214
  .left-panel .box-hercules .unit::before { content: "HERCULES "; }
215
+
216
+ /* Simmetria Hercules DX: "[m HERCULES] DEPTH" */
148
217
  .right-panel .box-hercules .unit::after { content: " HERCULES"; }
218
+
219
+ /* Eccezione: Box MEAN colonna DX (Senza unità) -> "[HERCULES TWA]" */
149
220
  .right-panel .box-hercules .label:only-child::before { content: "HERCULES "; }
150
221
 
151
222
  /* ==========================================================================
@@ -154,7 +225,7 @@ body {
154
225
  #status { position: absolute; top: 5px; right: 15px; font-size: 0.5rem; text-transform: uppercase; z-index: 1000; }
155
226
  .online { color: #2ecc71; opacity: 0.5; }
156
227
  .offline { color: #e74c3c; font-weight: bold; }
157
- #awa-pointer, #twa-pointer, #track-pointer, #twd-arrow, #twd-boat-wrap {transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);}
228
+ #awa-pointer, #twa-pointer, #track-pointer, #twd-arrow, #twd-boat-wrap { transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1); }
158
229
  #leeway-mask-rect { transition: none; }
159
230
  .alarm-warning { color: #f1c40f !important; }
160
231
  .alarm-danger { color: #e74c3c !important; font-weight: 900; animation: blink-unstable 1s infinite; }
@@ -166,11 +237,7 @@ body {
166
237
  8. RESPONSIVE (PORTRAIT)
167
238
  ========================================================================== */
168
239
  @media (max-aspect-ratio: 0.9 / 1) {
169
- .main-container {
170
- grid-template-columns: 1fr 1fr !important;
171
- grid-template-rows: 45vh 55vh !important;
172
- }
173
-
240
+ .main-container { grid-template-columns: 1fr 1fr !important; grid-template-rows: 45vh 55vh !important; }
174
241
  .center-panel { grid-row: 1 !important; grid-column: 1 / span 2 !important; padding: 5px 0; }
175
242
  .left-panel { grid-row: 2 !important; grid-column: 1 !important; }
176
243
  .right-panel { grid-row: 2 !important; grid-column: 2 !important; }