@elizaos/app-core 2.0.0-alpha.47 → 2.0.0-alpha.49

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,2087 +0,0 @@
1
- @import "tailwindcss";
2
- @import "./base.css";
3
- @import "./anime.css";
4
- @import "./onboarding-game.css";
5
-
6
- @source "..";
7
- @source "../../../apps/app/src";
8
-
9
- /*
10
- * Map the existing theme CSS custom properties to Tailwind theme tokens.
11
- * Using @theme inline so Tailwind inlines var() references rather than
12
- * generating duplicate CSS variables. This lets the [data-theme="..."]
13
- * selectors in base.css drive all visual changes at runtime.
14
- */
15
- @theme inline {
16
- /* Colors — surfaces */
17
- --color-bg: var(--bg);
18
- --color-bg-accent: var(--bg-accent);
19
- --color-bg-elevated: var(--bg-elevated);
20
- --color-bg-hover: var(--bg-hover);
21
- --color-bg-muted: var(--bg-muted);
22
- --color-card: var(--card);
23
- --color-card-fg: var(--card-foreground);
24
- --color-surface: var(--surface);
25
-
26
- /* Colors — text */
27
- --color-txt: var(--text);
28
- --color-txt-strong: var(--text-strong);
29
- --color-txt-chat: var(--chat-text);
30
- --color-muted: var(--muted);
31
- --color-muted-strong: var(--muted-strong);
32
-
33
- /* Colors — border */
34
- --color-border: var(--border);
35
- --color-border-strong: var(--border-strong);
36
- --color-border-hover: var(--border-hover);
37
- --color-input: var(--input);
38
- --color-ring: var(--ring);
39
-
40
- /* Colors — accent */
41
- --color-accent: var(--accent);
42
- --color-accent-hover: var(--accent-hover);
43
- --color-accent-muted: var(--accent-muted);
44
- --color-accent-subtle: var(--accent-subtle);
45
- --color-accent-fg: var(--accent-foreground);
46
- --color-primary: var(--primary);
47
- --color-primary-fg: var(--primary-foreground);
48
-
49
- /* Colors — status */
50
- --color-ok: var(--ok);
51
- --color-ok-muted: var(--ok-muted);
52
- --color-ok-subtle: var(--ok-subtle);
53
- --color-warn: var(--warn);
54
- --color-warn-muted: var(--warn-muted);
55
- --color-warn-subtle: var(--warn-subtle);
56
- --color-danger: var(--danger);
57
- --color-destructive: var(--destructive);
58
- --color-destructive-fg: var(--destructive-foreground);
59
- --color-destructive-subtle: var(--destructive-subtle);
60
- --color-muted-strong: var(--muted-strong);
61
-
62
- /* Colors — header */
63
- --color-header-bg: var(--header-bar-bg);
64
- --color-header-fg: var(--header-bar-fg);
65
-
66
- /* Colors — chain icons */
67
- --color-chain-eth: #627eea;
68
- --color-chain-base: #0052ff;
69
- --color-chain-arb: #28a0f0;
70
- --color-chain-op: #ff0420;
71
- --color-chain-pol: #8247e5;
72
- --color-chain-sol: #9945ff;
73
- --color-chain-bsc: #f0b90b;
74
-
75
- /* Fonts */
76
- --font-body: var(--font-body);
77
- --font-mono: var(--mono);
78
- --font-display: var(--font-display);
79
- --font-chat: var(--font-chat);
80
-
81
- /* Shadows */
82
- --shadow-sm: var(--shadow-sm);
83
- --shadow-md: var(--shadow-md);
84
- --shadow-lg: var(--shadow-lg);
85
-
86
- /* Radius */
87
- --radius-sm: var(--radius-sm);
88
- --radius-md: var(--radius-md);
89
- --radius-lg: var(--radius-lg);
90
- --radius-xl: var(--radius-xl);
91
- }
92
-
93
- /* ── Global resets ──────────────────────────────────────────────────── */
94
-
95
- #root {
96
- display: flex;
97
- flex-direction: column;
98
- height: 100vh;
99
- height: 100dvh;
100
- overflow: hidden;
101
- font-family: var(--font-body);
102
- color: var(--text);
103
- background: var(--bg);
104
- }
105
-
106
- /* ── Typing indicator animation ─────────────────────────────────────── */
107
-
108
- @keyframes typing-bounce {
109
- 0%,
110
- 60%,
111
- 100% {
112
- opacity: 0.3;
113
- transform: translateY(0);
114
- }
115
-
116
- 30% {
117
- opacity: 1;
118
- transform: translateY(-4px);
119
- }
120
- }
121
-
122
- @keyframes spin {
123
- to {
124
- transform: rotate(360deg);
125
- }
126
- }
127
-
128
- @keyframes pc-slide-in {
129
- from {
130
- opacity: 0;
131
- transform: translateY(-4px);
132
- }
133
-
134
- to {
135
- opacity: 1;
136
- transform: translateY(0);
137
- }
138
- }
139
-
140
- /* ── Onboarding speech bubble arrow ─────────────────────────────────── */
141
-
142
- .onboarding-speech::after {
143
- content: "";
144
- position: absolute;
145
- top: -8px;
146
- left: 50%;
147
- transform: translateX(-50%) rotate(45deg);
148
- width: 14px;
149
- height: 14px;
150
- background: var(--card);
151
- border-left: 1px solid var(--border);
152
- border-top: 1px solid var(--border);
153
- }
154
-
155
- /* ── Wallet tooltip hover bridge ────────────────────────────────────── */
156
-
157
- .wallet-wrapper::after {
158
- content: "";
159
- display: none;
160
- position: absolute;
161
- top: 100%;
162
- left: 0;
163
- right: 0;
164
- height: 8px;
165
- }
166
-
167
- .wallet-wrapper:hover::after {
168
- display: block;
169
- }
170
-
171
- .wallet-wrapper:hover .wallet-tooltip {
172
- display: block;
173
- }
174
-
175
- .wallet-wrapper:focus-within::after {
176
- display: block;
177
- }
178
-
179
- .wallet-wrapper:focus-within .wallet-tooltip {
180
- display: block;
181
- }
182
-
183
- /* ── Button base classes ───────────────────────────────────────────── */
184
-
185
- .btn {
186
- display: inline-flex;
187
- align-items: center;
188
- justify-content: center;
189
- padding: 6px 16px;
190
- border: 1px solid var(--accent);
191
- background: var(--accent);
192
- color: var(--accent-foreground);
193
- cursor: pointer;
194
- font-size: 13px;
195
- font-family: inherit;
196
- text-decoration: none;
197
- white-space: nowrap;
198
- border-radius: var(--radius-lg);
199
- transition: opacity var(--duration-fast, 100ms);
200
- }
201
-
202
- .btn:hover {
203
- opacity: 0.85;
204
- }
205
-
206
- .btn:disabled {
207
- opacity: 0.5;
208
- cursor: not-allowed;
209
- }
210
-
211
- /* ── Settings page controls ─────────────────────────────────────────── */
212
-
213
- .settings-scroll-region {
214
- scrollbar-gutter: stable;
215
- scroll-padding-top: 7rem;
216
- }
217
-
218
- .settings-page-content
219
- :is(button.inline-flex, a.inline-flex, .btn):not(
220
- .settings-compact-button
221
- ):not(.settings-icon-button) {
222
- min-height: 2.625rem;
223
- padding-inline: 1rem;
224
- border-radius: calc(var(--radius-lg) + 2px);
225
- }
226
-
227
- .settings-button {
228
- min-height: 2.625rem;
229
- padding-inline: 1rem;
230
- border-radius: calc(var(--radius-lg) + 2px);
231
- }
232
-
233
- .settings-card-button {
234
- min-height: 5.5rem;
235
- padding: 1.25rem;
236
- border-radius: calc(var(--radius-xl) + 2px);
237
- }
238
-
239
- .settings-compact-button {
240
- min-height: auto;
241
- padding-inline: 0;
242
- }
243
-
244
- .settings-icon-button {
245
- padding-inline: 0;
246
- }
247
-
248
- /* ── Loading screen ───────────────────────────────────────────────── */
249
-
250
- /* ── NieR: Automata–style loading screen ─────────────────────────── */
251
-
252
- .loading-screen {
253
- display: flex;
254
- align-items: center;
255
- justify-content: center;
256
- height: 100vh;
257
- height: 100dvh;
258
- background: #0c0e14;
259
- position: relative;
260
- overflow: hidden;
261
- }
262
-
263
- /* Centered content wrapper */
264
- .loading-screen__center {
265
- display: flex;
266
- flex-direction: column;
267
- align-items: flex-start;
268
- gap: 14px;
269
- width: 420px;
270
- max-width: 90vw;
271
- }
272
-
273
- /* LOADING title */
274
- .loading-screen__title {
275
- font-family: var(--mono, monospace);
276
- font-size: 13px;
277
- font-weight: 400;
278
- letter-spacing: 0.35em;
279
- text-transform: uppercase;
280
- color: rgba(255, 255, 255, 0.7);
281
- user-select: none;
282
- }
283
-
284
- .loading-screen__dots::after {
285
- content: "";
286
- animation: loading-dots 1.5s steps(4) infinite;
287
- }
288
-
289
- @keyframes loading-dots {
290
- 0% {
291
- content: "";
292
- }
293
- 25% {
294
- content: ".";
295
- }
296
- 50% {
297
- content: "..";
298
- }
299
- 75% {
300
- content: "...";
301
- }
302
- }
303
-
304
- /* Progress bar row: bar + percentage */
305
- .loading-screen__bar-row {
306
- display: flex;
307
- align-items: center;
308
- gap: 16px;
309
- width: 100%;
310
- }
311
-
312
- .loading-screen__progress-track {
313
- flex: 1;
314
- height: 4px;
315
- background: rgba(255, 255, 255, 0.1);
316
- overflow: hidden;
317
- position: relative;
318
- }
319
-
320
- .loading-screen__progress-fill {
321
- height: 100%;
322
- background: rgba(255, 255, 255, 0.85);
323
- transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
324
- position: relative;
325
- box-shadow: 0 0 8px rgba(255, 255, 255, 0.3);
326
- }
327
-
328
- /* Percentage label */
329
- .loading-screen__percent {
330
- font-family: var(--mono, monospace);
331
- font-size: 13px;
332
- font-weight: 400;
333
- letter-spacing: 0.15em;
334
- color: rgba(255, 255, 255, 0.6);
335
- min-width: 48px;
336
- text-align: right;
337
- user-select: none;
338
- }
339
-
340
- /* Phase sub-label */
341
- .loading-screen__phase {
342
- font-family: var(--mono, monospace);
343
- font-size: 11px;
344
- font-weight: 400;
345
- letter-spacing: 0.12em;
346
- text-transform: uppercase;
347
- color: rgba(255, 255, 255, 0.35);
348
- user-select: none;
349
- }
350
-
351
- /* Avatar loader indeterminate bar */
352
- @keyframes avatar-loader-progress {
353
- 0% {
354
- width: 20%;
355
- opacity: 0.6;
356
- }
357
- 50% {
358
- width: 70%;
359
- opacity: 1;
360
- }
361
- 100% {
362
- width: 20%;
363
- opacity: 0.6;
364
- }
365
- }
366
-
367
- /* ── Animation utilities ────────────────────────────────────────────── */
368
-
369
- .animate-in {
370
- animation: fade-in 200ms ease-out;
371
- }
372
-
373
- @keyframes fade-in {
374
- from {
375
- opacity: 0;
376
- }
377
-
378
- to {
379
- opacity: 1;
380
- }
381
- }
382
-
383
- .slide-in-from-right {
384
- animation: slide-in-right 200ms ease-out;
385
- }
386
-
387
- @keyframes slide-in-right {
388
- from {
389
- transform: translateX(100%);
390
- opacity: 0;
391
- }
392
-
393
- to {
394
- transform: translateX(0);
395
- opacity: 1;
396
- }
397
- }
398
-
399
- /* ── Enhanced transitions ──────────────────────────────────────────── */
400
-
401
- .transition-all {
402
- transition-property: all;
403
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
404
- }
405
-
406
- .hover\:shadow-sm:hover {
407
- box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
408
- }
409
-
410
- .hover\:scale-105:hover {
411
- transform: scale(1.05);
412
- }
413
-
414
- .active\:scale-95:active {
415
- transform: scale(0.95);
416
- }
417
-
418
- .hover\:translate-x-1:hover {
419
- transform: translateX(4px);
420
- }
421
-
422
- /* Utility: hide scrollbar */
423
- .scrollbar-hide {
424
- -ms-overflow-style: none;
425
- scrollbar-width: none;
426
- }
427
-
428
- .scrollbar-hide::-webkit-scrollbar {
429
- display: none;
430
- }
431
-
432
- .chat-native-scrollbar {
433
- scrollbar-width: thin;
434
- scrollbar-color: rgba(240, 178, 50, 0.55) transparent;
435
- }
436
-
437
- .chat-native-scrollbar::-webkit-scrollbar {
438
- width: 10px;
439
- }
440
-
441
- .chat-native-scrollbar::-webkit-scrollbar-track {
442
- background: transparent;
443
- }
444
-
445
- .chat-native-scrollbar::-webkit-scrollbar-thumb {
446
- background: linear-gradient(
447
- 180deg,
448
- rgba(255, 225, 150, 0.9) 0%,
449
- rgba(240, 178, 50, 0.72) 55%,
450
- rgba(201, 128, 24, 0.78) 100%
451
- );
452
- border-radius: 9999px;
453
- border: 2px solid transparent;
454
- background-clip: padding-box;
455
- }
456
-
457
- .chat-native-scrollbar::-webkit-scrollbar-thumb:hover {
458
- background: linear-gradient(
459
- 180deg,
460
- rgba(255, 232, 170, 0.95) 0%,
461
- rgba(240, 178, 50, 0.82) 55%,
462
- rgba(201, 128, 24, 0.88) 100%
463
- );
464
- }
465
-
466
- /* Focus trap for modals */
467
- .focus-trap {
468
- outline: none;
469
- }
470
-
471
- .focus-trap:focus {
472
- outline: 2px solid var(--accent);
473
- outline-offset: 2px;
474
- }
475
-
476
- /* Touch-friendly utilities - min 44px for accessibility */
477
- .touch-min-h {
478
- min-height: 44px;
479
- }
480
-
481
- .touch-min-w {
482
- min-width: 44px;
483
- }
484
-
485
- /* Keyboard shortcuts styling */
486
- kbd {
487
- font-family: var(--mono);
488
- }
489
-
490
- /* Enhanced animations and transitions */
491
- @keyframes slide-up {
492
- from {
493
- opacity: 0;
494
- transform: translateY(10px);
495
- }
496
-
497
- to {
498
- opacity: 1;
499
- transform: translateY(0);
500
- }
501
- }
502
-
503
- @keyframes slide-down {
504
- from {
505
- opacity: 0;
506
- transform: translateY(-10px);
507
- }
508
-
509
- to {
510
- opacity: 1;
511
- transform: translateY(0);
512
- }
513
- }
514
-
515
- @keyframes scale-in {
516
- from {
517
- opacity: 0;
518
- transform: scale(0.95);
519
- }
520
-
521
- to {
522
- opacity: 1;
523
- transform: scale(1);
524
- }
525
- }
526
-
527
- @keyframes shake {
528
- 0%,
529
- 100% {
530
- transform: translateX(0);
531
- }
532
-
533
- 10%,
534
- 30%,
535
- 50%,
536
- 70%,
537
- 90% {
538
- transform: translateX(-2px);
539
- }
540
-
541
- 20%,
542
- 40%,
543
- 60%,
544
- 80% {
545
- transform: translateX(2px);
546
- }
547
- }
548
-
549
- @keyframes glow {
550
- 0%,
551
- 100% {
552
- box-shadow:
553
- 0 0 5px var(--accent),
554
- 0 0 10px var(--accent);
555
- }
556
-
557
- 50% {
558
- box-shadow:
559
- 0 0 20px var(--accent),
560
- 0 0 30px var(--accent);
561
- }
562
- }
563
-
564
- .animate-slide-up {
565
- animation: slide-up 0.3s ease-out;
566
- }
567
-
568
- .animate-slide-down {
569
- animation: slide-down 0.3s ease-out;
570
- }
571
-
572
- .animate-scale-in {
573
- animation: scale-in 0.2s ease-out;
574
- }
575
-
576
- .animate-shake {
577
- animation: shake 0.5s ease-in-out;
578
- }
579
-
580
- .animate-glow {
581
- animation: glow 2s ease-in-out infinite;
582
- }
583
-
584
- /* Smooth transitions */
585
- .transition-smooth {
586
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
587
- }
588
-
589
- .transition-bounce {
590
- transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
591
- }
592
-
593
- /* Focus ring improvements */
594
- .focus-ring:focus {
595
- outline: none;
596
- box-shadow: 0 0 0 3px var(--accent);
597
- }
598
-
599
- .focus-ring:focus-visible {
600
- outline: none;
601
- box-shadow: 0 0 0 3px var(--accent);
602
- }
603
-
604
- /* Hover lift effect */
605
- .hover-lift {
606
- transition:
607
- transform 0.2s ease,
608
- box-shadow 0.2s ease;
609
- }
610
-
611
- .hover-lift:hover {
612
- transform: translateY(-2px);
613
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
614
- }
615
-
616
- /* Press effect */
617
- .press:active {
618
- transform: scale(0.98);
619
- }
620
-
621
- /* Dark mode contrast improvements */
622
- [data-theme="dark"] .text-muted {
623
- color: hsl(240 5% 64.9%);
624
- }
625
-
626
- [data-theme="dark"] .text-muted-strong {
627
- color: hsl(240 4% 74%);
628
- }
629
-
630
- [data-theme="dark"] .bg-bg-accent {
631
- background-color: hsl(240 5.9% 14%);
632
- }
633
-
634
- [data-theme="dark"] .bg-bg-elevated {
635
- background-color: hsl(240 4.8% 10%);
636
- }
637
-
638
- /* Focus visible improvements for dark mode */
639
- [data-theme="dark"] :focus-visible {
640
- outline: 2px solid hsl(217 91% 60%);
641
- outline-offset: 2px;
642
- }
643
-
644
- /* Advanced subtab buttons stay clickable without Chrome tap/focus flash or text selection */
645
- .advanced-subtab-btn,
646
- .advanced-subtab-btn * {
647
- -moz-user-select: none;
648
- -ms-user-select: none;
649
- -webkit-tap-highlight-color: transparent;
650
- -webkit-user-select: none;
651
- user-select: none;
652
- }
653
-
654
- .advanced-subtab-btn {
655
- -webkit-touch-callout: none;
656
- }
657
-
658
- .advanced-subtab-btn:focus,
659
- .advanced-subtab-btn:focus-visible,
660
- [data-theme="dark"] .advanced-subtab-btn:focus-visible {
661
- outline: none;
662
- outline-offset: 0;
663
- }
664
-
665
- /* Reduced motion - !important is intentional for accessibility override */
666
- @media (prefers-reduced-motion: reduce) {
667
- *,
668
- *::before,
669
- *::after {
670
- /* biome-ignore lint/complexity/noImportantStyles: Accessibility requires forcing reduced motion */
671
- animation-duration: 0.01ms !important;
672
- /* biome-ignore lint/complexity/noImportantStyles: Accessibility requires forcing reduced motion */
673
- animation-iteration-count: 1 !important;
674
- /* biome-ignore lint/complexity/noImportantStyles: Accessibility requires forcing reduced motion */
675
- transition-duration: 0.01ms !important;
676
- /* biome-ignore lint/complexity/noImportantStyles: Accessibility requires forcing reduced motion */
677
- scroll-behavior: auto !important;
678
- }
679
- }
680
-
681
- /* ── Wallets BSC-first view ───────────────────────────────────────── */
682
-
683
- .wallets-bsc {
684
- --wb-card-highlight: linear-gradient(
685
- 135deg,
686
- rgba(240, 185, 11, 0.12),
687
- rgba(240, 185, 11, 0.02)
688
- );
689
- }
690
-
691
- .wallets-bsc__setup code {
692
- display: inline-block;
693
- padding: 0 4px;
694
- border: 1px solid var(--border);
695
- border-radius: var(--radius-md);
696
- background: var(--bg-muted);
697
- }
698
-
699
- .wallets-bsc__main-card {
700
- background: var(--wb-card-highlight), var(--card);
701
- }
702
-
703
- .wallets-bsc__status-grid {
704
- display: grid;
705
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
706
- gap: 8px;
707
- }
708
-
709
- .wallets-bsc__status-badge {
710
- border: 1px solid var(--border);
711
- border-radius: var(--radius-lg);
712
- padding: 10px;
713
- background: var(--bg);
714
- }
715
-
716
- .wallets-bsc__status-badge.is-ready {
717
- border-color: color-mix(in srgb, var(--ok) 45%, var(--border) 55%);
718
- background: color-mix(in srgb, var(--ok) 10%, var(--bg) 90%);
719
- }
720
-
721
- .wallets-bsc__status-badge.is-not-ready {
722
- border-color: color-mix(in srgb, var(--warn) 40%, var(--border) 60%);
723
- background: color-mix(in srgb, var(--warn) 10%, var(--bg) 90%);
724
- }
725
-
726
- .wallets-bsc__status-title {
727
- font-size: 11px;
728
- font-weight: 700;
729
- text-transform: uppercase;
730
- letter-spacing: 0.04em;
731
- color: var(--text-strong);
732
- }
733
-
734
- .wallets-bsc__status-value {
735
- margin-top: 3px;
736
- font-size: 16px;
737
- font-weight: 700;
738
- }
739
-
740
- .wallets-bsc__status-detail {
741
- margin-top: 2px;
742
- font-size: 11px;
743
- color: var(--muted);
744
- line-height: 1.3;
745
- }
746
-
747
- .wallets-bsc__stats-row {
748
- display: grid;
749
- grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
750
- gap: 8px;
751
- }
752
-
753
- .wallets-bsc__stat-card {
754
- border: 1px solid var(--border);
755
- border-radius: var(--radius-lg);
756
- background: var(--bg);
757
- padding: 10px;
758
- }
759
-
760
- .wallets-bsc__stat-label {
761
- font-size: 10px;
762
- font-weight: 700;
763
- text-transform: uppercase;
764
- letter-spacing: 0.05em;
765
- color: var(--muted);
766
- }
767
-
768
- .wallets-bsc__stat-value {
769
- margin-top: 4px;
770
- font-size: 20px;
771
- line-height: 1.1;
772
- font-weight: 700;
773
- font-family: var(--mono);
774
- }
775
-
776
- .wallets-bsc__collapse {
777
- border-radius: var(--radius-xl);
778
- overflow: hidden;
779
- }
780
-
781
- .wallets-bsc__quick-trade {
782
- border: 1px solid var(--border);
783
- border-radius: var(--radius-lg);
784
- background: var(--bg);
785
- padding: 12px;
786
- }
787
-
788
- .wallets-bsc__quick-head {
789
- display: flex;
790
- align-items: baseline;
791
- justify-content: space-between;
792
- gap: 8px;
793
- flex-wrap: wrap;
794
- }
795
-
796
- .wallets-bsc__quick-title {
797
- font-size: 13px;
798
- font-weight: 700;
799
- letter-spacing: 0.03em;
800
- text-transform: uppercase;
801
- }
802
-
803
- .wallets-bsc__quick-note {
804
- font-size: 11px;
805
- color: var(--muted);
806
- }
807
-
808
- .wallets-bsc__quick-row {
809
- margin-top: 10px;
810
- display: grid;
811
- gap: 8px;
812
- }
813
-
814
- .wallets-bsc__quick-input {
815
- width: 100%;
816
- border: 1px solid var(--border);
817
- border-radius: var(--radius-md);
818
- background: var(--bg);
819
- color: var(--text);
820
- padding: 9px 10px;
821
- font-size: 13px;
822
- }
823
-
824
- .wallets-bsc__quick-input:focus {
825
- outline: none;
826
- border-color: var(--text);
827
- }
828
-
829
- .wallets-bsc__quick-presets {
830
- display: flex;
831
- flex-wrap: wrap;
832
- gap: 6px;
833
- }
834
-
835
- .wallets-bsc__preset-btn {
836
- border: 1px solid var(--border);
837
- border-radius: 999px;
838
- background: var(--bg);
839
- color: var(--text);
840
- padding: 4px 10px;
841
- font-size: 11px;
842
- font-family: var(--mono);
843
- cursor: pointer;
844
- }
845
-
846
- .wallets-bsc__preset-btn.is-active {
847
- border-color: color-mix(in srgb, #f0b90b 70%, var(--border) 30%);
848
- background: color-mix(in srgb, #f0b90b 16%, var(--bg) 84%);
849
- }
850
-
851
- .wallets-bsc__quick-actions {
852
- display: inline-flex;
853
- gap: 8px;
854
- }
855
-
856
- .wallets-bsc__quick-btn {
857
- border: 1px solid var(--border);
858
- border-radius: var(--radius-md);
859
- background: var(--bg);
860
- color: var(--text);
861
- padding: 7px 14px;
862
- font-size: 12px;
863
- font-weight: 700;
864
- letter-spacing: 0.03em;
865
- cursor: pointer;
866
- }
867
-
868
- .wallets-bsc__quick-btn.is-buy {
869
- border-color: color-mix(in srgb, var(--ok) 55%, var(--border) 45%);
870
- background: color-mix(in srgb, var(--ok) 12%, var(--bg) 88%);
871
- }
872
-
873
- .wallets-bsc__quick-btn.is-sell {
874
- border-color: color-mix(in srgb, var(--warn) 55%, var(--border) 45%);
875
- background: color-mix(in srgb, var(--warn) 12%, var(--bg) 88%);
876
- }
877
-
878
- /* ── Wallet Terminal redesign (wt__) ──────────────────────────────── */
879
-
880
- .wt__portfolio {
881
- border: 1px solid var(--border);
882
- background:
883
- linear-gradient(135deg, rgba(240, 185, 11, 0.1), rgba(240, 185, 11, 0.02)),
884
- var(--card);
885
- padding: 14px 16px 12px;
886
- }
887
-
888
- .wt__portfolio-label {
889
- font-size: 10px;
890
- font-weight: 700;
891
- text-transform: uppercase;
892
- letter-spacing: 0.08em;
893
- color: var(--muted);
894
- margin-bottom: 4px;
895
- }
896
-
897
- .wt__portfolio-value {
898
- font-size: 30px;
899
- line-height: 1;
900
- font-weight: 700;
901
- font-family: var(--mono);
902
- }
903
-
904
- .wt__status-row {
905
- display: flex;
906
- align-items: center;
907
- gap: 14px;
908
- flex-wrap: wrap;
909
- }
910
-
911
- .wt__status-dot {
912
- display: inline-flex;
913
- align-items: center;
914
- gap: 5px;
915
- font-size: 11px;
916
- color: var(--muted);
917
- cursor: default;
918
- }
919
-
920
- .wt__status-dot.is-ready {
921
- color: var(--text);
922
- }
923
-
924
- .wt__status-indicator {
925
- width: 7px;
926
- height: 7px;
927
- border-radius: 50%;
928
- background: color-mix(in srgb, var(--warn) 80%, var(--border) 20%);
929
- flex-shrink: 0;
930
- }
931
-
932
- .wt__status-dot.is-ready .wt__status-indicator {
933
- background: var(--ok);
934
- }
935
-
936
- .wt__quick {
937
- border: 1px solid var(--border);
938
- background: var(--card);
939
- padding: 10px 12px;
940
- }
941
-
942
- .wt__quick-row {
943
- display: flex;
944
- align-items: center;
945
- gap: 8px;
946
- flex-wrap: wrap;
947
- }
948
-
949
- .wt__quick-input {
950
- flex: 1;
951
- min-width: 180px;
952
- border: 1px solid var(--border);
953
- background: var(--bg);
954
- color: var(--text);
955
- padding: 6px 10px;
956
- font-size: 12px;
957
- font-family: var(--mono);
958
- outline: none;
959
- transition: border-color 0.15s;
960
- }
961
-
962
- .wt__quick-input:focus {
963
- border-color: var(--text);
964
- }
965
-
966
- .wt__presets {
967
- display: flex;
968
- align-items: center;
969
- gap: 4px;
970
- flex-wrap: wrap;
971
- }
972
-
973
- .wt__preset {
974
- border: 1px solid var(--border);
975
- border-radius: 999px;
976
- background: var(--bg);
977
- color: var(--text);
978
- padding: 3px 9px;
979
- font-size: 11px;
980
- font-family: var(--mono);
981
- cursor: pointer;
982
- transition: all 0.15s;
983
- }
984
-
985
- .wt__preset.is-active {
986
- border-color: var(--text);
987
- background: color-mix(in srgb, #f0b90b 14%, var(--bg) 86%);
988
- color: var(--text);
989
- }
990
-
991
- .wt__quick-actions {
992
- display: flex;
993
- gap: 6px;
994
- }
995
-
996
- .wt__btn {
997
- border: 1px solid var(--border);
998
- background: var(--bg);
999
- color: var(--text);
1000
- padding: 6px 16px;
1001
- font-size: 12px;
1002
- font-weight: 700;
1003
- letter-spacing: 0.06em;
1004
- font-family: var(--mono);
1005
- cursor: pointer;
1006
- transition: all 0.15s;
1007
- }
1008
-
1009
- .wt__btn.is-buy {
1010
- border-color: color-mix(in srgb, var(--ok) 60%, var(--border) 40%);
1011
- color: var(--ok);
1012
- }
1013
-
1014
- .wt__btn.is-buy:hover {
1015
- background: color-mix(in srgb, var(--ok) 14%, var(--bg) 86%);
1016
- }
1017
-
1018
- .wt__btn.is-track {
1019
- border-color: color-mix(in srgb, var(--accent) 60%, var(--border) 40%);
1020
- color: var(--text);
1021
- }
1022
-
1023
- .wt__btn.is-track:hover {
1024
- background: color-mix(in srgb, var(--accent) 12%, var(--bg) 88%);
1025
- }
1026
-
1027
- .wt__btn.is-sell {
1028
- border-color: color-mix(in srgb, var(--warn) 60%, var(--border) 40%);
1029
- color: var(--warn);
1030
- }
1031
-
1032
- .wt__btn.is-sell:hover {
1033
- background: color-mix(in srgb, var(--warn) 14%, var(--bg) 86%);
1034
- }
1035
-
1036
- .wt__btn:disabled {
1037
- opacity: 0.55;
1038
- cursor: not-allowed;
1039
- }
1040
-
1041
- .wt__toolbar {
1042
- display: flex;
1043
- align-items: center;
1044
- gap: 4px;
1045
- padding: 5px 0;
1046
- border-bottom: 1px solid var(--border);
1047
- flex-wrap: wrap;
1048
- }
1049
-
1050
- .wt__tab {
1051
- border: none;
1052
- background: transparent;
1053
- color: var(--muted);
1054
- padding: 3px 8px;
1055
- font-size: 12px;
1056
- font-weight: 700;
1057
- font-family: var(--mono);
1058
- letter-spacing: 0.02em;
1059
- cursor: pointer;
1060
- transition: color 0.15s;
1061
- }
1062
-
1063
- .wt__tab.is-active {
1064
- color: var(--text);
1065
- }
1066
-
1067
- .wt__sep {
1068
- display: inline-block;
1069
- width: 1px;
1070
- height: 14px;
1071
- background: var(--border);
1072
- margin: 0 4px;
1073
- align-self: center;
1074
- }
1075
-
1076
- .wt__chip {
1077
- border: 1px solid var(--border);
1078
- background: var(--bg);
1079
- color: var(--muted);
1080
- padding: 2px 7px;
1081
- font-size: 10px;
1082
- font-family: var(--mono);
1083
- cursor: pointer;
1084
- border-radius: 3px;
1085
- transition: all 0.15s;
1086
- }
1087
-
1088
- .wt__chip.is-active {
1089
- border-color: var(--text);
1090
- color: var(--text);
1091
- }
1092
-
1093
- .wt__refresh {
1094
- border: 1px solid var(--border);
1095
- background: var(--bg);
1096
- color: var(--muted);
1097
- padding: 2px 8px;
1098
- font-size: 13px;
1099
- cursor: pointer;
1100
- border-radius: 3px;
1101
- transition: all 0.15s;
1102
- font-family: var(--mono);
1103
- }
1104
-
1105
- .wt__refresh:hover {
1106
- border-color: var(--text);
1107
- color: var(--text);
1108
- }
1109
-
1110
- .wt__row-btn {
1111
- border: 1px solid var(--border);
1112
- background: transparent;
1113
- color: var(--muted);
1114
- padding: 2px 7px;
1115
- font-size: 10px;
1116
- font-weight: 700;
1117
- font-family: var(--mono);
1118
- cursor: pointer;
1119
- border-radius: 2px;
1120
- transition: all 0.15s;
1121
- }
1122
-
1123
- .wt__row-btn.is-preflight:hover {
1124
- border-color: var(--text);
1125
- color: var(--text);
1126
- }
1127
-
1128
- .wt__row-btn.is-quote:hover {
1129
- border-color: var(--ok);
1130
- color: var(--ok);
1131
- }
1132
-
1133
- .wt__row-btn.is-remove:hover {
1134
- border-color: var(--warn);
1135
- color: var(--warn);
1136
- }
1137
-
1138
- .wt__row-btn:disabled {
1139
- opacity: 0.5;
1140
- cursor: not-allowed;
1141
- }
1142
-
1143
- .wt__quote {
1144
- border: 1px solid var(--border);
1145
- background: var(--card);
1146
- padding: 10px 12px;
1147
- }
1148
-
1149
- .wt__quote-head {
1150
- display: flex;
1151
- align-items: center;
1152
- justify-content: space-between;
1153
- gap: 8px;
1154
- flex-wrap: wrap;
1155
- }
1156
-
1157
- .wt__quote-title {
1158
- font-size: 11px;
1159
- letter-spacing: 0.06em;
1160
- text-transform: uppercase;
1161
- color: var(--muted);
1162
- font-weight: 700;
1163
- }
1164
-
1165
- .wt__quote-route {
1166
- font-family: var(--mono);
1167
- font-size: 10px;
1168
- color: var(--muted);
1169
- }
1170
-
1171
- .wt__quote-grid {
1172
- margin-top: 8px;
1173
- display: grid;
1174
- gap: 8px;
1175
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
1176
- }
1177
-
1178
- .wt__quote-k {
1179
- font-size: 10px;
1180
- text-transform: uppercase;
1181
- color: var(--muted);
1182
- letter-spacing: 0.04em;
1183
- }
1184
-
1185
- .wt__quote-v {
1186
- margin-top: 2px;
1187
- font-family: var(--mono);
1188
- font-size: 13px;
1189
- color: var(--text);
1190
- }
1191
-
1192
- .wt__quote-actions {
1193
- margin-top: 10px;
1194
- display: flex;
1195
- align-items: center;
1196
- gap: 10px;
1197
- flex-wrap: wrap;
1198
- }
1199
-
1200
- .wt__quote-link {
1201
- font-size: 11px;
1202
- font-family: var(--mono);
1203
- color: var(--text);
1204
- text-decoration: none;
1205
- border-bottom: 1px dashed color-mix(in srgb, var(--accent) 70%, transparent);
1206
- }
1207
-
1208
- .wt__quote-link:hover {
1209
- color: var(--text);
1210
- border-bottom-color: color-mix(in srgb, var(--text) 70%, transparent);
1211
- }
1212
-
1213
- .wt__quote-usersign {
1214
- margin-top: 10px;
1215
- border: 1px dashed color-mix(in srgb, var(--border) 80%, transparent);
1216
- background: color-mix(in srgb, var(--bg) 92%, transparent);
1217
- padding: 8px;
1218
- }
1219
-
1220
- .wt__preflight {
1221
- margin-top: 10px;
1222
- border: 1px solid color-mix(in srgb, var(--border) 86%, transparent);
1223
- background: color-mix(in srgb, var(--bg) 92%, transparent);
1224
- padding: 8px;
1225
- }
1226
-
1227
- .wt__preflight-checks {
1228
- margin-top: 6px;
1229
- display: flex;
1230
- align-items: center;
1231
- gap: 6px;
1232
- flex-wrap: wrap;
1233
- }
1234
-
1235
- .wt__preflight-chip {
1236
- display: inline-flex;
1237
- align-items: center;
1238
- border: 1px solid var(--border);
1239
- border-radius: 999px;
1240
- padding: 1px 7px;
1241
- font-size: 10px;
1242
- font-family: var(--mono);
1243
- letter-spacing: 0.03em;
1244
- }
1245
-
1246
- .wt__preflight-chip.is-pass {
1247
- border-color: color-mix(in srgb, var(--ok) 60%, var(--border) 40%);
1248
- color: var(--ok);
1249
- }
1250
-
1251
- .wt__preflight-chip.is-fail {
1252
- border-color: color-mix(in srgb, var(--warn) 60%, var(--border) 40%);
1253
- color: var(--warn);
1254
- }
1255
-
1256
- .wt__preflight-reasons {
1257
- margin-top: 6px;
1258
- font-size: 11px;
1259
- color: var(--muted);
1260
- line-height: 1.45;
1261
- }
1262
-
1263
- .wt__tx-status-row {
1264
- margin-top: 8px;
1265
- display: flex;
1266
- align-items: center;
1267
- flex-wrap: wrap;
1268
- gap: 8px;
1269
- }
1270
-
1271
- .wt__tx-pill {
1272
- display: inline-flex;
1273
- align-items: center;
1274
- border: 1px solid var(--border);
1275
- border-radius: 999px;
1276
- padding: 2px 8px;
1277
- font-size: 10px;
1278
- font-family: var(--mono);
1279
- font-weight: 700;
1280
- letter-spacing: 0.04em;
1281
- text-transform: uppercase;
1282
- color: var(--muted);
1283
- }
1284
-
1285
- .wt__tx-pill.is-pending {
1286
- border-color: color-mix(in srgb, var(--warn) 50%, var(--border) 50%);
1287
- color: var(--warn);
1288
- }
1289
-
1290
- .wt__tx-pill.is-success {
1291
- border-color: color-mix(in srgb, var(--ok) 55%, var(--border) 45%);
1292
- color: var(--ok);
1293
- }
1294
-
1295
- .wt__tx-pill.is-reverted,
1296
- .wt__tx-pill.is-not_found {
1297
- border-color: color-mix(in srgb, var(--danger) 55%, var(--border) 45%);
1298
- color: var(--danger);
1299
- }
1300
-
1301
- .wt__tx-meta {
1302
- font-size: 10px;
1303
- color: var(--muted);
1304
- font-family: var(--mono);
1305
- }
1306
-
1307
- .wt__usersign-steps {
1308
- margin-top: 6px;
1309
- display: flex;
1310
- flex-wrap: wrap;
1311
- gap: 8px;
1312
- align-items: center;
1313
- }
1314
-
1315
- .wt__usersign-step {
1316
- font-size: 11px;
1317
- color: var(--muted);
1318
- font-family: var(--mono);
1319
- }
1320
-
1321
- /* ── Network badge ───────────────────────────────────────────────── */
1322
-
1323
- .wt__network-badge {
1324
- display: inline-flex;
1325
- align-items: center;
1326
- gap: 4px;
1327
- padding: 1px 6px;
1328
- font-size: 9px;
1329
- font-family: var(--mono);
1330
- font-weight: 700;
1331
- letter-spacing: 0.06em;
1332
- text-transform: uppercase;
1333
- border: 1px solid color-mix(in srgb, #f0b90b 50%, var(--border) 50%);
1334
- color: var(--text);
1335
- border-radius: 3px;
1336
- background: color-mix(in srgb, #f0b90b 8%, transparent 92%);
1337
- }
1338
-
1339
- .wt__network-badge::before {
1340
- content: "";
1341
- display: inline-block;
1342
- width: 5px;
1343
- height: 5px;
1344
- border-radius: 50%;
1345
- background: #f0b90b;
1346
- flex-shrink: 0;
1347
- }
1348
-
1349
- /* ── Receive button ──────────────────────────────────────────────── */
1350
-
1351
- .wt__receive-btn {
1352
- display: inline-flex;
1353
- align-items: center;
1354
- gap: 5px;
1355
- border: 1px solid var(--border);
1356
- background: var(--bg);
1357
- color: var(--muted);
1358
- padding: 4px 12px;
1359
- font-size: 11px;
1360
- font-family: var(--mono);
1361
- font-weight: 600;
1362
- cursor: pointer;
1363
- border-radius: 3px;
1364
- transition: all 0.15s;
1365
- letter-spacing: 0.03em;
1366
- }
1367
-
1368
- .wt__receive-btn:hover {
1369
- border-color: color-mix(in srgb, #f0b90b 60%, var(--border) 40%);
1370
- color: var(--text);
1371
- background: color-mix(in srgb, #f0b90b 6%, var(--bg) 94%);
1372
- }
1373
-
1374
- /* ── Token logo (image + letter fallback) ────────────────────────── */
1375
-
1376
- .wt__token-logo {
1377
- width: 32px;
1378
- height: 32px;
1379
- border-radius: 50%;
1380
- display: inline-flex;
1381
- align-items: center;
1382
- justify-content: center;
1383
- flex-shrink: 0;
1384
- object-fit: cover;
1385
- font-weight: 700;
1386
- font-family: var(--mono);
1387
- color: white;
1388
- }
1389
-
1390
- .wt__token-logo.is-letter {
1391
- /* background comes from chain class */
1392
- background: var(--bg-muted);
1393
- }
1394
-
1395
- /* ── Native token row special styling ────────────────────────────── */
1396
-
1397
- .wt__row--native {
1398
- background: color-mix(in srgb, #f0b90b 4%, transparent 96%);
1399
- }
1400
-
1401
- .wt__row--native.wt__row--native:hover {
1402
- background: color-mix(in srgb, #f0b90b 8%, var(--bg) 92%);
1403
- }
1404
-
1405
- /* ── Native badge label ──────────────────────────────────────────── */
1406
-
1407
- .wt__native-badge {
1408
- display: inline-flex;
1409
- align-items: center;
1410
- padding: 0px 5px;
1411
- font-size: 9px;
1412
- font-family: var(--mono);
1413
- font-weight: 600;
1414
- letter-spacing: 0.05em;
1415
- text-transform: uppercase;
1416
- border: 1px solid color-mix(in srgb, #f0b90b 40%, var(--border) 60%);
1417
- color: color-mix(in srgb, #f0b90b 80%, var(--muted) 20%);
1418
- border-radius: 3px;
1419
- }
1420
-
1421
- /* ── BNB sub-label in portfolio ──────────────────────────────────── */
1422
-
1423
- .wt__bnb-sub {
1424
- font-size: 11px;
1425
- font-family: var(--mono);
1426
- color: var(--muted);
1427
- margin-top: 3px;
1428
- }
1429
-
1430
- /* ── Inline BSC error ────────────────────────────────────────────── */
1431
-
1432
- .wt__error-inline {
1433
- display: flex;
1434
- align-items: center;
1435
- gap: 8px;
1436
- padding: 5px 8px;
1437
- background: color-mix(in srgb, var(--danger, #e74c3c) 8%, var(--bg) 92%);
1438
- border: 1px solid
1439
- color-mix(in srgb, var(--danger, #e74c3c) 30%, var(--border) 70%);
1440
- border-radius: 3px;
1441
- }
1442
-
1443
- .wt__error-inline-text {
1444
- flex: 1;
1445
- font-size: 11px;
1446
- font-family: var(--mono);
1447
- color: var(--danger, #e74c3c);
1448
- word-break: break-all;
1449
- }
1450
-
1451
- .wt__error-retry {
1452
- border: 1px solid
1453
- color-mix(in srgb, var(--danger, #e74c3c) 40%, var(--border) 60%);
1454
- background: transparent;
1455
- color: var(--danger, #e74c3c);
1456
- padding: 2px 8px;
1457
- font-size: 10px;
1458
- font-family: var(--mono);
1459
- cursor: pointer;
1460
- white-space: nowrap;
1461
- transition: all 0.15s;
1462
- }
1463
-
1464
- .wt__error-retry:hover {
1465
- background: color-mix(in srgb, var(--danger, #e74c3c) 12%, var(--bg) 88%);
1466
- }
1467
-
1468
- /* ── Contract input with validation border ───────────────────────── */
1469
-
1470
- .wt__quick-input.is-valid {
1471
- border-color: color-mix(in srgb, var(--ok) 70%, var(--border) 30%);
1472
- }
1473
-
1474
- .wt__quick-input.is-invalid {
1475
- border-color: color-mix(in srgb, var(--warn) 70%, var(--border) 30%);
1476
- }
1477
-
1478
- /* ── Input wrapper + recents dropdown ────────────────────────────── */
1479
-
1480
- .wt__input-wrap {
1481
- flex: 1;
1482
- min-width: 180px;
1483
- position: relative;
1484
- display: flex;
1485
- align-items: center;
1486
- }
1487
-
1488
- .wt__input-wrap .wt__quick-input {
1489
- flex: 1;
1490
- min-width: 0;
1491
- padding-right: 28px;
1492
- }
1493
-
1494
- .wt__recents-toggle {
1495
- position: absolute;
1496
- right: 6px;
1497
- top: 50%;
1498
- transform: translateY(-50%);
1499
- border: none;
1500
- background: transparent;
1501
- color: var(--muted);
1502
- font-size: 11px;
1503
- cursor: pointer;
1504
- padding: 2px 4px;
1505
- line-height: 1;
1506
- transition: color 0.15s;
1507
- }
1508
-
1509
- .wt__recents-toggle:hover {
1510
- color: var(--text);
1511
- }
1512
-
1513
- .wt__recents {
1514
- position: absolute;
1515
- top: calc(100% + 2px);
1516
- left: 0;
1517
- right: 0;
1518
- z-index: 40;
1519
- border: 1px solid var(--border);
1520
- background: var(--card);
1521
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
1522
- }
1523
-
1524
- .wt__recents-item {
1525
- display: block;
1526
- width: 100%;
1527
- padding: 6px 10px;
1528
- text-align: left;
1529
- border: none;
1530
- background: transparent;
1531
- cursor: pointer;
1532
- transition: background 0.1s;
1533
- }
1534
-
1535
- .wt__recents-item:hover {
1536
- background: var(--bg-hover, var(--bg));
1537
- }
1538
-
1539
- .wt__recents-addr {
1540
- font-size: 11px;
1541
- font-family: var(--mono);
1542
- color: var(--muted);
1543
- }
1544
-
1545
- .wt__recents-item:hover .wt__recents-addr {
1546
- color: var(--text);
1547
- }
1548
-
1549
- /* ── Slippage selector ───────────────────────────────────────────── */
1550
-
1551
- .wt__slip {
1552
- display: flex;
1553
- align-items: center;
1554
- gap: 5px;
1555
- margin-top: 7px;
1556
- flex-wrap: wrap;
1557
- }
1558
-
1559
- .wt__slip-label {
1560
- font-size: 10px;
1561
- color: var(--muted);
1562
- font-family: var(--mono);
1563
- }
1564
-
1565
- .wt__slip-btn {
1566
- border: 1px solid var(--border);
1567
- background: var(--bg);
1568
- color: var(--muted);
1569
- padding: 2px 7px;
1570
- font-size: 10px;
1571
- font-family: var(--mono);
1572
- cursor: pointer;
1573
- border-radius: 3px;
1574
- transition: all 0.15s;
1575
- }
1576
-
1577
- .wt__slip-btn.is-active {
1578
- border-color: var(--text);
1579
- color: var(--text);
1580
- }
1581
-
1582
- .wt__slip-btn:hover:not(.is-active) {
1583
- border-color: var(--muted);
1584
- color: var(--text);
1585
- }
1586
-
1587
- .wt__slip-input {
1588
- border: 1px solid var(--border);
1589
- background: var(--bg);
1590
- color: var(--text);
1591
- padding: 2px 6px;
1592
- font-size: 10px;
1593
- font-family: var(--mono);
1594
- width: 68px;
1595
- border-radius: 3px;
1596
- outline: none;
1597
- transition: border-color 0.15s;
1598
- }
1599
-
1600
- .wt__slip-input::placeholder {
1601
- color: var(--muted);
1602
- }
1603
-
1604
- .wt__slip-input:focus {
1605
- border-color: var(--text);
1606
- }
1607
-
1608
- .wt__slip-input.is-active {
1609
- border-color: var(--text);
1610
- color: var(--text);
1611
- }
1612
-
1613
- .companion-game__roster-list::before {
1614
- content: "";
1615
- position: absolute;
1616
- left: 6px;
1617
- top: 6px;
1618
- bottom: 6px;
1619
- width: 1px;
1620
- background: rgba(102, 111, 137, 0.42);
1621
- }
1622
-
1623
- .companion-game__roster-item {
1624
- position: relative;
1625
- width: 100%;
1626
- border-radius: 16px;
1627
- border: 1px solid rgba(193, 198, 217, 0.78);
1628
- background: rgba(248, 249, 253, 0.9);
1629
- padding: 7px 8px;
1630
- display: grid;
1631
- grid-template-columns: 56px minmax(0, 1fr);
1632
- gap: 10px;
1633
- align-items: center;
1634
- text-align: left;
1635
- transition:
1636
- border-color 140ms ease,
1637
- transform 140ms ease,
1638
- background-color 140ms ease;
1639
- }
1640
-
1641
- .companion-game__roster-item:hover {
1642
- border-color: rgba(158, 178, 67, 0.9);
1643
- transform: translateY(-1px);
1644
- }
1645
-
1646
- .companion-game__roster-item.is-active {
1647
- border-color: rgba(158, 178, 67, 0.9);
1648
- background: rgba(255, 251, 235, 0.95);
1649
- }
1650
-
1651
- .companion-game__roster-node {
1652
- position: absolute;
1653
- left: -15px;
1654
- top: 50%;
1655
- width: 8px;
1656
- height: 8px;
1657
- border-radius: 999px;
1658
- transform: translateY(-50%);
1659
- background: #1e212f;
1660
- box-shadow: 0 0 0 2px rgba(240, 243, 252, 0.9);
1661
- }
1662
-
1663
- .companion-game__roster-item.is-active .companion-game__roster-node {
1664
- background: #9eb243;
1665
- }
1666
-
1667
- .companion-game__roster-thumb {
1668
- width: 56px;
1669
- height: 56px;
1670
- border-radius: 8px;
1671
- border: 1px solid rgba(186, 191, 211, 0.86);
1672
- background: rgba(238, 242, 252, 0.86);
1673
- overflow: hidden;
1674
- display: inline-flex;
1675
- align-items: center;
1676
- justify-content: center;
1677
- }
1678
-
1679
- .companion-game__roster-thumb img {
1680
- width: 100%;
1681
- height: 100%;
1682
- object-fit: cover;
1683
- object-position: center 24%;
1684
- }
1685
-
1686
- .companion-game__roster-meta {
1687
- display: grid;
1688
- gap: 2px;
1689
- min-width: 0;
1690
- }
1691
-
1692
- .companion-game__roster-title {
1693
- font-size: 12px;
1694
- font-weight: 700;
1695
- color: #1f2434;
1696
- letter-spacing: 0.02em;
1697
- text-transform: uppercase;
1698
- white-space: nowrap;
1699
- overflow: hidden;
1700
- text-overflow: ellipsis;
1701
- }
1702
-
1703
- .companion-game__roster-subtitle {
1704
- font-size: 11px;
1705
- color: #666d84;
1706
- white-space: nowrap;
1707
- overflow: hidden;
1708
- text-overflow: ellipsis;
1709
- }
1710
-
1711
- .companion-game__roster-item.is-active .companion-game__roster-subtitle {
1712
- color: #6b7730;
1713
- }
1714
-
1715
- .companion-game__mini-progress {
1716
- display: grid;
1717
- gap: 4px;
1718
- }
1719
-
1720
- .companion-game__mini-progress-label {
1721
- display: flex;
1722
- justify-content: space-between;
1723
- font-size: 12px;
1724
- color: #4f5467;
1725
- font-weight: 600;
1726
- }
1727
-
1728
- .companion-game__mini-progress-track {
1729
- height: 8px;
1730
- border-radius: 999px;
1731
- background: rgba(167, 174, 193, 0.33);
1732
- overflow: hidden;
1733
- }
1734
-
1735
- .companion-game__mini-progress-fill {
1736
- height: 100%;
1737
- border-radius: 999px;
1738
- background: linear-gradient(90deg, #10131b 0%, #566188 100%);
1739
- }
1740
-
1741
- .companion-game__status-chip {
1742
- margin-top: 3px;
1743
- border-radius: 999px;
1744
- font-size: 11px;
1745
- font-weight: 700;
1746
- text-transform: uppercase;
1747
- letter-spacing: 0.07em;
1748
- padding: 8px 12px;
1749
- width: fit-content;
1750
- }
1751
-
1752
- .companion-game__status-chip.is-good {
1753
- color: #1f6a3b;
1754
- background: rgba(63, 154, 97, 0.14);
1755
- border: 1px solid rgba(63, 154, 97, 0.52);
1756
- }
1757
-
1758
- .companion-game__status-chip.is-danger {
1759
- color: #8f3f47;
1760
- background: rgba(211, 95, 106, 0.12);
1761
- border: 1px solid rgba(211, 95, 106, 0.5);
1762
- }
1763
-
1764
- .companion-game__status-notes {
1765
- border-radius: 12px;
1766
- background: rgba(255, 255, 255, 0.7);
1767
- border: 1px solid rgba(188, 194, 212, 0.75);
1768
- padding: 10px 12px;
1769
- font-size: 12px;
1770
- color: #54596b;
1771
- }
1772
-
1773
- .companion-game__status-notes--danger {
1774
- border-color: rgba(211, 95, 106, 0.4);
1775
- color: #8f3f47;
1776
- }
1777
-
1778
- .companion-game__panel-metrics {
1779
- display: grid;
1780
- gap: 4px;
1781
- font-size: 12px;
1782
- color: #5d6276;
1783
- }
1784
-
1785
- .companion-game__panel-btn {
1786
- margin-top: auto;
1787
- border-radius: 999px;
1788
- border: 1px solid var(--cg-action-border);
1789
- background: var(--cg-action);
1790
- min-height: 40px;
1791
- font-size: 12px;
1792
- font-weight: 700;
1793
- }
1794
-
1795
- .companion-game__kpi-grid {
1796
- display: grid;
1797
- gap: 12px;
1798
- grid-template-columns: repeat(4, minmax(0, 1fr));
1799
- }
1800
-
1801
- .companion-game__kpi-card {
1802
- border-radius: 24px;
1803
- border: 1px solid var(--cg-border);
1804
- background: var(--cg-card);
1805
- box-shadow: var(--cg-soft-shadow);
1806
- padding: 16px 18px;
1807
- min-height: 120px;
1808
- display: flex;
1809
- flex-direction: column;
1810
- justify-content: space-between;
1811
- animation: companion-reveal 300ms ease;
1812
- }
1813
-
1814
- @keyframes kpi-flash {
1815
- 0% {
1816
- background: var(--cg-accent);
1817
- }
1818
-
1819
- 100% {
1820
- background: var(--cg-card);
1821
- }
1822
- }
1823
-
1824
- .companion-game__kpi-card.is-changed {
1825
- animation: kpi-flash 1.2s ease-out;
1826
- }
1827
-
1828
- .companion-game__kpi-label {
1829
- font-size: 15px;
1830
- color: #505467;
1831
- font-weight: 600;
1832
- }
1833
-
1834
- .companion-game__kpi-value {
1835
- font-size: 2.3rem;
1836
- font-weight: 800;
1837
- line-height: 1;
1838
- }
1839
-
1840
- .companion-game__kpi-note {
1841
- font-size: 12px;
1842
- color: #666b7f;
1843
- }
1844
-
1845
- .companion-game__footer-meta {
1846
- display: flex;
1847
- flex-wrap: wrap;
1848
- gap: 10px 16px;
1849
- font-size: 12px;
1850
- color: #70758a;
1851
- }
1852
-
1853
- .companion-game__footer-meta span {
1854
- border-radius: 999px;
1855
- border: 1px solid rgba(183, 188, 206, 0.72);
1856
- background: rgba(250, 251, 255, 0.72);
1857
- padding: 5px 10px;
1858
- }
1859
-
1860
- .companion-game__drawer-overlay {
1861
- position: absolute;
1862
- inset: 0;
1863
- background: rgba(26, 29, 42, 0.34);
1864
- opacity: 0;
1865
- visibility: hidden;
1866
- transition: opacity 180ms ease;
1867
- z-index: 10;
1868
- }
1869
-
1870
- .companion-game__drawer-overlay.is-open {
1871
- opacity: 1;
1872
- visibility: visible;
1873
- }
1874
-
1875
- .companion-game__drawer {
1876
- position: absolute;
1877
- top: 0;
1878
- right: 0;
1879
- height: 100%;
1880
- width: min(460px, 88vw);
1881
- border-left: 1px solid rgba(179, 186, 204, 0.82);
1882
- background: rgba(250, 251, 255, 0.98);
1883
- box-shadow: -14px 0 34px rgba(25, 30, 45, 0.2);
1884
- z-index: 20;
1885
- transform: translateX(104%);
1886
- transition: transform 220ms ease;
1887
- display: flex;
1888
- flex-direction: column;
1889
- overflow: hidden;
1890
- }
1891
-
1892
- .companion-game__drawer.is-open {
1893
- transform: translateX(0);
1894
- }
1895
-
1896
- .companion-game__drawer-header {
1897
- display: flex;
1898
- align-items: flex-start;
1899
- justify-content: space-between;
1900
- gap: 12px;
1901
- border-bottom: 1px solid rgba(188, 194, 212, 0.78);
1902
- padding: 18px;
1903
- }
1904
-
1905
- .companion-game__drawer-header h3 {
1906
- margin: 0;
1907
- font-size: 1.1rem;
1908
- font-weight: 800;
1909
- }
1910
-
1911
- .companion-game__drawer-header p {
1912
- margin: 4px 0 0;
1913
- font-size: 12px;
1914
- color: #60657a;
1915
- }
1916
-
1917
- .companion-game__drawer-close {
1918
- min-height: 34px;
1919
- border-radius: 999px;
1920
- border: 1px solid rgba(190, 195, 211, 0.85);
1921
- padding: 0 12px;
1922
- background: #ffffff;
1923
- font-size: 12px;
1924
- font-weight: 700;
1925
- }
1926
-
1927
- .companion-game__drawer-section {
1928
- padding: 16px 18px;
1929
- border-bottom: 1px solid rgba(196, 201, 218, 0.7);
1930
- display: grid;
1931
- gap: 10px;
1932
- }
1933
-
1934
- .companion-game__drawer-title {
1935
- font-size: 12px;
1936
- text-transform: uppercase;
1937
- letter-spacing: 0.07em;
1938
- color: #50566c;
1939
- font-weight: 800;
1940
- }
1941
-
1942
- .companion-game__helper {
1943
- font-size: 12px;
1944
- color: #64697d;
1945
- }
1946
-
1947
- .companion-game__checkbox {
1948
- display: inline-flex;
1949
- align-items: center;
1950
- gap: 8px;
1951
- font-size: 13px;
1952
- }
1953
-
1954
- .companion-game__drawer-grid {
1955
- display: grid;
1956
- grid-template-columns: repeat(2, minmax(0, 1fr));
1957
- gap: 8px;
1958
- }
1959
-
1960
- .companion-game__field {
1961
- display: grid;
1962
- gap: 5px;
1963
- font-size: 12px;
1964
- color: #59607a;
1965
- }
1966
-
1967
- .companion-game__field select {
1968
- border: 1px solid rgba(183, 189, 208, 0.95);
1969
- border-radius: 10px;
1970
- background: #ffffff;
1971
- min-height: 34px;
1972
- padding: 0 10px;
1973
- color: #1f2434;
1974
- }
1975
-
1976
- .companion-game__drawer-actions {
1977
- display: flex;
1978
- flex-wrap: wrap;
1979
- gap: 8px;
1980
- }
1981
-
1982
- .companion-game__drawer-btn {
1983
- min-height: 36px;
1984
- border-radius: 999px;
1985
- border: 1px solid rgba(182, 188, 206, 0.9);
1986
- background: #ffffff;
1987
- padding: 0 12px;
1988
- font-size: 12px;
1989
- font-weight: 700;
1990
- }
1991
-
1992
- .companion-game__drawer-btn--primary {
1993
- border-color: #9fb243;
1994
- background: #c7da63;
1995
- }
1996
-
1997
- .companion-game__drawer-btn:disabled {
1998
- opacity: 0.5;
1999
- cursor: not-allowed;
2000
- }
2001
-
2002
- .companion-game__activity-list {
2003
- max-height: 280px;
2004
- overflow-y: auto;
2005
- border: 1px solid rgba(185, 191, 210, 0.82);
2006
- border-radius: 12px;
2007
- background: rgba(255, 255, 255, 0.86);
2008
- }
2009
-
2010
- .companion-game__activity-item {
2011
- padding: 10px;
2012
- border-bottom: 1px solid rgba(198, 203, 220, 0.72);
2013
- font-size: 12px;
2014
- color: #2f3446;
2015
- }
2016
-
2017
- .companion-game__activity-item:last-child {
2018
- border-bottom: 0;
2019
- }
2020
-
2021
- .companion-game__activity-meta {
2022
- font-size: 11px;
2023
- color: #6a6f84;
2024
- margin-bottom: 3px;
2025
- }
2026
-
2027
- @media (max-width: 1279px) {
2028
- .companion-game__kpi-grid {
2029
- grid-template-columns: repeat(2, minmax(0, 1fr));
2030
- }
2031
- }
2032
-
2033
- @media (max-width: 1023px) {
2034
- .companion-game {
2035
- border-radius: 26px;
2036
- padding: 16px;
2037
- }
2038
-
2039
- .companion-game__left-rail {
2040
- order: 2;
2041
- display: flex;
2042
- flex-direction: row;
2043
- align-items: stretch;
2044
- gap: 10px;
2045
- }
2046
-
2047
- .companion-game__rail-actions {
2048
- flex: 1;
2049
- }
2050
-
2051
- .companion-game__stage {
2052
- order: 1;
2053
- }
2054
-
2055
- .companion-game__roster {
2056
- order: 3;
2057
- }
2058
- }
2059
-
2060
- @media (max-width: 767px) {
2061
- .companion-game__logo-mark {
2062
- display: none;
2063
- }
2064
-
2065
- .companion-game__left-rail {
2066
- display: flex;
2067
- flex-direction: column;
2068
- }
2069
-
2070
- .companion-game__vrm-shell {
2071
- min-height: 460px;
2072
- height: 66vh;
2073
- }
2074
-
2075
- .companion-game__kpi-grid {
2076
- grid-template-columns: 1fr;
2077
- }
2078
-
2079
- .companion-game__drawer {
2080
- width: 100%;
2081
- border-left: 0;
2082
- }
2083
-
2084
- .companion-game__drawer-grid {
2085
- grid-template-columns: 1fr;
2086
- }
2087
- }