@yieldfabric/wallet 0.2.1 → 0.2.3

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
@@ -5353,7 +5353,7 @@ var init_SignupFlow = __esm({
5353
5353
  };
5354
5354
  AvererSidebar = ({ onError }) => {
5355
5355
  const navigate = useWalletNavigate();
5356
- return /* @__PURE__ */ jsxRuntime.jsxs("aside", { className: "w-full md:w-[360px] md:h-screen bg-background flex md:flex-col items-start justify-between md:justify-between gap-4 px-6 py-5 md:p-10 border-b md:border-b-0 md:border-r border-border-light", children: [
5356
+ return /* @__PURE__ */ jsxRuntime.jsxs("aside", { className: "w-full md:w-[360px] md:h-screen bg-background flex md:flex-col items-start justify-between md:justify-between gap-4 px-6 pt-[calc(1.25rem+env(safe-area-inset-top))] pb-5 md:p-10 border-b md:border-b-0 md:border-r border-border-light", children: [
5357
5357
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-6 md:gap-10", children: [
5358
5358
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-primary", children: /* @__PURE__ */ jsxRuntime.jsx(YieldFabricLockup, { size: 32 }) }),
5359
5359
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "hidden md:block space-y-3 max-w-[260px]", children: [
@@ -5370,7 +5370,7 @@ var init_SignupFlow = __esm({
5370
5370
  navigate("/onboarding/choose");
5371
5371
  },
5372
5372
  className: "text-[12px] text-text-muted hover:text-text-primary transition-colors text-left",
5373
- children: "\u2190 Try a different method"
5373
+ children: "\u2039 Try a different method"
5374
5374
  }
5375
5375
  ) })
5376
5376
  ] });
@@ -5786,6 +5786,7 @@ async function fetchSnapshot() {
5786
5786
  return {
5787
5787
  profileCompleted: !!profile && !!profile.profile_completed,
5788
5788
  keyCount: keys.length,
5789
+ keyDeferred: me?.id ? keyStepDeferred(me.id) : false,
5789
5790
  emailVerified: email.verified,
5790
5791
  emailSynthetic: email.is_synthetic,
5791
5792
  identityStatus: identity && identity.status !== "unverified" ? identity : null,
@@ -5818,6 +5819,24 @@ async function getSnapshot() {
5818
5819
  cache = { kind: "inflight", promise };
5819
5820
  return promise;
5820
5821
  }
5822
+ var keyDeferredKey = (userId) => `yf.onboarding.keyDeferred.${userId}`;
5823
+ var keyDeferredHere = /* @__PURE__ */ new Set();
5824
+ function keyStepDeferred(userId) {
5825
+ if (keyDeferredHere.has(userId)) return true;
5826
+ try {
5827
+ return window.localStorage.getItem(keyDeferredKey(userId)) === "1";
5828
+ } catch {
5829
+ return false;
5830
+ }
5831
+ }
5832
+ function deferKeyStep(userId) {
5833
+ keyDeferredHere.add(userId);
5834
+ try {
5835
+ window.localStorage.setItem(keyDeferredKey(userId), "1");
5836
+ } catch {
5837
+ }
5838
+ invalidateOnboardingState();
5839
+ }
5821
5840
  function invalidateOnboardingState() {
5822
5841
  cache = { kind: "empty" };
5823
5842
  scopedIdentity = null;
@@ -5844,10 +5863,10 @@ function decide(snapshot, ctx) {
5844
5863
  if (ctx.kycVerifiesEmail) {
5845
5864
  if (identityStep) return identityStep;
5846
5865
  if (!emailOk) return "email-required";
5847
- if (snapshot.keyCount < MIN_USER_KEYS) return "wallets-required";
5866
+ if (snapshot.keyCount < MIN_USER_KEYS && !snapshot.keyDeferred) return "wallets-required";
5848
5867
  } else {
5849
5868
  if (!emailOk) return "email-required";
5850
- if (snapshot.keyCount < MIN_USER_KEYS) return "wallets-required";
5869
+ if (snapshot.keyCount < MIN_USER_KEYS && !snapshot.keyDeferred) return "wallets-required";
5851
5870
  if (identityStep) return identityStep;
5852
5871
  }
5853
5872
  if (!snapshot.profileCompleted) return "profile-required";
@@ -5962,7 +5981,7 @@ function clearDynamicSession() {
5962
5981
  init_WalletConfigContext();
5963
5982
  var WalletAuthContext = React54.createContext(void 0);
5964
5983
  function WalletAuthProvider({ children }) {
5965
- const { onSessionBootstrapped } = useWalletConfig();
5984
+ const { onSessionBootstrapped, onBeforeLogout } = useWalletConfig();
5966
5985
  const [user, setUser] = React54.useState(null);
5967
5986
  const [isLoading, setIsLoading] = React54.useState(true);
5968
5987
  const [error, setError] = React54.useState(null);
@@ -6055,6 +6074,7 @@ function WalletAuthProvider({ children }) {
6055
6074
  setIsLoading(true);
6056
6075
  setError(null);
6057
6076
  tokenRenewalService.stopRenewal();
6077
+ await Promise.resolve().then(() => onBeforeLogout?.()).catch(() => void 0);
6058
6078
  await exports.authService.logout();
6059
6079
  clearDynamicSession();
6060
6080
  setUser(null);
@@ -6070,6 +6090,7 @@ function WalletAuthProvider({ children }) {
6070
6090
  setIsLoading(true);
6071
6091
  setError(null);
6072
6092
  tokenRenewalService.stopRenewal();
6093
+ await Promise.resolve().then(() => onBeforeLogout?.()).catch(() => void 0);
6073
6094
  await exports.authService.logoutAll();
6074
6095
  clearDynamicSession();
6075
6096
  setUser(null);
@@ -9317,11 +9338,11 @@ function humanizeMessageType(messageType) {
9317
9338
  return spaced.charAt(0).toUpperCase() + spaced.slice(1);
9318
9339
  }
9319
9340
  var TONE_COLORS = {
9320
- success: { dotClass: "bg-emerald-300", textClass: "text-emerald-300", bgClass: "bg-emerald-950/[0.16]" },
9321
- danger: { dotClass: "bg-red-300", textClass: "text-red-200", bgClass: "bg-red-950/[0.16]" },
9322
- warn: { dotClass: "bg-amber-300", textClass: "text-amber-200", bgClass: "bg-amber-950/[0.14]" },
9323
- info: { dotClass: "bg-blue-300", textClass: "text-blue-200", bgClass: "bg-blue-950/[0.14]" },
9324
- neutral: { dotClass: "bg-white/[0.34]", textClass: "text-white/[0.56]", bgClass: "bg-white/[0.045]" }
9341
+ success: { dotClass: "bg-emerald-300", textClass: "text-status-success-text dark:text-emerald-300", bgClass: "bg-status-success-bg dark:bg-emerald-950/[0.16]" },
9342
+ danger: { dotClass: "bg-red-300", textClass: "text-status-error-text dark:text-red-200", bgClass: "bg-status-error-bg dark:bg-red-950/[0.16]" },
9343
+ warn: { dotClass: "bg-amber-300", textClass: "text-status-warning-text dark:text-amber-200", bgClass: "bg-status-warning-bg dark:bg-amber-950/[0.14]" },
9344
+ info: { dotClass: "bg-blue-300", textClass: "text-azure dark:text-blue-200", bgClass: "bg-azure-tint dark:bg-blue-950/[0.14]" },
9345
+ neutral: { dotClass: "bg-text-muted dark:bg-white/[0.34]", textClass: "text-text-muted dark:text-white/[0.56]", bgClass: "bg-chip dark:bg-white/[0.045]" }
9325
9346
  };
9326
9347
  var STATUS_TO_TONE = {
9327
9348
  completed: "success",
@@ -10265,7 +10286,7 @@ var DEFAULT_MESSAGES = {
10265
10286
  },
10266
10287
  email: {
10267
10288
  title: "Continue with email",
10268
- description: "Email + password. Pick your signing wallets (passkey / MetaMask) in the next step."
10289
+ description: "An email and a password. You can add a passkey later."
10269
10290
  },
10270
10291
  haveAccountPrompt: "Already have an account?",
10271
10292
  signInLinkText: "Sign in"
@@ -10276,7 +10297,7 @@ var DEFAULT_MESSAGES = {
10276
10297
  },
10277
10298
  emailSignup: {
10278
10299
  header: "Create your account",
10279
- subheader: "Your details now \u2014 signing wallets next.",
10300
+ subheader: "An email and a password is all it takes.",
10280
10301
  submitButtonText: "Continue",
10281
10302
  submittingButtonText: "Creating account\u2026",
10282
10303
  backButtonText: "\u2039 Back",
@@ -10385,7 +10406,7 @@ function LoginPage({
10385
10406
  align = "center",
10386
10407
  logo
10387
10408
  }) {
10388
- const alignClass = align === "top" ? "items-start pt-12 pb-12" : "items-center";
10409
+ const alignClass = align === "top" ? "items-start pt-[calc(3rem+env(safe-area-inset-top))] pb-12" : "items-center pt-[env(safe-area-inset-top)]";
10389
10410
  return /* @__PURE__ */ jsxRuntime.jsx(
10390
10411
  "div",
10391
10412
  {
@@ -10524,7 +10545,7 @@ function OnboardingChoosePath({ chrome } = {}) {
10524
10545
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-[520px] text-center space-y-1.5", children: [
10525
10546
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[18px] text-text-primary font-medium", children: messages.choosePath.header }),
10526
10547
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-text-secondary", children: messages.choosePath.subheader }),
10527
- configError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] text-orange-400 mt-2", children: "Provider config unavailable \u2014 falling back to email only." })
10548
+ configError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] text-status-warning-text dark:text-orange-400 mt-2", children: "Provider config unavailable \u2014 falling back to email only." })
10528
10549
  ] }),
10529
10550
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-[480px] space-y-2.5", children: [
10530
10551
  avererEnabled && /* @__PURE__ */ jsxRuntime.jsx(
@@ -10624,7 +10645,7 @@ function PlanOfferCard({
10624
10645
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-[8px] font-medium uppercase tracking-[0.1em] text-text-muted", children: "Pay monthly" }),
10625
10646
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-1 block text-[16px] font-semibold leading-none tracking-tight text-text-primary tabular-nums", children: price })
10626
10647
  ] }),
10627
- /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowRightIcon, { className: "h-3.5 w-3.5 shrink-0 text-text-muted", strokeWidth: 1.7 }),
10648
+ /* @__PURE__ */ jsxRuntime.jsx(outline.ChevronRightIcon, { className: "h-3.5 w-3.5 shrink-0 text-text-muted", strokeWidth: 1.7 }),
10628
10649
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
10629
10650
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-[8px] font-medium uppercase tracking-[0.1em] text-text-muted", children: "Cycle credit" }),
10630
10651
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-1 block text-[16px] font-semibold leading-none tracking-tight text-text-primary tabular-nums", children: allowance })
@@ -10794,7 +10815,7 @@ function OnboardingMethodCard({
10794
10815
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-text-primary", children: label }),
10795
10816
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] text-text-secondary", children: sublabel })
10796
10817
  ] }),
10797
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-text-secondary", children: "\u2192" })
10818
+ /* @__PURE__ */ jsxRuntime.jsx(outline.ChevronRightIcon, { "aria-hidden": "true", className: "h-4 w-4 text-text-secondary" })
10798
10819
  ]
10799
10820
  }
10800
10821
  );
@@ -12273,7 +12294,7 @@ function OnboardingChooseMethod({ chrome } = {}) {
12273
12294
  return /* @__PURE__ */ jsxRuntime.jsx(StepShell, { chrome, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
12274
12295
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
12275
12296
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[16px] text-text-primary", children: messages.chooseMethod.header }),
12276
- configError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] text-orange-400 mt-2", children: "Provider config unavailable \u2014 falling back to email only." })
12297
+ configError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] text-status-warning-text dark:text-orange-400 mt-2", children: "Provider config unavailable \u2014 falling back to email only." })
12277
12298
  ] }),
12278
12299
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
12279
12300
  enabled.map(({ id, impl }) => {
@@ -13066,7 +13087,7 @@ function SkeletonAvatar({
13066
13087
  {
13067
13088
  role: "img",
13068
13089
  "aria-label": choice ? `${name} - ${choice.label} avatar` : `${name}'s avatar`,
13069
- className: `rounded-full overflow-hidden flex items-center justify-center select-none bg-[#252525] ${className}`,
13090
+ className: `rounded-full overflow-hidden flex items-center justify-center select-none bg-surface-alt dark:bg-[#252525] ${className}`,
13070
13091
  style: {
13071
13092
  width: size,
13072
13093
  height: size
@@ -13119,7 +13140,7 @@ function AvatarPicker({
13119
13140
  onClick: () => onChange(c.id),
13120
13141
  className: [
13121
13142
  "rounded-full flex items-center justify-center select-none overflow-hidden",
13122
- "transition-all border-2 bg-[#252525]",
13143
+ "transition-all border-2 bg-surface-alt dark:bg-[#252525]",
13123
13144
  selected ? "border-primary scale-105" : "border-transparent hover:border-border-light"
13124
13145
  ].join(" "),
13125
13146
  style: { width: tileSize, height: tileSize },
@@ -14931,35 +14952,6 @@ function providerLabel(p) {
14931
14952
  function ProviderIcon({ provider }) {
14932
14953
  return /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-4 w-4 text-text-secondary", strokeWidth: 1.5 });
14933
14954
  }
14934
- function setupCopy(args) {
14935
- const { keyCount, busy } = args;
14936
- if (keyCount >= MIN_KEYS) {
14937
- return {
14938
- title: "Ready to sign",
14939
- body: keyCount >= RECOMMENDED_KEYS ? "Your signing keys are ready, including a backup recovery path." : "Your signing key is ready. Adding a second key gives you a recovery path, but you can continue now.",
14940
- tone: "done"
14941
- };
14942
- }
14943
- if (busy === "passkey" || busy === "metamask") {
14944
- return {
14945
- title: "Saving your signing key",
14946
- body: "Complete the passkey or wallet prompt. Your smart account will be activated later, only when an on-chain action requires it.",
14947
- tone: "active"
14948
- };
14949
- }
14950
- return {
14951
- title: "Choose a signing key",
14952
- body: "Use a passkey for quick device-native signing, or connect MetaMask if you prefer an external wallet.",
14953
- tone: "waiting"
14954
- };
14955
- }
14956
- function StepDot({
14957
- state,
14958
- icon
14959
- }) {
14960
- const className = state === "done" ? "bg-status-success-bg text-status-success-text border-status-success-text/30" : state === "active" ? "bg-status-warning-bg text-status-warning-text border-status-warning-text/30" : "bg-chip text-text-secondary border-border-default";
14961
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `h-8 w-8 rounded-full border flex items-center justify-center ${className}`, children: state === "done" ? /* @__PURE__ */ jsxRuntime.jsx(outline.CheckCircleIcon, { className: "h-4 w-4", strokeWidth: 1.8 }) : state === "active" ? /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowPathIcon, { className: "h-4 w-4 animate-spin", strokeWidth: 1.8 }) : icon });
14962
- }
14963
14955
  function SuccessMoment({ visible }) {
14964
14956
  if (!visible) return null;
14965
14957
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -15030,65 +15022,6 @@ function RecoveryPanel({
15030
15022
  }
15031
15023
  );
15032
15024
  }
15033
- function SetupStep({
15034
- label,
15035
- detail,
15036
- state,
15037
- icon
15038
- }) {
15039
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2.5 min-w-0", children: [
15040
- /* @__PURE__ */ jsxRuntime.jsx(StepDot, { state, icon }),
15041
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
15042
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12px] text-text-primary truncate", children: label }),
15043
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[10px] text-text-secondary truncate", children: detail })
15044
- ] })
15045
- ] });
15046
- }
15047
- function SetupStatusPanel({
15048
- keyCount,
15049
- busy
15050
- }) {
15051
- const copy = setupCopy({ keyCount, busy });
15052
- const keyState = keyCount >= MIN_KEYS ? "done" : busy === "passkey" || busy === "metamask" ? "active" : "waiting";
15053
- const readyState = keyCount >= MIN_KEYS ? "done" : "waiting";
15054
- return /* @__PURE__ */ jsxRuntime.jsxs(
15055
- "section",
15056
- {
15057
- className: "rounded-lg border border-border-default bg-input-bg px-4 py-4 space-y-4",
15058
- role: "status",
15059
- "aria-live": "polite",
15060
- children: [
15061
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
15062
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 min-w-0", children: [
15063
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[18px] text-text-primary font-medium tracking-normal", children: copy.title }),
15064
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-text-secondary leading-relaxed", children: copy.body })
15065
- ] }),
15066
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `shrink-0 h-9 w-9 rounded-full flex items-center justify-center ${copy.tone === "done" ? "bg-status-success-bg text-status-success-text" : copy.tone === "active" ? "bg-status-warning-bg text-status-warning-text" : "bg-chip text-text-secondary"}`, children: copy.tone === "done" ? /* @__PURE__ */ jsxRuntime.jsx(outline.CheckCircleIcon, { className: "h-5 w-5", strokeWidth: 1.8 }) : copy.tone === "active" ? /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowPathIcon, { className: "h-5 w-5 animate-spin", strokeWidth: 1.8 }) : /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { className: "h-5 w-5", strokeWidth: 1.8 }) })
15067
- ] }),
15068
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-2.5", children: [
15069
- /* @__PURE__ */ jsxRuntime.jsx(
15070
- SetupStep,
15071
- {
15072
- label: "Signing key",
15073
- detail: keyCount >= MIN_KEYS ? "Ready to authorize" : "Choose one below",
15074
- state: keyState,
15075
- icon: /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-4 w-4", strokeWidth: 1.7 })
15076
- }
15077
- ),
15078
- /* @__PURE__ */ jsxRuntime.jsx(
15079
- SetupStep,
15080
- {
15081
- label: "Continue",
15082
- detail: readyState === "done" ? "Unlocked" : "Unlocks automatically",
15083
- state: readyState,
15084
- icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ClockIcon, { className: "h-4 w-4", strokeWidth: 1.7 })
15085
- }
15086
- )
15087
- ] })
15088
- ]
15089
- }
15090
- );
15091
- }
15092
15025
  function AddWalletsStep({ chrome } = {}) {
15093
15026
  const navigate = useWizardNavigate();
15094
15027
  const { bootstrapSession, user } = useAuth();
@@ -15102,6 +15035,7 @@ function AddWalletsStep({ chrome } = {}) {
15102
15035
  const [autoAdvanceArmed, setAutoAdvanceArmed] = React54.useState(false);
15103
15036
  const [emailDraft, setEmailDraft] = React54.useState("");
15104
15037
  const [showDynamic, setShowDynamic] = React54.useState(false);
15038
+ const [walletsOpen, setWalletsOpen] = React54.useState(false);
15105
15039
  const hasSyntheticEmail = !!user?.email && user.email.toLowerCase().endsWith("@external.yieldfabric.local");
15106
15040
  const { snapshot: gateSnapshot } = useOnboardingState();
15107
15041
  const emailOk = !!gateSnapshot && snapshotEmailOk(gateSnapshot);
@@ -15128,7 +15062,7 @@ function AddWalletsStep({ chrome } = {}) {
15128
15062
  }, [refresh]);
15129
15063
  const keyCount = keys.length;
15130
15064
  const canContinue = keyCount >= MIN_KEYS;
15131
- const continueLabel = canContinue ? autoAdvanceArmed ? "Ready - continuing..." : "Continue" : "Add a key to continue";
15065
+ const continueLabel = canContinue ? autoAdvanceArmed ? "Ready - continuing..." : "Continue" : "Add a passkey to continue";
15132
15066
  async function addMetaMask() {
15133
15067
  setError(null);
15134
15068
  setLastFailedAction(null);
@@ -15147,7 +15081,7 @@ function AddWalletsStep({ chrome } = {}) {
15147
15081
  await impl.directLink({
15148
15082
  onComplete: async () => {
15149
15083
  setBusy(null);
15150
- setStatus("Signing key saved. Refreshing\u2026");
15084
+ setStatus("Saved. One moment\u2026");
15151
15085
  await refresh({ invalidate: true });
15152
15086
  },
15153
15087
  onError: (msg) => {
@@ -15203,7 +15137,7 @@ function AddWalletsStep({ chrome } = {}) {
15203
15137
  credential_id: created.credentialId
15204
15138
  }
15205
15139
  }, { purpose: "user" });
15206
- setStatus("Signing key saved. Refreshing\u2026");
15140
+ setStatus("Saved. One moment\u2026");
15207
15141
  await refresh({ invalidate: true });
15208
15142
  const after = await listMyLoginKeys();
15209
15143
  const found = after.some(
@@ -15258,8 +15192,7 @@ function AddWalletsStep({ chrome } = {}) {
15258
15192
  setBusy(null);
15259
15193
  }
15260
15194
  }
15261
- const onContinue = React54.useCallback(async () => {
15262
- if (!canContinue) return;
15195
+ const goOn = React54.useCallback(async () => {
15263
15196
  setBusy("continue");
15264
15197
  setLastFailedAction(null);
15265
15198
  try {
@@ -15286,7 +15219,16 @@ function AddWalletsStep({ chrome } = {}) {
15286
15219
  setError(friendlyActionError(e, "refresh"));
15287
15220
  setBusy(null);
15288
15221
  }
15289
- }, [bootstrapSession, canContinue, config, navigate]);
15222
+ }, [bootstrapSession, config, navigate, user?.role]);
15223
+ const onContinue = React54.useCallback(async () => {
15224
+ if (!canContinue) return;
15225
+ await goOn();
15226
+ }, [canContinue, goOn]);
15227
+ const onSkip = React54.useCallback(async () => {
15228
+ if (!user?.id) return;
15229
+ deferKeyStep(user.id);
15230
+ await goOn();
15231
+ }, [goOn, user?.id]);
15290
15232
  React54.useEffect(() => {
15291
15233
  if (!autoAdvanceArmed || !canContinue || busy) return;
15292
15234
  const timeout = window.setTimeout(() => {
@@ -15312,9 +15254,8 @@ function AddWalletsStep({ chrome } = {}) {
15312
15254
  }
15313
15255
  return /* @__PURE__ */ jsxRuntime.jsx(StepShell, { chrome, wide: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 sm:space-y-5 max-w-[420px] mx-auto", children: [
15314
15256
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center space-y-2", children: [
15315
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] uppercase tracking-[0.14em] text-text-secondary", children: "Secure setup" }),
15316
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[21px] text-text-primary font-medium leading-tight", children: "Your account is almost ready" }),
15317
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] leading-relaxed text-text-secondary max-w-[330px] mx-auto", children: "Add a signing key now. Your smart account is activated later, only when an on-chain action needs it." })
15257
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[21px] text-text-primary font-medium leading-tight", children: "Secure your account" }),
15258
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] leading-relaxed text-text-secondary max-w-[340px] mx-auto", children: "A passkey means only you can approve what is done in your name \u2014 one tap with Face ID, a fingerprint or your PIN. You can also do this later." })
15318
15259
  ] }),
15319
15260
  hasSyntheticEmail && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg bg-status-warning-bg border border-status-warning-text/20 p-3 space-y-2", children: [
15320
15261
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] text-status-warning-text", children: "Your account email is a temporary placeholder. Set a real one so you can recover access and (if you ever want it) link Averer KYC." }),
@@ -15341,20 +15282,10 @@ function AddWalletsStep({ chrome } = {}) {
15341
15282
  )
15342
15283
  ] })
15343
15284
  ] }),
