@volr/react-ui 0.2.4 → 0.2.6

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.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var React14 = require('react');
3
+ var React15 = require('react');
4
4
  var reactDom = require('react-dom');
5
5
  var react = require('@volr/react');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -10,7 +10,7 @@ var qrcode_react = require('qrcode.react');
10
10
 
11
11
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
12
 
13
- var React14__default = /*#__PURE__*/_interopDefault(React14);
13
+ var React15__default = /*#__PURE__*/_interopDefault(React15);
14
14
 
15
15
  var __getOwnPropNames = Object.getOwnPropertyNames;
16
16
  var __esm = (fn, res) => function __init() {
@@ -707,12 +707,12 @@ var en = {
707
707
  domainLabel: "Domain"
708
708
  },
709
709
  walletRequired: {
710
- ariaLabel: "Create wallet",
711
- titleTx: "Create your wallet to continue",
712
- titleMessage: "Create your wallet to continue",
713
- titleTypedData: "Create your wallet to continue",
714
- description: "Create a wallet in about 1 second to continue.",
715
- cta: "Create wallet in 1 second",
710
+ ariaLabel: "Passkey required",
711
+ titleTx: "Passkey required to continue",
712
+ titleMessage: "Passkey required to continue",
713
+ titleTypedData: "Passkey required to continue",
714
+ description: "You need to register a passkey wallet to proceed.",
715
+ cta: "Register passkey",
716
716
  notNow: "Not now"
717
717
  },
718
718
  payment: {
@@ -720,6 +720,7 @@ var en = {
720
720
  title: "Choose how to pay",
721
721
  description: "Use your existing wallet, or create a wallet in about 1 second.",
722
722
  externalCta: "Use my wallet",
723
+ externalInlineCta: "I already have a wallet",
723
724
  createAccountCta: "Create wallet in 1 second",
724
725
  externalDisabledNative: "External wallet payments are available for ERC-20 permit tokens only.",
725
726
  externalTitle: "Select a wallet",
@@ -1021,12 +1022,12 @@ var ko = {
1021
1022
  domainLabel: "\uB3C4\uBA54\uC778"
1022
1023
  },
1023
1024
  walletRequired: {
1024
- ariaLabel: "\uC9C0\uAC11 \uC0DD\uC131",
1025
- titleTx: "\uACC4\uC18D\uD558\uB824\uBA74 \uC9C0\uAC11\uC774 \uD544\uC694\uD574\uC694",
1026
- titleMessage: "\uACC4\uC18D\uD558\uB824\uBA74 \uC9C0\uAC11\uC774 \uD544\uC694\uD574\uC694",
1027
- titleTypedData: "\uACC4\uC18D\uD558\uB824\uBA74 \uC9C0\uAC11\uC774 \uD544\uC694\uD574\uC694",
1028
- description: "1\uCD08\uB9CC\uC5D0 \uC9C0\uAC11\uC744 \uB9CC\uB4E4\uACE0 \uACC4\uC18D \uC9C4\uD589\uD558\uC138\uC694.",
1029
- cta: "1\uCD08\uB9CC\uC5D0 \uC9C0\uAC11 \uB9CC\uB4E4\uAE30",
1025
+ ariaLabel: "\uD328\uC2A4\uD0A4 \uB4F1\uB85D",
1026
+ titleTx: "\uD328\uC2A4\uD0A4 \uB4F1\uB85D\uC774 \uD544\uC694\uD574\uC694",
1027
+ titleMessage: "\uD328\uC2A4\uD0A4 \uB4F1\uB85D\uC774 \uD544\uC694\uD574\uC694",
1028
+ titleTypedData: "\uD328\uC2A4\uD0A4 \uB4F1\uB85D\uC774 \uD544\uC694\uD574\uC694",
1029
+ description: "\uC774 \uAE30\uB2A5\uC744 \uC0AC\uC6A9\uD558\uB824\uBA74 \uD328\uC2A4\uD0A4 \uC9C0\uAC11\uC744 \uB4F1\uB85D\uD574\uC57C \uD574\uC694.",
1030
+ cta: "\uD328\uC2A4\uD0A4 \uB4F1\uB85D\uD558\uAE30",
1030
1031
  notNow: "\uC9C0\uAE08\uC740 \uC548 \uD560\uB798\uC694"
1031
1032
  },
1032
1033
  payment: {
@@ -1034,6 +1035,7 @@ var ko = {
1034
1035
  title: "\uACB0\uC81C \uBC29\uBC95\uC744 \uC120\uD0DD\uD558\uC138\uC694",
1035
1036
  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.",
1036
1037
  externalCta: "\uB0B4 \uC9C0\uAC11\uC73C\uB85C \uACB0\uC81C",
1038
+ externalInlineCta: "\uC774\uBBF8 \uC9C0\uAC11\uC774 \uC788\uC5B4\uC694",
1037
1039
  createAccountCta: "1\uCD08\uB9CC\uC5D0 \uC9C0\uAC11 \uB9CC\uB4E4\uAE30",
1038
1040
  externalDisabledNative: "\uC678\uBD80 \uC9C0\uAC11 \uACB0\uC81C\uB294 ERC-20 permit \uD1A0\uD070\uC5D0\uC11C\uB9CC \uC9C0\uC6D0\uB3FC\uC694.",
1039
1041
  externalTitle: "\uC9C0\uAC11 \uC120\uD0DD",
@@ -1080,13 +1082,13 @@ var translations = {
1080
1082
  function getTranslations(locale = "en") {
1081
1083
  return translations[locale] || translations.en;
1082
1084
  }
1083
- var I18nContext = React14.createContext(null);
1085
+ var I18nContext = React15.createContext(null);
1084
1086
  function interpolate(text, params) {
1085
1087
  if (!params) return text;
1086
1088
  return text.replace(/\{\{(\w+)\}\}/g, (_, key) => params[key] ?? `{{${key}}}`);
1087
1089
  }
1088
1090
  function useI18n() {
1089
- const context = React14.useContext(I18nContext);
1091
+ const context = React15.useContext(I18nContext);
1090
1092
  if (!context) {
1091
1093
  return {
1092
1094
  locale: "en",
@@ -1130,25 +1132,25 @@ function detectLocale(allowedLocales) {
1130
1132
  return resolveLocale(detected, allowedLocales);
1131
1133
  }
1132
1134
  function I18nProvider({ children, allowedLocales }) {
1133
- const [locale, setLocaleState] = React14.useState(() => detectLocale(allowedLocales));
1134
- const resolveAllowedLocale = React14.useCallback(
1135
+ const [locale, setLocaleState] = React15.useState(() => detectLocale(allowedLocales));
1136
+ const resolveAllowedLocale = React15.useCallback(
1135
1137
  (next) => resolveLocale(next, allowedLocales),
1136
1138
  [allowedLocales]
1137
1139
  );
1138
- const setLocale = React14.useCallback(
1140
+ const setLocale = React15.useCallback(
1139
1141
  (next) => {
1140
1142
  setLocaleState(resolveAllowedLocale(next));
1141
1143
  },
1142
1144
  [resolveAllowedLocale]
1143
1145
  );
1144
- React14.useEffect(() => {
1146
+ React15.useEffect(() => {
1145
1147
  setLocaleState((current) => {
1146
1148
  const resolved = resolveAllowedLocale(current);
1147
1149
  return current === resolved ? current : resolved;
1148
1150
  });
1149
1151
  }, [resolveAllowedLocale]);
1150
- const translations2 = React14.useMemo(() => getTranslations(locale), [locale]);
1151
- const t = React14.useMemo(() => {
1152
+ const translations2 = React15.useMemo(() => getTranslations(locale), [locale]);
1153
+ const t = React15.useMemo(() => {
1152
1154
  return (key, params) => {
1153
1155
  const keys = key.split(".");
1154
1156
  let value2 = translations2;
@@ -1165,7 +1167,7 @@ function I18nProvider({ children, allowedLocales }) {
1165
1167
  return typeof value2 === "string" ? interpolate(value2, params) : key;
1166
1168
  };
1167
1169
  }, [translations2]);
1168
- const value = React14.useMemo(
1170
+ const value = React15.useMemo(
1169
1171
  () => ({
1170
1172
  locale,
1171
1173
  translations: translations2,
@@ -1177,9 +1179,9 @@ function I18nProvider({ children, allowedLocales }) {
1177
1179
  return /* @__PURE__ */ jsxRuntime.jsx(I18nContext.Provider, { value, children });
1178
1180
  }
1179
1181
  var useTranslation = useI18n;
1180
- var VolrModalContext = React14.createContext(null);
1182
+ var VolrModalContext = React15.createContext(null);
1181
1183
  var useVolrModal = () => {
1182
- const context = React14.useContext(VolrModalContext);
1184
+ const context = React15.useContext(VolrModalContext);
1183
1185
  if (!context) {
1184
1186
  throw new Error("useVolrModal must be used within VolrUIProvider");
1185
1187
  }
@@ -1188,17 +1190,17 @@ var useVolrModal = () => {
1188
1190
  var VolrModalProvider = ({
1189
1191
  children
1190
1192
  }) => {
1191
- const [isOpen, setIsOpen] = React14.useState(false);
1192
- const [mode, setMode] = React14.useState("account");
1193
- const [asset, setAsset] = React14.useState(null);
1194
- const [paymentOptions, setPaymentOptions] = React14.useState(null);
1195
- const open = React14.useCallback((options) => {
1193
+ const [isOpen, setIsOpen] = React15.useState(false);
1194
+ const [mode, setMode] = React15.useState("account");
1195
+ const [asset, setAsset] = React15.useState(null);
1196
+ const [paymentOptions, setPaymentOptions] = React15.useState(null);
1197
+ const open = React15.useCallback((options) => {
1196
1198
  setMode(options?.mode ?? "account");
1197
1199
  setAsset(options?.asset ?? null);
1198
1200
  setPaymentOptions(options?.payment ?? null);
1199
1201
  setIsOpen(true);
1200
1202
  }, []);
1201
- const close = React14.useCallback(() => {
1203
+ const close = React15.useCallback(() => {
1202
1204
  setIsOpen(false);
1203
1205
  setAsset(null);
1204
1206
  setPaymentOptions(null);
@@ -1212,11 +1214,11 @@ function cn(...inputs) {
1212
1214
  return twMerge(clsx.clsx(inputs));
1213
1215
  }
1214
1216
  function useMediaQuery(query) {
1215
- const [matches, setMatches] = React14.useState(() => {
1217
+ const [matches, setMatches] = React15.useState(() => {
1216
1218
  if (typeof window === "undefined") return false;
1217
1219
  return window.matchMedia(query).matches;
1218
1220
  });
1219
- React14.useEffect(() => {
1221
+ React15.useEffect(() => {
1220
1222
  if (typeof window === "undefined") return;
1221
1223
  const mql = window.matchMedia(query);
1222
1224
  const handler = (event) => setMatches(event.matches);
@@ -1228,14 +1230,14 @@ function useMediaQuery(query) {
1228
1230
  }
1229
1231
 
1230
1232
  // src/generated/volr-sdk-css.ts
1231
- 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-3\\.5{height:calc(var(--volr-spacing)*3.5)}.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-3\\.5{width:calc(var(--volr-spacing)*3.5)}.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\\: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-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}}';
1233
+ 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-3\\.5{height:calc(var(--volr-spacing)*3.5)}.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-3\\.5{width:calc(var(--volr-spacing)*3.5)}.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\\: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-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\\:underline-offset-4{text-underline-offset:4px}.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}}';
1232
1234
  function useResolvedTheme(theme = "light") {
1233
- const [resolvedTheme, setResolvedTheme] = React14.useState(() => {
1235
+ const [resolvedTheme, setResolvedTheme] = React15.useState(() => {
1234
1236
  if (theme !== "system") return theme;
1235
1237
  if (typeof window === "undefined") return "light";
1236
1238
  return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
1237
1239
  });
1238
- React14.useEffect(() => {
1240
+ React15.useEffect(() => {
1239
1241
  if (theme !== "system") {
1240
1242
  setResolvedTheme(theme);
1241
1243
  return;
@@ -1251,10 +1253,10 @@ function useResolvedTheme(theme = "light") {
1251
1253
  return resolvedTheme;
1252
1254
  }
1253
1255
  function ShadowPortal({ children, theme = "light" }) {
1254
- const [mountNode, setMountNode] = React14.useState(null);
1255
- const hostRef = React14.useRef(null);
1256
+ const [mountNode, setMountNode] = React15.useState(null);
1257
+ const hostRef = React15.useRef(null);
1256
1258
  const resolvedTheme = useResolvedTheme(theme);
1257
- React14.useEffect(() => {
1259
+ React15.useEffect(() => {
1258
1260
  const host = document.createElement("div");
1259
1261
  host.id = "volr-shadow-portal";
1260
1262
  host.style.position = "fixed";
@@ -1278,7 +1280,7 @@ function ShadowPortal({ children, theme = "light" }) {
1278
1280
  hostRef.current = null;
1279
1281
  };
1280
1282
  }, []);
1281
- React14.useEffect(() => {
1283
+ React15.useEffect(() => {
1282
1284
  if (hostRef.current) {
1283
1285
  hostRef.current.setAttribute("data-theme", resolvedTheme);
1284
1286
  }
@@ -1287,7 +1289,7 @@ function ShadowPortal({ children, theme = "light" }) {
1287
1289
  return reactDom.createPortal(children, mountNode);
1288
1290
  }
1289
1291
  function useFocusTrap(isActive, containerRef) {
1290
- const previousActiveElement = React14.useRef(null);
1292
+ const previousActiveElement = React15.useRef(null);
1291
1293
  const focusableSelector = [
1292
1294
  "button:not([disabled])",
1293
1295
  "input:not([disabled])",
@@ -1296,7 +1298,7 @@ function useFocusTrap(isActive, containerRef) {
1296
1298
  "a[href]",
1297
1299
  '[tabindex]:not([tabindex="-1"])'
1298
1300
  ].join(", ");
1299
- const getFocusableElements = React14.useCallback(() => {
1301
+ const getFocusableElements = React15.useCallback(() => {
1300
1302
  if (!containerRef.current) return [];
1301
1303
  return Array.from(
1302
1304
  containerRef.current.querySelectorAll(focusableSelector)
@@ -1304,7 +1306,7 @@ function useFocusTrap(isActive, containerRef) {
1304
1306
  return el.offsetParent !== null;
1305
1307
  });
1306
1308
  }, [containerRef, focusableSelector]);
1307
- const handleKeyDown = React14.useCallback(
1309
+ const handleKeyDown = React15.useCallback(
1308
1310
  (event) => {
1309
1311
  if (event.key !== "Tab") return;
1310
1312
  const focusableElements = getFocusableElements();
@@ -1325,7 +1327,7 @@ function useFocusTrap(isActive, containerRef) {
1325
1327
  },
1326
1328
  [getFocusableElements]
1327
1329
  );
1328
- React14.useEffect(() => {
1330
+ React15.useEffect(() => {
1329
1331
  if (!isActive) return;
1330
1332
  previousActiveElement.current = document.activeElement;
1331
1333
  const focusableElements = getFocusableElements();
@@ -1356,12 +1358,12 @@ var Modal = ({
1356
1358
  }) => {
1357
1359
  const isMobile2 = useMediaQuery("(max-width: 500px)");
1358
1360
  const variant = explicitVariant ?? (isMobile2 ? "bottom-sheet" : "centered");
1359
- const dialogRef = React14.useRef(null);
1360
- const dialogId = React14.useId();
1361
+ const dialogRef = React15.useRef(null);
1362
+ const dialogId = React15.useId();
1361
1363
  const uiContext = useVolrUIOptional();
1362
1364
  const theme = uiContext?.theme ?? "light";
1363
1365
  useFocusTrap(open, dialogRef);
1364
- React14.useEffect(() => {
1366
+ React15.useEffect(() => {
1365
1367
  const handleEscape = (e) => {
1366
1368
  if (e.key === "Escape" && open) {
1367
1369
  if (onEscapeKeyDown) {
@@ -1944,7 +1946,7 @@ var variantMap = {
1944
1946
  ghost: { backgroundColor: "transparent", color: "var(--volr-text-secondary)", border: "none" },
1945
1947
  outline: { backgroundColor: "transparent", color: "var(--volr-text-secondary)", border: "1px solid var(--volr-border)" }
1946
1948
  };
1947
- var Button = React14__default.default.forwardRef(
1949
+ var Button = React15__default.default.forwardRef(
1948
1950
  ({ variant = "primary", size = "md", fullWidth, className, style, disabled, children, ...props }, ref) => {
1949
1951
  const { accentColor } = useVolrUI();
1950
1952
  const sizeStyle = sizeMap[size];
@@ -2145,11 +2147,11 @@ function PasskeyMigrationView({
2145
2147
  wrapInModal = true
2146
2148
  }) {
2147
2149
  const { t } = useI18n();
2148
- const [isMigrating, setIsMigrating] = React14.useState(false);
2149
- const [isComplete, setIsComplete] = React14.useState(false);
2150
- const [error, setError] = React14.useState(null);
2150
+ const [isMigrating, setIsMigrating] = React15.useState(false);
2151
+ const [isComplete, setIsComplete] = React15.useState(false);
2152
+ const [error, setError] = React15.useState(null);
2151
2153
  const biometricType = getBiometricType();
2152
- React14.useEffect(() => {
2154
+ React15.useEffect(() => {
2153
2155
  if (typeof window === "undefined") return;
2154
2156
  const handler = (event) => {
2155
2157
  if (event.data?.type === "VOLR_MIGRATION_DONE") {
@@ -2160,7 +2162,7 @@ function PasskeyMigrationView({
2160
2162
  window.addEventListener("message", handler);
2161
2163
  return () => window.removeEventListener("message", handler);
2162
2164
  }, []);
2163
- React14.useEffect(() => {
2165
+ React15.useEffect(() => {
2164
2166
  if (isComplete) {
2165
2167
  const timer = setTimeout(() => {
2166
2168
  if (onComplete) {
@@ -2184,7 +2186,7 @@ function PasskeyMigrationView({
2184
2186
  }
2185
2187
  }
2186
2188
  };
2187
- const handleDone = React14.useCallback(() => {
2189
+ const handleDone = React15.useCallback(() => {
2188
2190
  if (onComplete) {
2189
2191
  onComplete();
2190
2192
  }
@@ -2281,22 +2283,22 @@ function PasskeyEnrollView({
2281
2283
  isEnrolling,
2282
2284
  error: enrollmentError
2283
2285
  } = react.usePasskeyEnrollment();
2284
- const [hasStarted, setHasStarted] = React14.useState(false);
2285
- const [errorMessage, setErrorMessage] = React14.useState(null);
2286
- const [isRefreshing, setIsRefreshing] = React14.useState(false);
2286
+ const [hasStarted, setHasStarted] = React15.useState(false);
2287
+ const [errorMessage, setErrorMessage] = React15.useState(null);
2288
+ const [isRefreshing, setIsRefreshing] = React15.useState(false);
2287
2289
  const biometricType = getBiometricType();
2288
- const compatibility = React14.useMemo(() => react.checkPrfCompatibility(), []);
2289
- const [hasPrfError, setHasPrfError] = React14.useState(false);
2290
- const platformHint = React14.useMemo(
2290
+ const compatibility = React15.useMemo(() => react.checkPrfCompatibility(), []);
2291
+ const [hasPrfError, setHasPrfError] = React15.useState(false);
2292
+ const platformHint = React15.useMemo(
2291
2293
  () => hasPrfError ? react.getPlatformHint(compatibility.platform) : { hintKey: "", noteKey: "" },
2292
2294
  [compatibility.platform, hasPrfError]
2293
2295
  );
2294
2296
  const hasPasskey = user?.keyStorageType === "passkey";
2295
- const currentDomain = React14.useMemo(() => {
2297
+ const currentDomain = React15.useMemo(() => {
2296
2298
  if (typeof window === "undefined") return "localhost";
2297
2299
  return window.location.hostname;
2298
2300
  }, []);
2299
- const migrationInfo = React14.useMemo(() => {
2301
+ const migrationInfo = React15.useMemo(() => {
2300
2302
  if (!user?.registeredPasskeys || user.registeredPasskeys.length === 0) {
2301
2303
  return { needsMigration: false, sourcePasskey: null };
2302
2304
  }
@@ -2309,7 +2311,7 @@ function PasskeyEnrollView({
2309
2311
  const sourcePasskey = user.registeredPasskeys[0];
2310
2312
  return { needsMigration: true, sourcePasskey };
2311
2313
  }, [user?.registeredPasskeys, currentDomain]);
2312
- React14.useEffect(() => {
2314
+ React15.useEffect(() => {
2313
2315
  console.log("[PasskeyEnrollView] User state:", {
2314
2316
  user,
2315
2317
  keyStorageType: user?.keyStorageType,
@@ -2320,7 +2322,7 @@ function PasskeyEnrollView({
2320
2322
  migrationInfo
2321
2323
  });
2322
2324
  }, [user, hasPasskey, currentDomain, migrationInfo]);
2323
- React14.useEffect(() => {
2325
+ React15.useEffect(() => {
2324
2326
  if (hasPasskey && !user?.evmAddress && !isRefreshing) {
2325
2327
  const refreshUserData = async () => {
2326
2328
  try {
@@ -2351,7 +2353,7 @@ function PasskeyEnrollView({
2351
2353
  refreshUserData();
2352
2354
  }
2353
2355
  }, [hasPasskey, user?.evmAddress, isRefreshing, client, setUser, user]);
2354
- React14.useEffect(() => {
2356
+ React15.useEffect(() => {
2355
2357
  if (!user?.id) {
2356
2358
  const error = new Error("User ID is required for passkey enrollment");
2357
2359
  setErrorMessage(getUserFriendlyError(error, t));
@@ -2360,7 +2362,7 @@ function PasskeyEnrollView({
2360
2362
  }
2361
2363
  }
2362
2364
  }, [user, onError, t]);
2363
- React14.useEffect(() => {
2365
+ React15.useEffect(() => {
2364
2366
  if (enrollmentError) {
2365
2367
  const friendlyMessage = getUserFriendlyError(enrollmentError, t);
2366
2368
  setErrorMessage(friendlyMessage);
@@ -2639,7 +2641,7 @@ function MigrationTargetView({
2639
2641
  const biometricType = getBiometricType();
2640
2642
  const isProcessing = step !== "ready" && step !== "error" && step !== "success";
2641
2643
  const progress = STEP_PROGRESS2[step];
2642
- React14.useEffect(() => {
2644
+ React15.useEffect(() => {
2643
2645
  if (step === "success" && onAutoClose) {
2644
2646
  const timer = setTimeout(() => {
2645
2647
  onAutoClose();
@@ -2719,8 +2721,8 @@ function MpcConnectView({
2719
2721
  isConnecting,
2720
2722
  error: connectionError
2721
2723
  } = react.useMpcConnection();
2722
- const [errorMessage, setErrorMessage] = React14.useState(null);
2723
- React14.useEffect(() => {
2724
+ const [errorMessage, setErrorMessage] = React15.useState(null);
2725
+ React15.useEffect(() => {
2724
2726
  if (connectionError) {
2725
2727
  setErrorMessage(connectionError.message);
2726
2728
  if (onError) {
@@ -2728,7 +2730,7 @@ function MpcConnectView({
2728
2730
  }
2729
2731
  }
2730
2732
  }, [connectionError, onError]);
2731
- React14.useEffect(() => {
2733
+ React15.useEffect(() => {
2732
2734
  handleConnect();
2733
2735
  }, []);
2734
2736
  const handleConnect = async () => {
@@ -2959,9 +2961,9 @@ function PoweredBy() {
2959
2961
  }
2960
2962
  function EmailInlineInput({ onSubmit, accentColor }) {
2961
2963
  const { t } = useI18n();
2962
- const [email, setEmail] = React14.useState("");
2963
- const [error, setError] = React14.useState(null);
2964
- const [isLoading, setIsLoading] = React14.useState(false);
2964
+ const [email, setEmail] = React15.useState("");
2965
+ const [error, setError] = React15.useState(null);
2966
+ const [isLoading, setIsLoading] = React15.useState(false);
2965
2967
  const handleSubmit = async (e) => {
2966
2968
  e.preventDefault();
2967
2969
  setError(null);
@@ -3085,14 +3087,14 @@ function SigninSelectScreen({
3085
3087
  function CodeInputScreen({ email, onSubmit, onResend }) {
3086
3088
  const { t } = useI18n();
3087
3089
  const { accentColor } = useVolrUI();
3088
- const [digits, setDigits] = React14.useState(Array(6).fill(""));
3089
- const [error, setError] = React14.useState(null);
3090
- const [isLoading, setIsLoading] = React14.useState(false);
3091
- const inputRefs = React14.useRef([]);
3092
- React14.useEffect(() => {
3090
+ const [digits, setDigits] = React15.useState(Array(6).fill(""));
3091
+ const [error, setError] = React15.useState(null);
3092
+ const [isLoading, setIsLoading] = React15.useState(false);
3093
+ const inputRefs = React15.useRef([]);
3094
+ React15.useEffect(() => {
3093
3095
  inputRefs.current[0]?.focus();
3094
3096
  }, []);
3095
- React14.useEffect(() => {
3097
+ React15.useEffect(() => {
3096
3098
  const code = digits.join("");
3097
3099
  if (code.length === 6 && !isLoading) {
3098
3100
  handleSubmit(code);
@@ -3204,7 +3206,7 @@ function CodeInputScreen({ email, onSubmit, onResend }) {
3204
3206
  ] });
3205
3207
  }
3206
3208
  var CopyButton = ({ text, className, onCopy }) => {
3207
- const [copied, setCopied] = React14.useState(false);
3209
+ const [copied, setCopied] = React15.useState(false);
3208
3210
  const handleCopy = async () => {
3209
3211
  try {
3210
3212
  await navigator.clipboard.writeText(text);
@@ -3283,23 +3285,23 @@ function SiweLoginScreen({
3283
3285
  checkSiweSession,
3284
3286
  getSiweSignUrl
3285
3287
  } = react.useVolrLogin();
3286
- const [isLoading, setIsLoading] = React14.useState(false);
3287
- const [loadingWallet, setLoadingWallet] = React14.useState(null);
3288
- const [error, setError] = React14.useState(null);
3289
- const [providers, setProviders] = React14.useState([]);
3290
- const [isDetecting, setIsDetecting] = React14.useState(true);
3291
- const [hasLegacyWallet, setHasLegacyWallet] = React14.useState(false);
3292
- const [showOtherWallet, setShowOtherWallet] = React14.useState(false);
3293
- const [sessionUrl, setSessionUrl] = React14.useState(null);
3294
- const [isPolling, setIsPolling] = React14.useState(false);
3295
- const pollingRef = React14.useRef(null);
3296
- const sessionCreatedRef = React14.useRef(false);
3297
- React14.useEffect(() => {
3288
+ const [isLoading, setIsLoading] = React15.useState(false);
3289
+ const [loadingWallet, setLoadingWallet] = React15.useState(null);
3290
+ const [error, setError] = React15.useState(null);
3291
+ const [providers, setProviders] = React15.useState([]);
3292
+ const [isDetecting, setIsDetecting] = React15.useState(true);
3293
+ const [hasLegacyWallet, setHasLegacyWallet] = React15.useState(false);
3294
+ const [showOtherWallet, setShowOtherWallet] = React15.useState(false);
3295
+ const [sessionUrl, setSessionUrl] = React15.useState(null);
3296
+ const [isPolling, setIsPolling] = React15.useState(false);
3297
+ const pollingRef = React15.useRef(null);
3298
+ const sessionCreatedRef = React15.useRef(false);
3299
+ React15.useEffect(() => {
3298
3300
  return () => {
3299
3301
  if (pollingRef.current) clearInterval(pollingRef.current);
3300
3302
  };
3301
3303
  }, []);
3302
- React14.useEffect(() => {
3304
+ React15.useEffect(() => {
3303
3305
  if (typeof window === "undefined") {
3304
3306
  setIsDetecting(false);
3305
3307
  return;
@@ -3325,7 +3327,7 @@ function SiweLoginScreen({
3325
3327
  };
3326
3328
  }, []);
3327
3329
  const hasAnyWallet = providers.length > 0 || hasLegacyWallet;
3328
- const createSession = React14.useCallback(async () => {
3330
+ const createSession = React15.useCallback(async () => {
3329
3331
  if (sessionCreatedRef.current || sessionUrl) return;
3330
3332
  sessionCreatedRef.current = true;
3331
3333
  try {
@@ -3367,17 +3369,17 @@ function SiweLoginScreen({
3367
3369
  onError(err instanceof Error ? err : new Error("Failed to create session"));
3368
3370
  }
3369
3371
  }, [createSiweSession, getSiweSignUrl, checkSiweSession, onSuccess, onError, t, sessionUrl]);
3370
- React14.useEffect(() => {
3372
+ React15.useEffect(() => {
3371
3373
  if (!isDetecting && !hasAnyWallet && !sessionUrl) {
3372
3374
  createSession();
3373
3375
  }
3374
3376
  }, [isDetecting, hasAnyWallet, sessionUrl, createSession]);
3375
- React14.useEffect(() => {
3377
+ React15.useEffect(() => {
3376
3378
  if (showOtherWallet && !sessionUrl) {
3377
3379
  createSession();
3378
3380
  }
3379
3381
  }, [showOtherWallet, sessionUrl, createSession]);
3380
- const handleWalletClick = React14.useCallback(async (provider, walletName, walletConnector) => {
3382
+ const handleWalletClick = React15.useCallback(async (provider, walletName, walletConnector) => {
3381
3383
  setError(null);
3382
3384
  setIsLoading(true);
3383
3385
  setLoadingWallet(walletName);
@@ -3401,7 +3403,7 @@ function SiweLoginScreen({
3401
3403
  setLoadingWallet(null);
3402
3404
  }
3403
3405
  }, [signWithWallet, onSuccess, onError]);
3404
- const handleLegacyWalletClick = React14.useCallback(async () => {
3406
+ const handleLegacyWalletClick = React15.useCallback(async () => {
3405
3407
  if (typeof window === "undefined" || !window.ethereum) return;
3406
3408
  const ethereum = window.ethereum;
3407
3409
  let walletName = "Wallet";
@@ -3410,7 +3412,7 @@ function SiweLoginScreen({
3410
3412
  else if (ethereum.isRabby) walletName = "Rabby";
3411
3413
  await handleWalletClick(ethereum, walletName);
3412
3414
  }, [handleWalletClick]);
3413
- const cancelOtherWallet = React14.useCallback(() => {
3415
+ const cancelOtherWallet = React15.useCallback(() => {
3414
3416
  if (pollingRef.current) {
3415
3417
  clearInterval(pollingRef.current);
3416
3418
  pollingRef.current = null;
@@ -3557,13 +3559,13 @@ function SigninModal({ isOpen, onClose, onError }) {
3557
3559
  const { client } = react.useInternalAuth();
3558
3560
  const { appName, branding } = useVolrUI();
3559
3561
  const { requestEmailCode, verifyEmailCode, handleSocialLogin } = react.useVolrLogin();
3560
- const [currentScreen, setCurrentScreen] = React14.useState("method-select");
3561
- const [email, setEmail] = React14.useState("");
3562
+ const [currentScreen, setCurrentScreen] = React15.useState("method-select");
3563
+ const [email, setEmail] = React15.useState("");
3562
3564
  const hasPasskey = user?.keyStorageType === "passkey";
3563
3565
  const isMobile2 = useMediaQuery("(max-width: 500px)");
3564
3566
  const isWideViewport = useMediaQuery("(min-width: 864px)");
3565
3567
  const shouldUseWideLayout = !isMobile2 && isWideViewport && Boolean(branding) && currentScreen === "method-select";
3566
- React14.useEffect(() => {
3568
+ React15.useEffect(() => {
3567
3569
  if (!isOpen) {
3568
3570
  setCurrentScreen("method-select");
3569
3571
  setEmail("");
@@ -3788,7 +3790,7 @@ function AssetSelectView({
3788
3790
  }) })
3789
3791
  ] });
3790
3792
  }
3791
- var TextLinkButton = React14__default.default.forwardRef(({ showArrow = false, className, children, ...props }, ref) => {
3793
+ var TextLinkButton = React15__default.default.forwardRef(({ showArrow = false, className, children, ...props }, ref) => {
3792
3794
  return /* @__PURE__ */ jsxRuntime.jsxs(
3793
3795
  "button",
3794
3796
  {
@@ -3917,23 +3919,23 @@ function WalletTransferView({
3917
3919
  const { config } = react.useVolrContext();
3918
3920
  const { client } = react.useInternalAuth();
3919
3921
  const { isDetecting, getWalletsForDisplay, hasWallet } = react.useEIP6963();
3920
- const [viewState, setViewState] = React14.useState("select-wallet");
3921
- const [selectedWallet, setSelectedWallet] = React14.useState(null);
3922
- const [connectedAddress, setConnectedAddress] = React14.useState(null);
3923
- const [balance, setBalance] = React14.useState(null);
3924
- const [amount, setAmount] = React14.useState("");
3925
- const [isConnecting, setIsConnecting] = React14.useState(false);
3926
- const [isTransferring, setIsTransferring] = React14.useState(false);
3927
- const [error, setError] = React14.useState(null);
3928
- const [chainName, setChainName] = React14.useState(null);
3929
- const [currentChainId, setCurrentChainId] = React14.useState(null);
3922
+ const [viewState, setViewState] = React15.useState("select-wallet");
3923
+ const [selectedWallet, setSelectedWallet] = React15.useState(null);
3924
+ const [connectedAddress, setConnectedAddress] = React15.useState(null);
3925
+ const [balance, setBalance] = React15.useState(null);
3926
+ const [amount, setAmount] = React15.useState("");
3927
+ const [isConnecting, setIsConnecting] = React15.useState(false);
3928
+ const [isTransferring, setIsTransferring] = React15.useState(false);
3929
+ const [error, setError] = React15.useState(null);
3930
+ const [chainName, setChainName] = React15.useState(null);
3931
+ const [currentChainId, setCurrentChainId] = React15.useState(null);
3930
3932
  const tokenSymbol = asset === "native" ? "ETH" : asset.symbol;
3931
3933
  const decimals = asset === "native" ? 18 : asset.decimals;
3932
- const getNetworkInfo = React14.useCallback(
3934
+ const getNetworkInfo = React15.useCallback(
3933
3935
  react.createGetNetworkInfo({ client, rpcOverrides: config.rpcOverrides }),
3934
3936
  [client, config.rpcOverrides]
3935
3937
  );
3936
- React14.useEffect(() => {
3938
+ React15.useEffect(() => {
3937
3939
  let cancelled = false;
3938
3940
  const loadChainName = async () => {
3939
3941
  try {
@@ -3948,7 +3950,7 @@ function WalletTransferView({
3948
3950
  cancelled = true;
3949
3951
  };
3950
3952
  }, [getNetworkInfo, chainId]);
3951
- const connectWallet = React14.useCallback(async (wallet) => {
3953
+ const connectWallet = React15.useCallback(async (wallet) => {
3952
3954
  setIsConnecting(true);
3953
3955
  setError(null);
3954
3956
  try {
@@ -3972,7 +3974,7 @@ function WalletTransferView({
3972
3974
  setIsConnecting(false);
3973
3975
  }
3974
3976
  }, [chainId, asset]);
3975
- const fetchBalance = React14.useCallback(async (provider, address, currentChain) => {
3977
+ const fetchBalance = React15.useCallback(async (provider, address, currentChain) => {
3976
3978
  try {
3977
3979
  if (currentChain !== chainId) {
3978
3980
  setBalance(null);
@@ -3997,7 +3999,7 @@ function WalletTransferView({
3997
3999
  setBalance(BigInt(0));
3998
4000
  }
3999
4001
  }, [chainId, asset]);
4000
- const switchNetwork = React14.useCallback(async () => {
4002
+ const switchNetwork = React15.useCallback(async () => {
4001
4003
  if (!selectedWallet?.provider) return;
4002
4004
  try {
4003
4005
  await selectedWallet.provider.request({
@@ -4015,7 +4017,7 @@ function WalletTransferView({
4015
4017
  setError(err instanceof Error ? err.message : "Failed to switch network");
4016
4018
  }
4017
4019
  }, [selectedWallet, chainId, connectedAddress, fetchBalance]);
4018
- const executeTransfer = React14.useCallback(async () => {
4020
+ const executeTransfer = React15.useCallback(async () => {
4019
4021
  if (!selectedWallet?.provider || !connectedAddress || !amount) return;
4020
4022
  setIsTransferring(true);
4021
4023
  setError(null);
@@ -4058,7 +4060,7 @@ function WalletTransferView({
4058
4060
  setIsTransferring(false);
4059
4061
  }
4060
4062
  }, [selectedWallet, connectedAddress, amount, decimals, balance, asset, destinationAddress, onSuccess, t]);
4061
- const setMaxAmount = React14.useCallback(() => {
4063
+ const setMaxAmount = React15.useCallback(() => {
4062
4064
  if (balance !== null) {
4063
4065
  const formatted = formatUnits(balance, decimals);
4064
4066
  setAmount(formatted);
@@ -4424,7 +4426,7 @@ var DepositCompletedToast = ({
4424
4426
  symbol
4425
4427
  }) => {
4426
4428
  const { t } = useI18n();
4427
- const [expanded, setExpanded] = React14.useState(false);
4429
+ const [expanded, setExpanded] = React15.useState(false);
4428
4430
  const formatAmount = (amount) => {
4429
4431
  const divisor = BigInt(10 ** decimals);
4430
4432
  const whole = amount / divisor;
@@ -4584,11 +4586,11 @@ function DepositQRView(props) {
4584
4586
  const { t } = useI18n();
4585
4587
  const { config } = react.useVolrContext();
4586
4588
  const { client } = react.useInternalAuth();
4587
- const [chainName, setChainName] = React14.useState(null);
4588
- const [showOtherTokenModal, setShowOtherTokenModal] = React14.useState(false);
4589
- const [showToast, setShowToast] = React14.useState(false);
4590
- const [toastData, setToastData] = React14.useState(null);
4591
- const [viewMode, setViewMode] = React14.useState("qr");
4589
+ const [chainName, setChainName] = React15.useState(null);
4590
+ const [showOtherTokenModal, setShowOtherTokenModal] = React15.useState(false);
4591
+ const [showToast, setShowToast] = React15.useState(false);
4592
+ const [toastData, setToastData] = React15.useState(null);
4593
+ const [viewMode, setViewMode] = React15.useState("qr");
4592
4594
  const eip681 = `ethereum:${props.address}`;
4593
4595
  const status = react.useDepositListener({
4594
4596
  chainId: props.chainId,
@@ -4601,7 +4603,7 @@ function DepositQRView(props) {
4601
4603
  },
4602
4604
  address: props.address
4603
4605
  });
4604
- React14.useEffect(() => {
4606
+ React15.useEffect(() => {
4605
4607
  if (status.state === "detected") {
4606
4608
  setToastData({
4607
4609
  previousBalance: status.previousBalance,
@@ -4612,11 +4614,11 @@ function DepositQRView(props) {
4612
4614
  props.onDepositDetected?.();
4613
4615
  }
4614
4616
  }, [status, props.onDepositDetected]);
4615
- const getNetworkInfo = React14.useCallback(
4617
+ const getNetworkInfo = React15.useCallback(
4616
4618
  react.createGetNetworkInfo({ client, rpcOverrides: config.rpcOverrides }),
4617
4619
  [client, config.rpcOverrides]
4618
4620
  );
4619
- React14.useEffect(() => {
4621
+ React15.useEffect(() => {
4620
4622
  let cancelled = false;
4621
4623
  const loadChainName = async () => {
4622
4624
  try {
@@ -4927,12 +4929,8 @@ function AccountMainView({
4927
4929
  isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:animate-pulse volr:text-center volr:w-full", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:h-16 volr:w-48 volr:bg-slate-200 volr:rounded-lg" }) }) : /* @__PURE__ */ jsxRuntime.jsx(
4928
4930
  "p",
4929
4931
  {
4930
- className: "volr:leading-none volr:font-semibold volr:text-slate-900 volr:tracking-tight volr:text-center",
4931
- style: {
4932
- fontSize: "3rem",
4933
- lineHeight: "1",
4934
- fontWeight: 600
4935
- },
4932
+ className: "volr:font-semibold volr:text-slate-900 volr:tracking-tight volr:text-center",
4933
+ style: { fontSize: "3rem" },
4936
4934
  children: formattedUsd
4937
4935
  }
4938
4936
  ),
@@ -5063,7 +5061,7 @@ function BalanceDetailView({
5063
5061
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: balances.map((token) => /* @__PURE__ */ jsxRuntime.jsx(TokenRow, { token }, token.id)) })
5064
5062
  ] });
5065
5063
  }
5066
- var Input = React14__default.default.forwardRef(
5064
+ var Input = React15__default.default.forwardRef(
5067
5065
  ({ leftIcon, error, className, style, disabled, ...props }, ref) => {
5068
5066
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:relative", children: [
5069
5067
  leftIcon && /* @__PURE__ */ jsxRuntime.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 }),
@@ -5095,23 +5093,23 @@ function WithdrawView({
5095
5093
  const { t } = useI18n();
5096
5094
  const { withdraw, isWithdrawing, result, error, reset } = react.useWithdraw();
5097
5095
  const { client } = react.useInternalAuth();
5098
- const [step, setStep] = React14.useState("select");
5099
- const [selectedTokenId, setSelectedTokenId] = React14.useState(null);
5100
- const [toAddress, setToAddress] = React14.useState("");
5101
- const [amount, setAmount] = React14.useState("");
5102
- const [useConnectedWallet, setUseConnectedWallet] = React14.useState(false);
5103
- const [blockExplorerUrl, setBlockExplorerUrl] = React14.useState(null);
5104
- const selectedToken = React14.useMemo(
5096
+ const [step, setStep] = React15.useState("select");
5097
+ const [selectedTokenId, setSelectedTokenId] = React15.useState(null);
5098
+ const [toAddress, setToAddress] = React15.useState("");
5099
+ const [amount, setAmount] = React15.useState("");
5100
+ const [useConnectedWallet, setUseConnectedWallet] = React15.useState(false);
5101
+ const [blockExplorerUrl, setBlockExplorerUrl] = React15.useState(null);
5102
+ const selectedToken = React15.useMemo(
5105
5103
  () => balances.find((b) => b.id === selectedTokenId),
5106
5104
  [balances, selectedTokenId]
5107
5105
  );
5108
5106
  const selectedChainId = selectedToken?.chainId ?? null;
5109
- const connectedAddress = React14.useMemo(() => {
5107
+ const connectedAddress = React15.useMemo(() => {
5110
5108
  if (!connectedWallet) return null;
5111
5109
  const parts = connectedWallet.split(":");
5112
5110
  return parts.length >= 2 ? parts[1] : null;
5113
5111
  }, [connectedWallet]);
5114
- React14.useEffect(() => {
5112
+ React15.useEffect(() => {
5115
5113
  if (!selectedChainId) {
5116
5114
  setBlockExplorerUrl(null);
5117
5115
  return;
@@ -5132,7 +5130,7 @@ function WithdrawView({
5132
5130
  cancelled = true;
5133
5131
  };
5134
5132
  }, [client, selectedChainId]);
5135
- const explorerTxUrl = React14.useMemo(() => {
5133
+ const explorerTxUrl = React15.useMemo(() => {
5136
5134
  if (!blockExplorerUrl || !result?.txHash) return null;
5137
5135
  const trimmedBase = blockExplorerUrl.replace(/\/$/, "");
5138
5136
  return `${trimmedBase}/tx/${result.txHash}`;
@@ -5171,7 +5169,7 @@ function WithdrawView({
5171
5169
  setAmount("");
5172
5170
  setUseConnectedWallet(false);
5173
5171
  };
5174
- const isAmountValid = React14.useMemo(() => {
5172
+ const isAmountValid = React15.useMemo(() => {
5175
5173
  if (!amount || !selectedToken) return false;
5176
5174
  const num = parseFloat(amount);
5177
5175
  if (isNaN(num) || num <= 0) return false;
@@ -5506,10 +5504,10 @@ function PaymentRow({ payment, onClick }) {
5506
5504
  function PaymentHistoryView({ onSelectPayment }) {
5507
5505
  const { t } = useI18n();
5508
5506
  const { getPaymentHistory, isLoading: isApiLoading } = react.useVolrPaymentApi();
5509
- const [payments, setPayments] = React14.useState([]);
5510
- const [isLoading, setIsLoading] = React14.useState(true);
5511
- const [error, setError] = React14.useState(null);
5512
- React14.useEffect(() => {
5507
+ const [payments, setPayments] = React15.useState([]);
5508
+ const [isLoading, setIsLoading] = React15.useState(true);
5509
+ const [error, setError] = React15.useState(null);
5510
+ React15.useEffect(() => {
5513
5511
  setIsLoading(true);
5514
5512
  setError(null);
5515
5513
  getPaymentHistory({ take: 20 }).then((result) => {
@@ -5749,21 +5747,21 @@ function AccountModal({ isOpen, onClose, onError }) {
5749
5747
  const { user, logout } = react.useVolrContext();
5750
5748
  const { balances, totalUsd, isLoading, paymentEnabled, refresh } = react.useUserBalances();
5751
5749
  const { client } = react.useInternalAuth();
5752
- const [currentView, setCurrentView] = React14.useState("main");
5753
- const [selectedPayment, setSelectedPayment] = React14.useState(null);
5754
- const [isLoggingOut, setIsLoggingOut] = React14.useState(false);
5755
- const [lastUpdatedAt, setLastUpdatedAt] = React14.useState(null);
5756
- const [isRefreshing, setIsRefreshing] = React14.useState(false);
5757
- const prevUserRef = React14.useRef(user ?? null);
5758
- const refreshInFlightRef = React14.useRef(false);
5759
- const lastRefreshRef = React14.useRef(0);
5760
- const [closingAfterLogin, setClosingAfterLogin] = React14.useState(false);
5761
- const [setupStep, setSetupStep] = React14.useState("prompt");
5762
- const [depositAssets, setDepositAssets] = React14.useState([]);
5763
- const [depositLoading, setDepositLoading] = React14.useState(false);
5764
- const [depositError, setDepositError] = React14.useState(null);
5765
- const [depositSelectedIdx, setDepositSelectedIdx] = React14.useState(-1);
5766
- const refreshBalances = React14.useCallback(async () => {
5750
+ const [currentView, setCurrentView] = React15.useState("main");
5751
+ const [selectedPayment, setSelectedPayment] = React15.useState(null);
5752
+ const [isLoggingOut, setIsLoggingOut] = React15.useState(false);
5753
+ const [lastUpdatedAt, setLastUpdatedAt] = React15.useState(null);
5754
+ const [isRefreshing, setIsRefreshing] = React15.useState(false);
5755
+ const prevUserRef = React15.useRef(user ?? null);
5756
+ const refreshInFlightRef = React15.useRef(false);
5757
+ const lastRefreshRef = React15.useRef(0);
5758
+ const [closingAfterLogin, setClosingAfterLogin] = React15.useState(false);
5759
+ const [setupStep, setSetupStep] = React15.useState("prompt");
5760
+ const [depositAssets, setDepositAssets] = React15.useState([]);
5761
+ const [depositLoading, setDepositLoading] = React15.useState(false);
5762
+ const [depositError, setDepositError] = React15.useState(null);
5763
+ const [depositSelectedIdx, setDepositSelectedIdx] = React15.useState(-1);
5764
+ const refreshBalances = React15.useCallback(async () => {
5767
5765
  if (!isOpen) return;
5768
5766
  const now = Date.now();
5769
5767
  if (refreshInFlightRef.current) return;
@@ -5783,10 +5781,10 @@ function AccountModal({ isOpen, onClose, onError }) {
5783
5781
  setIsRefreshing(false);
5784
5782
  }
5785
5783
  }, [isOpen, refresh]);
5786
- const handleManualRefresh = React14.useCallback(() => {
5784
+ const handleManualRefresh = React15.useCallback(() => {
5787
5785
  void refreshBalances();
5788
5786
  }, [refreshBalances]);
5789
- React14.useEffect(() => {
5787
+ React15.useEffect(() => {
5790
5788
  if (currentView !== "deposit" || !isOpen) return;
5791
5789
  setDepositLoading(true);
5792
5790
  setDepositError(null);
@@ -5803,11 +5801,11 @@ function AccountModal({ isOpen, onClose, onError }) {
5803
5801
  setDepositLoading(false);
5804
5802
  });
5805
5803
  }, [currentView, isOpen, client]);
5806
- React14.useEffect(() => {
5804
+ React15.useEffect(() => {
5807
5805
  if (!isOpen) return;
5808
5806
  void refreshBalances();
5809
5807
  }, [isOpen, currentView, refreshBalances]);
5810
- React14.useEffect(() => {
5808
+ React15.useEffect(() => {
5811
5809
  if (!isOpen || typeof document === "undefined") return;
5812
5810
  const handleFocus = () => {
5813
5811
  if (document.visibilityState === "visible") {
@@ -5821,7 +5819,7 @@ function AccountModal({ isOpen, onClose, onError }) {
5821
5819
  document.removeEventListener("visibilitychange", handleFocus);
5822
5820
  };
5823
5821
  }, [isOpen, refreshBalances]);
5824
- React14.useEffect(() => {
5822
+ React15.useEffect(() => {
5825
5823
  if (!isOpen) return;
5826
5824
  const intervalId = window.setInterval(() => {
5827
5825
  void refreshBalances();
@@ -5830,7 +5828,7 @@ function AccountModal({ isOpen, onClose, onError }) {
5830
5828
  clearInterval(intervalId);
5831
5829
  };
5832
5830
  }, [isOpen, refreshBalances]);
5833
- const handleOpenChange = React14.useCallback((open) => {
5831
+ const handleOpenChange = React15.useCallback((open) => {
5834
5832
  if (!open) {
5835
5833
  onClose();
5836
5834
  setTimeout(() => {
@@ -5840,7 +5838,7 @@ function AccountModal({ isOpen, onClose, onError }) {
5840
5838
  }, 200);
5841
5839
  }
5842
5840
  }, [onClose]);
5843
- React14.useEffect(() => {
5841
+ React15.useEffect(() => {
5844
5842
  if (!isOpen) {
5845
5843
  setClosingAfterLogin(false);
5846
5844
  prevUserRef.current = user ?? null;
@@ -6011,11 +6009,11 @@ var DepositModal = ({
6011
6009
  }) => {
6012
6010
  const { user } = react.useVolrContext();
6013
6011
  const { client } = react.useInternalAuth();
6014
- const [depositAssets, setDepositAssets] = React14.useState([]);
6015
- const [isLoading, setIsLoading] = React14.useState(true);
6016
- const [error, setError] = React14.useState(null);
6017
- const [selectedIdx, setSelectedIdx] = React14.useState(-1);
6018
- React14.useEffect(() => {
6012
+ const [depositAssets, setDepositAssets] = React15.useState([]);
6013
+ const [isLoading, setIsLoading] = React15.useState(true);
6014
+ const [error, setError] = React15.useState(null);
6015
+ const [selectedIdx, setSelectedIdx] = React15.useState(-1);
6016
+ React15.useEffect(() => {
6019
6017
  if (!open) return;
6020
6018
  setIsLoading(true);
6021
6019
  setError(null);
@@ -6042,12 +6040,12 @@ var DepositModal = ({
6042
6040
  if (depositAssets.length === 1) return 0;
6043
6041
  return -1;
6044
6042
  };
6045
- React14.useEffect(() => {
6043
+ React15.useEffect(() => {
6046
6044
  if (open && !isLoading && depositAssets.length > 0) {
6047
6045
  setSelectedIdx(getInitialIndex());
6048
6046
  }
6049
6047
  }, [open, isLoading, depositAssets.length, asset]);
6050
- React14.useEffect(() => {
6048
+ React15.useEffect(() => {
6051
6049
  if (!open) {
6052
6050
  setSelectedIdx(-1);
6053
6051
  }
@@ -6200,12 +6198,12 @@ function paymentModalReducer(state, action) {
6200
6198
  }
6201
6199
  }
6202
6200
  function usePaymentModalState(open, onOpenChange) {
6203
- const { user } = react.useVolrContext();
6201
+ const { user, setUser } = react.useVolrContext();
6204
6202
  const { client } = react.useInternalAuth();
6205
6203
  const { evm } = react.useVolr();
6206
6204
  const { paymentOptions } = useVolrModal();
6207
6205
  const { createPayment, updatePaymentToProcessing, pollPaymentStatus, failPendingPayment } = react.useVolrPaymentApi();
6208
- const [state, dispatch] = React14.useReducer(paymentModalReducer, initialState);
6206
+ const [state, dispatch] = React15.useReducer(paymentModalReducer, initialState);
6209
6207
  const tokensWithBalances = state.tokens.map((token) => {
6210
6208
  const balanceData = state.tokenBalances.get(token.id);
6211
6209
  return {
@@ -6217,7 +6215,7 @@ function usePaymentModalState(open, onOpenChange) {
6217
6215
  });
6218
6216
  const selectedToken = state.selectedTokenId ? tokensWithBalances.find((t) => t.id === state.selectedTokenId) ?? null : null;
6219
6217
  const isBalanceLoading = tokensWithBalances.some((t) => t.isBalanceLoading);
6220
- const fetchTokenBalance = React14.useCallback(
6218
+ const fetchTokenBalance = React15.useCallback(
6221
6219
  async (token) => {
6222
6220
  if (!user?.evmAddress) {
6223
6221
  dispatch({
@@ -6265,20 +6263,20 @@ function usePaymentModalState(open, onOpenChange) {
6265
6263
  },
6266
6264
  [user, evm]
6267
6265
  );
6268
- const fetchAllBalances = React14.useCallback(
6266
+ const fetchAllBalances = React15.useCallback(
6269
6267
  async (tokens) => {
6270
6268
  await Promise.all(tokens.map((token) => fetchTokenBalance(token)));
6271
6269
  },
6272
6270
  [fetchTokenBalance]
6273
6271
  );
6274
- const fetchBranding = React14.useCallback(async () => {
6272
+ const fetchBranding = React15.useCallback(async () => {
6275
6273
  try {
6276
6274
  const response = await client.get("/auth/branding");
6277
6275
  dispatch({ type: "SET_LOGO_URL", logoUrl: response.logoUrl });
6278
6276
  } catch {
6279
6277
  }
6280
6278
  }, [client]);
6281
- const fetchPaymentConfig = React14.useCallback(async () => {
6279
+ const fetchPaymentConfig = React15.useCallback(async () => {
6282
6280
  dispatch({ type: "SET_CONFIG_LOADING", loading: true });
6283
6281
  try {
6284
6282
  const response = await client.get("/payments/config");
@@ -6295,7 +6293,7 @@ function usePaymentModalState(open, onOpenChange) {
6295
6293
  dispatch({ type: "SET_CONFIG_LOADING", loading: false });
6296
6294
  }
6297
6295
  }, [client, fetchAllBalances]);
6298
- const selectBestToken = React14.useCallback(() => {
6296
+ const selectBestToken = React15.useCallback(() => {
6299
6297
  if (state.tokens.length === 0) return;
6300
6298
  if (state.selectedTokenId) return;
6301
6299
  let bestTokenId = state.tokens[0].id;
@@ -6309,7 +6307,7 @@ function usePaymentModalState(open, onOpenChange) {
6309
6307
  }
6310
6308
  dispatch({ type: "SELECT_TOKEN", tokenId: bestTokenId });
6311
6309
  }, [state.tokens, state.tokenBalances, state.selectedTokenId]);
6312
- React14.useEffect(() => {
6310
+ React15.useEffect(() => {
6313
6311
  if (open && paymentOptions?.options) {
6314
6312
  if (state.step === "processing" || state.step === "result") {
6315
6313
  return;
@@ -6321,15 +6319,15 @@ function usePaymentModalState(open, onOpenChange) {
6321
6319
  dispatch({ type: "RESET" });
6322
6320
  }
6323
6321
  }, [open, paymentOptions?.options?.amount]);
6324
- React14.useEffect(() => {
6322
+ React15.useEffect(() => {
6325
6323
  if (!isBalanceLoading && state.tokens.length > 0 && !state.selectedTokenId) {
6326
6324
  selectBestToken();
6327
6325
  }
6328
6326
  }, [isBalanceLoading, state.tokens.length, state.selectedTokenId, selectBestToken]);
6329
- const handleSelectToken = React14.useCallback((tokenId) => {
6327
+ const handleSelectToken = React15.useCallback((tokenId) => {
6330
6328
  dispatch({ type: "SELECT_TOKEN", tokenId });
6331
6329
  }, []);
6332
- const handleWalletBack = React14.useCallback(() => {
6330
+ const handleWalletBack = React15.useCallback(() => {
6333
6331
  if (state.step !== "wallet") {
6334
6332
  return;
6335
6333
  }
@@ -6339,13 +6337,29 @@ function usePaymentModalState(open, onOpenChange) {
6339
6337
  }
6340
6338
  dispatch({ type: "SHOW_WALLET", walletStep: "choice" });
6341
6339
  }, [state.step, state.walletStep]);
6342
- const handleChooseCreateAccount = React14.useCallback(() => {
6340
+ const handleChooseCreateAccount = React15.useCallback(() => {
6343
6341
  dispatch({ type: "SHOW_WALLET", walletStep: "create-account" });
6344
6342
  }, []);
6345
- const handleChooseExternalWallet = React14.useCallback(() => {
6343
+ const saveExternalWalletPreference = React15.useCallback(async () => {
6344
+ if (!user?.id) return;
6345
+ if (user.externalWalletPreferred) return;
6346
+ try {
6347
+ const result = await client.post(
6348
+ "/users/me/preferences",
6349
+ { externalWalletPreferred: true }
6350
+ );
6351
+ const updated = result?.externalWalletPreferred ?? true;
6352
+ setUser({ ...user, externalWalletPreferred: updated });
6353
+ } catch (err) {
6354
+ console.warn("[PaymentModal] Failed to save external wallet preference:", err);
6355
+ setUser({ ...user, externalWalletPreferred: true });
6356
+ }
6357
+ }, [client, user, setUser]);
6358
+ const handleChooseExternalWallet = React15.useCallback(() => {
6359
+ void saveExternalWalletPreference();
6346
6360
  dispatch({ type: "SHOW_WALLET", walletStep: "external-wallet" });
6347
- }, []);
6348
- const handlePay = React14.useCallback(async () => {
6361
+ }, [saveExternalWalletPreference]);
6362
+ const handlePay = React15.useCallback(async () => {
6349
6363
  const { payOptions, receiverAddress, selectedTokenId } = state;
6350
6364
  if (!payOptions || !paymentOptions || !receiverAddress || !selectedTokenId) {
6351
6365
  return;
@@ -6467,7 +6481,7 @@ function usePaymentModalState(open, onOpenChange) {
6467
6481
  pollPaymentStatus,
6468
6482
  failPendingPayment
6469
6483
  ]);
6470
- const handleExternalWalletConnected = React14.useCallback(
6484
+ const handleExternalWalletConnected = React15.useCallback(
6471
6485
  async ({ provider, address }) => {
6472
6486
  const { payOptions, receiverAddress, selectedTokenId } = state;
6473
6487
  if (!payOptions || !paymentOptions || !receiverAddress || !selectedTokenId) {
@@ -6477,6 +6491,7 @@ function usePaymentModalState(open, onOpenChange) {
6477
6491
  if (!tokenInfo) {
6478
6492
  return;
6479
6493
  }
6494
+ const permitType = tokenInfo.permitType ?? (tokenInfo.permitSupported ? "EIP2612" : "NONE");
6480
6495
  if (tokenInfo.address === "native") {
6481
6496
  dispatch({
6482
6497
  type: "PAYMENT_ERROR",
@@ -6487,6 +6502,16 @@ function usePaymentModalState(open, onOpenChange) {
6487
6502
  });
6488
6503
  return;
6489
6504
  }
6505
+ if (permitType !== "EIP2612") {
6506
+ dispatch({
6507
+ type: "PAYMENT_ERROR",
6508
+ error: {
6509
+ code: "TOKEN_NOT_SUPPORTED",
6510
+ message: "External wallet payment is not supported for this token."
6511
+ }
6512
+ });
6513
+ return;
6514
+ }
6490
6515
  dispatch({ type: "START_PAYMENT" });
6491
6516
  let createdPaymentId = null;
6492
6517
  const toPaymentError = (err) => {
@@ -6601,10 +6626,10 @@ function usePaymentModalState(open, onOpenChange) {
6601
6626
  failPendingPayment
6602
6627
  ]
6603
6628
  );
6604
- const handleDeposit = React14.useCallback(() => {
6629
+ const handleDeposit = React15.useCallback(() => {
6605
6630
  dispatch({ type: "SHOW_DEPOSIT" });
6606
6631
  }, []);
6607
- const handleDepositClose = React14.useCallback(
6632
+ const handleDepositClose = React15.useCallback(
6608
6633
  (depositOpen) => {
6609
6634
  if (!depositOpen) {
6610
6635
  dispatch({ type: "HIDE_DEPOSIT" });
@@ -6615,19 +6640,19 @@ function usePaymentModalState(open, onOpenChange) {
6615
6640
  },
6616
6641
  [state.tokens, fetchAllBalances]
6617
6642
  );
6618
- const handleDone = React14.useCallback(() => {
6643
+ const handleDone = React15.useCallback(() => {
6619
6644
  if (state.createdPayment?.status === "CONFIRMED") {
6620
6645
  paymentOptions?.onComplete?.(state.createdPayment);
6621
6646
  }
6622
6647
  onOpenChange(false);
6623
6648
  }, [state.createdPayment, paymentOptions, onOpenChange]);
6624
- const handleRetry = React14.useCallback(() => {
6649
+ const handleRetry = React15.useCallback(() => {
6625
6650
  dispatch({ type: "RETRY" });
6626
6651
  if (state.tokens.length > 0) {
6627
6652
  fetchAllBalances(state.tokens);
6628
6653
  }
6629
6654
  }, [state.tokens, fetchAllBalances]);
6630
- const handleClose = React14.useCallback(() => {
6655
+ const handleClose = React15.useCallback(() => {
6631
6656
  if (state.step === "processing") {
6632
6657
  return;
6633
6658
  }
@@ -6636,7 +6661,7 @@ function usePaymentModalState(open, onOpenChange) {
6636
6661
  }
6637
6662
  onOpenChange(false);
6638
6663
  }, [state.step, paymentOptions, onOpenChange]);
6639
- const handleReport = React14.useCallback(async () => {
6664
+ const handleReport = React15.useCallback(async () => {
6640
6665
  const { createdPayment, error, step, txHash, selectedTokenId } = state;
6641
6666
  const tokenInfo = state.tokens.find((t) => t.id === selectedTokenId);
6642
6667
  if (!createdPayment || !error) return;
@@ -6795,10 +6820,10 @@ var TokenSelector = ({
6795
6820
  onSelect,
6796
6821
  disabled = false
6797
6822
  }) => {
6798
- const [isOpen, setIsOpen] = React14.useState(false);
6799
- const dropdownRef = React14.useRef(null);
6823
+ const [isOpen, setIsOpen] = React15.useState(false);
6824
+ const dropdownRef = React15.useRef(null);
6800
6825
  const selectedToken = tokens.find((t) => t.id === selectedTokenId);
6801
- React14.useEffect(() => {
6826
+ React15.useEffect(() => {
6802
6827
  const handleClickOutside = (event) => {
6803
6828
  if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
6804
6829
  setIsOpen(false);
@@ -6950,9 +6975,15 @@ var PaymentInfoView = ({
6950
6975
  logoUrl,
6951
6976
  onPay,
6952
6977
  onDeposit,
6978
+ onChooseCreateAccount,
6979
+ onChooseExternalWallet,
6953
6980
  isPaying,
6954
6981
  isBalanceLoading,
6955
- disableBalanceCheck = false
6982
+ disableBalanceCheck = false,
6983
+ walletChoiceMode = false,
6984
+ showExternalWallet = false,
6985
+ createAccountLabel = "Create wallet",
6986
+ externalWalletLabel = "Use my wallet"
6956
6987
  }) => {
6957
6988
  const selectedToken = tokens.find((t) => t.id === selectedTokenId);
6958
6989
  const tokenSymbol = selectedToken?.symbol ?? "";
@@ -7008,7 +7039,18 @@ var PaymentInfoView = ({
7008
7039
  isInsufficient: !!isInsufficient
7009
7040
  }
7010
7041
  ) }),
7011
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:space-y-3", children: [
7042
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "volr:space-y-3", children: walletChoiceMode ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7043
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { onClick: onChooseCreateAccount, className: "volr:w-full", children: createAccountLabel }),
7044
+ showExternalWallet && /* @__PURE__ */ jsxRuntime.jsx(
7045
+ Button,
7046
+ {
7047
+ variant: "secondary",
7048
+ onClick: onChooseExternalWallet,
7049
+ className: "volr:w-full",
7050
+ children: externalWalletLabel
7051
+ }
7052
+ )
7053
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7012
7054
  /* @__PURE__ */ jsxRuntime.jsx(
7013
7055
  Button,
7014
7056
  {
@@ -7045,8 +7087,18 @@ var PaymentInfoView = ({
7045
7087
  isInsufficient && selectedToken && !disableBalanceCheck && /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "secondary", onClick: onDeposit, className: "volr:w-full", children: [
7046
7088
  "Deposit ",
7047
7089
  tokenSymbol
7048
- ] })
7049
- ] }),
7090
+ ] }),
7091
+ showExternalWallet && /* @__PURE__ */ jsxRuntime.jsx(
7092
+ Button,
7093
+ {
7094
+ variant: "ghost",
7095
+ size: "sm",
7096
+ onClick: onChooseExternalWallet,
7097
+ className: "volr:w-full volr:underline volr:underline-offset-4",
7098
+ children: externalWalletLabel
7099
+ }
7100
+ )
7101
+ ] }) }),
7050
7102
  /* @__PURE__ */ jsxRuntime.jsx(PoweredBy, {})
7051
7103
  ] });
7052
7104
  };
@@ -7235,6 +7287,7 @@ var PaymentResultView = ({
7235
7287
  };
7236
7288
  function PaymentWalletChoiceView({
7237
7289
  isExternalWalletEnabled,
7290
+ showExternalWallet = true,
7238
7291
  externalWalletDisabledReason,
7239
7292
  onChooseExternalWallet,
7240
7293
  onChooseCreateAccount
@@ -7246,17 +7299,19 @@ function PaymentWalletChoiceView({
7246
7299
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-sm volr:text-slate-600 volr:leading-relaxed", children: t("payment.walletChoice.description") })
7247
7300
  ] }),
7248
7301
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:flex volr:flex-col volr:gap-2", children: [
7249
- /* @__PURE__ */ jsxRuntime.jsx(
7250
- Button,
7251
- {
7252
- className: "volr:w-full",
7253
- variant: "secondary",
7254
- onClick: onChooseExternalWallet,
7255
- disabled: !isExternalWalletEnabled,
7256
- children: t("payment.walletChoice.externalCta")
7257
- }
7258
- ),
7259
- !isExternalWalletEnabled && externalWalletDisabledReason && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:text-slate-500 volr:leading-relaxed", children: externalWalletDisabledReason }),
7302
+ showExternalWallet && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7303
+ /* @__PURE__ */ jsxRuntime.jsx(
7304
+ Button,
7305
+ {
7306
+ className: "volr:w-full",
7307
+ variant: "secondary",
7308
+ onClick: onChooseExternalWallet,
7309
+ disabled: !isExternalWalletEnabled,
7310
+ children: t("payment.walletChoice.externalCta")
7311
+ }
7312
+ ),
7313
+ !isExternalWalletEnabled && externalWalletDisabledReason && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "volr:text-xs volr:text-slate-500 volr:leading-relaxed", children: externalWalletDisabledReason })
7314
+ ] }),
7260
7315
  /* @__PURE__ */ jsxRuntime.jsx(Button, { className: "volr:w-full", onClick: onChooseCreateAccount, children: t("payment.walletChoice.createAccountCta") })
7261
7316
  ] })
7262
7317
  ] });
@@ -7305,9 +7360,9 @@ function PaymentExternalWalletView({
7305
7360
  }) {
7306
7361
  const { t } = useI18n();
7307
7362
  const { isDetecting, getWalletsForDisplay, hasWallet } = react.useEIP6963();
7308
- const wallets = React14.useMemo(() => getWalletsForDisplay(), [getWalletsForDisplay]);
7309
- const [isConnecting, setIsConnecting] = React14.useState(false);
7310
- const [error, setError] = React14.useState(null);
7363
+ const wallets = React15.useMemo(() => getWalletsForDisplay(), [getWalletsForDisplay]);
7364
+ const [isConnecting, setIsConnecting] = React15.useState(false);
7365
+ const [error, setError] = React15.useState(null);
7311
7366
  const connect = async (wallet) => {
7312
7367
  setIsConnecting(true);
7313
7368
  setError(null);
@@ -7370,7 +7425,8 @@ var PaymentModal = ({
7370
7425
  onOpenChange
7371
7426
  }) => {
7372
7427
  const { t } = useI18n();
7373
- const { user } = react.useVolrContext();
7428
+ const { user, config } = react.useVolrContext();
7429
+ const { allowExternalWalletPayment } = useVolrUI();
7374
7430
  const { paymentOptions } = useVolrModal();
7375
7431
  const {
7376
7432
  state,
@@ -7406,6 +7462,26 @@ var PaymentModal = ({
7406
7462
  showDeposit,
7407
7463
  walletStep
7408
7464
  } = state;
7465
+ const requiresVolrWallet = config.walletPolicy?.requireVolrWalletOnLogin ?? true;
7466
+ const hasVolrWallet = Boolean(user?.evmAddress);
7467
+ const externalWalletAllowed = allowExternalWalletPayment && !requiresVolrWallet;
7468
+ const resolvedPermitType = selectedToken?.permitType ?? (selectedToken?.permitSupported ? "EIP2612" : "NONE");
7469
+ const externalWalletTokenSupported = selectedToken && selectedToken.address !== "native" && resolvedPermitType === "EIP2612";
7470
+ const showExternalWalletOption = externalWalletAllowed && externalWalletTokenSupported;
7471
+ const permit2WarnedRef = React15__default.default.useRef(false);
7472
+ React15__default.default.useEffect(() => {
7473
+ if (!permit2WarnedRef.current && externalWalletAllowed && resolvedPermitType === "PERMIT2" && !selectedToken?.permit2Address) {
7474
+ console.warn(
7475
+ `[volr/react-ui] External wallet payment hidden: permit2Address is not configured for chain ${selectedToken?.chainId}.`
7476
+ );
7477
+ permit2WarnedRef.current = true;
7478
+ }
7479
+ }, [
7480
+ externalWalletAllowed,
7481
+ resolvedPermitType,
7482
+ selectedToken?.permit2Address,
7483
+ selectedToken?.chainId
7484
+ ]);
7409
7485
  if (showDeposit && selectedToken) {
7410
7486
  return /* @__PURE__ */ jsxRuntime.jsx(
7411
7487
  DepositModal,
@@ -7456,14 +7532,20 @@ var PaymentModal = ({
7456
7532
  onDeposit: handleDeposit,
7457
7533
  isPaying,
7458
7534
  isBalanceLoading,
7459
- disableBalanceCheck: !user?.evmAddress
7535
+ disableBalanceCheck: !user?.evmAddress,
7536
+ walletChoiceMode: !hasVolrWallet,
7537
+ onChooseCreateAccount: handleChooseCreateAccount,
7538
+ onChooseExternalWallet: handleChooseExternalWallet,
7539
+ showExternalWallet: showExternalWalletOption,
7540
+ createAccountLabel: t("payment.walletChoice.createAccountCta"),
7541
+ externalWalletLabel: t("payment.walletChoice.externalInlineCta")
7460
7542
  }
7461
7543
  ),
7462
7544
  step === "wallet" && walletStep === "choice" && selectedToken && /* @__PURE__ */ jsxRuntime.jsx(
7463
7545
  PaymentWalletChoiceView,
7464
7546
  {
7465
- isExternalWalletEnabled: selectedToken.address !== "native",
7466
- externalWalletDisabledReason: selectedToken.address === "native" ? t("payment.walletChoice.externalDisabledNative") : void 0,
7547
+ isExternalWalletEnabled: showExternalWalletOption,
7548
+ showExternalWallet: showExternalWalletOption,
7467
7549
  onChooseExternalWallet: handleChooseExternalWallet,
7468
7550
  onChooseCreateAccount: handleChooseCreateAccount
7469
7551
  }
@@ -7501,19 +7583,19 @@ var PaymentModal = ({
7501
7583
  )
7502
7584
  ] });
7503
7585
  };
7504
- var SignRequestContext = React14.createContext(null);
7586
+ var SignRequestContext = React15.createContext(null);
7505
7587
  function SignRequestProvider({ children }) {
7506
- const [pendingRequest, setPendingRequest] = React14.useState(null);
7507
- const resolveRef = React14.useRef(null);
7508
- const rejectRef = React14.useRef(null);
7509
- const requestSign = React14.useCallback((request) => {
7588
+ const [pendingRequest, setPendingRequest] = React15.useState(null);
7589
+ const resolveRef = React15.useRef(null);
7590
+ const rejectRef = React15.useRef(null);
7591
+ const requestSign = React15.useCallback((request) => {
7510
7592
  return new Promise((resolve, reject2) => {
7511
7593
  setPendingRequest(request);
7512
7594
  resolveRef.current = resolve;
7513
7595
  rejectRef.current = reject2;
7514
7596
  });
7515
7597
  }, []);
7516
- const approve = React14.useCallback(() => {
7598
+ const approve = React15.useCallback(() => {
7517
7599
  if (resolveRef.current) {
7518
7600
  resolveRef.current();
7519
7601
  resolveRef.current = null;
@@ -7521,7 +7603,7 @@ function SignRequestProvider({ children }) {
7521
7603
  }
7522
7604
  setPendingRequest(null);
7523
7605
  }, []);
7524
- const reject = React14.useCallback(() => {
7606
+ const reject = React15.useCallback(() => {
7525
7607
  if (rejectRef.current) {
7526
7608
  rejectRef.current(new Error("Sign request cancelled by user"));
7527
7609
  resolveRef.current = null;
@@ -7543,7 +7625,7 @@ function SignRequestProvider({ children }) {
7543
7625
  );
7544
7626
  }
7545
7627
  function useSignRequest() {
7546
- const context = React14.useContext(SignRequestContext);
7628
+ const context = React15.useContext(SignRequestContext);
7547
7629
  if (!context) {
7548
7630
  throw new Error("useSignRequest must be used within SignRequestProvider");
7549
7631
  }
@@ -7552,7 +7634,7 @@ function useSignRequest() {
7552
7634
  };
7553
7635
  }
7554
7636
  function useSignRequestInternal() {
7555
- const context = React14.useContext(SignRequestContext);
7637
+ const context = React15.useContext(SignRequestContext);
7556
7638
  if (!context) {
7557
7639
  throw new Error("useSignRequestInternal must be used within SignRequestProvider");
7558
7640
  }
@@ -7587,7 +7669,7 @@ function MessageSignView({ message }) {
7587
7669
  ] });
7588
7670
  }
7589
7671
  function TypedDataSignView({ typedData }) {
7590
- const [showRawData, setShowRawData] = React14.useState(false);
7672
+ const [showRawData, setShowRawData] = React15.useState(false);
7591
7673
  const { domain, message } = typedData;
7592
7674
  const appName = domain.name;
7593
7675
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:space-y-4", children: [
@@ -7733,12 +7815,12 @@ function SignRequestModal({ open, onOpenChange }) {
7733
7815
  }
7734
7816
  );
7735
7817
  }
7736
- var WalletRequiredContext = React14.createContext(null);
7818
+ var WalletRequiredContext = React15.createContext(null);
7737
7819
  function WalletRequiredProvider({ children }) {
7738
- const [pendingRequest, setPendingRequest] = React14.useState(null);
7739
- const resolveRef = React14.useRef(null);
7740
- const rejectRef = React14.useRef(null);
7741
- const requestWallet = React14.useCallback(
7820
+ const [pendingRequest, setPendingRequest] = React15.useState(null);
7821
+ const resolveRef = React15.useRef(null);
7822
+ const rejectRef = React15.useRef(null);
7823
+ const requestWallet = React15.useCallback(
7742
7824
  (request) => {
7743
7825
  return new Promise((resolve2, reject2) => {
7744
7826
  setPendingRequest(request);
@@ -7748,7 +7830,7 @@ function WalletRequiredProvider({ children }) {
7748
7830
  },
7749
7831
  []
7750
7832
  );
7751
- const resolve = React14.useCallback((provider) => {
7833
+ const resolve = React15.useCallback((provider) => {
7752
7834
  if (resolveRef.current) {
7753
7835
  resolveRef.current(provider);
7754
7836
  resolveRef.current = null;
@@ -7756,7 +7838,7 @@ function WalletRequiredProvider({ children }) {
7756
7838
  }
7757
7839
  setPendingRequest(null);
7758
7840
  }, []);
7759
- const reject = React14.useCallback((error) => {
7841
+ const reject = React15.useCallback((error) => {
7760
7842
  if (rejectRef.current) {
7761
7843
  rejectRef.current(error);
7762
7844
  resolveRef.current = null;
@@ -7773,14 +7855,14 @@ function WalletRequiredProvider({ children }) {
7773
7855
  );
7774
7856
  }
7775
7857
  function useWalletRequired() {
7776
- const ctx = React14.useContext(WalletRequiredContext);
7858
+ const ctx = React15.useContext(WalletRequiredContext);
7777
7859
  if (!ctx) {
7778
7860
  throw new Error("useWalletRequired must be used within WalletRequiredProvider");
7779
7861
  }
7780
7862
  return { requestWallet: ctx.requestWallet };
7781
7863
  }
7782
7864
  function useWalletRequiredInternal() {
7783
- const ctx = React14.useContext(WalletRequiredContext);
7865
+ const ctx = React15.useContext(WalletRequiredContext);
7784
7866
  if (!ctx) {
7785
7867
  throw new Error(
7786
7868
  "useWalletRequiredInternal must be used within WalletRequiredProvider"
@@ -7793,17 +7875,17 @@ function WalletRequiredModal() {
7793
7875
  const { pendingRequest, resolve, reject } = useWalletRequiredInternal();
7794
7876
  const { user, provider } = react.useVolrContext();
7795
7877
  const { keyStorageType } = useVolrUI();
7796
- const [step, setStep] = React14.useState("notice");
7797
- const providerRef = React14.useRef(provider);
7798
- React14.useEffect(() => {
7878
+ const [step, setStep] = React15.useState("notice");
7879
+ const providerRef = React15.useRef(provider);
7880
+ React15.useEffect(() => {
7799
7881
  providerRef.current = provider;
7800
7882
  }, [provider]);
7801
- React14.useEffect(() => {
7883
+ React15.useEffect(() => {
7802
7884
  if (pendingRequest) {
7803
7885
  setStep("notice");
7804
7886
  }
7805
7887
  }, [pendingRequest]);
7806
- const title = React14.useMemo(() => {
7888
+ const title = React15.useMemo(() => {
7807
7889
  if (!pendingRequest) return "";
7808
7890
  if (pendingRequest.type === "transaction") return t("walletRequired.titleTx");
7809
7891
  if (pendingRequest.type === "typedData") return t("walletRequired.titleTypedData");
@@ -7869,7 +7951,7 @@ function WalletRequiredModal() {
7869
7951
  }
7870
7952
  );
7871
7953
  }
7872
- var VolrUIContext = React14__default.default.createContext(null);
7954
+ var VolrUIContext = React15__default.default.createContext(null);
7873
7955
  function getCurrentRpId() {
7874
7956
  if (typeof window === "undefined") return "localhost";
7875
7957
  return window.location.hostname;
@@ -7882,14 +7964,14 @@ function isPasskeyDomainMismatch(user) {
7882
7964
  return !registered.some((p) => p?.rpId === currentRpId);
7883
7965
  }
7884
7966
  var useVolrUI = () => {
7885
- const context = React14.useContext(VolrUIContext);
7967
+ const context = React15.useContext(VolrUIContext);
7886
7968
  if (!context) {
7887
7969
  throw new Error("useVolrUI must be used within VolrUIProvider");
7888
7970
  }
7889
7971
  return context;
7890
7972
  };
7891
7973
  var useVolrUIOptional = () => {
7892
- return React14.useContext(VolrUIContext);
7974
+ return React15.useContext(VolrUIContext);
7893
7975
  };
7894
7976
  function OnboardingFlow({
7895
7977
  keyStorageType,
@@ -7932,23 +8014,24 @@ var VolrUIProvider = ({
7932
8014
  socialProviders = ["google", "twitter"],
7933
8015
  branding,
7934
8016
  keyStorageType = "passkey",
7935
- allowedLocales
8017
+ allowedLocales,
8018
+ allowExternalWalletPayment = false
7936
8019
  } = config;
7937
- const providerPolicy = config.providerPolicy ?? {
7938
- enforceOnFirstLogin: true
8020
+ const walletPolicy = config.walletPolicy ?? {
8021
+ requireVolrWalletOnLogin: true
7939
8022
  };
7940
- const [keyStorageTypeError, setKeyStorageTypeError] = React14.useState(
8023
+ const [keyStorageTypeError, setKeyStorageTypeError] = React15.useState(
7941
8024
  null
7942
8025
  );
7943
- React14.useEffect(() => {
7944
- if (providerPolicy.enforceOnFirstLogin !== false && !keyStorageType) {
8026
+ React15.useEffect(() => {
8027
+ if (walletPolicy.requireVolrWalletOnLogin !== false && !keyStorageType) {
7945
8028
  const errorMessage = "keyStorageType must be specified in VolrUIProvider props. Please set keyStorageType prop in VolrUIProvider.";
7946
8029
  console.error(errorMessage);
7947
8030
  setKeyStorageTypeError(errorMessage);
7948
8031
  } else {
7949
8032
  setKeyStorageTypeError(null);
7950
8033
  }
7951
- }, [keyStorageType, providerPolicy.enforceOnFirstLogin]);
8034
+ }, [keyStorageType, walletPolicy.requireVolrWalletOnLogin]);
7952
8035
  if (keyStorageTypeError) {
7953
8036
  return /* @__PURE__ */ jsxRuntime.jsx(Modal, { open: true, onOpenChange: () => {
7954
8037
  }, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "volr:max-w-md volr:mx-auto", children: [
@@ -7968,7 +8051,8 @@ var VolrUIProvider = ({
7968
8051
  branding,
7969
8052
  keyStorageType,
7970
8053
  allowedLocales,
7971
- providerPolicy,
8054
+ walletPolicy,
8055
+ allowExternalWalletPayment,
7972
8056
  children
7973
8057
  }
7974
8058
  ) }) });
@@ -7983,10 +8067,11 @@ function VolrUIProviderInner({
7983
8067
  branding,
7984
8068
  keyStorageType,
7985
8069
  allowedLocales,
7986
- providerPolicy,
8070
+ walletPolicy,
8071
+ allowExternalWalletPayment,
7987
8072
  children
7988
8073
  }) {
7989
- const [showOnboarding, setShowOnboarding] = React14.useState(false);
8074
+ const [showOnboarding, setShowOnboarding] = React15.useState(false);
7990
8075
  const { requestSign } = useSignRequest();
7991
8076
  const { requestWallet } = useWalletRequired();
7992
8077
  const configWithSignRequest = {
@@ -8011,7 +8096,8 @@ function VolrUIProviderInner({
8011
8096
  enabledLoginMethods,
8012
8097
  socialProviders,
8013
8098
  branding,
8014
- keyStorageType
8099
+ keyStorageType,
8100
+ allowExternalWalletPayment
8015
8101
  },
8016
8102
  children: /* @__PURE__ */ jsxRuntime.jsxs(VolrModalProvider, { children: [
8017
8103
  /* @__PURE__ */ jsxRuntime.jsx(WalletRequiredModal, {}),
@@ -8025,7 +8111,7 @@ function VolrUIProviderInner({
8025
8111
  /* @__PURE__ */ jsxRuntime.jsx(
8026
8112
  OAuthCallbackHandler,
8027
8113
  {
8028
- enforceSelection: providerPolicy.enforceOnFirstLogin ?? true,
8114
+ enforceSelection: walletPolicy.requireVolrWalletOnLogin ?? true,
8029
8115
  onShowOnboarding: () => setShowOnboarding(true)
8030
8116
  }
8031
8117
  ),
@@ -8033,7 +8119,7 @@ function VolrUIProviderInner({
8033
8119
  OnboardingChecker,
8034
8120
  {
8035
8121
  keyStorageType,
8036
- enforceSelection: providerPolicy.enforceOnFirstLogin ?? true,
8122
+ enforceSelection: walletPolicy.requireVolrWalletOnLogin ?? true,
8037
8123
  onShowOnboarding: () => setShowOnboarding(true),
8038
8124
  onHideOnboarding: () => setShowOnboarding(false)
8039
8125
  }
@@ -8079,15 +8165,15 @@ function MigrationCoordinator({
8079
8165
  }) {
8080
8166
  const { user, setUser } = react.useVolrContext();
8081
8167
  const { client } = react.useInternalAuth();
8082
- const [running, setRunning] = React14.useState(false);
8083
- const [isSourcePopup, setIsSourcePopup] = React14.useState(false);
8084
- const [isTargetPopup, setIsTargetPopup] = React14.useState(false);
8085
- const [sourceStep, setSourceStep] = React14.useState("ready");
8086
- const [targetStep, setTargetStep] = React14.useState("ready");
8087
- const [targetDomain, setTargetDomain] = React14.useState("");
8088
- const [sourceDomain, setSourceDomain] = React14.useState("");
8089
- const [errorMessage, setErrorMessage] = React14.useState();
8090
- React14.useEffect(() => {
8168
+ const [running, setRunning] = React15.useState(false);
8169
+ const [isSourcePopup, setIsSourcePopup] = React15.useState(false);
8170
+ const [isTargetPopup, setIsTargetPopup] = React15.useState(false);
8171
+ const [sourceStep, setSourceStep] = React15.useState("ready");
8172
+ const [targetStep, setTargetStep] = React15.useState("ready");
8173
+ const [targetDomain, setTargetDomain] = React15.useState("");
8174
+ const [sourceDomain, setSourceDomain] = React15.useState("");
8175
+ const [errorMessage, setErrorMessage] = React15.useState();
8176
+ React15.useEffect(() => {
8091
8177
  if (typeof window === "undefined") return;
8092
8178
  const params = new URLSearchParams(window.location.search);
8093
8179
  const migrationToken = params.get("migration_token");
@@ -8111,7 +8197,7 @@ function MigrationCoordinator({
8111
8197
  }
8112
8198
  }
8113
8199
  }, []);
8114
- React14.useEffect(() => {
8200
+ React15.useEffect(() => {
8115
8201
  if (typeof window === "undefined") return;
8116
8202
  const handler = (event) => {
8117
8203
  const data = event.data;
@@ -8123,7 +8209,7 @@ function MigrationCoordinator({
8123
8209
  window.addEventListener("message", handler);
8124
8210
  return () => window.removeEventListener("message", handler);
8125
8211
  }, [client, setUser, onHideOnboarding]);
8126
- React14.useEffect(() => {
8212
+ React15.useEffect(() => {
8127
8213
  if (typeof window === "undefined") return;
8128
8214
  if (running) return;
8129
8215
  const params = new URLSearchParams(window.location.search);
@@ -8268,9 +8354,9 @@ function MigrationCoordinator({
8268
8354
  }
8269
8355
  function AccountModalPortal() {
8270
8356
  const { isOpen, mode, close } = useVolrModal();
8271
- const [portalRoot, setPortalRoot] = React14.useState(null);
8272
- const [error, setError] = React14.useState(null);
8273
- React14.useEffect(() => {
8357
+ const [portalRoot, setPortalRoot] = React15.useState(null);
8358
+ const [error, setError] = React15.useState(null);
8359
+ React15.useEffect(() => {
8274
8360
  if (typeof window === "undefined") return;
8275
8361
  let root = document.getElementById("volr-modal-root");
8276
8362
  if (!root) {
@@ -8329,9 +8415,9 @@ function AccountModalPortal() {
8329
8415
  function DepositModalPortal() {
8330
8416
  const { isOpen, mode, asset, close } = useVolrModal();
8331
8417
  const { user } = react.useVolrContext();
8332
- const [portalRoot, setPortalRoot] = React14.useState(null);
8333
- const [showLogin, setShowLogin] = React14.useState(false);
8334
- React14.useEffect(() => {
8418
+ const [portalRoot, setPortalRoot] = React15.useState(null);
8419
+ const [showLogin, setShowLogin] = React15.useState(false);
8420
+ React15.useEffect(() => {
8335
8421
  if (typeof window === "undefined") return;
8336
8422
  let root = document.getElementById("volr-modal-root");
8337
8423
  if (!root) {
@@ -8346,7 +8432,7 @@ function DepositModalPortal() {
8346
8432
  }
8347
8433
  };
8348
8434
  }, []);
8349
- React14.useEffect(() => {
8435
+ React15.useEffect(() => {
8350
8436
  if (isOpen && mode === "deposit" && !user) {
8351
8437
  setShowLogin(true);
8352
8438
  } else {
@@ -8380,8 +8466,8 @@ function DepositModalPortal() {
8380
8466
  }
8381
8467
  function PaymentModalPortal() {
8382
8468
  const { isOpen, mode, close } = useVolrModal();
8383
- const [portalRoot, setPortalRoot] = React14.useState(null);
8384
- React14.useEffect(() => {
8469
+ const [portalRoot, setPortalRoot] = React15.useState(null);
8470
+ React15.useEffect(() => {
8385
8471
  if (typeof window === "undefined") return;
8386
8472
  let root = document.getElementById("volr-modal-root");
8387
8473
  if (!root) {
@@ -8410,8 +8496,8 @@ function PaymentModalPortal() {
8410
8496
  }
8411
8497
  function SignRequestModalPortal() {
8412
8498
  const { pendingRequest } = useSignRequestInternal();
8413
- const [portalRoot, setPortalRoot] = React14.useState(null);
8414
- React14.useEffect(() => {
8499
+ const [portalRoot, setPortalRoot] = React15.useState(null);
8500
+ React15.useEffect(() => {
8415
8501
  if (typeof window === "undefined") return;
8416
8502
  let root = document.getElementById("volr-modal-root");
8417
8503
  if (!root) {
@@ -8443,8 +8529,8 @@ function OAuthCallbackHandler({
8443
8529
  enforceSelection,
8444
8530
  onShowOnboarding
8445
8531
  }) {
8446
- const [hasCode, setHasCode] = React14.useState(false);
8447
- React14.useEffect(() => {
8532
+ const [hasCode, setHasCode] = React15.useState(false);
8533
+ React15.useEffect(() => {
8448
8534
  if (typeof window === "undefined") return;
8449
8535
  const params = new URLSearchParams(window.location.search);
8450
8536
  const code = params.get("code");
@@ -8493,14 +8579,14 @@ function OnboardingChecker({
8493
8579
  }) {
8494
8580
  const { user, provider, isLoading } = react.useVolrContext();
8495
8581
  const { isOpen: isModalOpen } = useVolrModal();
8496
- const modalWasOpened = React14__default.default.useRef(false);
8497
- const pendingMismatchOnboarding = React14__default.default.useRef(false);
8498
- React14.useEffect(() => {
8582
+ const modalWasOpened = React15__default.default.useRef(false);
8583
+ const pendingMismatchOnboarding = React15__default.default.useRef(false);
8584
+ React15.useEffect(() => {
8499
8585
  if (isModalOpen) {
8500
8586
  modalWasOpened.current = true;
8501
8587
  }
8502
8588
  }, [isModalOpen]);
8503
- React14.useEffect(() => {
8589
+ React15.useEffect(() => {
8504
8590
  if (isLoading) {
8505
8591
  return;
8506
8592
  }
@@ -8554,7 +8640,7 @@ function OnboardingChecker({
8554
8640
  }
8555
8641
  function useSwitchNetwork() {
8556
8642
  const { client } = react.useInternalAuth();
8557
- return React14.useCallback(
8643
+ return React15.useCallback(
8558
8644
  async (chainId) => {
8559
8645
  if (typeof window === "undefined" || !window.ethereum) {
8560
8646
  throw new Error("No wallet found");
@@ -8618,8 +8704,8 @@ var paymentPromiseResolver = null;
8618
8704
  function useVolrPay() {
8619
8705
  const { open: openModal, close: closeModal } = useVolrModal();
8620
8706
  const { checkPayment, getPaymentHistory } = react.useVolrPaymentApi();
8621
- const isInProgressRef = React14.useRef(false);
8622
- const pay = React14.useCallback(
8707
+ const isInProgressRef = React15.useRef(false);
8708
+ const pay = React15.useCallback(
8623
8709
  (options) => {
8624
8710
  isInProgressRef.current = true;
8625
8711
  const waitPromise = new Promise((resolve, reject) => {