@rhinestone/deposit-modal 0.0.0-dev-20260608080045

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 (40) hide show
  1. package/README.md +134 -0
  2. package/dist/DepositModalReown-6SUEC5IU.mjs +60 -0
  3. package/dist/DepositModalReown-DNW4GH6L.cjs +60 -0
  4. package/dist/QRCode-5DXFNKI2.cjs +58 -0
  5. package/dist/QRCode-WUC652SH.mjs +58 -0
  6. package/dist/WithdrawModalReown-7UAGSOSU.mjs +37 -0
  7. package/dist/WithdrawModalReown-OUWBSKSM.cjs +37 -0
  8. package/dist/caip-CsslyHGL.d.cts +62 -0
  9. package/dist/caip-CsslyHGL.d.ts +62 -0
  10. package/dist/chunk-2SMS542Q.cjs +1654 -0
  11. package/dist/chunk-33H6O5UU.cjs +162 -0
  12. package/dist/chunk-6YRDD462.mjs +614 -0
  13. package/dist/chunk-GPSBM66J.mjs +162 -0
  14. package/dist/chunk-KAWJABTW.mjs +3765 -0
  15. package/dist/chunk-KJ2RR2D4.mjs +7619 -0
  16. package/dist/chunk-MILJQWPT.cjs +614 -0
  17. package/dist/chunk-RABZINV3.cjs +3765 -0
  18. package/dist/chunk-TKQYTBU6.mjs +1654 -0
  19. package/dist/chunk-VVJAIMKB.cjs +7619 -0
  20. package/dist/constants.cjs +70 -0
  21. package/dist/constants.d.cts +21 -0
  22. package/dist/constants.d.ts +21 -0
  23. package/dist/constants.mjs +70 -0
  24. package/dist/deposit.cjs +8 -0
  25. package/dist/deposit.d.cts +11 -0
  26. package/dist/deposit.d.ts +11 -0
  27. package/dist/deposit.mjs +8 -0
  28. package/dist/index.cjs +86 -0
  29. package/dist/index.d.cts +11 -0
  30. package/dist/index.d.ts +11 -0
  31. package/dist/index.mjs +86 -0
  32. package/dist/styles.css +5143 -0
  33. package/dist/styles.d.ts +3 -0
  34. package/dist/types-BMcGO5k_.d.cts +432 -0
  35. package/dist/types-BMcGO5k_.d.ts +432 -0
  36. package/dist/withdraw.cjs +8 -0
  37. package/dist/withdraw.d.cts +11 -0
  38. package/dist/withdraw.d.ts +11 -0
  39. package/dist/withdraw.mjs +8 -0
  40. package/package.json +190 -0