15344
- !loading && /* @__PURE__ */ jsxRuntime.jsx(
15345
- SetupStatusPanel,
15346
- {
15347
- keyCount,
15348
- busy
15349
- }
15350
- ),
15351
15285
  /* @__PURE__ */ jsxRuntime.jsx(SuccessMoment, { visible: canContinue && autoAdvanceArmed && !error }),
15352
- loading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border border-dashed border-border-default bg-input-bg px-4 py-8 text-center text-[11px] text-text-secondary", children: "Loading\u2026" }) : keys.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-dashed border-border-default bg-input-bg px-4 py-7 flex flex-col items-center gap-2.5", children: [
15353
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-11 h-11 rounded-full bg-chip flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-5 w-5 text-text-secondary", strokeWidth: 1.5 }) }),
15354
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] text-text-secondary", children: "No signing keys yet" })
15355
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-input-bg rounded-lg px-4 py-3.5 space-y-3", children: [
15286
+ loading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border border-dashed border-border-default bg-input-bg px-4 py-8 text-center text-[11px] text-text-secondary", children: "Loading\u2026" }) : keys.length === 0 ? null : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-input-bg rounded-lg px-4 py-3.5 space-y-3", children: [
15356
15287
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-[11px]", children: [
15357
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-secondary", children: "Signing keys" }),
15288
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-secondary", children: "Your keys" }),
15358
15289
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: keyCount < RECOMMENDED_KEYS ? "text-status-warning-text" : "text-status-success-text", children: [
15359
15290
  keyCount === 1 && "1 key \xB7 add a backup",
15360
15291
  keyCount >= RECOMMENDED_KEYS && `${keyCount} keys`
@@ -15381,7 +15312,7 @@ function AddWalletsStep({ chrome } = {}) {
15381
15312
  }) })
