@jjlmoya/utils-astronomy 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.
@@ -1,5 +1,476 @@
1
1
  .scope-container {
2
- width: 100%;
3
- border-radius: 1.5rem;
4
- overflow: hidden;
5
- }
2
+ --on-dark: #fff;
3
+ --planet-tint: #fef9c3;
4
+
5
+ position: relative;
6
+ width: 100%;
7
+ height: 600px;
8
+ background: var(--color-bg-deep, #000);
9
+ border-radius: 1.5rem;
10
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.8);
11
+ overflow: hidden;
12
+ border: 1px solid rgba(100, 116, 139, 0.3);
13
+ cursor: grab;
14
+ touch-action: none;
15
+ user-select: none;
16
+ }
17
+
18
+ @media (min-width: 768px) {
19
+ .scope-container {
20
+ height: 800px;
21
+ }
22
+ }
23
+
24
+ .scope-container:active {
25
+ cursor: grabbing;
26
+ }
27
+
28
+ .world-layer {
29
+ position: absolute;
30
+ inset: 0;
31
+ width: 100%;
32
+ height: 100%;
33
+ will-change: transform;
34
+ }
35
+
36
+ .sky-canvas {
37
+ position: absolute;
38
+ inset: 0;
39
+ width: 100%;
40
+ height: 100%;
41
+ z-index: 0;
42
+ }
43
+
44
+ .objects-layer {
45
+ position: absolute;
46
+ inset: 0;
47
+ width: 100%;
48
+ height: 100%;
49
+ z-index: 10;
50
+ pointer-events: none;
51
+ }
52
+
53
+ .scope-vignette {
54
+ position: absolute;
55
+ inset: 0;
56
+ background: radial-gradient(
57
+ circle at center,
58
+ transparent 0%,
59
+ rgba(0, 0, 0, 0.5) 100%
60
+ );
61
+ pointer-events: none;
62
+ z-index: 20;
63
+ }
64
+
65
+ .scope-pollution-layer {
66
+ position: absolute;
67
+ inset: 0;
68
+ z-index: 10;
69
+ pointer-events: none;
70
+ mix-blend-mode: screen;
71
+ background: transparent;
72
+ transition: background-color 0.5s ease;
73
+ }
74
+
75
+ .scope-drag-hint {
76
+ position: absolute;
77
+ top: 1.5rem;
78
+ left: 50%;
79
+ transform: translateX(-50%);
80
+ z-index: 30;
81
+ opacity: 0.7;
82
+ pointer-events: none;
83
+ background: rgba(0, 0, 0, 0.5);
84
+ padding: 0.25rem 1rem;
85
+ border-radius: 9999px;
86
+ font-size: 0.625rem;
87
+ color: var(--on-dark);
88
+ text-transform: uppercase;
89
+ letter-spacing: 0.1em;
90
+ border: 1px solid rgba(255, 255, 255, 0.1);
91
+ backdrop-filter: blur(12px);
92
+ white-space: nowrap;
93
+ }
94
+
95
+ .hint-mobile {
96
+ display: inline;
97
+ }
98
+
99
+ .hint-desktop {
100
+ display: none;
101
+ }
102
+
103
+ @media (min-width: 768px) {
104
+ .hint-mobile {
105
+ display: none;
106
+ }
107
+ .hint-desktop {
108
+ display: inline;
109
+ }
110
+ }
111
+
112
+ .scope-object {
113
+ position: absolute;
114
+ transform: translate(-50%, -50%);
115
+ display: flex;
116
+ flex-direction: column;
117
+ align-items: center;
118
+ justify-content: center;
119
+ transition: opacity 0.3s ease;
120
+ will-change: transform;
121
+ pointer-events: auto;
122
+ cursor: pointer;
123
+ }
124
+
125
+ .scope-object:hover .scope-obj-icon {
126
+ transform: scale(1.25);
127
+ }
128
+
129
+ .scope-obj-icon {
130
+ font-size: 2rem;
131
+ transition: transform 0.3s ease;
132
+ filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.4));
133
+ }
134
+
135
+ @media (min-width: 768px) {
136
+ .scope-obj-icon {
137
+ font-size: 3rem;
138
+ }
139
+ }
140
+
141
+ .scope-obj-label {
142
+ margin-top: 0.5rem;
143
+ display: flex;
144
+ flex-direction: column;
145
+ align-items: center;
146
+ opacity: 0;
147
+ transition: opacity 0.3s ease;
148
+ }
149
+
150
+ .scope-obj-name {
151
+ font-size: 0.625rem;
152
+ font-weight: 700;
153
+ color: var(--on-dark);
154
+ background: rgba(0, 0, 0, 0.6);
155
+ padding: 0.125rem 0.5rem;
156
+ border-radius: 0.25rem;
157
+ backdrop-filter: blur(8px);
158
+ border: 1px solid rgba(255, 255, 255, 0.1);
159
+ white-space: nowrap;
160
+ }
161
+
162
+ .scope-obj-mag {
163
+ font-size: 0.5rem;
164
+ color: rgba(148, 163, 184, 0.8);
165
+ background: rgba(0, 0, 0, 0.8);
166
+ padding: 0 0.25rem;
167
+ border-radius: 0.2rem;
168
+ margin-top: 0.125rem;
169
+ }
170
+
171
+ .scope-modal {
172
+ position: absolute;
173
+ inset: 0;
174
+ z-index: 50;
175
+ display: flex;
176
+ align-items: center;
177
+ justify-content: center;
178
+ background: rgba(0, 0, 0, 0.6);
179
+ backdrop-filter: blur(4px);
180
+ transition: opacity 0.3s ease;
181
+ }
182
+
183
+ .scope-modal.modal-hidden {
184
+ opacity: 0;
185
+ pointer-events: none;
186
+ }
187
+
188
+ .scope-modal-content {
189
+ background: #0f172a;
190
+ border: 1px solid rgba(255, 255, 255, 0.2);
191
+ padding: 1.5rem;
192
+ border-radius: 1rem;
193
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.8);
194
+ max-width: 22rem;
195
+ width: calc(100% - 3rem);
196
+ transition: transform 0.3s ease;
197
+ }
198
+
199
+ .modal-scale-in {
200
+ transform: scale(1);
201
+ }
202
+ .modal-scale-out {
203
+ transform: scale(0.95);
204
+ }
205
+
206
+ .modal-header {
207
+ display: flex;
208
+ justify-content: space-between;
209
+ align-items: flex-start;
210
+ margin-bottom: 1rem;
211
+ }
212
+
213
+ .modal-header-info {
214
+ display: flex;
215
+ align-items: center;
216
+ gap: 0.75rem;
217
+ }
218
+
219
+ .modal-icon {
220
+ font-size: 2.5rem;
221
+ }
222
+
223
+ .modal-title {
224
+ font-size: 1.25rem;
225
+ font-weight: 700;
226
+ color: var(--on-dark);
227
+ margin: 0;
228
+ line-height: 1;
229
+ }
230
+
231
+ .modal-type {
232
+ font-size: 0.625rem;
233
+ color: var(--text-muted, #94a3b8);
234
+ text-transform: uppercase;
235
+ letter-spacing: 0.1em;
236
+ margin: 0.25rem 0 0;
237
+ }
238
+
239
+ .modal-close {
240
+ background: none;
241
+ border: none;
242
+ color: var(--text-muted, #94a3b8);
243
+ cursor: pointer;
244
+ font-size: 1.5rem;
245
+ padding: 0;
246
+ transition: color 0.2s ease;
247
+ }
248
+
249
+ .modal-close:hover {
250
+ color: var(--on-dark);
251
+ }
252
+
253
+ .modal-body {
254
+ display: flex;
255
+ flex-direction: column;
256
+ gap: 0.75rem;
257
+ }
258
+
259
+ .modal-stat {
260
+ display: flex;
261
+ justify-content: space-between;
262
+ align-items: center;
263
+ background: rgba(255, 255, 255, 0.05);
264
+ padding: 0.75rem;
265
+ border-radius: 0.5rem;
266
+ }
267
+
268
+ .modal-stat-label {
269
+ font-size: 0.75rem;
270
+ color: var(--text-muted, #94a3b8);
271
+ text-transform: uppercase;
272
+ }
273
+
274
+ .modal-stat-value {
275
+ color: var(--on-dark);
276
+ font-weight: 700;
277
+ }
278
+
279
+ .modal-coords {
280
+ text-align: right;
281
+ }
282
+
283
+ .modal-coord {
284
+ font-size: 0.75rem;
285
+ color: var(--on-dark);
286
+ }
287
+
288
+ .modal-coord-secondary {
289
+ color: var(--text-muted, #94a3b8);
290
+ }
291
+
292
+ .modal-desc {
293
+ font-size: 0.875rem;
294
+ color: var(--text-muted, #94a3b8);
295
+ line-height: 1.6;
296
+ margin: 0;
297
+ }
298
+
299
+ .scope-controls-wrapper {
300
+ position: absolute;
301
+ bottom: 1.5rem;
302
+ left: 1.5rem;
303
+ right: 1.5rem;
304
+ z-index: 40;
305
+ display: flex;
306
+ flex-direction: column;
307
+ align-items: center;
308
+ gap: 1rem;
309
+ pointer-events: auto;
310
+ }
311
+
312
+ .scope-controls {
313
+ width: 100%;
314
+ max-width: 56rem;
315
+ background: rgba(15, 23, 42, 0.9);
316
+ backdrop-filter: blur(20px);
317
+ border: 1px solid rgba(255, 255, 255, 0.2);
318
+ border-radius: 1rem;
319
+ padding: 1rem;
320
+ box-shadow: 0 0 50px rgba(0, 0, 0, 0.5);
321
+ }
322
+
323
+ @media (min-width: 768px) {
324
+ .scope-controls {
325
+ padding: 1.5rem;
326
+ }
327
+ }
328
+
329
+ .scope-control-grid {
330
+ display: grid;
331
+ grid-template-columns: 1fr;
332
+ gap: 1.5rem;
333
+ align-items: center;
334
+ }
335
+
336
+ @media (min-width: 768px) {
337
+ .scope-control-grid {
338
+ grid-template-columns: 1fr auto 1fr;
339
+ gap: 2rem;
340
+ }
341
+ }
342
+
343
+ .scope-control-group {
344
+ display: flex;
345
+ flex-direction: column;
346
+ gap: 0.75rem;
347
+ }
348
+
349
+ .scope-control-header {
350
+ display: flex;
351
+ justify-content: space-between;
352
+ align-items: center;
353
+ }
354
+
355
+ .scope-control-label {
356
+ font-size: 0.75rem;
357
+ font-weight: 700;
358
+ text-transform: uppercase;
359
+ letter-spacing: 0.05em;
360
+ display: flex;
361
+ align-items: center;
362
+ gap: 0.5rem;
363
+ }
364
+
365
+ .scope-label-cyan {
366
+ color: var(--color-cyan, #06b6d4);
367
+ }
368
+ .scope-label-amber {
369
+ color: var(--color-amber, #f59e0b);
370
+ }
371
+
372
+ .scope-control-value {
373
+ color: var(--on-dark);
374
+ font-size: 0.875rem;
375
+ background: rgba(255, 255, 255, 0.1);
376
+ padding: 0.125rem 0.5rem;
377
+ border-radius: 0.25rem;
378
+ }
379
+
380
+ .scope-range {
381
+ width: 100%;
382
+ height: 0.375rem;
383
+ background: rgba(100, 116, 139, 0.4);
384
+ border-radius: 9999px;
385
+ appearance: none;
386
+ cursor: pointer;
387
+ outline: none;
388
+ }
389
+
390
+ .scope-range-cyan {
391
+ accent-color: var(--color-cyan, #06b6d4);
392
+ }
393
+ .scope-range-amber {
394
+ accent-color: var(--color-amber, #f59e0b);
395
+ }
396
+
397
+ .scope-limit-display {
398
+ display: flex;
399
+ flex-direction: column;
400
+ align-items: center;
401
+ justify-content: center;
402
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
403
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
404
+ padding: 0.5rem 1rem;
405
+ }
406
+
407
+ @media (min-width: 768px) {
408
+ .scope-limit-display {
409
+ border-top: none;
410
+ border-bottom: none;
411
+ border-left: 1px solid rgba(255, 255, 255, 0.1);
412
+ border-right: 1px solid rgba(255, 255, 255, 0.1);
413
+ padding: 0 2rem;
414
+ }
415
+ }
416
+
417
+ .scope-limit-label {
418
+ font-size: 0.625rem;
419
+ color: var(--text-muted, #94a3b8);
420
+ text-transform: uppercase;
421
+ letter-spacing: 0.1em;
422
+ margin-bottom: 0.25rem;
423
+ }
424
+
425
+ .scope-limit-value {
426
+ font-size: 3rem;
427
+ font-weight: 900;
428
+ color: var(--on-dark);
429
+ line-height: 1;
430
+ text-shadow: 0 0 10px rgba(255, 255, 255, 0.3);
431
+ }
432
+
433
+ .scope-azimuth {
434
+ font-size: 0.625rem;
435
+ color: var(--color-cyan, #06b6d4);
436
+ opacity: 0.5;
437
+ margin-top: 0.5rem;
438
+ }
439
+
440
+ .scope-legend {
441
+ display: flex;
442
+ gap: 1rem;
443
+ flex-wrap: wrap;
444
+ font-size: 0.625rem;
445
+ font-weight: 700;
446
+ text-transform: uppercase;
447
+ letter-spacing: 0.05em;
448
+ color: var(--text-muted, #64748b);
449
+ background: rgba(0, 0, 0, 0.8);
450
+ padding: 0.5rem 1.5rem;
451
+ border-radius: 9999px;
452
+ backdrop-filter: blur(4px);
453
+ border: 1px solid rgba(255, 255, 255, 0.05);
454
+ }
455
+
456
+ @media (min-width: 768px) {
457
+ .scope-legend {
458
+ gap: 2rem;
459
+ }
460
+ }
461
+
462
+ .legend-item {
463
+ display: flex;
464
+ align-items: center;
465
+ gap: 0.5rem;
466
+ }
467
+
468
+ .legend-planet {
469
+ color: var(--planet-tint);
470
+ }
471
+ .legend-star {
472
+ color: var(--on-dark);
473
+ }
474
+ .legend-deep {
475
+ color: var(--color-indigo, #818cf8);
476
+ }