@jjlmoya/utils-drones 1.14.0 → 1.16.0

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 (93) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +4 -1
  4. package/src/index.ts +1 -0
  5. package/src/pages/[locale]/[slug].astro +30 -14
  6. package/src/tests/locale_completeness.test.ts +4 -22
  7. package/src/tests/shared-test-helpers.ts +56 -0
  8. package/src/tests/tool_exports.test.ts +34 -0
  9. package/src/tests/tool_validation.test.ts +2 -2
  10. package/src/tool/antenna-length-calculator/bibliography.astro +3 -11
  11. package/src/tool/antenna-length-calculator/bibliography.ts +6 -0
  12. package/src/tool/antenna-length-calculator/i18n/de.ts +2 -8
  13. package/src/tool/antenna-length-calculator/i18n/en.ts +2 -8
  14. package/src/tool/antenna-length-calculator/i18n/es.ts +2 -8
  15. package/src/tool/antenna-length-calculator/i18n/fr.ts +2 -8
  16. package/src/tool/antenna-length-calculator/i18n/id.ts +2 -8
  17. package/src/tool/antenna-length-calculator/i18n/it.ts +2 -8
  18. package/src/tool/antenna-length-calculator/i18n/ja.ts +2 -8
  19. package/src/tool/antenna-length-calculator/i18n/ko.ts +2 -8
  20. package/src/tool/antenna-length-calculator/i18n/nl.ts +2 -8
  21. package/src/tool/antenna-length-calculator/i18n/pl.ts +2 -8
  22. package/src/tool/antenna-length-calculator/i18n/pt.ts +2 -8
  23. package/src/tool/antenna-length-calculator/i18n/ru.ts +2 -8
  24. package/src/tool/antenna-length-calculator/i18n/sv.ts +2 -8
  25. package/src/tool/antenna-length-calculator/i18n/tr.ts +2 -8
  26. package/src/tool/antenna-length-calculator/i18n/zh.ts +2 -8
  27. package/src/tool/antenna-length-calculator/seo.astro +2 -26
  28. package/src/tool/drone-flight-time/bibliography.astro +3 -11
  29. package/src/tool/drone-flight-time/bibliography.ts +7 -0
  30. package/src/tool/drone-flight-time/i18n/de.ts +2 -9
  31. package/src/tool/drone-flight-time/i18n/en.ts +2 -9
  32. package/src/tool/drone-flight-time/i18n/es.ts +2 -9
  33. package/src/tool/drone-flight-time/i18n/fr.ts +2 -9
  34. package/src/tool/drone-flight-time/i18n/id.ts +2 -9
  35. package/src/tool/drone-flight-time/i18n/it.ts +2 -9
  36. package/src/tool/drone-flight-time/i18n/ja.ts +2 -9
  37. package/src/tool/drone-flight-time/i18n/ko.ts +2 -9
  38. package/src/tool/drone-flight-time/i18n/nl.ts +2 -9
  39. package/src/tool/drone-flight-time/i18n/pl.ts +2 -9
  40. package/src/tool/drone-flight-time/i18n/pt.ts +2 -9
  41. package/src/tool/drone-flight-time/i18n/ru.ts +2 -9
  42. package/src/tool/drone-flight-time/i18n/sv.ts +2 -9
  43. package/src/tool/drone-flight-time/i18n/tr.ts +2 -9
  44. package/src/tool/drone-flight-time/i18n/zh.ts +2 -9
  45. package/src/tool/drone-flight-time/seo.astro +2 -18
  46. package/src/tool/drone-power-analyzer/bibliography.astro +6 -0
  47. package/src/tool/drone-power-analyzer/bibliography.ts +7 -0
  48. package/src/tool/drone-power-analyzer/component.astro +210 -0
  49. package/src/tool/drone-power-analyzer/components/FlightProfile.astro +37 -0
  50. package/src/tool/drone-power-analyzer/components/MotorConfig.astro +46 -0
  51. package/src/tool/drone-power-analyzer/components/PowerGauge.astro +48 -0
  52. package/src/tool/drone-power-analyzer/components/WeightConfig.astro +49 -0
  53. package/src/tool/drone-power-analyzer/drone-power-analyzer.css +535 -0
  54. package/src/tool/drone-power-analyzer/entry.ts +29 -0
  55. package/src/tool/drone-power-analyzer/i18n/de.ts +203 -0
  56. package/src/tool/drone-power-analyzer/i18n/en.ts +203 -0
  57. package/src/tool/drone-power-analyzer/i18n/es.ts +203 -0
  58. package/src/tool/drone-power-analyzer/i18n/fr.ts +203 -0
  59. package/src/tool/drone-power-analyzer/i18n/id.ts +203 -0
  60. package/src/tool/drone-power-analyzer/i18n/it.ts +203 -0
  61. package/src/tool/drone-power-analyzer/i18n/ja.ts +203 -0
  62. package/src/tool/drone-power-analyzer/i18n/ko.ts +203 -0
  63. package/src/tool/drone-power-analyzer/i18n/nl.ts +203 -0
  64. package/src/tool/drone-power-analyzer/i18n/pl.ts +203 -0
  65. package/src/tool/drone-power-analyzer/i18n/pt.ts +203 -0
  66. package/src/tool/drone-power-analyzer/i18n/ru.ts +203 -0
  67. package/src/tool/drone-power-analyzer/i18n/sv.ts +203 -0
  68. package/src/tool/drone-power-analyzer/i18n/tr.ts +203 -0
  69. package/src/tool/drone-power-analyzer/i18n/zh.ts +203 -0
  70. package/src/tool/drone-power-analyzer/index.ts +8 -0
  71. package/src/tool/drone-power-analyzer/seo.astro +15 -0
  72. package/src/tool/gps-coordinates-converter/bibliography.astro +3 -11
  73. package/src/tool/gps-coordinates-converter/bibliography.ts +12 -0
  74. package/src/tool/gps-coordinates-converter/components/GpsMap.astro +3 -2
  75. package/src/tool/gps-coordinates-converter/gps-coordinates-converter.css +196 -188
  76. package/src/tool/gps-coordinates-converter/i18n/de.ts +35 -36
  77. package/src/tool/gps-coordinates-converter/i18n/en.ts +4 -14
  78. package/src/tool/gps-coordinates-converter/i18n/es.ts +4 -14
  79. package/src/tool/gps-coordinates-converter/i18n/fr.ts +4 -14
  80. package/src/tool/gps-coordinates-converter/i18n/id.ts +36 -37
  81. package/src/tool/gps-coordinates-converter/i18n/it.ts +35 -36
  82. package/src/tool/gps-coordinates-converter/i18n/ja.ts +19 -20
  83. package/src/tool/gps-coordinates-converter/i18n/ko.ts +20 -21
  84. package/src/tool/gps-coordinates-converter/i18n/nl.ts +33 -36
  85. package/src/tool/gps-coordinates-converter/i18n/pl.ts +19 -20
  86. package/src/tool/gps-coordinates-converter/i18n/pt.ts +19 -20
  87. package/src/tool/gps-coordinates-converter/i18n/ru.ts +19 -20
  88. package/src/tool/gps-coordinates-converter/i18n/sv.ts +19 -20
  89. package/src/tool/gps-coordinates-converter/i18n/tr.ts +19 -20
  90. package/src/tool/gps-coordinates-converter/i18n/zh.ts +20 -21
  91. package/src/tool/gps-coordinates-converter/seo.astro +2 -26
  92. package/src/tools.ts +3 -0
  93. package/src/types.ts +1 -3
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  import 'leaflet/dist/leaflet.css';
3
+ const { ui } = Astro.props;
3
4
  ---