15382
15313
  ] }),
15383
15314
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
15384
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] text-text-secondary text-center", children: !emailOk ? "Verify your email to unlock signing keys" : "Add a key" }),
15315
+ !emailOk ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] text-text-secondary text-center", children: "Confirm your email first" }) : null,
15385
15316
  !emailOk && /* @__PURE__ */ jsxRuntime.jsxs(
15386
15317
  "button",
15387
15318
  {
@@ -15401,37 +15332,48 @@ function AddWalletsStep({ chrome } = {}) {
15401
15332
  type: "button",
15402
15333
  onClick: addPasskey,
15403
15334
  disabled: busy !== null || !emailOk,
15404
- className: "\n w-full min-h-[44px] flex items-center justify-center gap-2 py-2.5 rounded-lg\n bg-chip hover:bg-chip-hover\n text-[12px] text-text-primary\n transition-all duration-200\n active:scale-[0.98]\n disabled:opacity-40 disabled:cursor-not-allowed\n ",
15405
- children: [
15406
- busy === "passkey" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-secondary", children: "\u2026" }) : /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-4 w-4 text-text-secondary", strokeWidth: 1.5 }),
15407
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Add Passkey" })
15408
- ]
15409
- }
15410
- ),
15411
- /* @__PURE__ */ jsxRuntime.jsxs(
15412
- "button",
15413
- {
15414
- type: "button",
15415
- onClick: addMetaMask,
15416
- disabled: busy !== null || !emailOk,
15417
- className: "\n w-full min-h-[44px] flex items-center justify-center gap-2 py-2.5 rounded-lg\n bg-chip hover:bg-chip-hover\n text-[12px] text-text-primary\n transition-all duration-200\n active:scale-[0.98]\n disabled:opacity-40 disabled:cursor-not-allowed\n ",
15335
+ className: `w-full min-h-[46px] flex items-center justify-center gap-2 py-2.5 rounded-lg text-[13px] font-medium transition-colors active:scale-[0.99] disabled:opacity-40 disabled:cursor-not-allowed ${canContinue ? "bg-chip hover:bg-chip-hover text-text-primary" : "bg-cta hover:bg-cta-hover text-on-cta"}`,
15418
15336
  children: [
15419
- busy === "metamask" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-secondary", children: "\u2026" }) : /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-4 w-4 text-text-secondary", strokeWidth: 1.5 }),
15420
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Add MetaMask" })
15337
+ busy === "passkey" ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u2026" }) : /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-4 w-4", strokeWidth: 1.5 }),
15338
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: canContinue ? "Add another passkey" : "Add a passkey" })
15421
15339
  ]
