@elizaos/app-core 2.0.0-alpha.13 → 2.0.0-alpha.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/.turbo/turbo-build.log +0 -1
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +26 -12
  4. package/dist/api/client.d.ts +3 -3
  5. package/dist/api/client.d.ts.map +1 -1
  6. package/dist/api/client.js +24 -13
  7. package/dist/bridge/plugin-bridge.d.ts.map +1 -1
  8. package/dist/components/AvatarLoader.d.ts +3 -1
  9. package/dist/components/AvatarLoader.d.ts.map +1 -1
  10. package/dist/components/AvatarLoader.js +4 -1
  11. package/dist/components/BscTradePanel.d.ts +1 -1
  12. package/dist/components/BscTradePanel.d.ts.map +1 -1
  13. package/dist/components/CharacterView.d.ts.map +1 -1
  14. package/dist/components/CharacterView.js +50 -15
  15. package/dist/components/ChatView.js +1 -1
  16. package/dist/components/ConfigPageView.d.ts.map +1 -1
  17. package/dist/components/ConfigPageView.js +9 -8
  18. package/dist/components/ConversationsSidebar.js +1 -1
  19. package/dist/components/CustomActionEditor.js +1 -1
  20. package/dist/components/FineTuningView.d.ts.map +1 -1
  21. package/dist/components/FineTuningView.js +2 -2
  22. package/dist/components/GlobalEmoteOverlay.d.ts.map +1 -1
  23. package/dist/components/GlobalEmoteOverlay.js +1 -1
  24. package/dist/components/HeartbeatsView.js +1 -1
  25. package/dist/components/LoadingScreen.d.ts.map +1 -1
  26. package/dist/components/LoadingScreen.js +38 -7
  27. package/dist/components/OnboardingWizard.js +1 -1
  28. package/dist/components/PluginsView.d.ts.map +1 -1
  29. package/dist/components/PluginsView.js +4 -1
  30. package/dist/components/ShellOverlays.js +1 -1
  31. package/dist/components/VoiceConfigView.d.ts.map +1 -1
  32. package/dist/components/VoiceConfigView.js +4 -2
  33. package/dist/components/avatar/VrmEngine.d.ts +2 -0
  34. package/dist/components/avatar/VrmEngine.d.ts.map +1 -1
  35. package/dist/components/avatar/VrmEngine.js +14 -6
  36. package/dist/components/companion/CompanionSceneHost.d.ts +1 -1
  37. package/dist/components/companion/CompanionSceneHost.d.ts.map +1 -1
  38. package/dist/components/companion/CompanionSceneHost.js +1 -1
  39. package/dist/components/index.d.ts +10 -10
  40. package/dist/components/index.d.ts.map +1 -1
  41. package/dist/components/index.js +10 -10
  42. package/dist/components/inventory/TokensTable.js +2 -2
  43. package/dist/components/onboarding/IdentityStep.d.ts.map +1 -1
  44. package/dist/components/onboarding/IdentityStep.js +1 -1
  45. package/dist/components/shared/ShellHeaderControls.js +1 -1
  46. package/dist/config/config-field.d.ts.map +1 -1
  47. package/dist/config/config-field.js +7 -8
  48. package/dist/config/index.d.ts +1 -1
  49. package/dist/config/index.d.ts.map +1 -1
  50. package/dist/config/index.js +1 -1
  51. package/dist/hooks/useVoiceChat.d.ts.map +1 -1
  52. package/dist/hooks/useVoiceChat.js +3 -1
  53. package/dist/i18n/locales/en.json +1192 -1192
  54. package/dist/i18n/locales/es.json +1192 -1192
  55. package/dist/i18n/locales/ko.json +1192 -1192
  56. package/dist/i18n/locales/pt.json +1192 -1192
  57. package/dist/i18n/locales/zh-CN.json +1192 -1192
  58. package/dist/package.json +181 -0
  59. package/dist/platform/lifo.d.ts.map +1 -1
  60. package/dist/platform/lifo.js +4 -1
  61. package/dist/state/AppContext.d.ts.map +1 -1
  62. package/dist/state/AppContext.js +23 -6
  63. package/dist/state/internal.d.ts +1 -1
  64. package/dist/state/internal.d.ts.map +1 -1
  65. package/dist/state/internal.js +1 -1
  66. package/dist/state/parsers.d.ts.map +1 -1
  67. package/dist/state/parsers.js +3 -2
  68. package/dist/state/persistence.js +1 -1
  69. package/dist/styles/anime.css +6324 -0
  70. package/dist/styles/base.css +196 -0
  71. package/dist/styles/onboarding-game.css +738 -0
  72. package/dist/styles/styles.css +2087 -0
  73. package/dist/styles/xterm.css +241 -0
  74. package/package.json +4 -4
  75. package/src/App.tsx +35 -14
  76. package/src/ambient.d.ts +5 -5
  77. package/src/api/client.ts +36 -23
  78. package/src/bridge/plugin-bridge.ts +1 -1
  79. package/src/components/AvatarLoader.tsx +6 -0
  80. package/src/components/BscTradePanel.tsx +1 -1
  81. package/src/components/CharacterView.tsx +536 -367
  82. package/src/components/ChatView.tsx +3 -3
  83. package/src/components/ConfigPageView.tsx +9 -8
  84. package/src/components/ConversationsSidebar.tsx +1 -1
  85. package/src/components/CustomActionEditor.tsx +6 -6
  86. package/src/components/FineTuningView.tsx +6 -3
  87. package/src/components/GlobalEmoteOverlay.tsx +1 -4
  88. package/src/components/HeartbeatsView.tsx +1 -1
  89. package/src/components/InventoryView.tsx +2 -2
  90. package/src/components/LoadingScreen.tsx +39 -6
  91. package/src/components/OnboardingWizard.tsx +1 -1
  92. package/src/components/PluginsView.tsx +6 -0
  93. package/src/components/ShellOverlays.tsx +1 -1
  94. package/src/components/VoiceConfigView.tsx +4 -5
  95. package/src/components/avatar/VrmEngine.ts +25 -7
  96. package/src/components/companion/CompanionSceneHost.tsx +5 -1
  97. package/src/components/index.ts +10 -10
  98. package/src/components/inventory/TokensTable.tsx +2 -2
  99. package/src/components/onboarding/IdentityStep.tsx +9 -13
  100. package/src/components/shared/ShellHeaderControls.tsx +1 -1
  101. package/src/config/config-field.tsx +7 -8
  102. package/src/config/index.ts +3 -3
  103. package/src/hooks/useVoiceChat.ts +5 -3
  104. package/src/platform/lifo.ts +14 -4
  105. package/src/state/AppContext.tsx +24 -1
  106. package/src/state/internal.ts +6 -6
  107. package/src/state/parsers.ts +4 -3
  108. package/src/state/persistence.ts +1 -1
  109. package/test/app/MessageContent.test.tsx +42 -0
  110. package/test/app/bug-report-modal.test.tsx +3 -3
  111. package/test/app/chat-view.test.tsx +3 -3
  112. package/test/app/cloud-login-lock.test.ts +3 -2
  113. package/test/app/custom-actions-smoke.test.ts +3 -3
  114. package/test/app/onboarding-language.test.tsx +3 -3
  115. package/test/app/pages-navigation-smoke.e2e.test.ts +13 -8
  116. package/test/app/plugin-bridge.test.ts +1 -1
  117. package/test/app/provider-dropdown-default.test.tsx +2 -4
  118. package/test/app/restart-banner.test.tsx +3 -3
  119. package/test/app/shell-mode-switching.e2e.test.ts +6 -6
  120. package/test/app/shell-mode-tab-memory.test.tsx +1 -1
  121. package/test/app/startup-chat.e2e.test.ts +3 -3
  122. package/test/app/triggers-view.e2e.test.ts +3 -2
  123. package/test/app/wallet-api-save-lock.test.ts +2 -1
  124. package/test/utils/assistant-text.test.ts +64 -0
  125. package/test/utils/streaming-text.test.ts +89 -0
@@ -0,0 +1,2087 @@
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
+ }