@volr/react-ui 0.1.134 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import React13, { createContext, useContext, useState, useMemo, useEffect, useCallback, useRef, useId, useReducer } from 'react';
1
+ import React14, { createContext, useContext, useState, useMemo, useEffect, useCallback, useRef, useId, useReducer } from 'react';
2
2
  import { createPortal } from 'react-dom';
3
- import { useVolrContext, useInternalAuth, usePasskeyEnrollment, checkPrfCompatibility, getPlatformHint, useMpcConnection, VolrProvider, useVolrAuthCallback, useVolrPaymentApi, completeMigration, requestMigration, decryptEntropyForMigration, listenForSeedRequests, useUserBalances, useVolrLogin, useVolr, useWithdraw, useDepositListener, createGetNetworkInfo, useEIP6963 } from '@volr/react';
3
+ import { useVolrContext, useInternalAuth, usePasskeyEnrollment, checkPrfCompatibility, getPlatformHint, useMpcConnection, VolrProvider, useVolrAuthCallback, useVolrPaymentApi, completeMigration, requestMigration, decryptEntropyForMigration, listenForSeedRequests, useUserBalances, useVolrLogin, useVolr, useEIP6963, useWithdraw, useDepositListener, createGetNetworkInfo } from '@volr/react';
4
4
  export { VolrProvider, useDepositListener, usePasskeyEnrollment, useVolr, useVolrLogin, useVolrPaymentApi } from '@volr/react';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
  import { clsx } from 'clsx';