15422
15340
  }
15423
15341
  ),
15424
- !!config?.auth.enabled.includes("dynamic") && !!config?.auth.settings.dynamic?.environment_id && /* @__PURE__ */ jsxRuntime.jsxs(
15342
+ walletsOpen ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
15343
+ /* @__PURE__ */ jsxRuntime.jsxs(
15344
+ "button",
15345
+ {
15346
+ type: "button",
15347
+ onClick: addMetaMask,
15348
+ disabled: busy !== null || !emailOk,
15349
+ className: "\n w-full min-h-[44px] flex items-center justify-center gap-2 py-2.5 rounded-lg\n bg-chip hover:bg-chip-hover\n text-[12px] text-text-primary\n transition-all duration-200\n active:scale-[0.98]\n disabled:opacity-40 disabled:cursor-not-allowed\n ",
15350
+ children: [
15351
+ busy === "metamask" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-secondary", children: "\u2026" }) : /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-4 w-4 text-text-secondary", strokeWidth: 1.5 }),
15352
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Add MetaMask" })
15353
+ ]
15354
+ }
15355
+ ),
15356
+ !!config?.auth.enabled.includes("dynamic") && !!config?.auth.settings.dynamic?.environment_id && /* @__PURE__ */ jsxRuntime.jsxs(
15357
+ "button",
15358
+ {
15359
+ type: "button",
15360
+ onClick: () => setShowDynamic(true),
15361
+ disabled: busy !== null || !emailOk,
15362
+ className: "\n w-full min-h-[44px] flex items-center justify-center gap-2 py-2.5 rounded-lg\n bg-chip hover:bg-chip-hover\n text-[12px] text-text-primary\n transition-all duration-200\n active:scale-[0.98]\n disabled:opacity-40 disabled:cursor-not-allowed\n ",
15363
+ children: [
15364
+ /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-4 w-4 text-text-secondary", strokeWidth: 1.5 }),
15365
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Add Dynamic" })
15366
+ ]
15367
+ }
15368
+ )
15369
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(
15425
15370
  "button",
15426
15371
  {
15427
15372
  type: "button",
15428
- onClick: () => setShowDynamic(true),
15429
- disabled: busy !== null || !emailOk,
15430
- className: "\n w-full min-h-[44px] flex items-center justify-center gap-2 py-2.5 rounded-lg\n bg-chip hover:bg-chip-hover\n text-[12px] text-text-primary\n transition-all duration-200\n active:scale-[0.98]\n disabled:opacity-40 disabled:cursor-not-allowed\n ",
15431
- children: [
15432
- /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-4 w-4 text-text-secondary", strokeWidth: 1.5 }),
15433
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Add Dynamic" })
15434
- ]
15373
+ onClick: () => setWalletsOpen(true),
15374
+ disabled: busy !== null,
15375
+ className: "w-full py-1.5 text-[11px] text-text-secondary hover:text-text-primary transition-colors disabled:opacity-40",
15376
+ children: "Use a crypto wallet instead"
15435
15377
  }
15436
15378
  )
15437
15379
  ] }),
@@ -15448,7 +15390,7 @@ function AddWalletsStep({ chrome } = {}) {
15448
15390
  registerOnChain: false,
15449
15391
  onComplete: async () => {
15450
15392
  setShowDynamic(false);
15451
- setStatus("Signing key saved. Refreshing\u2026");
15393
+ setStatus("Saved. One moment\u2026");
15452
15394
  await refresh({ invalidate: true });
15453
15395
  },
15454
15396
  onError: (m) => {
@@ -15480,15 +15422,24 @@ function AddWalletsStep({ chrome } = {}) {
15480
15422
  onRetry: retryLastFailure
15481
15423
  }
15482
15424
  ),
15483
- /* @__PURE__ */ jsxRuntime.jsx(
15425
+ canContinue ? /* @__PURE__ */ jsxRuntime.jsx(
15484
15426
  "button",
15485
15427
  {
15486
15428
  type: "button",
15487
15429
  onClick: onContinue,
15488
- disabled: !canContinue || busy === "continue",
15489
- className: "\n w-full min-h-[46px] py-3 rounded-lg\n bg-status-success-bg hover:opacity-80 text-status-success-text\n text-[13px] font-medium\n transition-all duration-200 active:scale-[0.99]\n disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-status-success-bg\n ",
15430
+ disabled: busy === "continue",
15431
+ className: "w-full min-h-[46px] py-3 rounded-lg bg-cta hover:bg-cta-hover text-on-cta text-[13px] font-medium transition-colors active:scale-[0.99] disabled:opacity-40 disabled:cursor-not-allowed",
15490
15432
  children: continueLabel
15491
15433
  }
15434
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
15435
+ "button",
15436
+ {
15437
+ type: "button",
15438
+ onClick: () => void onSkip(),
15439
+ disabled: busy !== null || !user?.id,
15440
+ className: "w-full py-2 text-[13px] text-text-secondary hover:text-text-primary transition-colors disabled:opacity-40",
15441
+ children: "Not now"
15442
+ }
15492
15443
  ),
15493
15444
  keyCount === 1 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] text-text-secondary text-center pt-1", children: "Tip: a second key is your recovery path. If you lose your only key, the account is locked out." })
15494
15445
  ] }) });
