@jjlmoya/utils-hardware 1.12.0 → 1.14.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,882 @@
1
+ .tm-wrapper {
2
+ width: 100%;
3
+ color: var(--tm-text);
4
+ }
5
+
6
+ .tm-container {
7
+ max-width: 56rem;
8
+ margin: 0 auto;
9
+ padding: 1rem;
10
+ display: flex;
11
+ flex-direction: column;
12
+ gap: 3rem;
13
+ }
14
+
15
+ .tm-card {
16
+ background: var(--tm-surface);
17
+ border-radius: 1.5rem;
18
+ padding: 2rem;
19
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
20
+ border: 1px solid var(--tm-border);
21
+ }
22
+
23
+ .tm-card-header {
24
+ text-align: center;
25
+ margin-bottom: 2rem;
26
+ }
27
+
28
+ .tm-badge {
29
+ display: inline-flex;
30
+ align-items: center;
31
+ gap: 0.5rem;
32
+ padding: 0.25rem 0.75rem;
33
+ border-radius: 9999px;
34
+ background-color: rgba(79, 70, 229, 0.1);
35
+ color: var(--tm-accent);
36
+ font-size: 0.75rem;
37
+ font-weight: 700;
38
+ text-transform: uppercase;
39
+ letter-spacing: 0.05em;
40
+ margin-bottom: 0.75rem;
41
+ }
42
+
43
+ .tm-badge-icon {
44
+ width: 1rem;
45
+ height: 1rem;
46
+ }
47
+
48
+ .tm-title {
49
+ font-size: 1.875rem;
50
+ font-weight: 900;
51
+ letter-spacing: -0.02em;
52
+ margin: 0 0 0.25rem;
53
+ }
54
+
55
+ .tm-description {
56
+ font-size: 0.9375rem;
57
+ color: var(--tm-text-muted);
58
+ margin: 0;
59
+ }
60
+
61
+ .tm-stage-wrapper {
62
+ display: flex;
63
+ flex-direction: column;
64
+ align-items: center;
65
+ gap: 1rem;
66
+ }
67
+
68
+ .tm-stage {
69
+ position: relative;
70
+ width: 600px;
71
+ height: 420px;
72
+ transition: all 500ms;
73
+ }
74
+
75
+ .tm-stage-inactive {
76
+ opacity: 0.25;
77
+ filter: grayscale(1);
78
+ transform: scale(0.9);
79
+ }
80
+
81
+ @media (min-width: 640px) {
82
+ .tm-stage-inactive {
83
+ transform: scale(1);
84
+ }
85
+ }
86
+
87
+ .tm-trigger {
88
+ position: absolute;
89
+ top: 0;
90
+ width: 8rem;
91
+ height: 4rem;
92
+ background: var(--tm-btn-bg);
93
+ border-radius: 0.75rem 0.75rem 0 0;
94
+ border: 1px solid var(--tm-btn-border);
95
+ border-bottom: none;
96
+ display: flex;
97
+ flex-direction: column;
98
+ justify-content: flex-end;
99
+ padding: 0.5rem;
100
+ }
101
+
102
+ .tm-trigger-left { left: 2rem; }
103
+ .tm-trigger-right { right: 2rem; }
104
+
105
+ .tm-trigger-label {
106
+ position: absolute;
107
+ top: -1.5rem;
108
+ font-size: 0.625rem;
109
+ font-weight: 700;
110
+ color: var(--tm-text-muted);
111
+ }
112
+
113
+ .tm-trigger-left .tm-trigger-label { left: 0; }
114
+ .tm-trigger-right .tm-trigger-label { right: 0; }
115
+
116
+ .tm-trigger-bar-track {
117
+ width: 100%;
118
+ background: var(--tm-border);
119
+ height: 0.5rem;
120
+ border-radius: 9999px;
121
+ overflow: hidden;
122
+ }
123
+
124
+ .tm-trigger-bar {
125
+ height: 100%;
126
+ background: var(--tm-active);
127
+ width: 0;
128
+ transition: width 50ms;
129
+ }
130
+
131
+ .tm-trigger-btn {
132
+ margin-top: 0.5rem;
133
+ width: 100%;
134
+ height: 2rem;
135
+ border-radius: 0.5rem;
136
+ border: 2px solid var(--tm-btn-border);
137
+ transition: all 150ms;
138
+ }
139
+
140
+ .tm-shoulder {
141
+ position: absolute;
142
+ top: 5rem;
143
+ width: 8rem;
144
+ height: 2.5rem;
145
+ background: var(--tm-surface);
146
+ border-radius: 0.5rem;
147
+ border: 2px solid var(--tm-btn-border);
148
+ display: flex;
149
+ align-items: center;
150
+ justify-content: center;
151
+ font-size: 0.75rem;
152
+ font-weight: 700;
153
+ color: var(--tm-btn-border);
154
+ transition: all 150ms;
155
+ }
156
+
157
+ .tm-shoulder-left { left: 2rem; }
158
+ .tm-shoulder-right { right: 2rem; }
159
+
160
+ .tm-left-cluster {
161
+ position: absolute;
162
+ top: 8rem;
163
+ left: 4rem;
164
+ width: 12rem;
165
+ height: 12rem;
166
+ }
167
+
168
+ .tm-stick-base {
169
+ position: absolute;
170
+ top: 0;
171
+ left: 0;
172
+ width: 6rem;
173
+ height: 6rem;
174
+ background: var(--tm-stick-base);
175
+ border-radius: 9999px;
176
+ border: 2px solid var(--tm-stick-border);
177
+ display: flex;
178
+ align-items: center;
179
+ justify-content: center;
180
+ box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.4);
181
+ }
182
+
183
+ .tm-left-cluster .tm-stick-base {
184
+ top: 0;
185
+ left: 0;
186
+ }
187
+
188
+ .tm-stick-cap {
189
+ width: 3.5rem;
190
+ height: 3.5rem;
191
+ background: var(--tm-stick-cap);
192
+ border-radius: 9999px;
193
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 2px 6px rgba(0, 0, 0, 0.5);
194
+ position: relative;
195
+ will-change: transform;
196
+ transition: background 150ms, box-shadow 150ms;
197
+ }
198
+
199
+ .tm-stick-press {
200
+ width: 100%;
201
+ height: 100%;
202
+ border-radius: 9999px;
203
+ border: 4px solid transparent;
204
+ transition: border-color 150ms;
205
+ }
206
+
207
+ .tm-dpad {
208
+ position: absolute;
209
+ bottom: 0;
210
+ right: 0;
211
+ width: 6rem;
212
+ height: 6rem;
213
+ }
214
+
215
+ .tm-dpad-up,
216
+ .tm-dpad-down,
217
+ .tm-dpad-left,
218
+ .tm-dpad-right {
219
+ position: absolute;
220
+ width: 2rem;
221
+ height: 2rem;
222
+ border-radius: 0.25rem;
223
+ background: var(--tm-btn-bg);
224
+ border: 2px solid var(--tm-btn-border);
225
+ transition: all 150ms;
226
+ }
227
+
228
+ .tm-dpad-up {
229
+ top: 0;
230
+ left: 50%;
231
+ transform: translateX(-50%);
232
+ }
233
+ .tm-dpad-down {
234
+ bottom: 0;
235
+ left: 50%;
236
+ transform: translateX(-50%);
237
+ }
238
+ .tm-dpad-left {
239
+ left: 0;
240
+ top: 50%;
241
+ transform: translateY(-50%);
242
+ }
243
+ .tm-dpad-right {
244
+ right: 0;
245
+ top: 50%;
246
+ transform: translateY(-50%);
247
+ }
248
+ .tm-dpad-center {
249
+ position: absolute;
250
+ inset: 2rem;
251
+ background: var(--tm-btn-bg);
252
+ border-radius: 0.25rem;
253
+ }
254
+
255
+ .tm-right-cluster {
256
+ position: absolute;
257
+ top: 8rem;
258
+ right: 4rem;
259
+ width: 6rem;
260
+ height: 6rem;
261
+ }
262
+
263
+ .tm-stick-right {
264
+ position: absolute;
265
+ bottom: 12rem;
266
+ right: 16rem;
267
+ }
268
+
269
+ .tm-face-buttons {
270
+ position: absolute;
271
+ top: 0;
272
+ right: 0;
273
+ width: 6rem;
274
+ height: 6rem;
275
+ }
276
+
277
+ .tm-face-btn {
278
+ position: absolute;
279
+ width: 2.5rem;
280
+ height: 2.5rem;
281
+ border-radius: 9999px;
282
+ border: 2px solid var(--tm-btn-border);
283
+ background: var(--tm-surface);
284
+ display: flex;
285
+ align-items: center;
286
+ justify-content: center;
287
+ font-weight: 700;
288
+ font-size: 0.75rem;
289
+ color: var(--tm-btn-border);
290
+ transition: all 150ms;
291
+ }
292
+
293
+ #btn-3 {
294
+ top: 0;
295
+ left: 50%;
296
+ transform: translateX(-50%);
297
+ color: #eab308;
298
+ border-color: rgba(234, 179, 8, 0.6);
299
+ }
300
+ #btn-1 {
301
+ right: 0;
302
+ top: 50%;
303
+ transform: translateY(-50%);
304
+ color: #f43f5e;
305
+ border-color: rgba(244, 63, 94, 0.6);
306
+ }
307
+ #btn-0 {
308
+ bottom: 0;
309
+ left: 50%;
310
+ transform: translateX(-50%);
311
+ color: #10b981;
312
+ border-color: rgba(16, 185, 129, 0.6);
313
+ }
314
+ #btn-2 {
315
+ left: 0;
316
+ top: 50%;
317
+ transform: translateY(-50%);
318
+ color: #0ea5e9;
319
+ border-color: rgba(14, 165, 233, 0.6);
320
+ }
321
+
322
+ .tm-center-buttons {
323
+ position: absolute;
324
+ top: 10rem;
325
+ left: 50%;
326
+ transform: translateX(-50%);
327
+ display: flex;
328
+ gap: 1.5rem;
329
+ }
330
+
331
+ .tm-center-btn {
332
+ width: 2rem;
333
+ height: 2rem;
334
+ border-radius: 9999px;
335
+ background: var(--tm-btn-bg);
336
+ display: flex;
337
+ align-items: center;
338
+ justify-content: center;
339
+ font-size: 0.625rem;
340
+ font-weight: 700;
341
+ color: var(--tm-text-muted);
342
+ transition: all 150ms;
343
+ }
344
+
345
+ .tm-power-btn {
346
+ position: absolute;
347
+ top: 6rem;
348
+ left: 50%;
349
+ transform: translateX(-50%);
350
+ width: 3rem;
351
+ height: 3rem;
352
+ border-radius: 9999px;
353
+ border: 4px solid var(--tm-btn-bg);
354
+ background: var(--tm-surface);
355
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
356
+ display: flex;
357
+ align-items: center;
358
+ justify-content: center;
359
+ transition: all 150ms;
360
+ }
361
+
362
+ .tm-power-icon {
363
+ width: 1.5rem;
364
+ height: 1.5rem;
365
+ color: var(--tm-btn-border);
366
+ }
367
+
368
+ .tm-info-bar {
369
+ width: 100%;
370
+ padding-top: 1.5rem;
371
+ border-top: 1px solid var(--tm-border);
372
+ display: flex;
373
+ justify-content: space-between;
374
+ align-items: center;
375
+ font-size: 0.75rem;
376
+ color: var(--tm-text-muted);
377
+ transition: opacity 500ms;
378
+ }
379
+
380
+ .tm-info-inactive { opacity: 0.5; }
381
+
382
+ .tm-info-left,
383
+ .tm-info-right {
384
+ display: flex;
385
+ gap: 1rem;
386
+ }
387
+
388
+ .tm-gp-id {
389
+ display: none;
390
+ }
391
+
392
+ @media (min-width: 768px) {
393
+ .tm-gp-id { display: inline; }
394
+ }
395
+
396
+ .tm-vibration-panel {
397
+ margin-top: 2rem;
398
+ background: var(--tm-surface-alt);
399
+ border-radius: 1rem;
400
+ padding: 1.5rem;
401
+ border: 1px solid var(--tm-border);
402
+ display: flex;
403
+ flex-direction: column;
404
+ gap: 1rem;
405
+ transition: opacity 500ms;
406
+ }
407
+
408
+ @media (min-width: 768px) {
409
+ .tm-vibration-panel {
410
+ flex-direction: row;
411
+ align-items: center;
412
+ justify-content: space-between;
413
+ }
414
+ }
415
+
416
+ .tm-vibration-inactive {
417
+ opacity: 0.5;
418
+ pointer-events: none;
419
+ }
420
+
421
+ .tm-vibration-title {
422
+ font-size: 0.9375rem;
423
+ font-weight: 700;
424
+ display: flex;
425
+ align-items: center;
426
+ gap: 0.5rem;
427
+ margin: 0 0 0.25rem;
428
+ }
429
+
430
+ .tm-vibration-icon {
431
+ width: 1.25rem;
432
+ height: 1.25rem;
433
+ color: #d946ef;
434
+ }
435
+
436
+ .tm-vibration-desc {
437
+ font-size: 0.75rem;
438
+ color: var(--tm-text-muted);
439
+ margin: 0;
440
+ }
441
+
442
+ .tm-vibration-btns {
443
+ display: flex;
444
+ gap: 1rem;
445
+ }
446
+
447
+ .tm-vib-btn {
448
+ padding: 0.5rem 1rem;
449
+ background: var(--tm-surface);
450
+ border: 1px solid var(--tm-btn-border);
451
+ border-radius: 0.5rem;
452
+ font-size: 0.875rem;
453
+ font-weight: 700;
454
+ cursor: pointer;
455
+ color: var(--tm-text);
456
+ transition: all 150ms;
457
+ }
458
+
459
+ .tm-vib-btn:hover {
460
+ border-color: var(--tm-accent);
461
+ color: var(--tm-accent);
462
+ }
463
+
464
+ .tm-log-section {
465
+ margin-top: 2rem;
466
+ background: var(--tm-surface-alt);
467
+ border-radius: 1rem;
468
+ padding: 1rem;
469
+ border: 1px solid var(--tm-border);
470
+ }
471
+
472
+ .tm-log-header {
473
+ display: flex;
474
+ justify-content: space-between;
475
+ align-items: center;
476
+ margin-bottom: 0.5rem;
477
+ }
478
+
479
+ .tm-log-title {
480
+ font-size: 0.75rem;
481
+ font-weight: 700;
482
+ text-transform: uppercase;
483
+ color: var(--tm-text-muted);
484
+ letter-spacing: 0.1em;
485
+ }
486
+
487
+ .tm-log-clear {
488
+ font-size: 0.625rem;
489
+ font-weight: 700;
490
+ text-transform: uppercase;
491
+ background: none;
492
+ border: none;
493
+ cursor: pointer;
494
+ color: var(--tm-text-muted);
495
+ }
496
+
497
+ .tm-log-clear:hover {
498
+ color: var(--tm-active);
499
+ }
500
+
501
+ .tm-log {
502
+ height: 10rem;
503
+ overflow-y: auto;
504
+ font-size: 0.75rem;
505
+ color: var(--tm-text-muted);
506
+ background: var(--tm-kb-bg);
507
+ padding: 0.75rem;
508
+ border-radius: 0.5rem;
509
+ border: 1px solid var(--tm-kb-border);
510
+ scrollbar-width: thin;
511
+ scrollbar-color: var(--tm-border) transparent;
512
+ }
513
+
514
+ .tm-log::-webkit-scrollbar {
515
+ width: 4px;
516
+ }
517
+
518
+ .tm-log::-webkit-scrollbar-thumb {
519
+ background: var(--tm-border);
520
+ border-radius: 2px;
521
+ }
522
+
523
+ .tm-log-waiting {
524
+ font-style: italic;
525
+ opacity: 0.5;
526
+ color: var(--tm-text-muted);
527
+ }
528
+
529
+ .tm-log div {
530
+ line-height: 1.8;
531
+ border-bottom: 1px solid rgba(255, 255, 255, 0.04);
532
+ padding-bottom: 0.125rem;
533
+ }
534
+
535
+ .tm-game-card {
536
+ background: var(--tm-surface-dark);
537
+ border-radius: 3rem;
538
+ padding: 2.5rem;
539
+ position: relative;
540
+ overflow: hidden;
541
+ min-height: 500px;
542
+ display: flex;
543
+ flex-direction: column;
544
+ align-items: center;
545
+ justify-content: center;
546
+ border: 1px solid rgba(255, 255, 255, 0.05);
547
+ color: white;
548
+ }
549
+
550
+ .tm-game-intro {
551
+ position: relative;
552
+ z-index: 10;
553
+ text-align: center;
554
+ }
555
+
556
+ .tm-game-icon {
557
+ display: inline-flex;
558
+ align-items: center;
559
+ justify-content: center;
560
+ width: 5rem;
561
+ height: 5rem;
562
+ border-radius: 1.5rem;
563
+ background: rgba(255, 255, 255, 0.05);
564
+ border: 1px solid rgba(255, 255, 255, 0.1);
565
+ margin-bottom: 1.5rem;
566
+ }
567
+
568
+ .tm-game-icon-svg {
569
+ width: 2.5rem;
570
+ height: 2.5rem;
571
+ color: var(--tm-success);
572
+ }
573
+
574
+ .tm-game-intro-title {
575
+ font-size: clamp(1.75rem, 5vw, 3rem);
576
+ font-weight: 900;
577
+ letter-spacing: -0.02em;
578
+ margin: 0 0 1rem;
579
+ }
580
+
581
+ .tm-game-highlight {
582
+ background: linear-gradient(to right, #34d399, #22d3ee);
583
+ -webkit-background-clip: text;
584
+ -webkit-text-fill-color: transparent;
585
+ background-clip: text;
586
+ }
587
+
588
+ .tm-game-intro-desc {
589
+ color: #94a3b8;
590
+ margin: 0 0 2.5rem;
591
+ max-width: 28rem;
592
+ font-size: 1.125rem;
593
+ line-height: 1.6;
594
+ }
595
+
596
+ .tm-game-start-btn {
597
+ position: relative;
598
+ padding: 1.25rem 2.5rem;
599
+ background: linear-gradient(to right, #10b981, #06b6d4);
600
+ border: none;
601
+ border-radius: 1rem;
602
+ font-weight: 900;
603
+ font-size: 1.25rem;
604
+ color: white;
605
+ cursor: pointer;
606
+ box-shadow: 0 10px 30px rgba(16, 185, 129, 0.3);
607
+ transition: all 300ms;
608
+ overflow: hidden;
609
+ }
610
+
611
+ .tm-game-start-btn:hover {
612
+ box-shadow: 0 15px 40px rgba(16, 185, 129, 0.5);
613
+ transform: scale(1.05);
614
+ }
615
+
616
+ .tm-game-start-btn:active {
617
+ transform: scale(0.95);
618
+ }
619
+
620
+ .tm-game-warning {
621
+ margin-top: 1.5rem;
622
+ font-size: 0.875rem;
623
+ font-weight: 500;
624
+ display: flex;
625
+ align-items: center;
626
+ justify-content: center;
627
+ gap: 0.5rem;
628
+ color: #94a3b8;
629
+ }
630
+
631
+ .tm-game-warning-icon {
632
+ width: 1rem;
633
+ height: 1rem;
634
+ }
635
+
636
+ .tm-game-play {
637
+ position: relative;
638
+ z-index: 10;
639
+ width: 100%;
640
+ flex-direction: column;
641
+ align-items: center;
642
+ }
643
+
644
+ .tm-game-hud {
645
+ display: flex;
646
+ justify-content: space-between;
647
+ align-items: center;
648
+ width: 100%;
649
+ margin-bottom: 3rem;
650
+ }
651
+
652
+ .tm-hud-item {
653
+ display: flex;
654
+ flex-direction: column;
655
+ }
656
+
657
+ .tm-hud-right {
658
+ align-items: flex-end;
659
+ }
660
+
661
+ .tm-hud-label {
662
+ font-size: 0.625rem;
663
+ text-transform: uppercase;
664
+ letter-spacing: 0.2em;
665
+ color: #64748b;
666
+ font-weight: 900;
667
+ }
668
+
669
+ .tm-hud-value {
670
+ font-size: 2.25rem;
671
+ font-weight: 900;
672
+ color: white;
673
+ }
674
+
675
+ .tm-hud-timer {
676
+ color: var(--tm-success);
677
+ }
678
+
679
+ .tm-hud-progress {
680
+ width: 3rem;
681
+ height: 0.25rem;
682
+ background: rgba(255, 255, 255, 0.1);
683
+ border-radius: 9999px;
684
+ overflow: hidden;
685
+ }
686
+
687
+ .tm-progress-bar {
688
+ height: 100%;
689
+ background: var(--tm-success);
690
+ width: 100%;
691
+ transition: width 100ms linear;
692
+ }
693
+
694
+ .tm-target-container {
695
+ position: relative;
696
+ width: 18rem;
697
+ height: 18rem;
698
+ display: flex;
699
+ align-items: center;
700
+ justify-content: center;
701
+ }
702
+
703
+ .tm-target-ring {
704
+ position: absolute;
705
+ inset: 0;
706
+ border-radius: 9999px;
707
+ border: 1px solid rgba(255, 255, 255, 0.05);
708
+ animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
709
+ }
710
+
711
+ .tm-target-ring-inner {
712
+ position: absolute;
713
+ inset: 1rem;
714
+ border-radius: 9999px;
715
+ border: 1px solid rgba(255, 255, 255, 0.1);
716
+ }
717
+
718
+ .tm-target-btn {
719
+ width: 10rem;
720
+ height: 10rem;
721
+ border-radius: 1.5rem;
722
+ border: 2px solid rgba(255, 255, 255, 0.2);
723
+ display: flex;
724
+ flex-direction: column;
725
+ align-items: center;
726
+ justify-content: center;
727
+ font-size: 3.75rem;
728
+ font-weight: 900;
729
+ transition: all 150ms;
730
+ }
731
+
732
+ .tm-target-hidden {
733
+ transform: scale(0);
734
+ }
735
+
736
+ .tm-target-sub {
737
+ font-size: 0.625rem;
738
+ text-transform: uppercase;
739
+ letter-spacing: 0.1em;
740
+ opacity: 0.4;
741
+ }
742
+
743
+ .tm-flash {
744
+ position: absolute;
745
+ inset: 0;
746
+ border-radius: 9999px;
747
+ opacity: 0;
748
+ pointer-events: none;
749
+ transition: opacity 150ms;
750
+ }
751
+
752
+ .tm-flash-hit {
753
+ background: rgba(16, 185, 129, 0.3);
754
+ filter: blur(3rem);
755
+ }
756
+ .tm-flash-miss {
757
+ background: rgba(244, 63, 94, 0.3);
758
+ filter: blur(3rem);
759
+ }
760
+
761
+ .tm-game-instruction {
762
+ margin-top: 3rem;
763
+ display: flex;
764
+ align-items: center;
765
+ gap: 0.75rem;
766
+ padding: 0.75rem 1.5rem;
767
+ background: rgba(255, 255, 255, 0.05);
768
+ border-radius: 9999px;
769
+ border: 1px solid rgba(255, 255, 255, 0.1);
770
+ }
771
+
772
+ .tm-instruction-dot {
773
+ width: 0.75rem;
774
+ height: 0.75rem;
775
+ border-radius: 9999px;
776
+ background: var(--tm-success);
777
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
778
+ }
779
+
780
+ .tm-game-results {
781
+ position: relative;
782
+ z-index: 10;
783
+ text-align: center;
784
+ }
785
+
786
+ .tm-trophy-wrapper {
787
+ position: relative;
788
+ display: inline-block;
789
+ margin-bottom: 1.5rem;
790
+ }
791
+
792
+ .tm-trophy {
793
+ width: 6rem;
794
+ height: 6rem;
795
+ color: #facc15;
796
+ filter: drop-shadow(0 0 30px rgba(250, 204, 21, 0.4));
797
+ }
798
+
799
+ .tm-new-record {
800
+ position: absolute;
801
+ top: -0.5rem;
802
+ right: -0.5rem;
803
+ background: var(--tm-success);
804
+ color: white;
805
+ font-size: 0.625rem;
806
+ font-weight: 900;
807
+ padding: 0.25rem 0.5rem;
808
+ border-radius: 0.5rem;
809
+ }
810
+
811
+ .tm-results-title {
812
+ font-size: 1.5rem;
813
+ font-weight: 700;
814
+ color: #94a3b8;
815
+ margin: 0 0 0.5rem;
816
+ }
817
+
818
+ .tm-final-score {
819
+ font-size: 6rem;
820
+ font-weight: 900;
821
+ color: white;
822
+ letter-spacing: -0.05em;
823
+ margin-bottom: 1.5rem;
824
+ line-height: 1;
825
+ }
826
+
827
+ .tm-game-result-feedback {
828
+ color: #cbd5e1;
829
+ margin: 0 0 2.5rem;
830
+ font-size: 1.125rem;
831
+ }
832
+
833
+ .tm-results-btns {
834
+ display: flex;
835
+ flex-direction: column;
836
+ gap: 1rem;
837
+ justify-content: center;
838
+ }
839
+
840
+ @media (min-width: 640px) {
841
+ .tm-results-btns { flex-direction: row; }
842
+ }
843
+
844
+ .tm-restart-btn {
845
+ padding: 1rem 2rem;
846
+ background: white;
847
+ color: black;
848
+ border: none;
849
+ border-radius: 1rem;
850
+ font-weight: 900;
851
+ font-size: 1.125rem;
852
+ cursor: pointer;
853
+ transition: all 200ms;
854
+ }
855
+
856
+ .tm-restart-btn:hover { transform: scale(1.05); }
857
+ .tm-restart-btn:active { transform: scale(0.95); }
858
+
859
+ .tm-share-btn {
860
+ padding: 1rem 2rem;
861
+ background: rgba(255, 255, 255, 0.1);
862
+ color: white;
863
+ border: 1px solid rgba(255, 255, 255, 0.1);
864
+ border-radius: 1rem;
865
+ font-weight: 900;
866
+ font-size: 1.125rem;
867
+ cursor: pointer;
868
+ transition: all 200ms;
869
+ }
870
+
871
+ .tm-share-btn:hover { background: rgba(255, 255, 255, 0.2); }
872
+
873
+ @keyframes ping {
874
+ 75%, 100% {
875
+ transform: scale(2);
876
+ opacity: 0;
877
+ }
878
+ }
879
+
880
+ @keyframes pulse {
881
+ 50% { opacity: 0.5; }
882
+ }