4
5
 
5
6
  <div class="tech-section">
6
- <h3 class="section-title">Visualización en Mapas</h3>
7
+ <h3 class="section-title">{ui.mapVisualization}</h3>
7
8
  <div id="gpsMap" class="map-container"></div>
8
- <small class="hint">Haz clic en el mapa para capturar coordenadas directamente.</small>
9
+ <small class="hint">{ui.mapHint}</small>
9
10
  </div>
10
11
 
@@ -1,49 +1,48 @@
1
1
  .gps-converter-ui {
2
- --gps-accent: #0ea5e9;
3
- --gps-accent-rgb: 14, 165, 233;
4
- --gps-accent-glow: rgba(14, 165, 233, 0.15);
2
+ --gps-accent: #6366f1;
3
+ --gps-accent-rgb: 99, 102, 241;
4
+ --gps-accent-glow: rgba(99, 102, 241, 0.15);
5
5
  --gps-bg: #fff;
6
6
  --gps-bg-muted: #f8fafc;
7
7
  --gps-bg-surface: #f1f5f9;
8
- --gps-bg-overlay: #fdfdfd;
9
- --gps-text: #1e293b;
10
- --gps-text-muted: #64748b;
8
+ --gps-bg-overlay: #fff;
9
+ --gps-text: #0f172a;
10
+ --gps-text-muted: #475569;
11
11
  --gps-text-dim: #94a3b8;
12
12
  --gps-border: #e2e8f0;
13
13
  --gps-border-light: #f1f5f9;
14
- --gps-shadow: 0 40px 100px -20px rgba(0, 0, 0, 0.08);
14
+ --gps-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.05);
15
15
  --gps-danger: #ef4444;