@@ -530,7 +530,7 @@ var en = {
530
530
  titleFingerprint: "Set up fingerprint login",
531
531
  titleQrCode: "Set up mobile login",
532
532
  // Short description
533
- description: "Sign in instantly, every time.",
533
+ description: "Register once and sign in easily from now on.",
534
534
  // Legacy keys for backward compatibility
535
535
  touchId: "Use Touch ID to create your passkey",
536
536
  faceId: "Use Face ID to create your passkey",
@@ -599,6 +599,12 @@ var en = {
599
599
  walletAddress: "Wallet Address",
600
600
  email: "Email",
601
601
  logout: "Log out",
602
+ setup: {
603
+ title: "Create your wallet",
604
+ description: "To see balances and use wallet features, you need a wallet. It takes about 1 second.",
605
+ cta: "Create wallet in 1 second",
606
+ logout: "Log out"
607
+ },
602
608
  totalBalance: "Total Balance",
603
609
  noAssets: "No assets configured",
604
610
  menu: {
@@ -691,7 +697,29 @@ var en = {
691
697
  messageLabel: "Message",
692
698
  domainLabel: "Domain"
693
699
  },
700
+ walletRequired: {
701
+ ariaLabel: "Create wallet",
702
+ titleTx: "Create your wallet to continue",
703
+ titleMessage: "Create your wallet to continue",
704
+ titleTypedData: "Create your wallet to continue",
705
+ description: "Create a wallet in about 1 second to continue.",
706
+ cta: "Create wallet in 1 second",
707
+ notNow: "Not now"
708
+ },
694
709
  payment: {
710
+ walletChoice: {
711
+ title: "Choose how to pay",
712
+ description: "Use your existing wallet, or create a wallet in about 1 second.",
713
+ externalCta: "Use my wallet",
714
+ createAccountCta: "Create wallet in 1 second",
715
+ externalDisabledNative: "External wallet payments are available for ERC-20 permit tokens only.",
716
+ externalTitle: "Select a wallet",
717
+ externalDescription: "Connect your wallet to sign a one-time permission for this payment.",
718
+ noWalletsDetected: "No wallets detected. Please install a wallet like MetaMask.",
719
+ connect: "Connect",
720
+ connecting: "Connecting...",
721
+ externalConnectFailed: "Failed to connect wallet. Please try again."
722
+ },
695
723
  processing: {
696
724
  signing: "Confirming payment...",
697
725
  broadcasting: "Sending payment...",
@@ -787,7 +815,7 @@ var ko = {
787
815
  titleFingerprint: "\uC9C0\uBB38 \uB85C\uADF8\uC778 \uC124\uC815",
788
816
  titleQrCode: "\uD734\uB300\uD3F0\uC73C\uB85C \uB85C\uADF8\uC778 \uC124\uC815",
789
817
  // Short description
790
- description: "\uD55C \uBC88 \uB4F1\uB85D\uD558\uBA74, \uB2E4\uC74C\uBD80\uD130 \uBC14\uB85C \uB85C\uADF8\uC778",
818
+ description: "\uD55C \uBC88 \uB4F1\uB85D\uD558\uACE0 \uB2E4\uC74C\uBD80\uD130 \uAC04\uD3B8\uD558\uAC8C \uB85C\uADF8\uC778\uD558\uC138\uC694",
791
819
  // Legacy keys for backward compatibility
792
820
  touchId: "Touch ID\uB97C \uC0AC\uC6A9\uD558\uC5EC \uD328\uC2A4\uD0A4\uB97C \uC0DD\uC131\uD558\uC138\uC694",
793
821
  faceId: "Face ID\uB97C \uC0AC\uC6A9\uD558\uC5EC \uD328\uC2A4\uD0A4\uB97C \uC0DD\uC131\uD558\uC138\uC694",
@@ -881,6 +909,12 @@ var ko = {
881
909
  walletAddress: "\uC9C0\uAC11 \uC8FC\uC18C",
882
910
  email: "\uC774\uBA54\uC77C",
883
911
  logout: "\uB85C\uADF8\uC544\uC6C3",
912
+ setup: {
913
+ title: "\uC9C0\uAC11 \uB9CC\uB4E4\uAE30",
914
+ description: "\uC794\uACE0 \uD655\uC778\uACFC \uC9C0\uAC11 \uAE30\uB2A5\uC744 \uC0AC\uC6A9\uD558\uB824\uBA74 \uC9C0\uAC11\uC774 \uD544\uC694\uD574\uC694. 1\uCD08\uBA74 \uB05D\uB098\uC694.",
915
+ cta: "1\uCD08\uB9CC\uC5D0 \uC9C0\uAC11 \uB9CC\uB4E4\uAE30",
916
+ logout: "\uB85C\uADF8\uC544\uC6C3"
917
+ },
884
918
  totalBalance: "\uCD1D \uC794\uACE0",
885
919
  noAssets: "\uC124\uC815\uB41C \uC790\uC0B0\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",
886
920
  menu: {
@@ -973,7 +1007,29 @@ var ko = {
973
1007
  messageLabel: "\uBA54\uC2DC\uC9C0",
974
1008
  domainLabel: "\uB3C4\uBA54\uC778"
975
1009
  },
1010
+ walletRequired: {
1011
+ ariaLabel: "\uC9C0\uAC11 \uC0DD\uC131",
1012
+ titleTx: "\uACC4\uC18D\uD558\uB824\uBA74 \uC9C0\uAC11\uC774 \uD544\uC694\uD574\uC694",
1013
+ titleMessage: "\uACC4\uC18D\uD558\uB824\uBA74 \uC9C0\uAC11\uC774 \uD544\uC694\uD574\uC694",
1014
+ titleTypedData: "\uACC4\uC18D\uD558\uB824\uBA74 \uC9C0\uAC11\uC774 \uD544\uC694\uD574\uC694",
1015
+ description: "1\uCD08\uB9CC\uC5D0 \uC9C0\uAC11\uC744 \uB9CC\uB4E4\uACE0 \uACC4\uC18D \uC9C4\uD589\uD558\uC138\uC694.",
1016
+ cta: "1\uCD08\uB9CC\uC5D0 \uC9C0\uAC11 \uB9CC\uB4E4\uAE30",
1017
+ notNow: "\uC9C0\uAE08\uC740 \uC548 \uD560\uB798\uC694"
1018
+ },
976
1019
  payment: {
1020
+ walletChoice: {
1021
+ title: "\uACB0\uC81C \uBC29\uBC95\uC744 \uC120\uD0DD\uD558\uC138\uC694",
1022
+ description: "\uAE30\uC874 \uC9C0\uAC11\uC73C\uB85C \uACB0\uC81C\uD558\uAC70\uB098, 1\uCD08\uB9CC\uC5D0 \uC9C0\uAC11\uC744 \uB9CC\uB4E4 \uC218 \uC788\uC5B4\uC694.",
1023
+ externalCta: "\uB0B4 \uC9C0\uAC11\uC73C\uB85C \uACB0\uC81C",
1024
+ createAccountCta: "1\uCD08\uB9CC\uC5D0 \uC9C0\uAC11 \uB9CC\uB4E4\uAE30",
1025
+ externalDisabledNative: "\uC678\uBD80 \uC9C0\uAC11 \uACB0\uC81C\uB294 ERC-20 permit \uD1A0\uD070\uC5D0\uC11C\uB9CC \uC9C0\uC6D0\uB3FC\uC694.",
1026
+ externalTitle: "\uC9C0\uAC11 \uC120\uD0DD",
1027
+ externalDescription: "\uC774\uBC88 \uACB0\uC81C\uB97C \uC704\uD55C 1\uD68C\uC131 \uAD8C\uD55C \uC11C\uBA85\uC744 \uC9C4\uD589\uD569\uB2C8\uB2E4.",
1028
+ noWalletsDetected: "\uAC10\uC9C0\uB41C \uC9C0\uAC11\uC774 \uC5C6\uC5B4\uC694. MetaMask \uAC19\uC740 \uC9C0\uAC11\uC744 \uC124\uCE58\uD574\uC8FC\uC138\uC694.",
1029
+ connect: "\uC5F0\uACB0",
1030
+ connecting: "\uC5F0\uACB0 \uC911...",
1031
+ externalConnectFailed: "\uC9C0\uAC11 \uC5F0\uACB0\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694. \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uC8FC\uC138\uC694."
1032
+ },
977
1033
  processing: {
978
1034
  signing: "\uACB0\uC81C \uD655\uC778 \uC911...",
979
1035
  broadcasting: "\uACB0\uC81C \uC804\uC1A1 \uC911...",
@@ -1134,7 +1190,7 @@ function useMediaQuery(query) {
1134
1190
  }
1135
1191
 
1136
1192
  // src/generated/volr-sdk-css.ts
1137
- var VOLR_SDK_CSS = '/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--volr-tw-translate-x:0;--volr-tw-translate-y:0;--volr-tw-translate-z:0;--volr-tw-space-y-reverse:0;--volr-tw-border-style:solid;--volr-tw-gradient-position:initial;--volr-tw-gradient-from:#0000;--volr-tw-gradient-via:#0000;--volr-tw-gradient-to:#0000;--volr-tw-gradient-stops:initial;--volr-tw-gradient-via-stops:initial;--volr-tw-gradient-from-position:0%;--volr-tw-gradient-via-position:50%;--volr-tw-gradient-to-position:100%;--volr-tw-leading:initial;--volr-tw-font-weight:initial;--volr-tw-tracking:initial;--volr-tw-shadow:0 0 #0000;--volr-tw-shadow-color:initial;--volr-tw-shadow-alpha:100%;--volr-tw-inset-shadow:0 0 #0000;--volr-tw-inset-shadow-color:initial;--volr-tw-inset-shadow-alpha:100%;--volr-tw-ring-color:initial;--volr-tw-ring-shadow:0 0 #0000;--volr-tw-inset-ring-color:initial;--volr-tw-inset-ring-shadow:0 0 #0000;--volr-tw-ring-inset:initial;--volr-tw-ring-offset-width:0px;--volr-tw-ring-offset-color:#fff;--volr-tw-ring-offset-shadow:0 0 #0000;--volr-tw-blur:initial;--volr-tw-brightness:initial;--volr-tw-contrast:initial;--volr-tw-grayscale:initial;--volr-tw-hue-rotate:initial;--volr-tw-invert:initial;--volr-tw-opacity:initial;--volr-tw-saturate:initial;--volr-tw-sepia:initial;--volr-tw-drop-shadow:initial;--volr-tw-drop-shadow-color:initial;--volr-tw-drop-shadow-alpha:100%;--volr-tw-drop-shadow-size:initial;--volr-tw-duration:initial;--volr-tw-ease:initial}}}@layer theme{:root,:host{--volr-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--volr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--volr-color-red-50:oklch(97.1% .013 17.38);--volr-color-red-100:oklch(93.6% .032 17.717);--volr-color-red-200:oklch(88.5% .062 18.334);--volr-color-red-500:oklch(63.7% .237 25.331);--volr-color-red-600:oklch(57.7% .245 27.325);--volr-color-red-700:oklch(50.5% .213 27.518);--volr-color-amber-50:oklch(98.7% .022 95.277);--volr-color-amber-200:oklch(92.4% .12 95.746);--volr-color-amber-700:oklch(55.5% .163 48.998);--volr-color-yellow-100:oklch(97.3% .071 103.193);--volr-color-yellow-700:oklch(55.4% .135 66.442);--volr-color-green-50:oklch(98.2% .018 155.826);--volr-color-green-100:oklch(96.2% .044 156.743);--volr-color-green-600:oklch(62.7% .194 149.214);--volr-color-green-700:oklch(52.7% .154 150.069);--volr-color-emerald-300:oklch(84.5% .143 164.978);--volr-color-emerald-400:oklch(76.5% .177 163.223);--volr-color-emerald-500:oklch(69.6% .17 162.48);--volr-color-emerald-600:oklch(59.6% .145 163.225);--volr-color-teal-400:oklch(77.7% .152 181.912);--volr-color-teal-500:oklch(70.4% .14 182.503);--volr-color-cyan-400:oklch(78.9% .154 211.53);--volr-color-blue-100:oklch(93.2% .032 255.585);--volr-color-blue-700:oklch(48.8% .243 264.376);--volr-color-slate-50:oklch(98.4% .003 247.858);--volr-color-slate-100:oklch(96.8% .007 247.896);--volr-color-slate-200:oklch(92.9% .013 255.508);--volr-color-slate-300:oklch(86.9% .022 252.894);--volr-color-slate-400:oklch(70.4% .04 256.788);--volr-color-slate-500:oklch(55.4% .046 257.417);--volr-color-slate-600:oklch(44.6% .043 257.281);--volr-color-slate-700:oklch(37.2% .044 257.287);--volr-color-slate-900:oklch(20.8% .042 265.755);--volr-color-gray-500:oklch(55.1% .027 264.364);--volr-color-black:#000;--volr-color-white:#fff;--volr-spacing:.25rem;--volr-container-md:28rem;--volr-container-4xl:56rem;--volr-text-xs:.75rem;--volr-text-xs--line-height:calc(1/.75);--volr-text-sm:.875rem;--volr-text-sm--line-height:calc(1.25/.875);--volr-text-base:1rem;--volr-text-base--line-height:calc(1.5/1);--volr-text-lg:1.125rem;--volr-text-lg--line-height:calc(1.75/1.125);--volr-text-xl:1.25rem;--volr-text-xl--line-height:calc(1.75/1.25);--volr-text-2xl:1.5rem;--volr-text-2xl--line-height:calc(2/1.5);--volr-text-8xl:6rem;--volr-text-8xl--line-height:1;--volr-font-weight-medium:500;--volr-font-weight-semibold:600;--volr-font-weight-bold:700;--volr-tracking-wide:.025em;--volr-leading-relaxed:1.625;--volr-radius-md:.375rem;--volr-radius-lg:.5rem;--volr-radius-xl:.75rem;--volr-radius-2xl:1rem;--volr-radius-3xl:1.5rem;--volr-ease-out:cubic-bezier(0,0,.2,1);--volr-animate-spin:spin 1s linear infinite;--volr-animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--volr-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--volr-blur-2xl:40px;--volr-default-transition-duration:.15s;--volr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--volr-default-font-family:var(--volr-font-sans);--volr-default-mono-font-family:var(--volr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--volr-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--volr-default-font-feature-settings,normal);font-variation-settings:var(--volr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--volr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--volr-default-mono-font-feature-settings,normal);font-variation-settings:var(--volr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{--volr-primary-color:var(--volr-accent-color,#303030);--volr-font-family:var(--volr-custom-font,inherit);--volr-bg:#fff;--volr-bg-secondary:#f8fafc;--volr-bg-tertiary:#f1f5f9;--volr-text:#0f172a;--volr-text-secondary:#475569;--volr-text-muted:#94a3b8;--volr-border:#e2e8f0;--volr-border-strong:#cbd5e1;--volr-hover-bg:#f8fafc;--volr-error-bg:#fef2f2;--volr-error-border:#fecaca;--volr-error-text:#991b1b;--volr-hint-bg:#f8fafc;--volr-hint-border:#e2e8f0;--volr-hint-text:#334155}:host([data-theme=dark]){--volr-bg:#1c1c1e;--volr-bg-secondary:#2c2c2e;--volr-bg-tertiary:#3a3a3c;--volr-text:#f5f5f7;--volr-text-secondary:#c7c7cc;--volr-text-muted:#8e8e93;--volr-border:#3a3a3c;--volr-border-strong:#48484a;--volr-hover-bg:#2c2c2e;--volr-error-bg:#3c1f1f;--volr-error-border:#7f1d1d;--volr-error-text:#fca5a5;--volr-hint-bg:#2c2c2e;--volr-hint-border:#3a3a3c;--volr-hint-text:#c7c7cc}*,:before,:after{box-sizing:border-box}*{font-family:var(--volr-font-family);color:var(--volr-text)}button,input,select,textarea{color:var(--volr-text);background-color:#0000}button{cursor:pointer;background-color:#0000}input::placeholder{color:var(--volr-text-muted)}h1,h2,h3{color:var(--volr-text);margin:0;font-weight:700}h1{font-size:1.875rem;line-height:2.25rem}h2{font-size:1.5rem;line-height:2rem}h3{font-size:1.25rem;line-height:1.75rem}p{margin:0}}@layer components{.volr-dialog-overlay{inset:calc(var(--volr-spacing)*0);z-index:40;background-color:var(--volr-color-black);position:fixed}@supports (color:color-mix(in lab, red, red)){.volr-dialog-overlay{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr-dialog-content{z-index:50;border-radius:var(--volr-radius-2xl);border-style:var(--volr-tw-border-style);padding:calc(var(--volr-spacing)*7);--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow);background-color:var(--volr-bg);border-width:1px;border-color:var(--volr-border-strong);width:calc(100% - 2rem);max-width:28rem;max-height:85vh;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%)}@media (max-width:640px){.volr-dialog-content{top:auto;right:calc(var(--volr-spacing)*0);bottom:calc(var(--volr-spacing)*0);left:calc(var(--volr-spacing)*0);border-radius:1.25rem 1.25rem 0 0;width:100%;max-width:100%;margin:0 auto;transform:translateY(0)}}.volr-dialog-close{top:calc(var(--volr-spacing)*4);right:calc(var(--volr-spacing)*4);height:calc(var(--volr-spacing)*8);width:calc(var(--volr-spacing)*8);color:var(--volr-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:3.40282e38px;justify-content:center;align-items:center;display:inline-flex;position:absolute}.volr-dialog-close:hover{background-color:var(--volr-hover-bg);color:var(--volr-text-secondary)}.volr-dialog-close:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}.volr-dialog-close-icon{height:calc(var(--volr-spacing)*4);width:calc(var(--volr-spacing)*4)}.volr-email-input{border:1px solid var(--volr-border-strong);background-color:var(--volr-bg);width:100%;color:var(--volr-text);border-radius:.5rem;outline:none;padding:.75rem .75rem .75rem 2.75rem;font-size:1rem;line-height:1.5}.volr-email-input::placeholder{color:var(--volr-text-muted)}.volr-email-input:focus{border-color:var(--volr-border-strong);box-shadow:0 0 0 2px var(--volr-border-strong)}.volr-option-button{border:1px solid var(--volr-border);background-color:var(--volr-bg);width:100%;color:var(--volr-text);cursor:pointer;border-radius:.5rem;align-items:center;gap:.75rem;padding:.75rem;transition:background-color .15s ease-out,border-color .15s ease-out,box-shadow .15s ease-out;display:flex}.volr-option-button:hover{background-color:var(--volr-hover-bg);border-color:var(--volr-border)}.volr-option-button:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}}@layer utilities{.volr\\:pointer-events-auto{pointer-events:auto}.volr\\:pointer-events-none{pointer-events:none}.volr\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.volr\\:absolute{position:absolute}.volr\\:fixed{position:fixed}.volr\\:relative{position:relative}.volr\\:inset-0{inset:calc(var(--volr-spacing)*0)}.volr\\:-top-3{top:calc(var(--volr-spacing)*-3)}.volr\\:top-1\\/2{top:50%}.volr\\:-right-3{right:calc(var(--volr-spacing)*-3)}.volr\\:right-0{right:calc(var(--volr-spacing)*0)}.volr\\:right-2{right:calc(var(--volr-spacing)*2)}.volr\\:right-3{right:calc(var(--volr-spacing)*3)}.volr\\:bottom-0{bottom:calc(var(--volr-spacing)*0)}.volr\\:left-0{left:calc(var(--volr-spacing)*0)}.volr\\:left-3{left:calc(var(--volr-spacing)*3)}.volr\\:-z-10{z-index:calc(10*-1)}.volr\\:z-10{z-index:10}.volr\\:z-20{z-index:20}.volr\\:z-40{z-index:40}.volr\\:z-50{z-index:50}.volr\\:mx-auto{margin-inline:auto}.volr\\:my-6{margin-block:calc(var(--volr-spacing)*6)}.volr\\:mt-0\\.5{margin-top:calc(var(--volr-spacing)*.5)}.volr\\:mt-1{margin-top:calc(var(--volr-spacing)*1)}.volr\\:mt-2{margin-top:calc(var(--volr-spacing)*2)}.volr\\:mt-3{margin-top:calc(var(--volr-spacing)*3)}.volr\\:mt-4{margin-top:calc(var(--volr-spacing)*4)}.volr\\:mt-6{margin-top:calc(var(--volr-spacing)*6)}.volr\\:mt-8{margin-top:calc(var(--volr-spacing)*8)}.volr\\:mb-0\\.5{margin-bottom:calc(var(--volr-spacing)*.5)}.volr\\:mb-1{margin-bottom:calc(var(--volr-spacing)*1)}.volr\\:mb-2{margin-bottom:calc(var(--volr-spacing)*2)}.volr\\:mb-3{margin-bottom:calc(var(--volr-spacing)*3)}.volr\\:mb-4{margin-bottom:calc(var(--volr-spacing)*4)}.volr\\:mb-5{margin-bottom:calc(var(--volr-spacing)*5)}.volr\\:mb-6{margin-bottom:calc(var(--volr-spacing)*6)}.volr\\:mb-8{margin-bottom:calc(var(--volr-spacing)*8)}.volr\\:-ml-2{margin-left:calc(var(--volr-spacing)*-2)}.volr\\:ml-6{margin-left:calc(var(--volr-spacing)*6)}.volr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.volr\\:block{display:block}.volr\\:flex{display:flex}.volr\\:grid{display:grid}.volr\\:inline-block{display:inline-block}.volr\\:inline-flex{display:inline-flex}.volr\\:h-1{height:calc(var(--volr-spacing)*1)}.volr\\:h-1\\.5{height:calc(var(--volr-spacing)*1.5)}.volr\\:h-2{height:calc(var(--volr-spacing)*2)}.volr\\:h-3{height:calc(var(--volr-spacing)*3)}.volr\\:h-4{height:calc(var(--volr-spacing)*4)}.volr\\:h-5{height:calc(var(--volr-spacing)*5)}.volr\\:h-6{height:calc(var(--volr-spacing)*6)}.volr\\:h-7{height:calc(var(--volr-spacing)*7)}.volr\\:h-8{height:calc(var(--volr-spacing)*8)}.volr\\:h-10{height:calc(var(--volr-spacing)*10)}.volr\\:h-12{height:calc(var(--volr-spacing)*12)}.volr\\:h-14{height:calc(var(--volr-spacing)*14)}.volr\\:h-16{height:calc(var(--volr-spacing)*16)}.volr\\:h-20{height:calc(var(--volr-spacing)*20)}.volr\\:h-24{height:calc(var(--volr-spacing)*24)}.volr\\:h-40{height:calc(var(--volr-spacing)*40)}.volr\\:h-44{height:calc(var(--volr-spacing)*44)}.volr\\:h-48{height:calc(var(--volr-spacing)*48)}.volr\\:h-\\[0\\.8em\\]{height:.8em}.volr\\:h-\\[200px\\]{height:200px}.volr\\:h-full{height:100%}.volr\\:h-px{height:1px}.volr\\:max-h-48{max-height:calc(var(--volr-spacing)*48)}.volr\\:max-h-60{max-height:calc(var(--volr-spacing)*60)}.volr\\:max-h-64{max-height:calc(var(--volr-spacing)*64)}.volr\\:max-h-\\[85vh\\]{max-height:85vh}.volr\\:max-h-\\[90vh\\]{max-height:90vh}.volr\\:min-h-\\[100px\\]{min-height:100px}.volr\\:min-h-\\[120px\\]{min-height:120px}.volr\\:min-h-\\[500px\\]{min-height:500px}.volr\\:w-1\\.5{width:calc(var(--volr-spacing)*1.5)}.volr\\:w-2{width:calc(var(--volr-spacing)*2)}.volr\\:w-3{width:calc(var(--volr-spacing)*3)}.volr\\:w-4{width:calc(var(--volr-spacing)*4)}.volr\\:w-5{width:calc(var(--volr-spacing)*5)}.volr\\:w-6{width:calc(var(--volr-spacing)*6)}.volr\\:w-7{width:calc(var(--volr-spacing)*7)}.volr\\:w-8{width:calc(var(--volr-spacing)*8)}.volr\\:w-10{width:calc(var(--volr-spacing)*10)}.volr\\:w-12{width:calc(var(--volr-spacing)*12)}.volr\\:w-14{width:calc(var(--volr-spacing)*14)}.volr\\:w-16{width:calc(var(--volr-spacing)*16)}.volr\\:w-20{width:calc(var(--volr-spacing)*20)}.volr\\:w-24{width:calc(var(--volr-spacing)*24)}.volr\\:w-32{width:calc(var(--volr-spacing)*32)}.volr\\:w-36{width:calc(var(--volr-spacing)*36)}.volr\\:w-40{width:calc(var(--volr-spacing)*40)}.volr\\:w-44{width:calc(var(--volr-spacing)*44)}.volr\\:w-48{width:calc(var(--volr-spacing)*48)}.volr\\:w-\\[200px\\]{width:200px}.volr\\:w-auto{width:auto}.volr\\:w-full{width:100%}.volr\\:max-w-4xl{max-width:var(--volr-container-4xl)}.volr\\:max-w-full{max-width:100%}.volr\\:max-w-md{max-width:var(--volr-container-md)}.volr\\:max-w-none{max-width:none}.volr\\:min-w-0{min-width:calc(var(--volr-spacing)*0)}.volr\\:flex-1{flex:1}.volr\\:flex-shrink-0,.volr\\:shrink-0{flex-shrink:0}.volr\\:-translate-y-1\\/2{--volr-tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--volr-tw-translate-x)var(--volr-tw-translate-y)}.volr\\:rotate-90{rotate:90deg}.volr\\:rotate-180{rotate:180deg}.volr\\:animate-ping{animation:var(--volr-animate-ping)}.volr\\:animate-pulse{animation:var(--volr-animate-pulse)}.volr\\:animate-spin{animation:var(--volr-animate-spin)}.volr\\:cursor-not-allowed{cursor:not-allowed}.volr\\:cursor-pointer{cursor:pointer}.volr\\:list-inside{list-style-position:inside}.volr\\:list-decimal{list-style-type:decimal}.volr\\:grid-cols-\\[minmax\\(0\\,1\\.1fr\\)_minmax\\(0\\,1fr\\)\\]{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}.volr\\:flex-col{flex-direction:column}.volr\\:items-baseline{align-items:baseline}.volr\\:items-center{align-items:center}.volr\\:items-end{align-items:flex-end}.volr\\:items-start{align-items:flex-start}.volr\\:justify-between{justify-content:space-between}.volr\\:justify-center{justify-content:center}.volr\\:gap-1{gap:calc(var(--volr-spacing)*1)}.volr\\:gap-2{gap:calc(var(--volr-spacing)*2)}.volr\\:gap-3{gap:calc(var(--volr-spacing)*3)}.volr\\:gap-4{gap:calc(var(--volr-spacing)*4)}:where(.volr\\:space-y-1>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*1)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*1)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-2>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*2)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*2)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-3>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*3)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*3)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-4>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*4)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*4)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-6>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*6)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*6)*calc(1 - var(--volr-tw-space-y-reverse)))}.volr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.volr\\:overflow-auto{overflow:auto}.volr\\:overflow-hidden{overflow:hidden}.volr\\:overflow-visible{overflow:visible}.volr\\:overflow-x-auto{overflow-x:auto}.volr\\:overflow-y-auto{overflow-y:auto}.volr\\:rounded{border-radius:.25rem}.volr\\:rounded-2xl{border-radius:var(--volr-radius-2xl)}.volr\\:rounded-full{border-radius:3.40282e38px}.volr\\:rounded-lg{border-radius:var(--volr-radius-lg)}.volr\\:rounded-md{border-radius:var(--volr-radius-md)}.volr\\:rounded-xl{border-radius:var(--volr-radius-xl)}.volr\\:rounded-t-2xl{border-top-left-radius:var(--volr-radius-2xl);border-top-right-radius:var(--volr-radius-2xl)}.volr\\:rounded-t-3xl{border-top-left-radius:var(--volr-radius-3xl);border-top-right-radius:var(--volr-radius-3xl)}.volr\\:rounded-t-xl{border-top-left-radius:var(--volr-radius-xl);border-top-right-radius:var(--volr-radius-xl)}.volr\\:rounded-b-xl{border-bottom-right-radius:var(--volr-radius-xl);border-bottom-left-radius:var(--volr-radius-xl)}.volr\\:border{border-style:var(--volr-tw-border-style);border-width:1px}.volr\\:border-2{border-style:var(--volr-tw-border-style);border-width:2px}.volr\\:border-4{border-style:var(--volr-tw-border-style);border-width:4px}.volr\\:border-x{border-inline-style:var(--volr-tw-border-style);border-inline-width:1px}.volr\\:border-y{border-block-style:var(--volr-tw-border-style);border-block-width:1px}.volr\\:border-t{border-top-style:var(--volr-tw-border-style);border-top-width:1px}.volr\\:border-b{border-bottom-style:var(--volr-tw-border-style);border-bottom-width:1px}.volr\\:border-amber-200{border-color:var(--volr-color-amber-200)}.volr\\:border-red-200{border-color:var(--volr-color-red-200)}.volr\\:border-red-500{border-color:var(--volr-color-red-500)}.volr\\:border-slate-100{border-color:var(--volr-color-slate-100)}.volr\\:border-slate-200{border-color:var(--volr-color-slate-200)}.volr\\:border-slate-300{border-color:var(--volr-color-slate-300)}.volr\\:border-transparent{border-color:#0000}.volr\\:border-white{border-color:var(--volr-color-white)}.volr\\:border-t-slate-600{border-top-color:var(--volr-color-slate-600)}.volr\\:border-t-slate-900{border-top-color:var(--volr-color-slate-900)}.volr\\:bg-amber-50{background-color:var(--volr-color-amber-50)}.volr\\:bg-black\\/45{background-color:var(--volr-color-black)}@supports (color:color-mix(in lab, red, red)){.volr\\:bg-black\\/45{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr\\:bg-blue-100{background-color:var(--volr-color-blue-100)}.volr\\:bg-cyan-400{background-color:var(--volr-color-cyan-400)}.volr\\:bg-emerald-300{background-color:var(--volr-color-emerald-300)}.volr\\:bg-emerald-400{background-color:var(--volr-color-emerald-400)}.volr\\:bg-emerald-500{background-color:var(--volr-color-emerald-500)}.volr\\:bg-green-50{background-color:var(--volr-color-green-50)}.volr\\:bg-green-100{background-color:var(--volr-color-green-100)}.volr\\:bg-red-50{background-color:var(--volr-color-red-50)}.volr\\:bg-red-100{background-color:var(--volr-color-red-100)}.volr\\:bg-slate-50{background-color:var(--volr-color-slate-50)}.volr\\:bg-slate-100{background-color:var(--volr-color-slate-100)}.volr\\:bg-slate-200{background-color:var(--volr-color-slate-200)}.volr\\:bg-slate-900{background-color:var(--volr-color-slate-900)}.volr\\:bg-teal-400{background-color:var(--volr-color-teal-400)}.volr\\:bg-white{background-color:var(--volr-color-white)}.volr\\:bg-yellow-100{background-color:var(--volr-color-yellow-100)}.volr\\:bg-linear-to-br{--volr-tw-gradient-position:to bottom right}@supports (background-image:linear-gradient(in lab, red, red)){.volr\\:bg-linear-to-br{--volr-tw-gradient-position:to bottom right in oklab}}.volr\\:bg-linear-to-br{background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\:bg-linear-to-r{--volr-tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.volr\\:bg-linear-to-r{--volr-tw-gradient-position:to right in oklab}}.volr\\:bg-linear-to-r{background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\:bg-gradient-to-br{--volr-tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\:from-emerald-400{--volr-tw-gradient-from:var(--volr-color-emerald-400);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:from-slate-50{--volr-tw-gradient-from:var(--volr-color-slate-50);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:to-slate-100{--volr-tw-gradient-to:var(--volr-color-slate-100);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:to-teal-500{--volr-tw-gradient-to:var(--volr-color-teal-500);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:object-cover{object-fit:cover}.volr\\:p-1{padding:calc(var(--volr-spacing)*1)}.volr\\:p-2{padding:calc(var(--volr-spacing)*2)}.volr\\:p-3{padding:calc(var(--volr-spacing)*3)}.volr\\:p-4{padding:calc(var(--volr-spacing)*4)}.volr\\:p-5{padding:calc(var(--volr-spacing)*5)}.volr\\:p-8{padding:calc(var(--volr-spacing)*8)}.volr\\:px-1\\.5{padding-inline:calc(var(--volr-spacing)*1.5)}.volr\\:px-2{padding-inline:calc(var(--volr-spacing)*2)}.volr\\:px-3{padding-inline:calc(var(--volr-spacing)*3)}.volr\\:px-4{padding-inline:calc(var(--volr-spacing)*4)}.volr\\:px-6{padding-inline:calc(var(--volr-spacing)*6)}.volr\\:py-0\\.5{padding-block:calc(var(--volr-spacing)*.5)}.volr\\:py-1{padding-block:calc(var(--volr-spacing)*1)}.volr\\:py-1\\.5{padding-block:calc(var(--volr-spacing)*1.5)}.volr\\:py-2{padding-block:calc(var(--volr-spacing)*2)}.volr\\:py-2\\.5{padding-block:calc(var(--volr-spacing)*2.5)}.volr\\:py-3{padding-block:calc(var(--volr-spacing)*3)}.volr\\:py-4{padding-block:calc(var(--volr-spacing)*4)}.volr\\:py-6{padding-block:calc(var(--volr-spacing)*6)}.volr\\:py-8{padding-block:calc(var(--volr-spacing)*8)}.volr\\:py-12{padding-block:calc(var(--volr-spacing)*12)}.volr\\:pt-2{padding-top:calc(var(--volr-spacing)*2)}.volr\\:pt-3{padding-top:calc(var(--volr-spacing)*3)}.volr\\:pt-4{padding-top:calc(var(--volr-spacing)*4)}.volr\\:pr-3{padding-right:calc(var(--volr-spacing)*3)}.volr\\:pr-16{padding-right:calc(var(--volr-spacing)*16)}.volr\\:pl-11{padding-left:calc(var(--volr-spacing)*11)}.volr\\:text-center{text-align:center}.volr\\:text-left{text-align:left}.volr\\:text-right{text-align:right}.volr\\:align-baseline{vertical-align:baseline}.volr\\:font-mono{font-family:var(--volr-font-mono)}.volr\\:text-2xl{font-size:var(--volr-text-2xl);line-height:var(--volr-tw-leading,var(--volr-text-2xl--line-height))}.volr\\:text-8xl{font-size:var(--volr-text-8xl);line-height:var(--volr-tw-leading,var(--volr-text-8xl--line-height))}.volr\\:text-base{font-size:var(--volr-text-base);line-height:var(--volr-tw-leading,var(--volr-text-base--line-height))}.volr\\:text-lg{font-size:var(--volr-text-lg);line-height:var(--volr-tw-leading,var(--volr-text-lg--line-height))}.volr\\:text-sm{font-size:var(--volr-text-sm);line-height:var(--volr-tw-leading,var(--volr-text-sm--line-height))}.volr\\:text-xl{font-size:var(--volr-text-xl);line-height:var(--volr-tw-leading,var(--volr-text-xl--line-height))}.volr\\:text-xs{font-size:var(--volr-text-xs);line-height:var(--volr-tw-leading,var(--volr-text-xs--line-height))}.volr\\:leading-relaxed{--volr-tw-leading:var(--volr-leading-relaxed);line-height:var(--volr-leading-relaxed)}.volr\\:font-bold{--volr-tw-font-weight:var(--volr-font-weight-bold);font-weight:var(--volr-font-weight-bold)}.volr\\:font-medium{--volr-tw-font-weight:var(--volr-font-weight-medium);font-weight:var(--volr-font-weight-medium)}.volr\\:font-semibold{--volr-tw-font-weight:var(--volr-font-weight-semibold);font-weight:var(--volr-font-weight-semibold)}.volr\\:tracking-wide{--volr-tw-tracking:var(--volr-tracking-wide);letter-spacing:var(--volr-tracking-wide)}.volr\\:break-all{word-break:break-all}.volr\\:text-amber-700{color:var(--volr-color-amber-700)}.volr\\:text-blue-700{color:var(--volr-color-blue-700)}.volr\\:text-emerald-600{color:var(--volr-color-emerald-600)}.volr\\:text-gray-500{color:var(--volr-color-gray-500)}.volr\\:text-green-600{color:var(--volr-color-green-600)}.volr\\:text-green-700{color:var(--volr-color-green-700)}.volr\\:text-red-500{color:var(--volr-color-red-500)}.volr\\:text-red-600{color:var(--volr-color-red-600)}.volr\\:text-red-700{color:var(--volr-color-red-700)}.volr\\:text-slate-300{color:var(--volr-color-slate-300)}.volr\\:text-slate-400{color:var(--volr-color-slate-400)}.volr\\:text-slate-500{color:var(--volr-color-slate-500)}.volr\\:text-slate-600{color:var(--volr-color-slate-600)}.volr\\:text-slate-700{color:var(--volr-color-slate-700)}.volr\\:text-slate-900{color:var(--volr-color-slate-900)}.volr\\:text-white{color:var(--volr-color-white)}.volr\\:text-yellow-700{color:var(--volr-color-yellow-700)}.volr\\:capitalize{text-transform:capitalize}.volr\\:uppercase{text-transform:uppercase}.volr\\:underline{text-decoration-line:underline}.volr\\:opacity-0{opacity:0}.volr\\:opacity-25{opacity:.25}.volr\\:opacity-30{opacity:.3}.volr\\:opacity-50{opacity:.5}.volr\\:opacity-70{opacity:.7}.volr\\:opacity-75{opacity:.75}.volr\\:opacity-80{opacity:.8}.volr\\:shadow-2xl{--volr-tw-shadow:0 25px 50px -12px var(--volr-tw-shadow-color,#00000040);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-lg{--volr-tw-shadow:0 10px 15px -3px var(--volr-tw-shadow-color,#0000001a),0 4px 6px -4px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-sm{--volr-tw-shadow:0 1px 3px 0 var(--volr-tw-shadow-color,#0000001a),0 1px 2px -1px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-xl{--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-emerald-500\\/50{--volr-tw-shadow-color:var(--volr-color-emerald-500)}@supports (color:color-mix(in lab, red, red)){.volr\\:shadow-emerald-500\\/50{--volr-tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--volr-color-emerald-500)50%,transparent)var(--volr-tw-shadow-alpha),transparent)}}.volr\\:blur-2xl{--volr-tw-blur:blur(var(--volr-blur-2xl));filter:var(--volr-tw-blur,)var(--volr-tw-brightness,)var(--volr-tw-contrast,)var(--volr-tw-grayscale,)var(--volr-tw-hue-rotate,)var(--volr-tw-invert,)var(--volr-tw-saturate,)var(--volr-tw-sepia,)var(--volr-tw-drop-shadow,)}.volr\\:transition-all{transition-property:all;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--volr-tw-gradient-from,--volr-tw-gradient-via,--volr-tw-gradient-to;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:duration-300{--volr-tw-duration:.3s;transition-duration:.3s}.volr\\:duration-500{--volr-tw-duration:.5s;transition-duration:.5s}.volr\\:ease-out{--volr-tw-ease:var(--volr-ease-out);transition-timing-function:var(--volr-ease-out)}.volr\\:outline-none{--volr-tw-outline-style:none;outline-style:none}@media (hover:hover){.volr\\:hover\\:border-slate-300:hover{border-color:var(--volr-color-slate-300)}.volr\\:hover\\:bg-slate-50:hover{background-color:var(--volr-color-slate-50)}.volr\\:hover\\:bg-slate-200:hover{background-color:var(--volr-color-slate-200)}.volr\\:hover\\:text-slate-700:hover{color:var(--volr-color-slate-700)}}.volr\\:focus\\:ring-2:focus{--volr-tw-ring-shadow:var(--volr-tw-ring-inset,)0 0 0 calc(2px + var(--volr-tw-ring-offset-width))var(--volr-tw-ring-color,currentcolor);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:focus\\:ring-slate-300:focus{--volr-tw-ring-color:var(--volr-color-slate-300)}.volr\\:focus\\:outline-none:focus{--volr-tw-outline-style:none;outline-style:none}.volr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.volr\\:disabled\\:bg-slate-100:disabled{background-color:var(--volr-color-slate-100)}.volr\\:disabled\\:text-slate-400:disabled{color:var(--volr-color-slate-400)}.volr\\:disabled\\:opacity-50:disabled{opacity:.5}.volr-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.volr-text-secondary{color:var(--volr-text-secondary)}.volr-text-muted{color:var(--volr-text-muted)}.volr-bg-secondary{background-color:var(--volr-bg-secondary)}.volr-bg-tertiary{background-color:var(--volr-bg-tertiary)}.volr-border{border-color:var(--volr-border)}.volr-border-strong{border-color:var(--volr-border-strong)}.volr-divider-line{background-color:var(--volr-border)}.volr-error{background-color:var(--volr-error-bg);border-color:var(--volr-error-border);color:var(--volr-error-text)}.volr-hint{background-color:var(--volr-hint-bg);border:1px solid var(--volr-hint-border);color:var(--volr-hint-text)}.volr-hover:hover{background-color:var(--volr-hover-bg)}.volr-surface{background-color:var(--volr-bg)}}@property --volr-tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --volr-tw-gradient-position{syntax:"*";inherits:false}@property --volr-tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-stops{syntax:"*";inherits:false}@property --volr-tw-gradient-via-stops{syntax:"*";inherits:false}@property --volr-tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --volr-tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --volr-tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --volr-tw-leading{syntax:"*";inherits:false}@property --volr-tw-font-weight{syntax:"*";inherits:false}@property --volr-tw-tracking{syntax:"*";inherits:false}@property --volr-tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-shadow-color{syntax:"*";inherits:false}@property --volr-tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-shadow-color{syntax:"*";inherits:false}@property --volr-tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-ring-color{syntax:"*";inherits:false}@property --volr-tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-ring-color{syntax:"*";inherits:false}@property --volr-tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-ring-inset{syntax:"*";inherits:false}@property --volr-tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --volr-tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --volr-tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-blur{syntax:"*";inherits:false}@property --volr-tw-brightness{syntax:"*";inherits:false}@property --volr-tw-contrast{syntax:"*";inherits:false}@property --volr-tw-grayscale{syntax:"*";inherits:false}@property --volr-tw-hue-rotate{syntax:"*";inherits:false}@property --volr-tw-invert{syntax:"*";inherits:false}@property --volr-tw-opacity{syntax:"*";inherits:false}@property --volr-tw-saturate{syntax:"*";inherits:false}@property --volr-tw-sepia{syntax:"*";inherits:false}@property --volr-tw-drop-shadow{syntax:"*";inherits:false}@property --volr-tw-drop-shadow-color{syntax:"*";inherits:false}@property --volr-tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-drop-shadow-size{syntax:"*";inherits:false}@property --volr-tw-duration{syntax:"*";inherits:false}@property --volr-tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}';
1193
+ var VOLR_SDK_CSS = '/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--volr-tw-translate-x:0;--volr-tw-translate-y:0;--volr-tw-translate-z:0;--volr-tw-space-y-reverse:0;--volr-tw-border-style:solid;--volr-tw-gradient-position:initial;--volr-tw-gradient-from:#0000;--volr-tw-gradient-via:#0000;--volr-tw-gradient-to:#0000;--volr-tw-gradient-stops:initial;--volr-tw-gradient-via-stops:initial;--volr-tw-gradient-from-position:0%;--volr-tw-gradient-via-position:50%;--volr-tw-gradient-to-position:100%;--volr-tw-leading:initial;--volr-tw-font-weight:initial;--volr-tw-tracking:initial;--volr-tw-shadow:0 0 #0000;--volr-tw-shadow-color:initial;--volr-tw-shadow-alpha:100%;--volr-tw-inset-shadow:0 0 #0000;--volr-tw-inset-shadow-color:initial;--volr-tw-inset-shadow-alpha:100%;--volr-tw-ring-color:initial;--volr-tw-ring-shadow:0 0 #0000;--volr-tw-inset-ring-color:initial;--volr-tw-inset-ring-shadow:0 0 #0000;--volr-tw-ring-inset:initial;--volr-tw-ring-offset-width:0px;--volr-tw-ring-offset-color:#fff;--volr-tw-ring-offset-shadow:0 0 #0000;--volr-tw-blur:initial;--volr-tw-brightness:initial;--volr-tw-contrast:initial;--volr-tw-grayscale:initial;--volr-tw-hue-rotate:initial;--volr-tw-invert:initial;--volr-tw-opacity:initial;--volr-tw-saturate:initial;--volr-tw-sepia:initial;--volr-tw-drop-shadow:initial;--volr-tw-drop-shadow-color:initial;--volr-tw-drop-shadow-alpha:100%;--volr-tw-drop-shadow-size:initial;--volr-tw-duration:initial;--volr-tw-ease:initial}}}@layer theme{:root,:host{--volr-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--volr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--volr-color-red-50:oklch(97.1% .013 17.38);--volr-color-red-100:oklch(93.6% .032 17.717);--volr-color-red-200:oklch(88.5% .062 18.334);--volr-color-red-500:oklch(63.7% .237 25.331);--volr-color-red-600:oklch(57.7% .245 27.325);--volr-color-red-700:oklch(50.5% .213 27.518);--volr-color-amber-50:oklch(98.7% .022 95.277);--volr-color-amber-200:oklch(92.4% .12 95.746);--volr-color-amber-700:oklch(55.5% .163 48.998);--volr-color-yellow-100:oklch(97.3% .071 103.193);--volr-color-yellow-700:oklch(55.4% .135 66.442);--volr-color-green-50:oklch(98.2% .018 155.826);--volr-color-green-100:oklch(96.2% .044 156.743);--volr-color-green-600:oklch(62.7% .194 149.214);--volr-color-green-700:oklch(52.7% .154 150.069);--volr-color-emerald-300:oklch(84.5% .143 164.978);--volr-color-emerald-400:oklch(76.5% .177 163.223);--volr-color-emerald-500:oklch(69.6% .17 162.48);--volr-color-emerald-600:oklch(59.6% .145 163.225);--volr-color-teal-400:oklch(77.7% .152 181.912);--volr-color-teal-500:oklch(70.4% .14 182.503);--volr-color-cyan-400:oklch(78.9% .154 211.53);--volr-color-blue-100:oklch(93.2% .032 255.585);--volr-color-blue-700:oklch(48.8% .243 264.376);--volr-color-slate-50:oklch(98.4% .003 247.858);--volr-color-slate-100:oklch(96.8% .007 247.896);--volr-color-slate-200:oklch(92.9% .013 255.508);--volr-color-slate-300:oklch(86.9% .022 252.894);--volr-color-slate-400:oklch(70.4% .04 256.788);--volr-color-slate-500:oklch(55.4% .046 257.417);--volr-color-slate-600:oklch(44.6% .043 257.281);--volr-color-slate-700:oklch(37.2% .044 257.287);--volr-color-slate-800:oklch(27.9% .041 260.031);--volr-color-slate-900:oklch(20.8% .042 265.755);--volr-color-gray-500:oklch(55.1% .027 264.364);--volr-color-black:#000;--volr-color-white:#fff;--volr-spacing:.25rem;--volr-container-md:28rem;--volr-container-4xl:56rem;--volr-text-xs:.75rem;--volr-text-xs--line-height:calc(1/.75);--volr-text-sm:.875rem;--volr-text-sm--line-height:calc(1.25/.875);--volr-text-base:1rem;--volr-text-base--line-height:calc(1.5/1);--volr-text-lg:1.125rem;--volr-text-lg--line-height:calc(1.75/1.125);--volr-text-xl:1.25rem;--volr-text-xl--line-height:calc(1.75/1.25);--volr-text-2xl:1.5rem;--volr-text-2xl--line-height:calc(2/1.5);--volr-text-8xl:6rem;--volr-text-8xl--line-height:1;--volr-font-weight-medium:500;--volr-font-weight-semibold:600;--volr-font-weight-bold:700;--volr-tracking-tight:-.025em;--volr-tracking-wide:.025em;--volr-tracking-wider:.05em;--volr-leading-relaxed:1.625;--volr-radius-md:.375rem;--volr-radius-lg:.5rem;--volr-radius-xl:.75rem;--volr-radius-2xl:1rem;--volr-radius-3xl:1.5rem;--volr-ease-out:cubic-bezier(0,0,.2,1);--volr-animate-spin:spin 1s linear infinite;--volr-animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--volr-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--volr-blur-2xl:40px;--volr-default-transition-duration:.15s;--volr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--volr-default-font-family:var(--volr-font-sans);--volr-default-mono-font-family:var(--volr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--volr-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--volr-default-font-feature-settings,normal);font-variation-settings:var(--volr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--volr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--volr-default-mono-font-feature-settings,normal);font-variation-settings:var(--volr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{--volr-primary-color:var(--volr-accent-color,#303030);--volr-font-family:var(--volr-custom-font,inherit);--volr-bg:#fff;--volr-bg-secondary:#f8fafc;--volr-bg-tertiary:#f1f5f9;--volr-text:#0f172a;--volr-text-secondary:#475569;--volr-text-muted:#94a3b8;--volr-border:#e2e8f0;--volr-border-strong:#cbd5e1;--volr-hover-bg:#f8fafc;--volr-error-bg:#fef2f2;--volr-error-border:#fecaca;--volr-error-text:#991b1b;--volr-hint-bg:#f8fafc;--volr-hint-border:#e2e8f0;--volr-hint-text:#334155}:host([data-theme=dark]){--volr-bg:#1c1c1e;--volr-bg-secondary:#2c2c2e;--volr-bg-tertiary:#3a3a3c;--volr-text:#f5f5f7;--volr-text-secondary:#c7c7cc;--volr-text-muted:#8e8e93;--volr-border:#3a3a3c;--volr-border-strong:#48484a;--volr-hover-bg:#2c2c2e;--volr-error-bg:#3c1f1f;--volr-error-border:#7f1d1d;--volr-error-text:#fca5a5;--volr-hint-bg:#2c2c2e;--volr-hint-border:#3a3a3c;--volr-hint-text:#c7c7cc}*,:before,:after{box-sizing:border-box}*{font-family:var(--volr-font-family);color:var(--volr-text)}button,input,select,textarea{color:var(--volr-text);background-color:#0000}button{cursor:pointer;background-color:#0000}input::placeholder{color:var(--volr-text-muted)}h1,h2,h3{color:var(--volr-text);margin:0;font-weight:700}h1{font-size:1.875rem;line-height:2.25rem}h2{font-size:1.5rem;line-height:2rem}h3{font-size:1.25rem;line-height:1.75rem}p{margin:0}}@layer components{.volr-dialog-overlay{inset:calc(var(--volr-spacing)*0);z-index:40;background-color:var(--volr-color-black);position:fixed}@supports (color:color-mix(in lab, red, red)){.volr-dialog-overlay{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr-dialog-content{z-index:50;border-radius:var(--volr-radius-2xl);border-style:var(--volr-tw-border-style);padding:calc(var(--volr-spacing)*7);--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow);background-color:var(--volr-bg);border-width:1px;border-color:var(--volr-border-strong);width:calc(100% - 2rem);max-width:28rem;max-height:85vh;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%)}@media (max-width:640px){.volr-dialog-content{top:auto;right:calc(var(--volr-spacing)*0);bottom:calc(var(--volr-spacing)*0);left:calc(var(--volr-spacing)*0);border-radius:1.25rem 1.25rem 0 0;width:100%;max-width:100%;margin:0 auto;transform:translateY(0)}}.volr-dialog-close{top:calc(var(--volr-spacing)*4);right:calc(var(--volr-spacing)*4);height:calc(var(--volr-spacing)*8);width:calc(var(--volr-spacing)*8);color:var(--volr-text-muted);cursor:pointer;background-color:#0000;border:none;border-radius:3.40282e38px;justify-content:center;align-items:center;display:inline-flex;position:absolute}.volr-dialog-close:hover{background-color:var(--volr-hover-bg);color:var(--volr-text-secondary)}.volr-dialog-close:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}.volr-dialog-close-icon{height:calc(var(--volr-spacing)*4);width:calc(var(--volr-spacing)*4)}.volr-email-input{border:1px solid var(--volr-border-strong);background-color:var(--volr-bg);width:100%;color:var(--volr-text);border-radius:.5rem;outline:none;padding:.75rem .75rem .75rem 2.75rem;font-size:1rem;line-height:1.5}.volr-email-input::placeholder{color:var(--volr-text-muted)}.volr-email-input:focus{border-color:var(--volr-border-strong);box-shadow:0 0 0 2px var(--volr-border-strong)}.volr-option-button{border:1px solid var(--volr-border);background-color:var(--volr-bg);width:100%;color:var(--volr-text);cursor:pointer;border-radius:.5rem;align-items:center;gap:.75rem;padding:.75rem;transition:background-color .15s ease-out,border-color .15s ease-out,box-shadow .15s ease-out;display:flex}.volr-option-button:hover{background-color:var(--volr-hover-bg);border-color:var(--volr-border)}.volr-option-button:focus-visible{box-shadow:0 0 0 2px var(--volr-border-strong);outline:none}}@layer utilities{.volr\\:pointer-events-auto{pointer-events:auto}.volr\\:pointer-events-none{pointer-events:none}.volr\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.volr\\:absolute{position:absolute}.volr\\:fixed{position:fixed}.volr\\:relative{position:relative}.volr\\:inset-0{inset:calc(var(--volr-spacing)*0)}.volr\\:-top-3{top:calc(var(--volr-spacing)*-3)}.volr\\:top-1\\/2{top:50%}.volr\\:-right-3{right:calc(var(--volr-spacing)*-3)}.volr\\:right-0{right:calc(var(--volr-spacing)*0)}.volr\\:right-2{right:calc(var(--volr-spacing)*2)}.volr\\:right-3{right:calc(var(--volr-spacing)*3)}.volr\\:bottom-0{bottom:calc(var(--volr-spacing)*0)}.volr\\:left-0{left:calc(var(--volr-spacing)*0)}.volr\\:left-3{left:calc(var(--volr-spacing)*3)}.volr\\:-z-10{z-index:calc(10*-1)}.volr\\:z-10{z-index:10}.volr\\:z-20{z-index:20}.volr\\:z-40{z-index:40}.volr\\:z-50{z-index:50}.volr\\:mx-auto{margin-inline:auto}.volr\\:my-6{margin-block:calc(var(--volr-spacing)*6)}.volr\\:mt-0\\.5{margin-top:calc(var(--volr-spacing)*.5)}.volr\\:mt-1{margin-top:calc(var(--volr-spacing)*1)}.volr\\:mt-2{margin-top:calc(var(--volr-spacing)*2)}.volr\\:mt-3{margin-top:calc(var(--volr-spacing)*3)}.volr\\:mt-4{margin-top:calc(var(--volr-spacing)*4)}.volr\\:mt-6{margin-top:calc(var(--volr-spacing)*6)}.volr\\:mt-8{margin-top:calc(var(--volr-spacing)*8)}.volr\\:mb-1{margin-bottom:calc(var(--volr-spacing)*1)}.volr\\:mb-2{margin-bottom:calc(var(--volr-spacing)*2)}.volr\\:mb-3{margin-bottom:calc(var(--volr-spacing)*3)}.volr\\:mb-4{margin-bottom:calc(var(--volr-spacing)*4)}.volr\\:mb-5{margin-bottom:calc(var(--volr-spacing)*5)}.volr\\:mb-6{margin-bottom:calc(var(--volr-spacing)*6)}.volr\\:mb-8{margin-bottom:calc(var(--volr-spacing)*8)}.volr\\:-ml-2{margin-left:calc(var(--volr-spacing)*-2)}.volr\\:ml-6{margin-left:calc(var(--volr-spacing)*6)}.volr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.volr\\:block{display:block}.volr\\:flex{display:flex}.volr\\:grid{display:grid}.volr\\:inline-block{display:inline-block}.volr\\:inline-flex{display:inline-flex}.volr\\:h-1{height:calc(var(--volr-spacing)*1)}.volr\\:h-1\\.5{height:calc(var(--volr-spacing)*1.5)}.volr\\:h-2{height:calc(var(--volr-spacing)*2)}.volr\\:h-3{height:calc(var(--volr-spacing)*3)}.volr\\:h-4{height:calc(var(--volr-spacing)*4)}.volr\\:h-5{height:calc(var(--volr-spacing)*5)}.volr\\:h-6{height:calc(var(--volr-spacing)*6)}.volr\\:h-7{height:calc(var(--volr-spacing)*7)}.volr\\:h-8{height:calc(var(--volr-spacing)*8)}.volr\\:h-10{height:calc(var(--volr-spacing)*10)}.volr\\:h-12{height:calc(var(--volr-spacing)*12)}.volr\\:h-14{height:calc(var(--volr-spacing)*14)}.volr\\:h-16{height:calc(var(--volr-spacing)*16)}.volr\\:h-20{height:calc(var(--volr-spacing)*20)}.volr\\:h-24{height:calc(var(--volr-spacing)*24)}.volr\\:h-40{height:calc(var(--volr-spacing)*40)}.volr\\:h-44{height:calc(var(--volr-spacing)*44)}.volr\\:h-48{height:calc(var(--volr-spacing)*48)}.volr\\:h-\\[0\\.8em\\]{height:.8em}.volr\\:h-\\[200px\\]{height:200px}.volr\\:h-full{height:100%}.volr\\:h-px{height:1px}.volr\\:max-h-48{max-height:calc(var(--volr-spacing)*48)}.volr\\:max-h-60{max-height:calc(var(--volr-spacing)*60)}.volr\\:max-h-64{max-height:calc(var(--volr-spacing)*64)}.volr\\:max-h-\\[85vh\\]{max-height:85vh}.volr\\:max-h-\\[90vh\\]{max-height:90vh}.volr\\:min-h-\\[100px\\]{min-height:100px}.volr\\:min-h-\\[120px\\]{min-height:120px}.volr\\:min-h-\\[500px\\]{min-height:500px}.volr\\:w-1\\.5{width:calc(var(--volr-spacing)*1.5)}.volr\\:w-2{width:calc(var(--volr-spacing)*2)}.volr\\:w-3{width:calc(var(--volr-spacing)*3)}.volr\\:w-4{width:calc(var(--volr-spacing)*4)}.volr\\:w-5{width:calc(var(--volr-spacing)*5)}.volr\\:w-6{width:calc(var(--volr-spacing)*6)}.volr\\:w-7{width:calc(var(--volr-spacing)*7)}.volr\\:w-8{width:calc(var(--volr-spacing)*8)}.volr\\:w-10{width:calc(var(--volr-spacing)*10)}.volr\\:w-12{width:calc(var(--volr-spacing)*12)}.volr\\:w-14{width:calc(var(--volr-spacing)*14)}.volr\\:w-16{width:calc(var(--volr-spacing)*16)}.volr\\:w-20{width:calc(var(--volr-spacing)*20)}.volr\\:w-24{width:calc(var(--volr-spacing)*24)}.volr\\:w-32{width:calc(var(--volr-spacing)*32)}.volr\\:w-36{width:calc(var(--volr-spacing)*36)}.volr\\:w-40{width:calc(var(--volr-spacing)*40)}.volr\\:w-44{width:calc(var(--volr-spacing)*44)}.volr\\:w-48{width:calc(var(--volr-spacing)*48)}.volr\\:w-\\[200px\\]{width:200px}.volr\\:w-auto{width:auto}.volr\\:w-full{width:100%}.volr\\:max-w-4xl{max-width:var(--volr-container-4xl)}.volr\\:max-w-full{max-width:100%}.volr\\:max-w-md{max-width:var(--volr-container-md)}.volr\\:max-w-none{max-width:none}.volr\\:min-w-0{min-width:calc(var(--volr-spacing)*0)}.volr\\:flex-1{flex:1}.volr\\:flex-shrink-0,.volr\\:shrink-0{flex-shrink:0}.volr\\:-translate-y-1\\/2{--volr-tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--volr-tw-translate-x)var(--volr-tw-translate-y)}.volr\\:rotate-90{rotate:90deg}.volr\\:rotate-180{rotate:180deg}.volr\\:animate-ping{animation:var(--volr-animate-ping)}.volr\\:animate-pulse{animation:var(--volr-animate-pulse)}.volr\\:animate-spin{animation:var(--volr-animate-spin)}.volr\\:cursor-not-allowed{cursor:not-allowed}.volr\\:cursor-pointer{cursor:pointer}.volr\\:list-inside{list-style-position:inside}.volr\\:list-decimal{list-style-type:decimal}.volr\\:grid-cols-\\[minmax\\(0\\,1\\.1fr\\)_minmax\\(0\\,1fr\\)\\]{grid-template-columns:minmax(0,1.1fr) minmax(0,1fr)}.volr\\:flex-col{flex-direction:column}.volr\\:items-baseline{align-items:baseline}.volr\\:items-center{align-items:center}.volr\\:items-end{align-items:flex-end}.volr\\:items-start{align-items:flex-start}.volr\\:justify-between{justify-content:space-between}.volr\\:justify-center{justify-content:center}.volr\\:gap-1{gap:calc(var(--volr-spacing)*1)}.volr\\:gap-2{gap:calc(var(--volr-spacing)*2)}.volr\\:gap-3{gap:calc(var(--volr-spacing)*3)}.volr\\:gap-4{gap:calc(var(--volr-spacing)*4)}:where(.volr\\:space-y-1>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*1)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*1)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-2>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*2)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*2)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-3>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*3)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*3)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-4>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*4)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*4)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-5>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*5)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*5)*calc(1 - var(--volr-tw-space-y-reverse)))}:where(.volr\\:space-y-6>:not(:last-child)){--volr-tw-space-y-reverse:0;margin-block-start:calc(calc(var(--volr-spacing)*6)*var(--volr-tw-space-y-reverse));margin-block-end:calc(calc(var(--volr-spacing)*6)*calc(1 - var(--volr-tw-space-y-reverse)))}.volr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.volr\\:overflow-auto{overflow:auto}.volr\\:overflow-hidden{overflow:hidden}.volr\\:overflow-visible{overflow:visible}.volr\\:overflow-x-auto{overflow-x:auto}.volr\\:overflow-y-auto{overflow-y:auto}.volr\\:rounded{border-radius:.25rem}.volr\\:rounded-2xl{border-radius:var(--volr-radius-2xl)}.volr\\:rounded-full{border-radius:3.40282e38px}.volr\\:rounded-lg{border-radius:var(--volr-radius-lg)}.volr\\:rounded-md{border-radius:var(--volr-radius-md)}.volr\\:rounded-xl{border-radius:var(--volr-radius-xl)}.volr\\:rounded-t-2xl{border-top-left-radius:var(--volr-radius-2xl);border-top-right-radius:var(--volr-radius-2xl)}.volr\\:rounded-t-3xl{border-top-left-radius:var(--volr-radius-3xl);border-top-right-radius:var(--volr-radius-3xl)}.volr\\:border{border-style:var(--volr-tw-border-style);border-width:1px}.volr\\:border-2{border-style:var(--volr-tw-border-style);border-width:2px}.volr\\:border-4{border-style:var(--volr-tw-border-style);border-width:4px}.volr\\:border-y{border-block-style:var(--volr-tw-border-style);border-block-width:1px}.volr\\:border-t{border-top-style:var(--volr-tw-border-style);border-top-width:1px}.volr\\:border-b{border-bottom-style:var(--volr-tw-border-style);border-bottom-width:1px}.volr\\:border-amber-200{border-color:var(--volr-color-amber-200)}.volr\\:border-red-200{border-color:var(--volr-color-red-200)}.volr\\:border-red-500{border-color:var(--volr-color-red-500)}.volr\\:border-slate-100{border-color:var(--volr-color-slate-100)}.volr\\:border-slate-200{border-color:var(--volr-color-slate-200)}.volr\\:border-slate-300{border-color:var(--volr-color-slate-300)}.volr\\:border-transparent{border-color:#0000}.volr\\:border-white{border-color:var(--volr-color-white)}.volr\\:border-t-slate-600{border-top-color:var(--volr-color-slate-600)}.volr\\:border-t-slate-900{border-top-color:var(--volr-color-slate-900)}.volr\\:bg-amber-50{background-color:var(--volr-color-amber-50)}.volr\\:bg-black\\/45{background-color:var(--volr-color-black)}@supports (color:color-mix(in lab, red, red)){.volr\\:bg-black\\/45{background-color:color-mix(in oklab,var(--volr-color-black)45%,transparent)}}.volr\\:bg-blue-100{background-color:var(--volr-color-blue-100)}.volr\\:bg-cyan-400{background-color:var(--volr-color-cyan-400)}.volr\\:bg-emerald-300{background-color:var(--volr-color-emerald-300)}.volr\\:bg-emerald-400{background-color:var(--volr-color-emerald-400)}.volr\\:bg-emerald-500{background-color:var(--volr-color-emerald-500)}.volr\\:bg-green-50{background-color:var(--volr-color-green-50)}.volr\\:bg-green-100{background-color:var(--volr-color-green-100)}.volr\\:bg-red-50{background-color:var(--volr-color-red-50)}.volr\\:bg-red-100{background-color:var(--volr-color-red-100)}.volr\\:bg-slate-50{background-color:var(--volr-color-slate-50)}.volr\\:bg-slate-100{background-color:var(--volr-color-slate-100)}.volr\\:bg-slate-200{background-color:var(--volr-color-slate-200)}.volr\\:bg-slate-900{background-color:var(--volr-color-slate-900)}.volr\\:bg-teal-400{background-color:var(--volr-color-teal-400)}.volr\\:bg-white{background-color:var(--volr-color-white)}.volr\\:bg-yellow-100{background-color:var(--volr-color-yellow-100)}.volr\\:bg-linear-to-br{--volr-tw-gradient-position:to bottom right}@supports (background-image:linear-gradient(in lab, red, red)){.volr\\:bg-linear-to-br{--volr-tw-gradient-position:to bottom right in oklab}}.volr\\:bg-linear-to-br{background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\:bg-linear-to-r{--volr-tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.volr\\:bg-linear-to-r{--volr-tw-gradient-position:to right in oklab}}.volr\\:bg-linear-to-r{background-image:linear-gradient(var(--volr-tw-gradient-stops))}.volr\\:from-emerald-400{--volr-tw-gradient-from:var(--volr-color-emerald-400);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:to-teal-500{--volr-tw-gradient-to:var(--volr-color-teal-500);--volr-tw-gradient-stops:var(--volr-tw-gradient-via-stops,var(--volr-tw-gradient-position),var(--volr-tw-gradient-from)var(--volr-tw-gradient-from-position),var(--volr-tw-gradient-to)var(--volr-tw-gradient-to-position))}.volr\\:object-cover{object-fit:cover}.volr\\:p-1{padding:calc(var(--volr-spacing)*1)}.volr\\:p-2{padding:calc(var(--volr-spacing)*2)}.volr\\:p-3{padding:calc(var(--volr-spacing)*3)}.volr\\:p-4{padding:calc(var(--volr-spacing)*4)}.volr\\:p-5{padding:calc(var(--volr-spacing)*5)}.volr\\:p-8{padding:calc(var(--volr-spacing)*8)}.volr\\:px-1\\.5{padding-inline:calc(var(--volr-spacing)*1.5)}.volr\\:px-2{padding-inline:calc(var(--volr-spacing)*2)}.volr\\:px-3{padding-inline:calc(var(--volr-spacing)*3)}.volr\\:px-4{padding-inline:calc(var(--volr-spacing)*4)}.volr\\:px-5{padding-inline:calc(var(--volr-spacing)*5)}.volr\\:px-6{padding-inline:calc(var(--volr-spacing)*6)}.volr\\:py-0\\.5{padding-block:calc(var(--volr-spacing)*.5)}.volr\\:py-1{padding-block:calc(var(--volr-spacing)*1)}.volr\\:py-1\\.5{padding-block:calc(var(--volr-spacing)*1.5)}.volr\\:py-2{padding-block:calc(var(--volr-spacing)*2)}.volr\\:py-2\\.5{padding-block:calc(var(--volr-spacing)*2.5)}.volr\\:py-3{padding-block:calc(var(--volr-spacing)*3)}.volr\\:py-4{padding-block:calc(var(--volr-spacing)*4)}.volr\\:py-6{padding-block:calc(var(--volr-spacing)*6)}.volr\\:py-7{padding-block:calc(var(--volr-spacing)*7)}.volr\\:py-8{padding-block:calc(var(--volr-spacing)*8)}.volr\\:py-12{padding-block:calc(var(--volr-spacing)*12)}.volr\\:pt-1{padding-top:calc(var(--volr-spacing)*1)}.volr\\:pt-2{padding-top:calc(var(--volr-spacing)*2)}.volr\\:pt-3{padding-top:calc(var(--volr-spacing)*3)}.volr\\:pt-4{padding-top:calc(var(--volr-spacing)*4)}.volr\\:pt-5{padding-top:calc(var(--volr-spacing)*5)}.volr\\:pr-3{padding-right:calc(var(--volr-spacing)*3)}.volr\\:pr-16{padding-right:calc(var(--volr-spacing)*16)}.volr\\:pb-6{padding-bottom:calc(var(--volr-spacing)*6)}.volr\\:pl-11{padding-left:calc(var(--volr-spacing)*11)}.volr\\:text-center{text-align:center}.volr\\:text-left{text-align:left}.volr\\:text-right{text-align:right}.volr\\:align-baseline{vertical-align:baseline}.volr\\:font-mono{font-family:var(--volr-font-mono)}.volr\\:text-2xl{font-size:var(--volr-text-2xl);line-height:var(--volr-tw-leading,var(--volr-text-2xl--line-height))}.volr\\:text-8xl{font-size:var(--volr-text-8xl);line-height:var(--volr-tw-leading,var(--volr-text-8xl--line-height))}.volr\\:text-base{font-size:var(--volr-text-base);line-height:var(--volr-tw-leading,var(--volr-text-base--line-height))}.volr\\:text-lg{font-size:var(--volr-text-lg);line-height:var(--volr-tw-leading,var(--volr-text-lg--line-height))}.volr\\:text-sm{font-size:var(--volr-text-sm);line-height:var(--volr-tw-leading,var(--volr-text-sm--line-height))}.volr\\:text-xl{font-size:var(--volr-text-xl);line-height:var(--volr-tw-leading,var(--volr-text-xl--line-height))}.volr\\:text-xs{font-size:var(--volr-text-xs);line-height:var(--volr-tw-leading,var(--volr-text-xs--line-height))}.volr\\:leading-none{--volr-tw-leading:1;line-height:1}.volr\\:leading-relaxed{--volr-tw-leading:var(--volr-leading-relaxed);line-height:var(--volr-leading-relaxed)}.volr\\:font-bold{--volr-tw-font-weight:var(--volr-font-weight-bold);font-weight:var(--volr-font-weight-bold)}.volr\\:font-medium{--volr-tw-font-weight:var(--volr-font-weight-medium);font-weight:var(--volr-font-weight-medium)}.volr\\:font-semibold{--volr-tw-font-weight:var(--volr-font-weight-semibold);font-weight:var(--volr-font-weight-semibold)}.volr\\:tracking-tight{--volr-tw-tracking:var(--volr-tracking-tight);letter-spacing:var(--volr-tracking-tight)}.volr\\:tracking-wide{--volr-tw-tracking:var(--volr-tracking-wide);letter-spacing:var(--volr-tracking-wide)}.volr\\:tracking-wider{--volr-tw-tracking:var(--volr-tracking-wider);letter-spacing:var(--volr-tracking-wider)}.volr\\:break-all{word-break:break-all}.volr\\:text-amber-700{color:var(--volr-color-amber-700)}.volr\\:text-blue-700{color:var(--volr-color-blue-700)}.volr\\:text-emerald-600{color:var(--volr-color-emerald-600)}.volr\\:text-gray-500{color:var(--volr-color-gray-500)}.volr\\:text-green-600{color:var(--volr-color-green-600)}.volr\\:text-green-700{color:var(--volr-color-green-700)}.volr\\:text-red-500{color:var(--volr-color-red-500)}.volr\\:text-red-600{color:var(--volr-color-red-600)}.volr\\:text-red-700{color:var(--volr-color-red-700)}.volr\\:text-slate-300{color:var(--volr-color-slate-300)}.volr\\:text-slate-400{color:var(--volr-color-slate-400)}.volr\\:text-slate-500{color:var(--volr-color-slate-500)}.volr\\:text-slate-600{color:var(--volr-color-slate-600)}.volr\\:text-slate-700{color:var(--volr-color-slate-700)}.volr\\:text-slate-800{color:var(--volr-color-slate-800)}.volr\\:text-slate-900{color:var(--volr-color-slate-900)}.volr\\:text-white{color:var(--volr-color-white)}.volr\\:text-yellow-700{color:var(--volr-color-yellow-700)}.volr\\:capitalize{text-transform:capitalize}.volr\\:uppercase{text-transform:uppercase}.volr\\:underline{text-decoration-line:underline}.volr\\:opacity-0{opacity:0}.volr\\:opacity-25{opacity:.25}.volr\\:opacity-30{opacity:.3}.volr\\:opacity-50{opacity:.5}.volr\\:opacity-70{opacity:.7}.volr\\:opacity-75{opacity:.75}.volr\\:opacity-80{opacity:.8}.volr\\:shadow-2xl{--volr-tw-shadow:0 25px 50px -12px var(--volr-tw-shadow-color,#00000040);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-lg{--volr-tw-shadow:0 10px 15px -3px var(--volr-tw-shadow-color,#0000001a),0 4px 6px -4px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-sm{--volr-tw-shadow:0 1px 3px 0 var(--volr-tw-shadow-color,#0000001a),0 1px 2px -1px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-xl{--volr-tw-shadow:0 20px 25px -5px var(--volr-tw-shadow-color,#0000001a),0 8px 10px -6px var(--volr-tw-shadow-color,#0000001a);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:shadow-emerald-500\\/50{--volr-tw-shadow-color:var(--volr-color-emerald-500)}@supports (color:color-mix(in lab, red, red)){.volr\\:shadow-emerald-500\\/50{--volr-tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--volr-color-emerald-500)50%,transparent)var(--volr-tw-shadow-alpha),transparent)}}.volr\\:blur-2xl{--volr-tw-blur:blur(var(--volr-blur-2xl));filter:var(--volr-tw-blur,)var(--volr-tw-brightness,)var(--volr-tw-contrast,)var(--volr-tw-grayscale,)var(--volr-tw-hue-rotate,)var(--volr-tw-invert,)var(--volr-tw-saturate,)var(--volr-tw-sepia,)var(--volr-tw-drop-shadow,)}.volr\\:transition-all{transition-property:all;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--volr-tw-gradient-from,--volr-tw-gradient-via,--volr-tw-gradient-to;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--volr-tw-ease,var(--volr-default-transition-timing-function));transition-duration:var(--volr-tw-duration,var(--volr-default-transition-duration))}.volr\\:duration-200{--volr-tw-duration:.2s;transition-duration:.2s}.volr\\:duration-300{--volr-tw-duration:.3s;transition-duration:.3s}.volr\\:duration-500{--volr-tw-duration:.5s;transition-duration:.5s}.volr\\:ease-out{--volr-tw-ease:var(--volr-ease-out);transition-timing-function:var(--volr-ease-out)}.volr\\:outline-none{--volr-tw-outline-style:none;outline-style:none}@media (hover:hover){.volr\\:hover\\:border-slate-300:hover{border-color:var(--volr-color-slate-300)}.volr\\:hover\\:bg-slate-50:hover{background-color:var(--volr-color-slate-50)}.volr\\:hover\\:bg-slate-200:hover{background-color:var(--volr-color-slate-200)}.volr\\:hover\\:text-slate-700:hover{color:var(--volr-color-slate-700)}}.volr\\:focus\\:ring-2:focus{--volr-tw-ring-shadow:var(--volr-tw-ring-inset,)0 0 0 calc(2px + var(--volr-tw-ring-offset-width))var(--volr-tw-ring-color,currentcolor);box-shadow:var(--volr-tw-inset-shadow),var(--volr-tw-inset-ring-shadow),var(--volr-tw-ring-offset-shadow),var(--volr-tw-ring-shadow),var(--volr-tw-shadow)}.volr\\:focus\\:ring-slate-300:focus{--volr-tw-ring-color:var(--volr-color-slate-300)}.volr\\:focus\\:outline-none:focus{--volr-tw-outline-style:none;outline-style:none}.volr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.volr\\:disabled\\:bg-slate-100:disabled{background-color:var(--volr-color-slate-100)}.volr\\:disabled\\:text-slate-400:disabled{color:var(--volr-color-slate-400)}.volr\\:disabled\\:opacity-50:disabled{opacity:.5}.volr-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.volr-text-secondary{color:var(--volr-text-secondary)}.volr-text-muted{color:var(--volr-text-muted)}.volr-bg-secondary{background-color:var(--volr-bg-secondary)}.volr-bg-tertiary{background-color:var(--volr-bg-tertiary)}.volr-border{border-color:var(--volr-border)}.volr-border-strong{border-color:var(--volr-border-strong)}.volr-divider-line{background-color:var(--volr-border)}.volr-error{background-color:var(--volr-error-bg);border-color:var(--volr-error-border);color:var(--volr-error-text)}.volr-hint{background-color:var(--volr-hint-bg);border:1px solid var(--volr-hint-border);color:var(--volr-hint-text)}.volr-hover:hover{background-color:var(--volr-hover-bg)}.volr-surface{background-color:var(--volr-bg)}}@property --volr-tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --volr-tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --volr-tw-gradient-position{syntax:"*";inherits:false}@property --volr-tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --volr-tw-gradient-stops{syntax:"*";inherits:false}@property --volr-tw-gradient-via-stops{syntax:"*";inherits:false}@property --volr-tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --volr-tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --volr-tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --volr-tw-leading{syntax:"*";inherits:false}@property --volr-tw-font-weight{syntax:"*";inherits:false}@property --volr-tw-tracking{syntax:"*";inherits:false}@property --volr-tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-shadow-color{syntax:"*";inherits:false}@property --volr-tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-shadow-color{syntax:"*";inherits:false}@property --volr-tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-ring-color{syntax:"*";inherits:false}@property --volr-tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-inset-ring-color{syntax:"*";inherits:false}@property --volr-tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-ring-inset{syntax:"*";inherits:false}@property --volr-tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --volr-tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --volr-tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --volr-tw-blur{syntax:"*";inherits:false}@property --volr-tw-brightness{syntax:"*";inherits:false}@property --volr-tw-contrast{syntax:"*";inherits:false}@property --volr-tw-grayscale{syntax:"*";inherits:false}@property --volr-tw-hue-rotate{syntax:"*";inherits:false}@property --volr-tw-invert{syntax:"*";inherits:false}@property --volr-tw-opacity{syntax:"*";inherits:false}@property --volr-tw-saturate{syntax:"*";inherits:false}@property --volr-tw-sepia{syntax:"*";inherits:false}@property --volr-tw-drop-shadow{syntax:"*";inherits:false}@property --volr-tw-drop-shadow-color{syntax:"*";inherits:false}@property --volr-tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --volr-tw-drop-shadow-size{syntax:"*";inherits:false}@property --volr-tw-duration{syntax:"*";inherits:false}@property --volr-tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}';
1138
1194
  function useResolvedTheme(theme = "light") {
1139
1195
  const [resolvedTheme, setResolvedTheme] = useState(() => {
1140
1196
  if (theme !== "system") return theme;
@@ -1850,7 +1906,7 @@ var variantMap = {
1850
1906
  ghost: { backgroundColor: "transparent", color: "var(--volr-text-secondary)", border: "none" },
1851
1907
  outline: { backgroundColor: "transparent", color: "var(--volr-text-secondary)", border: "1px solid var(--volr-border)" }
1852
1908
  };
1853
- var Button = React13.forwardRef(
1909
+ var Button = React14.forwardRef(
1854
1910
  ({ variant = "primary", size = "md", fullWidth, className, style, disabled, children, ...props }, ref) => {
1855
1911
  const { accentColor } = useVolrUI();
1856
1912
  const sizeStyle = sizeMap[size];
@@ -1893,9 +1949,7 @@ function PasskeyEnrollForm({
1893
1949
  biometricMessage,
1894
1950
  errorMessage,
1895
1951
  onEnroll,
1896
- onLogout,
1897
1952
  buttonText,
1898
- logoutText,
1899
1953
  hintMessage,
1900
1954
  hintNote
1901
1955
  }) {
@@ -1913,10 +1967,45 @@ function PasskeyEnrollForm({
1913
1967
  /* @__PURE__ */ jsx(ErrorIcon, { className: "volr:shrink-0 volr:mt-0.5" }),
1914
1968
  /* @__PURE__ */ jsx("span", { children: errorMessage })
1915
1969
  ] }),
1916
- /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:flex-col volr:gap-3", children: [
1917
- /* @__PURE__ */ jsx(Button, { variant: "primary", fullWidth: true, onClick: onEnroll, children: buttonText }),
1918
- /* @__PURE__ */ jsx(Button, { variant: "ghost", fullWidth: true, onClick: onLogout, children: logoutText })
1919
- ] })
1970
+ /* @__PURE__ */ jsx("div", { className: "volr:flex volr:flex-col volr:gap-3", children: /* @__PURE__ */ jsx(Button, { variant: "primary", fullWidth: true, onClick: onEnroll, children: buttonText }) })
1971
+ ] });
1972
+ }
1973
+ function ProgressSteps({
1974
+ totalSteps,
1975
+ currentStep,
1976
+ activeColor = "#1e293b",
1977
+ // slate-900
1978
+ inactiveColor = "#e2e8f0",
1979
+ // slate-200
1980
+ activeWidth = 8,
1981
+ inactiveWidth = 6,
1982
+ gap = 8,
1983
+ // 0.5rem = 8px
1984
+ animate = true
1985
+ }) {
1986
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1987
+ /* @__PURE__ */ jsx("div", { className: "volr:flex volr:items-center volr:justify-center", style: { gap: `${gap}px` }, children: Array.from({ length: totalSteps }).map((_, stepIdx) => {
1988
+ const isActive = stepIdx <= currentStep;
1989
+ const isCurrent = stepIdx === currentStep;
1990
+ return /* @__PURE__ */ jsx(
1991
+ "div",
1992
+ {
1993
+ className: "volr:h-1.5 volr:rounded-full volr:transition-all volr:duration-300",
1994
+ style: {
1995
+ width: `${isActive ? activeWidth : inactiveWidth}px`,
1996
+ backgroundColor: isActive ? activeColor : inactiveColor,
1997
+ ...isCurrent && animate ? { animation: "volrProgressPulse 1.5s ease-in-out infinite" } : void 0
1998
+ }
1999
+ },
2000
+ stepIdx
2001
+ );
2002
+ }) }),
2003
+ /* @__PURE__ */ jsx("style", { children: `
2004
+ @keyframes volrProgressPulse {
2005
+ 0%, 100% { opacity: 1; }
2006
+ 50% { opacity: 0.6; }
2007
+ }
2008
+ ` })
1920
2009
  ] });
1921
2010
  }
1922
2011
  function PasskeyEnrollLoading({
@@ -1925,28 +2014,14 @@ function PasskeyEnrollLoading({
1925
2014
  isEnrolling,
1926
2015
  accentColor,
1927
2016
  onRetry,
1928
- onLogout,
1929
2017
  buttonText,
1930
- logoutText,
1931
- progress = 0
2018
+ currentStepIndex = 0
1932
2019
  }) {
1933
2020
  return /* @__PURE__ */ jsxs(Fragment, { children: [
1934
2021
  /* @__PURE__ */ jsx("div", { className: "volr:mb-8 volr:flex volr:justify-center volr:items-center volr:min-h-[120px]", children: /* @__PURE__ */ jsx(BiometricIcon, { type: biometricType, size: 60, animate: isEnrolling }) }),
1935
2022
  /* @__PURE__ */ jsx("p", { className: "volr:text-base volr:mb-4 volr-text-secondary", children: stepMessage }),
1936
- isEnrolling && /* @__PURE__ */ jsx("div", { className: "volr:w-full volr:mb-6", children: /* @__PURE__ */ jsx("div", { className: "volr:w-full volr:h-2 volr:rounded-full volr:overflow-hidden volr-bg-tertiary", children: /* @__PURE__ */ jsx(
1937
- "div",
1938
- {
1939
- className: "volr:h-full volr:rounded-full volr:transition-all volr:duration-500 volr:ease-out",
1940
- style: {
1941
- backgroundColor: accentColor,
1942
- width: `${progress}%`
1943
- }
1944
- }
1945
- ) }) }),
1946
- !isEnrolling && /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:flex-col volr:gap-3 volr:mt-6", children: [
1947
- /* @__PURE__ */ jsx(Button, { variant: "primary", fullWidth: true, onClick: onRetry, children: buttonText }),
1948
- /* @__PURE__ */ jsx(Button, { variant: "ghost", fullWidth: true, onClick: onLogout, children: logoutText })
1949
- ] })
2023
+ isEnrolling && /* @__PURE__ */ jsx("div", { className: "volr:mb-6", children: /* @__PURE__ */ jsx(ProgressSteps, { totalSteps: 2, currentStep: currentStepIndex }) }),
2024
+ !isEnrolling && /* @__PURE__ */ jsx("div", { className: "volr:flex volr:flex-col volr:gap-3 volr:mt-6", children: /* @__PURE__ */ jsx(Button, { variant: "primary", fullWidth: true, onClick: onRetry, children: buttonText }) })
1950
2025
  ] });
1951
2026
  }
1952
2027
  function WarningIcon({ className }) {
@@ -1985,8 +2060,7 @@ function getActionButtonKey(action) {
1985
2060
  }
1986
2061
  }
1987
2062
  function PasskeyCompatibilityScreen({
1988
- compatibility,
1989
- onLogout
2063
+ compatibility
1990
2064
  }) {
1991
2065
  const { t } = useI18n();
1992
2066
  const messageKey = compatibility.messageKey || "passkey.compatibility.unknownBrowser";
@@ -2019,10 +2093,7 @@ function PasskeyCompatibilityScreen({
2019
2093
  /* @__PURE__ */ jsx("span", { className: "volr:font-medium", children: compatibility.platform })
2020
2094
  ] })
2021
2095
  ] }),
2022
- /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:flex-col volr:gap-3", children: [
2023
- compatibility.action && /* @__PURE__ */ jsx(Button, { variant: "primary", fullWidth: true, onClick: handleAction, children: t(actionButtonKey) }),
2024
- /* @__PURE__ */ jsx(Button, { variant: "ghost", fullWidth: true, onClick: onLogout, children: t("passkey.logout") })
2025
- ] })
2096
+ compatibility.action && /* @__PURE__ */ jsx("div", { className: "volr:flex volr:flex-col volr:gap-3", children: /* @__PURE__ */ jsx(Button, { variant: "primary", fullWidth: true, onClick: handleAction, children: t(actionButtonKey) }) })
2026
2097
  ] });