@@ -0,0 +1,5143 @@
1
+ /* ABOUTME: Styles for the deposit-modal component. */
2
+ /* ABOUTME: Uses CSS variables for theming - matches deposit-widget design exactly. */
3
+
4
+ /* Self-host the Figma typefaces so the modal renders with the correct
5
+ weights regardless of whether the consumer app loads Inter / Geist Mono. */
6
+ @import url("https://fonts.googleapis.com/css2?family=Geist+Mono:wght@500&family=Inter:wght@400;500;600;700&display=swap");
7
+
8
+ /* =============================================================================
9
+ CSS Variables (Light Mode Default) - Using Radix Gray Scale
10
+ ============================================================================= */
11
+
12
+ .rs-modal {
13
+ /* Tailwind zinc scale (matches Figma design tokens) */
14
+ --color-gray1: #fafafa;
15
+ --color-gray2: #f4f4f5;
16
+ --color-gray3: #f4f4f5;
17
+ --color-gray4: #e4e4e7;
18
+ --color-gray5: #d4d4d8;
19
+ --color-gray6: #d4d4d8;
20
+ --color-gray7: #a1a1aa;
21
+ --color-gray8: #9f9fa9;
22
+ --color-gray9: #9f9fa9;
23
+ --color-gray10: #71717b;
24
+ --color-gray11: #52525c;
25
+ --color-gray12: #27272a;
26
+
27
+ /* Blue (info) */
28
+ --color-blue3: #e6f4fe;
29
+ --color-blue4: #d5efff;
30
+ --color-blue9: #0090ff;
31
+ --color-blue10: #0588f0;
32
+ --color-blue11: #0d74ce;
33
+
34
+ /* Neutral accent (primary action) — zinc */
35
+ --color-neutral3: #f4f4f5;
36
+ --color-neutral4: #e4e4e7;
37
+ --color-neutral9: #27272a;
38
+ --color-neutral10: #18181b;
39
+ --color-neutral11: #09090b;
40
+
41
+ /* Green (success) */
42
+ --color-green3: #e6f6eb;
43
+ --color-green4: #d6f1df;
44
+ --color-green9: #30a46c;
45
+ --color-green10: #2b9a66;
46
+
47
+ /* Red (error/destructive) */
48
+ --color-red3: #feebec;
49
+ --color-red4: #ffdbdc;
50
+ --color-red9: #e5484d;
51
+ --color-red10: #dc3e42;
52
+
53
+ /* Amber (warning) */
54
+ --color-amber3: #fff7c2;
55
+ --color-amber8: #e2a336;
56
+ --color-amber11: #92400e;
57
+
58
+ /* Semantic colors */
59
+ --rs-background: #ffffff;
60
+ --rs-background-secondary: var(--color-gray1);
61
+ --rs-surface-subtle: #fcfbfb;
62
+ --rs-surface: var(--color-gray3);
63
+ --rs-surface-hover: var(--color-gray4);
64
+ /* Figma coin-select/selected — zinc-100 fill + zinc-300 border. */
65
+ --rs-asset-selected-bg: #f4f4f5;
66
+ --rs-asset-selected-border: #d4d4d8;
67
+ /* Figma: icon-wrapper tokens. Same as surface in light, but dark mode
68
+ diverges so we keep them separate. */
69
+ --rs-icon-wrapper-bg: #f4f4f5;
70
+ --rs-icon-wrapper-icon: #9f9fa9;
71
+ /* Figma input/label + view/icon-secondary — differ from the generic
72
+ gray scale: light-mode label/icon is zinc-600 (#52525c), dark mode
73
+ falls to zinc-400 (#9f9fa9). */
74
+ --rs-input-label: #52525c;
75
+ --rs-icon-secondary: #52525c;
76
+ /* Figma button-dark-ghost token — used by amount-step presets. */
77
+ --rs-button-ghost-bg: #e4e4e7;
78
+ --rs-button-ghost-bg-hover: #d4d4d8;
79
+ --rs-button-ghost-text: #27272a;
80
+
81
+ /* Primary (CTA). Default theme uses the dark-on-light pair.
82
+ A custom theme overrides these directly via inline CSS vars,
83
+ which short-circuits the [data-theme="dark"] block below so
84
+ a custom color stays consistent across modes. */
85
+ --rs-primary: var(--color-neutral9);
86
+ --rs-primary-hover: var(--color-neutral10);
87
+ --rs-primary-active: var(--color-neutral11);
88
+ --rs-primary-disabled-bg: var(--color-gray4);
89
+ --rs-primary-disabled-fg: var(--color-gray11);
90
+ --rs-primary-tint: var(--color-neutral3);
91
+ --rs-primary-foreground: #fafafa;
92
+
93
+ --rs-success: var(--color-green9);
94
+ --rs-success-tint: var(--color-green3);
95
+ /* Figma alert palette — alert/red (error) + alert/amber (warning). Amber
96
+ has no distinct border token in the design, so its border matches its bg. */
97
+ --rs-error: #fb2c36;
98
+ --rs-error-tint: #fef2f2;
99
+ --rs-error-border: #ffc9c9;
100
+ --rs-warning: #7b3306;
101
+ --rs-warning-tint: #fee685;
102
+ --rs-warning-border: #fee685;
103
+ /* Callout (generic error/warning notice) — lighter translucent "glass"
104
+ tints so the modal surface shows through. Kept separate from the solid
105
+ alert palette above, which input-error states and badges still use. */
106
+ --rs-callout-error-bg: rgba(251, 44, 54, 0.07);
107
+ --rs-callout-error-border: rgba(251, 44, 54, 0.18);
108
+ --rs-callout-error-text: #e7000b;
109
+ --rs-callout-warning-bg: rgba(245, 158, 11, 0.12);
110
+ --rs-callout-warning-border: rgba(245, 158, 11, 0.24);
111
+ --rs-callout-warning-text: #b45309;
112
+
113
+ --rs-foreground: var(--color-gray12);
114
+ --rs-muted: var(--color-gray10);
115
+ --rs-muted-foreground: var(--color-gray9);
116
+ --rs-icon: var(--color-gray11);
117
+
118
+ --rs-border: var(--color-gray2);
119
+ --rs-border-surface: var(--color-gray4);
120
+ --rs-border-accent: var(--color-neutral9);
121
+
122
+ --rs-secondary: var(--color-gray3);
123
+ --rs-secondary-hover: var(--color-gray4);
124
+
125
+ /* Figma: dropdown/select menu uses a tight 0/2/4 shadow at 0.25 so it
126
+ reads on every edge (including the side that sits against the modal). */
127
+ --rs-shadow-dropdown: 0 2px 4px rgba(0, 0, 0, 0.25);
128
+
129
+ /* Sizing */
130
+ --rs-height-button: 42px;
131
+ --rs-height-titlebar: 36px;
132
+ --rs-width-dialog: 380px;
133
+
134
+ /* Radius */
135
+ --rs-radius-none: 0;
136
+ --rs-radius-sm: 8px;
137
+ --rs-radius-md: 10px;
138
+ --rs-radius-lg: 14px;
139
+ --rs-radius-full: 9999px;
140
+ --rs-radius: var(--rs-radius-md);
141
+
142
+ /* Typography. Figma uses Inter; we list it first and fall back to the
143
+ system stack so consumers that load Inter get the exact design, and
144
+ everyone else gets a sensible default. */
145
+ font-family:
146
+ "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica,
147
+ Arial, sans-serif;
148
+ font-size: 14px;
149
+ line-height: 1.5;
150
+ color: var(--rs-foreground);
151
+ background-color: var(--rs-background);
152
+ -webkit-font-smoothing: antialiased;
153
+ -moz-osx-font-smoothing: grayscale;
154
+ position: relative;
155
+ /* Flex column so children (header + body) can split available height with
156
+ the body region scrolling when it overflows. Figma: modal applies a
157
+ 16px padding and 16px gap between the header row and the body. */
158
+ display: flex;
159
+ flex-direction: column;
160
+ flex: 1;
161
+ min-height: 0;
162
+ overflow: hidden;
163
+ padding: 16px;
164
+ gap: 16px;
165
+ }
166
+
167
+ /* =============================================================================
168
+ Dark Mode
169
+ ============================================================================= */
170
+
171
+ .rs-modal[data-theme="dark"] {
172
+ /* Zinc dark scale (matches Figma) */
173
+ --color-gray1: #0c0c0c;
174
+ --color-gray2: #18181b;
175
+ --color-gray3: #18181b;
176
+ --color-gray4: #27272a;
177
+ --color-gray5: #3f3f46;
178
+ --color-gray6: #3f3f46;
179
+ --color-gray7: #52525c;
180
+ --color-gray8: #71717b;
181
+ --color-gray9: #71717b;
182
+ --color-gray10: #9f9fa9;
183
+ --color-gray11: #d4d4d8;
184
+ --color-gray12: #e4e4e7;
185
+
186
+ /* Dark mode tints: translucent overlays instead of light pastels */
187
+ --color-blue3: rgba(0, 144, 255, 0.1);
188
+ --color-blue4: rgba(0, 144, 255, 0.16);
189
+ --color-blue10: #3b9eff;
190
+ --color-green3: rgba(48, 164, 108, 0.1);
191
+ --color-green4: rgba(48, 164, 108, 0.16);
192
+ --color-green10: #3cb179;
193
+ --color-red3: rgba(229, 72, 77, 0.1);
194
+ --color-red4: rgba(229, 72, 77, 0.16);
195
+ --color-red10: #f16a6e;
196
+ --color-amber3: rgba(226, 163, 54, 0.12);
197
+ --color-amber11: #fcd34d;
198
+
199
+ /* Inverted neutral pair: light-on-dark CTA */
200
+ --color-neutral3: rgba(244, 244, 245, 0.08);
201
+ --color-neutral4: rgba(244, 244, 245, 0.14);
202
+ --color-neutral9: #fafafa;
203
+ --color-neutral10: #e4e4e7;
204
+ --color-neutral11: #d4d4d8;
205
+
206
+ --rs-background: #0a0a0a;
207
+ /* Well / dropdown / QR-card surface in dark mode. Used by anything that
208
+ renders an elevated container (asset rows, QR well, select inputs). */
209
+ --rs-background-secondary: #18181b;
210
+ --rs-surface-subtle: #18181b;
211
+ --rs-surface: #27272a;
212
+ /* Figma: icon-wrapper/background — separate from --rs-surface so the
213
+ deposit-header icon tile stays #18181b in dark mode. */
214
+ --rs-icon-wrapper-bg: #18181b;
215
+ --rs-icon-wrapper-icon: #52525c;
216
+ --rs-input-label: #9f9fa9;
217
+ --rs-icon-secondary: #9f9fa9;
218
+ --rs-button-ghost-bg: #27272a;
219
+ --rs-button-ghost-bg-hover: #3f3f46;
220
+ --rs-button-ghost-text: #e4e4e7;
221
+ --rs-surface-hover: #3f3f46;
222
+ /* Figma coin-select/selected (dark) — zinc-900 fill + zinc-700 border. */
223
+ --rs-asset-selected-bg: #18181b;
224
+ --rs-asset-selected-border: #3f3f46;
225
+ /* Figma button-dark in dark mode: zinc-200 disc, near-black label. */
226
+ --rs-primary: #e4e4e7;
227
+ --rs-primary-hover: #d4d4d8;
228
+ --rs-primary-active: #9f9fa9;
229
+ --rs-primary-foreground: #09090b;
230
+ --rs-primary-disabled-bg: #27272a;
231
+ --rs-primary-disabled-fg: #71717b;
232
+ --rs-icon: var(--color-gray10);
233
+
234
+ --rs-shadow-dropdown:
235
+ 0 4px 20px rgba(0, 0, 0, 0.6), 0 1px 4px rgba(0, 0, 0, 0.4);
236
+
237
+ /* Figma alert palette (dark) — alert/red red-950 bg / red-800 border,
238
+ alert/amber amber-600 bg / amber-50 text (border matches bg). */
239
+ --rs-error-tint: #460809;
240
+ --rs-error-border: #9f0712;
241
+ --rs-warning: #fffbeb;
242
+ --rs-warning-tint: #e17100;
243
+ --rs-warning-border: #e17100;
244
+ /* Callout glass tints (dark) — translucent over the near-black surface. */
245
+ --rs-callout-error-bg: rgba(251, 44, 54, 0.13);
246
+ --rs-callout-error-border: rgba(251, 44, 54, 0.3);
247
+ --rs-callout-error-text: #ff6467;
248
+ --rs-callout-warning-bg: rgba(245, 158, 11, 0.13);
249
+ --rs-callout-warning-border: rgba(245, 158, 11, 0.28);
250
+ --rs-callout-warning-text: #fcd34d;
251
+
252
+ color-scheme: dark;
253
+ }
254
+
255
+ /* =============================================================================
256
+ Modal Overlay & Content
257
+ ============================================================================= */
258
+
259
+ .rs-modal-overlay {
260
+ position: fixed;
261
+ inset: 0;
262
+ z-index: 50;
263
+ display: flex;
264
+ align-items: center;
265
+ justify-content: center;
266
+ background-color: rgba(0, 0, 0, 0.5);
267
+ backdrop-filter: blur(2px);
268
+ opacity: 0;
269
+ transition: opacity 0.2s ease;
270
+ }
271
+
272
+ .rs-modal-overlay--open {
273
+ opacity: 1;
274
+ }
275
+
276
+ .rs-modal-content {
277
+ --rs-radius-lg: 16px;
278
+ --rs-background: #ffffff;
279
+ --rs-border: #f4f4f5;
280
+
281
+ position: relative;
282
+ width: 100%;
283
+ max-width: var(--rs-width-dialog, 380px);
284
+ /* Cap the modal at 600px (or viewport-40 on tiny screens) so long lists
285
+ scroll inside instead of growing the modal. */
286
+ max-height: min(600px, calc(100vh - 40px));
287
+ /* Explicit 0 (not the `auto` default) so the min-height transition
288
+ below has a definite starting value when :has() rules later raise
289
+ it to the iframe-mounted height. Transitions from `auto` are
290
+ unreliable in browsers and tend to apply instantly. */
291
+ min-height: 0;
292
+ display: flex;
293
+ flex-direction: column;
294
+ margin: 20px;
295
+ overflow: hidden;
296
+ background-color: var(--rs-background);
297
+ border: 1px solid var(--rs-border);
298
+ border-radius: var(--rs-radius-lg);
299
+ transform: scale(0.95);
300
+ transition:
301
+ transform 0.2s ease,
302
+ /* Smooth resize when the user moves between steps with different
303
+ widths (e.g. ConnectStep 400 → Connect-via-Swapped 469) instead of
304
+ a hard pop. */
305
+ max-width 240ms cubic-bezier(0.22, 1, 0.36, 1),
306
+ /* Same for height: when a flow starts that pre-reserves the iframe
307
+ size (via the min-height :has() rules below), grow smoothly from
308
+ the previous step's height instead of jumping. Min-height is on
309
+ modal-content rather than modal-body so the transitioned property
310
+ lives on an element that survives step swaps. */
311
+ min-height 280ms cubic-bezier(0.22, 1, 0.36, 1);
312
+ }
313
+
314
+ .rs-modal-content[data-theme="dark"] {
315
+ --rs-background: #0a0a0a;
316
+ --rs-border: #18181b;
317
+ }
318
+
319
+ .rs-modal-overlay--open .rs-modal-content {
320
+ transform: scale(1);
321
+ }
322
+
323
+ .rs-modal-content--inline {
324
+ position: static;
325
+ margin: 0;
326
+ max-width: 100%;
327
+ transform: none;
328
+ max-height: none;
329
+ }
330
+
331
+ /* =============================================================================
332
+ Modal Header
333
+ ============================================================================= */
334
+
335
+ .rs-modal-header {
336
+ display: flex;
337
+ align-items: center;
338
+ justify-content: space-between;
339
+ height: var(--rs-height-titlebar);
340
+ padding: 0 12px;
341
+ background-color: var(--rs-background-secondary);
342
+ border-bottom: 1px solid var(--rs-border);
343
+ }
344
+
345
+ .rs-modal-brand {
346
+ display: flex;
347
+ align-items: center;
348
+ gap: 8px;
349
+ }
350
+
351
+ .rs-modal-close {
352
+ display: flex;
353
+ align-items: center;
354
+ justify-content: center;
355
+ width: 24px;
356
+ height: 24px;
357
+ padding: 0;
358
+ background: transparent;
359
+ border: none;
360
+ border-radius: 4px;
361
+ color: var(--rs-foreground);
362
+ cursor: pointer;
363
+ transition: opacity 0.15s;
364
+ }
365
+
366
+ .rs-modal-close:hover {
367
+ opacity: 0.65;
368
+ }
369
+
370
+ .rs-modal-close svg {
371
+ width: 24px;
372
+ height: 24px;
373
+ }
374
+
375
+ /* =============================================================================
376
+ Modal Body
377
+ ============================================================================= */
378
+
379
+ .rs-modal-body {
380
+ display: flex;
381
+ flex-direction: column;
382
+ min-height: 280px;
383
+ overflow-y: auto;
384
+ overscroll-behavior: none;
385
+ /* overflow-y:auto forces overflow-x to clip too, which would cut the left/
386
+ right shadow of absolutely-positioned popups (e.g. the chain/token select
387
+ menus) that sit flush against this scroll container's edge. Pull the box
388
+ out to the modal's padding edge and pad it back so content stays put but
389
+ the clip region gains room for the popup shadow to render. */
390
+ margin-inline: -16px;
391
+ padding-inline: 16px;
392
+ }
393
+
394
+ /* Scrollbars are hidden throughout the modal UI. The portfolio list
395
+ (.rs-asset-list) is the sole exception — it keeps a visible scrollbar since
396
+ it's a long, independently-scrolling list. The :not() exemption also keeps
397
+ this rule's specificity above the per-container scrollbar rules elsewhere. */
398
+ .rs-modal *:not(.rs-asset-list) {
399
+ scrollbar-width: none;
400
+ }
401
+
402
+ .rs-modal *:not(.rs-asset-list)::-webkit-scrollbar {
403
+ width: 0;
404
+ height: 0;
405
+ }
406
+
407
+ /* =============================================================================
408
+ Button Styles
409
+ ============================================================================= */
410
+
411
+ .rs-button {
412
+ position: relative;
413
+ display: inline-flex;
414
+ align-items: center;
415
+ justify-content: center;
416
+ gap: 8px;
417
+ font-weight: 500;
418
+ white-space: nowrap;
419
+ border: 1px solid transparent;
420
+ border-radius: var(--rs-radius-sm);
421
+ cursor: pointer;
422
+ transition:
423
+ background-color 0.15s,
424
+ border-color 0.15s,
425
+ color 0.15s;
426
+ }
427
+
428
+ /* Pill variant — opt-in for places that still want a fully rounded button. */
429
+ .rs-button--pill {
430
+ border-radius: var(--rs-radius-full);
431
+ }
432
+
433
+ .rs-button:focus-visible {
434
+ outline: none;
435
+ box-shadow:
436
+ 0 0 0 2px var(--rs-background),
437
+ 0 0 0 4px var(--rs-border-accent);
438
+ }
439
+
440
+ .rs-button:disabled {
441
+ pointer-events: none;
442
+ }
443
+
444
+ /* Sizes */
445
+ .rs-button--size-default {
446
+ height: var(--rs-height-button);
447
+ padding: 0 16px;
448
+ font-size: 14px;
449
+ }
450
+
451
+ .rs-button--size-small {
452
+ height: 28px;
453
+ padding: 0 12px;
454
+ font-size: 13px;
455
+ }
456
+
457
+ /* Variants */
458
+ .rs-button--accent {
459
+ background-color: var(--rs-primary);
460
+ border-color: var(--rs-primary);
461
+ color: var(--rs-primary-foreground);
462
+ }
463
+
464
+ .rs-button--accent:hover:not(:disabled) {
465
+ background-color: var(--rs-primary-hover);
466
+ border-color: var(--rs-primary-hover);
467
+ }
468
+
469
+ .rs-button--accent:active:not(:disabled) {
470
+ background-color: var(--rs-primary-active);
471
+ border-color: var(--rs-primary-active);
472
+ }
473
+
474
+ .rs-button--accent:disabled {
475
+ background-color: var(--rs-primary-disabled-bg);
476
+ border-color: var(--rs-primary-disabled-bg);
477
+ color: var(--rs-primary-disabled-fg);
478
+ }
479
+
480
+ .rs-button--default {
481
+ background-color: var(--rs-surface);
482
+ border-color: var(--rs-surface);
483
+ color: var(--rs-foreground);
484
+ }
485
+
486
+ .rs-button--default:hover:not(:disabled) {
487
+ background-color: var(--rs-surface-hover);
488
+ }
489
+
490
+ .rs-button--destructive {
491
+ background-color: var(--rs-error-tint);
492
+ color: var(--rs-error);
493
+ }
494
+
495
+ .rs-button--destructive:hover:not(:disabled) {
496
+ background-color: var(--color-red4);
497
+ }
498
+
499
+ .rs-button--outline {
500
+ background-color: transparent;
501
+ border-color: var(--rs-primary);
502
+ color: var(--rs-primary);
503
+ }
504
+
505
+ .rs-button--outline:hover:not(:disabled) {
506
+ background-color: var(--rs-surface);
507
+ }
508
+
509
+ .rs-button--full-width {
510
+ width: 100%;
511
+ }
512
+
513
+ .rs-button__content--hidden {
514
+ opacity: 0;
515
+ }
516
+
517
+ .rs-button__spinner {
518
+ position: absolute;
519
+ inset: 0;
520
+ display: flex;
521
+ align-items: center;
522
+ justify-content: center;
523
+ }
524
+
525
+ .rs-button__loading-row {
526
+ display: inline-flex;
527
+ align-items: center;
528
+ gap: 8px;
529
+ }
530
+
531
+ /* =============================================================================
532
+ Input Styles
533
+ ============================================================================= */
534
+
535
+ .rs-input-wrapper {
536
+ display: flex;
537
+ flex-direction: column;
538
+ gap: 6px;
539
+ }
540
+
541
+ .rs-input-label {
542
+ font-size: 13px;
543
+ color: var(--rs-muted);
544
+ }
545
+
546
+ .rs-input {
547
+ display: flex;
548
+ height: 40px;
549
+ width: 100%;
550
+ padding: 0 16px;
551
+ font-size: 15px;
552
+ color: var(--rs-foreground);
553
+ background-color: var(--rs-background);
554
+ border: 1px solid var(--rs-border);
555
+ border-radius: var(--rs-radius-full);
556
+ transition:
557
+ border-color 0.15s,
558
+ box-shadow 0.15s;
559
+ }
560
+
561
+ .rs-input::placeholder {
562
+ color: var(--rs-muted);
563
+ }
564
+
565
+ .rs-input:focus {
566
+ outline: none;
567
+ border-color: var(--rs-primary);
568
+ box-shadow: 0 0 0 1px var(--rs-primary);
569
+ }
570
+
571
+ .rs-input:disabled {
572
+ cursor: not-allowed;
573
+ opacity: 0.5;
574
+ }
575
+
576
+ .rs-input--error {
577
+ border-color: var(--rs-error);
578
+ }
579
+
580
+ .rs-input--error:focus {
581
+ border-color: var(--rs-error);
582
+ box-shadow: 0 0 0 1px var(--rs-error);
583
+ }
584
+
585
+ .rs-input-error {
586
+ display: flex;
587
+ align-items: center;
588
+ gap: 4px;
589
+ font-size: 13px;
590
+ color: var(--rs-error);
591
+ }
592
+
593
+ .rs-input-error-icon {
594
+ width: 14px;
595
+ height: 14px;
596
+ }
597
+
598
+ /* =============================================================================
599
+ Spinner
600
+ ============================================================================= */
601
+
602
+ .rs-spinner {
603
+ width: 20px;
604
+ height: 20px;
605
+ animation: rs-spin 1s linear infinite;
606
+ }
607
+
608
+ .rs-spinner--sm {
609
+ width: 16px;
610
+ height: 16px;
611
+ }
612
+
613
+ .rs-spinner--lg {
614
+ width: 32px;
615
+ height: 32px;
616
+ }
617
+
618
+ @keyframes rs-spin {
619
+ from {
620
+ transform: rotate(0deg);
621
+ }
622
+ to {
623
+ transform: rotate(360deg);
624
+ }
625
+ }
626
+
627
+ /* =============================================================================
628
+ Step Content Styles
629
+ ============================================================================= */
630
+
631
+ .rs-step {
632
+ display: flex;
633
+ flex-direction: column;
634
+ flex-grow: 1;
635
+ }
636
+
637
+ .rs-step-header {
638
+ padding: 12px;
639
+ padding-bottom: 8px;
640
+ }
641
+
642
+ .rs-step-header-row {
643
+ display: flex;
644
+ align-items: center;
645
+ gap: 8px;
646
+ }
647
+
648
+ .rs-step-icon {
649
+ display: flex;
650
+ align-items: center;
651
+ justify-content: center;
652
+ width: 32px;
653
+ height: 32px;
654
+ border-radius: 50%;
655
+ }
656
+
657
+ .rs-step-icon--accent {
658
+ background-color: var(--rs-primary-tint);
659
+ color: var(--rs-primary);
660
+ }
661
+
662
+ .rs-step-icon--success {
663
+ background-color: var(--rs-success-tint);
664
+ color: var(--rs-success);
665
+ }
666
+
667
+ .rs-step-icon--error {
668
+ background-color: var(--rs-error-tint);
669
+ color: var(--rs-error);
670
+ }
671
+
672
+ .rs-step-icon--warning {
673
+ background-color: var(--rs-warning-tint);
674
+ color: var(--color-amber8);
675
+ }
676
+
677
+ .rs-step-icon svg {
678
+ width: 18px;
679
+ height: 18px;
680
+ }
681
+
682
+ .rs-step-title {
683
+ font-size: 17px;
684
+ font-weight: 600;
685
+ letter-spacing: -0.01em;
686
+ color: var(--rs-foreground);
687
+ }
688
+
689
+ .rs-step-title--error {
690
+ color: var(--rs-error);
691
+ }
692
+
693
+ .rs-step-description {
694
+ margin-top: 8px;
695
+ margin-bottom: 4px;
696
+ font-size: 15px;
697
+ line-height: 22px;
698
+ color: var(--rs-muted);
699
+ }
700
+
701
+ .rs-step-body {
702
+ flex-grow: 1;
703
+ padding: 12px;
704
+ padding-top: 6px;
705
+ }
706
+
707
+ /* Info panel (wallet details) */
708
+ .rs-info-panel {
709
+ background-color: var(--rs-background-secondary);
710
+ border: 1px solid var(--rs-border-surface);
711
+ border-radius: var(--rs-radius-sm);
712
+ }
713
+
714
+ .rs-info-panel-row {
715
+ display: flex;
716
+ align-items: center;
717
+ justify-content: space-between;
718
+ padding: 10px 12px;
719
+ }
720
+
721
+ .rs-info-panel-row + .rs-info-panel-row {
722
+ border-top: 1px solid var(--rs-border-surface);
723
+ }
724
+
725
+ .rs-info-panel-label {
726
+ font-size: 12px;
727
+ color: var(--rs-muted-foreground);
728
+ }
729
+
730
+ .rs-info-panel-value {
731
+ font-family:
732
+ "Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco,
733
+ Consolas, monospace;
734
+ font-size: 12px;
735
+ font-weight: 500;
736
+ color: var(--rs-foreground);
737
+ }
738
+
739
+ .rs-step-footer {
740
+ padding: 0 12px 4px;
741
+ }
742
+
743
+ .rs-step-footer--connect-empty {
744
+ padding-bottom: 14px;
745
+ margin-top: auto;
746
+ }
747
+
748
+ .rs-step-footer-buttons {
749
+ display: flex;
750
+ gap: 8px;
751
+ width: 100%;
752
+ }
753
+
754
+ /* =============================================================================
755
+ Card Styles (Processing step details)
756
+ ============================================================================= */
757
+
758
+ .rs-card {
759
+ background-color: var(--rs-surface);
760
+ border-radius: var(--rs-radius-md);
761
+ }
762
+
763
+ .rs-card-row {
764
+ display: flex;
765
+ align-items: center;
766
+ justify-content: space-between;
767
+ padding: 12px;
768
+ }
769
+
770
+ .rs-card-row + .rs-card-row {
771
+ border-top: 1px solid var(--rs-border-surface);
772
+ }
773
+
774
+ .rs-card-label {
775
+ font-size: 13px;
776
+ color: var(--rs-muted);
777
+ }
778
+
779
+ .rs-card-value {
780
+ font-size: 13px;
781
+ font-weight: 500;
782
+ color: var(--rs-foreground);
783
+ }
784
+
785
+ .rs-card-value--mono {
786
+ font-family:
787
+ "Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco,
788
+ Consolas, monospace;
789
+ font-size: 12px;
790
+ font-weight: 500;
791
+ }
792
+
793
+ .rs-card-value--accent {
794
+ color: var(--rs-primary);
795
+ }
796
+
797
+ /* =============================================================================
798
+ Processing Phase Board
799
+ ============================================================================= */
800
+
801
+ .rs-phase-board {
802
+ padding: 14px;
803
+ border-radius: var(--rs-radius-md);
804
+ border: 1px solid var(--rs-border-surface);
805
+ background: var(--rs-background-secondary);
806
+ }
807
+
808
+ .rs-modal[data-theme="dark"] .rs-phase-board {
809
+ background: var(--rs-surface);
810
+ }
811
+
812
+ /* Horizontal progress track */
813
+ .rs-track {
814
+ display: flex;
815
+ align-items: flex-start;
816
+ justify-content: space-between;
817
+ position: relative;
818
+ padding: 0 4px;
819
+ }
820
+
821
+ .rs-track-rail {
822
+ position: absolute;
823
+ top: 11px;
824
+ left: 16px;
825
+ right: 16px;
826
+ height: 3px;
827
+ border-radius: 2px;
828
+ background: var(--rs-border-surface);
829
+ overflow: hidden;
830
+ }
831
+
832
+ .rs-track-fill {
833
+ height: 100%;
834
+ border-radius: 2px;
835
+ background: var(--rs-success);
836
+ transition: width 0.6s ease;
837
+ }
838
+
839
+ .rs-track-fill--failed {
840
+ background: var(--rs-error);
841
+ }
842
+
843
+ .rs-track-checkpoint {
844
+ display: flex;
845
+ flex-direction: column;
846
+ align-items: center;
847
+ gap: 6px;
848
+ position: relative;
849
+ z-index: 1;
850
+ min-width: 48px;
851
+ }
852
+
853
+ .rs-track-node {
854
+ width: 22px;
855
+ height: 22px;
856
+ border-radius: 50%;
857
+ background: var(--rs-border);
858
+ display: flex;
859
+ align-items: center;
860
+ justify-content: center;
861
+ transition: background 0.3s ease, box-shadow 0.3s ease;
862
+ }
863
+
864
+ .rs-track-check-icon {
865
+ width: 11px;
866
+ height: 11px;
867
+ }
868
+
869
+ .rs-track-label {
870
+ font-size: 11px;
871
+ font-weight: 500;
872
+ color: var(--rs-muted);
873
+ white-space: nowrap;
874
+ }
875
+
876
+ @keyframes rs-track-pulse {
877
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(24, 24, 27, 0.15); }
878
+ 50% { box-shadow: 0 0 0 6px rgba(24, 24, 27, 0.08); }
879
+ }
880
+
881
+ .rs-modal[data-theme="dark"] .rs-track-checkpoint--active .rs-track-node {
882
+ animation-name: rs-track-pulse-dark;
883
+ }
884
+
885
+ @keyframes rs-track-pulse-dark {
886
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.15); }
887
+ 50% { box-shadow: 0 0 0 6px rgba(255, 255, 255, 0.08); }
888
+ }
889
+
890
+ .rs-track-checkpoint--active .rs-track-node {
891
+ background: var(--rs-primary);
892
+ animation: rs-track-pulse 2s ease-in-out infinite;
893
+ }
894
+
895
+ .rs-track-checkpoint--active .rs-track-label {
896
+ font-weight: 600;
897
+ color: var(--rs-foreground);
898
+ }
899
+
900
+ .rs-track-checkpoint--warning .rs-track-node {
901
+ background: var(--color-amber8);
902
+ box-shadow: 0 0 0 4px var(--rs-warning-tint);
903
+ }
904
+
905
+ .rs-track-checkpoint--warning .rs-track-label {
906
+ color: var(--color-amber8);
907
+ }
908
+
909
+ .rs-track-checkpoint--complete .rs-track-node {
910
+ background: var(--rs-success);
911
+ }
912
+
913
+ .rs-track-checkpoint--complete .rs-track-check-icon {
914
+ stroke: white;
915
+ }
916
+
917
+ .rs-track-checkpoint--complete .rs-track-label {
918
+ color: var(--rs-success);
919
+ }
920
+
921
+ .rs-track-checkpoint--failed .rs-track-node {
922
+ background: var(--rs-error);
923
+ }
924
+
925
+ .rs-track-checkpoint--failed .rs-track-check-icon {
926
+ stroke: white;
927
+ }
928
+
929
+ .rs-track-checkpoint--failed .rs-track-label {
930
+ color: var(--rs-error);
931
+ }
932
+
933
+ .rs-phase-divider {
934
+ height: 1px;
935
+ margin: 8px 0;
936
+ background: var(--rs-border-surface);
937
+ }
938
+
939
+ .rs-phase-details {
940
+ display: flex;
941
+ flex-direction: column;
942
+ gap: 4px;
943
+ }
944
+
945
+ .rs-phase-detail-row {
946
+ display: flex;
947
+ align-items: center;
948
+ justify-content: space-between;
949
+ height: 24px;
950
+ }
951
+
952
+ .rs-phase-detail-label {
953
+ font-size: 12px;
954
+ color: var(--rs-muted);
955
+ }
956
+
957
+ .rs-phase-detail-value {
958
+ font-size: 12px;
959
+ font-weight: 600;
960
+ color: var(--rs-foreground);
961
+ }
962
+
963
+ /* =============================================================================
964
+ Asset Row
965
+ ============================================================================= */
966
+
967
+ .rs-asset-row {
968
+ width: 100%;
969
+ display: flex;
970
+ align-items: center;
971
+ gap: 16px;
972
+ padding: 16px 12px;
973
+ background-color: transparent;
974
+ border: none;
975
+ border-radius: 8px;
976
+ cursor: pointer;
977
+ text-align: left;
978
+ font-family: inherit;
979
+ transition: background-color 0.15s;
980
+ }
981
+
982
+ .rs-asset-row:hover:not(:disabled) {
983
+ background-color: var(--rs-surface-subtle);
984
+ }
985
+
986
+ .rs-asset-row:focus-visible {
987
+ outline: 2px solid var(--rs-border-accent);
988
+ outline-offset: 2px;
989
+ }
990
+
991
+ /* Figma coin-select/selected: zinc-100 fill + 1px zinc-300 border (dark:
992
+ zinc-900 fill + zinc-700 border). The inset box-shadow draws the border
993
+ without shifting layout. Listed with :hover so the selected fill persists
994
+ when the row is hovered (a bare :hover out-specifies a single class). */
995
+ .rs-asset-row--selected,
996
+ .rs-asset-row--selected:hover:not(:disabled) {
997
+ background-color: var(--rs-asset-selected-bg);
998
+ box-shadow: inset 0 0 0 1px var(--rs-asset-selected-border);
999
+ }
1000
+
1001
+ .rs-asset-info {
1002
+ display: flex;
1003
+ flex: 1;
1004
+ min-width: 0;
1005
+ align-items: center;
1006
+ gap: 16px;
1007
+ }
1008
+
1009
+ /* Icon group — token glyph (32px) with the chain glyph (14px) overlapping
1010
+ the bottom-right corner via flex `items-end` + negative right margin
1011
+ on the token icon (matches Figma's `mr-[-10px]` layout). */
1012
+ .rs-asset-icon-wrapper {
1013
+ display: flex;
1014
+ align-items: flex-end;
1015
+ flex-shrink: 0;
1016
+ }
1017
+
1018
+ .rs-asset-icon {
1019
+ width: 28px;
1020
+ height: 28px;
1021
+ margin-right: -10px;
1022
+ border-radius: 50%;
1023
+ background-color: var(--rs-surface);
1024
+ display: flex;
1025
+ align-items: center;
1026
+ justify-content: center;
1027
+ font-size: 11px;
1028
+ font-weight: 600;
1029
+ color: var(--rs-muted);
1030
+ overflow: hidden;
1031
+ }
1032
+
1033
+ .rs-asset-icon img {
1034
+ width: 100%;
1035
+ height: 100%;
1036
+ border-radius: 50%;
1037
+ object-fit: cover;
1038
+ }
1039
+
1040
+ .rs-asset-chain-badge {
1041
+ width: 14px;
1042
+ height: 14px;
1043
+ border-radius: 50%;
1044
+ background-color: var(--rs-background);
1045
+ display: flex;
1046
+ align-items: center;
1047
+ justify-content: center;
1048
+ font-size: 7px;
1049
+ font-weight: 700;
1050
+ overflow: hidden;
1051
+ }
1052
+
1053
+ .rs-asset-chain-badge img {
1054
+ width: 100%;
1055
+ height: 100%;
1056
+ border-radius: 50%;
1057
+ object-fit: cover;
1058
+ }
1059
+
1060
+ .rs-asset-text {
1061
+ display: flex;
1062
+ flex: 1;
1063
+ min-width: 0;
1064
+ flex-direction: column;
1065
+ gap: 4px;
1066
+ }
1067
+
1068
+ .rs-asset-name-row {
1069
+ display: flex;
1070
+ align-items: center;
1071
+ gap: 4px;
1072
+ white-space: nowrap;
1073
+ }
1074
+
1075
+ .rs-asset-name {
1076
+ font-size: 14px;
1077
+ font-weight: 700;
1078
+ color: var(--rs-foreground);
1079
+ line-height: normal;
1080
+ }
1081
+
1082
+ .rs-asset-chain {
1083
+ font-size: 12px;
1084
+ font-weight: 500;
1085
+ color: var(--rs-muted);
1086
+ line-height: normal;
1087
+ }
1088
+
1089
+ .rs-asset-balance-small {
1090
+ font-size: 12px;
1091
+ font-weight: 500;
1092
+ color: var(--rs-muted);
1093
+ line-height: normal;
1094
+ }
1095
+
1096
+ .rs-asset-balance {
1097
+ flex-shrink: 0;
1098
+ font-size: 12px;
1099
+ font-weight: 500;
1100
+ color: var(--rs-foreground);
1101
+ text-align: right;
1102
+ font-feature-settings: "tnum";
1103
+ line-height: normal;
1104
+ }
1105
+
1106
+ .rs-asset-list {
1107
+ display: flex;
1108
+ flex-direction: column;
1109
+ gap: 4px;
1110
+ /* Figma's asset list is 284px — exactly 4 rows (4×68 + 3×4 gaps). Cap here
1111
+ so wallets with many assets scroll inside instead of growing the modal
1112
+ past the design's height. */
1113
+ max-height: 284px;
1114
+ overflow-y: auto;
1115
+ overscroll-behavior: contain;
1116
+ /* Pull rows back to the row's natural left edge inside a scrollable
1117
+ container so the scrollbar gutter doesn't visually shift content. */
1118
+ scrollbar-gutter: stable;
1119
+ }
1120
+
1121
+ .rs-asset-list::-webkit-scrollbar {
1122
+ width: 6px;
1123
+ }
1124
+
1125
+ .rs-asset-list::-webkit-scrollbar-track {
1126
+ background: transparent;
1127
+ }
1128
+
1129
+ .rs-asset-list::-webkit-scrollbar-thumb {
1130
+ background-color: var(--rs-surface-hover);
1131
+ border-radius: var(--rs-radius-full);
1132
+ }
1133
+
1134
+ .rs-asset-list::-webkit-scrollbar-thumb:hover {
1135
+ background-color: var(--rs-muted-foreground);
1136
+ }
1137
+
1138
+ /* =============================================================================
1139
+ Alert Boxes
1140
+ ============================================================================= */
1141
+
1142
+ .rs-alert {
1143
+ display: flex;
1144
+ align-items: flex-start;
1145
+ gap: 8px;
1146
+ padding: 12px;
1147
+ border-radius: var(--rs-radius-md);
1148
+ }
1149
+
1150
+ .rs-alert--info {
1151
+ background-color: var(--rs-primary-tint);
1152
+ }
1153
+
1154
+ .rs-alert--info .rs-alert-icon,
1155
+ .rs-alert--info .rs-alert-text {
1156
+ color: var(--color-blue10);
1157
+ }
1158
+
1159
+ .rs-alert--success {
1160
+ background-color: var(--rs-success-tint);
1161
+ }
1162
+
1163
+ .rs-alert--success .rs-alert-icon,
1164
+ .rs-alert--success .rs-alert-text {
1165
+ color: var(--color-green10);
1166
+ }
1167
+
1168
+ .rs-alert--error {
1169
+ background-color: var(--rs-error-tint);
1170
+ }
1171
+
1172
+ .rs-alert--error .rs-alert-icon,
1173
+ .rs-alert--error .rs-alert-text {
1174
+ color: var(--color-red10);
1175
+ }
1176
+
1177
+ .rs-alert--warning {
1178
+ background-color: var(--rs-warning-tint);
1179
+ }
1180
+
1181
+ .rs-alert--warning .rs-alert-icon,
1182
+ .rs-alert--warning .rs-alert-text {
1183
+ color: var(--color-amber8);
1184
+ }
1185
+
1186
+ .rs-alert-icon {
1187
+ flex-shrink: 0;
1188
+ width: 16px;
1189
+ height: 16px;
1190
+ margin-top: 2px;
1191
+ }
1192
+
1193
+ .rs-alert-text {
1194
+ font-size: 13px;
1195
+ line-height: 1.5;
1196
+ }
1197
+
1198
+ /* =============================================================================
1199
+ Utility Classes
1200
+ ============================================================================= */
1201
+
1202
+ .rs-text-primary {
1203
+ color: var(--rs-foreground);
1204
+ }
1205
+
1206
+ .rs-text-secondary {
1207
+ color: var(--rs-muted);
1208
+ }
1209
+
1210
+ .rs-text-tertiary {
1211
+ color: var(--rs-muted-foreground);
1212
+ }
1213
+
1214
+ .rs-text-accent {
1215
+ color: var(--rs-primary);
1216
+ }
1217
+
1218
+ .rs-text-success {
1219
+ color: var(--rs-success);
1220
+ }
1221
+
1222
+ .rs-text-error {
1223
+ color: var(--rs-error);
1224
+ }
1225
+
1226
+ .rs-text-sm {
1227
+ font-size: 13px;
1228
+ }
1229
+
1230
+ .rs-text-xs {
1231
+ font-size: 12px;
1232
+ }
1233
+
1234
+ .rs-text-lg {
1235
+ font-size: 15px;
1236
+ }
1237
+
1238
+ .rs-text-xl {
1239
+ font-size: 18px;
1240
+ }
1241
+
1242
+ .rs-font-medium {
1243
+ font-weight: 500;
1244
+ }
1245
+
1246
+ .rs-font-mono {
1247
+ font-family:
1248
+ "Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco,
1249
+ Consolas, monospace;
1250
+ }
1251
+
1252
+ .rs-mt-2 {
1253
+ margin-top: 8px;
1254
+ }
1255
+
1256
+ .rs-mt-3 {
1257
+ margin-top: 12px;
1258
+ }
1259
+
1260
+ .rs-mb-2 {
1261
+ margin-bottom: 8px;
1262
+ }
1263
+
1264
+ .rs-mb-3 {
1265
+ margin-bottom: 12px;
1266
+ }
1267
+
1268
+ .rs-space-y-3 > * + * {
1269
+ margin-top: 12px;
1270
+ }
1271
+
1272
+ .rs-flex {
1273
+ display: flex;
1274
+ }
1275
+
1276
+ .rs-flex-col {
1277
+ flex-direction: column;
1278
+ }
1279
+
1280
+ .rs-items-center {
1281
+ align-items: center;
1282
+ }
1283
+
1284
+ .rs-justify-between {
1285
+ justify-content: space-between;
1286
+ }
1287
+
1288
+ .rs-gap-2 {
1289
+ gap: 8px;
1290
+ }
1291
+
1292
+ .rs-gap-3 {
1293
+ gap: 12px;
1294
+ }
1295
+
1296
+ .rs-w-full {
1297
+ width: 100%;
1298
+ }
1299
+
1300
+ .rs-text-center {
1301
+ text-align: center;
1302
+ }
1303
+
1304
+ .rs-text-right {
1305
+ text-align: right;
1306
+ }
1307
+
1308
+ /* =============================================================================
1309
+ Powered By Footer
1310
+ ============================================================================= */
1311
+
1312
+ .rs-powered-by {
1313
+ display: flex;
1314
+ align-items: center;
1315
+ justify-content: center;
1316
+ gap: 4px;
1317
+ width: 100%;
1318
+ /* `border-box` so the 16px side padding counts INTO the 100% width
1319
+ instead of adding 32px on top of it (which otherwise pushes the
1320
+ footer past containers with their own horizontal padding — e.g.
1321
+ the tracker — and paints a phantom horizontal scrollbar). */
1322
+ box-sizing: border-box;
1323
+ padding: 0 16px 16px;
1324
+ font-size: 11px;
1325
+ font-weight: 500;
1326
+ line-height: normal;
1327
+ color: var(--rs-muted);
1328
+ }
1329
+
1330
+ .rs-powered-by-link {
1331
+ display: inline-flex;
1332
+ align-items: center;
1333
+ color: inherit;
1334
+ text-decoration: none;
1335
+ }
1336
+
1337
+ .rs-powered-by-logo {
1338
+ display: block;
1339
+ width: 72px;
1340
+ height: 16px;
1341
+ color: currentColor;
1342
+ }
1343
+
1344
+ /* =============================================================================
1345
+ Loading State
1346
+ ============================================================================= */
1347
+
1348
+ .rs-loading-state {
1349
+ display: flex;
1350
+ flex-direction: column;
1351
+ align-items: center;
1352
+ justify-content: center;
1353
+ padding: 40px 12px;
1354
+ gap: 12px;
1355
+ }
1356
+
1357
+ .rs-loading-text {
1358
+ text-align: center;
1359
+ }
1360
+
1361
+ .rs-loading-title {
1362
+ font-size: 16px;
1363
+ font-weight: 500;
1364
+ color: var(--rs-foreground);
1365
+ }
1366
+
1367
+ .rs-loading-subtitle {
1368
+ margin-top: 4px;
1369
+ font-size: 13px;
1370
+ color: var(--rs-muted-foreground);
1371
+ }
1372
+
1373
+ /* =============================================================================
1374
+ Empty State
1375
+ ============================================================================= */
1376
+
1377
+ .rs-empty-state {
1378
+ display: flex;
1379
+ flex-direction: column;
1380
+ align-items: center;
1381
+ justify-content: center;
1382
+ padding: 24px 12px 16px;
1383
+ gap: 6px;
1384
+ }
1385
+
1386
+ .rs-empty-icon {
1387
+ width: 32px;
1388
+ height: 32px;
1389
+ color: var(--rs-muted-foreground);
1390
+ }
1391
+
1392
+ .rs-empty-text {
1393
+ font-size: 13px;
1394
+ color: var(--rs-muted-foreground);
1395
+ }
1396
+
1397
+ .rs-empty-address {
1398
+ font-size: 12px;
1399
+ font-family: monospace;
1400
+ color: var(--rs-muted-foreground);
1401
+ opacity: 0.7;
1402
+ margin-top: 4px;
1403
+ padding: 4px 10px;
1404
+ background: var(--rs-surface);
1405
+ border-radius: 6px;
1406
+ }
1407
+
1408
+ .rs-empty-disconnect {
1409
+ margin-top: 8px;
1410
+ padding: 0;
1411
+ font-size: 11px;
1412
+ font-weight: 400;
1413
+ color: var(--rs-muted-foreground);
1414
+ background: transparent;
1415
+ border: none;
1416
+ cursor: pointer;
1417
+ transition: color 0.15s;
1418
+ font-family: inherit;
1419
+ text-decoration: underline;
1420
+ text-underline-offset: 2px;
1421
+ }
1422
+
1423
+ .rs-empty-disconnect:hover {
1424
+ color: var(--rs-foreground);
1425
+ }
1426
+
1427
+ /* =============================================================================
1428
+ Link Styles
1429
+ ============================================================================= */
1430
+
1431
+ .rs-link {
1432
+ color: var(--color-blue10);
1433
+ text-decoration: none;
1434
+ transition: opacity 0.15s;
1435
+ }
1436
+
1437
+ .rs-link:hover {
1438
+ text-decoration: underline;
1439
+ }
1440
+
1441
+ .rs-link-external {
1442
+ display: inline-flex;
1443
+ align-items: center;
1444
+ gap: 6px;
1445
+ }
1446
+
1447
+ .rs-link-external svg {
1448
+ width: 12px;
1449
+ height: 12px;
1450
+ flex-shrink: 0;
1451
+ }
1452
+
1453
+ /* =============================================================================
1454
+ Chain Switch Warning
1455
+ ============================================================================= */
1456
+
1457
+ .rs-chain-switch {
1458
+ display: flex;
1459
+ align-items: center;
1460
+ justify-content: space-between;
1461
+ gap: 12px;
1462
+ padding: 12px;
1463
+ background-color: var(--rs-warning-tint);
1464
+ border-radius: var(--rs-radius-md);
1465
+ }
1466
+
1467
+ .rs-chain-switch-text {
1468
+ font-size: 13px;
1469
+ color: var(--rs-foreground);
1470
+ }
1471
+
1472
+ /* =============================================================================
1473
+ Animations
1474
+ ============================================================================= */
1475
+
1476
+ @keyframes rs-fadeIn {
1477
+ from {
1478
+ opacity: 0;
1479
+ }
1480
+ to {
1481
+ opacity: 1;
1482
+ }
1483
+ }
1484
+
1485
+ @keyframes rs-scaleIn {
1486
+ from {
1487
+ transform: scale(0.8);
1488
+ opacity: 0;
1489
+ }
1490
+ to {
1491
+ transform: scale(1);
1492
+ opacity: 1;
1493
+ }
1494
+ }
1495
+
1496
+ .rs-animate-fadeIn {
1497
+ animation: rs-fadeIn 0.3s ease-out forwards;
1498
+ }
1499
+
1500
+ .rs-animate-scaleIn {
1501
+ animation: rs-scaleIn 0.4s ease-out forwards;
1502
+ }
1503
+
1504
+ /* =============================================================================
1505
+ Progress Bar
1506
+ ============================================================================= */
1507
+
1508
+ .rs-progress-bar {
1509
+ width: 100%;
1510
+ height: 4px;
1511
+ background-color: var(--rs-surface);
1512
+ border-radius: var(--rs-radius-full);
1513
+ overflow: hidden;
1514
+ }
1515
+
1516
+ .rs-progress-bar-fill {
1517
+ height: 100%;
1518
+ background-color: var(--rs-primary);
1519
+ border-radius: var(--rs-radius-full);
1520
+ }
1521
+
1522
+ .rs-progress-bar-fill--indeterminate {
1523
+ width: 30%;
1524
+ animation: rs-progress-indeterminate 1.5s ease-in-out infinite;
1525
+ }
1526
+
1527
+ @keyframes rs-progress-indeterminate {
1528
+ 0% {
1529
+ transform: translateX(-100%);
1530
+ }
1531
+ 100% {
1532
+ transform: translateX(400%);
1533
+ }
1534
+ }
1535
+
1536
+ /* =============================================================================
1537
+ Connect Step Centered Layout
1538
+ ============================================================================= */
1539
+
1540
+ .rs-connect-centered {
1541
+ display: flex;
1542
+ flex-direction: column;
1543
+ width: 100%;
1544
+ }
1545
+
1546
+ .rs-connect-centered--wallets {
1547
+ padding: 16px;
1548
+ }
1549
+
1550
+ .rs-connect-centered--minimal {
1551
+ display: flex;
1552
+ flex: 1;
1553
+ align-items: center;
1554
+ justify-content: center;
1555
+ padding: 24px 16px;
1556
+ }
1557
+
1558
+ .rs-connect-wallet-list {
1559
+ width: 100%;
1560
+ display: flex;
1561
+ flex-direction: column;
1562
+ gap: 6px;
1563
+ }
1564
+
1565
+ .rs-connect-wallet-row {
1566
+ display: flex;
1567
+ align-items: center;
1568
+ gap: 10px;
1569
+ width: 100%;
1570
+ padding: 12px 14px;
1571
+ border: 1px solid var(--rs-border-surface);
1572
+ border-radius: var(--rs-radius-lg);
1573
+ background: var(--rs-background-secondary);
1574
+ color: inherit;
1575
+ cursor: pointer;
1576
+ text-align: left;
1577
+ transition:
1578
+ border-color 0.15s ease,
1579
+ background-color 0.15s ease;
1580
+ }
1581
+
1582
+ .rs-connect-wallet-row:hover {
1583
+ border-color: var(--rs-border);
1584
+ background: var(--rs-surface);
1585
+ }
1586
+
1587
+ .rs-connect-wallet-row--selected {
1588
+ border-color: var(--rs-primary);
1589
+ background: var(--rs-primary-tint);
1590
+ }
1591
+
1592
+ .rs-connect-wallet-row--action {
1593
+ border-style: dashed;
1594
+ }
1595
+
1596
+ .rs-connect-wallet-icon {
1597
+ display: flex;
1598
+ align-items: center;
1599
+ justify-content: center;
1600
+ width: 32px;
1601
+ height: 32px;
1602
+ min-width: 32px;
1603
+ border-radius: 50%;
1604
+ background: var(--rs-surface);
1605
+ color: var(--rs-muted);
1606
+ transition:
1607
+ background-color 0.15s ease,
1608
+ color 0.15s ease;
1609
+ }
1610
+
1611
+ .rs-connect-wallet-icon svg {
1612
+ width: 20px;
1613
+ height: 20px;
1614
+ }
1615
+
1616
+ .rs-connect-wallet-icon--selected {
1617
+ background: var(--rs-primary-tint);
1618
+ color: var(--rs-primary);
1619
+ }
1620
+
1621
+ .rs-connect-wallet-icon--action {
1622
+ background: var(--rs-background-secondary);
1623
+ color: var(--rs-muted-foreground);
1624
+ }
1625
+
1626
+ .rs-connect-wallet-row:hover .rs-connect-wallet-icon--action {
1627
+ background: var(--rs-surface);
1628
+ }
1629
+
1630
+ .rs-connect-wallet-indicator {
1631
+ display: flex;
1632
+ align-items: center;
1633
+ justify-content: center;
1634
+ width: 16px;
1635
+ height: 16px;
1636
+ min-width: 16px;
1637
+ color: var(--rs-muted-foreground);
1638
+ margin-left: auto;
1639
+ transition: color 0.15s ease;
1640
+ }
1641
+
1642
+ .rs-connect-wallet-indicator svg {
1643
+ width: 14px;
1644
+ height: 14px;
1645
+ }
1646
+
1647
+ .rs-connect-wallet-row--selected .rs-connect-wallet-indicator {
1648
+ color: var(--rs-primary);
1649
+ }
1650
+
1651
+ .rs-connect-wallet-meta {
1652
+ display: flex;
1653
+ flex-direction: column;
1654
+ gap: 2px;
1655
+ min-width: 0;
1656
+ flex: 1;
1657
+ }
1658
+
1659
+ .rs-connect-wallet-label {
1660
+ font-size: 14px;
1661
+ font-weight: 600;
1662
+ color: var(--rs-foreground);
1663
+ }
1664
+
1665
+ .rs-connect-wallet-address {
1666
+ font-size: 12px;
1667
+ color: var(--rs-muted);
1668
+ }
1669
+
1670
+ /* Modal screen container — shared layout primitive. 12px padding all
1671
+ around, 16px gap between the body slot and the powered-by footer,
1672
+ footer anchored to the modal bottom edge. Used by every screen
1673
+ (deposit method, asset select, amount, confirm, …) so the vertical
1674
+ rhythm stays consistent. */
1675
+ .rs-screen {
1676
+ display: flex;
1677
+ flex-direction: column;
1678
+ flex-grow: 1;
1679
+ /* Outer padding now lives on the parent .rs-modal; this container only
1680
+ manages the vertical rhythm between body slot and powered-by. */
1681
+ padding: 0;
1682
+ gap: 16px;
1683
+ /* Each screen fades in on mount so step-to-step transitions feel
1684
+ progressive instead of a hard swap. Short enough that the user
1685
+ doesn't perceive a delay; long enough to look intentional. */
1686
+ animation: rs-screen-enter 180ms ease-out;
1687
+ }
1688
+
1689
+ @keyframes rs-screen-enter {
1690
+ from {
1691
+ opacity: 0;
1692
+ transform: translateY(4px);
1693
+ }
1694
+ to {
1695
+ opacity: 1;
1696
+ transform: translateY(0);
1697
+ }
1698
+ }
1699
+
1700
+ /* Body slot — direct child of .rs-screen. Always uses a 16px internal
1701
+ gap (per the compact sizing pass). */
1702
+ .rs-screen-body {
1703
+ display: flex;
1704
+ flex-direction: column;
1705
+ gap: 16px;
1706
+ }
1707
+
1708
+ /* Retained as a no-op alias for callers that still pass the legacy
1709
+ modifier; the gap matches the default now. */
1710
+ .rs-screen-body--gap-32 {
1711
+ gap: 16px;
1712
+ }
1713
+
1714
+ /* Tiny utility row for things like the "Disconnect wallet" link that
1715
+ live between the body slot and powered-by. The negative margin
1716
+ shrinks the parent's gap to a tight visual gap above the link. */
1717
+ .rs-screen-tight-row {
1718
+ display: flex;
1719
+ justify-content: center;
1720
+ margin-top: -4px;
1721
+ }
1722
+
1723
+ .rs-screen-tight-row .rs-connect-wallet-manage {
1724
+ margin-top: 0;
1725
+ }
1726
+
1727
+ /* Powered-by sits inside the screen container, so its own padding would
1728
+ double up on the 16px container padding — reset it, and use
1729
+ `margin-top: auto` so it anchors to the bottom edge. */
1730
+ .rs-screen > .rs-powered-by {
1731
+ padding: 0;
1732
+ margin-top: auto;
1733
+ }
1734
+
1735
+ .rs-connect-wallet-manage {
1736
+ margin-top: 10px;
1737
+ padding: 0;
1738
+ border: none;
1739
+ background: transparent;
1740
+ font-size: 12px;
1741
+ color: var(--rs-muted);
1742
+ cursor: pointer;
1743
+ }
1744
+
1745
+ .rs-connect-wallet-manage:hover {
1746
+ color: var(--rs-foreground);
1747
+ }
1748
+
1749
+ /* Inline "Disconnect" pill that sits inside a connected-wallet ListRow's
1750
+ meta slot. 14/Medium text, transparent background so the row's surface
1751
+ shows through. Vertical padding stays under the 36px title+subtitle block
1752
+ so the pill never inflates the row past the 60px the other method cards
1753
+ use — keeps Transfer crypto / External wallet / Polymarket rows uniform. */
1754
+ .rs-list-row-action {
1755
+ appearance: none;
1756
+ border: none;
1757
+ background: transparent;
1758
+ padding: 8px 12px;
1759
+ border-radius: 8px;
1760
+ font-family: inherit;
1761
+ font-size: 14px;
1762
+ font-weight: 500;
1763
+ color: var(--rs-foreground);
1764
+ cursor: pointer;
1765
+ white-space: nowrap;
1766
+ }
1767
+
1768
+ .rs-list-row-action:hover {
1769
+ background: var(--rs-surface-hover);
1770
+ }
1771
+
1772
+ .rs-list-row-action:focus-visible {
1773
+ outline: 2px solid var(--rs-border-accent);
1774
+ outline-offset: 2px;
1775
+ }
1776
+
1777
+ .rs-connect-transfer-link {
1778
+ margin-top: 10px;
1779
+ padding: 0;
1780
+ border: none;
1781
+ background: transparent;
1782
+ font-size: 13px;
1783
+ color: var(--rs-muted);
1784
+ cursor: pointer;
1785
+ text-align: center;
1786
+ width: 100%;
1787
+ }
1788
+
1789
+ .rs-connect-transfer-link:hover {
1790
+ color: var(--rs-foreground);
1791
+ }
1792
+
1793
+ .rs-connect-empty {
1794
+ width: 100%;
1795
+ max-width: 280px;
1796
+ display: flex;
1797
+ flex-direction: column;
1798
+ align-items: center;
1799
+ text-align: center;
1800
+ }
1801
+
1802
+ .rs-connect-empty-graphic {
1803
+ position: relative;
1804
+ width: 128px;
1805
+ height: 128px;
1806
+ display: flex;
1807
+ align-items: center;
1808
+ justify-content: center;
1809
+ margin-bottom: 10px;
1810
+ }
1811
+
1812
+ .rs-connect-empty-orbit {
1813
+ position: absolute;
1814
+ border-radius: 50%;
1815
+ border: 1px solid var(--rs-border);
1816
+ }
1817
+
1818
+ .rs-connect-empty-orbit--outer {
1819
+ inset: 0;
1820
+ opacity: 0.5;
1821
+ animation: rs-orbit-spin 14s linear infinite;
1822
+ }
1823
+
1824
+ .rs-connect-empty-orbit--inner {
1825
+ inset: 14px;
1826
+ opacity: 0.35;
1827
+ border-style: dashed;
1828
+ animation: rs-orbit-spin 10s linear infinite reverse;
1829
+ }
1830
+
1831
+ .rs-connect-empty-core {
1832
+ width: 68px;
1833
+ height: 68px;
1834
+ border-radius: 50%;
1835
+ border: 1px solid var(--rs-border-surface);
1836
+ background:
1837
+ radial-gradient(circle at 30% 30%, var(--rs-primary-tint), transparent 70%),
1838
+ var(--rs-background-secondary);
1839
+ display: flex;
1840
+ align-items: center;
1841
+ justify-content: center;
1842
+ color: var(--rs-primary);
1843
+ }
1844
+
1845
+ .rs-connect-empty-core svg {
1846
+ width: 30px;
1847
+ height: 30px;
1848
+ }
1849
+
1850
+ .rs-connect-empty-dot {
1851
+ position: absolute;
1852
+ width: 8px;
1853
+ height: 8px;
1854
+ border-radius: 50%;
1855
+ background: var(--rs-primary);
1856
+ box-shadow: 0 0 0 4px var(--rs-primary-tint);
1857
+ }
1858
+
1859
+ .rs-connect-empty-dot--left {
1860
+ left: 8px;
1861
+ top: 50%;
1862
+ transform: translateY(-50%);
1863
+ }
1864
+
1865
+ .rs-connect-empty-dot--right {
1866
+ right: 8px;
1867
+ top: 50%;
1868
+ transform: translateY(-50%);
1869
+ }
1870
+
1871
+ .rs-connect-empty-title {
1872
+ font-size: 16px;
1873
+ font-weight: 600;
1874
+ letter-spacing: -0.01em;
1875
+ color: var(--rs-foreground);
1876
+ }
1877
+
1878
+ .rs-connect-empty-subtitle {
1879
+ margin-top: 4px;
1880
+ font-size: 13px;
1881
+ color: var(--rs-muted);
1882
+ }
1883
+
1884
+ @keyframes rs-orbit-spin {
1885
+ from {
1886
+ transform: rotate(0deg);
1887
+ }
1888
+ to {
1889
+ transform: rotate(360deg);
1890
+ }
1891
+ }
1892
+
1893
+ /* =============================================================================
1894
+ Connect Step – Option Selection
1895
+ ============================================================================= */
1896
+
1897
+ .rs-connect-options {
1898
+ display: flex;
1899
+ flex-direction: column;
1900
+ padding: 20px 16px 0;
1901
+ }
1902
+
1903
+ .rs-connect-options-title {
1904
+ font-size: 17px;
1905
+ font-weight: 600;
1906
+ letter-spacing: -0.01em;
1907
+ color: var(--rs-foreground);
1908
+ }
1909
+
1910
+ .rs-connect-options-subtitle {
1911
+ font-size: 13px;
1912
+ color: var(--rs-muted);
1913
+ margin-top: 4px;
1914
+ }
1915
+
1916
+ .rs-connect-options-list {
1917
+ display: flex;
1918
+ flex-direction: column;
1919
+ gap: 8px;
1920
+ margin-top: 20px;
1921
+ }
1922
+
1923
+ .rs-connect-option {
1924
+ display: flex;
1925
+ align-items: center;
1926
+ gap: 12px;
1927
+ width: 100%;
1928
+ padding: 14px 12px;
1929
+ border-radius: var(--rs-radius-md);
1930
+ border: 1px solid var(--rs-border-surface);
1931
+ background: var(--rs-background);
1932
+ color: var(--rs-foreground);
1933
+ cursor: pointer;
1934
+ text-align: left;
1935
+ transition:
1936
+ border-color 0.15s,
1937
+ background-color 0.15s;
1938
+ font-family: inherit;
1939
+ }
1940
+
1941
+ .rs-connect-option:hover {
1942
+ background: var(--rs-surface);
1943
+ }
1944
+
1945
+ .rs-connect-option--selected {
1946
+ border-color: var(--rs-primary);
1947
+ background: var(--rs-primary-tint);
1948
+ }
1949
+
1950
+ .rs-connect-option-radio {
1951
+ width: 18px;
1952
+ height: 18px;
1953
+ min-width: 18px;
1954
+ border-radius: 50%;
1955
+ border: 2px solid var(--rs-border);
1956
+ display: flex;
1957
+ align-items: center;
1958
+ justify-content: center;
1959
+ transition: border-color 0.15s;
1960
+ }
1961
+
1962
+ .rs-connect-option--selected .rs-connect-option-radio {
1963
+ border-color: var(--rs-primary);
1964
+ }
1965
+
1966
+ .rs-connect-option-radio-dot {
1967
+ width: 8px;
1968
+ height: 8px;
1969
+ border-radius: 50%;
1970
+ background: var(--rs-primary);
1971
+ }
1972
+
1973
+ .rs-connect-option-content {
1974
+ flex: 1;
1975
+ min-width: 0;
1976
+ }
1977
+
1978
+ .rs-connect-option-label {
1979
+ font-size: 14px;
1980
+ font-weight: 500;
1981
+ line-height: 1.3;
1982
+ }
1983
+
1984
+ .rs-connect-option-detail {
1985
+ font-size: 12px;
1986
+ color: var(--rs-muted);
1987
+ margin-top: 2px;
1988
+ }
1989
+
1990
+ .rs-connect-option-icon {
1991
+ width: 20px;
1992
+ height: 20px;
1993
+ color: var(--rs-muted-foreground);
1994
+ flex-shrink: 0;
1995
+ }
1996
+
1997
+ /* =============================================================================
1998
+ Redesigned Header (Two-Line Layout)
1999
+ ============================================================================= */
2000
+
2001
+ .rs-modal-header--redesigned {
2002
+ display: flex;
2003
+ align-items: center;
2004
+ justify-content: space-between;
2005
+ min-height: 24px;
2006
+ /* Padding/gap now live on the parent .rs-modal (matches Figma 1:1). */
2007
+ padding: 0;
2008
+ background-color: transparent;
2009
+ border-bottom: none;
2010
+ }
2011
+
2012
+ .rs-modal-header-nav-left {
2013
+ display: flex;
2014
+ align-items: center;
2015
+ justify-content: flex-start;
2016
+ flex-shrink: 0;
2017
+ min-width: 24px;
2018
+ min-height: 24px;
2019
+ }
2020
+
2021
+ .rs-modal-header-nav-center {
2022
+ flex: 1;
2023
+ display: flex;
2024
+ flex-direction: column;
2025
+ align-items: center;
2026
+ gap: 2px;
2027
+ min-width: 0;
2028
+ }
2029
+
2030
+ .rs-modal-header-nav-right {
2031
+ display: flex;
2032
+ align-items: center;
2033
+ justify-content: flex-end;
2034
+ flex-shrink: 0;
2035
+ gap: 12px;
2036
+ }
2037
+
2038
+ .rs-modal-header-back {
2039
+ display: flex;
2040
+ align-items: center;
2041
+ justify-content: center;
2042
+ width: 24px;
2043
+ height: 24px;
2044
+ padding: 0;
2045
+ background: transparent;
2046
+ border: none;
2047
+ border-radius: 4px;
2048
+ color: var(--rs-foreground);
2049
+ cursor: pointer;
2050
+ transition: opacity 0.15s;
2051
+ }
2052
+
2053
+ .rs-modal-header-back:hover:not(:disabled) {
2054
+ opacity: 0.65;
2055
+ }
2056
+
2057
+ .rs-modal-header-back svg {
2058
+ width: 24px;
2059
+ height: 24px;
2060
+ }
2061
+
2062
+ /* =============================================================================
2063
+ Amount Step Redesign
2064
+ ============================================================================= */
2065
+
2066
+ /* Amount screen — matches Figma "Wallet deposit" (Enter amount) frame.
2067
+ Composed of: big $amount input + balance/min row, quick-select buttons,
2068
+ transfer detail rows, Continue button. */
2069
+
2070
+ .rs-amount-section {
2071
+ display: flex;
2072
+ flex-direction: column;
2073
+ gap: 12px;
2074
+ }
2075
+
2076
+ .rs-amount-display {
2077
+ display: flex;
2078
+ flex-direction: column;
2079
+ gap: 4px;
2080
+ }
2081
+
2082
+ .rs-amount-input-row {
2083
+ display: flex;
2084
+ align-items: baseline;
2085
+ gap: 4px;
2086
+ width: 100%;
2087
+ font-size: 64px;
2088
+ font-weight: 700;
2089
+ line-height: 1;
2090
+ color: var(--rs-foreground);
2091
+ font-feature-settings: "tnum";
2092
+ }
2093
+
2094
+ .rs-amount-prefix {
2095
+ flex: none;
2096
+ user-select: none;
2097
+ }
2098
+
2099
+ /* The number wrapper layers the real <input> transparently over a visual
2100
+ glyph layer so the caret/editing stays native while the visible digits
2101
+ are the ones we animate. Sized by the visual layer; the input fills it. */
2102
+ .rs-amount-number-wrap {
2103
+ position: relative;
2104
+ flex: 1;
2105
+ min-width: 0;
2106
+ }
2107
+
2108
+ .rs-amount-number-wrap > input {
2109
+ position: absolute;
2110
+ inset: 0;
2111
+ width: 100%;
2112
+ height: 100%;
2113
+ background: transparent;
2114
+ border: none;
2115
+ outline: none;
2116
+ font: inherit;
2117
+ color: transparent;
2118
+ font-feature-settings: "tnum";
2119
+ padding: 0;
2120
+ caret-color: var(--rs-foreground);
2121
+ }
2122
+
2123
+ .rs-amount-number-wrap > input::placeholder {
2124
+ color: transparent;
2125
+ }
2126
+
2127
+ .rs-amount-number-wrap > input::-webkit-outer-spin-button,
2128
+ .rs-amount-number-wrap > input::-webkit-inner-spin-button {
2129
+ -webkit-appearance: none;
2130
+ margin: 0;
2131
+ }
2132
+
2133
+ .rs-amount-visual {
2134
+ pointer-events: none;
2135
+ display: flex;
2136
+ align-items: center;
2137
+ font-feature-settings: "tnum";
2138
+ }
2139
+
2140
+ .rs-amount-char-slot {
2141
+ display: inline-block;
2142
+ overflow: hidden;
2143
+ height: 1em;
2144
+ line-height: 1;
2145
+ }
2146
+
2147
+ .rs-amount-char-inner {
2148
+ display: block;
2149
+ }
2150
+
2151
+ .rs-amount-visual--placeholder {
2152
+ color: var(--rs-muted);
2153
+ }
2154
+
2155
+ .rs-amount-meta {
2156
+ display: flex;
2157
+ align-items: center;
2158
+ justify-content: space-between;
2159
+ gap: 12px;
2160
+ font-size: 12px;
2161
+ font-weight: 500;
2162
+ color: var(--rs-muted);
2163
+ }
2164
+
2165
+ .rs-amount-meta-balance,
2166
+ .rs-amount-meta-minimum {
2167
+ font-feature-settings: "tnum";
2168
+ }
2169
+
2170
+ .rs-amount-presets {
2171
+ display: flex;
2172
+ gap: 4px;
2173
+ width: 100%;
2174
+ }
2175
+
2176
+ .rs-amount-preset-btn {
2177
+ flex: 1 0 0;
2178
+ min-width: 0;
2179
+ padding: 12px 16px;
2180
+ background: var(--rs-button-ghost-bg);
2181
+ border: none;
2182
+ border-radius: 8px;
2183
+ font-family: inherit;
2184
+ font-size: 14px;
2185
+ font-weight: 500;
2186
+ line-height: normal;
2187
+ color: var(--rs-button-ghost-text);
2188
+ cursor: pointer;
2189
+ transition: background-color 0.15s;
2190
+ }
2191
+
2192
+ .rs-amount-preset-btn:hover:not(:disabled) {
2193
+ background: var(--rs-button-ghost-bg-hover);
2194
+ }
2195
+
2196
+ .rs-amount-preset-btn:focus-visible {
2197
+ outline: 2px solid var(--rs-border-accent);
2198
+ outline-offset: 2px;
2199
+ }
2200
+
2201
+ .rs-amount-preset-btn:disabled {
2202
+ opacity: 0.5;
2203
+ cursor: not-allowed;
2204
+ }
2205
+
2206
+ .rs-amount-details {
2207
+ display: flex;
2208
+ flex-direction: column;
2209
+ gap: 4px;
2210
+ }
2211
+
2212
+ .rs-amount-detail-row {
2213
+ display: flex;
2214
+ align-items: center;
2215
+ justify-content: space-between;
2216
+ gap: 12px;
2217
+ font-size: 12px;
2218
+ font-weight: 500;
2219
+ color: var(--rs-muted);
2220
+ line-height: normal;
2221
+ }
2222
+
2223
+ /* Review-deposit detail rows (ConfirmStep) — Figma uses 14px Medium with
2224
+ 8px stack gap, vs the wallet-deposit-amount rows which are 12px / 4px. */
2225
+ .rs-review-details {
2226
+ display: flex;
2227
+ flex-direction: column;
2228
+ gap: 8px;
2229
+ width: 100%;
2230
+ }
2231
+
2232
+ .rs-review-detail-row {
2233
+ display: flex;
2234
+ align-items: center;
2235
+ justify-content: space-between;
2236
+ gap: 12px;
2237
+ font-size: 14px;
2238
+ font-weight: 500;
2239
+ color: var(--rs-muted);
2240
+ line-height: normal;
2241
+ }
2242
+
2243
+ .rs-review-detail-value {
2244
+ display: flex;
2245
+ align-items: center;
2246
+ gap: 4px;
2247
+ color: var(--rs-muted);
2248
+ font-feature-settings: "tnum";
2249
+ }
2250
+
2251
+ .rs-review-detail-icon {
2252
+ width: 16px;
2253
+ height: 16px;
2254
+ border-radius: 50%;
2255
+ overflow: hidden;
2256
+ flex-shrink: 0;
2257
+ background: var(--rs-background);
2258
+ }
2259
+
2260
+ .rs-review-detail-icon img {
2261
+ width: 100%;
2262
+ height: 100%;
2263
+ object-fit: cover;
2264
+ }
2265
+
2266
+ .rs-review-detail-info {
2267
+ display: inline-flex;
2268
+ width: 16px;
2269
+ height: 16px;
2270
+ align-items: center;
2271
+ justify-content: center;
2272
+ color: var(--rs-icon-secondary);
2273
+ cursor: help;
2274
+ }
2275
+
2276
+ .rs-review-detail-info svg {
2277
+ width: 16px;
2278
+ height: 16px;
2279
+ }
2280
+
2281
+ .rs-review-detail-link {
2282
+ display: inline-flex;
2283
+ width: 16px;
2284
+ height: 16px;
2285
+ align-items: center;
2286
+ justify-content: center;
2287
+ color: var(--rs-muted);
2288
+ text-decoration: none;
2289
+ transition: opacity 0.15s;
2290
+ }
2291
+
2292
+ .rs-review-detail-link:hover {
2293
+ opacity: 0.7;
2294
+ }
2295
+
2296
+ .rs-review-detail-link svg {
2297
+ width: 14px;
2298
+ height: 14px;
2299
+ }
2300
+
2301
+ .rs-review-detail-value--strike {
2302
+ text-decoration: line-through;
2303
+ }
2304
+
2305
+ .rs-amount-detail-value {
2306
+ display: flex;
2307
+ align-items: center;
2308
+ gap: 4px;
2309
+ color: var(--rs-muted);
2310
+ font-feature-settings: "tnum";
2311
+ }
2312
+
2313
+ .rs-amount-detail-icon {
2314
+ width: 16px;
2315
+ height: 16px;
2316
+ border-radius: 50%;
2317
+ overflow: hidden;
2318
+ flex-shrink: 0;
2319
+ background: var(--rs-background);
2320
+ }
2321
+
2322
+ .rs-amount-detail-icon img {
2323
+ width: 100%;
2324
+ height: 100%;
2325
+ object-fit: cover;
2326
+ }
2327
+
2328
+ .rs-amount-detail-info {
2329
+ display: inline-flex;
2330
+ width: 16px;
2331
+ height: 16px;
2332
+ align-items: center;
2333
+ justify-content: center;
2334
+ color: var(--rs-muted);
2335
+ cursor: help;
2336
+ }
2337
+
2338
+ .rs-amount-detail-info svg {
2339
+ width: 16px;
2340
+ height: 16px;
2341
+ }
2342
+
2343
+ .rs-amount-detail-link {
2344
+ display: inline-flex;
2345
+ width: 16px;
2346
+ height: 16px;
2347
+ align-items: center;
2348
+ justify-content: center;
2349
+ color: var(--rs-muted);
2350
+ text-decoration: none;
2351
+ transition: color 0.15s;
2352
+ }
2353
+
2354
+ .rs-amount-detail-link:hover {
2355
+ color: var(--rs-foreground);
2356
+ }
2357
+
2358
+ .rs-amount-detail-link svg {
2359
+ width: 14px;
2360
+ height: 14px;
2361
+ }
2362
+
2363
+ /* Side-by-side button row used by success / failure footers
2364
+ ("New deposit" + "Done", "Cancel" + "Try again"). */
2365
+ .rs-screen-button-row {
2366
+ display: flex;
2367
+ gap: 8px;
2368
+ width: 100%;
2369
+ }
2370
+
2371
+ .rs-screen-button-row > * {
2372
+ flex: 1 0 0;
2373
+ min-width: 0;
2374
+ }
2375
+
2376
+ .rs-amount-error {
2377
+ display: flex;
2378
+ align-items: center;
2379
+ gap: 8px;
2380
+ padding: 10px 12px;
2381
+ background: var(--rs-error-tint);
2382
+ border-radius: var(--rs-radius-sm);
2383
+ font-size: 13px;
2384
+ color: var(--rs-error);
2385
+ }
2386
+
2387
+ .rs-amount-error--warning {
2388
+ background: var(--rs-warning-tint);
2389
+ color: var(--rs-warning);
2390
+ border: 1px solid var(--rs-warning-border);
2391
+ }
2392
+
2393
+ /* Generic inline error / warning notice (Callout). Two-line truncation keeps
2394
+ long messages from blowing out the modal height. */
2395
+ .rs-callout {
2396
+ display: flex;
2397
+ align-items: flex-start;
2398
+ gap: 8px;
2399
+ padding: 10px 12px;
2400
+ border-radius: var(--rs-radius-sm);
2401
+ border: 1px solid transparent;
2402
+ font-size: 13px;
2403
+ font-weight: 500;
2404
+ line-height: 16px;
2405
+ }
2406
+
2407
+ .rs-callout-icon {
2408
+ flex-shrink: 0;
2409
+ width: 16px;
2410
+ height: 16px;
2411
+ display: inline-flex;
2412
+ }
2413
+
2414
+ .rs-callout-icon svg {
2415
+ width: 16px;
2416
+ height: 16px;
2417
+ display: block;
2418
+ }
2419
+
2420
+ .rs-callout-text {
2421
+ min-width: 0;
2422
+ display: -webkit-box;
2423
+ -webkit-box-orient: vertical;
2424
+ -webkit-line-clamp: 2;
2425
+ line-clamp: 2;
2426
+ overflow: hidden;
2427
+ }
2428
+
2429
+ .rs-callout--error {
2430
+ background: var(--rs-callout-error-bg);
2431
+ border-color: var(--rs-callout-error-border);
2432
+ color: var(--rs-callout-error-text);
2433
+ }
2434
+
2435
+ .rs-callout--warning {
2436
+ background: var(--rs-callout-warning-bg);
2437
+ border-color: var(--rs-callout-warning-border);
2438
+ color: var(--rs-callout-warning-text);
2439
+ }
2440
+
2441
+ /* =============================================================================
2442
+ Confirm Step Redesign (Polymarket Style)
2443
+ ============================================================================= */
2444
+
2445
+ .rs-confirm-section {
2446
+ margin-bottom: 12px;
2447
+ }
2448
+
2449
+ .rs-confirm-section-title {
2450
+ font-size: 13px;
2451
+ font-weight: 500;
2452
+ color: var(--rs-muted);
2453
+ margin-bottom: 8px;
2454
+ }
2455
+
2456
+ .rs-confirm-details {
2457
+ background: var(--rs-surface);
2458
+ border-radius: var(--rs-radius-md);
2459
+ overflow: hidden;
2460
+ }
2461
+
2462
+ .rs-confirm-details summary {
2463
+ display: flex;
2464
+ align-items: center;
2465
+ gap: 6px;
2466
+ padding: 12px;
2467
+ font-size: 13px;
2468
+ font-weight: 500;
2469
+ color: var(--rs-muted);
2470
+ cursor: pointer;
2471
+ list-style: none;
2472
+ }
2473
+
2474
+ .rs-confirm-details summary::-webkit-details-marker {
2475
+ display: none;
2476
+ }
2477
+
2478
+ .rs-confirm-details summary::before {
2479
+ content: "";
2480
+ width: 0;
2481
+ height: 0;
2482
+ border-left: 5px solid var(--rs-muted);
2483
+ border-top: 4px solid transparent;
2484
+ border-bottom: 4px solid transparent;
2485
+ transition: transform 0.2s;
2486
+ }
2487
+
2488
+ .rs-confirm-details[open] summary::before {
2489
+ transform: rotate(90deg);
2490
+ }
2491
+
2492
+ .rs-confirm-details-content {
2493
+ padding: 0 12px 12px;
2494
+ }
2495
+
2496
+ .rs-confirm-terms {
2497
+ font-size: 12px;
2498
+ color: var(--rs-muted-foreground);
2499
+ text-align: center;
2500
+ margin-top: 16px;
2501
+ line-height: 1.5;
2502
+ }
2503
+
2504
+ .rs-confirm-terms a {
2505
+ color: var(--rs-primary);
2506
+ text-decoration: none;
2507
+ }
2508
+
2509
+ .rs-confirm-terms a:hover {
2510
+ text-decoration: underline;
2511
+ }
2512
+
2513
+ /* =============================================================================
2514
+ Processing Step Success State Redesign
2515
+ ============================================================================= */
2516
+
2517
+ .rs-success-state {
2518
+ display: flex;
2519
+ flex-direction: column;
2520
+ align-items: center;
2521
+ padding: 16px 0 8px;
2522
+ text-align: center;
2523
+ }
2524
+
2525
+ .rs-success-checkmark {
2526
+ width: 48px;
2527
+ height: 48px;
2528
+ border-radius: 50%;
2529
+ background: var(--rs-success-tint);
2530
+ display: flex;
2531
+ align-items: center;
2532
+ justify-content: center;
2533
+ margin-bottom: 12px;
2534
+ animation: rs-scaleIn 0.4s ease-out;
2535
+ }
2536
+
2537
+ .rs-success-checkmark svg {
2538
+ width: 24px;
2539
+ height: 24px;
2540
+ color: var(--rs-success);
2541
+ }
2542
+
2543
+ .rs-success-title {
2544
+ font-size: 14px;
2545
+ font-weight: 600;
2546
+ color: var(--rs-foreground);
2547
+ margin-bottom: 2px;
2548
+ }
2549
+
2550
+ .rs-success-subtitle {
2551
+ font-size: 13px;
2552
+ color: var(--rs-muted);
2553
+ }
2554
+
2555
+ /* =============================================================================
2556
+ Withdraw Form Step
2557
+ ============================================================================= */
2558
+
2559
+ .rs-withdraw-loading {
2560
+ min-height: 240px;
2561
+ display: grid;
2562
+ place-content: center;
2563
+ justify-items: center;
2564
+ text-align: center;
2565
+ row-gap: 8px;
2566
+ }
2567
+
2568
+ .rs-withdraw-loading-title {
2569
+ font-size: 14px;
2570
+ font-weight: 600;
2571
+ color: var(--rs-foreground);
2572
+ }
2573
+
2574
+ .rs-withdraw-loading-subtitle {
2575
+ font-size: 13px;
2576
+ color: var(--rs-muted);
2577
+ }
2578
+
2579
+ .rs-withdraw-section {
2580
+ display: flex;
2581
+ flex-direction: column;
2582
+ gap: 8px;
2583
+ }
2584
+
2585
+ .rs-withdraw-label {
2586
+ font-size: 14px;
2587
+ font-weight: 500;
2588
+ line-height: normal;
2589
+ color: var(--rs-input-label);
2590
+ }
2591
+
2592
+ .rs-withdraw-label--sm {
2593
+ font-size: 12px;
2594
+ }
2595
+
2596
+ .rs-withdraw-input-row {
2597
+ display: flex;
2598
+ align-items: center;
2599
+ gap: 8px;
2600
+ padding: 12px;
2601
+ background: var(--rs-surface-subtle);
2602
+ border-radius: 8px;
2603
+ border: 1px solid var(--rs-surface-subtle);
2604
+ }
2605
+
2606
+ .rs-withdraw-input {
2607
+ flex: 1;
2608
+ border: none;
2609
+ background: transparent;
2610
+ font-size: 14px;
2611
+ font-weight: 400;
2612
+ line-height: 20px;
2613
+ color: var(--rs-foreground);
2614
+ outline: none;
2615
+ min-width: 0;
2616
+ font-family: inherit;
2617
+ }
2618
+
2619
+ .rs-withdraw-input::placeholder {
2620
+ color: var(--rs-muted-foreground);
2621
+ }
2622
+
2623
+ .rs-withdraw-input--address {
2624
+ font-family: inherit;
2625
+ font-size: 14px;
2626
+ font-weight: 400;
2627
+ }
2628
+
2629
+ .rs-withdraw-input--amount {
2630
+ font-size: 14px;
2631
+ font-weight: 400;
2632
+ font-feature-settings: "tnum";
2633
+ }
2634
+
2635
+ .rs-withdraw-input--amount::-webkit-outer-spin-button,
2636
+ .rs-withdraw-input--amount::-webkit-inner-spin-button {
2637
+ -webkit-appearance: none;
2638
+ margin: 0;
2639
+ }
2640
+
2641
+ .rs-withdraw-input--amount[type="number"] {
2642
+ -moz-appearance: textfield;
2643
+ }
2644
+
2645
+ .rs-withdraw-use-connected {
2646
+ display: inline-flex;
2647
+ align-items: center;
2648
+ gap: 6px;
2649
+ padding: 6px 12px;
2650
+ background: var(--rs-background);
2651
+ border: 1px solid var(--rs-border-surface);
2652
+ border-radius: var(--rs-radius-sm);
2653
+ font-size: 12px;
2654
+ font-weight: 500;
2655
+ color: var(--rs-foreground);
2656
+ cursor: pointer;
2657
+ white-space: nowrap;
2658
+ transition:
2659
+ background-color 0.15s,
2660
+ border-color 0.15s,
2661
+ color 0.15s;
2662
+ }
2663
+
2664
+ .rs-withdraw-use-connected:hover {
2665
+ background: var(--rs-surface);
2666
+ border-color: var(--rs-border);
2667
+ }
2668
+
2669
+ /* Active state: address matches the connected wallet. Collapses to a small
2670
+ circular badge (icon-only), matching the Figma. */
2671
+ .rs-withdraw-use-connected--active {
2672
+ width: 24px;
2673
+ height: 24px;
2674
+ padding: 0;
2675
+ border-radius: 999px;
2676
+ background: var(--rs-surface);
2677
+ border-color: var(--rs-surface);
2678
+ color: var(--rs-foreground);
2679
+ flex-shrink: 0;
2680
+ justify-content: center;
2681
+ }
2682
+
2683
+ .rs-withdraw-use-connected--active:hover {
2684
+ background: var(--rs-surface);
2685
+ border-color: var(--rs-surface);
2686
+ }
2687
+
2688
+ .rs-withdraw-use-connected-icon {
2689
+ width: 18px;
2690
+ height: 18px;
2691
+ }
2692
+
2693
+ .rs-withdraw-use-connected--active .rs-withdraw-use-connected-icon {
2694
+ width: 16px;
2695
+ height: 16px;
2696
+ border-radius: 999px;
2697
+ }
2698
+
2699
+ .rs-withdraw-amount-right {
2700
+ display: flex;
2701
+ align-items: center;
2702
+ gap: 6px;
2703
+ flex-shrink: 0;
2704
+ }
2705
+
2706
+ .rs-withdraw-token-label {
2707
+ font-size: 14px;
2708
+ font-weight: 600;
2709
+ color: var(--rs-foreground);
2710
+ }
2711
+
2712
+ .rs-withdraw-max-btn {
2713
+ padding: 12px 16px;
2714
+ background: transparent;
2715
+ border: 1.191px solid var(--rs-foreground);
2716
+ border-radius: 8px;
2717
+ font-family: inherit;
2718
+ font-size: 16px;
2719
+ font-weight: 500;
2720
+ line-height: normal;
2721
+ color: var(--rs-foreground);
2722
+ cursor: pointer;
2723
+ white-space: nowrap;
2724
+ transition:
2725
+ background-color 0.15s,
2726
+ border-color 0.15s;
2727
+ }
2728
+
2729
+ .rs-withdraw-max-btn:hover:not(:disabled) {
2730
+ background: var(--rs-surface);
2731
+ }
2732
+
2733
+ .rs-withdraw-max-btn:disabled {
2734
+ opacity: 0.4;
2735
+ cursor: not-allowed;
2736
+ }
2737
+
2738
+ .rs-withdraw-amount-info {
2739
+ display: flex;
2740
+ align-items: center;
2741
+ justify-content: space-between;
2742
+ font-size: 12px;
2743
+ font-weight: 500;
2744
+ line-height: normal;
2745
+ padding: 0;
2746
+ }
2747
+
2748
+ .rs-withdraw-usd {
2749
+ color: var(--rs-muted);
2750
+ font-feature-settings: "tnum";
2751
+ }
2752
+
2753
+ .rs-withdraw-balance {
2754
+ color: var(--rs-muted);
2755
+ font-feature-settings: "tnum";
2756
+ }
2757
+
2758
+ /* Receive row - inline selects side by side */
2759
+ .rs-withdraw-receive-row {
2760
+ display: flex;
2761
+ gap: 16px;
2762
+ }
2763
+
2764
+ .rs-withdraw-receive-col {
2765
+ flex: 1;
2766
+ min-width: 0;
2767
+ display: flex;
2768
+ flex-direction: column;
2769
+ gap: 8px;
2770
+ }
2771
+
2772
+ .rs-withdraw-dropdown {
2773
+ display: flex;
2774
+ align-items: center;
2775
+ justify-content: space-between;
2776
+ padding: 12px;
2777
+ background: var(--rs-surface-subtle);
2778
+ border-radius: 8px;
2779
+ border: 1px solid var(--rs-surface-subtle);
2780
+ cursor: pointer;
2781
+ transition:
2782
+ border-color 0.15s,
2783
+ background-color 0.15s;
2784
+ width: 100%;
2785
+ font-size: 14px;
2786
+ line-height: normal;
2787
+ }
2788
+
2789
+ .rs-withdraw-dropdown:hover {
2790
+ background: var(--rs-surface);
2791
+ border-color: var(--rs-surface);
2792
+ }
2793
+
2794
+ .rs-withdraw-dropdown-value {
2795
+ display: flex;
2796
+ align-items: center;
2797
+ gap: 8px;
2798
+ font-weight: 500;
2799
+ color: var(--rs-foreground);
2800
+ min-width: 0;
2801
+ }
2802
+
2803
+ .rs-withdraw-dropdown-value > span {
2804
+ white-space: nowrap;
2805
+ overflow: hidden;
2806
+ text-overflow: ellipsis;
2807
+ }
2808
+
2809
+ .rs-withdraw-dropdown-icon {
2810
+ width: 24px;
2811
+ height: 24px;
2812
+ border-radius: 50%;
2813
+ object-fit: contain;
2814
+ flex-shrink: 0;
2815
+ }
2816
+
2817
+ .rs-withdraw-dropdown-arrow {
2818
+ width: 24px;
2819
+ height: 24px;
2820
+ color: #9f9fa9;
2821
+ transition: transform 0.15s;
2822
+ }
2823
+
2824
+ .rs-withdraw-dropdown-container {
2825
+ position: relative;
2826
+ }
2827
+
2828
+ .rs-withdraw-dropdown-menu {
2829
+ position: absolute;
2830
+ bottom: calc(100% + 4px);
2831
+ left: 0;
2832
+ right: 0;
2833
+ z-index: 20;
2834
+ background: var(--rs-background);
2835
+ border: 1px solid var(--rs-border);
2836
+ border-radius: var(--rs-radius-md);
2837
+ box-shadow: var(--rs-shadow-dropdown);
2838
+ padding: 4px;
2839
+ display: flex;
2840
+ flex-direction: column;
2841
+ gap: 2px;
2842
+ max-height: 200px;
2843
+ overflow-y: auto;
2844
+ animation: rs-dropdown-in 0.12s ease-out;
2845
+ }
2846
+
2847
+ @keyframes rs-dropdown-in {
2848
+ from {
2849
+ opacity: 0;
2850
+ transform: translateY(4px);
2851
+ }
2852
+ to {
2853
+ opacity: 1;
2854
+ transform: translateY(0);
2855
+ }
2856
+ }
2857
+
2858
+ .rs-withdraw-dropdown-item {
2859
+ display: flex;
2860
+ align-items: center;
2861
+ gap: 8px;
2862
+ width: 100%;
2863
+ padding: 8px 10px;
2864
+ border-radius: calc(var(--rs-radius-md) - 2px);
2865
+ border: none;
2866
+ background: transparent;
2867
+ color: var(--rs-foreground);
2868
+ font-size: 14px;
2869
+ font-weight: 500;
2870
+ cursor: pointer;
2871
+ text-align: left;
2872
+ transition: background-color 0.1s;
2873
+ }
2874
+
2875
+ .rs-withdraw-dropdown-item:hover {
2876
+ background: var(--rs-surface);
2877
+ }
2878
+
2879
+ /* Receive summary */
2880
+ .rs-withdraw-receive-section {
2881
+ display: flex;
2882
+ align-items: center;
2883
+ justify-content: space-between;
2884
+ padding: 10px 12px;
2885
+ background: var(--rs-surface);
2886
+ border-radius: var(--rs-radius-sm);
2887
+ }
2888
+
2889
+ .rs-withdraw-receive-label {
2890
+ font-size: 12px;
2891
+ color: var(--rs-muted);
2892
+ }
2893
+
2894
+ .rs-withdraw-receive-value {
2895
+ display: flex;
2896
+ align-items: baseline;
2897
+ gap: 6px;
2898
+ text-align: right;
2899
+ }
2900
+
2901
+ .rs-withdraw-receive-amount {
2902
+ font-size: 14px;
2903
+ font-weight: 600;
2904
+ color: var(--rs-foreground);
2905
+ font-feature-settings: "tnum";
2906
+ }
2907
+
2908
+ .rs-withdraw-receive-usd {
2909
+ font-size: 12px;
2910
+ color: var(--rs-muted-foreground);
2911
+ }
2912
+
2913
+ .rs-withdraw-breakdown {
2914
+ display: flex;
2915
+ align-items: center;
2916
+ justify-content: space-between;
2917
+ padding: 0 2px;
2918
+ }
2919
+
2920
+ .rs-withdraw-breakdown-label {
2921
+ font-size: 12px;
2922
+ color: var(--rs-muted-foreground);
2923
+ text-decoration: underline;
2924
+ text-decoration-style: dotted;
2925
+ text-underline-offset: 2px;
2926
+ cursor: pointer;
2927
+ }
2928
+
2929
+ .rs-withdraw-breakdown-value {
2930
+ font-size: 12px;
2931
+ color: var(--rs-muted-foreground);
2932
+ font-feature-settings: "tnum";
2933
+ }
2934
+
2935
+ .rs-withdraw-breakdown-arrow {
2936
+ margin-left: 2px;
2937
+ font-size: 12px;
2938
+ }
2939
+
2940
+ .rs-withdraw-error {
2941
+ display: flex;
2942
+ align-items: center;
2943
+ gap: 8px;
2944
+ padding: 10px 12px;
2945
+ background: var(--rs-error-tint);
2946
+ border-radius: var(--rs-radius-md);
2947
+ font-size: 13px;
2948
+ color: var(--rs-error);
2949
+ }
2950
+
2951
+ .rs-withdraw-error svg {
2952
+ width: 14px;
2953
+ height: 14px;
2954
+ flex-shrink: 0;
2955
+ }
2956
+
2957
+ .rs-space-y-4 > * + * {
2958
+ margin-top: 16px;
2959
+ }
2960
+
2961
+ /* =============================================================================
2962
+ Deposit Address Step
2963
+ ============================================================================= */
2964
+
2965
+ /* Transfer crypto screen — matches Figma 1855:119996. Layout:
2966
+ chain/token select row → QR well (280px QR + truncated mono address) →
2967
+ text-only "Copy address" button → "Price impact" accordion. */
2968
+
2969
+ .rs-deposit-address {
2970
+ display: flex;
2971
+ flex-direction: column;
2972
+ align-items: stretch;
2973
+ gap: 16px;
2974
+ width: 100%;
2975
+ }
2976
+
2977
+ .rs-deposit-address-selectors {
2978
+ display: flex;
2979
+ align-items: flex-start;
2980
+ gap: 16px;
2981
+ width: 100%;
2982
+ }
2983
+
2984
+ .rs-deposit-address-dropdown {
2985
+ position: relative;
2986
+ flex: 1 0 0;
2987
+ min-width: 0;
2988
+ display: flex;
2989
+ flex-direction: column;
2990
+ gap: 8px;
2991
+ }
2992
+
2993
+ .rs-deposit-address-dropdown-label {
2994
+ font-size: 11px;
2995
+ font-weight: 500;
2996
+ line-height: normal;
2997
+ color: var(--rs-input-label);
2998
+ margin: 0;
2999
+ }
3000
+
3001
+ .rs-deposit-address-dropdown-label--with-min {
3002
+ display: flex;
3003
+ align-items: center;
3004
+ justify-content: space-between;
3005
+ gap: 6px;
3006
+ white-space: nowrap;
3007
+ }
3008
+
3009
+ .rs-deposit-address-min {
3010
+ display: inline-flex;
3011
+ align-items: center;
3012
+ flex-shrink: 0;
3013
+ gap: 4px;
3014
+ font-size: 11px;
3015
+ font-weight: 500;
3016
+ color: var(--rs-input-label);
3017
+ }
3018
+
3019
+ .rs-deposit-address-min-icon {
3020
+ width: 12px;
3021
+ height: 12px;
3022
+ flex-shrink: 0;
3023
+ color: var(--rs-icon-secondary);
3024
+ }
3025
+
3026
+ /* Price impact accordion — sits at the bottom of the transfer-crypto
3027
+ screen. Header is a thin row with the value + info tooltip + chevron. */
3028
+ .rs-price-impact {
3029
+ width: 100%;
3030
+ display: flex;
3031
+ flex-direction: column;
3032
+ }
3033
+
3034
+ .rs-price-impact-header {
3035
+ display: flex;
3036
+ align-items: center;
3037
+ justify-content: space-between;
3038
+ gap: 8px;
3039
+ width: 100%;
3040
+ padding: 0;
3041
+ background: transparent;
3042
+ border: none;
3043
+ cursor: pointer;
3044
+ font-family: inherit;
3045
+ line-height: normal;
3046
+ color: var(--rs-muted);
3047
+ text-align: left;
3048
+ }
3049
+
3050
+ .rs-price-impact-header-left {
3051
+ display: inline-flex;
3052
+ align-items: center;
3053
+ gap: 8px;
3054
+ }
3055
+
3056
+ .rs-price-impact-row-icon {
3057
+ display: inline-flex;
3058
+ align-items: center;
3059
+ justify-content: center;
3060
+ width: 16px;
3061
+ height: 16px;
3062
+ color: var(--rs-icon-secondary);
3063
+ flex-shrink: 0;
3064
+ }
3065
+
3066
+ .rs-price-impact-row-icon svg {
3067
+ width: 16px;
3068
+ height: 16px;
3069
+ }
3070
+
3071
+ .rs-price-impact-label {
3072
+ font-size: 12px;
3073
+ font-weight: 500;
3074
+ color: var(--rs-muted);
3075
+ }
3076
+
3077
+ .rs-price-impact-label strong {
3078
+ color: var(--rs-muted);
3079
+ font-weight: 500;
3080
+ }
3081
+
3082
+ .rs-price-impact-info {
3083
+ display: inline-flex;
3084
+ align-items: center;
3085
+ justify-content: center;
3086
+ color: var(--rs-muted);
3087
+ }
3088
+
3089
+ .rs-price-impact-info .rs-tooltip-trigger svg {
3090
+ width: 16px;
3091
+ height: 16px;
3092
+ display: block;
3093
+ }
3094
+
3095
+ .rs-price-impact-chevron {
3096
+ width: 16px;
3097
+ height: 16px;
3098
+ color: var(--rs-muted);
3099
+ flex-shrink: 0;
3100
+ transition: transform 0.2s ease;
3101
+ }
3102
+
3103
+ .rs-price-impact--open .rs-price-impact-chevron {
3104
+ transform: rotate(180deg);
3105
+ }
3106
+
3107
+ .rs-price-impact-panel {
3108
+ display: grid;
3109
+ grid-template-rows: 0fr;
3110
+ transition: grid-template-rows 0.25s ease;
3111
+ }
3112
+
3113
+ .rs-price-impact--open .rs-price-impact-panel {
3114
+ grid-template-rows: 1fr;
3115
+ }
3116
+
3117
+ .rs-price-impact-panel-inner {
3118
+ overflow: hidden;
3119
+ min-height: 0;
3120
+ }
3121
+
3122
+ .rs-price-impact-row {
3123
+ display: flex;
3124
+ align-items: center;
3125
+ gap: 8px;
3126
+ padding-top: 8px;
3127
+ font-size: 12px;
3128
+ color: var(--rs-muted);
3129
+ }
3130
+
3131
+ /* =============================================================================
3132
+ Tooltip
3133
+ ============================================================================= */
3134
+
3135
+ .rs-tooltip {
3136
+ position: relative;
3137
+ display: inline-flex;
3138
+ align-items: center;
3139
+ justify-content: center;
3140
+ }
3141
+
3142
+ .rs-tooltip-trigger {
3143
+ display: inline-flex;
3144
+ align-items: center;
3145
+ justify-content: center;
3146
+ cursor: pointer;
3147
+ color: inherit;
3148
+ outline: none;
3149
+ border-radius: 50%;
3150
+ }
3151
+
3152
+ .rs-tooltip-trigger:focus-visible {
3153
+ box-shadow: 0 0 0 2px var(--rs-primary-tint);
3154
+ }
3155
+
3156
+ .rs-tooltip-bubble {
3157
+ position: fixed;
3158
+ z-index: 2147483000;
3159
+ transform: translate(-50%, calc(-100% - 8px));
3160
+ min-width: 120px;
3161
+ max-width: 220px;
3162
+ padding: 6px 8px;
3163
+ background: #202020;
3164
+ color: #fcfcfc;
3165
+ border-radius: 6px;
3166
+ font-size: 10.5px;
3167
+ line-height: 1.35;
3168
+ font-weight: 500;
3169
+ text-align: center;
3170
+ font-family:
3171
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial,
3172
+ sans-serif;
3173
+ box-shadow:
3174
+ 0 4px 12px rgba(0, 0, 0, 0.18),
3175
+ 0 1px 3px rgba(0, 0, 0, 0.12);
3176
+ pointer-events: none;
3177
+ white-space: normal;
3178
+ animation: rs-tooltip-in 0.12s ease-out;
3179
+ }
3180
+
3181
+ .rs-tooltip-bubble::after {
3182
+ content: "";
3183
+ position: absolute;
3184
+ top: 100%;
3185
+ left: 50%;
3186
+ transform: translateX(-50%);
3187
+ border: 5px solid transparent;
3188
+ border-top-color: #202020;
3189
+ }
3190
+
3191
+ @keyframes rs-tooltip-in {
3192
+ from {
3193
+ opacity: 0;
3194
+ transform: translate(-50%, calc(-100% - 6px));
3195
+ }
3196
+ to {
3197
+ opacity: 1;
3198
+ transform: translate(-50%, calc(-100% - 8px));
3199
+ }
3200
+ }
3201
+
3202
+ .rs-deposit-address-dropdown-trigger {
3203
+ display: flex;
3204
+ align-items: center;
3205
+ gap: 8px;
3206
+ width: 100%;
3207
+ /* 11px vertical (not 12) so the 1px border lands the input at Figma's
3208
+ 48px total height — Figma draws the stroke inside the box, CSS adds it
3209
+ outside. Horizontal stays 12px to match the design. */
3210
+ padding: 11px 12px;
3211
+ background: var(--rs-surface-subtle);
3212
+ border-radius: 8px;
3213
+ border: 1px solid var(--rs-surface-subtle);
3214
+ cursor: pointer;
3215
+ transition:
3216
+ border-color 0.15s,
3217
+ background-color 0.15s;
3218
+ font-size: 14px;
3219
+ font-weight: 500;
3220
+ line-height: normal;
3221
+ color: var(--rs-foreground);
3222
+ font-family: inherit;
3223
+ }
3224
+
3225
+ .rs-deposit-address-dropdown-trigger:hover {
3226
+ background: var(--rs-surface);
3227
+ border-color: var(--rs-surface);
3228
+ }
3229
+
3230
+ .rs-deposit-address-dropdown-trigger--open {
3231
+ border-color: #9f9fa9;
3232
+ }
3233
+
3234
+ .rs-deposit-address-dropdown-trigger--open:hover {
3235
+ border-color: #9f9fa9;
3236
+ }
3237
+
3238
+ .rs-deposit-address-dropdown-icon {
3239
+ width: 24px;
3240
+ height: 24px;
3241
+ border-radius: 50%;
3242
+ object-fit: cover;
3243
+ flex-shrink: 0;
3244
+ }
3245
+
3246
+ .rs-deposit-address-dropdown-chevron {
3247
+ width: 24px;
3248
+ height: 24px;
3249
+ color: #9f9fa9;
3250
+ margin-left: auto;
3251
+ flex-shrink: 0;
3252
+ transition: transform 0.15s ease;
3253
+ }
3254
+
3255
+ .rs-deposit-address-dropdown-trigger--open
3256
+ .rs-deposit-address-dropdown-chevron {
3257
+ transform: rotate(180deg);
3258
+ }
3259
+
3260
+ .rs-deposit-address-dropdown-menu {
3261
+ position: absolute;
3262
+ top: calc(100% + 4px);
3263
+ left: 0;
3264
+ right: 0;
3265
+ z-index: 20;
3266
+ background: var(--rs-surface-subtle);
3267
+ border: 1px solid var(--rs-surface-subtle);
3268
+ border-radius: var(--rs-radius-sm);
3269
+ box-shadow: var(--rs-shadow-dropdown);
3270
+ padding: 8px;
3271
+ display: flex;
3272
+ flex-direction: column;
3273
+ gap: 0;
3274
+ max-height: 240px;
3275
+ overflow-y: auto;
3276
+ overscroll-behavior: none;
3277
+ animation: rs-dropdown-in 0.12s ease-out;
3278
+ }
3279
+
3280
+ .rs-deposit-address-dropdown-item {
3281
+ display: flex;
3282
+ align-items: center;
3283
+ gap: 6px;
3284
+ width: 100%;
3285
+ padding: 8px 4px;
3286
+ border-radius: 4px;
3287
+ border: none;
3288
+ background: transparent;
3289
+ color: var(--rs-foreground);
3290
+ font-size: 14px;
3291
+ font-weight: 500;
3292
+ line-height: normal;
3293
+ cursor: pointer;
3294
+ text-align: left;
3295
+ transition: background-color 0.1s;
3296
+ font-family: inherit;
3297
+ }
3298
+
3299
+ .rs-deposit-address-dropdown-item:hover {
3300
+ background: var(--rs-surface);
3301
+ }
3302
+
3303
+ .rs-deposit-address-dropdown-item--active {
3304
+ color: var(--rs-foreground);
3305
+ }
3306
+
3307
+ /* Well-card containing the 280px QR + truncated mono address. */
3308
+ .rs-deposit-address-well {
3309
+ display: flex;
3310
+ flex-direction: column;
3311
+ align-items: center;
3312
+ justify-content: center;
3313
+ width: 100%;
3314
+ background: var(--rs-surface-subtle);
3315
+ border-radius: 8px;
3316
+ }
3317
+
3318
+ .rs-deposit-address-qr {
3319
+ display: flex;
3320
+ align-items: center;
3321
+ justify-content: center;
3322
+ padding: 16px;
3323
+ }
3324
+
3325
+ .rs-deposit-address-qr canvas,
3326
+ .rs-deposit-address-qr svg {
3327
+ display: block;
3328
+ width: 190px;
3329
+ height: 190px;
3330
+ }
3331
+
3332
+ .rs-deposit-address-value {
3333
+ width: 100%;
3334
+ padding: 0 16px 12px;
3335
+ font-family:
3336
+ "Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
3337
+ "Liberation Mono", monospace;
3338
+ font-size: 12px;
3339
+ font-weight: 500;
3340
+ line-height: normal;
3341
+ color: var(--rs-muted);
3342
+ text-align: center;
3343
+ word-break: break-all;
3344
+ }
3345
+
3346
+ /* Visually hidden but exposed to assistive tech — used by the skeleton's
3347
+ "Preparing…" status, whose visual placeholders are all aria-hidden. */
3348
+ .rs-sr-only {
3349
+ position: absolute;
3350
+ width: 1px;
3351
+ height: 1px;
3352
+ padding: 0;
3353
+ margin: -1px;
3354
+ overflow: hidden;
3355
+ clip: rect(0, 0, 0, 0);
3356
+ white-space: nowrap;
3357
+ border: 0;
3358
+ }
3359
+
3360
+ /* Loading placeholders for DepositAddressSkeleton — grey blocks that pulse
3361
+ while the smart account / deposit address are being prepared. Uses
3362
+ --color-gray4 (zinc-200 light / zinc-800 dark) so it reads on the well in
3363
+ both themes. */
3364
+ .rs-skeleton {
3365
+ background: var(--color-gray4);
3366
+ border-radius: 8px;
3367
+ animation: rs-skeleton-pulse 1.6s ease-in-out infinite;
3368
+ }
3369
+
3370
+ .rs-skeleton-qr {
3371
+ width: 190px;
3372
+ height: 190px;
3373
+ }
3374
+
3375
+ .rs-skeleton-address {
3376
+ height: 12px;
3377
+ margin: 0 16px 12px;
3378
+ border-radius: 8px;
3379
+ }
3380
+
3381
+ /* Inline placeholder sized to the fee value (e.g. "$0.04") while the
3382
+ pre-deposit quote resolves. Stays put if the quote fails. */
3383
+ .rs-skeleton-fee {
3384
+ display: inline-block;
3385
+ width: 36px;
3386
+ height: 13px;
3387
+ border-radius: 4px;
3388
+ vertical-align: middle;
3389
+ }
3390
+
3391
+ @keyframes rs-skeleton-pulse {
3392
+ 0%,
3393
+ 100% {
3394
+ opacity: 1;
3395
+ }
3396
+ 50% {
3397
+ opacity: 0.5;
3398
+ }
3399
+ }
3400
+
3401
+ .rs-deposit-address-copy {
3402
+ display: flex;
3403
+ align-items: center;
3404
+ justify-content: center;
3405
+ gap: 8px;
3406
+ width: 100%;
3407
+ padding: 10px 12px;
3408
+ border: none;
3409
+ border-radius: 8px;
3410
+ background: transparent;
3411
+ color: var(--rs-foreground);
3412
+ font-size: 14px;
3413
+ font-weight: 500;
3414
+ line-height: normal;
3415
+ font-family: inherit;
3416
+ cursor: pointer;
3417
+ transition: background-color 0.15s;
3418
+ }
3419
+
3420
+ .rs-deposit-address-copy:hover {
3421
+ background: var(--rs-surface-subtle);
3422
+ }
3423
+
3424
+ .rs-deposit-address-copy svg {
3425
+ width: 16px;
3426
+ height: 16px;
3427
+ }
3428
+
3429
+ .rs-deposit-address-balance {
3430
+ font-size: 12px;
3431
+ color: var(--rs-muted-foreground);
3432
+ text-align: center;
3433
+ }
3434
+
3435
+ .rs-deposit-address-error {
3436
+ font-size: 12px;
3437
+ color: var(--rs-error);
3438
+ text-align: center;
3439
+ }
3440
+
3441
+ .rs-deposit-address-rails {
3442
+ display: flex;
3443
+ width: 100%;
3444
+ gap: 0;
3445
+ border: 1px solid var(--rs-border);
3446
+ border-radius: var(--rs-radius);
3447
+ overflow: hidden;
3448
+ }
3449
+
3450
+ .rs-deposit-address-rail {
3451
+ flex: 1;
3452
+ padding: 8px 12px;
3453
+ font-size: 13px;
3454
+ font-weight: 500;
3455
+ border: none;
3456
+ background: transparent;
3457
+ color: var(--rs-muted-foreground);
3458
+ cursor: pointer;
3459
+ transition: background 0.15s, color 0.15s;
3460
+ }
3461
+
3462
+ .rs-deposit-address-rail:not(:first-child) {
3463
+ border-left: 1px solid var(--rs-border);
3464
+ }
3465
+
3466
+ .rs-deposit-address-rail:hover {
3467
+ background: var(--rs-muted);
3468
+ }
3469
+
3470
+ .rs-deposit-address-rail--active {
3471
+ background: var(--rs-accent);
3472
+ color: var(--rs-accent-foreground, #fff);
3473
+ }
3474
+
3475
+ .rs-deposit-address-rail--active:hover {
3476
+ background: var(--rs-accent);
3477
+ }
3478
+
3479
+ .rs-deposit-address-tokens-label {
3480
+ font-size: 11px;
3481
+ color: var(--rs-muted-foreground);
3482
+ font-weight: 500;
3483
+ margin-bottom: 4px;
3484
+ }
3485
+
3486
+ .rs-deposit-address-tokens-row {
3487
+ display: flex;
3488
+ gap: 6px;
3489
+ flex-wrap: wrap;
3490
+ }
3491
+
3492
+ .rs-deposit-address-token-badge {
3493
+ display: inline-flex;
3494
+ align-items: center;
3495
+ gap: 4px;
3496
+ padding: 4px 10px;
3497
+ font-size: 12px;
3498
+ font-weight: 500;
3499
+ border: 1px solid var(--rs-border);
3500
+ border-radius: var(--rs-radius);
3501
+ background: var(--rs-card);
3502
+ color: var(--rs-foreground);
3503
+ }
3504
+
3505
+ /* =============================================================================
3506
+ Deposit Notifications (QR flow toast cards)
3507
+ ============================================================================= */
3508
+
3509
+ .rs-step--with-notifications {
3510
+ position: relative;
3511
+ }
3512
+
3513
+ /* Outer card that groups one-or-more deposit entries. Positioned over
3514
+ the bottom of the deposit-address screen. Figma: card/background +
3515
+ 16px padding/gap + drop-shadow. */
3516
+ .rs-deposit-notifications {
3517
+ position: absolute;
3518
+ bottom: 12px;
3519
+ left: 0;
3520
+ right: 0;
3521
+ z-index: 10;
3522
+ display: flex;
3523
+ flex-direction: column;
3524
+ gap: 16px;
3525
+ padding: 16px;
3526
+ background: var(--rs-surface-subtle);
3527
+ border-radius: 16px;
3528
+ filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.14));
3529
+ max-height: calc(100% - 24px);
3530
+ overflow-y: auto;
3531
+ animation: rs-notification-slide-up 0.3s ease-out;
3532
+ }
3533
+
3534
+ .rs-deposit-notification {
3535
+ display: flex;
3536
+ flex-direction: column;
3537
+ gap: 4px;
3538
+ width: 100%;
3539
+ }
3540
+
3541
+ @keyframes rs-notification-slide-up {
3542
+ from {
3543
+ opacity: 0;
3544
+ transform: translateY(16px);
3545
+ }
3546
+ to {
3547
+ opacity: 1;
3548
+ transform: translateY(0);
3549
+ }
3550
+ }
3551
+
3552
+ .rs-deposit-notification-header {
3553
+ display: flex;
3554
+ align-items: center;
3555
+ gap: 12px;
3556
+ padding: 0;
3557
+ }
3558
+
3559
+ .rs-deposit-notification-icon {
3560
+ flex-shrink: 0;
3561
+ width: 42px;
3562
+ height: 42px;
3563
+ display: inline-flex;
3564
+ align-items: center;
3565
+ justify-content: center;
3566
+ }
3567
+
3568
+ .rs-deposit-notification-badge {
3569
+ width: 42px;
3570
+ height: 42px;
3571
+ border-radius: 50%;
3572
+ display: flex;
3573
+ align-items: center;
3574
+ justify-content: center;
3575
+ }
3576
+
3577
+ .rs-deposit-notification-badge--complete svg,
3578
+ .rs-deposit-notification-badge--failed svg {
3579
+ width: 20px;
3580
+ height: 20px;
3581
+ }
3582
+
3583
+ .rs-deposit-notification-badge--complete {
3584
+ background-color: #00bc7d;
3585
+ color: #ffffff;
3586
+ }
3587
+
3588
+ .rs-deposit-notification-badge--failed {
3589
+ background-color: #fb2c36;
3590
+ color: #ffffff;
3591
+ }
3592
+
3593
+ .rs-deposit-notification-badge--processing {
3594
+ background-color: transparent;
3595
+ color: var(--rs-icon-secondary);
3596
+ }
3597
+
3598
+ .rs-deposit-notification-spinner {
3599
+ width: 42px;
3600
+ height: 42px;
3601
+ animation: rs-spin 1s linear infinite;
3602
+ }
3603
+
3604
+ /* Spinner ring/arc colors flip with the theme. Light: a faint zinc-200 ring
3605
+ with a zinc-600 arc on the near-white card. Dark: the Figma values — a
3606
+ zinc-300 ring with a zinc-600 arc on the #18181b card. */
3607
+ .rs-deposit-notification-spinner-track {
3608
+ stroke: #e4e4e7;
3609
+ }
3610
+
3611
+ .rs-deposit-notification-spinner-head {
3612
+ stroke: #52525c;
3613
+ }
3614
+
3615
+ .rs-modal[data-theme="dark"] .rs-deposit-notification-spinner-track {
3616
+ stroke: #d4d4d8;
3617
+ }
3618
+
3619
+ .rs-modal[data-theme="dark"] .rs-deposit-notification-spinner-head {
3620
+ stroke: #52525c;
3621
+ }
3622
+
3623
+ .rs-deposit-notification-content {
3624
+ flex: 1;
3625
+ min-width: 0;
3626
+ display: flex;
3627
+ flex-direction: column;
3628
+ justify-content: center;
3629
+ align-self: stretch;
3630
+ }
3631
+
3632
+ .rs-deposit-notification-title-row {
3633
+ display: flex;
3634
+ align-items: center;
3635
+ justify-content: space-between;
3636
+ gap: 8px;
3637
+ width: 100%;
3638
+ }
3639
+
3640
+ .rs-deposit-notification-title {
3641
+ font-size: 14px;
3642
+ font-weight: 700;
3643
+ line-height: normal;
3644
+ color: var(--rs-foreground);
3645
+ }
3646
+
3647
+ .rs-deposit-notification-subtitle {
3648
+ font-size: 12px;
3649
+ font-weight: 500;
3650
+ line-height: normal;
3651
+ color: var(--rs-muted);
3652
+ margin-top: 0;
3653
+ word-break: break-word;
3654
+ }
3655
+
3656
+ .rs-deposit-notification-close {
3657
+ flex-shrink: 0;
3658
+ width: 16px;
3659
+ height: 16px;
3660
+ display: inline-flex;
3661
+ align-items: center;
3662
+ justify-content: center;
3663
+ border: none;
3664
+ background: transparent;
3665
+ color: var(--rs-icon-secondary);
3666
+ cursor: pointer;
3667
+ padding: 0;
3668
+ transition: opacity 0.15s;
3669
+ }
3670
+
3671
+ .rs-deposit-notification-close:hover {
3672
+ opacity: 0.7;
3673
+ }
3674
+
3675
+ .rs-deposit-notification-close svg {
3676
+ width: 16px;
3677
+ height: 16px;
3678
+ }
3679
+
3680
+ .rs-deposit-notification-toggle {
3681
+ display: flex;
3682
+ align-items: center;
3683
+ justify-content: space-between;
3684
+ width: 100%;
3685
+ height: 33px;
3686
+ padding: 8px 0 8px 54px;
3687
+ border: none;
3688
+ background: transparent;
3689
+ color: var(--rs-muted);
3690
+ font-size: 12px;
3691
+ font-weight: 500;
3692
+ line-height: normal;
3693
+ font-family: inherit;
3694
+ cursor: pointer;
3695
+ margin: 0;
3696
+ text-align: left;
3697
+ }
3698
+
3699
+ .rs-deposit-notification-toggle-chevron {
3700
+ width: 16px;
3701
+ height: 16px;
3702
+ color: var(--rs-icon-secondary);
3703
+ flex-shrink: 0;
3704
+ transition: transform 0.15s ease;
3705
+ }
3706
+
3707
+ .rs-deposit-notification--expanded .rs-deposit-notification-toggle-chevron {
3708
+ transform: rotate(180deg);
3709
+ }
3710
+
3711
+ .rs-deposit-notification-details {
3712
+ margin: 4px 0 0 54px;
3713
+ padding: 8px 10px;
3714
+ background: var(--rs-background);
3715
+ border-radius: var(--rs-radius-sm);
3716
+ }
3717
+
3718
+ .rs-deposit-notification-row {
3719
+ display: flex;
3720
+ align-items: center;
3721
+ justify-content: space-between;
3722
+ padding: 5px 0;
3723
+ }
3724
+
3725
+ .rs-deposit-notification-row + .rs-deposit-notification-row {
3726
+ border-top: 1px solid var(--rs-border-surface);
3727
+ }
3728
+
3729
+ .rs-deposit-notification-label {
3730
+ font-size: 12px;
3731
+ color: var(--rs-muted);
3732
+ }
3733
+
3734
+ .rs-deposit-notification-value {
3735
+ font-size: 12px;
3736
+ font-weight: 500;
3737
+ color: var(--rs-foreground);
3738
+ font-family: "Geist Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo,
3739
+ Monaco, Consolas, monospace;
3740
+ }
3741
+
3742
+ .rs-deposit-notification-link {
3743
+ display: inline-flex;
3744
+ align-items: center;
3745
+ gap: 3px;
3746
+ color: var(--rs-foreground);
3747
+ text-decoration: none;
3748
+ transition: opacity 0.15s;
3749
+ }
3750
+
3751
+ .rs-deposit-notification-link:hover {
3752
+ opacity: 0.7;
3753
+ }
3754
+
3755
+ .rs-deposit-notification-link-icon {
3756
+ width: 10px;
3757
+ height: 10px;
3758
+ }
3759
+
3760
+ /* =============================================================================
3761
+ Processing Badges (centered icon badges)
3762
+ ============================================================================= */
3763
+
3764
+ .rs-step-header--centered {
3765
+ display: flex;
3766
+ flex-direction: column;
3767
+ align-items: center;
3768
+ text-align: center;
3769
+ padding: 16px 16px 0;
3770
+ }
3771
+
3772
+ .rs-step-header--centered .rs-step-title {
3773
+ margin-top: 0;
3774
+ }
3775
+
3776
+ .rs-step-header--centered .rs-step-description {
3777
+ max-width: 280px;
3778
+ }
3779
+
3780
+ .rs-success-badge {
3781
+ width: 44px;
3782
+ height: 44px;
3783
+ border-radius: 50%;
3784
+ background-color: var(--rs-success);
3785
+ color: white;
3786
+ display: flex;
3787
+ align-items: center;
3788
+ justify-content: center;
3789
+ margin: 0 auto 16px;
3790
+ animation: rs-success-glow 2s ease-in-out infinite;
3791
+ }
3792
+
3793
+ .rs-success-badge svg {
3794
+ width: 22px;
3795
+ height: 22px;
3796
+ }
3797
+
3798
+ @keyframes rs-success-glow {
3799
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(48, 164, 108, 0.3); }
3800
+ 50% { box-shadow: 0 0 0 12px rgba(48, 164, 108, 0); }
3801
+ }
3802
+
3803
+ .rs-modal[data-theme="dark"] .rs-success-badge {
3804
+ animation-name: rs-success-glow-dark;
3805
+ }
3806
+
3807
+ @keyframes rs-success-glow-dark {
3808
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(60, 177, 121, 0.3); }
3809
+ 50% { box-shadow: 0 0 0 12px rgba(60, 177, 121, 0); }
3810
+ }
3811
+
3812
+ .rs-processing-badge {
3813
+ width: 56px;
3814
+ height: 56px;
3815
+ border-radius: 50%;
3816
+ background-color: var(--rs-primary-tint);
3817
+ color: var(--rs-primary);
3818
+ display: flex;
3819
+ align-items: center;
3820
+ justify-content: center;
3821
+ margin: 0 auto 16px;
3822
+ }
3823
+
3824
+ .rs-processing-badge .rs-spinner {
3825
+ width: 28px;
3826
+ height: 28px;
3827
+ }
3828
+
3829
+ .rs-failed-badge {
3830
+ width: 56px;
3831
+ height: 56px;
3832
+ border-radius: 50%;
3833
+ background-color: var(--rs-error-tint);
3834
+ color: var(--rs-error);
3835
+ display: flex;
3836
+ align-items: center;
3837
+ justify-content: center;
3838
+ margin: 0 auto 16px;
3839
+ }
3840
+
3841
+ .rs-failed-badge svg {
3842
+ width: 28px;
3843
+ height: 28px;
3844
+ }
3845
+
3846
+ /* =============================================================================
3847
+ Card Value Status Colors + External Link
3848
+ ============================================================================= */
3849
+
3850
+ .rs-card-value--success {
3851
+ color: var(--rs-success);
3852
+ }
3853
+
3854
+ .rs-card-value--error {
3855
+ color: var(--rs-error);
3856
+ }
3857
+
3858
+ .rs-card-external-link {
3859
+ display: inline-flex;
3860
+ align-items: center;
3861
+ color: var(--rs-muted-foreground);
3862
+ transition: color 0.15s;
3863
+ text-decoration: none;
3864
+ }
3865
+
3866
+ .rs-card-external-link:hover {
3867
+ color: var(--rs-foreground);
3868
+ }
3869
+
3870
+ .rs-card-external-link svg {
3871
+ width: 12px;
3872
+ height: 12px;
3873
+ }
3874
+
3875
+ /* =============================================================================
3876
+ Details Toggle
3877
+ ============================================================================= */
3878
+
3879
+ .rs-details-toggle {
3880
+ display: flex;
3881
+ align-items: center;
3882
+ justify-content: center;
3883
+ gap: 4px;
3884
+ width: 100%;
3885
+ padding: 8px 0;
3886
+ border: none;
3887
+ background: transparent;
3888
+ color: var(--rs-muted-foreground);
3889
+ font-size: 12px;
3890
+ font-weight: 500;
3891
+ cursor: pointer;
3892
+ font-family: inherit;
3893
+ transition: color 0.15s;
3894
+ }
3895
+
3896
+ .rs-details-toggle:hover {
3897
+ color: var(--rs-foreground);
3898
+ }
3899
+
3900
+ .rs-details-toggle svg {
3901
+ width: 14px;
3902
+ height: 14px;
3903
+ transition: transform 0.2s;
3904
+ }
3905
+
3906
+ .rs-details-toggle--open svg {
3907
+ transform: rotate(180deg);
3908
+ }
3909
+
3910
+ /* =============================================================================
3911
+ History Button (Header)
3912
+ ============================================================================= */
3913
+
3914
+ .rs-modal-header-history {
3915
+ display: flex;
3916
+ align-items: center;
3917
+ justify-content: center;
3918
+ width: 24px;
3919
+ height: 24px;
3920
+ padding: 0;
3921
+ border: none;
3922
+ border-radius: 4px;
3923
+ background: transparent;
3924
+ color: var(--rs-foreground);
3925
+ cursor: pointer;
3926
+ transition: opacity 0.15s;
3927
+ }
3928
+
3929
+ .rs-modal-header-history:hover:not(:disabled) {
3930
+ opacity: 0.65;
3931
+ }
3932
+
3933
+ .rs-modal-header-history:disabled {
3934
+ opacity: 0.3;
3935
+ cursor: not-allowed;
3936
+ }
3937
+
3938
+ .rs-modal-header-history svg {
3939
+ width: 24px;
3940
+ height: 24px;
3941
+ }
3942
+
3943
+ /* =============================================================================
3944
+ Deposit History Panel — matches Figma 1878:142660 / 1878:142727.
3945
+ The panel overlays the deposit flow inside .rs-modal-content; its own
3946
+ layout uses the .rs-screen pattern (padded container + scrollable body
3947
+ + powered-by anchored to the bottom).
3948
+ ============================================================================= */
3949
+
3950
+ .rs-history-panel {
3951
+ position: absolute;
3952
+ inset: 0;
3953
+ z-index: 10;
3954
+ display: flex;
3955
+ flex-direction: column;
3956
+ padding: 16px;
3957
+ gap: 16px;
3958
+ background: var(--rs-background);
3959
+ border-radius: inherit;
3960
+ animation: rs-history-slide-in 0.2s cubic-bezier(0.32, 0.72, 0, 1);
3961
+ }
3962
+
3963
+ @keyframes rs-history-slide-in {
3964
+ from {
3965
+ opacity: 0;
3966
+ transform: translateX(8px);
3967
+ }
3968
+ to {
3969
+ opacity: 1;
3970
+ transform: translateX(0);
3971
+ }
3972
+ }
3973
+
3974
+ /* The screen body inside the history panel scrolls when the list grows
3975
+ beyond the capped modal height. The BodyHeader stays pinned at the
3976
+ top of the screen body; only the list itself moves under scroll. */
3977
+ .rs-history-screen {
3978
+ flex: 1;
3979
+ display: flex;
3980
+ flex-direction: column;
3981
+ flex-grow: 1;
3982
+ padding: 0;
3983
+ gap: 16px;
3984
+ min-height: 0;
3985
+ }
3986
+
3987
+ .rs-history-screen-body {
3988
+ display: flex;
3989
+ flex-direction: column;
3990
+ gap: 16px;
3991
+ flex: 1;
3992
+ min-height: 0;
3993
+ }
3994
+
3995
+ .rs-history-screen > .rs-powered-by {
3996
+ padding: 0;
3997
+ margin-top: auto;
3998
+ }
3999
+
4000
+ /* Empty / loading / error state with the big faint history glyph behind
4001
+ centered title + hint copy. */
4002
+ .rs-history-empty {
4003
+ position: relative;
4004
+ flex: 1;
4005
+ min-height: 300px;
4006
+ display: flex;
4007
+ flex-direction: column;
4008
+ align-items: center;
4009
+ justify-content: center;
4010
+ gap: 8px;
4011
+ }
4012
+
4013
+ .rs-history-empty-glyph {
4014
+ position: absolute;
4015
+ top: 50%;
4016
+ left: 50%;
4017
+ width: 256px;
4018
+ height: 256px;
4019
+ transform: translate(-50%, -50%);
4020
+ color: var(--rs-surface);
4021
+ pointer-events: none;
4022
+ display: flex;
4023
+ align-items: center;
4024
+ justify-content: center;
4025
+ }
4026
+
4027
+ .rs-history-empty-glyph svg {
4028
+ width: 100%;
4029
+ height: 100%;
4030
+ }
4031
+
4032
+ .rs-history-empty-text {
4033
+ position: relative;
4034
+ z-index: 1;
4035
+ display: flex;
4036
+ flex-direction: column;
4037
+ align-items: center;
4038
+ gap: 4px;
4039
+ text-align: center;
4040
+ }
4041
+
4042
+ .rs-history-empty-title {
4043
+ font-size: 14px;
4044
+ font-weight: 500;
4045
+ color: var(--rs-foreground);
4046
+ line-height: normal;
4047
+ }
4048
+
4049
+ .rs-history-empty-hint {
4050
+ font-size: 12px;
4051
+ font-weight: 500;
4052
+ color: var(--rs-muted);
4053
+ line-height: normal;
4054
+ }
4055
+
4056
+ /* List of transaction cards. */
4057
+ .rs-history-list {
4058
+ display: flex;
4059
+ flex-direction: column;
4060
+ gap: 12px;
4061
+ flex: 1;
4062
+ overflow-y: auto;
4063
+ overscroll-behavior: contain;
4064
+ scrollbar-gutter: stable;
4065
+ padding-right: 2px;
4066
+ }
4067
+
4068
+ /* Card */
4069
+ .rs-history-card {
4070
+ width: 100%;
4071
+ display: flex;
4072
+ flex-direction: column;
4073
+ gap: 0;
4074
+ padding: 12px 8px;
4075
+ background: var(--rs-surface-subtle);
4076
+ border: none;
4077
+ border-radius: 8px;
4078
+ cursor: pointer;
4079
+ text-align: left;
4080
+ font-family: inherit;
4081
+ color: var(--rs-foreground);
4082
+ transition: background-color 0.15s;
4083
+ }
4084
+
4085
+ .rs-history-card:hover:not(:disabled) {
4086
+ background: var(--rs-surface);
4087
+ }
4088
+
4089
+ .rs-history-card:focus-visible {
4090
+ outline: 2px solid var(--rs-border-accent);
4091
+ outline-offset: 2px;
4092
+ }
4093
+
4094
+ .rs-history-card-row {
4095
+ display: flex;
4096
+ align-items: center;
4097
+ gap: 8px;
4098
+ width: 100%;
4099
+ }
4100
+
4101
+ .rs-history-card-icons {
4102
+ display: flex;
4103
+ align-items: flex-end;
4104
+ flex-shrink: 0;
4105
+ }
4106
+
4107
+ .rs-history-card-token {
4108
+ width: 28px;
4109
+ height: 28px;
4110
+ margin-right: -10px;
4111
+ border-radius: 50%;
4112
+ background: var(--rs-surface);
4113
+ display: flex;
4114
+ align-items: center;
4115
+ justify-content: center;
4116
+ overflow: hidden;
4117
+ font-size: 11px;
4118
+ font-weight: 600;
4119
+ color: var(--rs-muted);
4120
+ }
4121
+
4122
+ .rs-history-card-token img {
4123
+ width: 100%;
4124
+ height: 100%;
4125
+ object-fit: cover;
4126
+ border-radius: 50%;
4127
+ }
4128
+
4129
+ .rs-history-card-chain {
4130
+ width: 14px;
4131
+ height: 14px;
4132
+ border-radius: 50%;
4133
+ background: var(--rs-background);
4134
+ display: flex;
4135
+ align-items: center;
4136
+ justify-content: center;
4137
+ overflow: hidden;
4138
+ }
4139
+
4140
+ .rs-history-card-chain img {
4141
+ width: 100%;
4142
+ height: 100%;
4143
+ object-fit: cover;
4144
+ border-radius: 50%;
4145
+ }
4146
+
4147
+ .rs-history-card-text {
4148
+ flex: 1;
4149
+ min-width: 0;
4150
+ display: flex;
4151
+ flex-direction: column;
4152
+ gap: 4px;
4153
+ }
4154
+
4155
+ .rs-history-card-title {
4156
+ font-size: 14px;
4157
+ font-weight: 700;
4158
+ color: var(--rs-foreground);
4159
+ line-height: normal;
4160
+ white-space: nowrap;
4161
+ }
4162
+
4163
+ .rs-history-card-date {
4164
+ font-size: 12px;
4165
+ font-weight: 500;
4166
+ color: var(--rs-muted);
4167
+ line-height: normal;
4168
+ white-space: nowrap;
4169
+ }
4170
+
4171
+ .rs-history-card-side {
4172
+ display: flex;
4173
+ flex-direction: column;
4174
+ align-items: flex-end;
4175
+ justify-content: center;
4176
+ gap: 4px;
4177
+ flex-shrink: 0;
4178
+ }
4179
+
4180
+ .rs-history-card-amount {
4181
+ font-size: 12px;
4182
+ font-weight: 500;
4183
+ color: var(--rs-foreground);
4184
+ line-height: normal;
4185
+ font-feature-settings: "tnum";
4186
+ white-space: nowrap;
4187
+ }
4188
+
4189
+ /* Collapsing wrapper that animates the detail block between closed/open. */
4190
+ .rs-history-card-panel {
4191
+ display: grid;
4192
+ grid-template-rows: 0fr;
4193
+ transition: grid-template-rows 0.25s ease;
4194
+ }
4195
+
4196
+ .rs-history-card--expanded .rs-history-card-panel {
4197
+ grid-template-rows: 1fr;
4198
+ }
4199
+
4200
+ .rs-history-card-panel-inner {
4201
+ overflow: hidden;
4202
+ min-height: 0;
4203
+ /* Keep the collapsed panel (and its tx link) out of the tab order.
4204
+ visibility stays "visible" through the collapse so the content is
4205
+ present during the height animation, then flips hidden at the end. */
4206
+ visibility: hidden;
4207
+ transition: visibility 0.25s;
4208
+ }
4209
+
4210
+ .rs-history-card--expanded .rs-history-card-panel-inner {
4211
+ visibility: visible;
4212
+ }
4213
+
4214
+ /* Expanded detail block under the row. */
4215
+ .rs-history-card-details {
4216
+ display: flex;
4217
+ flex-direction: column;
4218
+ gap: 8px;
4219
+ width: 100%;
4220
+ padding-top: 16px;
4221
+ }
4222
+
4223
+ .rs-history-card-link {
4224
+ display: inline-flex;
4225
+ align-items: center;
4226
+ gap: 4px;
4227
+ font-size: 12px;
4228
+ font-weight: 500;
4229
+ line-height: 18px;
4230
+ color: #0084d1;
4231
+ text-decoration: none;
4232
+ font-family: inherit;
4233
+ }
4234
+
4235
+ .rs-history-card-link svg {
4236
+ width: 16px;
4237
+ height: 16px;
4238
+ }
4239
+
4240
+ .rs-history-card-link:hover {
4241
+ text-decoration: underline;
4242
+ }
4243
+
4244
+ /* Status badges */
4245
+ .rs-history-badge {
4246
+ display: inline-flex;
4247
+ align-items: center;
4248
+ padding: 2px 6px;
4249
+ border-radius: 20px;
4250
+ font-size: 12px;
4251
+ font-weight: 500;
4252
+ line-height: normal;
4253
+ white-space: nowrap;
4254
+ }
4255
+
4256
+ .rs-history-badge--completed {
4257
+ background: #a4f4cf;
4258
+ color: #004f3b;
4259
+ }
4260
+
4261
+ .rs-history-badge--processing {
4262
+ background: #bee3ff;
4263
+ color: #00407f;
4264
+ }
4265
+
4266
+ .rs-history-badge--pending {
4267
+ background: #fde68a;
4268
+ color: #78350f;
4269
+ }
4270
+
4271
+ .rs-history-badge--failed {
4272
+ background: #ffc9c9;
4273
+ color: #82181a;
4274
+ }
4275
+
4276
+ .rs-history-badge--spam {
4277
+ background: var(--rs-surface);
4278
+ color: var(--rs-muted);
4279
+ }
4280
+
4281
+ /* Dark-mode badge overrides — Figma swaps to deeper saturated fills with
4282
+ light text for contrast against the #18181b card surface. */
4283
+ .rs-modal[data-theme="dark"] .rs-history-badge--completed {
4284
+ background: #006045;
4285
+ color: #d0fae5;
4286
+ }
4287
+
4288
+ .rs-modal[data-theme="dark"] .rs-history-badge--failed {
4289
+ background: #9f0712;
4290
+ color: #ffe2e2;
4291
+ }
4292
+
4293
+ .rs-modal[data-theme="dark"] .rs-history-badge--processing {
4294
+ background: #00407f;
4295
+ color: #bee3ff;
4296
+ }
4297
+
4298
+ .rs-modal[data-theme="dark"] .rs-history-badge--pending {
4299
+ background: #78350f;
4300
+ color: #fde68a;
4301
+ }
4302
+
4303
+ /* Load more button at the end of the list. */
4304
+ .rs-history-load-more {
4305
+ display: flex;
4306
+ align-items: center;
4307
+ justify-content: center;
4308
+ padding: 12px 16px;
4309
+ border: 1px solid var(--rs-border-surface);
4310
+ border-radius: 8px;
4311
+ background: transparent;
4312
+ color: var(--rs-muted);
4313
+ font-size: 14px;
4314
+ font-weight: 500;
4315
+ font-family: inherit;
4316
+ cursor: pointer;
4317
+ transition: color 0.15s, background-color 0.15s, border-color 0.15s;
4318
+ }
4319
+
4320
+ .rs-history-load-more:hover:not(:disabled) {
4321
+ color: var(--rs-foreground);
4322
+ background: var(--rs-surface);
4323
+ border-color: var(--rs-border);
4324
+ }
4325
+
4326
+ .rs-history-load-more:disabled {
4327
+ opacity: 0.5;
4328
+ cursor: not-allowed;
4329
+ }
4330
+
4331
+ /* =============================================================================
4332
+ Shell — matches Figma "modal" frame (padded container, no fixed title bar)
4333
+ ============================================================================= */
4334
+
4335
+ .rs-shell {
4336
+ display: flex;
4337
+ flex-direction: column;
4338
+ padding: 16px;
4339
+ gap: 16px;
4340
+ }
4341
+
4342
+ .rs-shell-nav {
4343
+ display: flex;
4344
+ align-items: center;
4345
+ justify-content: space-between;
4346
+ min-height: 24px;
4347
+ }
4348
+
4349
+ .rs-shell-nav-actions {
4350
+ display: flex;
4351
+ align-items: center;
4352
+ gap: 12px;
4353
+ }
4354
+
4355
+ .rs-shell-icon-btn {
4356
+ display: inline-flex;
4357
+ align-items: center;
4358
+ justify-content: center;
4359
+ width: 24px;
4360
+ height: 24px;
4361
+ padding: 0;
4362
+ background: transparent;
4363
+ border: none;
4364
+ border-radius: 4px;
4365
+ color: var(--rs-foreground);
4366
+ cursor: pointer;
4367
+ transition: opacity 0.15s;
4368
+ font-family: inherit;
4369
+ }
4370
+
4371
+ .rs-shell-icon-btn:hover:not(:disabled) {
4372
+ opacity: 0.65;
4373
+ }
4374
+
4375
+ .rs-shell-icon-btn:disabled {
4376
+ opacity: 0.3;
4377
+ cursor: not-allowed;
4378
+ }
4379
+
4380
+ .rs-shell-icon-btn:focus-visible {
4381
+ outline: 2px solid var(--rs-border-accent);
4382
+ outline-offset: 2px;
4383
+ }
4384
+
4385
+ .rs-shell-icon-btn svg {
4386
+ width: 24px;
4387
+ height: 24px;
4388
+ }
4389
+
4390
+ .rs-shell-body {
4391
+ display: flex;
4392
+ flex-direction: column;
4393
+ gap: 32px;
4394
+ }
4395
+
4396
+ .rs-shell-section {
4397
+ display: flex;
4398
+ flex-direction: column;
4399
+ gap: 12px;
4400
+ }
4401
+
4402
+ /* Body header — icon wrapper + title + subtitle */
4403
+
4404
+ .rs-body-header {
4405
+ display: flex;
4406
+ flex-direction: column;
4407
+ gap: 8px;
4408
+ }
4409
+
4410
+ /* Figma gives subtitle headers a 12px icon→title gap (vs 8px for title-only
4411
+ headers like the QR screen). */
4412
+ .rs-body-header:has(.rs-body-header-subtitle) {
4413
+ gap: 12px;
4414
+ }
4415
+
4416
+ .rs-body-header-icon {
4417
+ display: inline-flex;
4418
+ align-items: center;
4419
+ justify-content: center;
4420
+ width: 40px;
4421
+ height: 40px;
4422
+ padding: 8px;
4423
+ background: var(--rs-icon-wrapper-bg);
4424
+ border: 1px solid var(--rs-icon-wrapper-bg);
4425
+ border-radius: 8px;
4426
+ color: var(--rs-icon-wrapper-icon);
4427
+ box-sizing: border-box;
4428
+ }
4429
+
4430
+ .rs-body-header-icon svg {
4431
+ width: 24px;
4432
+ height: 24px;
4433
+ }
4434
+
4435
+ .rs-body-header-icon--success {
4436
+ background: var(--rs-success);
4437
+ border-color: var(--rs-success);
4438
+ color: #ffffff;
4439
+ }
4440
+
4441
+ .rs-body-header-icon--error {
4442
+ background: var(--rs-error);
4443
+ border-color: var(--rs-error);
4444
+ color: #ffffff;
4445
+ }
4446
+
4447
+ .rs-body-header-text {
4448
+ display: flex;
4449
+ flex-direction: column;
4450
+ gap: 4px;
4451
+ }
4452
+
4453
+ .rs-body-header-title {
4454
+ font-size: 16px;
4455
+ font-weight: 700;
4456
+ line-height: 1.2;
4457
+ color: var(--rs-foreground);
4458
+ margin: 0;
4459
+ }
4460
+
4461
+ .rs-body-header-subtitle {
4462
+ font-size: 14px;
4463
+ font-weight: 500;
4464
+ line-height: normal;
4465
+ color: var(--rs-muted);
4466
+ margin: 0;
4467
+ }
4468
+
4469
+ /* Ticker — per-digit odometer-style animation for the live timer.
4470
+ Each slot clips its content; the outgoing digit slides up and out while
4471
+ the incoming digit slides up from below. Static chars (e.g. ":") never
4472
+ change so they never animate. */
4473
+
4474
+ .rs-ticker {
4475
+ display: inline-flex;
4476
+ font-variant-numeric: tabular-nums;
4477
+ line-height: 1;
4478
+ }
4479
+
4480
+ .rs-ticker-slot {
4481
+ position: relative;
4482
+ display: inline-block;
4483
+ overflow: hidden;
4484
+ height: 1em;
4485
+ line-height: 1;
4486
+ vertical-align: baseline;
4487
+ }
4488
+
4489
+ .rs-ticker-in,
4490
+ .rs-ticker-out {
4491
+ display: inline-block;
4492
+ line-height: 1;
4493
+ }
4494
+
4495
+ .rs-ticker-out {
4496
+ position: absolute;
4497
+ top: 0;
4498
+ left: 0;
4499
+ right: 0;
4500
+ animation: rs-ticker-out 320ms cubic-bezier(0.16, 1, 0.3, 1) both;
4501
+ }
4502
+
4503
+ .rs-ticker-in {
4504
+ animation: rs-ticker-in 320ms cubic-bezier(0.16, 1, 0.3, 1) both;
4505
+ }
4506
+
4507
+ @keyframes rs-ticker-out {
4508
+ from {
4509
+ transform: translateY(0);
4510
+ opacity: 1;
4511
+ }
4512
+ to {
4513
+ transform: translateY(-70%);
4514
+ opacity: 0;
4515
+ }
4516
+ }
4517
+
4518
+ @keyframes rs-ticker-in {
4519
+ from {
4520
+ transform: translateY(70%);
4521
+ opacity: 0;
4522
+ }
4523
+ to {
4524
+ transform: translateY(0);
4525
+ opacity: 1;
4526
+ }
4527
+ }
4528
+
4529
+ @media (prefers-reduced-motion: reduce) {
4530
+ .rs-ticker-in,
4531
+ .rs-ticker-out {
4532
+ animation: none;
4533
+ }
4534
+ .rs-ticker-out {
4535
+ display: none;
4536
+ }
4537
+ }
4538
+
4539
+ /* List row — Figma "oauth button" pattern */
4540
+
4541
+ .rs-list {
4542
+ display: flex;
4543
+ flex-direction: column;
4544
+ gap: 8px;
4545
+ }
4546
+
4547
+ .rs-list-row {
4548
+ display: flex;
4549
+ align-items: center;
4550
+ gap: 8px;
4551
+ width: 100%;
4552
+ padding: 12px;
4553
+ background: var(--rs-background-secondary);
4554
+ border: 1px solid var(--rs-background-secondary);
4555
+ border-radius: 8px;
4556
+ color: var(--rs-foreground);
4557
+ cursor: pointer;
4558
+ text-align: left;
4559
+ transition:
4560
+ background-color 0.15s,
4561
+ border-color 0.15s;
4562
+ font-family: inherit;
4563
+ font-size: inherit;
4564
+ }
4565
+
4566
+ .rs-list-row:hover:not(:disabled) {
4567
+ background: var(--rs-surface-hover);
4568
+ border-color: var(--rs-surface-hover);
4569
+ }
4570
+
4571
+ .rs-list-row:disabled {
4572
+ cursor: not-allowed;
4573
+ opacity: 0.6;
4574
+ }
4575
+
4576
+ .rs-list-row:focus-visible {
4577
+ outline: 2px solid var(--rs-border-accent);
4578
+ outline-offset: 2px;
4579
+ }
4580
+
4581
+ .rs-list-row-leading {
4582
+ flex-shrink: 0;
4583
+ display: inline-flex;
4584
+ align-items: center;
4585
+ justify-content: center;
4586
+ width: 24px;
4587
+ height: 24px;
4588
+ /* Figma: oauth-button/default/icon — same value light/dark. */
4589
+ color: #71717b;
4590
+ }
4591
+
4592
+ .rs-list-row-leading svg {
4593
+ width: 24px;
4594
+ height: 24px;
4595
+ }
4596
+
4597
+ .rs-list-row-leading--media {
4598
+ width: 32px;
4599
+ height: 32px;
4600
+ border-radius: 6px;
4601
+ overflow: hidden;
4602
+ background: var(--rs-surface);
4603
+ }
4604
+
4605
+ .rs-list-row-leading--media img {
4606
+ width: 100%;
4607
+ height: 100%;
4608
+ object-fit: cover;
4609
+ }
4610
+
4611
+ .rs-list-row-body {
4612
+ flex: 1;
4613
+ min-width: 0;
4614
+ display: flex;
4615
+ align-items: center;
4616
+ justify-content: space-between;
4617
+ gap: 8px;
4618
+ }
4619
+
4620
+ .rs-list-row-text {
4621
+ display: flex;
4622
+ flex-direction: column;
4623
+ gap: 4px;
4624
+ min-width: 0;
4625
+ }
4626
+
4627
+ .rs-list-row-title {
4628
+ font-size: 14px;
4629
+ font-weight: 500;
4630
+ color: var(--rs-foreground);
4631
+ line-height: 1.25;
4632
+ overflow: hidden;
4633
+ text-overflow: ellipsis;
4634
+ white-space: nowrap;
4635
+ }
4636
+
4637
+ .rs-list-row-subtitle {
4638
+ font-size: 12px;
4639
+ font-weight: 500;
4640
+ color: var(--rs-muted);
4641
+ line-height: 1.25;
4642
+ overflow: hidden;
4643
+ text-overflow: ellipsis;
4644
+ white-space: nowrap;
4645
+ }
4646
+
4647
+ .rs-list-row-meta {
4648
+ display: flex;
4649
+ align-items: center;
4650
+ gap: 4px;
4651
+ flex-shrink: 0;
4652
+ padding: 2px 6px;
4653
+ font-size: 12px;
4654
+ font-weight: 500;
4655
+ color: var(--rs-muted);
4656
+ border-radius: 20px;
4657
+ }
4658
+
4659
+ .rs-list-row-meta-icons {
4660
+ display: flex;
4661
+ align-items: center;
4662
+ gap: 4px;
4663
+ }
4664
+
4665
+ .rs-list-row-meta-icons > * {
4666
+ width: 20px;
4667
+ height: 20px;
4668
+ display: inline-flex;
4669
+ align-items: center;
4670
+ justify-content: center;
4671
+ flex-shrink: 0;
4672
+ }
4673
+
4674
+ .rs-list-row-meta-icons img,
4675
+ .rs-list-row-meta-icons svg {
4676
+ width: 100%;
4677
+ height: 100%;
4678
+ display: block;
4679
+ }
4680
+
4681
+ .rs-list-row-chevron {
4682
+ flex-shrink: 0;
4683
+ width: 16px;
4684
+ height: 16px;
4685
+ /* Figma: oauth-button/default/icon — same #71717b in both themes. */
4686
+ color: #71717b;
4687
+ display: inline-flex;
4688
+ align-items: center;
4689
+ justify-content: center;
4690
+ }
4691
+
4692
+ .rs-list-row-chevron svg {
4693
+ width: 16px;
4694
+ height: 16px;
4695
+ }
4696
+
4697
+ /* Powered-by footer in shell */
4698
+
4699
+ .rs-shell-footer {
4700
+ display: flex;
4701
+ align-items: center;
4702
+ justify-content: center;
4703
+ gap: 4px;
4704
+ font-size: 11px;
4705
+ font-weight: 500;
4706
+ color: var(--rs-muted);
4707
+ }
4708
+
4709
+ /* When the shell is active the dialog content no longer needs a separate
4710
+ border or background — the shell paints everything inside the same padded
4711
+ container, matching Figma. */
4712
+ .rs-modal-content:has(.rs-shell) {
4713
+ border: 1px solid var(--rs-border);
4714
+ background-color: var(--rs-background);
4715
+ }
4716
+
4717
+ /* =============================================================================
4718
+ Fiat On-Ramp (Swapped iframe flow)
4719
+ ============================================================================= */
4720
+
4721
+ /* `.rs-fiat-onramp` is a marker class on the .rs-screen root so the
4722
+ modal-content `:has()` rules below can size correctly. Layout (padding,
4723
+ gap, flex direction) comes from .rs-screen itself, identical to
4724
+ ConnectStep — keeps the top of the page visually unchanged across the
4725
+ payment-method picker → Swapped iframe transition. */
4726
+
4727
+ .rs-fiat-onramp-banner {
4728
+ display: flex;
4729
+ flex-direction: column;
4730
+ gap: 2px;
4731
+ padding: 8px 12px;
4732
+ border-radius: var(--rs-radius-sm);
4733
+ font-size: 12px;
4734
+ line-height: 1.35;
4735
+ border: 1px solid var(--rs-border);
4736
+ }
4737
+
4738
+ .rs-fiat-onramp-banner--info {
4739
+ background: var(--rs-background-secondary);
4740
+ color: var(--rs-foreground);
4741
+ }
4742
+
4743
+ .rs-fiat-onramp-banner--success {
4744
+ background: rgba(34, 197, 94, 0.08);
4745
+ border-color: rgba(34, 197, 94, 0.35);
4746
+ color: var(--rs-foreground);
4747
+ }
4748
+
4749
+ .rs-fiat-onramp-banner--warning {
4750
+ background: rgba(234, 179, 8, 0.08);
4751
+ border-color: rgba(234, 179, 8, 0.4);
4752
+ color: var(--rs-foreground);
4753
+ }
4754
+
4755
+ .rs-fiat-onramp-banner-title {
4756
+ font-weight: 600;
4757
+ }
4758
+
4759
+ .rs-fiat-onramp-banner-detail {
4760
+ color: var(--rs-muted);
4761
+ }
4762
+
4763
+ /* Iframe wrap sized to Swapped's documented dimensions — 400×482 for the
4764
+ fiat on-ramp, 445×585 for Connect (overrides below). Centered horizontally
4765
+ inside the modal so the step body can have header padding. */
4766
+ .rs-fiat-onramp-iframe-wrap {
4767
+ position: relative;
4768
+ width: 100%;
4769
+ max-width: 400px;
4770
+ min-height: 482px;
4771
+ margin: 0 auto;
4772
+ border-radius: var(--rs-radius);
4773
+ overflow: hidden;
4774
+ }
4775
+
4776
+ .rs-fiat-onramp[data-variant="connect"] .rs-fiat-onramp-iframe-wrap {
4777
+ max-width: 445px;
4778
+ min-height: 585px;
4779
+ }
4780
+
4781
+ .rs-fiat-onramp-iframe {
4782
+ display: block;
4783
+ width: 100%;
4784
+ height: 482px;
4785
+ min-height: 482px;
4786
+ border: 0;
4787
+ background: var(--rs-background);
4788
+ }
4789
+
4790
+ .rs-fiat-onramp[data-variant="connect"] .rs-fiat-onramp-iframe {
4791
+ height: 585px;
4792
+ min-height: 585px;
4793
+ }
4794
+
4795
+ .rs-fiat-onramp-loading,
4796
+ .rs-fiat-onramp-error {
4797
+ position: absolute;
4798
+ inset: 0;
4799
+ display: flex;
4800
+ flex-direction: column;
4801
+ align-items: center;
4802
+ justify-content: center;
4803
+ gap: 12px;
4804
+ text-align: center;
4805
+ background: var(--rs-background);
4806
+ color: var(--rs-foreground);
4807
+ padding: 16px;
4808
+ }
4809
+
4810
+ .rs-fiat-onramp-retry {
4811
+ padding: 6px 14px;
4812
+ border: 1px solid var(--rs-border);
4813
+ border-radius: var(--rs-radius-sm);
4814
+ background: var(--rs-background-secondary);
4815
+ color: var(--rs-foreground);
4816
+ font-size: 12px;
4817
+ font-weight: 500;
4818
+ font-family: inherit;
4819
+ cursor: pointer;
4820
+ }
4821
+
4822
+ .rs-fiat-onramp-retry:hover {
4823
+ background: var(--rs-border);
4824
+ }
4825
+
4826
+ /* =============================================================================
4827
+ Exchange picker (Swapped Connect)
4828
+ ============================================================================= */
4829
+
4830
+ .rs-exchange-grid {
4831
+ display: grid;
4832
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4833
+ gap: 8px;
4834
+ }
4835
+
4836
+ .rs-exchange-card {
4837
+ display: flex;
4838
+ min-width: 0;
4839
+ min-height: 104px;
4840
+ flex-direction: column;
4841
+ align-items: center;
4842
+ justify-content: center;
4843
+ gap: 10px;
4844
+ padding: 12px 8px;
4845
+ border: 1px solid var(--rs-background-secondary);
4846
+ border-radius: 8px;
4847
+ background: var(--rs-background-secondary);
4848
+ color: var(--rs-foreground);
4849
+ font-family: inherit;
4850
+ cursor: pointer;
4851
+ transition:
4852
+ background-color 0.15s,
4853
+ border-color 0.15s;
4854
+ }
4855
+
4856
+ .rs-exchange-card:hover:not(:disabled) {
4857
+ background: var(--rs-surface-hover);
4858
+ border-color: var(--rs-surface-hover);
4859
+ }
4860
+
4861
+ .rs-exchange-card:focus-visible {
4862
+ outline: 2px solid var(--rs-border-accent);
4863
+ outline-offset: 2px;
4864
+ }
4865
+
4866
+ .rs-exchange-card-logo {
4867
+ display: inline-flex;
4868
+ align-items: center;
4869
+ justify-content: center;
4870
+ width: 44px;
4871
+ height: 44px;
4872
+ border-radius: 10px;
4873
+ background: var(--rs-surface);
4874
+ color: #71717b;
4875
+ overflow: hidden;
4876
+ }
4877
+
4878
+ .rs-exchange-card-logo img,
4879
+ .rs-exchange-card-logo svg {
4880
+ width: 28px;
4881
+ height: 28px;
4882
+ display: block;
4883
+ object-fit: contain;
4884
+ }
4885
+
4886
+ .rs-exchange-card-name {
4887
+ width: 100%;
4888
+ min-width: 0;
4889
+ font-size: 14px;
4890
+ font-weight: 500;
4891
+ line-height: 1.25;
4892
+ color: var(--rs-foreground);
4893
+ text-align: center;
4894
+ overflow: hidden;
4895
+ text-overflow: ellipsis;
4896
+ white-space: nowrap;
4897
+ }
4898
+
4899
+ .rs-exchange-select-state {
4900
+ min-height: 184px;
4901
+ display: flex;
4902
+ flex-direction: column;
4903
+ align-items: center;
4904
+ justify-content: center;
4905
+ gap: 12px;
4906
+ text-align: center;
4907
+ color: var(--rs-foreground);
4908
+ }
4909
+
4910
+ .rs-exchange-select-state-title {
4911
+ font-size: 14px;
4912
+ font-weight: 600;
4913
+ line-height: 1.35;
4914
+ }
4915
+
4916
+ /* =============================================================================
4917
+ Modal sizing for the Swapped iframe step
4918
+ =============================================================================
4919
+ Modal stays at the default 400px width for the fiat variant (matches
4920
+ Swapped's 400×482 iframe edge-to-edge). Connect needs 445px because its
4921
+ iframe is 445×585. Height grows with the Rhinestone chrome (header
4922
+ icon/title/subtitle + iframe + PoweredBy); cap to viewport so smaller
4923
+ laptops get a scrollable modal-body instead of overflowing the screen. */
4924
+
4925
+ /* Connect's iframe is 445×585 (vs fiat's 400×482). To preserve the same
4926
+ 12px horizontal padding as ConnectStep while still giving Swapped's
4927
+ Connect iframe its documented width, widen the modal by 24px (12 each
4928
+ side) → 469px. Applied from the moment the user enters exchange-connect
4929
+ mode (`data-flow-mode` on rs-modal-body) — not just the iframe step —
4930
+ so the modal width is stable across SetupStep → SwappedIframeStep.
4931
+ Fiat keeps the default 400px modal; its iframe renders at 376px
4932
+ content-width, matching the visual width of ConnectStep's list rows. */
4933
+ .rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"]) {
4934
+ max-width: 469px;
4935
+ }
4936
+
4937
+ .rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"]),
4938
+ .rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"]) {
4939
+ max-height: calc(100vh - 40px);
4940
+ }
4941
+
4942
+ .rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"]) .rs-modal-body,
4943
+ .rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"]) .rs-modal-body {
4944
+ /* `overflow-x: hidden` is explicit because a `visible` x-axis with an
4945
+ `auto` y-axis gets promoted to `auto` on both axes, which paints a
4946
+ phantom horizontal scrollbar even when content fits horizontally. */
4947
+ overflow: hidden auto;
4948
+ }
4949
+
4950
+ /* Pre-size the modal-content to the eventual iframe-mounted height for
4951
+ the iframe-phase only:
4952
+ - `[data-step-type="setup"]` — brief pre-flight before SwappedIframeStep mounts
4953
+ - `:has(...) .rs-fiat-onramp` — SwappedIframeStep's iframe phase is in DOM
4954
+ The tracker phase (.rs-swapped-tracker) is naturally shorter and is
4955
+ excluded so the modal shrinks down to its content instead of leaving
4956
+ a tall empty area below the tracker. Applied on modal-content (not
4957
+ modal-body) so the transition on its min-height animates smoothly
4958
+ when the iframe→tracker phase swap fires. */
4959
+ .rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"][data-step-type="setup"]),
4960
+ .rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"] .rs-fiat-onramp) {
4961
+ min-height: 691px;
4962
+ }
4963
+ .rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"][data-step-type="setup"]),
4964
+ .rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"] .rs-fiat-onramp) {
4965
+ min-height: 794px;
4966
+ }
4967
+
4968
+ /* =============================================================================
4969
+ Custom order tracker
4970
+ =============================================================================
4971
+ Shown after the user creates an order with Swapped — replaces the iframe
4972
+ until the deposit-processor reports bridge-complete. */
4973
+ /* Layout lives in rs-screen now — tracker just contributes the entrance
4974
+ animation and a marker class for any future tracker-only tweaks. The
4975
+ icon + title come from the shared BodyHeader so the header position
4976
+ matches ConnectStep and SwappedIframeStep exactly. */
4977
+ .rs-swapped-tracker {
4978
+ animation: rs-swapped-tracker-enter 250ms ease-out;
4979
+ }
4980
+
4981
+ @keyframes rs-swapped-tracker-enter {
4982
+ from {
4983
+ opacity: 0;
4984
+ }
4985
+ to {
4986
+ opacity: 1;
4987
+ }
4988
+ }
4989
+
4990
+ @keyframes rs-tracker-step-complete {
4991
+ 0% {
4992
+ transform: scale(0.72);
4993
+ }
4994
+ 60% {
4995
+ transform: scale(1.08);
4996
+ }
4997
+ 100% {
4998
+ transform: scale(1);
4999
+ }
5000
+ }
5001
+
5002
+ .rs-swapped-tracker-steps {
5003
+ list-style: none;
5004
+ padding: 0;
5005
+ margin: 0;
5006
+ display: flex;
5007
+ flex-direction: column;
5008
+ flex-grow: 1;
5009
+ }
5010
+
5011
+ .rs-swapped-tracker-step {
5012
+ position: relative;
5013
+ display: flex;
5014
+ align-items: center;
5015
+ justify-content: space-between;
5016
+ gap: 12px;
5017
+ padding: 16px 0;
5018
+ }
5019
+
5020
+ /* Dotted vertical connector between adjacent step markers. */
5021
+ .rs-swapped-tracker-step + .rs-swapped-tracker-step::before {
5022
+ content: "";
5023
+ position: absolute;
5024
+ top: -14px;
5025
+ right: 11px;
5026
+ width: 0;
5027
+ height: 28px;
5028
+ border-left: 1.5px dotted #d4d4d8;
5029
+ }
5030
+
5031
+ .rs-swapped-tracker-step-label {
5032
+ font-size: 15px;
5033
+ color: var(--rs-foreground);
5034
+ flex-grow: 1;
5035
+ }
5036
+
5037
+ .rs-swapped-tracker-step-marker {
5038
+ width: 24px;
5039
+ height: 24px;
5040
+ border-radius: 50%;
5041
+ flex-shrink: 0;
5042
+ display: flex;
5043
+ align-items: center;
5044
+ justify-content: center;
5045
+ background: transparent;
5046
+ border: 1.5px solid #d4d4d8;
5047
+ color: transparent;
5048
+ transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
5049
+ }
5050
+
5051
+ .rs-swapped-tracker-step--active .rs-swapped-tracker-step-marker {
5052
+ border-color: #d4d4d8;
5053
+ background: transparent;
5054
+ /* Spinner SVG uses currentColor; base marker class sets color:transparent
5055
+ for the (hidden) ring glyph — re-establish a visible color here so the
5056
+ active-state spinner actually paints. */
5057
+ color: #18181b;
5058
+ }
5059
+
5060
+ .rs-swapped-tracker-step--active .rs-swapped-tracker-step-marker .rs-spinner {
5061
+ width: 14px;
5062
+ height: 14px;
5063
+ }
5064
+
5065
+ /* Satisfying scale-pop when a step ticks complete — the color transition
5066
+ alone is too subtle to register as "that just happened". */
5067
+ .rs-swapped-tracker-step--complete .rs-swapped-tracker-step-marker {
5068
+ animation: rs-tracker-step-complete 320ms cubic-bezier(0.34, 1.56, 0.64, 1);
5069
+ background: #18181b;
5070
+ border-color: #18181b;
5071
+ color: #fff;
5072
+ }
5073
+
5074
+ .rs-swapped-tracker-step--complete .rs-swapped-tracker-step-marker svg {
5075
+ width: 14px;
5076
+ height: 14px;
5077
+ stroke-width: 3;
5078
+ }
5079
+
5080
+ /* Failed step marker — terminal processor failure or cancellation. Red in
5081
+ both themes (the failure color reads on light and dark). */
5082
+ .rs-swapped-tracker-step--failed .rs-swapped-tracker-step-marker {
5083
+ background: #fb2c36;
5084
+ border-color: #fb2c36;
5085
+ color: #fff;
5086
+ }
5087
+
5088
+ .rs-swapped-tracker-step--failed .rs-swapped-tracker-step-marker svg {
5089
+ width: 14px;
5090
+ height: 14px;
5091
+ stroke-width: 3;
5092
+ }
5093
+
5094
+ /* Terminal message block shown below the steps on failure / cancellation. */
5095
+ .rs-swapped-tracker-terminal {
5096
+ display: flex;
5097
+ flex-direction: column;
5098
+ align-items: center;
5099
+ gap: 12px;
5100
+ text-align: center;
5101
+ }
5102
+
5103
+ .rs-swapped-tracker-terminal-message {
5104
+ margin: 0;
5105
+ font-size: 14px;
5106
+ line-height: 1.4;
5107
+ color: var(--rs-foreground-secondary, #71717a);
5108
+ }
5109
+
5110
+ .rs-swapped-tracker-terminal--failed .rs-swapped-tracker-terminal-message {
5111
+ color: #fb2c36;
5112
+ }
5113
+
5114
+ .rs-swapped-tracker-retry {
5115
+ padding: 8px 16px;
5116
+ border: 1px solid var(--rs-border);
5117
+ border-radius: var(--rs-radius-sm);
5118
+ background: var(--rs-background-secondary);
5119
+ color: var(--rs-foreground);
5120
+ font-size: 13px;
5121
+ font-weight: 500;
5122
+ font-family: inherit;
5123
+ cursor: pointer;
5124
+ }
5125
+
5126
+ .rs-swapped-tracker-retry:hover {
5127
+ background: var(--rs-border);
5128
+ }
5129
+
5130
+ .rs-modal[data-theme="dark"] .rs-swapped-tracker-step + .rs-swapped-tracker-step::before {
5131
+ border-left-color: #3f3f46;
5132
+ }
5133
+
5134
+ .rs-modal[data-theme="dark"] .rs-swapped-tracker-step--pending .rs-swapped-tracker-step-marker,
5135
+ .rs-modal[data-theme="dark"] .rs-swapped-tracker-step--active .rs-swapped-tracker-step-marker {
5136
+ border-color: #3f3f46;
5137
+ }
5138
+
5139
+ .rs-modal[data-theme="dark"] .rs-swapped-tracker-step--complete .rs-swapped-tracker-step-marker {
5140
+ background: #fafafa;
5141
+ border-color: #fafafa;
5142
+ color: #18181b;
5143
+ }