16
- --gps-danger-bg: rgba(239, 68, 68, 0.1);
16
+ --gps-radius-xl: 32px;
17
+ --gps-radius-lg: 20px;
18
+ --gps-radius-md: 12px;
17
19
 
18
20
  width: 100%;
19
21
  max-width: 1200px;
20
22
  margin: 2rem auto;
21
- padding: 0 1.5rem;
22
23
  }
23
24
 
24
25
  [data-theme="dark"] .gps-converter-ui,
25
26
  .theme-dark .gps-converter-ui {
26
27
  --gps-bg: #0f172a;
27
28
  --gps-bg-muted: #1e293b;
28
- --gps-bg-surface: #334155;
29
+ --gps-bg-surface: #1e293b;
29
30
  --gps-bg-overlay: #1e293b;
30
- --gps-text: #f1f5f9;
31
+ --gps-text: #f8fafc;
31
32
  --gps-text-muted: #94a3b8;
32
33
  --gps-text-dim: #64748b;
33
34
  --gps-border: #334155;
34
35
  --gps-border-light: #1e293b;
35
- --gps-shadow: 0 40px 100px -20px rgba(0, 0, 0, 0.4);
36
+ --gps-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
36
37
  }
37
38
 
38
39
  .gps-converter-ui .tech-mega-card {
39
40
  background: var(--gps-bg);
40
- backdrop-filter: blur(24px) saturate(180%);
41
- -webkit-backdrop-filter: blur(24px) saturate(180%);
42
41
  border: 1px solid var(--gps-border);
43
- border-radius: 40px;
42
+ border-radius: var(--gps-radius-xl);
44
43
  box-shadow: var(--gps-shadow);
45
- position: relative;
46
44
  overflow: hidden;
45
+ position: relative;
47
46
  }
48
47
 