2027
2098
  }
2028
2099
  var AUTO_CLOSE_DELAY = 2e3;
@@ -2030,7 +2101,6 @@ function PasskeyMigrationView({
2030
2101
  sourcePasskey,
2031
2102
  currentDomain,
2032
2103
  onMigrate,
2033
- onSkip,
2034
2104
  onError,
2035
2105
  onComplete,
2036
2106
  isOpen = true,
@@ -2057,13 +2127,11 @@ function PasskeyMigrationView({
2057
2127
  const timer = setTimeout(() => {
2058
2128
  if (onComplete) {
2059
2129
  onComplete();
2060
- } else if (onSkip) {
2061
- onSkip();
2062
2130
  }
2063
2131
  }, AUTO_CLOSE_DELAY);
2064
2132
  return () => clearTimeout(timer);
2065
2133
  }
2066
- }, [isComplete, onComplete, onSkip]);
2134
+ }, [isComplete, onComplete]);
2067
2135
  const handleMigrate = async () => {
2068
2136
  try {
2069
2137
  setIsMigrating(true);
@@ -2081,10 +2149,8 @@ function PasskeyMigrationView({
2081
2149
  const handleDone = useCallback(() => {
2082
2150
  if (onComplete) {
2083
2151
  onComplete();
2084
- } else if (onSkip) {
2085
- onSkip();
2086
2152
  }
2087
- }, [onComplete, onSkip]);
2153
+ }, [onComplete]);
2088
2154
  const successContent = /* @__PURE__ */ jsxs("div", { className: "volr:py-4", children: [
2089
2155
  /* @__PURE__ */ jsx("p", { className: "volr:text-xl volr:font-semibold volr:mb-6 volr:text-center", children: t("passkey.migration.successTitle") }),
2090
2156
  /* @__PURE__ */ jsx("div", { className: "volr:mb-8 volr:flex volr:justify-center", children: /* @__PURE__ */ jsx("div", { className: "volr:w-16 volr:h-16 volr:rounded-full volr:bg-slate-900 volr:flex volr:items-center volr:justify-center", children: /* @__PURE__ */ jsx(
@@ -2143,44 +2209,31 @@ function PasskeyMigrationView({
2143
2209
  /* @__PURE__ */ jsx("span", { children: t("passkey.migration.benefits") })
2144
2210
  ] }) }),
2145
2211
  error && /* @__PURE__ */ jsx("div", { className: "volr:mb-4 volr:p-3 volr:rounded-lg volr:border volr:text-sm volr:text-left volr-error", children: /* @__PURE__ */ jsx("span", { children: error }) }),
2146
- /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:flex-col volr:gap-3", children: [
2147
- /* @__PURE__ */ jsx(
2148
- Button,
2149
- {
2150
- variant: "primary",
2151
- fullWidth: true,
2152
- onClick: handleMigrate,
2153
- disabled: isMigrating,
2154
- children: t("passkey.migration.cta")
2155
- }
2156
- ),
2157
- onSkip && /* @__PURE__ */ jsx(
2158
- Button,
2159
- {
2160
- variant: "ghost",
2161
- fullWidth: true,
2162
- onClick: onSkip,
2163
- disabled: isMigrating,
2164
- children: t("passkey.migration.later")
2165
- }
2166
- )
2167
- ] })
2212
+ /* @__PURE__ */ jsx("div", { className: "volr:flex volr:flex-col volr:gap-3", children: /* @__PURE__ */ jsx(
2213
+ Button,
2214
+ {
2215
+ variant: "primary",
2216
+ fullWidth: true,
2217
+ onClick: handleMigrate,
2218
+ disabled: isMigrating,
2219
+ children: t("passkey.migration.cta")
2220
+ }
2221
+ ) })
2168
2222
  ] });
2169
2223
  const content = isComplete ? successContent : isMigrating ? migratingContent : defaultContent;
2170
2224
  if (!wrapInModal) {
2171
2225
  return content;
2172
2226
  }
2173
- return /* @__PURE__ */ jsx(Modal, { open: isOpen, onOpenChange: (open) => !open && !isMigrating && onSkip?.(), children: content });
2227
+ return /* @__PURE__ */ jsx(Modal, { open: isOpen, onOpenChange: (open) => !open && !isMigrating && onComplete?.(), children: content });
2174
2228
  }
