@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,738 @@
1
+ /* === Onboarding Game Screen === */
2
+
3
+ .onboarding-screen {
4
+ width: 100vw;
5
+ height: 100vh;
6
+ background: #0c0e14;
7
+ --text: rgba(240, 238, 250, 0.94);
8
+ --muted: rgba(240, 238, 250, 0.66);
9
+ --border: rgba(255, 255, 255, 0.14);
10
+ --card: rgba(10, 14, 20, 0.28);
11
+ --ok: rgba(240, 185, 11, 0.92);
12
+ --ok-muted: rgba(240, 185, 11, 0.34);
13
+ --ok-subtle: rgba(240, 185, 11, 0.12);
14
+ --accent: rgba(240, 185, 11, 0.94);
15
+ --accent-foreground: rgba(240, 238, 250, 0.94);
16
+ --danger: rgb(248, 113, 113);
17
+ position: relative;
18
+ overflow: hidden;
19
+ }
20
+
21
+ /* Background image layer */
22
+ .onboarding-bg {
23
+ position: absolute;
24
+ inset: -20px;
25
+ background-size: cover;
26
+ background-position: center;
27
+ filter: blur(6px);
28
+ z-index: 0;
29
+ animation: onboarding-bg-drift 30s ease-in-out infinite alternate;
30
+ }
31
+ .onboarding-bg-overlay {
32
+ position: absolute;
33
+ inset: 0;
34
+ background: rgba(8, 10, 16, 0.58);
35
+ z-index: 1;
36
+ }
37
+ @keyframes onboarding-bg-drift {
38
+ 0% {
39
+ transform: scale(1.08) translate(0, 0);
40
+ }
41
+ 50% {
42
+ transform: scale(1.1) translate(-8px, 4px);
43
+ }
44
+ 100% {
45
+ transform: scale(1.08) translate(4px, -3px);
46
+ }
47
+ }
48
+
49
+ /* Corner decorations */
50
+ .onboarding-corner {
51
+ position: absolute;
52
+ width: 36px;
53
+ height: 36px;
54
+ pointer-events: none;
55
+ z-index: 30;
56
+ animation: onboarding-corner-breathe 4s ease-in-out infinite;
57
+ }
58
+ .onboarding-corner--tl {
59
+ top: 20px;
60
+ left: 20px;
61
+ }
62
+ .onboarding-corner--tr {
63
+ top: 20px;
64
+ right: 20px;
65
+ transform: scaleX(-1);
66
+ animation-delay: 1s;
67
+ }
68
+ .onboarding-corner--bl {
69
+ bottom: 20px;
70
+ left: 20px;
71
+ transform: scaleY(-1);
72
+ animation-delay: 2s;
73
+ }
74
+ .onboarding-corner--br {
75
+ bottom: 20px;
76
+ right: 20px;
77
+ transform: scale(-1);
78
+ animation-delay: 3s;
79
+ }
80
+ @keyframes onboarding-corner-breathe {
81
+ 0%,
82
+ 100% {
83
+ opacity: 0.6;
84
+ }
85
+ 50% {
86
+ opacity: 1;
87
+ }
88
+ }
89
+
90
+ /* === UI OVERLAY — positions step nav and content panel over the VRM === */
91
+ .onboarding-ui-overlay {
92
+ position: absolute;
93
+ inset: 0;
94
+ z-index: 20;
95
+ display: flex;
96
+ justify-content: space-between;
97
+ pointer-events: none;
98
+ }
99
+ .onboarding-ui-overlay > * {
100
+ pointer-events: auto;
101
+ }
102
+
103
+ /* === LEFT PANEL — Step Navigation === */
104
+ .onboarding-left {
105
+ display: flex;
106
+ flex-direction: column;
107
+ justify-content: center;
108
+ padding: 60px 0 60px 90px;
109
+ position: relative;
110
+ z-index: 10;
111
+ }
112
+
113
+ .onboarding-step-list {
114
+ display: flex;
115
+ flex-direction: column;
116
+ position: relative;
117
+ }
118
+
119
+ /* Vertical connecting line — hidden, replaced by progress-only line */
120
+ .onboarding-step-list::before {
121
+ display: none;
122
+ }
123
+
124
+ /* Progress fill line — only connects completed + active dots */
125
+ .onboarding-step-list::after {
126
+ content: "";
127
+ position: absolute;
128
+ left: 6px;
129
+ top: 14px;
130
+ width: 1px;
131
+ height: 0;
132
+ background: linear-gradient(
133
+ 180deg,
134
+ rgba(240, 185, 11, 0.4),
135
+ rgba(240, 185, 11, 0.12)
136
+ );
137
+ transition: height 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
138
+ z-index: 0;
139
+ }
140
+ .onboarding-step-list.step-0::after {
141
+ height: 0;
142
+ }
143
+ .onboarding-step-list.step-1::after {
144
+ height: calc((100% - 28px) * 1 / 5);
145
+ }
146
+ .onboarding-step-list.step-2::after {
147
+ height: calc((100% - 28px) * 2 / 5);
148
+ }
149
+ .onboarding-step-list.step-3::after {
150
+ height: calc((100% - 28px) * 3 / 5);
151
+ }
152
+ .onboarding-step-list.step-4::after {
153
+ height: calc((100% - 28px) * 4 / 5);
154
+ }
155
+ .onboarding-step-list.step-5::after {
156
+ height: calc((100% - 28px) * 5 / 5);
157
+ }
158
+
159
+ .onboarding-step-item {
160
+ display: flex;
161
+ align-items: center;
162
+ gap: 20px;
163
+ padding: 19px 0;
164
+ position: relative;
165
+ }
166
+
167
+ .onboarding-step-dot {
168
+ width: 14px;
169
+ height: 14px;
170
+ border: 1px solid rgba(255, 255, 255, 0.12);
171
+ transform: rotate(45deg);
172
+ flex-shrink: 0;
173
+ position: relative;
174
+ z-index: 2;
175
+ background: #0c0e14;
176
+ transition: all 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
177
+ }
178
+
179
+ .onboarding-step-item--done .onboarding-step-dot {
180
+ background: rgba(240, 185, 11, 0.35);
181
+ border-color: rgba(240, 185, 11, 0.5);
182
+ }
183
+
184
+ .onboarding-step-item--active .onboarding-step-dot {
185
+ background: #f0b90b;
186
+ border-color: var(--text);
187
+ box-shadow: 0 0 12px rgba(240, 185, 11, 0.5);
188
+ animation: onboarding-dot-pulse 2s ease-in-out infinite;
189
+ }
190
+ @keyframes onboarding-dot-pulse {
191
+ 0%,
192
+ 100% {
193
+ box-shadow: 0 0 12px rgba(240, 185, 11, 0.5);
194
+ transform: rotate(45deg) scale(1);
195
+ }
196
+ 50% {
197
+ box-shadow: 0 0 20px rgba(240, 185, 11, 0.7);
198
+ transform: rotate(45deg) scale(1.15);
199
+ }
200
+ }
201
+
202
+ .onboarding-step-info {
203
+ display: flex;
204
+ flex-direction: column;
205
+ gap: 2px;
206
+ }
207
+
208
+ .onboarding-step-name {
209
+ font-size: 15px;
210
+ letter-spacing: 0.08em;
211
+ color: rgba(240, 238, 250, 0.58);
212
+ font-weight: 500;
213
+ text-shadow: 0 2px 10px rgba(3, 5, 10, 0.65);
214
+ transition: all 0.5s;
215
+ }
216
+ .onboarding-step-item--done .onboarding-step-name {
217
+ color: rgba(240, 238, 250, 0.72);
218
+ }
219
+ .onboarding-step-item--active .onboarding-step-name {
220
+ color: rgba(240, 238, 250, 0.92);
221
+ font-weight: 600;
222
+ }
223
+
224
+ .onboarding-step-sub {
225
+ font-size: 13px;
226
+ color: rgba(240, 238, 250, 0.38);
227
+ letter-spacing: 0.05em;
228
+ text-shadow: 0 2px 10px rgba(3, 5, 10, 0.55);
229
+ transition: all 0.5s;
230
+ }
231
+ .onboarding-step-item--active .onboarding-step-sub {
232
+ color: rgba(240, 185, 11, 0.8);
233
+ }
234
+
235
+ /* === RIGHT PANEL — Content === */
236
+ .onboarding-right {
237
+ display: flex;
238
+ flex-direction: column;
239
+ justify-content: center;
240
+ padding: 40px 56px 40px 0;
241
+ position: relative;
242
+ z-index: 10;
243
+ }
244
+
245
+ /* Glassmorphism panel */
246
+ .onboarding-panel {
247
+ background: rgba(10, 14, 20, 0.16);
248
+ backdrop-filter: blur(40px) saturate(1.4);
249
+ -webkit-backdrop-filter: blur(40px) saturate(1.4);
250
+ border: 1px solid rgba(255, 255, 255, 0.18);
251
+ border-radius: 10px;
252
+ padding: 36px 32px;
253
+ display: flex;
254
+ flex-direction: column;
255
+ gap: 0;
256
+ box-shadow:
257
+ 0 8px 32px rgba(0, 0, 0, 0.25),
258
+ inset 0 1px 0 rgba(255, 255, 255, 0.08);
259
+ animation: onboarding-panel-enter 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94)
260
+ both;
261
+ max-height: calc(100vh - 80px);
262
+ overflow-y: auto;
263
+ overflow-x: hidden;
264
+ }
265
+ .onboarding-panel::-webkit-scrollbar {
266
+ width: 4px;
267
+ }
268
+ .onboarding-panel::-webkit-scrollbar-track {
269
+ background: transparent;
270
+ }
271
+ .onboarding-panel::-webkit-scrollbar-thumb {
272
+ background: rgba(255, 255, 255, 0.1);
273
+ border-radius: 2px;
274
+ }
275
+ @keyframes onboarding-panel-enter {
276
+ from {
277
+ opacity: 0;
278
+ transform: translateX(30px);
279
+ }
280
+ to {
281
+ opacity: 1;
282
+ transform: translateX(0);
283
+ }
284
+ }
285
+
286
+ /* Staggered children animation */
287
+ .onboarding-panel > * {
288
+ animation: onboarding-content-fade-in 0.5s ease both;
289
+ }
290
+ .onboarding-panel > *:nth-child(1) {
291
+ animation-delay: 0.15s;
292
+ }
293
+ .onboarding-panel > *:nth-child(2) {
294
+ animation-delay: 0.25s;
295
+ }
296
+ .onboarding-panel > *:nth-child(3) {
297
+ animation-delay: 0.35s;
298
+ }
299
+ .onboarding-panel > *:nth-child(4) {
300
+ animation-delay: 0.45s;
301
+ }
302
+ .onboarding-panel > *:nth-child(5) {
303
+ animation-delay: 0.55s;
304
+ }
305
+ .onboarding-panel > *:nth-child(6) {
306
+ animation-delay: 0.65s;
307
+ }
308
+ .onboarding-panel > *:nth-child(7) {
309
+ animation-delay: 0.75s;
310
+ }
311
+ @keyframes onboarding-content-fade-in {
312
+ from {
313
+ opacity: 0;
314
+ transform: translateY(10px);
315
+ }
316
+ to {
317
+ opacity: 1;
318
+ transform: translateY(0);
319
+ }
320
+ }
321
+
322
+ /* Diamond ornament divider */
323
+ .onboarding-divider {
324
+ display: flex;
325
+ align-items: center;
326
+ gap: 12px;
327
+ margin: 16px 0;
328
+ }
329
+ .onboarding-divider::before,
330
+ .onboarding-divider::after {
331
+ content: "";
332
+ flex: 1;
333
+ height: 1px;
334
+ background: linear-gradient(
335
+ 90deg,
336
+ transparent,
337
+ rgba(255, 255, 255, 0.15),
338
+ transparent
339
+ );
340
+ }
341
+ .onboarding-divider-diamond {
342
+ width: 6px;
343
+ height: 6px;
344
+ background: rgba(240, 185, 11, 0.4);
345
+ transform: rotate(45deg);
346
+ flex-shrink: 0;
347
+ }
348
+
349
+ /* Section title (uppercase label) */
350
+ .onboarding-section-title {
351
+ font-size: 12px;
352
+ letter-spacing: 0.3em;
353
+ text-transform: uppercase;
354
+ color: rgba(240, 238, 250, 0.62);
355
+ font-weight: 600;
356
+ text-align: center;
357
+ text-shadow: 0 2px 10px rgba(3, 5, 10, 0.55);
358
+ margin-bottom: 0;
359
+ }
360
+
361
+ /* Question text */
362
+ .onboarding-question {
363
+ font-size: 20px;
364
+ font-weight: 300;
365
+ line-height: 1.4;
366
+ color: rgba(240, 238, 250, 0.95);
367
+ text-align: center;
368
+ text-shadow: 0 2px 10px rgba(3, 5, 10, 0.55);
369
+ margin-bottom: 18px;
370
+ }
371
+
372
+ /* Game-style text input */
373
+ .onboarding-input {
374
+ width: 100%;
375
+ padding: 16px 20px;
376
+ background: rgba(10, 14, 20, 0.24);
377
+ border: 1px solid rgba(255, 255, 255, 0.16);
378
+ border-radius: 6px;
379
+ color: rgba(240, 238, 250, 0.92);
380
+ font-size: 16px;
381
+ font-family: inherit;
382
+ outline: none;
383
+ letter-spacing: 0.03em;
384
+ text-align: center;
385
+ transition:
386
+ border-color 0.3s,
387
+ box-shadow 0.3s;
388
+ }
389
+ .onboarding-input:focus {
390
+ border-color: rgba(240, 185, 11, 0.4);
391
+ box-shadow: 0 0 12px rgba(240, 185, 11, 0.08);
392
+ }
393
+ .onboarding-input::placeholder {
394
+ color: rgba(240, 238, 250, 0.4);
395
+ }
396
+
397
+ /* Description text */
398
+ .onboarding-desc {
399
+ font-size: 14px;
400
+ color: rgba(240, 238, 250, 0.62);
401
+ text-align: center;
402
+ line-height: 1.6;
403
+ text-shadow: 0 2px 10px rgba(3, 5, 10, 0.45);
404
+ margin-top: 12px;
405
+ }
406
+
407
+ /* Pill buttons (language selection) */
408
+ .onboarding-pill-row {
409
+ display: flex;
410
+ flex-wrap: wrap;
411
+ gap: 10px;
412
+ justify-content: center;
413
+ margin-bottom: 16px;
414
+ }
415
+ .onboarding-pill {
416
+ padding: 10px 22px;
417
+ background: rgba(255, 255, 255, 0.04);
418
+ border: 1px solid rgba(255, 255, 255, 0.1);
419
+ border-radius: 100px;
420
+ color: rgba(240, 238, 250, 0.6);
421
+ font-size: 14px;
422
+ font-family: inherit;
423
+ cursor: pointer;
424
+ transition: all 0.3s;
425
+ }
426
+ .onboarding-pill:hover {
427
+ background: rgba(255, 255, 255, 0.08);
428
+ border-color: rgba(255, 255, 255, 0.2);
429
+ color: rgba(240, 238, 250, 0.85);
430
+ }
431
+ .onboarding-pill--selected {
432
+ background: rgba(240, 185, 11, 0.12);
433
+ border-color: rgba(240, 185, 11, 0.4);
434
+ color: var(--text);
435
+ }
436
+
437
+ /* Permission items */
438
+ .onboarding-permission-list {
439
+ display: flex;
440
+ flex-direction: column;
441
+ gap: 8px;
442
+ margin-bottom: 16px;
443
+ }
444
+ .onboarding-permission-item {
445
+ display: flex;
446
+ justify-content: space-between;
447
+ align-items: center;
448
+ padding: 12px 16px;
449
+ background: rgba(255, 255, 255, 0.03);
450
+ border: 1px solid rgba(255, 255, 255, 0.06);
451
+ border-radius: 6px;
452
+ transition: all 0.3s;
453
+ }
454
+ .onboarding-permission-item--granted {
455
+ border-color: rgba(240, 185, 11, 0.2);
456
+ background: rgba(240, 185, 11, 0.04);
457
+ }
458
+ .onboarding-permission-name {
459
+ font-size: 14px;
460
+ color: rgba(240, 238, 250, 0.7);
461
+ letter-spacing: 0.02em;
462
+ }
463
+ .onboarding-permission-status {
464
+ font-size: 12px;
465
+ color: rgba(240, 238, 250, 0.3);
466
+ }
467
+ .onboarding-permission-item--granted .onboarding-permission-status {
468
+ color: rgba(240, 185, 11, 0.7);
469
+ }
470
+
471
+ /* Provider cards (connection step) */
472
+ .onboarding-provider-grid {
473
+ display: grid;
474
+ grid-template-columns: repeat(2, 1fr);
475
+ gap: 6px;
476
+ margin-bottom: 16px;
477
+ }
478
+ .onboarding-provider-card {
479
+ display: flex;
480
+ align-items: center;
481
+ gap: 8px;
482
+ padding: 10px;
483
+ background: rgba(10, 14, 20, 0.24);
484
+ border: 1px solid rgba(255, 255, 255, 0.1);
485
+ border-radius: 8px;
486
+ cursor: pointer;
487
+ transition: all 0.3s;
488
+ text-align: left;
489
+ backdrop-filter: blur(18px) saturate(1.2);
490
+ -webkit-backdrop-filter: blur(18px) saturate(1.2);
491
+ }
492
+ .onboarding-provider-card:hover {
493
+ background: rgba(10, 14, 20, 0.34);
494
+ border-color: rgba(255, 255, 255, 0.16);
495
+ }
496
+ .onboarding-provider-card--selected {
497
+ background: rgba(240, 185, 11, 0.12);
498
+ border-color: rgba(240, 185, 11, 0.34);
499
+ }
500
+ .onboarding-provider-icon {
501
+ width: 24px;
502
+ height: 24px;
503
+ border-radius: 6px;
504
+ object-fit: contain;
505
+ flex-shrink: 0;
506
+ }
507
+ .onboarding-provider-name {
508
+ font-size: 12px;
509
+ color: rgba(240, 238, 250, 0.88);
510
+ line-height: 1.3;
511
+ text-shadow: 0 1px 8px rgba(3, 5, 10, 0.6);
512
+ }
513
+ .onboarding-provider-desc {
514
+ font-size: 10px;
515
+ color: rgba(240, 238, 250, 0.58);
516
+ line-height: 1.3;
517
+ display: -webkit-box;
518
+ -webkit-line-clamp: 1;
519
+ -webkit-box-orient: vertical;
520
+ overflow: hidden;
521
+ text-shadow: 0 1px 8px rgba(3, 5, 10, 0.5);
522
+ }
523
+ .onboarding-provider-card--recommended {
524
+ grid-column: 1 / -1;
525
+ border-color: rgba(240, 185, 11, 0.24);
526
+ background: rgba(240, 185, 11, 0.1);
527
+ }
528
+ .onboarding-provider-card--recommended:hover {
529
+ border-color: rgba(240, 185, 11, 0.4);
530
+ background: rgba(240, 185, 11, 0.14);
531
+ }
532
+ .onboarding-provider-badge {
533
+ font-size: 9px;
534
+ letter-spacing: 0.08em;
535
+ text-transform: uppercase;
536
+ color: rgba(240, 238, 250, 0.94);
537
+ background: rgba(240, 185, 11, 0.18);
538
+ padding: 2px 8px;
539
+ border-radius: 100px;
540
+ font-weight: 600;
541
+ margin-left: auto;
542
+ flex-shrink: 0;
543
+ white-space: nowrap;
544
+ text-shadow: 0 1px 6px rgba(3, 5, 10, 0.45);
545
+ }
546
+
547
+ /* Panel footer */
548
+ .onboarding-panel-footer {
549
+ display: flex;
550
+ justify-content: space-between;
551
+ align-items: center;
552
+ margin-top: 18px;
553
+ padding-top: 14px;
554
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
555
+ }
556
+
557
+ /* Back link */
558
+ .onboarding-back-link {
559
+ font-size: 10px;
560
+ color: rgba(240, 238, 250, 0.62);
561
+ letter-spacing: 0.15em;
562
+ text-transform: uppercase;
563
+ cursor: pointer;
564
+ text-decoration: none;
565
+ background: none;
566
+ border: none;
567
+ font-family: inherit;
568
+ transition: color 0.3s;
569
+ padding: 0;
570
+ text-shadow: 0 1px 8px rgba(3, 5, 10, 0.45);
571
+ }
572
+ .onboarding-back-link:hover {
573
+ color: rgba(240, 238, 250, 0.9);
574
+ }
575
+
576
+ /* Confirm/CTA button */
577
+ .onboarding-confirm-btn {
578
+ display: inline-flex;
579
+ align-items: center;
580
+ gap: 8px;
581
+ padding: 12px 32px;
582
+ background: rgba(240, 185, 11, 0.08);
583
+ border: 1px solid rgba(240, 185, 11, 0.35);
584
+ border-radius: 6px;
585
+ color: rgba(240, 238, 250, 0.94);
586
+ text-shadow: 0 1px 6px rgba(3, 5, 10, 0.55);
587
+ font-size: 11px;
588
+ font-weight: 600;
589
+ letter-spacing: 0.18em;
590
+ text-transform: uppercase;
591
+ cursor: pointer;
592
+ transition: all 0.3s;
593
+ font-family: inherit;
594
+ position: relative;
595
+ overflow: hidden;
596
+ }
597
+ .onboarding-confirm-btn:hover {
598
+ background: rgba(240, 185, 11, 0.14);
599
+ border-color: rgba(240, 185, 11, 0.6);
600
+ }
601
+ .onboarding-confirm-btn:disabled {
602
+ opacity: 0.4;
603
+ cursor: not-allowed;
604
+ }
605
+ /* Ripple effect */
606
+ .onboarding-confirm-btn .onboarding-ripple {
607
+ position: absolute;
608
+ border-radius: 50%;
609
+ background: rgba(240, 185, 11, 0.3);
610
+ transform: scale(0);
611
+ animation: onboarding-ripple-expand 0.6s ease-out forwards;
612
+ pointer-events: none;
613
+ }
614
+ @keyframes onboarding-ripple-expand {
615
+ to {
616
+ transform: scale(4);
617
+ opacity: 0;
618
+ }
619
+ }
620
+
621
+ /* Identity typewriter cursor */
622
+ @keyframes onboarding-cursor-blink {
623
+ 0%,
624
+ 100% {
625
+ opacity: 1;
626
+ }
627
+ 50% {
628
+ opacity: 0;
629
+ }
630
+ }
631
+
632
+ /* === Permissions section overrides — hide duplicate title === */
633
+ .onboarding-panel .text-center.mb-6 {
634
+ display: none;
635
+ }
636
+
637
+ /* === Permissions section overrides === */
638
+ .onboarding-panel {
639
+ --card: rgba(10, 14, 20, 0.28);
640
+ --border: rgba(255, 255, 255, 0.14);
641
+ --muted: rgba(240, 238, 250, 0.66);
642
+ --ok: rgba(240, 185, 11, 0.92);
643
+ --accent: rgba(240, 185, 11, 0.94);
644
+ --accent-foreground: rgba(240, 238, 250, 0.94);
645
+ --danger: rgb(248, 113, 113);
646
+ color: rgba(240, 238, 250, 0.92);
647
+ }
648
+ .onboarding-panel .text-xl {
649
+ font-size: 16px;
650
+ font-weight: 500;
651
+ letter-spacing: 0.02em;
652
+ }
653
+ .onboarding-panel .text-sm {
654
+ font-size: 12px;
655
+ }
656
+ .onboarding-panel [class*="border-\\[var\\(--ok\\)\\]"] {
657
+ border-color: rgba(240, 185, 11, 0.3);
658
+ }
659
+ .onboarding-panel [class*="bg-\\[var\\(--ok\\)\\]"] {
660
+ background-color: rgba(240, 185, 11, 0.06);
661
+ }
662
+ .onboarding-panel [class*="bg-\\[var\\(--card\\)\\]"] {
663
+ background-color: rgba(255, 255, 255, 0.04);
664
+ }
665
+ /* Override Tailwind utilities on PermissionsSection using doubled selectors for specificity */
666
+ /* Make permission card borders translucent */
667
+ .onboarding-panel.onboarding-panel .flex.items-center.gap-4.p-4.border {
668
+ background: rgba(10, 14, 20, 0.26);
669
+ border-color: rgba(255, 255, 255, 0.12);
670
+ border-radius: 8px;
671
+ }
672
+ .onboarding-panel.onboarding-panel
673
+ .flex.items-center.gap-4.p-4.border:has(.text-\[var\(--ok\)\]) {
674
+ background: rgba(240, 185, 11, 0.12);
675
+ border-color: rgba(240, 185, 11, 0.32);
676
+ }
677
+ /* Style buttons within permissions to match game theme */
678
+ .onboarding-panel.onboarding-panel button[class*="bg-accent"] {
679
+ background: rgba(240, 185, 11, 0.1);
680
+ border: 1px solid rgba(240, 185, 11, 0.35);
681
+ color: rgba(240, 238, 250, 0.94);
682
+ border-radius: 6px;
683
+ letter-spacing: 0.1em;
684
+ text-transform: uppercase;
685
+ font-weight: 600;
686
+ }
687
+ .onboarding-panel.onboarding-panel button[class*="bg-accent"]:hover {
688
+ background: rgba(240, 185, 11, 0.18);
689
+ }
690
+ /* Outline/skip buttons */
691
+ .onboarding-panel.onboarding-panel button[class*="opacity-70"] {
692
+ background: transparent;
693
+ border: 1px solid rgba(255, 255, 255, 0.1);
694
+ color: rgba(240, 238, 250, 0.4);
695
+ border-radius: 6px;
696
+ letter-spacing: 0.1em;
697
+ text-transform: uppercase;
698
+ }
699
+ /* Permission grant/settings buttons */
700
+ .onboarding-panel.onboarding-panel .flex.gap-2 button {
701
+ background: rgba(240, 185, 11, 0.08);
702
+ border: 1px solid rgba(240, 185, 11, 0.3);
703
+ color: rgba(240, 238, 250, 0.94);
704
+ border-radius: 6px;
705
+ font-weight: 600;
706
+ letter-spacing: 0.05em;
707
+ }
708
+
709
+ /* === RESPONSIVE === */
710
+ @media (max-width: 768px) {
711
+ .onboarding-ui-overlay {
712
+ flex-direction: column;
713
+ }
714
+ .onboarding-left {
715
+ flex-direction: row;
716
+ justify-content: center;
717
+ padding: 16px;
718
+ }
719
+ .onboarding-step-list {
720
+ flex-direction: row;
721
+ gap: 16px;
722
+ }
723
+ .onboarding-step-list::before {
724
+ display: none;
725
+ }
726
+ .onboarding-step-list::after {
727
+ display: none;
728
+ }
729
+ .onboarding-step-name {
730
+ display: none;
731
+ }
732
+ .onboarding-step-sub {
733
+ display: none;
734
+ }
735
+ .onboarding-right {
736
+ padding: 16px;
737
+ }
738
+ }