49
48
  .gps-converter-ui .tech-mega-card::before {
@@ -52,10 +51,10 @@
52
51
  top: 0;
53
52
  left: 0;
54
53
  right: 0;
55
- height: 6px;
56
- background: linear-gradient(90deg, #0ea5e9, #6366f1, #0ea5e9);
54
+ height: 4px;
55
+ background: linear-gradient(90deg, #6366f1, #a855f7, #6366f1);
57
56
  background-size: 200% 100%;
58
- animation: gradient-shift-gps 4s linear infinite;
57
+ animation: gradient-shift-gps 3s linear infinite;
59
58
  z-index: 10;
60
59
  }
61
60
 
@@ -66,133 +65,158 @@
66
65
 
67
66
  .gps-converter-ui .card-grid {
68
67
  display: grid;
69
- grid-template-columns: 400px 1fr;
68
+ grid-template-columns: 360px 1fr;
70
69
  min-height: 700px;
71
70
  }
72
71
 
73
72
  .gps-converter-ui .config-sidebar {
74
- padding: 3.5rem 3rem;
75
- background: var(--gps-bg-overlay);
76
- border-right: 1px solid var(--gps-border-light);
73
+ padding: 2.5rem;
74
+ background: var(--gps-bg-muted);
75
+ border-right: 1px solid var(--gps-border);
77
76
  display: flex;
78
77
  flex-direction: column;
79
- gap: 3rem;
78
+ gap: 2.5rem;
80
79
  }
81
80
 
82
81
  .gps-converter-ui .main-display {
83
- padding: 3.5rem 3rem;
82
+ padding: 2.5rem;
84
83
  display: flex;
85
84
  flex-direction: column;
86
- gap: 3rem;
87
- background: var(--gps-bg);
88
- }
89
-
90
- .gps-converter-ui .divider {
91
- height: 1px;
92
- width: 100%;
93
- background: linear-gradient(90deg, transparent, var(--gps-border-light), transparent);
85
+ gap: 2.5rem;
94
86
  }
95
87
 
96
88
  .gps-converter-ui .tech-section {
97
89
  display: flex;
98
90
  flex-direction: column;
99
- gap: 1.5rem;
91
+ gap: 1.25rem;
92
+ }
93
+
94
+ .gps-converter-ui .row-header {
95
+ display: flex;
96
+ justify-content: space-between;
97
+ align-items: center;
98
+ gap: 1rem;
100
99
  }
101
100
 
102
101
  .gps-converter-ui .section-title {
103
- font-size: 0.75rem;
104
- font-weight: 800;
102
+ font-size: 0.8rem;
103
+ font-weight: 700;
105
104
  color: var(--gps-text-muted);
106
105
  text-transform: uppercase;
107
- letter-spacing: 0.15em;
106
+ letter-spacing: 0.1em;
108
107
  }
109
108
 
110
109
  .gps-converter-ui .field-label {
111
- font-size: 0.7rem;
112
- font-weight: 800;
113
- color: var(--gps-text-dim);
114
- text-transform: uppercase;
115
- letter-spacing: 0.05em;
110
+ font-size: 0.75rem;
111
+ font-weight: 600;
112
+ color: var(--gps-text-muted);
116
113
  margin-bottom: 0.5rem;
117
114
  display: block;
118
115
  }
119
116
 
120
117
  .gps-converter-ui .tech-input {
121
118
  width: 100%;
122
- padding: 1rem 1.25rem;
123
- background: var(--gps-bg-surface);
119
+ padding: 0.8rem 1rem;
120
+ background: var(--gps-bg);
124
121
  border: 1px solid var(--gps-border);
125
- border-radius: 16px;
126
- font-weight: 700;
122
+ border-radius: var(--gps-radius-md);
127
123
  color: var(--gps-text);
128
- font-size: 1rem;
129
- transition: all 0.3s ease;
124
+ font-weight: 500;
125
+ font-size: 0.95rem;
126
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
130
127
  }
131
128
 
132
129
  .gps-converter-ui .tech-input:focus {
133
130
  outline: none;
134
131
  border-color: var(--gps-accent);
135
132
  box-shadow: 0 0 0 4px var(--gps-accent-glow);
136
- background: var(--gps-bg);
137
133
  }
138
134
 
139
135
  .gps-converter-ui .mode-switch {
140
136
  display: flex;
141
137
  background: var(--gps-bg-surface);
142
- padding: 0.4rem;
143
- border-radius: 18px;
144
- gap: 0.25rem;
138
+ padding: 0.25rem;
139
+ border-radius: var(--gps-radius-md);
140
+ flex: 1;
145
141
  }
146
142
 
147
143
  .gps-converter-ui .mode-btn {
148
144
  flex: 1;
149
- padding: 0.75rem;
150
- border-radius: 14px;
145
+ padding: 0.6rem;
146
+ border-radius: calc(var(--gps-radius-md) - 4px);
151
147
  border: none;
152
148
  background: transparent;
153
- font-size: 0.75rem;
154
- font-weight: 800;
149
+ font-size: 0.8rem;
150
+ font-weight: 600;
155
151
  color: var(--gps-text-muted);
156
152
  cursor: pointer;
157
- transition: all 0.3s ease;
153
+ transition: all 0.2s ease;
158
154
  }
159
155
 
160
156
  .gps-converter-ui .mode-btn.active {
161
157
  background: var(--gps-bg);
162
158
  color: var(--gps-accent);
163
- box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1);
159
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
164
160
  }
165
161
 
166
- .gps-converter-ui .map-container {
167
- max-width: 100%;
168
- height: 400px;
169
- border-radius: 32px;
170
- overflow: hidden;
162
+ .gps-converter-ui .loc-btn {
171
163
  background: var(--gps-bg-surface);
172
- border: 1px solid var(--gps-border-light);
164
+ border: 1px solid var(--gps-border);
165
+ color: var(--gps-text-muted);
166
+ padding: 0.6rem;
167
+ border-radius: var(--gps-radius-md);
168
+ cursor: pointer;
169
+ display: flex;
170
+ align-items: center;
171
+ justify-content: center;
172
+ transition: all 0.2s ease;
173
+ }
174
+
175
+ .gps-converter-ui .loc-btn:hover {
176
+ color: var(--gps-accent);
177
+ border-color: var(--gps-accent);
178
+ background: var(--gps-bg);
179
+ }
180
+
181
+ .gps-converter-ui .compact-inputs {
182
+ display: grid;
183
+ grid-template-columns: 1fr 1fr;
184
+ gap: 1rem;
185
+ }
186
+
187
+ .gps-converter-ui .gms-group {
188
+ display: flex;
189
+ flex-direction: column;
190
+ gap: 0.5rem;
191
+ }
192
+
193
+ .gps-converter-ui .gms-group .compact-inputs {
194
+ grid-template-columns: repeat(4, 1fr);
195
+ gap: 0.5rem;
173
196
  }
174
197
 
175
198
  .gps-converter-ui .results-area {
176
199
  display: grid;
177
200
  grid-template-columns: repeat(2, 1fr);
178
- gap: 2rem;
201
+ gap: 1.5rem;
179
202
  }
180
203
 
181
204
  .gps-converter-ui .result-box {
182
- background: var(--gps-bg-overlay);
183
- border: 1px solid var(--gps-border-light);
184
- border-radius: 28px;
185
- padding: 2.5rem;
205
+ background: var(--gps-bg-muted);
206
+ border: 1px solid var(--gps-border);
207
+ border-radius: var(--gps-radius-lg);
208
+ padding: 1.5rem;
186
209
  display: flex;
187
210
  flex-direction: column;
188
- gap: 1rem;
189
- transition: all 0.3s ease;
211
+ gap: 0.75rem;
212
+ transition: all 0.2s ease;
190
213
  }
191
214
 
192
215
  .gps-converter-ui .result-box:hover {
193
- transform: translateY(-5px);
194
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.04);
195
216
  border-color: var(--gps-accent);
217
+ background: var(--gps-bg);
218
+ transform: translateY(-2px);
219
+ box-shadow: 0 12px 24px -10px rgba(0, 0, 0, 0.1);
196
220
  }
197
221
 
198
222
  .gps-converter-ui .res-header {
@@ -201,19 +225,27 @@
201
225
  align-items: center;
202
226
  }
203
227
 
228
+ .gps-converter-ui .res-label {
229
+ font-size: 0.7rem;
230
+ font-weight: 700;
231
+ color: var(--gps-text-dim);
232
+ text-transform: uppercase;
233
+ letter-spacing: 0.05em;
234
+ }
235
+
204
236
  .gps-converter-ui .copy-btn {
205
- background: var(--gps-bg-surface);
237
+ background: transparent;
206
238
  border: 1px solid var(--gps-border);
207
239
  color: var(--gps-text-muted);
208
- padding: 0.5rem 1rem;
209
- border-radius: 12px;
210
- font-size: 0.7rem;
211
- font-weight: 800;
240
+ padding: 0.4rem 0.8rem;
241
+ border-radius: 8px;
242
+ font-size: 0.65rem;
243
+ font-weight: 700;
212
244
  cursor: pointer;
213
245
  display: flex;
214
246
  align-items: center;
215
- gap: 0.5rem;
216
- transition: all 0.3s ease;
247
+ gap: 0.4rem;
248
+ transition: all 0.2s ease;
217
249
  }
218
250
 
219
251
  .gps-converter-ui .copy-btn:hover {
@@ -223,154 +255,130 @@
223
255
  }
224
256
 
225
257
  .gps-converter-ui .val-display {
226
- font-size: 1.5rem;
227
- font-weight: 900;
258
+ font-size: 1.25rem;
259
+ font-weight: 700;
228
260
  color: var(--gps-text);
229
261
  word-break: break-all;
230
- letter-spacing: -0.01em;
231
262
  }
232
263
 
233
- .gps-converter-ui .history-item {
234
- padding: 1.25rem 1.5rem;
235
- background: var(--gps-bg-surface);
236
- border-radius: 20px;
264
+ .gps-converter-ui .map-container {
265
+ height: 350px;
266
+ border-radius: var(--gps-radius-lg);
267
+ border: 1px solid var(--gps-border);
268
+ overflow: hidden;
269
+ z-index: 1;
270
+ }
271
+
272
+ .gps-converter-ui .header-row {
237
273
  display: flex;
238
274
  justify-content: space-between;
239
275
  align-items: center;
240
- transition: all 0.3s ease;
241
- border: 1px solid transparent;
242
276
  }
243
277
 
244
- .gps-converter-ui .history-item:hover {
245
- background: var(--gps-bg);
246
- border-color: var(--gps-accent);
247
- transform: translateX(5px);
278
+ .gps-converter-ui .text-btn {
279
+ background: transparent;
280
+ border: none;
281
+ color: var(--gps-text-dim);
282
+ font-size: 0.7rem;
283
+ font-weight: 700;
284
+ text-transform: uppercase;
285
+ cursor: pointer;
286
+ padding: 0.5rem;
287
+ transition: color 0.2s ease;
248
288
  }
249
289
 
250
- .gps-converter-ui .hist-info {
290
+ .gps-converter-ui .text-btn:hover {
291
+ color: var(--gps-danger);
292
+ }
293
+
294
+ .gps-converter-ui .history-list {
251
295
  display: flex;
252
296
  flex-direction: column;
253
- cursor: pointer;
254
- flex: 1;
297
+ gap: 0.75rem;
298
+ }
299
+
300
+ .gps-converter-ui .history-item {
301
+ background: var(--gps-bg);
302
+ border: 1px solid var(--gps-border);
303
+ border-radius: var(--gps-radius-md);
304
+ padding: 0.75rem 1rem;
305
+ display: flex;
306
+ justify-content: space-between;
307
+ align-items: center;
308
+ transition: all 0.2s ease;
309
+ }
310
+
311
+ .gps-converter-ui .history-item:hover {
312
+ border-color: var(--gps-accent);
313
+ transform: translateX(4px);
255
314
  }
256
315
 
257
316
  .gps-converter-ui .hist-coords {
258
- font-size: 0.9rem;
259
- font-weight: 800;
317
+ font-size: 0.85rem;
318
+ font-weight: 600;
260
319
  color: var(--gps-text);
261
320
  }
262
321
 
263
322
  .gps-converter-ui .hist-time {
264
- font-size: 0.7rem;
323
+ font-size: 0.65rem;
265
324
  color: var(--gps-text-dim);
266
- font-weight: 700;
267
- text-transform: uppercase;
325
+ }
326
+
327
+ .gps-converter-ui .hist-actions {
328
+ display: flex;
329
+ gap: 0.5rem;
268
330
  }
269
331
 
270
332
  .gps-converter-ui .action-btn {
271
- background: var(--gps-bg-overlay);
272
- border: 1px solid var(--gps-border);
273
- padding: 0.6rem;
274
- border-radius: 12px;
275
- color: var(--gps-text-dim);
333
+ background: var(--gps-bg-surface);
334
+ border: none;
335
+ color: var(--gps-text-muted);
336
+ padding: 0.4rem;
337
+ border-radius: 6px;
276
338
  cursor: pointer;
277
- display: flex;
278
- align-items: center;
279
- justify-content: center;
280
339
  transition: all 0.2s ease;
281
340
  }
282
341
 
342
+ .gps-converter-ui .action-btn:hover {
343
+ background: var(--gps-accent);
344
+ color: white;
345
+ }
346
+
347
+ .gps-converter-ui .delete-btn:hover {
348
+ background: var(--gps-danger);
349
+ }
350
+
283
351
  .gps-converter-ui .no-history {
352
+ padding: 2rem;
284
353
  text-align: center;
285
- padding: 3rem;
286
354
  color: var(--gps-text-dim);
287
- font-style: italic;
288
- font-size: 0.9rem;
355
+ font-size: 0.85rem;
356
+ border: 1px dashed var(--gps-border);
357
+ border-radius: var(--gps-radius-md);
358
+ }
359
+
360
+ .gps-converter-ui .divider {
361
+ height: 1px;
362
+ background: var(--gps-border);
363
+ opacity: 0.5;
289
364
  }
290
365
 
291
- @media (max-width: 1200px) {
366
+ @media (max-width: 1024px) {
292
367
  .gps-converter-ui .card-grid {
293
368
  grid-template-columns: 1fr;
294
369
  }
295
370
  .gps-converter-ui .config-sidebar {
296
371
  border-right: none;
297
- border-bottom: 1px solid var(--gps-border-light);
372
+ border-bottom: 1px solid var(--gps-border);
298
373
  }
299
374
  }
300
375
 
301
- @media (max-width: 600px) {
302
- .gps-converter-ui { padding: 0.5rem; }
303
- .gps-converter-ui .config-sidebar,
304
- .gps-converter-ui .main-display { padding: 2rem 1.5rem; }
305
- .gps-converter-ui .results-area { grid-template-columns: 1fr; }
306
- }
307
- /* GpsHistory.astro */
308
- .history-list {
309
- display: flex;
310
- flex-direction: column;
311
- gap: 1.25rem;
312
- }
313
- .header-row {
314
- display: flex;
315
- justify-content: space-between;
316
- align-items: center;
317
- }
318
- .text-btn {
319
- background: transparent;
320
- border: none;
321
- color: #94a3b8;
322
- font-size: 0.7rem;
323
- font-weight: 700;
324
- cursor: pointer;
325
- text-transform: uppercase;
326
- }
327
- .text-btn:hover { color: #ef4444; }
328
- .no-history {
329
- font-size: 0.8rem;
330
- color: #94a3b8;
331
- font-style: italic;
332
- }
333
-
334
- /* GpsInputs.astro */
335
- .row-header {
336
- display: flex;
337
- justify-content: space-between;
338
- align-items: center;
339
- gap: 1rem;
340
- }
341
- .loc-btn {
342
- background: #0ea5e910;
343
- border: 1px solid #0ea5e930;
344
- color: #0ea5e9;
345
- padding: 0.6rem;
346
- border-radius: 12px;
347
- cursor: pointer;
348
- display: flex;
349
- align-items: center;
350
- justify-content: center;
351
- transition: all 0.2s;
352
- }
353
- .loc-btn:hover {
354
- background: #0ea5e920;
355
- transform: scale(1.05);
356
- }
357
- .gms-group {
358
- display: flex;
359
- flex-direction: column;
360
- gap: 0.5rem;
361
- }
362
- .compact-inputs {
363
- display: grid;
364
- grid-template-columns: repeat(4, 1fr);
365
- gap: 0.5rem;
366
- }
367
- #dd-inputs.compact-inputs {
368
- grid-template-columns: 1fr 1fr;
376
+ @media (max-width: 640px) {
377
+ .gps-converter-ui .results-area {
378
+ grid-template-columns: 1fr;
369
379
  }
370
-
371
- /* GpsMap.astro */
372
- .hint {
373
- font-size: 0.75rem;
374
- color: #94a3b8;
375
- margin-top: -0.5rem;
380
+ .gps-converter-ui .main-display,
381
+ .gps-converter-ui .config-sidebar {
382
+ padding: 1.5rem;
376
383
  }
384
+ }