@@ -15575,7 +15526,7 @@ var Drawer = ({
15575
15526
  role: "dialog",
15576
15527
  "aria-modal": "true",
15577
15528
  "aria-labelledby": titleId,
15578
- className: `pointer-events-auto ${panelBg} shadow-2xl h-full flex flex-col ${widthClass} ${panelClassName}`,
15529
+ className: `pointer-events-auto ${panelBg} shadow-2xl h-full flex flex-col pt-[env(safe-area-inset-top)] ${widthClass} ${panelClassName}`,
15579
15530
  style: { ...widthStyle, ...panelStyle },
15580
15531
  onClick: (e) => e.stopPropagation(),
15581
15532
  children: [
@@ -17986,7 +17937,7 @@ var OnboardingPolicySection = ({
17986
17937
  ]);
17987
17938
  if (hidden || loading || deployLoading || platformActive === null) return null;
17988
17939
  if (platformActive === "error") {
17989
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-white/[0.07] bg-white/[0.02] p-4", children: [
17940
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-border-default dark:border-white/[0.07] bg-raised dark:bg-white/[0.02] p-4", children: [
17990
17941
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-3", children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-sm font-semibold text-text-secondary", children: "Platform onboarding" }) }),
17991
17942
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 rounded-lg border border-border-light bg-surface-alt px-3 py-2.5 text-[13px] leading-5 text-text-muted", children: [
17992
17943
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Couldn't confirm whether this group is used as a platform." }),
@@ -18003,12 +17954,12 @@ var OnboardingPolicySection = ({
18003
17954
  ] });
18004
17955
  }
18005
17956
  if (!platformActive) {
18006
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-white/[0.07] bg-white/[0.02] p-4", children: [
17957
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-border-default dark:border-white/[0.07] bg-raised dark:bg-white/[0.02] p-4", children: [
18007
17958
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-3", children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-sm font-semibold text-text-secondary", children: "Platform onboarding" }) }),
18008
17959
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border border-border-light bg-surface-alt px-3 py-2.5 text-[13px] leading-5 text-text-muted", children: "This group isn't used as a platform, so there are no signups to configure. Enable platform sponsorship first \u2014 then choose the sign-in methods and identity checks its users go through." })
18009
17960
  ] });
18010
17961
  }
18011
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-white/[0.07] bg-white/[0.02] p-4", children: [
17962
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-border-default dark:border-white/[0.07] bg-raised dark:bg-white/[0.02] p-4", children: [
18012
17963
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-3", children: [
18013
17964
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-sm font-semibold text-text-secondary", children: "Platform onboarding" }),
18014
17965
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-text-muted", children: "The path people take from first visit to transacting on this platform." })
@@ -18793,7 +18744,7 @@ function DecodedCalldata({
18793
18744
  }
18794
18745
  const kindColor = {
18795
18746
  zero: "text-text-muted",
18796
- address: "text-blue-300/[0.90]",
18747
+ address: "text-azure dark:text-blue-300/[0.90]",
18797
18748
  uint: "text-text-primary",
18798
18749
  bytes32: "text-text-secondary"
18799
18750
  };
@@ -19784,14 +19735,14 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
19784
19735
  type: "button",
19785
19736
  onClick: handleCancelMessage,
19786
19737
  disabled: cancelling,
19787
- className: "px-3 py-2 text-[13px] text-red-200 hover:text-text-primary disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
19738
+ className: "px-3 py-2 text-[13px] text-status-error-text dark:text-red-200 hover:text-text-primary disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
19788
19739
  children: cancelling ? "Cancelling\u2026" : "Cancel message"
19789
19740
  }
19790
19741
  ) : void 0,
19791
19742
  children: [
19792
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] font-medium text-red-100 mb-1", children: "Couldn't load transaction" }),
19743
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] font-medium text-status-error-text dark:text-red-100 mb-1", children: "Couldn't load transaction" }),
19793
19744
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-text-secondary max-w-sm", children: error }),
19794
- cancelError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-red-200 mt-3", children: cancelError })
19745
+ cancelError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-status-error-text dark:text-red-200 mt-3", children: cancelError })
19795
19746
  ]
19796
19747
  }
19797
19748
  );
@@ -19806,7 +19757,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
19806
19757
  })();
19807
19758
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col h-full text-text-primary", children: [
19808
19759
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto overflow-x-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 px-4 py-4", children: [
19809
- reviewWarning && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rounded-lg border border-amber-300/[0.22] bg-amber-400/[0.08] px-3 py-2 text-[12px] leading-5 text-amber-100", children: reviewWarning }),
19760
+ reviewWarning && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rounded-lg border border-status-warning-line dark:border-amber-300/[0.22] bg-status-warning-bg dark:bg-amber-400/[0.08] px-3 py-2 text-[12px] leading-5 text-status-warning-text dark:text-amber-100", children: reviewWarning }),
19810
19761
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-text-secondary leading-5", children: mode === "inspect" ? "Review action details and execution outcome." : "Review the action, choose a signing key, and confirm." }),
19811
19762
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full rounded-[22px] border border-border-light bg-raised p-1 text-[12px] shadow-[inset_0_1px_0_rgba(255,255,255,0.035)]", children: ["simple", "advanced"].map((mode2) => /* @__PURE__ */ jsxRuntime.jsx(
19812
19763
  "button",
@@ -19995,7 +19946,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
19995
19946
  ] })
19996
19947
  }
19997
19948
  ),
19998
- selector && !methodName && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rounded-lg border border-red-300/[0.18] bg-red-400/[0.08] px-2.5 py-2 text-[10px] leading-4 text-red-200", children: "High risk: this selector is unknown. Review the raw target, value, and every calldata word before signing." }),
19949
+ selector && !methodName && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rounded-lg border border-status-error-line dark:border-red-300/[0.18] bg-status-error-bg dark:bg-red-400/[0.08] px-2.5 py-2 text-[10px] leading-4 text-status-error-text dark:text-red-200", children: "High risk: this selector is unknown. Review the raw target, value, and every calldata word before signing." }),
19999
19950
  !dataEmpty && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12px]", children: isExpanded ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
20000
19951
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
20001
19952
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-muted", children: "Calldata" }),
@@ -20054,7 +20005,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
20054
20005
  ] })
20055
20006
  ] }) }),
20056
20007
  mode === "sign" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-shrink-0 border-t border-border-light bg-surface-alt", children: [
20057
- keysLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-5", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-2 border-border-strong border-t-transparent" }) }) : keysError ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-red-200 px-4 py-3", children: keysError }) : availableKeys.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-text-muted text-center py-5", children: ownedSignerState.error ?? (ownedSignerBinding ? "The personal key bound to this owned-group session is unavailable. Return to the parent group and mint a new session with an active key." : `No active keys for this ${entityType}.`) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-4 pt-3 pb-1 space-y-2", children: [
20008
+ keysLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-5", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-2 border-border-strong border-t-transparent" }) }) : keysError ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-status-error-text dark:text-red-200 px-4 py-3", children: keysError }) : availableKeys.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-text-muted text-center py-5", children: ownedSignerState.error ?? (ownedSignerBinding ? "The personal key bound to this owned-group session is unavailable. Return to the parent group and mint a new session with an active key." : `No active keys for this ${entityType}.`) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-4 pt-3 pb-1 space-y-2", children: [
20058
20009
  /* @__PURE__ */ jsxRuntime.jsx(SectionLabel, { children: "Sign with" }),