2175
2229
  function PasskeyEnrollView({
2176
2230
  onComplete,
2177
2231
  onError,
2178
- onLogout,
2179
2232
  onClose,
2180
2233
  isOpen = true,
2181
2234
  wrapInModal = true
2182
2235
  }) {
2183
- const { user, logout, setUser } = useVolrContext();
2236
+ const { user, setUser } = useVolrContext();
2184
2237
  const { client } = useInternalAuth();
2185
2238
  const { t } = useI18n();
2186
2239
  const { accentColor } = useVolrUI();
@@ -2195,9 +2248,10 @@ function PasskeyEnrollView({
2195
2248
  const [isRefreshing, setIsRefreshing] = useState(false);
2196
2249
  const biometricType = getBiometricType();
2197
2250
  const compatibility = useMemo(() => checkPrfCompatibility(), []);
2251
+ const [hasPrfError, setHasPrfError] = useState(false);
2198
2252
  const platformHint = useMemo(
2199
- () => getPlatformHint(compatibility.platform),
2200
- [compatibility.platform]
2253
+ () => hasPrfError ? getPlatformHint(compatibility.platform) : { hintKey: "", noteKey: "" },
2254
+ [compatibility.platform, hasPrfError]
2201
2255
  );
2202
2256
  const hasPasskey = user?.keyStorageType === "passkey";
2203
2257
  const currentDomain = useMemo(() => {
@@ -2272,9 +2326,14 @@ function PasskeyEnrollView({
2272
2326
  if (enrollmentError) {
2273
2327
  const friendlyMessage = getUserFriendlyError(enrollmentError, t);
2274
2328
  setErrorMessage(friendlyMessage);
2329
+ const errorMsg = enrollmentError.message.toLowerCase();
2330
+ const isPrfError = errorMsg.includes("prf extension not supported") || errorMsg.includes("prf output missing") || errorMsg.includes("prf not supported");
2331
+ setHasPrfError(isPrfError);
2275
2332
  if (onError) {
2276
2333
  onError(enrollmentError);
2277
2334
  }
2335
+ } else {
2336
+ setHasPrfError(false);
2278
2337
  }
2279
2338
  }, [enrollmentError, onError, t]);
2280
2339
  const handleEnroll = async () => {
@@ -2283,6 +2342,7 @@ function PasskeyEnrollView({
2283
2342
  "User ID is required for passkey enrollment"
2284
2343
  );
2285
2344
  setErrorMessage(getUserFriendlyError(error, t));
2345
+ setHasPrfError(false);
2286
2346
  if (onError) {
2287
2347
  onError(error);
2288
2348
  }
@@ -2290,25 +2350,15 @@ function PasskeyEnrollView({
2290
2350
  }
2291
2351
  try {
2292
2352
  setErrorMessage(null);
2353
+ setHasPrfError(false);
2293
2354
  await enroll();
2294
2355
  setHasStarted(false);
2356
+ setHasPrfError(false);
2295
2357
  onComplete();
2296
2358
  } catch (error) {
2297
2359
  setHasStarted(false);
2298
2360
  }
2299
2361
  };
2300
- const handleLogout = async () => {
2301
- try {
2302
- await logout();
2303
- if (onLogout) {
2304
- onLogout();
2305
- }
2306
- } catch (error) {
2307
- if (onError) {
2308
- onError(error instanceof Error ? error : new Error("Logout failed"));
2309
- }
2310
- }
2311
- };
2312
2362
  const getStepMessage = () => {
2313
2363
  switch (step) {
2314
2364
  case "creating":
@@ -2323,16 +2373,16 @@ function PasskeyEnrollView({
2323
2373
  return "";
2324
2374
  }
2325
2375
  };
2326
- const getProgress = () => {
2376
+ const getCurrentStepIndex = () => {
2327
2377
  switch (step) {
2328
2378
  case "creating":
2329
- return 25;
2379
+ return 0;
2380
+ // Step 1: Creating passkey
2330
2381
  case "encrypting":
2331
- return 50;
2332
2382
  case "uploading":
2333
- return 75;
2334
2383
  case "registering":
2335
- return 90;
2384
+ return 1;
2385
+ // Step 2: Encrypting/Uploading/Registering
2336
2386
  default:
2337
2387
  return 0;
2338
2388
  }
@@ -2356,14 +2406,13 @@ function PasskeyEnrollView({
2356
2406
  const compatibilityContent = /* @__PURE__ */ jsx(
2357
2407
  PasskeyCompatibilityScreen,
2358
2408
  {
2359
- compatibility,
2360
- onLogout: handleLogout
2409
+ compatibility
2361
2410
  }
2362
2411
  );
2363
2412
  if (!wrapInModal) {
2364
2413
  return compatibilityContent;
2365
2414
  }
2366
- return /* @__PURE__ */ jsx(Modal, { open: isOpen, onOpenChange: (open) => !open && onLogout?.(), children: compatibilityContent });
2415
+ return /* @__PURE__ */ jsx(Modal, { open: isOpen, onOpenChange: (open) => !open && onClose?.(), children: compatibilityContent });
2367
2416
  }
2368
2417
  if (migrationInfo.needsMigration && migrationInfo.sourcePasskey) {
2369
2418
  const handleMigration = async () => {
@@ -2380,8 +2429,8 @@ function PasskeyEnrollView({
2380
2429
  sourcePasskey: migrationInfo.sourcePasskey,
2381
2430
  currentDomain,
2382
2431
  onMigrate: handleMigration,
2383
- onSkip: handleLogout,
2384
2432
  onError,
2433
+ onComplete,
2385
2434
  isOpen,
2386
2435
  wrapInModal
2387
2436
  }
@@ -2427,11 +2476,9 @@ function PasskeyEnrollView({
2427
2476
  setHasStarted(true);
2428
2477
  handleEnroll();
2429
2478
  },
2430
- onLogout: handleLogout,
2431
2479
  buttonText: t("passkey.start"),
2432
- hintMessage: t(platformHint.hintKey),
2433
- hintNote: t(platformHint.noteKey),
2434
- logoutText: t("passkey.logout")
2480
+ hintMessage: hasPrfError && platformHint.hintKey ? t(platformHint.hintKey) : void 0,
2481
+ hintNote: hasPrfError && platformHint.noteKey ? t(platformHint.noteKey) : void 0
2435
2482
  }
2436
2483
  ) : /* @__PURE__ */ jsx(
2437
2484
  PasskeyEnrollLoading,
@@ -2440,18 +2487,16 @@ function PasskeyEnrollView({
2440
2487
  stepMessage: getStepMessage(),
2441
2488
  isEnrolling,
2442
2489
  accentColor,
2443
- progress: getProgress(),
2490
+ currentStepIndex: getCurrentStepIndex(),
2444
2491
  onRetry: handleEnroll,
2445
- onLogout: handleLogout,
2446
- buttonText: t("passkey.start"),
2447
- logoutText: t("passkey.logout")
2492
+ buttonText: t("passkey.start")
2448
2493
  }
2449
2494
  )
2450
2495
  ] });
2451
2496
  if (!wrapInModal) {
2452
2497
  return content;
2453
2498
  }
2454
- return /* @__PURE__ */ jsx(Modal, { open: isOpen, onOpenChange: (open) => !open && onLogout?.(), children: content });
2499
+ return /* @__PURE__ */ jsx(Modal, { open: isOpen, onOpenChange: (open) => !open && onClose?.(), children: content });
2455
2500
  }
2456
2501
  var STEP_PROGRESS = {
2457
2502
  ready: 0,
@@ -3522,7 +3567,7 @@ function SigninModal({ isOpen, onClose, onError }) {
3522
3567
  onClose();
3523
3568
  return;
3524
3569
  }
3525
- setCurrentScreen("passkey-setup");
3570
+ onClose();
3526
3571
  };
3527
3572
  const handleSiweSuccess = async (data) => {
3528
3573
  if (data.keyStorageType) {
@@ -3544,7 +3589,7 @@ function SigninModal({ isOpen, onClose, onError }) {
3544
3589
  onClose();
3545
3590
  return;
3546
3591
  }
3547
- setCurrentScreen("passkey-setup");
3592
+ onClose();
3548
3593
  };
3549
3594
  const handlePasskeyComplete = () => {
3550
3595
  onClose();
@@ -3554,18 +3599,6 @@ function SigninModal({ isOpen, onClose, onError }) {
3554
3599
  onError(error);
3555
3600
  }
3556
3601
  };
3557
- const handleLogout = async () => {
3558
- try {
3559
- await logout();
3560
- setCurrentScreen("method-select");
3561
- setEmail("");
3562
- onClose();
3563
- } catch (error) {
3564
- if (onError) {
3565
- onError(error instanceof Error ? error : new Error("Logout failed"));
3566
- }
3567
- }
3568
- };
3569
3602
  const handleBackdropClick = (_e) => {
3570
3603
  if (currentScreen !== "passkey-setup" || hasPasskey) {
3571
3604
  setCurrentScreen("method-select");
@@ -3629,7 +3662,6 @@ function SigninModal({ isOpen, onClose, onError }) {
3629
3662
  wrapInModal: false,
3630
3663
  onComplete: handlePasskeyComplete,
3631
3664
  onError: handlePasskeyError,
3632
- onLogout: handleLogout,
3633
3665
  onClose
3634
3666
  },
3635
3667
  "passkey-setup"
@@ -3718,7 +3750,7 @@ function AssetSelectView({
3718
3750
  }) })
3719
3751
  ] });
3720
3752
  }
3721
- var TextLinkButton = React13.forwardRef(({ showArrow = false, className, children, ...props }, ref) => {
3753
+ var TextLinkButton = React14.forwardRef(({ showArrow = false, className, children, ...props }, ref) => {
3722
3754
  return /* @__PURE__ */ jsxs(
3723
3755
  "button",
3724
3756
  {
@@ -4782,63 +4814,53 @@ function DepositModalBody({
4782
4814
  }
4783
4815
  );
4784
4816
  }
4785
- function ChevronRightIcon({ className }) {
4786
- return /* @__PURE__ */ jsx(
4787
- "svg",
4817
+ function DepositIcon() {
4818
+ return /* @__PURE__ */ jsx("svg", { className: "volr:w-5 volr:h-5 volr:text-slate-800", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx(
4819
+ "path",
4788
4820
  {
4789
- xmlns: "http://www.w3.org/2000/svg",
4790
- viewBox: "0 0 20 20",
4791
- fill: "currentColor",
4792
- className,
4793
- children: /* @__PURE__ */ jsx(
4794
- "path",
4795
- {
4796
- fillRule: "evenodd",
4797
- d: "M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z",
4798
- clipRule: "evenodd"
4799
- }
4800
- )
4821
+ d: "M12 4V20M12 20L6 14M12 20L18 14",
4822
+ stroke: "currentColor",
4823
+ strokeWidth: "2.5",
4824
+ strokeLinecap: "round",
4825
+ strokeLinejoin: "round"
4801
4826
  }
4802
- );
4803
- }
4804
- function WalletIcon2({ className }) {
4805
- return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 12a2.25 2.25 0 00-2.25-2.25H15a3 3 0 11-6 0H5.25A2.25 2.25 0 003 12m18 0v6a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 18v-6m18 0V9M3 12V9m18 0a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 9m18 0V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v3" }) });
4806
- }
4807
- function ArrowDownIcon({ className }) {
4808
- return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 13.5L12 21m0 0l-7.5-7.5M12 21V3" }) });
4827
+ ) });
4809
4828
  }
4810
- function ArrowUpIcon({ className }) {
4811
- return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.5 10.5L12 3m0 0l7.5 7.5M12 3v18" }) });
4829
+ function WithdrawIcon() {
4830
+ return /* @__PURE__ */ jsx("svg", { className: "volr:w-5 volr:h-5 volr:text-slate-800", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx(
4831
+ "path",
4832
+ {
4833
+ d: "M12 20V4M12 4L6 10M12 4L18 10",
4834
+ stroke: "currentColor",
4835
+ strokeWidth: "2.5",
4836
+ strokeLinecap: "round",
4837
+ strokeLinejoin: "round"
4838
+ }
4839
+ ) });
4812
4840
  }
4813
- function ClockIcon({ className }) {
4814
- return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z" }) });
4841
+ function WalletIcon2({ className }) {
4842
+ return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 12a2.25 2.25 0 00-2.25-2.25H15a3 3 0 11-6 0H5.25A2.25 2.25 0 003 12m18 0v6a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 18v-6m18 0V9M3 12V9m18 0a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 9m18 0V6a2.25 2.25 0 00-2.25-2.25H5.25A2.25 2.25 0 003 6v3" }) });
4815
4843
  }
4816
4844
  function UserIcon({ className }) {
4817
- return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z" }) });
4845
+ return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z" }) });
4818
4846
  }
4819
- function MenuItem({ icon, label, description, onClick, isFirst, isLast }) {
4847
+ function QuickAction({ icon, label, onClick }) {
4820
4848
  return /* @__PURE__ */ jsxs(
4821
4849
  "button",
4822
4850
  {
4823
4851
  type: "button",
4824
4852
  onClick,
4825
- className: `volr:w-full volr:flex volr:items-center volr:gap-3 volr:py-2.5 volr:px-3 volr:bg-white hover:volr:bg-slate-50 volr:transition-colors volr:text-left volr:border-x volr:border-slate-200 ${isFirst ? "volr:border-t volr:rounded-t-xl" : ""} ${isLast ? "volr:border-b volr:rounded-b-xl" : "volr:border-b"}`,
4853
+ className: "volr:flex volr:flex-col volr:items-center volr:gap-3 volr:flex-1 volr:rounded-xl volr:border volr:border-slate-200 volr:bg-white volr:px-3 volr:py-4 volr:text-center hover:volr:border-slate-300 hover:volr:bg-slate-50 hover:volr:shadow-sm active:volr:bg-slate-100 active:volr:scale-[0.98] volr:transition-all volr:duration-200",
4826
4854
  children: [
4827
- /* @__PURE__ */ jsx("div", { className: "volr:w-8 volr:h-8 volr:rounded-full volr:bg-slate-100 volr:flex volr:items-center volr:justify-center volr:shrink-0", children: icon }),
4828
- /* @__PURE__ */ jsxs("div", { className: "volr:flex-1 volr:min-w-0", children: [
4829
- /* @__PURE__ */ jsx("span", { className: "volr:text-sm volr:font-medium volr:text-slate-900", children: label }),
4830
- description && /* @__PURE__ */ jsx("p", { className: "volr:text-xs volr:text-slate-400", children: description })
4831
- ] }),
4832
- /* @__PURE__ */ jsx(ChevronRightIcon, { className: "volr:w-4 volr:h-4 volr:text-slate-300" })
4855
+ /* @__PURE__ */ jsx("div", { className: "volr:w-12 volr:h-12 volr:rounded-full volr:bg-slate-100 volr:border volr:border-slate-200 volr:flex volr:items-center volr:justify-center volr:shadow-sm", children: icon }),
4856
+ /* @__PURE__ */ jsx("span", { className: "volr:text-xs volr:font-medium volr:text-slate-900", children: label })
4833
4857
  ]
4834
4858
  }
4835
4859
  );
4836
4860
  }
4837
4861
  function AccountMainView({
4838
4862
  totalUsd,
4839
- balances,
4840
4863
  isLoading,
4841
- paymentEnabled,
4842
4864
  onNavigate,
4843
4865
  onLogout,
4844
4866
  isLoggingOut
@@ -4850,67 +4872,63 @@ function AccountMainView({
4850
4872
  minimumFractionDigits: 2,
4851
4873
  maximumFractionDigits: 2
4852
4874
  });
4853
- const tokensWithBalance = balances.filter((b) => b.balanceRaw > 0n).length;
4854
- const assetsDescription = isLoading ? void 0 : tokensWithBalance > 0 ? `${tokensWithBalance} ${tokensWithBalance === 1 ? "token" : "tokens"}` : void 0;
4855
- const menuItems = [
4856
- {
4857
- key: "assets",
4858
- icon: /* @__PURE__ */ jsx(WalletIcon2, { className: "volr:w-4 volr:h-4 volr:text-slate-600" }),
4859
- label: t("account.menu.assets"),
4860
- description: assetsDescription,
4861
- view: "assets"
4862
- },
4863
- {
4864
- key: "deposit",
4865
- icon: /* @__PURE__ */ jsx(ArrowDownIcon, { className: "volr:w-4 volr:h-4 volr:text-slate-600" }),
4866
- label: t("account.menu.deposit"),
4867
- view: "deposit"
4868
- },
4869
- {
4870
- key: "withdraw",
4871
- icon: /* @__PURE__ */ jsx(ArrowUpIcon, { className: "volr:w-4 volr:h-4 volr:text-slate-600" }),
4872
- label: t("account.menu.withdraw"),
4873
- view: "withdraw"
4874
- },
4875
- ...paymentEnabled ? [
4876
- {
4877
- key: "payments",
4878
- icon: /* @__PURE__ */ jsx(ClockIcon, { className: "volr:w-4 volr:h-4 volr:text-slate-600" }),
4879
- label: t("account.menu.payments"),
4880
- view: "payments"
4881
- }
4882
- ] : [],
4883
- {
4884
- key: "account",
4885
- icon: /* @__PURE__ */ jsx(UserIcon, { className: "volr:w-4 volr:h-4 volr:text-slate-600" }),
4886
- label: t("account.menu.account"),
4887
- view: "account"
4888
- }
4889
- ];
4890
- return /* @__PURE__ */ jsxs("div", { children: [
4891
- /* @__PURE__ */ jsxs("div", { className: "volr:rounded-xl volr:bg-gradient-to-br volr:from-slate-50 volr:to-slate-100 volr:p-4 volr:mb-4", children: [
4892
- /* @__PURE__ */ jsx("p", { className: "volr:text-xs volr:text-slate-500 volr:mb-0.5", children: t("account.totalBalance") }),
4893
- isLoading ? /* @__PURE__ */ jsx("div", { className: "volr:animate-pulse", children: /* @__PURE__ */ jsx("div", { className: "volr:h-8 volr:w-32 volr:bg-slate-200 volr:rounded" }) }) : /* @__PURE__ */ jsx("p", { className: "volr:text-2xl volr:font-semibold volr:text-slate-900", children: formattedUsd })
4875
+ return /* @__PURE__ */ jsxs("div", { className: "volr:px-5 volr:pt-5 volr:pb-6 volr:flex volr:flex-col", style: { gap: "1.5rem" }, children: [
4876
+ /* @__PURE__ */ jsxs("div", { className: "volr:rounded-2xl volr:border volr:border-slate-200 volr:bg-white volr:py-7 volr:shadow-sm", children: [
4877
+ /* @__PURE__ */ jsx("p", { className: "volr:text-xs volr:font-medium volr:uppercase volr:tracking-wider volr:text-slate-500 volr:mb-3 volr:text-center", children: t("account.totalBalance") }),
4878
+ isLoading ? /* @__PURE__ */ jsx("div", { className: "volr:animate-pulse volr:text-center volr:w-full", children: /* @__PURE__ */ jsx("div", { className: "volr:h-16 volr:w-48 volr:bg-slate-200 volr:rounded-lg" }) }) : /* @__PURE__ */ jsx(
4879
+ "p",
4880
+ {
4881
+ className: "volr:leading-none volr:font-semibold volr:text-slate-900 volr:tracking-tight volr:text-center",
4882
+ style: {
4883
+ fontSize: "3rem",
4884
+ lineHeight: "1",
4885
+ fontWeight: 600
4886
+ },
4887
+ children: formattedUsd
4888
+ }
4889
+ )
4894
4890
  ] }),
4895
- /* @__PURE__ */ jsx("div", { children: menuItems.map((item, index) => /* @__PURE__ */ jsx(
4896
- MenuItem,
4897
- {
4898
- icon: item.icon,
4899
- label: item.label,
4900
- description: item.description,
4901
- onClick: () => onNavigate(item.view),
4902
- isFirst: index === 0,
4903
- isLast: index === menuItems.length - 1
4904
- },
4905
- item.key
4906
- )) }),
4907
- /* @__PURE__ */ jsx("div", { className: "volr:mt-4 volr:pt-3", children: /* @__PURE__ */ jsx(
4891
+ /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:gap-2", children: [
4892
+ /* @__PURE__ */ jsx(
4893
+ QuickAction,
4894
+ {
4895
+ icon: /* @__PURE__ */ jsx(DepositIcon, {}),
4896
+ label: t("account.menu.deposit"),
4897
+ onClick: () => onNavigate("deposit")
4898
+ }
4899
+ ),
4900
+ /* @__PURE__ */ jsx(
4901
+ QuickAction,
4902
+ {
4903
+ icon: /* @__PURE__ */ jsx(WithdrawIcon, {}),
4904
+ label: t("account.menu.withdraw"),
4905
+ onClick: () => onNavigate("withdraw")
4906
+ }
4907
+ ),
4908
+ /* @__PURE__ */ jsx(
4909
+ QuickAction,
4910
+ {
4911
+ icon: /* @__PURE__ */ jsx(WalletIcon2, { className: "volr:w-5 volr:h-5 volr:text-slate-800" }),
4912
+ label: t("account.menu.assets"),
4913
+ onClick: () => onNavigate("assets")
4914
+ }
4915
+ ),
4916
+ /* @__PURE__ */ jsx(
4917
+ QuickAction,
4918
+ {
4919
+ icon: /* @__PURE__ */ jsx(UserIcon, { className: "volr:w-5 volr:h-5 volr:text-slate-800" }),
4920
+ label: t("account.menu.account"),
4921
+ onClick: () => onNavigate("account")
4922
+ }
4923
+ )
4924
+ ] }),
4925
+ /* @__PURE__ */ jsx("div", { className: "volr:pt-1", children: /* @__PURE__ */ jsx(
4908
4926
  "button",
4909
4927
  {
4910
4928
  type: "button",
4911
4929
  onClick: onLogout,
4912
4930
  disabled: isLoggingOut,
4913
- className: "volr:w-full volr:py-2 volr:text-sm volr:text-slate-400 volr:text-center hover:volr:text-slate-600 volr:transition-colors disabled:volr:opacity-50",
4931
+ className: "volr:w-full volr:rounded-lg volr:py-3 volr:text-sm volr:font-medium volr:text-slate-500 volr:text-center hover:volr:bg-slate-50 hover:volr:text-slate-700 volr:transition-colors volr:duration-200 disabled:volr:opacity-50",
4914
4932
  children: isLoggingOut ? t("common.loading") : t("account.logout")
4915
4933
  }
4916
4934
  ) })
@@ -4967,7 +4985,7 @@ function BalanceDetailView({
4967
4985
  /* @__PURE__ */ jsx("div", { children: balances.map((token) => /* @__PURE__ */ jsx(TokenRow, { token }, token.id)) })
4968
4986
  ] });
4969
4987
  }
4970
- var Input = React13.forwardRef(
4988
+ var Input = React14.forwardRef(
4971
4989
  ({ leftIcon, error, className, style, disabled, ...props }, ref) => {
4972
4990
  return /* @__PURE__ */ jsxs("div", { className: "volr:relative", children: [
4973
4991
  leftIcon && /* @__PURE__ */ jsx("div", { className: "volr:absolute volr:left-3 volr:top-1/2 volr:-translate-y-1/2 volr:pointer-events-none volr-text-muted", children: leftIcon }),
@@ -5226,6 +5244,25 @@ function WithdrawView({
5226
5244
  }
5227
5245
  return null;
5228
5246
  }
5247
+ function ChevronRightIcon({ className }) {
5248
+ return /* @__PURE__ */ jsx(
5249
+ "svg",
5250
+ {
5251
+ xmlns: "http://www.w3.org/2000/svg",
5252
+ viewBox: "0 0 20 20",
5253
+ fill: "currentColor",
5254
+ className,
5255
+ children: /* @__PURE__ */ jsx(
5256
+ "path",
5257
+ {
5258
+ fillRule: "evenodd",
5259
+ d: "M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z",
5260
+ clipRule: "evenodd"
5261
+ }
5262
+ )
5263
+ }
5264
+ );
5265
+ }
5229
5266
  function PaymentRow({ payment, onClick }) {
5230
5267
  const { t } = useI18n();
5231
5268
  const date = new Date(payment.createdAt);
@@ -5435,13 +5472,13 @@ function PaymentDetailView({ payment }) {
5435
5472
  ] });
5436
5473
  }
5437
5474
  function InfoRow({ label, value, copyable, mono }) {
5438
- return /* @__PURE__ */ jsxs("div", { className: "volr:py-3 volr:border-b volr:border-slate-100 last:volr:border-b-0", children: [
5439
- /* @__PURE__ */ jsx("p", { className: "volr:text-xs volr:text-slate-400 volr:mb-1", children: label }),
5440
- /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:items-center volr:justify-between volr:gap-2", children: [
5475
+ return /* @__PURE__ */ jsxs("div", { className: "volr:px-5 volr:py-4 volr:border-b volr:border-slate-200 last:volr:border-b-0", children: [
5476
+ /* @__PURE__ */ jsx("p", { className: "volr:text-xs volr:font-medium volr:text-slate-500 volr:mb-2", children: label }),
5477
+ /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:items-center volr:justify-between", style: { gap: "0.5rem" }, children: [
5441
5478
  /* @__PURE__ */ jsx(
5442
5479
  "p",
5443
5480
  {
5444
- className: `volr:text-sm volr:text-slate-900 volr:break-all ${mono ? "volr:font-mono" : ""}`,
5481
+ className: `volr:text-sm volr:font-medium volr:text-slate-900 volr:break-all volr:flex-1 ${mono ? "volr:font-mono" : ""}`,
5445
5482
  children: value
5446
5483
  }
5447
5484
  ),
@@ -5471,36 +5508,49 @@ function AccountInfoView({ user }) {
5471
5508
  return `${address.slice(0, 6)}...${address.slice(-4)}`;
5472
5509
  };
5473
5510
  const externalWallet = user.authWallet ? user.authWallet.split(":")[1] || user.authWallet : null;
5474
- return /* @__PURE__ */ jsxs("div", { children: [
5475
- /* @__PURE__ */ jsx("h2", { className: "volr:text-lg volr:font-semibold volr:text-slate-900 volr:mb-4", children: t("account.menu.account") }),
5476
- /* @__PURE__ */ jsxs("div", { children: [
5477
- /* @__PURE__ */ jsx(InfoRow, { label: t("account.info.loginMethod.label"), value: getLoginMethod() }),
5478
- user.email && !user.email.includes("@wallet.") && /* @__PURE__ */ jsx(InfoRow, { label: t("account.email"), value: user.email }),
5479
- user.evmAddress && /* @__PURE__ */ jsx(
5480
- InfoRow,
5481
- {
5482
- label: t("account.walletAddress"),
5483
- value: formatAddress(user.evmAddress),
5484
- copyable: true,
5485
- mono: true
5486
- }
5487
- ),
5488
- externalWallet && /* @__PURE__ */ jsx(
5489
- InfoRow,
5490
- {
5491
- label: t("account.info.connectedWallet"),
5492
- value: formatAddress(externalWallet),
5493
- copyable: true,
5494
- mono: true
5495
- }
5496
- ),
5497
- user.signerType && /* @__PURE__ */ jsx(
5498
- InfoRow,
5499
- {
5500
- label: t("account.info.signerType"),
5501
- value: user.signerType === "passkey" ? "Passkey" : user.signerType
5502
- }
5503
- )
5511
+ return /* @__PURE__ */ jsx("div", { className: "volr:px-5 volr:pt-5 volr:pb-6", children: /* @__PURE__ */ jsxs("div", { className: "volr:rounded-xl volr:border volr:border-slate-200 volr:bg-white volr:overflow-hidden volr:shadow-sm", children: [
5512
+ /* @__PURE__ */ jsx(InfoRow, { label: t("account.info.loginMethod.label"), value: getLoginMethod() }),
5513
+ user.email && !user.email.includes("@wallet.") && /* @__PURE__ */ jsx(InfoRow, { label: t("account.email"), value: user.email }),
5514
+ user.evmAddress && /* @__PURE__ */ jsx(
5515
+ InfoRow,
5516
+ {
5517
+ label: t("account.walletAddress"),
5518
+ value: formatAddress(user.evmAddress),
5519
+ copyable: true,
5520
+ mono: true
5521
+ }
5522
+ ),
5523
+ externalWallet && /* @__PURE__ */ jsx(
5524
+ InfoRow,
5525
+ {
5526
+ label: t("account.info.connectedWallet"),
5527
+ value: formatAddress(externalWallet),
5528
+ copyable: true,
5529
+ mono: true
5530
+ }
5531
+ ),
5532
+ user.signerType && /* @__PURE__ */ jsx(
5533
+ InfoRow,
5534
+ {
5535
+ label: t("account.info.signerType"),
5536
+ value: user.signerType === "passkey" ? "Passkey" : user.signerType
5537
+ }
5538
+ )
5539
+ ] }) });
5540
+ }
5541
+ function AccountSetupView({
5542
+ onCreateAccount,
5543
+ onLogout
5544
+ }) {
5545
+ const { t } = useI18n();
5546
+ return /* @__PURE__ */ jsxs("div", { className: "volr:space-y-5", children: [
5547
+ /* @__PURE__ */ jsxs("div", { className: "volr:space-y-2", children: [
5548
+ /* @__PURE__ */ jsx("p", { className: "volr:text-xl volr:font-semibold volr:text-slate-900", children: t("account.setup.title") }),
5549
+ /* @__PURE__ */ jsx("p", { className: "volr:text-sm volr:text-slate-600 volr:leading-relaxed", children: t("account.setup.description") })
5550
+ ] }),
5551
+ /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:flex-col volr:gap-2", children: [
5552
+ /* @__PURE__ */ jsx(Button, { className: "volr:w-full", onClick: onCreateAccount, children: t("account.setup.cta") }),
5553
+ /* @__PURE__ */ jsx(Button, { className: "volr:w-full", variant: "secondary", onClick: onLogout, children: t("account.setup.logout") })
5504
5554
  ] })
5505
5555
  ] });
5506
5556
  }
@@ -5513,6 +5563,7 @@ function AccountModal({ isOpen, onClose, onError }) {
5513
5563
  const [isLoggingOut, setIsLoggingOut] = useState(false);
5514
5564
  const prevUserRef = useRef(user ?? null);
5515
5565
  const [closingAfterLogin, setClosingAfterLogin] = useState(false);
5566
+ const [setupStep, setSetupStep] = useState("prompt");
5516
5567
  const [depositAssets, setDepositAssets] = useState([]);
5517
5568
  const [depositLoading, setDepositLoading] = useState(false);
5518
5569
  const [depositError, setDepositError] = useState(null);
@@ -5540,6 +5591,7 @@ function AccountModal({ isOpen, onClose, onError }) {
5540
5591
  setTimeout(() => {
5541
5592
  setCurrentView("main");
5542
5593
  setSelectedPayment(null);
5594
+ setSetupStep("prompt");
5543
5595
  }, 200);
5544
5596
  }
5545
5597
  }, [onClose]);
@@ -5570,32 +5622,44 @@ function AccountModal({ isOpen, onClose, onError }) {
5570
5622
  return /* @__PURE__ */ jsx(SigninModal, { isOpen, onClose, onError });
5571
5623
  }
5572
5624
  if (!user.keyStorageType) {
5573
- const handlePasskeyComplete = () => {
5574
- onClose();
5575
- };
5576
- const handlePasskeyError = (error) => {
5577
- if (onError) onError(error);
5578
- };
5579
- const handleLogoutFromPasskey = async () => {
5580
- try {
5581
- await logout();
5582
- onClose();
5583
- } catch (error) {
5584
- if (onError) {
5585
- onError(error instanceof Error ? error : new Error("Logout failed"));
5625
+ return /* @__PURE__ */ jsxs(Modal, { open: isOpen, onOpenChange: handleOpenChange, children: [
5626
+ /* @__PURE__ */ jsx(
5627
+ ModalHeader,
5628
+ {
5629
+ back: setupStep === "enroll",
5630
+ onBack: setupStep === "enroll" ? () => setSetupStep("prompt") : void 0,
5631
+ onClose
5586
5632
  }
5587
- }
5588
- };
5589
- return /* @__PURE__ */ jsx(Modal, { open: isOpen, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsx(
5590
- PasskeyEnrollView,
5591
- {
5592
- wrapInModal: false,
5593
- onComplete: handlePasskeyComplete,
5594
- onError: handlePasskeyError,
5595
- onLogout: handleLogoutFromPasskey,
5596
- onClose
5597
- }
5598
- ) });
5633
+ ),
5634
+ setupStep === "prompt" ? /* @__PURE__ */ jsx(
5635
+ AccountSetupView,
5636
+ {
5637
+ onCreateAccount: () => setSetupStep("enroll"),
5638
+ onLogout: async () => {
5639
+ try {
5640
+ await logout();
5641
+ onClose();
5642
+ } catch (error) {
5643
+ if (onError) {
5644
+ onError(error instanceof Error ? error : new Error("Logout failed"));
5645
+ }
5646
+ }
5647
+ }
5648
+ }
5649
+ ) : /* @__PURE__ */ jsx(
5650
+ PasskeyEnrollView,
5651
+ {
5652
+ wrapInModal: false,
5653
+ onComplete: () => {
5654
+ setSetupStep("prompt");
5655
+ },
5656
+ onError: (error) => {
5657
+ if (onError) onError(error);
5658
+ },
5659
+ onClose: () => setSetupStep("prompt")
5660
+ }
5661
+ )
5662
+ ] });
5599
5663
  }
5600
5664
  const handleLogout = async () => {
5601
5665
  setIsLoggingOut(true);
@@ -5642,9 +5706,7 @@ function AccountModal({ isOpen, onClose, onError }) {
5642
5706
  AccountMainView,
5643
5707
  {
5644
5708
  totalUsd,
5645
- balances,
5646
5709
  isLoading,
5647
- paymentEnabled,
5648
5710
  onNavigate: handleNavigate,
5649
5711
  onLogout: handleLogout,
5650
5712
  isLoggingOut
@@ -5768,6 +5830,7 @@ var DepositModal = ({
5768
5830
  var initialState = {
5769
5831
  step: "info",
5770
5832
  processingStep: "signing",
5833
+ walletStep: "choice",
5771
5834
  isConfigLoading: true,
5772
5835
  isPaying: false,
5773
5836
  payOptions: null,
@@ -5792,6 +5855,20 @@ function paymentModalReducer(state, action) {
5792
5855
  payOptions: action.options,
5793
5856
  isConfigLoading: true
5794
5857
  };
5858
+ case "SHOW_WALLET":
5859
+ return {
5860
+ ...state,
5861
+ step: "wallet",
5862
+ walletStep: action.walletStep,
5863
+ error: void 0
5864
+ };
5865
+ case "BACK_TO_PAYMENT":
5866
+ return {
5867
+ ...state,
5868
+ step: "info",
5869
+ walletStep: "choice",
5870
+ error: void 0
5871
+ };
5795
5872
  case "SET_TOKENS": {
5796
5873
  const balances = /* @__PURE__ */ new Map();
5797
5874
  for (const token of action.tokens) {
@@ -6003,9 +6080,36 @@ function usePaymentModalState(open, onOpenChange) {
6003
6080
  const handleSelectToken = useCallback((tokenId) => {
6004
6081
  dispatch({ type: "SELECT_TOKEN", tokenId });
6005
6082
  }, []);
6083
+ const handleWalletBack = useCallback(() => {
6084
+ if (state.step !== "wallet") {
6085
+ return;
6086
+ }
6087
+ if (state.walletStep === "choice") {
6088
+ dispatch({ type: "BACK_TO_PAYMENT" });
6089
+ return;
6090
+ }
6091
+ dispatch({ type: "SHOW_WALLET", walletStep: "choice" });
6092
+ }, [state.step, state.walletStep]);
6093
+ const handleChooseCreateAccount = useCallback(() => {
6094
+ dispatch({ type: "SHOW_WALLET", walletStep: "create-account" });
6095
+ }, []);
6096
+ const handleChooseExternalWallet = useCallback(() => {
6097
+ dispatch({ type: "SHOW_WALLET", walletStep: "external-wallet" });
6098
+ }, []);
6006
6099
  const handlePay = useCallback(async () => {
6007
6100
  const { payOptions, receiverAddress, selectedTokenId } = state;
6008
- if (!payOptions || !user?.evmAddress || !paymentOptions || !receiverAddress || !selectedTokenId) {
6101
+ if (!payOptions || !paymentOptions || !receiverAddress || !selectedTokenId) {
6102
+ return;
6103
+ }
6104
+ if (!user) {
6105
+ dispatch({
6106
+ type: "PAYMENT_ERROR",
6107
+ error: { code: "AUTH_REQUIRED", message: "Please sign in to continue." }
6108
+ });
6109
+ return;
6110
+ }
6111
+ if (!user.evmAddress) {
6112
+ dispatch({ type: "SHOW_WALLET", walletStep: "choice" });
6009
6113
  return;
6010
6114
  }
6011
6115
  const tokenInfo = state.tokens.find((t) => t.id === selectedTokenId);
@@ -6021,6 +6125,15 @@ function usePaymentModalState(open, onOpenChange) {
6021
6125
  });
6022
6126
  createdPaymentId = payment.id;
6023
6127
  dispatch({ type: "SET_CREATED_PAYMENT", payment });
6128
+ if (payment.status !== "PENDING") {
6129
+ const alreadyProcessedError = new Error(
6130
+ payment.status === "CONFIRMED" ? "This payment has already been completed. If you used an idempotencyKey, the original payment was already processed." : `Payment already processed with status: ${payment.status}. If you used an idempotencyKey, the original payment was already processed.`
6131
+ );
6132
+ alreadyProcessedError.code = "PAYMENT_ALREADY_PROCESSED";
6133
+ alreadyProcessedError.paymentStatus = payment.status;
6134
+ alreadyProcessedError.payment = payment;
6135
+ throw alreadyProcessedError;
6136
+ }
6024
6137
  paymentOptions.options.handlers?.onCreated?.({ id: payment.id });
6025
6138
  const evmClient = evm.client(tokenInfo.chainId);
6026
6139
  dispatch({ type: "SET_PROCESSING_STEP", step: "broadcasting" });
@@ -6066,13 +6179,28 @@ function usePaymentModalState(open, onOpenChange) {
6066
6179
  }
6067
6180
  } catch (err) {
6068
6181
  console.error("Payment failed:", err);
6069
- if (createdPaymentId) {
6182
+ const isAlreadyProcessed = err.code === "PAYMENT_ALREADY_PROCESSED";
6183
+ if (createdPaymentId && !isAlreadyProcessed) {
6070
6184
  try {
6071
6185
  await failPendingPayment(createdPaymentId);
6072
6186
  } catch (failErr) {
6073
6187
  console.error("Failed to mark payment as failed:", failErr);
6074
6188
  }
6075
6189
  }
6190
+ if (isAlreadyProcessed && err.payment) {
6191
+ dispatch({ type: "PAYMENT_SUCCESS", payment: err.payment });
6192
+ if (err.payment.status === "CONFIRMED") {
6193
+ paymentOptions?.onComplete?.(err.payment);
6194
+ } else {
6195
+ const paymentError2 = {
6196
+ code: err.code || "PAYMENT_ALREADY_PROCESSED",
6197
+ message: err.message || "Payment already processed."
6198
+ };
6199
+ dispatch({ type: "PAYMENT_ERROR", error: paymentError2 });
6200
+ paymentOptions?.onError?.(paymentError2);
6201
+ }
6202
+ return;
6203
+ }
6076
6204
  const paymentError = {
6077
6205
  code: err.code || "PAYMENT_FAILED",
6078
6206
  message: err.message || "Payment failed. Please try again."
@@ -6090,6 +6218,140 @@ function usePaymentModalState(open, onOpenChange) {
6090
6218
  pollPaymentStatus,
6091
6219
  failPendingPayment
6092
6220
  ]);
6221
+ const handleExternalWalletConnected = useCallback(
6222
+ async ({ provider, address }) => {
6223
+ const { payOptions, receiverAddress, selectedTokenId } = state;
6224
+ if (!payOptions || !paymentOptions || !receiverAddress || !selectedTokenId) {
6225
+ return;
6226
+ }
6227
+ const tokenInfo = state.tokens.find((t) => t.id === selectedTokenId);
6228
+ if (!tokenInfo) {
6229
+ return;
6230
+ }
6231
+ if (tokenInfo.address === "native") {
6232
+ dispatch({
6233
+ type: "PAYMENT_ERROR",
6234
+ error: {
6235
+ code: "TOKEN_NOT_SUPPORTED",
6236
+ message: "External wallet payment is not supported for native tokens."
6237
+ }
6238
+ });
6239
+ return;
6240
+ }
6241
+ dispatch({ type: "START_PAYMENT" });
6242
+ let createdPaymentId = null;
6243
+ const toPaymentError = (err) => {
6244
+ const backend = err?.response?.data?.error;
6245
+ if (backend?.code && backend?.message) {
6246
+ return { code: backend.code, message: backend.message };
6247
+ }
6248
+ if (typeof err?.code === "string" && typeof err?.message === "string") {
6249
+ return { code: err.code, message: err.message };
6250
+ }
6251
+ return { code: "PAYMENT_FAILED", message: "Payment failed. Please try again." };
6252
+ };
6253
+ try {
6254
+ const payment = await createPayment({
6255
+ ...payOptions,
6256
+ tokenId: selectedTokenId
6257
+ });
6258
+ createdPaymentId = payment.id;
6259
+ dispatch({ type: "SET_CREATED_PAYMENT", payment });
6260
+ if (payment.status !== "PENDING") {
6261
+ const alreadyProcessedError = new Error(
6262
+ payment.status === "CONFIRMED" ? "This payment has already been completed." : `Payment already processed with status: ${payment.status}.`
6263
+ );
6264
+ alreadyProcessedError.code = "PAYMENT_ALREADY_PROCESSED";
6265
+ alreadyProcessedError.payment = payment;
6266
+ throw alreadyProcessedError;
6267
+ }
6268
+ paymentOptions.options.handlers?.onCreated?.({ id: payment.id });
6269
+ const prepare = await client.post(`/payments/${payment.id}/external/permit/prepare`, {
6270
+ payer: address
6271
+ });
6272
+ const typedData = prepare.quote?.typedData;
6273
+ if (!typedData) {
6274
+ throw new Error("INVALID_TYPED_DATA");
6275
+ }
6276
+ try {
6277
+ const hexChainId = `0x${tokenInfo.chainId.toString(16)}`;
6278
+ await provider.request({
6279
+ method: "wallet_switchEthereumChain",
6280
+ params: [{ chainId: hexChainId }]
6281
+ });
6282
+ } catch {
6283
+ }
6284
+ let signature;
6285
+ try {
6286
+ signature = await provider.request({
6287
+ method: "eth_signTypedData_v4",
6288
+ params: [address, JSON.stringify(typedData)]
6289
+ });
6290
+ } catch {
6291
+ signature = await provider.request({
6292
+ method: "eth_signTypedData",
6293
+ params: [address, typedData]
6294
+ });
6295
+ }
6296
+ dispatch({ type: "SET_PROCESSING_STEP", step: "broadcasting" });
6297
+ const submit = await client.post(`/payments/${payment.id}/external/permit/submit`, {
6298
+ payer: address,
6299
+ signature,
6300
+ quote: prepare.quote,
6301
+ quoteSignature: prepare.quoteSignature
6302
+ });
6303
+ dispatch({ type: "SET_TX_HASH", txHash: submit.txHash ?? "" });
6304
+ dispatch({ type: "SET_PROCESSING_STEP", step: "confirming" });
6305
+ paymentOptions.onProcessing?.({
6306
+ ...submit.payment,
6307
+ txHash: submit.txHash ?? submit.payment.txHash ?? "",
6308
+ status: "PROCESSING"
6309
+ });
6310
+ const confirmedPayment = await pollPaymentStatus(payment.id);
6311
+ dispatch({ type: "PAYMENT_SUCCESS", payment: confirmedPayment });
6312
+ if (confirmedPayment.status === "CONFIRMED") {
6313
+ paymentOptions.onComplete?.(confirmedPayment);
6314
+ } else if (confirmedPayment.status === "FAILED") {
6315
+ const failError = {
6316
+ code: "PAYMENT_FAILED",
6317
+ message: "Transaction failed on-chain"
6318
+ };
6319
+ dispatch({ type: "PAYMENT_ERROR", error: failError });
6320
+ paymentOptions.onError?.(failError);
6321
+ }
6322
+ } catch (err) {
6323
+ const isAlreadyProcessed = err?.code === "PAYMENT_ALREADY_PROCESSED";
6324
+ if (createdPaymentId && !isAlreadyProcessed) {
6325
+ try {
6326
+ await failPendingPayment(createdPaymentId);
6327
+ } catch {
6328
+ }
6329
+ }
6330
+ if (isAlreadyProcessed && err.payment) {
6331
+ dispatch({ type: "PAYMENT_SUCCESS", payment: err.payment });
6332
+ if (err.payment.status === "CONFIRMED") {
6333
+ paymentOptions?.onComplete?.(err.payment);
6334
+ } else {
6335
+ const paymentError2 = toPaymentError(err);
6336
+ dispatch({ type: "PAYMENT_ERROR", error: paymentError2 });
6337
+ paymentOptions?.onError?.(paymentError2);
6338
+ }
6339
+ return;
6340
+ }
6341
+ const paymentError = toPaymentError(err);
6342
+ dispatch({ type: "PAYMENT_ERROR", error: paymentError });
6343
+ paymentOptions?.onError?.(paymentError);
6344
+ }
6345
+ },
6346
+ [
6347
+ state,
6348
+ paymentOptions,
6349
+ client,
6350
+ createPayment,
6351
+ pollPaymentStatus,
6352
+ failPendingPayment
6353
+ ]
6354
+ );
6093
6355
  const handleDeposit = useCallback(() => {
6094
6356
  dispatch({ type: "SHOW_DEPOSIT" });
6095
6357
  }, []);
@@ -6120,7 +6382,7 @@ function usePaymentModalState(open, onOpenChange) {
6120
6382
  if (state.step === "processing") {
6121
6383
  return;
6122
6384
  }
6123
- if (state.step === "info") {
6385
+ if (state.step === "info" || state.step === "wallet") {
6124
6386
  paymentOptions?.onCancel?.();
6125
6387
  }
6126
6388
  onOpenChange(false);
@@ -6164,6 +6426,10 @@ Please contact support with this information.`
6164
6426
  isBalanceLoading,
6165
6427
  handleSelectToken,
6166
6428
  handlePay,
6429
+ handleWalletBack,
6430
+ handleChooseCreateAccount,
6431
+ handleChooseExternalWallet,
6432
+ handleExternalWalletConnected,
6167
6433
  handleDeposit,
6168
6434
  handleDepositClose,
6169
6435
  handleDone,
@@ -6436,7 +6702,8 @@ var PaymentInfoView = ({
6436
6702
  onPay,
6437
6703
  onDeposit,
6438
6704
  isPaying,
6439
- isBalanceLoading
6705
+ isBalanceLoading,
6706
+ disableBalanceCheck = false
6440
6707
  }) => {
6441
6708
  const selectedToken = tokens.find((t) => t.id === selectedTokenId);
6442
6709
  const tokenSymbol = selectedToken?.symbol ?? "";
@@ -6447,7 +6714,7 @@ var PaymentInfoView = ({
6447
6714
  maximumFractionDigits: tokenDecimals > 6 ? 6 : tokenDecimals
6448
6715
  });
6449
6716
  const balanceNum = parseFloat(balance.replace(/,/g, "") || "0");
6450
- const isInsufficient = !isBalanceLoading && selectedToken && balanceNum < amount;
6717
+ const isInsufficient = !disableBalanceCheck && !isBalanceLoading && selectedToken && balanceNum < amount;
6451
6718
  return /* @__PURE__ */ jsxs("div", { className: "volr:space-y-6", children: [
6452
6719
  itemName && /* @__PURE__ */ jsxs(Fragment, { children: [
6453
6720
  /* @__PURE__ */ jsx(
@@ -6480,7 +6747,7 @@ var PaymentInfoView = ({
6480
6747
  }
6481
6748
  )
6482
6749
  ] }),
6483
- selectedToken && /* @__PURE__ */ jsx(Fragment, { children: isBalanceLoading || selectedToken.isBalanceLoading ? /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:justify-between volr:items-center volr:p-3 volr:bg-slate-50 volr:rounded-lg volr:animate-pulse", children: [
6750
+ selectedToken && !disableBalanceCheck && /* @__PURE__ */ jsx(Fragment, { children: isBalanceLoading || selectedToken.isBalanceLoading ? /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:justify-between volr:items-center volr:p-3 volr:bg-slate-50 volr:rounded-lg volr:animate-pulse", children: [
6484
6751
  /* @__PURE__ */ jsx("span", { className: "volr:text-sm volr:text-slate-400", children: "Loading balance..." }),
6485
6752
  /* @__PURE__ */ jsx("div", { className: "volr:h-4 volr:bg-slate-200 volr:rounded volr:w-20" })
6486
6753
  ] }) : /* @__PURE__ */ jsx(
@@ -6497,7 +6764,7 @@ var PaymentInfoView = ({
6497
6764
  Button,
6498
6765
  {
6499
6766
  onClick: onPay,
6500
- disabled: isPaying || isBalanceLoading || !!isInsufficient || !selectedToken,
6767
+ disabled: isPaying || !disableBalanceCheck && (isBalanceLoading || !!isInsufficient) || !selectedToken,
6501
6768
  className: "volr:w-full",
6502
6769
  children: isPaying ? /* @__PURE__ */ jsxs("span", { className: "volr:flex volr:items-center volr:justify-center volr:gap-2", children: [
6503
6770
  /* @__PURE__ */ jsxs("svg", { className: "volr:animate-spin volr:h-4 volr:w-4", viewBox: "0 0 24 24", children: [
@@ -6526,7 +6793,7 @@ var PaymentInfoView = ({
6526
6793
  ] }) : isInsufficient ? "Insufficient Balance" : !selectedToken ? "Select a token" : `Pay ${formattedAmount} ${tokenSymbol}`
6527
6794
  }
6528
6795
  ),
6529
- isInsufficient && selectedToken && /* @__PURE__ */ jsxs(Button, { variant: "secondary", onClick: onDeposit, className: "volr:w-full", children: [
6796
+ isInsufficient && selectedToken && !disableBalanceCheck && /* @__PURE__ */ jsxs(Button, { variant: "secondary", onClick: onDeposit, className: "volr:w-full", children: [
6530
6797
  "Deposit ",
6531
6798
  tokenSymbol
6532
6799
  ] })
@@ -6601,14 +6868,7 @@ var PaymentProcessingView = ({
6601
6868
  /* @__PURE__ */ jsx("p", { className: "volr:text-lg volr:font-semibold volr:text-slate-900 volr:mb-1", children: getStatusMessage() }),
6602
6869
  /* @__PURE__ */ jsx("p", { className: "volr:text-sm volr:text-slate-500", children: t("payment.processing.doNotClose") })
6603
6870
  ] }),
6604
- /* @__PURE__ */ jsx("div", { className: "volr:flex volr:items-center volr:justify-center volr:gap-2", children: [0, 1, 2].map((stepIdx) => /* @__PURE__ */ jsx(
6605
- "div",
6606
- {
6607
- className: `volr:h-1.5 volr:rounded-full volr:transition-all volr:duration-300 ${stepIdx <= currentStep ? "volr:bg-slate-900 volr:w-8" : "volr:bg-slate-200 volr:w-6"}`,
6608
- style: stepIdx === currentStep ? { animation: "volrProgressPulse 1.5s ease-in-out infinite" } : void 0
6609
- },
6610
- stepIdx
6611
- )) }),
6871
+ /* @__PURE__ */ jsx(ProgressSteps, { totalSteps: 3, currentStep }),
6612
6872
  /* @__PURE__ */ jsx("style", { children: `
6613
6873
  @keyframes volrSpin {
6614
6874
  from { transform: rotate(0deg); }
@@ -6618,10 +6878,6 @@ var PaymentProcessingView = ({
6618
6878
  0%, 100% { transform: scale(1); opacity: 1; }
6619
6879
  50% { transform: scale(0.95); opacity: 0.85; }
6620
6880
  }
6621
- @keyframes volrProgressPulse {
6622
- 0%, 100% { opacity: 1; }
6623
- 50% { opacity: 0.6; }
6624
- }
6625
6881
  ` })
6626
6882
  ] });
6627
6883
  };
@@ -6728,10 +6984,144 @@ var PaymentResultView = ({
6728
6984
  isSuccess && /* @__PURE__ */ jsx(PoweredBy, {})
6729
6985
  ] });
6730
6986
  };
6987
+ function PaymentWalletChoiceView({
6988
+ isExternalWalletEnabled,
6989
+ externalWalletDisabledReason,
6990
+ onChooseExternalWallet,
6991
+ onChooseCreateAccount
6992
+ }) {
6993
+ const { t } = useI18n();
6994
+ return /* @__PURE__ */ jsxs("div", { className: "volr:space-y-5", children: [
6995
+ /* @__PURE__ */ jsxs("div", { className: "volr:space-y-2", children: [
6996
+ /* @__PURE__ */ jsx("p", { className: "volr:text-xl volr:font-semibold volr:text-slate-900", children: t("payment.walletChoice.title") }),
6997
+ /* @__PURE__ */ jsx("p", { className: "volr:text-sm volr:text-slate-600 volr:leading-relaxed", children: t("payment.walletChoice.description") })
6998
+ ] }),
6999
+ /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:flex-col volr:gap-2", children: [
7000
+ /* @__PURE__ */ jsx(
7001
+ Button,
7002
+ {
7003
+ className: "volr:w-full",
7004
+ variant: "secondary",
7005
+ onClick: onChooseExternalWallet,
7006
+ disabled: !isExternalWalletEnabled,
7007
+ children: t("payment.walletChoice.externalCta")
7008
+ }
7009
+ ),
7010
+ !isExternalWalletEnabled && externalWalletDisabledReason && /* @__PURE__ */ jsx("p", { className: "volr:text-xs volr:text-slate-500 volr:leading-relaxed", children: externalWalletDisabledReason }),
7011
+ /* @__PURE__ */ jsx(Button, { className: "volr:w-full", onClick: onChooseCreateAccount, children: t("payment.walletChoice.createAccountCta") })
7012
+ ] })
7013
+ ] });
7014
+ }
7015
+ var DefaultWalletIcon3 = () => /* @__PURE__ */ jsxs(
7016
+ "svg",
7017
+ {
7018
+ className: "volr:w-6 volr:h-6 volr:text-slate-600",
7019
+ viewBox: "0 0 24 24",
7020
+ fill: "none",
7021
+ xmlns: "http://www.w3.org/2000/svg",
7022
+ children: [
7023
+ /* @__PURE__ */ jsx(
7024
+ "rect",
7025
+ {
7026
+ x: "2",
7027
+ y: "6",
7028
+ width: "20",
7029
+ height: "14",
7030
+ rx: "2",
7031
+ stroke: "currentColor",
7032
+ strokeWidth: "1.5"
7033
+ }
7034
+ ),
7035
+ /* @__PURE__ */ jsx(
7036
+ "path",
7037
+ {
7038
+ d: "M17 12.5C17 13.3284 16.3284 14 15.5 14C14.6716 14 14 13.3284 14 12.5C14 11.6716 14.6716 11 15.5 11C16.3284 11 17 11.6716 17 12.5Z",
7039
+ fill: "currentColor"
7040
+ }
7041
+ ),
7042
+ /* @__PURE__ */ jsx(
7043
+ "path",
7044
+ {
7045
+ d: "M6 6V5C6 3.89543 6.89543 3 8 3H16C17.1046 3 18 3.89543 18 5V6",
7046
+ stroke: "currentColor",
7047
+ strokeWidth: "1.5"
7048
+ }
7049
+ )
7050
+ ]
7051
+ }
7052
+ );
7053
+ function PaymentExternalWalletView({
7054
+ onConnected,
7055
+ onCancel
7056
+ }) {
7057
+ const { t } = useI18n();
7058
+ const { isDetecting, getWalletsForDisplay, hasWallet } = useEIP6963();
7059
+ const wallets = useMemo(() => getWalletsForDisplay(), [getWalletsForDisplay]);
7060
+ const [isConnecting, setIsConnecting] = useState(false);
7061
+ const [error, setError] = useState(null);
7062
+ const connect = async (wallet) => {
7063
+ setIsConnecting(true);
7064
+ setError(null);
7065
+ try {
7066
+ const provider = wallet.provider;
7067
+ const accounts = await provider.request({ method: "eth_requestAccounts" });
7068
+ const address = accounts?.[0] || null;
7069
+ if (!address) {
7070
+ throw new Error("NO_ACCOUNTS");
7071
+ }
7072
+ await onConnected({ provider, address });
7073
+ } catch (err) {
7074
+ setError(
7075
+ err instanceof Error ? t("payment.walletChoice.externalConnectFailed") : t("payment.walletChoice.externalConnectFailed")
7076
+ );
7077
+ } finally {
7078
+ setIsConnecting(false);
7079
+ }
7080
+ };
7081
+ return /* @__PURE__ */ jsxs("div", { className: "volr:space-y-4", children: [
7082
+ /* @__PURE__ */ jsxs("div", { className: "volr:space-y-1", children: [
7083
+ /* @__PURE__ */ jsx("p", { className: "volr:text-xl volr:font-semibold volr:text-slate-900", children: t("payment.walletChoice.externalTitle") }),
7084
+ /* @__PURE__ */ jsx("p", { className: "volr:text-sm volr:text-slate-600", children: t("payment.walletChoice.externalDescription") })
7085
+ ] }),
7086
+ error && /* @__PURE__ */ jsx("div", { className: "volr:text-sm volr:text-red-600 volr:bg-red-50 volr:border volr:border-red-200 volr:rounded-lg volr:p-3", children: error }),
7087
+ isDetecting ? /* @__PURE__ */ jsx("p", { className: "volr:text-sm volr:text-slate-500", children: t("common.loading") }) : !hasWallet || wallets.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "volr:space-y-3", children: [
7088
+ /* @__PURE__ */ jsx("p", { className: "volr:text-sm volr:text-slate-600", children: t("payment.walletChoice.noWalletsDetected") }),
7089
+ /* @__PURE__ */ jsx(Button, { className: "volr:w-full", variant: "secondary", onClick: onCancel, children: t("common.back") })
7090
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "volr:space-y-2", children: [
7091
+ wallets.map((w) => /* @__PURE__ */ jsxs(
7092
+ "button",
7093
+ {
7094
+ type: "button",
7095
+ className: "volr:w-full volr:flex volr:items-center volr:justify-between volr:gap-3 volr:px-4 volr:py-3 volr:rounded-xl volr:border volr:border-slate-200 volr:hover:bg-slate-50",
7096
+ disabled: isConnecting,
7097
+ onClick: () => connect(w),
7098
+ children: [
7099
+ /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:items-center volr:gap-3", children: [
7100
+ w.icon ? /* @__PURE__ */ jsx(
7101
+ "img",
7102
+ {
7103
+ src: w.icon,
7104
+ alt: w.name,
7105
+ className: "volr:w-6 volr:h-6 volr:rounded"
7106
+ }
7107
+ ) : /* @__PURE__ */ jsx(DefaultWalletIcon3, {}),
7108
+ /* @__PURE__ */ jsx("span", { className: "volr:text-sm volr:font-medium volr:text-slate-900", children: w.name })
7109
+ ] }),
7110
+ /* @__PURE__ */ jsx("span", { className: "volr:text-xs volr:text-slate-500", children: isConnecting ? t("payment.walletChoice.connecting") : t("payment.walletChoice.connect") })
7111
+ ]
7112
+ },
7113
+ w.id
7114
+ )),
7115
+ /* @__PURE__ */ jsx(Button, { className: "volr:w-full", variant: "secondary", onClick: onCancel, children: t("common.back") })
7116
+ ] })
7117
+ ] });
7118
+ }
6731
7119
  var PaymentModal = ({
6732
7120
  open,
6733
7121
  onOpenChange
6734
7122
  }) => {
7123
+ const { t } = useI18n();
7124
+ const { user } = useVolrContext();
6735
7125
  const { paymentOptions } = useVolrModal();
6736
7126
  const {
6737
7127
  state,
@@ -6740,6 +7130,10 @@ var PaymentModal = ({
6740
7130
  isBalanceLoading,
6741
7131
  handleSelectToken,
6742
7132
  handlePay,
7133
+ handleWalletBack,
7134
+ handleChooseCreateAccount,
7135
+ handleChooseExternalWallet,
7136
+ handleExternalWalletConnected,
6743
7137
  handleDeposit,
6744
7138
  handleDepositClose,
6745
7139
  handleDone,
@@ -6760,7 +7154,8 @@ var PaymentModal = ({
6760
7154
  txHash,
6761
7155
  error,
6762
7156
  logoUrl,
6763
- showDeposit
7157
+ showDeposit,
7158
+ walletStep
6764
7159
  } = state;
6765
7160
  if (showDeposit && selectedToken) {
6766
7161
  return /* @__PURE__ */ jsx(
@@ -6791,6 +7186,8 @@ var PaymentModal = ({
6791
7186
  /* @__PURE__ */ jsx(
6792
7187
  ModalHeader,
6793
7188
  {
7189
+ back: step === "wallet" && walletStep !== "choice",
7190
+ onBack: step === "wallet" && walletStep !== "choice" ? handleWalletBack : void 0,
6794
7191
  onClose: canClose ? handleClose : void 0,
6795
7192
  title: step === "info" ? "Confirm Payment" : void 0
6796
7193
  }
@@ -6809,9 +7206,39 @@ var PaymentModal = ({
6809
7206
  onPay: handlePay,
6810
7207
  onDeposit: handleDeposit,
6811
7208
  isPaying,
6812
- isBalanceLoading
7209
+ isBalanceLoading,
7210
+ disableBalanceCheck: !user?.evmAddress
7211
+ }
7212
+ ),
7213
+ step === "wallet" && walletStep === "choice" && selectedToken && /* @__PURE__ */ jsx(
7214
+ PaymentWalletChoiceView,
7215
+ {
7216
+ isExternalWalletEnabled: selectedToken.address !== "native",
7217
+ externalWalletDisabledReason: selectedToken.address === "native" ? t("payment.walletChoice.externalDisabledNative") : void 0,
7218
+ onChooseExternalWallet: handleChooseExternalWallet,
7219
+ onChooseCreateAccount: handleChooseCreateAccount
7220
+ }
7221
+ ),
7222
+ step === "wallet" && walletStep === "external-wallet" && /* @__PURE__ */ jsx(
7223
+ PaymentExternalWalletView,
7224
+ {
7225
+ onConnected: handleExternalWalletConnected,
7226
+ onCancel: handleWalletBack
6813
7227
  }
6814
7228
  ),
7229
+ step === "wallet" && walletStep === "create-account" && /* @__PURE__ */ jsx("div", { className: "volr:pt-1", children: /* @__PURE__ */ jsx(
7230
+ PasskeyEnrollView,
7231
+ {
7232
+ wrapInModal: false,
7233
+ onComplete: () => {
7234
+ Promise.resolve(handlePay()).catch(() => {
7235
+ });
7236
+ },
7237
+ onError: () => {
7238
+ },
7239
+ onClose: handleWalletBack
7240
+ }
7241
+ ) }),
6815
7242
  step === "processing" && /* @__PURE__ */ jsx(PaymentProcessingView, { step: processingStep, txHash }),
6816
7243
  step === "result" && createdPayment && /* @__PURE__ */ jsx(
6817
7244
  PaymentResultView,
@@ -7057,7 +7484,143 @@ function SignRequestModal({ open, onOpenChange }) {
7057
7484
  }
7058
7485
  );
7059
7486
  }
7060
- var VolrUIContext = React13.createContext(null);
7487
+ var WalletRequiredContext = createContext(null);
7488
+ function WalletRequiredProvider({ children }) {
7489
+ const [pendingRequest, setPendingRequest] = useState(null);
7490
+ const resolveRef = useRef(null);
7491
+ const rejectRef = useRef(null);
7492
+ const requestWallet = useCallback(
7493
+ (request) => {
7494
+ return new Promise((resolve2, reject2) => {
7495
+ setPendingRequest(request);
7496
+ resolveRef.current = resolve2;
7497
+ rejectRef.current = reject2;
7498
+ });
7499
+ },
7500
+ []
7501
+ );
7502
+ const resolve = useCallback((provider) => {
7503
+ if (resolveRef.current) {
7504
+ resolveRef.current(provider);
7505
+ resolveRef.current = null;
7506
+ rejectRef.current = null;
7507
+ }
7508
+ setPendingRequest(null);
7509
+ }, []);
7510
+ const reject = useCallback((error) => {
7511
+ if (rejectRef.current) {
7512
+ rejectRef.current(error);
7513
+ resolveRef.current = null;
7514
+ rejectRef.current = null;
7515
+ }
7516
+ setPendingRequest(null);
7517
+ }, []);
7518
+ return /* @__PURE__ */ jsx(
7519
+ WalletRequiredContext.Provider,
7520
+ {
7521
+ value: { requestWallet, pendingRequest, resolve, reject },
7522
+ children
7523
+ }
7524
+ );
7525
+ }
7526
+ function useWalletRequired() {
7527
+ const ctx = useContext(WalletRequiredContext);
7528
+ if (!ctx) {
7529
+ throw new Error("useWalletRequired must be used within WalletRequiredProvider");
7530
+ }
7531
+ return { requestWallet: ctx.requestWallet };
7532
+ }
7533
+ function useWalletRequiredInternal() {
7534
+ const ctx = useContext(WalletRequiredContext);
7535
+ if (!ctx) {
7536
+ throw new Error(
7537
+ "useWalletRequiredInternal must be used within WalletRequiredProvider"
7538
+ );
7539
+ }
7540
+ return ctx;
7541
+ }
7542
+ function WalletRequiredModal() {
7543
+ const { t } = useI18n();
7544
+ const { pendingRequest, resolve, reject } = useWalletRequiredInternal();
7545
+ const { user, provider } = useVolrContext();
7546
+ const { keyStorageType } = useVolrUI();
7547
+ const [step, setStep] = useState("notice");
7548
+ const providerRef = useRef(provider);
7549
+ useEffect(() => {
7550
+ providerRef.current = provider;
7551
+ }, [provider]);
7552
+ useEffect(() => {
7553
+ if (pendingRequest) {
7554
+ setStep("notice");
7555
+ }
7556
+ }, [pendingRequest]);
7557
+ const title = useMemo(() => {
7558
+ if (!pendingRequest) return "";
7559
+ if (pendingRequest.type === "transaction") return t("walletRequired.titleTx");
7560
+ if (pendingRequest.type === "typedData") return t("walletRequired.titleTypedData");
7561
+ return t("walletRequired.titleMessage");
7562
+ }, [pendingRequest, t]);
7563
+ const handleCancel = () => {
7564
+ resolve(null);
7565
+ };
7566
+ const handleContinue = () => {
7567
+ if (!user?.id) {
7568
+ reject(new Error("AUTH_REQUIRED"));
7569
+ return;
7570
+ }
7571
+ setStep("enroll");
7572
+ };
7573
+ const handleEnrollComplete = async () => {
7574
+ const p = providerRef.current;
7575
+ if (!p) {
7576
+ reject(new Error("PROVIDER_NOT_AVAILABLE"));
7577
+ return;
7578
+ }
7579
+ resolve(p);
7580
+ };
7581
+ const handleEnrollError = (error) => {
7582
+ console.error("[WalletRequiredModal] Enrollment error:", error);
7583
+ };
7584
+ const open = Boolean(pendingRequest);
7585
+ if (!open) return null;
7586
+ return /* @__PURE__ */ jsxs(
7587
+ Modal,
7588
+ {
7589
+ open,
7590
+ onOpenChange: (next) => !next && handleCancel(),
7591
+ onPointerDownOutside: (e) => e.preventDefault(),
7592
+ ariaLabel: t("walletRequired.ariaLabel"),
7593
+ children: [
7594
+ /* @__PURE__ */ jsx(ModalHeader, { onClose: handleCancel, children: /* @__PURE__ */ jsx("p", { className: "volr:text-base volr:font-semibold volr:text-slate-900", children: title }) }),
7595
+ step === "notice" && /* @__PURE__ */ jsxs("div", { className: "volr:space-y-4", children: [
7596
+ /* @__PURE__ */ jsx("p", { className: "volr:text-sm volr:text-slate-600 volr:leading-relaxed", children: t("walletRequired.description") }),
7597
+ /* @__PURE__ */ jsxs("div", { className: "volr:flex volr:flex-col volr:gap-2", children: [
7598
+ /* @__PURE__ */ jsx(Button, { className: "volr:w-full", onClick: handleContinue, children: t("walletRequired.cta") }),
7599
+ /* @__PURE__ */ jsx(
7600
+ Button,
7601
+ {
7602
+ className: "volr:w-full",
7603
+ variant: "secondary",
7604
+ onClick: handleCancel,
7605
+ children: t("walletRequired.notNow")
7606
+ }
7607
+ )
7608
+ ] })
7609
+ ] }),
7610
+ step === "enroll" && /* @__PURE__ */ jsx("div", { className: "volr:pt-1", children: keyStorageType === "mpc" ? /* @__PURE__ */ jsx(MpcConnectView, { onComplete: handleEnrollComplete, onError: handleEnrollError }) : /* @__PURE__ */ jsx(
7611
+ PasskeyEnrollView,
7612
+ {
7613
+ wrapInModal: false,
7614
+ onComplete: handleEnrollComplete,
7615
+ onError: handleEnrollError,
7616
+ onClose: () => resolve(null)
7617
+ }
7618
+ ) })
7619
+ ]
7620
+ }
7621
+ );
7622
+ }
7623
+ var VolrUIContext = React14.createContext(null);
7061
7624
  function getCurrentRpId() {
7062
7625
  if (typeof window === "undefined") return "localhost";
7063
7626
  return window.location.hostname;
@@ -7083,26 +7646,17 @@ function OnboardingFlow({
7083
7646
  keyStorageType,
7084
7647
  onComplete
7085
7648
  }) {
7086
- const { logout } = useVolrContext();
7087
7649
  const handleEnrollComplete = () => {
7088
7650
  onComplete();
7089
7651
  };
7090
7652
  const handleEnrollError = (_err) => {
7091
7653
  };
7092
- const handleLogout = async () => {
7093
- try {
7094
- await logout();
7095
- onComplete();
7096
- } catch (error) {
7097
- }
7098
- };
7099
7654
  if (keyStorageType === "passkey") {
7100
7655
  return /* @__PURE__ */ jsx(
7101
7656
  PasskeyEnrollView,
7102
7657
  {
7103
7658
  onComplete: handleEnrollComplete,
7104
- onError: handleEnrollError,
7105
- onLogout: handleLogout
7659
+ onError: handleEnrollError
7106
7660
  }
7107
7661
  );
7108
7662
  }
@@ -7152,7 +7706,7 @@ var VolrUIProvider = ({
7152
7706
  /* @__PURE__ */ jsx("div", { className: "volr:text-sm volr:mb-6 volr:leading-relaxed volr-text-secondary", children: keyStorageTypeError })
7153
7707
  ] }) });
7154
7708
  }
7155
- return /* @__PURE__ */ jsx(SignRequestProvider, { children: /* @__PURE__ */ jsx(
7709
+ return /* @__PURE__ */ jsx(SignRequestProvider, { children: /* @__PURE__ */ jsx(WalletRequiredProvider, { children: /* @__PURE__ */ jsx(
7156
7710
  VolrUIProviderInner,
7157
7711
  {
7158
7712
  config,
@@ -7166,7 +7720,7 @@ var VolrUIProvider = ({
7166
7720
  providerPolicy,
7167
7721
  children
7168
7722
  }
7169
- ) });
7723
+ ) }) });
7170
7724
  };
7171
7725
  function VolrUIProviderInner({
7172
7726
  config,
@@ -7182,9 +7736,18 @@ function VolrUIProviderInner({
7182
7736
  }) {
7183
7737
  const [showOnboarding, setShowOnboarding] = useState(false);
7184
7738
  const { requestSign } = useSignRequest();
7739
+ const { requestWallet } = useWalletRequired();
7185
7740
  const configWithSignRequest = {
7186
7741
  ...config,
7187
- onSignRequest: requestSign
7742
+ onSignRequest: requestSign,
7743
+ onWalletRequired: async (request) => {
7744
+ try {
7745
+ const p = await requestWallet(request);
7746
+ return p ?? null;
7747
+ } catch {
7748
+ return null;
7749
+ }
7750
+ }
7188
7751
  };
7189
7752
  return /* @__PURE__ */ jsx(VolrProvider, { config: configWithSignRequest, children: /* @__PURE__ */ jsx(I18nProvider, { children: /* @__PURE__ */ jsx(
7190
7753
  VolrUIContext.Provider,
@@ -7199,6 +7762,7 @@ function VolrUIProviderInner({
7199
7762
  keyStorageType
7200
7763
  },
7201
7764
  children: /* @__PURE__ */ jsxs(VolrModalProvider, { children: [
7765
+ /* @__PURE__ */ jsx(WalletRequiredModal, {}),
7202
7766
  /* @__PURE__ */ jsx(
7203
7767
  MigrationCoordinator,
7204
7768
  {
@@ -7209,6 +7773,7 @@ function VolrUIProviderInner({
7209
7773
  /* @__PURE__ */ jsx(
7210
7774
  OAuthCallbackHandler,
7211
7775
  {
7776
+ enforceSelection: providerPolicy.enforceOnFirstLogin ?? true,
7212
7777
  onShowOnboarding: () => setShowOnboarding(true)
7213
7778
  }
7214
7779
  ),
@@ -7623,6 +8188,7 @@ function SignRequestModalPortal() {
7623
8188
  );
7624
8189
  }
7625
8190
  function OAuthCallbackHandler({
8191
+ enforceSelection,
7626
8192
  onShowOnboarding
7627
8193
  }) {
7628
8194
  const [hasCode, setHasCode] = useState(false);
@@ -7641,12 +8207,13 @@ function OAuthCallbackHandler({
7641
8207
  const passkeys = resultUser.registeredPasskeys ?? [];
7642
8208
  const hasCurrent = passkeys.some((p) => p.rpId === currentRpId);
7643
8209
  const needsMigration = passkeys.length > 0 && !hasCurrent;
7644
- if (!resultUser.keyStorageType) {
8210
+ if (resultUser.keyStorageType === "passkey" && needsMigration) {
7645
8211
  onShowOnboarding();
7646
8212
  return;
7647
8213
  }
7648
- if (resultUser.keyStorageType === "passkey" && needsMigration) {
8214
+ if (!resultUser.keyStorageType && enforceSelection) {
7649
8215
  onShowOnboarding();
8216
+ return;
7650
8217
  }
7651
8218
  },
7652
8219
  onError: (err) => {
@@ -7674,8 +8241,8 @@ function OnboardingChecker({
7674
8241
  }) {
7675
8242
  const { user, provider, isLoading } = useVolrContext();
7676
8243
  const { isOpen: isModalOpen } = useVolrModal();
7677
- const modalWasOpened = React13.useRef(false);
7678
- const pendingMismatchOnboarding = React13.useRef(false);
8244
+ const modalWasOpened = React14.useRef(false);
8245
+ const pendingMismatchOnboarding = React14.useRef(false);
7679
8246
  useEffect(() => {
7680
8247
  if (isModalOpen) {
7681
8248
  modalWasOpened.current = true;
@@ -7716,15 +8283,11 @@ function OnboardingChecker({
7716
8283
  onShowOnboarding();
7717
8284
  return;
7718
8285
  }
7719
- if (user && enforceSelection) {
7720
- if (!keyStorageType) {
7721
- console.error(
7722
- "keyStorageType must be specified in VolrUIProvider props."
7723
- );
7724
- return;
7725
- }
7726
- onShowOnboarding();
8286
+ if (!enforceSelection) {
8287
+ onHideOnboarding();
8288
+ return;
7727
8289
  }
8290
+ onHideOnboarding();
7728
8291
  }, [
7729
8292
  user,
7730
8293
  provider,