@jjlmoya/utils-science 1.17.0 → 1.19.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.
@@ -0,0 +1,810 @@
1
+ :root,
2
+ .theme-light {
3
+ --asteroid-primary: #f97316;
4
+ --asteroid-secondary: #ef4444;
5
+ --asteroid-accent: #64748b;
6
+ --asteroid-success: #10b981;
7
+ --asteroid-warning: #f59e0b;
8
+ --asteroid-danger: #dc2626;
9
+ --asteroid-bg-light: #f8fafc;
10
+ --asteroid-bg-dark: #0f172a;
11
+ --asteroid-bg-card: #fff;
12
+ --asteroid-bg-modal: rgba(255, 255, 255, 0.9);
13
+ --asteroid-border-light: #e2e8f0;
14
+ --asteroid-border-dark: #1e293b;
15
+ --asteroid-text-primary: #1e293b;
16
+ --asteroid-text-secondary: #64748b;
17
+ --asteroid-text-light: #f1f5f9;
18
+ --asteroid-shadow-sm: 0 2px 5px rgba(0, 0, 0, 0.02);
19
+ --asteroid-shadow-md: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
20
+ --asteroid-shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
21
+ --asteroid-shadow-xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
22
+ --asteroid-radius-sm: 0.75rem;
23
+ --asteroid-radius-md: 1.5rem;
24
+ --asteroid-radius-lg: 2rem;
25
+ --asteroid-radius-full: 9999px;
26
+ --asteroid-transition: all 0.2s ease;
27
+ --asteroid-transition-slow: all 0.3s ease;
28
+ }
29
+
30
+ .theme-dark {
31
+ --asteroid-primary: #ff9f43;
32
+ --asteroid-secondary: #ff6b5b;
33
+ --asteroid-accent: #94a3b8;
34
+ --asteroid-success: #2ecc71;
35
+ --asteroid-warning: #ffa502;
36
+ --asteroid-danger: #ff4757;
37
+ --asteroid-bg-light: #0f172a;
38
+ --asteroid-bg-card: #1a2332;
39
+ --asteroid-bg-modal: rgba(26, 35, 50, 0.95);
40
+ --asteroid-border-light: #2d3748;
41
+ --asteroid-border-dark: #0f172a;
42
+ --asteroid-text-primary: #f8f9fa;
43
+ --asteroid-text-secondary: #cbd5e1;
44
+ }
45
+
46
+ .asteroid-app {
47
+ position: relative;
48
+ width: 100%;
49
+ height: 85vh;
50
+ min-height: 600px;
51
+ border-radius: var(--asteroid-radius-md);
52
+ overflow: hidden;
53
+ background: var(--asteroid-bg-dark);
54
+ box-shadow: var(--asteroid-shadow-xl);
55
+ border: 1px solid var(--asteroid-border-dark);
56
+ user-select: none;
57
+ touch-action: none;
58
+ }
59
+
60
+ .asteroid-game-map {
61
+ position: absolute;
62
+ inset: 0;
63
+ z-index: 0;
64
+ background: var(--asteroid-bg-light);
65
+ touch-action: none;
66
+ }
67
+
68
+ .asteroid-map-target-overlay {
69
+ position: absolute;
70
+ inset: 0;
71
+ z-index: 10;
72
+ pointer-events: none;
73
+ opacity: 0;
74
+ transition: opacity var(--asteroid-transition-slow);
75
+ background: rgba(16, 185, 129, 0.05);
76
+ display: flex;
77
+ align-items: center;
78
+ justify-content: center;
79
+ }
80
+
81
+ .asteroid-map-target-overlay.active {
82
+ opacity: 1;
83
+ }
84
+
85
+ .asteroid-target-crosshair {
86
+ position: absolute;
87
+ width: 100%;
88
+ height: 1px;
89
+ background: rgba(16, 185, 129, 0.2);
90
+ }
91
+
92
+ .asteroid-target-crosshair.vertical {
93
+ width: 1px;
94
+ height: 100%;
95
+ }
96
+
97
+ .asteroid-target-box {
98
+ position: absolute;
99
+ border: 2px solid rgba(16, 185, 129, 0.3);
100
+ border-radius: var(--asteroid-radius-md);
101
+ width: 80%;
102
+ height: 80%;
103
+ }
104
+
105
+ .asteroid-top-bar {
106
+ position: absolute;
107
+ top: 1rem;
108
+ left: 0;
109
+ right: 0;
110
+ z-index: 30;
111
+ display: flex;
112
+ flex-direction: column;
113
+ align-items: center;
114
+ pointer-events: none;
115
+ padding: 0 1rem;
116
+ }
117
+
118
+ .asteroid-gps-btn {
119
+ pointer-events: auto;
120
+ margin-bottom: 0.5rem;
121
+ background: rgba(255, 255, 255, 0.9);
122
+ backdrop-filter: blur(12px);
123
+ color: var(--asteroid-text-primary);
124
+ padding: 0.5rem 1rem;
125
+ border-radius: var(--asteroid-radius-full);
126
+ font-size: 0.75rem;
127
+ font-weight: 700;
128
+ border: 1px solid rgba(255, 255, 255, 0.4);
129
+ box-shadow: var(--asteroid-shadow-md);
130
+ display: flex;
131
+ align-items: center;
132
+ gap: 0.5rem;
133
+ cursor: pointer;
134
+ transition: var(--asteroid-transition);
135
+ }
136
+
137
+ .theme-dark .asteroid-gps-btn {
138
+ background: rgba(30, 41, 59, 0.95);
139
+ border: 1px solid rgba(100, 116, 139, 0.4);
140
+ }
141
+
142
+ .asteroid-gps-btn:hover {
143
+ transform: scale(1.05);
144
+ }
145
+
146
+ .asteroid-gps-dot {
147
+ width: 0.5rem;
148
+ height: 0.5rem;
149
+ border-radius: 50%;
150
+ background: var(--asteroid-accent);
151
+ transition: var(--asteroid-transition);
152
+ }
153
+
154
+ .asteroid-gps-dot.active {
155
+ background: var(--asteroid-success);
156
+ animation: pulse 2s infinite;
157
+ }
158
+
159
+ @keyframes pulse {
160
+ 0%,
161
+ 100% {
162
+ opacity: 1;
163
+ }
164
+
165
+ 50% {
166
+ opacity: 0.5;
167
+ }
168
+ }
169
+
170
+ .asteroid-verdict-pill {
171
+ max-width: 100%;
172
+ transform: translateY(-20px);
173
+ opacity: 0;
174
+ transition: all var(--asteroid-transition-slow);
175
+ pointer-events: none;
176
+ }
177
+
178
+ .asteroid-verdict-pill.active {
179
+ transform: translateY(0);
180
+ opacity: 1;
181
+ pointer-events: auto;
182
+ }
183
+
184
+ .asteroid-verdict-container {
185
+ background: var(--asteroid-bg-dark);
186
+ color: var(--asteroid-text-primary);
187
+ padding: 0.75rem 1.25rem;
188
+ border-radius: var(--asteroid-radius-lg);
189
+ box-shadow: var(--asteroid-shadow-xl);
190
+ display: flex;
191
+ align-items: center;
192
+ gap: 0.75rem;
193
+ backdrop-filter: blur(8px);
194
+ border: 1px solid rgba(255, 255, 255, 0.1);
195
+ }
196
+
197
+ .asteroid-verdict-icon {
198
+ width: 1.5rem;
199
+ height: 1.5rem;
200
+ flex-shrink: 0;
201
+ display: flex;
202
+ align-items: center;
203
+ justify-content: center;
204
+ }
205
+
206
+ .asteroid-verdict-text {
207
+ text-align: left;
208
+ line-height: 1;
209
+ }
210
+
211
+ .asteroid-verdict-label {
212
+ font-weight: 700;
213
+ font-size: 0.5625rem;
214
+ text-transform: uppercase;
215
+ letter-spacing: 0.125em;
216
+ opacity: 0.6;
217
+ margin-bottom: 0.125rem;
218
+ }
219
+
220
+ .asteroid-verdict-value {
221
+ font-weight: 900;
222
+ font-size: 1.125rem;
223
+ text-transform: uppercase;
224
+ white-space: nowrap;
225
+ font-style: italic;
226
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
227
+ }
228
+
229
+ .asteroid-verdict-safe .asteroid-verdict-value {
230
+ color: #34d399;
231
+ }
232
+
233
+ .asteroid-verdict-shock .asteroid-verdict-value {
234
+ color: #60a5fa;
235
+ }
236
+
237
+ .asteroid-verdict-burned .asteroid-verdict-value {
238
+ color: #fb923c;
239
+ }
240
+
241
+ .asteroid-verdict-vaporized .asteroid-verdict-value {
242
+ color: #f87171;
243
+ }
244
+
245
+ .asteroid-desktop-lab {
246
+ display: none;
247
+ }
248
+
249
+ @media (min-width: 768px) {
250
+ .asteroid-desktop-lab {
251
+ display: flex;
252
+ position: absolute;
253
+ top: 1.5rem;
254
+ left: 1.5rem;
255
+ bottom: 1.5rem;
256
+ width: 20rem;
257
+ z-index: 30;
258
+ flex-direction: column;
259
+ pointer-events: none;
260
+ }
261
+ }
262
+
263
+ .asteroid-lab-panel {
264
+ background: var(--asteroid-bg-modal);
265
+ backdrop-filter: blur(32px);
266
+ border: 1px solid var(--asteroid-border-light);
267
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
268
+ border-radius: var(--asteroid-radius-lg);
269
+ padding: 1.25rem;
270
+ display: flex;
271
+ flex-direction: column;
272
+ gap: 1rem;
273
+ pointer-events: auto;
274
+ height: 100%;
275
+ overflow: hidden;
276
+ color: var(--asteroid-text-primary);
277
+ }
278
+
279
+ .asteroid-lab-header {
280
+ display: flex;
281
+ align-items: center;
282
+ justify-content: space-between;
283
+ padding-bottom: 0.5rem;
284
+ border-bottom: 1px solid var(--asteroid-border-light);
285
+ flex-shrink: 0;
286
+ }
287
+
288
+ .asteroid-lab-title {
289
+ display: flex;
290
+ align-items: center;
291
+ gap: 0.5rem;
292
+ }
293
+
294
+ .asteroid-lab-icon {
295
+ width: 2rem;
296
+ height: 2rem;
297
+ border-radius: var(--asteroid-radius-sm);
298
+ background: linear-gradient(135deg, var(--asteroid-primary) 0%, var(--asteroid-secondary) 100%);
299
+ display: flex;
300
+ align-items: center;
301
+ justify-content: center;
302
+ color: var(--asteroid-text-primary);
303
+ box-shadow: 0 4px 8px rgba(var(--asteroid-primary-rgb), 0.3);
304
+ }
305
+
306
+ .asteroid-lab-name {
307
+ font-weight: 900;
308
+ color: var(--asteroid-text-primary);
309
+ font-size: 1rem;
310
+ line-height: 1;
311
+ }
312
+
313
+ .asteroid-lab-subtitle {
314
+ font-size: 0.5625rem;
315
+ font-weight: 700;
316
+ color: var(--asteroid-text-secondary);
317
+ text-transform: uppercase;
318
+ letter-spacing: 0.125em;
319
+ }
320
+
321
+ .asteroid-lab-content {
322
+ flex: 1;
323
+ overflow-y: auto;
324
+ padding-right: 0.25rem;
325
+ display: flex;
326
+ flex-direction: column;
327
+ gap: 1.5rem;
328
+ }
329
+
330
+ .asteroid-lab-content::-webkit-scrollbar {
331
+ width: 6px;
332
+ }
333
+
334
+ .asteroid-lab-content::-webkit-scrollbar-track {
335
+ background: transparent;
336
+ }
337
+
338
+ .asteroid-lab-content::-webkit-scrollbar-thumb {
339
+ background: rgba(100, 116, 139, 0.3);
340
+ border-radius: 3px;
341
+ }
342
+
343
+ .asteroid-drag-source {
344
+ position: relative;
345
+ cursor: grab;
346
+ transform-origin: center;
347
+ transition: var(--asteroid-transition);
348
+ }
349
+
350
+ .asteroid-drag-source:active {
351
+ cursor: grabbing;
352
+ transform: scale(0.98);
353
+ }
354
+
355
+ .asteroid-drag-source:hover {
356
+ transform: scale(1.02);
357
+ }
358
+
359
+ .asteroid-drag-bg {
360
+ position: absolute;
361
+ inset: 0;
362
+ background: linear-gradient(135deg, #f3f4f6 0%, #fff 100%);
363
+ border-radius: var(--asteroid-radius-lg);
364
+ border: 1px solid var(--asteroid-border-light);
365
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05);
366
+ }
367
+
368
+ .asteroid-drag-tooltip {
369
+ position: absolute;
370
+ top: -2.5rem;
371
+ left: 50%;
372
+ transform: translateX(-50%);
373
+ opacity: 0;
374
+ display: flex;
375
+ align-items: center;
376
+ justify-content: center;
377
+ z-index: 10;
378
+ pointer-events: none;
379
+ transition: opacity var(--asteroid-transition);
380
+ }
381
+
382
+ .asteroid-drag-source:hover .asteroid-drag-tooltip {
383
+ opacity: 1;
384
+ }
385
+
386
+ .asteroid-drag-tooltip-text {
387
+ background: rgba(0, 0, 0, 0.85);
388
+ color: var(--asteroid-text-primary);
389
+ font-size: 0.65rem;
390
+ font-weight: 700;
391
+ padding: 0.4rem 0.75rem;
392
+ border-radius: var(--asteroid-radius-sm);
393
+ border: 1px solid rgba(255, 255, 255, 0.1);
394
+ backdrop-filter: blur(8px);
395
+ box-shadow: var(--asteroid-shadow-lg);
396
+ }
397
+
398
+ .asteroid-drag-visual {
399
+ position: relative;
400
+ height: 12rem;
401
+ display: flex;
402
+ align-items: center;
403
+ justify-content: center;
404
+ overflow: visible;
405
+ border-radius: var(--asteroid-radius-lg);
406
+ }
407
+
408
+ .asteroid-drag-grid {
409
+ position: absolute;
410
+ inset: 0;
411
+ background-image: radial-gradient(#cbd5e1 1px, transparent 1px);
412
+ background-size: 20px 20px;
413
+ opacity: 0.5;
414
+ }
415
+
416
+ .asteroid-visual {
417
+ width: 5rem;
418
+ height: 5rem;
419
+ border-radius: 50%;
420
+ box-shadow: 10px 10px 30px rgba(0, 0, 0, 0.2), -5px -5px 15px rgba(255, 255, 255, 0.8);
421
+ position: relative;
422
+ transition: var(--asteroid-transition);
423
+ z-index: 10;
424
+ }
425
+
426
+ .asteroid-visual.ice-type {
427
+ box-shadow:
428
+ 0 0 20px rgba(103, 232, 249, 0.6),
429
+ 10px 10px 30px rgba(0, 0, 0, 0.2),
430
+ -5px -5px 15px rgba(255, 255, 255, 0.8);
431
+ }
432
+
433
+ .asteroid-drag-icon-parent {
434
+ position: absolute;
435
+ bottom: 0.5rem;
436
+ right: 0.5rem;
437
+ width: 2rem;
438
+ height: 2rem;
439
+ background: rgba(0, 0, 0, 0.85);
440
+ border: 1px solid rgba(255, 255, 255, 0.1);
441
+ border-radius: var(--asteroid-radius-sm);
442
+ display: flex;
443
+ align-items: center;
444
+ justify-content: center;
445
+ color: var(--asteroid-text-primary);
446
+ z-index: 20;
447
+ opacity: 1;
448
+ transition: var(--asteroid-transition);
449
+ }
450
+
451
+ .asteroid-drag-source:hover .asteroid-drag-icon-parent {
452
+ background: rgba(0, 0, 0, 0.95);
453
+ }
454
+
455
+ .asteroid-surface {
456
+ position: absolute;
457
+ inset: 0;
458
+ border-radius: 50%;
459
+ background: var(--asteroid-accent);
460
+ overflow: hidden;
461
+ border: 2px solid rgba(255, 255, 255, 0.2);
462
+ }
463
+
464
+ .asteroid-surface-gradient {
465
+ position: absolute;
466
+ top: 0;
467
+ right: 0;
468
+ width: 100%;
469
+ height: 100%;
470
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, rgba(0, 0, 0, 0.3) 100%);
471
+ animation: asteroid-spin 8s linear infinite;
472
+ }
473
+
474
+ @keyframes asteroid-spin {
475
+ from {
476
+ transform: rotate(0deg);
477
+ }
478
+
479
+ to {
480
+ transform: rotate(360deg);
481
+ }
482
+ }
483
+
484
+ .asteroid-params-badge {
485
+ position: absolute;
486
+ top: 0.5rem;
487
+ left: 0.5rem;
488
+ background: rgba(0, 0, 0, 0.85);
489
+ border: 1px solid rgba(255, 255, 255, 0.1);
490
+ border-radius: var(--asteroid-radius-sm);
491
+ padding: 0.5rem 0.75rem;
492
+ display: flex;
493
+ flex-direction: column;
494
+ gap: 0.25rem;
495
+ z-index: 20;
496
+ font-size: 0.7rem;
497
+ font-weight: 700;
498
+ color: var(--asteroid-text-primary);
499
+ white-space: nowrap;
500
+ opacity: 1;
501
+ transition: opacity var(--asteroid-transition-slow);
502
+ }
503
+
504
+ .asteroid-param-item {
505
+ display: flex;
506
+ align-items: center;
507
+ gap: 0.25rem;
508
+ }
509
+
510
+ .asteroid-param-item:nth-child(1) {
511
+ color: var(--asteroid-primary);
512
+ }
513
+
514
+ .asteroid-param-item:nth-child(2) {
515
+ color: var(--asteroid-success);
516
+ }
517
+
518
+ .asteroid-param-item:nth-child(3) {
519
+ color: var(--asteroid-accent);
520
+ }
521
+
522
+ .asteroid-presets {
523
+ display: grid;
524
+ grid-template-columns: repeat(2, 1fr);
525
+ gap: 0.75rem;
526
+ }
527
+
528
+ .asteroid-preset-btn {
529
+ position: relative;
530
+ overflow: hidden;
531
+ background: var(--asteroid-bg-card);
532
+ border: 1px solid var(--asteroid-border-light);
533
+ border-radius: var(--asteroid-radius-md);
534
+ padding: 0.75rem;
535
+ text-align: left;
536
+ transition: var(--asteroid-transition-slow);
537
+ cursor: pointer;
538
+ flex-shrink: 0;
539
+ }
540
+
541
+ .asteroid-preset-btn:hover {
542
+ box-shadow: var(--asteroid-shadow-lg);
543
+ transform: translateY(-2px);
544
+ border-color: var(--asteroid-primary);
545
+ }
546
+
547
+ .asteroid-preset-title {
548
+ font-size: 0.6875rem;
549
+ font-weight: 900;
550
+ color: var(--asteroid-text-primary);
551
+ margin-bottom: 0.125rem;
552
+ position: relative;
553
+ z-index: 10;
554
+ transition: var(--asteroid-transition);
555
+ }
556
+
557
+ .asteroid-preset-btn:hover .asteroid-preset-title {
558
+ color: var(--asteroid-primary);
559
+ }
560
+
561
+ .asteroid-preset-subtitle {
562
+ font-size: 0.5625rem;
563
+ font-weight: 500;
564
+ color: var(--asteroid-text-secondary);
565
+ position: relative;
566
+ z-index: 10;
567
+ }
568
+
569
+ .asteroid-control-group {
570
+ background: var(--asteroid-bg-light);
571
+ border-radius: var(--asteroid-radius-md);
572
+ padding: 0.75rem;
573
+ border: 1px solid var(--asteroid-border-light);
574
+ }
575
+
576
+ .asteroid-control-label {
577
+ display: flex;
578
+ justify-content: space-between;
579
+ align-items: flex-end;
580
+ margin-bottom: 0.5rem;
581
+ }
582
+
583
+ .asteroid-control-text {
584
+ font-size: 0.625rem;
585
+ font-weight: 700;
586
+ color: var(--asteroid-text-secondary);
587
+ text-transform: uppercase;
588
+ letter-spacing: 0.05em;
589
+ }
590
+
591
+ .asteroid-control-value {
592
+ font-size: 0.875rem;
593
+ font-weight: 900;
594
+ color: var(--asteroid-text-primary);
595
+ }
596
+
597
+ .asteroid-slider {
598
+ width: 100%;
599
+ height: 0.375rem;
600
+ background: var(--asteroid-border-light);
601
+ border-radius: 0.5rem;
602
+ appearance: none;
603
+ cursor: pointer;
604
+ accent-color: var(--asteroid-primary);
605
+ }
606
+
607
+ .asteroid-slider::-webkit-slider-thumb {
608
+ appearance: none;
609
+ width: 1.25rem;
610
+ height: 1.25rem;
611
+ background: var(--asteroid-primary);
612
+ border-radius: 50%;
613
+ cursor: pointer;
614
+ box-shadow: var(--asteroid-shadow-md);
615
+ transition: var(--asteroid-transition);
616
+ }
617
+
618
+ .asteroid-slider::-webkit-slider-thumb:hover {
619
+ transform: scale(1.2);
620
+ box-shadow: var(--asteroid-shadow-lg);
621
+ }
622
+
623
+ .asteroid-slider::-moz-range-thumb {
624
+ width: 1.25rem;
625
+ height: 1.25rem;
626
+ background: var(--asteroid-primary);
627
+ border: none;
628
+ border-radius: 50%;
629
+ cursor: pointer;
630
+ box-shadow: var(--asteroid-shadow-md);
631
+ transition: var(--asteroid-transition);
632
+ }
633
+
634
+ .asteroid-slider::-moz-range-thumb:hover {
635
+ transform: scale(1.2);
636
+ box-shadow: var(--asteroid-shadow-lg);
637
+ }
638
+
639
+ .asteroid-material-buttons {
640
+ display: grid;
641
+ grid-template-columns: repeat(3, 1fr);
642
+ gap: 0.5rem;
643
+ }
644
+
645
+ .asteroid-material-btn {
646
+ padding: 0.5rem;
647
+ border-radius: var(--asteroid-radius-md);
648
+ border: 1px solid var(--asteroid-border-light);
649
+ background: var(--asteroid-bg-light);
650
+ cursor: pointer;
651
+ transition: var(--asteroid-transition);
652
+ display: flex;
653
+ flex-direction: column;
654
+ align-items: center;
655
+ gap: 0.25rem;
656
+ }
657
+
658
+ .asteroid-material-btn:hover {
659
+ background: white;
660
+ }
661
+
662
+ .asteroid-material-btn.active {
663
+ border-color: var(--asteroid-primary);
664
+ background: rgba(249, 115, 22, 0.1);
665
+ }
666
+
667
+ .asteroid-material-dot {
668
+ width: 1rem;
669
+ height: 1rem;
670
+ border-radius: 50%;
671
+ box-shadow: var(--asteroid-shadow-sm);
672
+ transition: var(--asteroid-transition);
673
+ }
674
+
675
+ .asteroid-material-btn:hover .asteroid-material-dot {
676
+ transform: scale(1.1);
677
+ }
678
+
679
+ .asteroid-material-name {
680
+ font-size: 0.5625rem;
681
+ font-weight: 700;
682
+ color: var(--asteroid-text-secondary);
683
+ text-transform: uppercase;
684
+ }
685
+
686
+ .asteroid-clear-btn {
687
+ padding: 0.25rem 0.35rem;
688
+ border-radius: 0.35rem;
689
+ background: var(--asteroid-bg-light);
690
+ color: var(--asteroid-text-secondary);
691
+ font-weight: 600;
692
+ font-size: 0.5rem;
693
+ text-transform: uppercase;
694
+ letter-spacing: 0.04em;
695
+ border: none;
696
+ cursor: pointer;
697
+ transition: var(--asteroid-transition);
698
+ display: flex;
699
+ align-items: center;
700
+ justify-content: center;
701
+ gap: 0.2rem;
702
+ height: auto;
703
+ min-height: 1.5rem;
704
+ flex-shrink: 0;
705
+ }
706
+
707
+ .asteroid-clear-btn:hover {
708
+ background: rgba(220, 38, 38, 0.1);
709
+ color: var(--asteroid-danger);
710
+ }
711
+
712
+ .asteroid-mobile-control {
713
+ display: flex;
714
+ align-items: center;
715
+ justify-content: center;
716
+ }
717
+
718
+ @media (min-width: 768px) {
719
+ .asteroid-mobile-control {
720
+ display: none;
721
+ }
722
+ }
723
+
724
+ .asteroid-mobile-bar {
725
+ position: absolute;
726
+ bottom: 1.5rem;
727
+ left: 1rem;
728
+ right: 1rem;
729
+ z-index: 40;
730
+ background: rgba(255, 255, 255, 0.9);
731
+ backdrop-filter: blur(12px);
732
+ border-radius: var(--asteroid-radius-lg);
733
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
734
+ border: 1px solid rgba(255, 255, 255, 0.6);
735
+ padding: 0.5rem;
736
+ display: flex;
737
+ align-items: center;
738
+ justify-content: space-between;
739
+ pointer-events: auto;
740
+ }
741
+
742
+ .asteroid-mobile-asteroid {
743
+ width: 4rem;
744
+ height: 4rem;
745
+ background: var(--asteroid-bg-light);
746
+ border-radius: 50%;
747
+ box-shadow: var(--asteroid-shadow-lg);
748
+ border: 1px solid white;
749
+ display: flex;
750
+ align-items: center;
751
+ justify-content: center;
752
+ cursor: grab;
753
+ position: relative;
754
+ overflow: hidden;
755
+ transition: var(--asteroid-transition);
756
+ }
757
+
758
+ .asteroid-mobile-asteroid:active {
759
+ cursor: grabbing;
760
+ transform: scale(0.95);
761
+ }
762
+
763
+ .asteroid-mobile-asteroid-label {
764
+ position: absolute;
765
+ top: -0.75rem;
766
+ background: var(--asteroid-bg-dark);
767
+ color: var(--asteroid-text-primary);
768
+ font-size: 0.5625rem;
769
+ font-weight: 900;
770
+ letter-spacing: 0.125em;
771
+ padding: 0 0.5rem;
772
+ border-radius: var(--asteroid-radius-full);
773
+ box-shadow: var(--asteroid-shadow-lg);
774
+ transform: scale(0.9);
775
+ }
776
+
777
+ .asteroid-mobile-person {
778
+ width: 4rem;
779
+ height: 4rem;
780
+ background: rgba(59, 130, 246, 0.05);
781
+ border-radius: 50%;
782
+ box-shadow: var(--asteroid-shadow-lg);
783
+ border: 1px solid white;
784
+ display: flex;
785
+ align-items: center;
786
+ justify-content: center;
787
+ cursor: grab;
788
+ position: relative;
789
+ overflow: hidden;
790
+ transition: var(--asteroid-transition);
791
+ }
792
+
793
+ .asteroid-mobile-person:active {
794
+ cursor: grabbing;
795
+ transform: scale(0.95);
796
+ }
797
+
798
+ .asteroid-person-icon {
799
+ width: 2rem;
800
+ height: 2rem;
801
+ color: #3b82f6;
802
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
803
+ }
804
+
805
+ .asteroid-divider {
806
+ height: 2rem;
807
+ width: 1px;
808
+ background: var(--asteroid-border-light);
809
+ margin: 0 0.5rem;
810
+ }