20059
20010
  /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "max-h-40 overflow-y-auto divide-y divide-border-light", children: availableKeys.map((key) => {
20060
20011
  const isSelected = selectedKey?.id === key.id;
@@ -20099,7 +20050,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
20099
20050
  walletLabel(walletKindFromKey(selectedKey)),
20100
20051
  " will open to sign."
20101
20052
  ] }),
20102
- ownedSignerBinding && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-[11px] text-cyan-200", children: [
20053
+ ownedSignerBinding && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-[11px] text-azure dark:text-cyan-200", children: [
20103
20054
  "This owned-group request is cryptographically bound to this personal key (",
20104
20055
  ownedSignerBinding.signerCustody,
20105
20056
  "). Choose a different key by returning to the parent group and minting a new child session."
@@ -20175,8 +20126,8 @@ function InspectFooter({
20175
20126
  }
20176
20127
  };
20177
20128
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-shrink-0 border-t border-border-light bg-raised px-3 py-3 space-y-2.5", children: [
20178
- awaitingSignature && onSwitchToSign && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-[18px] border border-amber-300/[0.20] bg-amber-950/[0.12] px-3 py-2 flex items-center justify-between gap-3", children: [
20179
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-amber-100/[0.82]", children: "This message is now awaiting your signature." }),
20129
+ awaitingSignature && onSwitchToSign && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-[18px] border border-status-warning-line dark:border-amber-300/[0.20] bg-status-warning-bg dark:bg-amber-950/[0.12] px-3 py-2 flex items-center justify-between gap-3", children: [
20130
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-status-warning-text dark:text-amber-100/[0.82]", children: "This message is now awaiting your signature." }),
20180
20131
  /* @__PURE__ */ jsxRuntime.jsx(
20181
20132
  "button",
20182
20133
  {
@@ -20205,7 +20156,7 @@ function InspectFooter({
20205
20156
  href: txExplorerUrl,
20206
20157
  target: "_blank",
20207
20158
  rel: "noopener noreferrer",
20208
- className: "text-blue-300/[0.90] hover:text-blue-200 hover:underline underline-offset-2 transition-colors",
20159
+ className: "text-azure dark:text-blue-300/[0.90] hover:text-azure-deep dark:hover:text-blue-200 hover:underline underline-offset-2 transition-colors",
20209
20160
  children: [
20210
20161
  formatTxHashShort(txHash),
20211
20162
  /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "ml-0.5 text-[9px] align-middle opacity-70", children: "\u2197" })
@@ -20231,7 +20182,7 @@ Opens in block explorer` : txHash
20231
20182
  ] }),
20232
20183
  message.response?.error && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
20233
20184
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-medium uppercase tracking-[0.13em] text-text-muted mb-0.5", children: "Error" }),
20234
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-red-200 break-words", children: message.response.error })
20185
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-status-error-text dark:text-red-200 break-words", children: message.response.error })
20235
20186
  ] }),
20236
20187
  reexecutions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("details", { children: [
20237
20188
  /* @__PURE__ */ jsxRuntime.jsxs("summary", { className: "text-[11px] uppercase tracking-[0.12em] text-text-muted cursor-pointer hover:text-text-primary transition-colors", children: [
@@ -20245,7 +20196,7 @@ Opens in block explorer` : txHash
20245
20196
  className: "text-[11px] rounded-[10px] border border-border-light px-2 py-1 bg-surface-alt",
20246
20197
  children: [
20247
20198
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
20248
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: r.success ? "text-emerald-300/[0.90]" : "text-red-200", children: r.success ? "Succeeded" : "Failed" }),
20199
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: r.success ? "text-status-success-text dark:text-emerald-300/[0.90]" : "text-status-error-text dark:text-red-200", children: r.success ? "Succeeded" : "Failed" }),
20249
20200
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-muted", children: formatRelativeTime(r.attempted_at) })
20250
20201
  ] }),
20251
20202
  r.error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-text-secondary break-words", children: r.error })
@@ -20255,7 +20206,7 @@ Opens in block explorer` : txHash
20255
20206
  )) })
20256
20207
  ] })
20257
20208
  ] }),
20258
- actionError && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-[16px] border border-red-300/[0.24] bg-red-950/[0.18] px-3 py-2 text-[11px] text-red-100", children: actionError }),
20209
+ actionError && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-[16px] border border-status-error-line dark:border-red-300/[0.24] bg-status-error-bg dark:bg-red-950/[0.18] px-3 py-2 text-[11px] text-status-error-text dark:text-red-100", children: actionError }),
20259
20210
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-2", children: [
20260
20211
  /* @__PURE__ */ jsxRuntime.jsx(
20261
20212
  "button",
@@ -20638,8 +20589,10 @@ function SignatureWorkflow({
20638
20589
  ] });
20639
20590
  }
20640
20591
  var PLACEMENT_CLASSES = {
20641
- "top-left": "top-4 left-4",
20642
- "top-right": "top-4 right-4",
20592
+ // The top corners clear the status bar of a home-screen install (zero
20593
+ // in a browser tab).
20594
+ "top-left": "top-[calc(1rem+env(safe-area-inset-top))] left-4",
20595
+ "top-right": "top-[calc(1rem+env(safe-area-inset-top))] right-4",
20643
20596
  "bottom-left": "bottom-4 left-4",
20644
20597
  "bottom-right": "bottom-4 right-4"
20645
20598
  };
@@ -23070,7 +23023,7 @@ function SecurityPage() {
23070
23023
  rotateStep === "added" || rotateStep === "removing" || rotateStep === "remove-pending" || rotateStep === "done" ? "\u2713 " : "1. ",
23071
23024
  "Add new key"
23072
23025
  ] }),
23073
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u2192" }),
23026
+ /* @__PURE__ */ jsxRuntime.jsx(outline.ChevronRightIcon, { "aria-hidden": "true", className: "h-3 w-3" }),
23074
23027
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: rotateStep === "added" || rotateStep === "removing" || rotateStep === "remove-pending" ? "text-text-primary font-medium" : "", children: [
23075
23028
  rotateStep === "done" ? "\u2713 " : "2. ",
23076
23029
  "Remove old key"
@@ -23992,18 +23945,18 @@ var GroupsView = ({
23992
23945
  ] }),
23993
23946
  error && /* @__PURE__ */ jsxRuntime.jsx(ErrorBanner, { children: error }),
23994
23947
  delegationSession?.kind === "owned" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-[22px] border border-cyan-300/[0.18] bg-cyan-400/[0.07] px-3.5 py-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.035)]", children: [
23995
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-semibold uppercase tracking-[0.12em] text-cyan-300/80", children: "Account ownership path" }),
23948
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-semibold uppercase tracking-[0.12em] text-azure dark:text-cyan-300/80", children: "Account ownership path" }),
23996
23949
  /* @__PURE__ */ jsxRuntime.jsxs(
23997
23950
  "div",
23998
23951
  {
23999
23952
  className: "mt-2 flex min-w-0 items-center gap-2",
24000
23953
  "aria-label": `${sourceGroup?.name ?? "Owning group"} is operating ${activeOwnedGroup?.name ?? "owned group"}`,
24001
23954
  children: [
24002
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate rounded-lg border border-white/[0.08] bg-white/[0.035] px-2.5 py-1.5 text-[11px] font-semibold text-text-secondary", children: "You" }),
24003
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "shrink-0 text-[12px] text-cyan-300/70", children: "\u2192" }),
24004
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate rounded-lg border border-white/[0.08] bg-white/[0.035] px-2.5 py-1.5 text-[11px] font-semibold text-text-secondary", children: sourceGroup?.name ?? compactGroupId(delegationSession.parentGroupId) }),
24005
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "shrink-0 text-[12px] text-cyan-300/70", children: "\u2192" }),
24006
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate rounded-lg border border-cyan-300/[0.18] bg-cyan-300/[0.08] px-2.5 py-1.5 text-[11px] font-semibold text-cyan-200", children: activeOwnedGroup?.name ?? compactGroupId(delegationSession.currentGroupId) })
23955
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate rounded-lg border border-border-default dark:border-white/[0.08] bg-chip dark:bg-white/[0.035] px-2.5 py-1.5 text-[11px] font-semibold text-text-secondary", children: "You" }),
23956
+ /* @__PURE__ */ jsxRuntime.jsx(outline.ChevronRightIcon, { "aria-hidden": "true", className: "h-3.5 w-3.5 shrink-0 text-azure dark:text-cyan-300/70" }),
23957
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate rounded-lg border border-border-default dark:border-white/[0.08] bg-chip dark:bg-white/[0.035] px-2.5 py-1.5 text-[11px] font-semibold text-text-secondary", children: sourceGroup?.name ?? compactGroupId(delegationSession.parentGroupId) }),
23958
+ /* @__PURE__ */ jsxRuntime.jsx(outline.ChevronRightIcon, { "aria-hidden": "true", className: "h-3.5 w-3.5 shrink-0 text-azure dark:text-cyan-300/70" }),
23959
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate rounded-lg border border-azure-line dark:border-cyan-300/[0.18] bg-azure-tint dark:bg-cyan-300/[0.08] px-2.5 py-1.5 text-[11px] font-semibold text-azure dark:text-cyan-200", children: activeOwnedGroup?.name ?? compactGroupId(delegationSession.currentGroupId) })
24007
23960
  ]
24008
23961
  }
24009
23962
  ),
@@ -24015,7 +23968,7 @@ var GroupsView = ({
24015
23968
  type: "button",
24016
23969
  onClick: () => void handleReturnToParent(),
24017
23970
  disabled: busyId === `parent:${delegationSession.parentGroupId}`,
24018
- className: "rounded-full border border-cyan-300/[0.16] bg-cyan-300/[0.08] px-3 py-1.5 text-[11px] font-semibold text-cyan-200 transition-colors hover:bg-cyan-300/[0.13] disabled:opacity-45",
23971
+ className: "rounded-full border border-azure-line dark:border-cyan-300/[0.16] bg-azure-tint dark:bg-cyan-300/[0.08] px-3 py-1.5 text-[11px] font-semibold text-azure dark:text-cyan-200 transition-colors hover:bg-azure-muted dark:hover:bg-cyan-300/[0.13] disabled:opacity-45",
24019
23972
  children: busyId === `parent:${delegationSession.parentGroupId}` ? "Returning..." : `Return to ${sourceGroup?.name ?? "owning group"}`
24020
23973
  }
24021
23974
  ),
@@ -24031,7 +23984,7 @@ var GroupsView = ({
24031
23984
  )
24032
23985
  ] })
24033
23986
  ] }) : actingAsAnyGroup ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 rounded-[22px] border border-amber-300/[0.18] bg-amber-400/[0.08] px-3.5 py-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.035)]", children: [
24034
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "min-w-0 flex-1 text-[12px] font-semibold leading-5 text-amber-300", children: [
23987
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "min-w-0 flex-1 text-[12px] font-semibold leading-5 text-status-warning-text dark:text-amber-300", children: [
24035
23988
  "Acting as ",
24036
23989
  sourceGroup?.name ?? "a group",
24037
23990
  ". Operations use its direct delegation token."
@@ -24366,7 +24319,7 @@ function OwnedGroupRow({
24366
24319
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "px-3.5 py-3", children: [
24367
24320
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
24368
24321
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate text-[11px] font-semibold text-text-secondary", children: sourceName }),
24369
- /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "shrink-0 text-[12px] text-cyan-300/70", children: "\u2192" }),
24322
+ /* @__PURE__ */ jsxRuntime.jsx(outline.ChevronRightIcon, { "aria-hidden": "true", className: "h-3.5 w-3.5 shrink-0 text-azure dark:text-cyan-300/70" }),
24370
24323
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate text-[12px] font-semibold text-text-primary", children: projection.group.name })
24371
24324
  ] }),
24372
24325
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex items-center justify-between gap-3", children: [
@@ -24377,7 +24330,7 @@ function OwnedGroupRow({
24377
24330
  type: "button",
24378
24331
  onClick: onSwitch,
24379
24332
  disabled: busy,
24380
- className: "shrink-0 rounded-full border border-cyan-300/[0.16] bg-cyan-300/[0.08] px-3 py-1.5 text-[11px] font-semibold text-cyan-200 transition-colors hover:bg-cyan-300/[0.13] disabled:cursor-not-allowed disabled:opacity-45",
24333
+ className: "shrink-0 rounded-full border border-azure-line dark:border-cyan-300/[0.16] bg-azure-tint dark:bg-cyan-300/[0.08] px-3 py-1.5 text-[11px] font-semibold text-azure dark:text-cyan-200 transition-colors hover:bg-azure-muted dark:hover:bg-cyan-300/[0.13] disabled:cursor-not-allowed disabled:opacity-45",
24381
24334
  children: busy ? "Checking ownership..." : `Operate as ${projection.group.name}`
24382
24335
  }
24383
24336
  )
@@ -24864,7 +24817,7 @@ function PlusIcon() {
24864
24817
  }
24865
24818
  function RoleBadge({ role }) {
24866
24819
  const label = normalizeRole(role);
24867
- const tone = label === "owner" ? "bg-orange-500/[0.16] text-orange-300" : label === "admin" ? "bg-blue-500/[0.16] text-blue-300" : "bg-chip text-text-secondary";
24820
+ const tone = label === "owner" ? "bg-orange-500/[0.16] text-primary dark:text-orange-300" : label === "admin" ? "bg-blue-500/[0.16] text-azure dark:text-blue-300" : "bg-chip text-text-secondary";
24868
24821
  return /* @__PURE__ */ jsxRuntime.jsx(
24869
24822
  "span",
24870
24823
  {
@@ -25006,7 +24959,7 @@ function ActiveEnvironmentBadge({
25006
24959
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center justify-between gap-3 px-1", children: [
25007
24960
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-medium text-text-muted", children: "Mode" }),
25008
24961
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 truncate text-right text-[9px] text-text-muted", children: [
25009
- environment.mode === "unknown" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-1.5 font-semibold text-amber-400", children: "Unconfigured" }),
24962
+ environment.mode === "unknown" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-1.5 font-semibold text-status-warning-text dark:text-amber-400", children: "Unconfigured" }),
25010
24963
  environment.network,
25011
24964
  environment.chainId && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1.5 font-mono text-text-secondary", children: environment.chainId })
25012
24965
  ] })
@@ -25020,7 +24973,7 @@ function ActiveEnvironmentBadge({
25020
24973
  /* @__PURE__ */ jsxRuntime.jsxs(
25021
24974
  "span",
25022
24975
  {
25023
- className: `inline-flex items-center gap-1.5 text-[11px] font-semibold ${environment.mode === "test" ? "text-amber-400" : environment.mode === "live" ? "text-emerald-400" : "text-text-secondary"}`,
24976
+ className: `inline-flex items-center gap-1.5 text-[11px] font-semibold ${environment.mode === "test" ? "text-status-warning-text dark:text-amber-400" : environment.mode === "live" ? "text-status-success-text dark:text-emerald-400" : "text-text-secondary"}`,
25024
24977
  children: [
25025
24978
  /* @__PURE__ */ jsxRuntime.jsx(
25026
24979
  "span",
@@ -25064,7 +25017,7 @@ function ActiveEnvironmentBadge({
25064
25017
  void switchTo(option);
25065
25018
  }
25066
25019
  },
25067
- className: `flex min-h-[34px] min-w-0 items-center justify-center gap-1.5 rounded-lg border px-2 text-[11px] font-medium transition-colors focus:outline-none focus-visible:ring-2 disabled:cursor-default ${option.active ? test ? "border-amber-500/40 bg-raised text-amber-400 focus-visible:ring-amber-500/40" : "border-emerald-500/40 bg-raised text-emerald-400 focus-visible:ring-emerald-500/40" : unavailable ? "border-transparent text-text-muted opacity-50" : "border-transparent text-text-secondary hover:bg-raised-hover hover:text-text-primary focus-visible:ring-border-strong"}`,
25020
+ className: `flex min-h-[34px] min-w-0 items-center justify-center gap-1.5 rounded-lg border px-2 text-[11px] font-medium transition-colors focus:outline-none focus-visible:ring-2 disabled:cursor-default ${option.active ? test ? "border-amber-500/40 bg-raised text-status-warning-text dark:text-amber-400 focus-visible:ring-amber-500/40" : "border-emerald-500/40 bg-raised text-status-success-text dark:text-emerald-400 focus-visible:ring-emerald-500/40" : unavailable ? "border-transparent text-text-muted opacity-50" : "border-transparent text-text-secondary hover:bg-raised-hover hover:text-text-primary focus-visible:ring-border-strong"}`,
25068
25021
  children: busy ? /* @__PURE__ */ jsxRuntime.jsx(Spinner, {}) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
25069
25022
  option.active && /* @__PURE__ */ jsxRuntime.jsx(
25070
25023
  "span",
@@ -25135,7 +25088,7 @@ function ActiveEnvironmentBadge({
25135
25088
  "div",
25136
25089
  {
25137
25090
  role: "alert",
25138
- className: "mt-2 rounded-xl border border-red-500/25 bg-red-500/[0.07] px-3 py-2 text-[10px] leading-4 text-red-400",
25091
+ className: "mt-2 rounded-xl border border-status-error-line dark:border-red-500/25 bg-status-error-bg dark:bg-red-500/[0.07] px-3 py-2 text-[10px] leading-4 text-status-error-text dark:text-red-400",
25139
25092
  children: error
25140
25093
  }
25141
25094
  )
@@ -25830,7 +25783,7 @@ function WalletMenu({
25830
25783
  onClick: onOpenActors,
25831
25784
  className: "flex min-h-[52px] w-full items-center gap-3 px-4 py-2 text-left text-[14px] font-semibold text-text-primary transition-colors hover:bg-raised-hover focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-orange-400/70",
25832
25785
  children: [
25833
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex h-7 w-7 items-center justify-center rounded-lg bg-orange-500/10 text-orange-400", children: activeActor?.kind === "self" ? /* @__PURE__ */ jsxRuntime.jsx(IconUser, {}) : /* @__PURE__ */ jsxRuntime.jsx(IconBuilding, {}) }),
25786
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex h-7 w-7 items-center justify-center rounded-lg bg-primary/10 text-primary dark:text-orange-400", children: activeActor?.kind === "self" ? /* @__PURE__ */ jsxRuntime.jsx(IconUser, {}) : /* @__PURE__ */ jsxRuntime.jsx(IconBuilding, {}) }),
25834
25787
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 flex-1", children: [
25835
25788
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate", children: activeActor?.label ?? userName }),
25836
25789
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-0.5 block text-[10px] font-medium capitalize text-text-muted", children: activeActor?.kind ?? "self" })
@@ -25845,7 +25798,7 @@ function WalletMenu({
25845
25798
  {
25846
25799
  type: "button",
25847
25800
  onClick: onSignOut,
25848
- className: "mt-3 flex min-h-[48px] w-full items-center justify-center gap-2 rounded-[24px] bg-red-500/10 px-4 py-3 text-[14px] font-semibold text-red-400 transition-colors hover:bg-red-500/15 focus:outline-none focus-visible:ring-2 focus-visible:ring-red-400/70",
25801
+ className: "mt-3 flex min-h-[48px] w-full items-center justify-center gap-2 rounded-[24px] bg-status-error-bg dark:bg-red-500/10 px-4 py-3 text-[14px] font-semibold text-status-error-text dark:text-red-400 transition-colors hover:bg-red-500/15 focus:outline-none focus-visible:ring-2 focus-visible:ring-red-400/70",
25849
25802
  children: [
25850
25803
  /* @__PURE__ */ jsxRuntime.jsx(IconSignOut, {}),
25851
25804
  "Sign out"
@@ -25877,7 +25830,7 @@ function WalletMenuRow({
25877
25830
  {
25878
25831
  className: cx4(
25879
25832
  "mr-3 inline-flex h-8 w-8 items-center justify-center rounded-lg",
25880
- urgent ? "bg-violet-500/20 text-orange-400" : active ? "bg-surface-alt text-text-secondary" : "bg-surface-alt text-text-muted"
25833
+ urgent ? "bg-violet-500/20 text-primary dark:text-orange-400" : active ? "bg-surface-alt text-text-secondary" : "bg-surface-alt text-text-muted"
25881
25834
  ),
25882
25835
  children: item.icon
25883
25836
  }
@@ -26117,7 +26070,7 @@ function DirectoryPane({
26117
26070
  {
26118
26071
  type: "button",
26119
26072
  onClick: () => setQuery(""),
26120
- className: "mt-2 min-h-[44px] rounded-xl px-3 text-[12px] font-semibold text-orange-400 hover:bg-orange-400/10",
26073
+ className: "mt-2 min-h-[44px] rounded-xl px-3 text-[12px] font-semibold text-primary dark:text-orange-400 hover:bg-primary/10 dark:hover:bg-orange-400/10",
26121
26074
  children: "Clear search"
26122
26075
  }
26123
26076
  )
@@ -28047,7 +28000,7 @@ var BillingCenter = ({ dense = false }) => {
28047
28000
  if (notConfigured) {
28048
28001
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: outerClass, children: [
28049
28002
  !dense && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4", children: [
28050
- /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: "text-lg font-semibold text-text-primary", children: [
28003
+ /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: "text-lg font-semibold text-text-primary max-sm:sr-only", children: [
28051
28004
  "Usage & billing",
28052
28005
  !isLiveMode() && paymentsUrlMap() && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 align-middle inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-semibold uppercase tracking-wider bg-amber-500/15 text-amber-600 ring-1 ring-amber-500/40", children: "Test mode" })
28053
28006
  ] }),
@@ -28133,7 +28086,7 @@ var BillingCenter = ({ dense = false }) => {
28133
28086
  const recoveryAction = summary ? billingRecoveryAction(summary) : null;
28134
28087
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: outerClass, children: [
28135
28088
  !dense && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4", children: [
28136
- /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: "text-lg font-semibold text-text-primary", children: [
28089
+ /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: "text-lg font-semibold text-text-primary max-sm:sr-only", children: [
28137
28090
  "Usage & billing",
28138
28091
  !isLiveMode() && paymentsUrlMap() && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 align-middle inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-semibold uppercase tracking-wider bg-amber-500/15 text-amber-600 ring-1 ring-amber-500/40", children: "Test mode" })
28139
28092
  ] }),
@@ -29710,7 +29663,7 @@ var VerificationDialog = ({
29710
29663
  type: "button",
29711
29664
  onClick: () => setActiveProvider(null),
29712
29665
  className: "mb-3 text-[12px] text-text-secondary hover:text-text-primary",
29713
- children: "\u2190 Choose a different provider"
29666
+ children: "\u2039 Choose a different provider"
29714
29667
  }
29715
29668
  ),
29716
29669
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -29855,7 +29808,7 @@ function BusinessVerificationSection({
29855
29808
  };
29856
29809
  const copy = STATUS_COPY[status] ?? STATUS_COPY.unverified;
29857
29810
  const impl = flowInstance ? resolveKycInstance(config, flowInstance) : null;
29858
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-lg border border-white/[0.07] bg-white/[0.02] p-4 space-y-3", children: [
29811
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-lg border border-border-default dark:border-white/[0.07] bg-raised dark:bg-white/[0.02] p-4 space-y-3", children: [
29859
29812
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3", children: [
29860
29813
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-sm font-semibold text-text-secondary", children: "Business verification" }),
29861
29814
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -29873,7 +29826,7 @@ function BusinessVerificationSection({
29873
29826
  type: "button",
29874
29827
  onClick: () => setFlowInstance(null),
29875
29828
  className: "mb-3 text-[12px] text-text-secondary hover:text-text-primary",
29876
- children: "\u2190 Back"
29829
+ children: "\u2039 Back"
29877
29830
  }
29878
29831
  ),
29879
29832
  /* @__PURE__ */ jsxRuntime.jsx(