@abstraxn/signer-react 3.3.10 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/src/ConnectButton.css.d.ts +2 -0
  3. package/dist/src/ConnectButton.css.js +1 -0
  4. package/dist/src/ConnectButton.d.ts +0 -1
  5. package/dist/src/ConnectButton.js +7 -6
  6. package/dist/src/ExternalWalletButtons.css.d.ts +2 -0
  7. package/dist/src/ExternalWalletButtons.css.js +1 -0
  8. package/dist/src/ExternalWalletButtons.d.ts +4 -1
  9. package/dist/src/ExternalWalletButtons.js +6 -1
  10. package/dist/src/WalletModal.css +2 -0
  11. package/dist/src/WalletModal.css.d.ts +2 -0
  12. package/dist/src/WalletModal.css.js +1 -0
  13. package/dist/src/WalletModal.d.ts +2 -2
  14. package/dist/src/WalletModal.js +113 -59
  15. package/dist/src/components/AbstraxnLogo.d.ts +17 -0
  16. package/dist/src/components/AbstraxnLogo.js +29 -0
  17. package/dist/src/components/AbstraxnProvider/AbstraxnProviderInner.js +406 -338
  18. package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.d.ts +7 -0
  19. package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.js +9 -0
  20. package/dist/src/components/AbstraxnProvider/useWalletInitialization.js +41 -6
  21. package/dist/src/components/OnboardingUI/OnboardingUI.css +99 -4
  22. package/dist/src/components/OnboardingUI/OnboardingUI.css.d.ts +2 -0
  23. package/dist/src/components/OnboardingUI/OnboardingUI.css.js +1 -0
  24. package/dist/src/components/OnboardingUI/OnboardingUIReact.d.ts +0 -1
  25. package/dist/src/components/OnboardingUI/OnboardingUIReact.js +46 -19
  26. package/dist/src/components/OnboardingUI/OnboardingUIWeb.d.ts +24 -1
  27. package/dist/src/components/OnboardingUI/OnboardingUIWeb.js +348 -160
  28. package/dist/src/components/OnboardingUI/components/Divider.d.ts +7 -0
  29. package/dist/src/components/OnboardingUI/components/Divider.js +9 -0
  30. package/dist/src/components/OnboardingUI/components/EmailForm.d.ts +0 -1
  31. package/dist/src/components/OnboardingUI/components/EmailForm.js +1 -2
  32. package/dist/src/components/OnboardingUI/components/MfaForm.d.ts +0 -1
  33. package/dist/src/components/OnboardingUI/components/MfaForm.js +2 -3
  34. package/dist/src/components/OnboardingUI/components/Modal.d.ts +0 -1
  35. package/dist/src/components/OnboardingUI/components/Modal.js +12 -4
  36. package/dist/src/components/OnboardingUI/components/OtpForm.d.ts +0 -1
  37. package/dist/src/components/OnboardingUI/components/OtpForm.js +2 -3
  38. package/dist/src/components/OnboardingUI/components/PasskeyButton.d.ts +0 -1
  39. package/dist/src/components/OnboardingUI/components/PasskeyButton.js +2 -2
  40. package/dist/src/components/OnboardingUI/components/SocialButtons.d.ts +0 -1
  41. package/dist/src/components/OnboardingUI/components/SocialButtons.js +3 -3
  42. package/dist/src/components/OnboardingUI/onboardingShadowContainer.d.ts +9 -0
  43. package/dist/src/components/OnboardingUI/onboardingShadowContainer.js +36 -0
  44. package/dist/src/components/ShadowHost/ShadowHost.d.ts +18 -0
  45. package/dist/src/components/ShadowHost/ShadowHost.js +123 -0
  46. package/dist/src/components/ShadowHost/ShadowHostContext.d.ts +10 -0
  47. package/dist/src/components/ShadowHost/ShadowHostContext.js +14 -0
  48. package/dist/src/components/ShadowHost/index.d.ts +2 -0
  49. package/dist/src/components/ShadowHost/index.js +3 -0
  50. package/dist/src/components/WalletModal/components/ChainSelector.css +9 -0
  51. package/dist/src/components/WalletModal/components/ChainSelector.css.d.ts +2 -0
  52. package/dist/src/components/WalletModal/components/ChainSelector.css.js +1 -0
  53. package/dist/src/components/WalletModal/components/ChainSelector.d.ts +0 -1
  54. package/dist/src/components/WalletModal/components/ChainSelector.js +78 -23
  55. package/dist/src/components/WalletModal/components/CodeInput.d.ts +12 -0
  56. package/dist/src/components/WalletModal/components/CodeInput.js +39 -0
  57. package/dist/src/components/WalletModal/components/ExportKeyModal.css.d.ts +2 -0
  58. package/dist/src/components/WalletModal/components/ExportKeyModal.css.js +1 -0
  59. package/dist/src/components/WalletModal/components/ExportKeyModal.d.ts +0 -2
  60. package/dist/src/components/WalletModal/components/ExportKeyModal.js +2 -4
  61. package/dist/src/components/WalletModal/components/ExportWarningModal.css.d.ts +2 -0
  62. package/dist/src/components/WalletModal/components/ExportWarningModal.css.js +1 -0
  63. package/dist/src/components/WalletModal/components/ExportWarningModal.d.ts +0 -2
  64. package/dist/src/components/WalletModal/components/ExportWarningModal.js +2 -4
  65. package/dist/src/components/WalletModal/components/ManageWalletModal.css +27 -1
  66. package/dist/src/components/WalletModal/components/ManageWalletModal.css.d.ts +2 -0
  67. package/dist/src/components/WalletModal/components/ManageWalletModal.css.js +1 -0
  68. package/dist/src/components/WalletModal/components/ManageWalletModal.d.ts +0 -1
  69. package/dist/src/components/WalletModal/components/ManageWalletModal.js +66 -148
  70. package/dist/src/components/WalletModal/components/MfaVerifyModal.d.ts +15 -0
  71. package/dist/src/components/WalletModal/components/MfaVerifyModal.js +98 -0
  72. package/dist/src/components/WalletModal/components/PreviewTransactionModal.css +2 -12
  73. package/dist/src/components/WalletModal/components/PreviewTransactionModal.css.d.ts +2 -0
  74. package/dist/src/components/WalletModal/components/PreviewTransactionModal.css.js +1 -0
  75. package/dist/src/components/WalletModal/components/PreviewTransactionModal.d.ts +0 -1
  76. package/dist/src/components/WalletModal/components/PreviewTransactionModal.js +0 -1
  77. package/dist/src/components/WalletModal/components/ReceiveModal.css.d.ts +2 -0
  78. package/dist/src/components/WalletModal/components/ReceiveModal.css.js +1 -0
  79. package/dist/src/components/WalletModal/components/ReceiveModal.d.ts +0 -1
  80. package/dist/src/components/WalletModal/components/ReceiveModal.js +2 -2
  81. package/dist/src/components/WalletModal/components/SendModal.css.d.ts +2 -0
  82. package/dist/src/components/WalletModal/components/SendModal.css.js +1 -0
  83. package/dist/src/components/WalletModal/components/SendModal.d.ts +5 -2
  84. package/dist/src/components/WalletModal/components/SendModal.js +25 -82
  85. package/dist/src/components/WalletModal/components/SignMfaModalHost.d.ts +1 -0
  86. package/dist/src/components/WalletModal/components/SignMfaModalHost.js +50 -0
  87. package/dist/src/components/WalletModal/components/SuccessModal.css.d.ts +2 -0
  88. package/dist/src/components/WalletModal/components/SuccessModal.css.js +1 -0
  89. package/dist/src/components/WalletModal/components/SuccessModal.d.ts +0 -1
  90. package/dist/src/components/WalletModal/components/SuccessModal.js +0 -1
  91. package/dist/src/components/WalletModal/components/TokenSelectorModal.css.d.ts +2 -0
  92. package/dist/src/components/WalletModal/components/TokenSelectorModal.css.js +1 -0
  93. package/dist/src/components/WalletModal/components/TokenSelectorModal.d.ts +0 -1
  94. package/dist/src/components/WalletModal/components/TokenSelectorModal.js +0 -1
  95. package/dist/src/components/WalletModal/components/UserAvatar.js +2 -1
  96. package/dist/src/components/WalletModal/components/index.d.ts +3 -0
  97. package/dist/src/components/WalletModal/components/index.js +2 -0
  98. package/dist/src/components/WalletModal/hooks/useSendTransaction.js +18 -6
  99. package/dist/src/components/icons.d.ts +2 -0
  100. package/dist/src/components/icons.js +4 -0
  101. package/dist/src/hooks.d.ts +58 -3
  102. package/dist/src/hooks.js +172 -30
  103. package/dist/src/index.d.ts +1 -1
  104. package/dist/src/index.js +1 -1
  105. package/dist/src/signMfaBridge.d.ts +7 -0
  106. package/dist/src/signMfaBridge.js +20 -0
  107. package/dist/src/types.d.ts +4 -0
  108. package/dist/src/utils/shadowFocus.d.ts +8 -0
  109. package/dist/src/utils/shadowFocus.js +15 -0
  110. package/dist/src/utils/shadowRegistry.d.ts +23 -0
  111. package/dist/src/utils/shadowRegistry.js +36 -0
  112. package/package.json +9 -4
@@ -2,25 +2,63 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /**
3
3
  * Chain Selector Component
4
4
  */
5
- import { useState, useEffect, useMemo } from "react";
6
- import "./ChainSelector.css";
5
+ import { useState, useEffect, useMemo, useRef } from "react";
6
+ // If a chain switch somehow never resolves/rejects, this guarantees the selector
7
+ // becomes clickable again instead of staying silently inert forever.
8
+ const SWITCH_SAFETY_TIMEOUT_MS = 15000;
9
+ function defaultFilterForChains(chains) {
10
+ if (chains.length === 0)
11
+ return "all";
12
+ const hasMainnet = chains.some((c) => !c.isTestnet);
13
+ const hasTestnet = chains.some((c) => c.isTestnet);
14
+ // Only testnets configured (e.g. BlockMaze) → open on Testnets, not Mainnets.
15
+ if (hasTestnet && !hasMainnet)
16
+ return "testnet";
17
+ // Only mainnets → Mainnets.
18
+ if (hasMainnet && !hasTestnet)
19
+ return "mainnet";
20
+ return "all";
21
+ }
22
+ function emptyListMessage(filterType, searchQuery) {
23
+ const q = searchQuery.trim();
24
+ if (q) {
25
+ return `No networks found for "${q}"`;
26
+ }
27
+ if (filterType === "mainnet") {
28
+ return "No mainnets configured";
29
+ }
30
+ if (filterType === "testnet") {
31
+ return "No testnets configured";
32
+ }
33
+ return "No networks configured";
34
+ }
7
35
  export function ChainSelector({ currentChain, availableChains, onChainSelect, onClose, theme = "dark", isOpen, }) {
8
36
  const [searchQuery, setSearchQuery] = useState("");
9
37
  const [filterType, setFilterType] = useState("all");
10
38
  const [isSwitching, setIsSwitching] = useState(false);
11
39
  const [switchingChainId, setSwitchingChainId] = useState(null);
12
- // Reset state when opened
40
+ const safetyTimeoutRef = useRef(null);
41
+ const clearSafetyTimeout = () => {
42
+ if (safetyTimeoutRef.current) {
43
+ clearTimeout(safetyTimeoutRef.current);
44
+ safetyTimeoutRef.current = null;
45
+ }
46
+ };
47
+ // Reset state when opened — pick a tab that actually has chains.
13
48
  useEffect(() => {
14
49
  if (isOpen) {
15
50
  setSearchQuery("");
16
- setFilterType("all");
51
+ setFilterType(defaultFilterForChains(availableChains));
17
52
  setIsSwitching(false);
18
53
  setSwitchingChainId(null);
54
+ clearSafetyTimeout();
19
55
  }
20
- }, [isOpen]);
56
+ return clearSafetyTimeout;
57
+ }, [isOpen, availableChains]);
21
58
  const filteredChains = useMemo(() => {
22
59
  return availableChains.filter((chain) => {
23
- const matchesSearch = chain.displayName.toLowerCase().includes(searchQuery.toLowerCase()) ||
60
+ const label = (chain.displayName || chain.name || "").toLowerCase();
61
+ const matchesSearch = label.includes(searchQuery.toLowerCase()) ||
24
62
  chain.id.toString().includes(searchQuery);
25
63
  const matchesFilter = filterType === "all" ||
26
64
  (filterType === "mainnet" && !chain.isTestnet) ||
@@ -52,24 +90,41 @@ export function ChainSelector({ currentChain, availableChains, onChainSelect, on
52
90
  ? "ALL NETWORKS"
53
91
  : filterType === "mainnet"
54
92
  ? "MAINNETS"
55
- : "TESTNETS" }), _jsxs("div", { className: "wallet-modal-chain-list", children: [filteredChains.map((chain) => (_jsxs("button", { className: `wallet-modal-chain-item ${currentChain?.id === chain.id ? "active" : ""} ${isSwitching && switchingChainId === chain.id
56
- ? "switching"
57
- : ""}`, disabled: isSwitching, onClick: async (e) => {
58
- e.stopPropagation();
59
- if (isSwitching)
60
- return;
61
- try {
93
+ : "TESTNETS" }), _jsxs("div", { className: "wallet-modal-chain-list", children: [filteredChains.map((chain) => {
94
+ const label = chain.displayName || chain.name || `Chain ${chain.id}`;
95
+ return (_jsxs("button", { className: `wallet-modal-chain-item ${currentChain?.id === chain.id ? "active" : ""} ${isSwitching && switchingChainId === chain.id
96
+ ? "switching"
97
+ : ""}`, "aria-disabled": isSwitching, onClick: async (e) => {
98
+ e.stopPropagation();
99
+ console.log("Chain item clicked:", {
100
+ chainId: chain.id,
101
+ isSwitching,
102
+ });
103
+ if (isSwitching)
104
+ return;
62
105
  setIsSwitching(true);
63
106
  setSwitchingChainId(chain.id);
64
- await onChainSelect(chain.id);
65
- }
66
- catch (error) {
67
- console.error("Chain switch error:", error);
68
- }
69
- finally {
70
- setIsSwitching(false);
71
- setSwitchingChainId(null);
72
- }
73
- }, children: [_jsxs("div", { className: "wallet-modal-chain-item-icon-wrapper", children: [chain.iconUrl ? (_jsx("img", { src: chain.iconUrl, alt: chain.displayName, className: "wallet-modal-chain-item-icon-img" })) : (_jsx("div", { className: "wallet-modal-chain-item-icon-placeholder", children: chain.displayName.charAt(0) })), currentChain?.id === chain.id && (_jsx("span", { className: "wallet-modal-chain-item-status" }))] }), _jsx("span", { className: "wallet-modal-chain-item-name", children: chain.displayName }), currentChain?.id === chain.id && (_jsx("div", { className: "wallet-modal-chain-item-checkmark", children: _jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("polyline", { points: "20 6 9 17 4 12" }) }) }))] }, chain.id))), filteredChains.length === 0 && (_jsxs("div", { className: "wallet-modal-chain-no-results", children: ["No networks found for \"", searchQuery, "\""] }))] })] })] })] }));
107
+ // Defense-in-depth: guarantees the guard clears even if
108
+ // onChainSelect hangs forever (never resolves or rejects), instead
109
+ // of leaving every future click silently inert.
110
+ clearSafetyTimeout();
111
+ safetyTimeoutRef.current = setTimeout(() => {
112
+ console.warn("Chain switch timed out - resetting switching state.");
113
+ setIsSwitching(false);
114
+ setSwitchingChainId(null);
115
+ }, SWITCH_SAFETY_TIMEOUT_MS);
116
+ try {
117
+ await onChainSelect(chain.id);
118
+ }
119
+ catch (error) {
120
+ console.error("Chain switch error:", error);
121
+ }
122
+ finally {
123
+ clearSafetyTimeout();
124
+ setIsSwitching(false);
125
+ setSwitchingChainId(null);
126
+ }
127
+ }, children: [_jsxs("div", { className: "wallet-modal-chain-item-icon-wrapper", children: [chain.iconUrl ? (_jsx("img", { src: chain.iconUrl, alt: label, className: "wallet-modal-chain-item-icon-img" })) : (_jsx("div", { className: "wallet-modal-chain-item-icon-placeholder", children: label.charAt(0) })), currentChain?.id === chain.id && (_jsx("span", { className: "wallet-modal-chain-item-status" }))] }), _jsx("span", { className: "wallet-modal-chain-item-name", children: label }), currentChain?.id === chain.id && (_jsx("div", { className: "wallet-modal-chain-item-checkmark", children: _jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("polyline", { points: "20 6 9 17 4 12" }) }) }))] }, chain.id));
128
+ }), filteredChains.length === 0 && (_jsx("div", { className: "wallet-modal-chain-no-results", children: emptyListMessage(filterType, searchQuery) }))] })] })] })] }));
74
129
  }
75
130
  //# sourceMappingURL=ChainSelector.js.map
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Code Input Component
3
+ * A row of single-character digit boxes for entering a fixed-length numeric code
4
+ */
5
+ export interface CodeInputProps {
6
+ length: number;
7
+ value: string;
8
+ onChange: (value: string) => void;
9
+ onComplete?: () => void;
10
+ disabled?: boolean;
11
+ }
12
+ export declare function CodeInput({ length, value, onChange, onComplete, disabled }: CodeInputProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function CodeInput({ length, value, onChange, onComplete, disabled }) {
3
+ const handleChange = (index, e) => {
4
+ const val = e.target.value.replace(/\D/g, "");
5
+ if (!val)
6
+ return;
7
+ const newCode = value.split("");
8
+ newCode[index] = val;
9
+ const combined = newCode.join("").slice(0, length);
10
+ onChange(combined);
11
+ if (combined.length === length) {
12
+ onComplete?.();
13
+ }
14
+ if (index < length - 1) {
15
+ const target = e.target;
16
+ const next = target.parentElement?.nextElementSibling?.querySelector("input");
17
+ next?.focus();
18
+ }
19
+ };
20
+ const handleKeyDown = (index, e) => {
21
+ if (e.key !== "Backspace")
22
+ return;
23
+ const target = e.target;
24
+ if (!value[index] && index > 0) {
25
+ const prev = target.parentElement?.previousElementSibling?.querySelector("input");
26
+ prev?.focus();
27
+ const newCode = value.split("");
28
+ newCode[index - 1] = "";
29
+ onChange(newCode.join(""));
30
+ }
31
+ else {
32
+ const newCode = value.split("");
33
+ newCode[index] = "";
34
+ onChange(newCode.join(""));
35
+ }
36
+ };
37
+ return (_jsx("div", { className: "mfa-otp-grid", children: Array.from({ length }, (_, index) => (_jsx("div", { className: "mfa-otp-slot", children: _jsx("input", { type: "text", inputMode: "numeric", maxLength: 1, value: value[index] || "", onChange: (e) => handleChange(index, e), onKeyDown: (e) => handleKeyDown(index, e), className: "mfa-otp-input", disabled: disabled }) }, index))) }));
38
+ }
39
+ //# sourceMappingURL=CodeInput.js.map
@@ -0,0 +1,2 @@
1
+ declare const cssText: string;
2
+ export default cssText;
@@ -0,0 +1 @@
1
+ export default "/* Export Key Modal Styles - extracted from WalletModal.css */\n.wallet-modal-export-key-body {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.wallet-modal-export-key-warning {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid;\n}\n\n.wallet-modal-theme-light .wallet-modal-export-key-warning {\n background: #f3f4f6;\n border-color: #e5e7eb;\n}\n\n.wallet-modal-theme-dark .wallet-modal-export-key-warning {\n background: #2a2a2a;\n border-color: #3a3a3a;\n}\n\n.wallet-modal-export-key-warning-icon {\n flex-shrink: 0;\n margin-top: 2px;\n color: #2563eb;\n}\n\n.wallet-modal-theme-dark .wallet-modal-export-key-warning-icon {\n color: #60a5fa;\n}\n\n.wallet-modal-export-key-warning-text {\n min-width: 0;\n}\n\n.wallet-modal-export-key-warning-title {\n font-size: 13px;\n font-weight: 700;\n line-height: 1.35;\n}\n\n.wallet-modal-export-key-warning-subtitle {\n margin-top: 2px;\n font-size: 12px;\n line-height: 1.35;\n opacity: 0.85;\n}\n\n.wallet-modal-theme-light .wallet-modal-export-key-warning-title,\n.wallet-modal-theme-light .wallet-modal-export-key-warning-subtitle {\n color: #111827;\n}\n\n.wallet-modal-theme-dark .wallet-modal-export-key-warning-title,\n.wallet-modal-theme-dark .wallet-modal-export-key-warning-subtitle {\n color: #ffffff;\n}\n\n.wallet-modal-export-key-field {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid;\n box-sizing: border-box;\n}\n\n.wallet-modal-theme-light .wallet-modal-export-key-field {\n background: #ffffff;\n border-color: #e5e7eb;\n}\n\n.wallet-modal-theme-dark .wallet-modal-export-key-field {\n background: #2a2a2a;\n border-color: #3a3a3a;\n}\n\n.wallet-modal-export-key-value {\n flex: 1;\n min-width: 0;\n font-family: 'GeistMono', 'SF Mono', monospace;\n font-size: 13px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.wallet-modal-theme-light .wallet-modal-export-key-value {\n color: #111827;\n}\n\n.wallet-modal-theme-dark .wallet-modal-export-key-value {\n color: #ffffff;\n}\n\n.wallet-modal-export-key-inline-copy {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 6px;\n border-radius: 8px;\n transition: background 0.15s ease;\n color: inherit;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.wallet-modal-theme-light .wallet-modal-export-key-inline-copy {\n color: #6b7280;\n}\n\n.wallet-modal-theme-dark .wallet-modal-export-key-inline-copy {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-light .wallet-modal-export-key-inline-copy:hover {\n background: rgba(17, 24, 39, 0.06);\n color: #111827;\n}\n\n.wallet-modal-theme-dark .wallet-modal-export-key-inline-copy:hover {\n background: rgba(255, 255, 255, 0.08);\n color: #ffffff;\n}\n";
@@ -2,8 +2,6 @@
2
2
  * Export Key Modal Component
3
3
  */
4
4
  import { type CSSProperties } from 'react';
5
- import './ExportKeyModal.css';
6
- import '../../../WalletModal.css';
7
5
  export interface ExportKeyModalProps {
8
6
  isOpen: boolean;
9
7
  onClose: () => void;
@@ -3,9 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  * Export Key Modal Component
4
4
  */
5
5
  import { useState, useCallback } from 'react';
6
- import './ExportKeyModal.css';
7
- import '../../../WalletModal.css';
8
- import { FiInfo } from '../../icons';
6
+ import { FiInfo, CloseIcon } from '../../icons';
9
7
  export function ExportKeyModal({ isOpen, onClose, privateKey, theme = 'dark', style, }) {
10
8
  const [copied, setCopied] = useState(false);
11
9
  const handleCopy = useCallback(() => {
@@ -21,6 +19,6 @@ export function ExportKeyModal({ isOpen, onClose, privateKey, theme = 'dark', st
21
19
  }, [onClose]);
22
20
  if (!isOpen)
23
21
  return null;
24
- return (_jsx("div", { className: `wallet-modal-overlay wallet-modal-theme-${theme}`, onClick: handleClose, style: style, children: _jsxs("div", { className: `wallet-modal-content wallet-modal-theme-${theme} wallet-modal-export-key`, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "wallet-modal-receive-header", children: [_jsx("button", { className: "wallet-modal-back", onClick: handleClose, children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: _jsx("path", { d: "M12.5 15L7.5 10L12.5 5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }), _jsx("h2", { className: "wallet-modal-receive-title", children: "Export Private Key" }), _jsx("button", { className: "wallet-modal-close", onClick: handleClose, "aria-label": "Close", children: _jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M18 6L6 18M6 6L18 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) })] }), _jsxs("div", { className: "wallet-modal-export-key-body", children: [_jsxs("div", { className: "wallet-modal-export-key-warning", role: "note", children: [_jsx("div", { className: "wallet-modal-export-key-warning-icon", "aria-hidden": "true", children: _jsx(FiInfo, { size: 18 }) }), _jsxs("div", { className: "wallet-modal-export-key-warning-text", children: [_jsx("div", { className: "wallet-modal-export-key-warning-title", children: "Don't share your private key with anyone." }), _jsx("div", { className: "wallet-modal-export-key-warning-subtitle", children: "This private key grants full access to your wallet and all held assets." })] })] }), _jsxs("div", { className: "wallet-modal-export-key-field", children: [_jsx("div", { className: "wallet-modal-export-key-value", title: privateKey, children: privateKey }), _jsx("button", { className: "wallet-modal-export-key-inline-copy", onClick: handleCopy, type: "button", "aria-label": "Copy private key", children: _jsxs("svg", { width: "18", height: "18", viewBox: "0 0 16 16", fill: "none", children: [_jsx("path", { d: "M5.5 3.5H3.5C2.67157 3.5 2 4.17157 2 5V12.5C2 13.3284 2.67157 14 3.5 14H11C11.8284 14 12.5 13.3284 12.5 12.5V10.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M5.5 3.5C5.5 2.67157 6.17157 2 7 2H12.5C13.3284 2 14 2.67157 14 3.5V9C14 9.82843 13.3284 10.5 12.5 10.5H7C6.17157 10.5 5.5 9.82843 5.5 9V3.5Z", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })] }) })] }), _jsx("button", { className: "wallet-modal-primary-btn", onClick: handleCopy, type: "button", children: copied ? "Copied" : "Copy" })] })] }) }));
22
+ return (_jsx("div", { className: `wallet-modal-overlay wallet-modal-theme-${theme}`, onClick: handleClose, style: style, children: _jsxs("div", { className: `wallet-modal-content wallet-modal-theme-${theme} wallet-modal-export-key`, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "wallet-modal-receive-header", children: [_jsx("button", { className: "wallet-modal-back", onClick: handleClose, children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: _jsx("path", { d: "M12.5 15L7.5 10L12.5 5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }), _jsx("h2", { className: "wallet-modal-receive-title", children: "Export Private Key" }), _jsx("button", { className: "wallet-modal-close", onClick: handleClose, "aria-label": "Close", children: _jsx(CloseIcon, { size: 24 }) })] }), _jsxs("div", { className: "wallet-modal-export-key-body", children: [_jsxs("div", { className: "wallet-modal-export-key-warning", role: "note", children: [_jsx("div", { className: "wallet-modal-export-key-warning-icon", "aria-hidden": "true", children: _jsx(FiInfo, { size: 18 }) }), _jsxs("div", { className: "wallet-modal-export-key-warning-text", children: [_jsx("div", { className: "wallet-modal-export-key-warning-title", children: "Don't share your private key with anyone." }), _jsx("div", { className: "wallet-modal-export-key-warning-subtitle", children: "This private key grants full access to your wallet and all held assets." })] })] }), _jsxs("div", { className: "wallet-modal-export-key-field", children: [_jsx("div", { className: "wallet-modal-export-key-value", title: privateKey, children: privateKey }), _jsx("button", { className: "wallet-modal-export-key-inline-copy", onClick: handleCopy, type: "button", "aria-label": "Copy private key", children: _jsxs("svg", { width: "18", height: "18", viewBox: "0 0 16 16", fill: "none", children: [_jsx("path", { d: "M5.5 3.5H3.5C2.67157 3.5 2 4.17157 2 5V12.5C2 13.3284 2.67157 14 3.5 14H11C11.8284 14 12.5 13.3284 12.5 12.5V10.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M5.5 3.5C5.5 2.67157 6.17157 2 7 2H12.5C13.3284 2 14 2.67157 14 3.5V9C14 9.82843 13.3284 10.5 12.5 10.5H7C6.17157 10.5 5.5 9.82843 5.5 9V3.5Z", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })] }) })] }), _jsx("button", { className: "wallet-modal-primary-btn", onClick: handleCopy, type: "button", children: copied ? "Copied" : "Copy" })] })] }) }));
25
23
  }
26
24
  //# sourceMappingURL=ExportKeyModal.js.map
@@ -0,0 +1,2 @@
1
+ declare const cssText: string;
2
+ export default cssText;
@@ -0,0 +1 @@
1
+ export default "/* Export Private Key (warning) - compact layout to match provided screenshot */\n\n.wallet-modal-content.wallet-modal-export-warning {\n padding: 20px;\n gap: 0;\n}\n\n.wallet-modal-export-warning-divider {\n width: 100%;\n height: 1px;\n background: rgba(17, 24, 39, 0.08);\n margin: 4px 0 14px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-export-warning-divider {\n background: rgba(255, 255, 255, 0.12);\n}\n\n.wallet-modal-export-warning-simple {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n padding: 6px 0 0;\n}\n\n.wallet-modal-export-warning-key-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n color: #7c3aed;\n transform: rotate(-20deg);\n}\n\n.wallet-modal-export-warning-simple-text {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n text-align: center;\n line-height: 1.4;\n max-width: 360px;\n}\n\n.wallet-modal-theme-light .wallet-modal-export-warning-simple-text {\n color: #111827;\n}\n\n.wallet-modal-theme-dark .wallet-modal-export-warning-simple-text {\n color: #ffffff;\n}\n\n.wallet-modal-export-warning-simple-checkbox {\n width: 100%;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 0;\n margin-top: 2px;\n cursor: pointer;\n user-select: none;\n}\n\n.wallet-modal-export-warning-simple-checkbox-input {\n width: 18px;\n height: 18px;\n margin-top: 2px;\n flex-shrink: 0;\n cursor: pointer;\n accent-color: #7c3aed;\n}\n\n.wallet-modal-export-warning-simple-checkbox span {\n font-size: 12px;\n line-height: 1.4;\n}\n\n.wallet-modal-theme-light .wallet-modal-export-warning-simple-checkbox span {\n color: #111827;\n}\n\n.wallet-modal-theme-dark .wallet-modal-export-warning-simple-checkbox span {\n color: #ffffff;\n}\n\n.wallet-modal-export-warning-continue {\n width: 100%;\n padding: 12px 18px;\n border-radius: 10px;\n border: none;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n background: var(--abstraxn-primary);\n color: var(--abstraxn-primary-text);\n}\n\n.wallet-modal-export-warning-continue:hover:not(.disabled) {\n background: var(--abstraxn-primary-hover);\n}\n\n.wallet-modal-export-warning-continue.disabled,\n.wallet-modal-export-warning-continue:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n";
@@ -3,8 +3,6 @@
3
3
  */
4
4
  import { type CSSProperties } from 'react';
5
5
  import type { ChainData } from '../../../chains';
6
- import '../../../WalletModal.css';
7
- import './ExportWarningModal.css';
8
6
  export interface ExportWarningModalProps {
9
7
  isOpen: boolean;
10
8
  onClose: () => void;
@@ -3,9 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  * Export Warning Modal Component
4
4
  */
5
5
  import { useState } from 'react';
6
- import '../../../WalletModal.css';
7
- import './ExportWarningModal.css';
8
- import { IoKeyOutline } from '../../icons';
6
+ import { IoKeyOutline, CloseIcon } from '../../icons';
9
7
  export function ExportWarningModal({ isOpen, onClose, onAcknowledge, currentChain: _currentChain, isExporting, theme = 'dark', style, }) {
10
8
  const [acknowledged, setAcknowledged] = useState(false);
11
9
  const handleReveal = () => {
@@ -15,6 +13,6 @@ export function ExportWarningModal({ isOpen, onClose, onAcknowledge, currentChai
15
13
  };
16
14
  if (!isOpen)
17
15
  return null;
18
- return (_jsx("div", { className: `wallet-modal-overlay wallet-modal-theme-${theme}`, onClick: onClose, style: style, children: _jsxs("div", { className: `wallet-modal-content wallet-modal-theme-${theme} wallet-modal-export-warning`, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "wallet-modal-receive-header", children: [_jsx("button", { className: "wallet-modal-back", onClick: onClose, disabled: isExporting, children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: _jsx("path", { d: "M12.5 15L7.5 10L12.5 5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }), _jsx("h2", { className: "wallet-modal-receive-title", children: "Export Private Key" }), _jsx("button", { className: "wallet-modal-close", onClick: onClose, "aria-label": "Close", disabled: isExporting, children: _jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M18 6L6 18M6 6L18 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) })] }), _jsx("div", { className: "wallet-modal-export-warning-divider" }), _jsxs("div", { className: "wallet-modal-export-warning-simple", children: [_jsx("div", { className: "wallet-modal-export-warning-key-icon", "aria-hidden": "true", children: _jsx(IoKeyOutline, { size: 56 }) }), _jsx("p", { className: "wallet-modal-export-warning-simple-text", children: "Reveal your private key to manage this wallet in a different app." }), _jsxs("label", { className: "wallet-modal-export-warning-simple-checkbox", children: [_jsx("input", { type: "checkbox", checked: acknowledged, onChange: (e) => setAcknowledged(e.target.checked), className: "wallet-modal-export-warning-simple-checkbox-input" }), _jsx("span", { children: "I understand the risks of owning my private key and am fully responsible for keeping it secure." })] }), _jsx("button", { className: `wallet-modal-export-warning-continue ${!acknowledged || isExporting ? 'disabled' : ''}`, onClick: handleReveal, disabled: !acknowledged || isExporting, children: isExporting ? 'Loading...' : 'Continue' })] })] }) }));
16
+ return (_jsx("div", { className: `wallet-modal-overlay wallet-modal-theme-${theme}`, onClick: onClose, style: style, children: _jsxs("div", { className: `wallet-modal-content wallet-modal-theme-${theme} wallet-modal-export-warning`, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "wallet-modal-receive-header", children: [_jsx("button", { className: "wallet-modal-back", onClick: onClose, disabled: isExporting, children: _jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: _jsx("path", { d: "M12.5 15L7.5 10L12.5 5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }), _jsx("h2", { className: "wallet-modal-receive-title", children: "Export Private Key" }), _jsx("button", { className: "wallet-modal-close", onClick: onClose, "aria-label": "Close", disabled: isExporting, children: _jsx(CloseIcon, { size: 24 }) })] }), _jsx("div", { className: "wallet-modal-export-warning-divider" }), _jsxs("div", { className: "wallet-modal-export-warning-simple", children: [_jsx("div", { className: "wallet-modal-export-warning-key-icon", "aria-hidden": "true", children: _jsx(IoKeyOutline, { size: 56 }) }), _jsx("p", { className: "wallet-modal-export-warning-simple-text", children: "Reveal your private key to manage this wallet in a different app." }), _jsxs("label", { className: "wallet-modal-export-warning-simple-checkbox", children: [_jsx("input", { type: "checkbox", checked: acknowledged, onChange: (e) => setAcknowledged(e.target.checked), className: "wallet-modal-export-warning-simple-checkbox-input" }), _jsx("span", { children: "I understand the risks of owning my private key and am fully responsible for keeping it secure." })] }), _jsx("button", { className: `wallet-modal-export-warning-continue ${!acknowledged || isExporting ? 'disabled' : ''}`, onClick: handleReveal, disabled: !acknowledged || isExporting, children: isExporting ? 'Loading...' : 'Continue' })] })] }) }));
19
17
  }
20
18
  //# sourceMappingURL=ExportWarningModal.js.map
@@ -683,10 +683,13 @@
683
683
 
684
684
  .wallet-modal-linked-profiles-loading,
685
685
  .wallet-modal-linked-profiles-error,
686
+ .wallet-modal-linked-profiles-success,
686
687
  .wallet-modal-linked-profiles-empty {
687
- padding: 20px 0;
688
+ padding: 12px 0 16px;
688
689
  font-size: 14px;
689
690
  text-align: center;
691
+ line-height: 1.4;
692
+ word-break: break-word;
690
693
  }
691
694
 
692
695
  .wallet-modal-theme-dark .wallet-modal-linked-profiles-loading,
@@ -707,6 +710,14 @@
707
710
  color: #dc2626;
708
711
  }
709
712
 
713
+ .wallet-modal-theme-dark .wallet-modal-linked-profiles-success {
714
+ color: #4ade80;
715
+ }
716
+
717
+ .wallet-modal-theme-light .wallet-modal-linked-profiles-success {
718
+ color: #16a34a;
719
+ }
720
+
710
721
  /* Second-layer overlay (separate modals on top of manage modal) */
711
722
  .wallet-modal-overlay-layer2 {
712
723
  z-index: 110000 !important;
@@ -814,6 +825,21 @@
814
825
  color: #6b7280;
815
826
  }
816
827
 
828
+ .wallet-modal-auth-error-message {
829
+ margin: 0 0 20px;
830
+ font-size: 14px;
831
+ line-height: 1.45;
832
+ word-break: break-word;
833
+ }
834
+
835
+ .wallet-modal-theme-dark .wallet-modal-auth-error-message {
836
+ color: rgba(255, 255, 255, 0.75);
837
+ }
838
+
839
+ .wallet-modal-theme-light .wallet-modal-auth-error-message {
840
+ color: #4b5563;
841
+ }
842
+
817
843
  .wallet-modal-unlink-confirm-details {
818
844
  padding: 12px 16px;
819
845
  border-radius: 10px;
@@ -0,0 +1,2 @@
1
+ declare const cssText: string;
2
+ export default cssText;
@@ -0,0 +1 @@
1
+ export default "/* Manage Wallet Modal Styles - extracted from WalletModal.css */\n.wallet-modal-manage {\n position: relative;\n}\n\n.wallet-modal-manage-content {\n padding: 12px 0 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.wallet-modal-manage-list {\n display: flex;\n flex-direction: column;\n padding: 0 20px;\n}\n\n.wallet-modal-manage-list-item {\n width: 100%;\n padding: 16px 0;\n border: none;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 12px;\n text-align: left;\n /* Calmer, SDK-style hover/press */\n transition: color 0.18s ease-out, transform 0.12s ease-out;\n}\n\n.wallet-modal-theme-dark .wallet-modal-manage-list-item {\n color: #ffffff;\n border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n}\n\n.wallet-modal-theme-light .wallet-modal-manage-list-item {\n color: #111827;\n border-bottom: 1px solid rgba(17, 24, 39, 0.08);\n}\n\n.wallet-modal-theme-dark .wallet-modal-manage-list-item:hover {\n color: #e5e7eb;\n}\n\n.wallet-modal-theme-light .wallet-modal-manage-list-item:hover {\n color: #374151;\n}\n\n.wallet-modal-manage-list-item:active {\n /* Subtle press instead of shrink/bounce */\n transform: translateY(1px);\n}\n\n.wallet-modal-manage-list-icon {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n opacity: 0.85;\n}\n\n.wallet-modal-provider-icon {\n color: currentColor;\n}\n\n.wallet-modal-provider-icon-google {\n color: inherit;\n}\n\n.wallet-modal-provider-icon-discord {\n color: #5865f2;\n}\n\n.wallet-modal-provider-icon-x {\n color: inherit;\n}\n\n.wallet-modal-theme-dark .wallet-modal-provider-icon-x {\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .wallet-modal-provider-icon-x {\n color: #111111;\n}\n\n.wallet-modal-theme-dark .wallet-modal-provider-icon-email,\n.wallet-modal-theme-dark .wallet-modal-provider-icon-passkey {\n color: rgba(255, 255, 255, 0.92);\n}\n\n.wallet-modal-theme-light .wallet-modal-provider-icon-email,\n.wallet-modal-theme-light .wallet-modal-provider-icon-passkey {\n color: #111827;\n}\n\n.wallet-modal-manage-list-label {\n flex: 1;\n font-size: 14px;\n font-weight: 500;\n}\n\n.wallet-modal-mfa-badge {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n margin-right: 4px;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n flex-shrink: 0;\n}\n\n.wallet-modal-mfa-badge-enabled {\n background-color: #dcfce7;\n color: #166534;\n}\n\n.wallet-modal-theme-dark .wallet-modal-mfa-badge-enabled {\n background-color: rgba(34, 197, 94, 0.2);\n color: #86efac;\n}\n\n.wallet-modal-mfa-badge-disabled {\n background-color: #fee2e2;\n color: #991b1b;\n}\n\n.wallet-modal-theme-dark .wallet-modal-mfa-badge-disabled {\n background-color: rgba(239, 68, 68, 0.2);\n color: #fca5a5;\n}\n\n.wallet-modal-manage-list-arrow {\n flex-shrink: 0;\n opacity: 0.5;\n}\n\n.wallet-modal-mfa-disable-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n margin-right: 8px;\n border-radius: 999px;\n color: #ef4444;\n opacity: 0.95;\n cursor: pointer;\n transition: transform 0.15s ease, opacity 0.15s ease, background-color 0.15s ease;\n}\n\n.wallet-modal-mfa-disable-trigger:hover {\n opacity: 1;\n transform: scale(1.05);\n}\n\n.wallet-modal-theme-dark .wallet-modal-mfa-disable-trigger:hover {\n background-color: rgba(239, 68, 68, 0.16);\n}\n\n.wallet-modal-theme-light .wallet-modal-mfa-disable-trigger:hover {\n background-color: rgba(239, 68, 68, 0.12);\n}\n\n.wallet-modal-manage-toast {\n position: absolute;\n left: 50%;\n bottom: 18px;\n transform: translateX(-50%);\n padding: 10px 14px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 500;\n pointer-events: none;\n z-index: 2;\n}\n\n.wallet-modal-theme-dark .wallet-modal-manage-toast {\n background: rgba(42, 42, 42, 0.95);\n border: 1px solid rgba(255, 255, 255, 0.12);\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .wallet-modal-manage-toast {\n background: rgba(249, 250, 251, 0.98);\n border: 1px solid rgba(17, 24, 39, 0.12);\n color: #111827;\n}\n\n.wallet-modal-manage-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.wallet-modal-manage-section-title {\n font-size: 16px;\n font-weight: 500;\n margin: 0;\n}\n\n.wallet-modal-theme-dark .wallet-modal-manage-section-title {\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .wallet-modal-manage-section-title {\n color: #111827;\n}\n\n.wallet-modal-manage-item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.wallet-modal-manage-label {\n font-size: 12px;\n opacity: 0.7;\n}\n\n.wallet-modal-theme-dark .wallet-modal-manage-label {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-light .wallet-modal-manage-label {\n color: #6b7280;\n}\n\n.wallet-modal-manage-value {\n font-size: 14px;\n font-weight: 500;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-manage-value {\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .wallet-modal-manage-value {\n color: #111827;\n}\n\n.wallet-modal-manage-address-text {\n font-family: 'GeistMono', 'SF Mono', monospace;\n flex: 1;\n min-width: 0;\n}\n\n.wallet-modal-manage-copy-btn {\n padding: 6px 12px;\n border-radius: 6px;\n border: none;\n background: transparent;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.wallet-modal-theme-dark .wallet-modal-manage-copy-btn {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-light .wallet-modal-manage-copy-btn {\n color: #6b7280;\n}\n\n.wallet-modal-theme-dark .wallet-modal-manage-copy-btn:hover {\n background: #2a2a2a;\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .wallet-modal-manage-copy-btn:hover {\n background: #f3f4f6;\n color: #111827;\n}\n\n.wallet-modal-manage-copy-btn.copied {\n color: #10b981;\n}\n\n.wallet-modal-manage-action-item {\n width: 100%;\n padding: 14px 16px;\n border-radius: 10px;\n border: 1px solid;\n background: transparent;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 12px;\n text-align: left;\n}\n\n.wallet-modal-theme-dark .wallet-modal-manage-action-item {\n border-color: #3a3a3a;\n background: #2a2a2a;\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .wallet-modal-manage-action-item {\n border-color: #e5e7eb;\n background: #f9fafb;\n color: #111827;\n}\n\n.wallet-modal-theme-dark .wallet-modal-manage-action-item:hover {\n background: #3a3a3a;\n border-color: #4a4a4a;\n}\n\n.wallet-modal-theme-light .wallet-modal-manage-action-item:hover {\n background: #f3f4f6;\n border-color: #d1d5db;\n}\n\n.wallet-modal-manage-action-icon {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.wallet-modal-manage-action-label {\n flex: 1;\n font-size: 14px;\n font-weight: 500;\n}\n\n.wallet-modal-manage-action-arrow {\n flex-shrink: 0;\n opacity: 0.5;\n}\n\n/* Linked Profiles sub-view */\n.wallet-modal-linked-profiles-list {\n display: flex;\n flex-direction: column;\n padding: 0 20px;\n gap: 0;\n}\n\n.wallet-modal-linked-profiles-row {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 0;\n border-bottom: 1px solid;\n min-height: 52px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-linked-profiles-row {\n color: #ffffff;\n border-bottom-color: rgba(255, 255, 255, 0.08);\n}\n\n.wallet-modal-theme-light .wallet-modal-linked-profiles-row {\n color: #111827;\n border-bottom-color: rgba(17, 24, 39, 0.08);\n}\n\n.wallet-modal-linked-profiles-row:last-child {\n border-bottom: none;\n}\n\n.wallet-modal-linked-profiles-action {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.wallet-modal-linked-connect,\n.wallet-modal-linked-disconnect {\n padding: 6px 12px;\n border-radius: 8px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n /* Consistent, minimal interaction motion */\n transition: color 0.18s ease-out, transform 0.12s ease-out;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.wallet-modal-linked-disconnect {\n padding: 8px;\n}\n\n.wallet-modal-linked-connect:disabled,\n.wallet-modal-linked-disconnect:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.wallet-modal-theme-dark .wallet-modal-linked-connect {\n color: rgba(255, 255, 255, 0.9);\n}\n\n.wallet-modal-theme-dark .wallet-modal-linked-connect:hover:not(:disabled) {\n color: #22c55e;\n}\n\n.wallet-modal-theme-dark .wallet-modal-linked-connect:active:not(:disabled) {\n transform: translateY(1px);\n}\n\n.wallet-modal-theme-light .wallet-modal-linked-connect {\n color: #374151;\n}\n\n.wallet-modal-theme-light .wallet-modal-linked-connect:hover:not(:disabled) {\n color: #16a34a;\n}\n\n.wallet-modal-theme-light .wallet-modal-linked-connect:active:not(:disabled) {\n transform: translateY(1px);\n}\n\n.wallet-modal-theme-dark .wallet-modal-linked-disconnect {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-dark .wallet-modal-linked-disconnect:hover:not(:disabled) {\n color: #ef4444;\n}\n\n.wallet-modal-theme-dark .wallet-modal-linked-disconnect:active:not(:disabled) {\n transform: translateY(1px);\n}\n\n.wallet-modal-theme-light .wallet-modal-linked-disconnect {\n color: #6b7280;\n}\n\n.wallet-modal-theme-light .wallet-modal-linked-disconnect:hover:not(:disabled) {\n color: #dc2626;\n}\n\n.wallet-modal-theme-light .wallet-modal-linked-disconnect:active:not(:disabled) {\n transform: translateY(1px);\n}\n\n.wallet-modal-email-link-flow {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n padding: 16px 20px 20px;\n min-width: 0;\n}\n\n.wallet-modal-email-link-form,\n.wallet-modal-email-link-otp {\n width: 100%;\n max-width: 360px;\n margin: 0 auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.wallet-modal-email-link-icon {\n width: 52px;\n height: 52px;\n border-radius: 999px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto 8px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-email-link-icon {\n background: rgba(148, 163, 184, 0.16);\n color: #e5e7eb;\n}\n\n.wallet-modal-theme-light .wallet-modal-email-link-icon {\n background: rgba(129, 140, 248, 0.16);\n color: #4b5563;\n}\n\n.wallet-modal-email-link-title {\n font-size: 18px;\n font-weight: 600;\n text-align: center;\n margin: 4px 0;\n}\n\n.wallet-modal-theme-dark .wallet-modal-email-link-title {\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .wallet-modal-email-link-title {\n color: #111827;\n}\n\n.wallet-modal-email-link-subtitle {\n font-size: 13px;\n text-align: center;\n margin: 0 0 12px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-email-link-subtitle {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-light .wallet-modal-email-link-subtitle {\n color: #6b7280;\n}\n\n.wallet-modal-email-link-label {\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 4px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-email-link-label {\n color: #e5e7eb;\n}\n\n.wallet-modal-theme-light .wallet-modal-email-link-label {\n color: #374151;\n}\n\n.wallet-modal-email-link-input {\n width: 100%;\n border-radius: 10px;\n border: 1.5px solid;\n padding: 10px 12px;\n font-size: 14px;\n outline: none;\n background: transparent;\n box-sizing: border-box;\n}\n\n.wallet-modal-theme-dark .wallet-modal-email-link-input {\n border-color: #4b5563;\n background: #111827;\n color: #f9fafb;\n}\n\n.wallet-modal-theme-light .wallet-modal-email-link-input {\n border-color: #e5e7eb;\n background: #ffffff;\n color: #111827;\n}\n\n.wallet-modal-email-link-input:focus {\n border-color: var(--abstraxn-primary, #3b82f6);\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.18);\n}\n\n.wallet-modal-email-link-error {\n margin: 4px 0 0;\n font-size: 12px;\n color: #ef4444;\n text-align: left;\n}\n\n.wallet-modal-email-link-button {\n margin-top: 8px;\n width: 100%;\n padding: 12px 16px;\n border-radius: 999px;\n border: none;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.18s ease-out;\n background: var(--abstraxn-primary);\n color: var(--abstraxn-primary-text);\n}\n\n.wallet-modal-email-link-button:hover:not(:disabled) {\n transform: translateY(-1px);\n filter: brightness(1.02);\n}\n\n.wallet-modal-email-link-button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.wallet-modal-email-link-otp {\n position: relative;\n}\n\n.wallet-modal-email-link-otp-back {\n position: absolute;\n top: 0;\n left: 0;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 999px;\n border: none;\n background: transparent;\n cursor: pointer;\n transition: background 0.15s ease-out, transform 0.1s ease-out;\n}\n\n.wallet-modal-theme-dark .wallet-modal-email-link-otp-back {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-light .wallet-modal-email-link-otp-back {\n color: #6b7280;\n}\n\n.wallet-modal-email-link-otp-back:hover:not(:disabled) {\n transform: translateY(-1px);\n}\n\n.wallet-modal-email-link-email {\n font-size: 14px;\n font-weight: 600;\n text-align: center;\n margin: 0 0 16px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-email-link-email {\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .wallet-modal-email-link-email {\n color: #111827;\n}\n\n.wallet-modal-email-link-resend {\n margin-top: 12px;\n font-size: 12px;\n text-align: center;\n}\n\n.wallet-modal-theme-dark .wallet-modal-email-link-resend {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-light .wallet-modal-email-link-resend {\n color: #6b7280;\n}\n\n.wallet-modal-email-link-resend-cooldown {\n font-weight: 500;\n}\n\n.wallet-modal-email-link-resend-button {\n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n font-size: 12px;\n font-weight: 500;\n text-decoration: underline;\n cursor: pointer;\n}\n\n.wallet-modal-theme-dark .wallet-modal-email-link-resend-button {\n color: #e5e7eb;\n}\n\n.wallet-modal-theme-light .wallet-modal-email-link-resend-button {\n color: #4b21a8;\n}\n\n.wallet-modal-linked-profiles-loading,\n.wallet-modal-linked-profiles-error,\n.wallet-modal-linked-profiles-success,\n.wallet-modal-linked-profiles-empty {\n padding: 12px 0 16px;\n font-size: 14px;\n text-align: center;\n line-height: 1.4;\n word-break: break-word;\n}\n\n.wallet-modal-theme-dark .wallet-modal-linked-profiles-loading,\n.wallet-modal-theme-dark .wallet-modal-linked-profiles-empty {\n color: rgba(255, 255, 255, 0.7);\n}\n\n.wallet-modal-theme-light .wallet-modal-linked-profiles-loading,\n.wallet-modal-theme-light .wallet-modal-linked-profiles-empty {\n color: #6b7280;\n}\n\n.wallet-modal-theme-dark .wallet-modal-linked-profiles-error {\n color: #f87171;\n}\n\n.wallet-modal-theme-light .wallet-modal-linked-profiles-error {\n color: #dc2626;\n}\n\n.wallet-modal-theme-dark .wallet-modal-linked-profiles-success {\n color: #4ade80;\n}\n\n.wallet-modal-theme-light .wallet-modal-linked-profiles-success {\n color: #16a34a;\n}\n\n/* Second-layer overlay (separate modals on top of manage modal) */\n.wallet-modal-overlay-layer2 {\n z-index: 110000 !important;\n position: fixed;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n background: rgba(0, 0, 0, 0.4);\n border-radius: 0;\n transform: none !important;\n -webkit-transform: none !important;\n}\n\n.wallet-modal-overlay-layer2 .wallet-modal-content {\n position: relative;\n z-index: 110001;\n /* Reuse core modal motion for nested dialogs */\n animation: slideUp 0.18s ease-out;\n}\n\n/* Unlink confirmation modal - standalone */\n.wallet-modal-unlink-confirm-modal {\n position: relative;\n max-width: 360px;\n width: 100%;\n padding: 24px 20px 20px;\n padding-top: 48px;\n text-align: center;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);\n}\n\n.wallet-modal-unlink-confirm-close {\n position: absolute;\n top: 16px;\n right: 16px;\n padding: 6px;\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: 8px;\n color: inherit;\n opacity: 0.7;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: opacity 0.15s ease;\n}\n\n.wallet-modal-unlink-confirm-close:hover {\n opacity: 1;\n}\n\n.wallet-modal-theme-dark .wallet-modal-unlink-confirm-close {\n color: #e5e7eb;\n}\n\n.wallet-modal-theme-light .wallet-modal-unlink-confirm-close {\n color: #374151;\n}\n\n/* Unlink confirmation content (shared with inline, keep for modal body) */\n.wallet-modal-unlink-confirm {\n max-width: 400px;\n padding: 24px 20px 20px;\n text-align: center;\n}\n\n.wallet-modal-unlink-confirm-icon {\n width: 48px;\n height: 48px;\n margin: 0 auto 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ef4444;\n}\n\n.wallet-modal-unlink-confirm-title {\n font-size: 18px;\n font-weight: 600;\n margin: 0 0 6px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-unlink-confirm-title {\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .wallet-modal-unlink-confirm-title {\n color: #111827;\n}\n\n.wallet-modal-unlink-confirm-subtitle {\n font-size: 14px;\n margin: 0 0 20px;\n opacity: 0.8;\n}\n\n.wallet-modal-theme-dark .wallet-modal-unlink-confirm-subtitle {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-light .wallet-modal-unlink-confirm-subtitle {\n color: #6b7280;\n}\n\n.wallet-modal-auth-error-message {\n margin: 0 0 20px;\n font-size: 14px;\n line-height: 1.45;\n word-break: break-word;\n}\n\n.wallet-modal-theme-dark .wallet-modal-auth-error-message {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.wallet-modal-theme-light .wallet-modal-auth-error-message {\n color: #4b5563;\n}\n\n.wallet-modal-unlink-confirm-details {\n padding: 12px 16px;\n border-radius: 10px;\n margin-bottom: 20px;\n text-align: left;\n font-size: 13px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-unlink-confirm-details {\n background: rgba(255, 255, 255, 0.06);\n border: 1px solid rgba(255, 255, 255, 0.1);\n color: #e5e7eb;\n}\n\n.wallet-modal-theme-light .wallet-modal-unlink-confirm-details {\n background: rgba(17, 24, 39, 0.04);\n border: 1px solid rgba(17, 24, 39, 0.08);\n color: #374151;\n}\n\n.wallet-modal-unlink-confirm-details-line {\n margin: 0;\n line-height: 1.5;\n}\n\n.wallet-modal-unlink-confirm-btn {\n width: 100%;\n padding: 12px 24px;\n border-radius: 10px;\n border: none;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n background: #ef4444;\n color: #ffffff;\n transition: background 0.2s, transform 0.1s;\n}\n\n.wallet-modal-unlink-confirm-btn:hover:not(:disabled) {\n background: #dc2626;\n}\n\n.wallet-modal-unlink-confirm-btn:active:not(:disabled) {\n transform: scale(0.98);\n}\n\n.wallet-modal-unlink-confirm-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.wallet-modal-unlink-confirm-footer {\n margin-top: 20px;\n font-size: 12px;\n opacity: 0.7;\n}\n\n.wallet-modal-theme-dark .wallet-modal-unlink-confirm-footer {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-light .wallet-modal-unlink-confirm-footer {\n color: #6b7280;\n}\n\n/* MFA disable confirm modal: two buttons in a row */\n.wallet-modal-mfa-disable-actions {\n display: flex;\n flex-direction: row;\n gap: 12px;\n justify-content: center;\n margin-top: 20px;\n}\n\n.wallet-modal-mfa-disable-actions .wallet-modal-unlink-confirm-btn {\n flex: 1;\n min-width: 0;\n}\n\n.wallet-modal-mfa-disable-cancel {\n background: #374151 !important;\n}\n\n.wallet-modal-mfa-disable-cancel:hover:not(:disabled) {\n background: #4b5563 !important;\n}\n\n/* Success popup modal - standalone */\n.wallet-modal-success-popup-modal {\n position: relative;\n max-width: 340px;\n width: 100%;\n padding: 32px 24px 24px;\n padding-top: 48px;\n text-align: center;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);\n}\n\n.wallet-modal-success-popup-close {\n position: absolute;\n top: 16px;\n right: 16px;\n padding: 6px;\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: 8px;\n color: inherit;\n opacity: 0.7;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: opacity 0.15s ease;\n}\n\n.wallet-modal-success-popup-close:hover {\n opacity: 1;\n}\n\n.wallet-modal-theme-dark .wallet-modal-success-popup-close {\n color: #e5e7eb;\n}\n\n.wallet-modal-theme-light .wallet-modal-success-popup-close {\n color: #374151;\n}\n\n.wallet-modal-success-popup-btn {\n width: 100%;\n margin-top: 20px;\n padding: 12px 24px;\n border-radius: 10px;\n border: 1px solid;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.2s, transform 0.1s;\n}\n\n.wallet-modal-theme-dark .wallet-modal-success-popup-btn {\n background: rgba(255, 255, 255, 0.08);\n border-color: rgba(255, 255, 255, 0.15);\n color: #e5e7eb;\n}\n\n.wallet-modal-theme-light .wallet-modal-success-popup-btn {\n background: #f9fafb;\n border-color: rgba(17, 24, 39, 0.12);\n color: #111827;\n}\n\n.wallet-modal-success-popup-btn:hover {\n background: rgba(255, 255, 255, 0.12);\n}\n\n.wallet-modal-theme-light .wallet-modal-success-popup-btn:hover {\n background: #f3f4f6;\n}\n\n.wallet-modal-success-popup-btn:active {\n transform: scale(0.98);\n}\n\n/* Error popup modal (link-auth errors from OAuth redirect) */\n.wallet-modal-error-popup-modal {\n position: relative;\n max-width: 380px;\n width: 100%;\n padding: 32px 24px 24px;\n padding-top: 48px;\n text-align: center;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);\n}\n\n.wallet-modal-error-popup-icon {\n width: 64px;\n height: 64px;\n margin: 0 auto 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n}\n\n.wallet-modal-error-popup-title {\n font-size: 15px;\n line-height: 1.45;\n margin: 0 0 24px;\n font-weight: 500;\n word-break: break-word;\n}\n\n.wallet-modal-theme-dark .wallet-modal-error-popup-title {\n color: #e5e7eb;\n}\n\n.wallet-modal-theme-light .wallet-modal-error-popup-title {\n color: #111827;\n}\n\n.wallet-modal-error-popup-actions {\n display: flex;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.wallet-modal-error-popup-ok {\n padding: 12px 32px;\n border-radius: 9999px;\n border: none;\n font-size: 14px;\n font-weight: 700;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n cursor: pointer;\n transition: background 0.2s, transform 0.1s;\n color: #ffffff;\n}\n\n.wallet-modal-theme-dark .wallet-modal-error-popup-ok {\n background: #1f2937;\n}\n\n.wallet-modal-theme-light .wallet-modal-error-popup-ok {\n background: #111827;\n}\n\n.wallet-modal-theme-dark .wallet-modal-error-popup-ok:hover {\n background: #374151;\n}\n\n.wallet-modal-theme-light .wallet-modal-error-popup-ok:hover {\n background: #374151;\n}\n\n.wallet-modal-error-popup-ok:active {\n transform: scale(0.98);\n}\n\n.wallet-modal-error-popup-footer {\n padding-top: 8px;\n text-align: center;\n}\n\n.wallet-modal-theme-dark.wallet-modal-error-popup-footer .onboarding-footer-text {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-light.wallet-modal-error-popup-footer .onboarding-footer-text {\n color: #6b7280;\n}\n\n/* Link/Unlink success popup (inline fallback / shared content) */\n.wallet-modal-success-popup {\n max-width: 360px;\n padding: 32px 24px 20px;\n text-align: center;\n}\n\n.wallet-modal-success-popup-icon {\n width: 64px;\n height: 64px;\n margin: 0 auto 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n background: #10b981;\n color: #ffffff;\n}\n\n.wallet-modal-success-popup-title {\n font-size: 18px;\n font-weight: 600;\n margin: 0 0 8px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-success-popup-title {\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .wallet-modal-success-popup-title {\n color: #111827;\n}\n\n.wallet-modal-success-popup-footer {\n margin-top: 24px;\n font-size: 12px;\n opacity: 0.7;\n}\n\n.wallet-modal-theme-dark .wallet-modal-success-popup-footer {\n color: #9ca3af;\n}\n\n.wallet-modal-theme-light .wallet-modal-success-popup-footer {\n color: #6b7280;\n}\n\n/* MFA Redesign Styles */\n.wallet-modal-manage.mfa-redesign-container {\n /* max-width: 480px; */\n width: 100%;\n padding: 0;\n border-radius: 24px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n\n.wallet-modal-manage.mfa-redesign-container .wallet-modal-receive-header {\n padding: 20px;\n margin-bottom: 0;\n}\n\n.mfa-redesign-content {\n padding: 12px 20px 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.mfa-info-box {\n display: flex;\n gap: 12px;\n padding: 12px;\n border-radius: 14px;\n align-items: center;\n}\n\n.wallet-modal-theme-dark .mfa-info-box {\n background: rgba(255, 255, 255, 0.04);\n}\n\n.wallet-modal-theme-light .mfa-info-box {\n background: rgba(0, 0, 0, 0.03);\n}\n\n.mfa-info-icon {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n background: rgba(255, 255, 255, 0.1);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: var(--abstraxn-primary, #3b82f6);\n}\n\n.mfa-info-text {\n font-size: 14px;\n line-height: 1.5;\n margin: 0;\n opacity: 0.8;\n}\n\n.mfa-status-enabled-box {\n align-items: flex-start;\n}\n\n.mfa-status-enabled-icon {\n color: #22c55e;\n}\n\n.wallet-modal-theme-dark .mfa-status-enabled-icon {\n background: rgba(34, 197, 94, 0.12);\n}\n\n.wallet-modal-theme-light .mfa-status-enabled-icon {\n background: rgba(34, 197, 94, 0.1);\n}\n\n.mfa-status-enabled-copy {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.mfa-status-enabled-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n}\n\n.wallet-modal-theme-dark .mfa-status-enabled-title {\n color: #e5e7eb;\n}\n\n.wallet-modal-theme-light .mfa-status-enabled-title {\n color: #111827;\n}\n\n.wallet-modal-theme-dark .mfa-info-text {\n color: rgba(255, 255, 255, 0.88);\n}\n\n.wallet-modal-theme-light .mfa-info-text {\n color: #374151;\n}\n\n.mfa-qr-container {\n padding: 18px;\n border-radius: 20px;\n border: 1px solid;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.wallet-modal-theme-dark .mfa-qr-container {\n border-color: rgba(255, 255, 255, 0.08);\n}\n\n.wallet-modal-theme-light .mfa-qr-container {\n border-color: rgba(0, 0, 0, 0.08);\n}\n\n.mfa-qr-wrapper {\n padding: 16px;\n background: #ffffff;\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.mfa-qr-placeholder {\n width: 100%;\n min-height: 172px;\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 500;\n padding: 16px;\n}\n\n.wallet-modal-theme-dark .mfa-qr-placeholder {\n background: rgba(255, 255, 255, 0.04);\n color: rgba(255, 255, 255, 0.7);\n}\n\n.wallet-modal-theme-light .mfa-qr-placeholder {\n background: rgba(0, 0, 0, 0.03);\n color: #6b7280;\n}\n\n.mfa-secret-display {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n border-radius: 14px;\n width: 100%;\n}\n\n.wallet-modal-theme-dark .mfa-secret-display {\n background: rgba(0, 0, 0, 0.3);\n}\n\n.wallet-modal-theme-light .mfa-secret-display {\n background: rgba(0, 0, 0, 0.05);\n}\n\n.mfa-secret-key-icon {\n opacity: 0.5;\n}\n\n.wallet-modal-theme-dark .mfa-secret-key-icon {\n color: rgba(255, 255, 255, 0.78);\n opacity: 1;\n}\n\n.wallet-modal-theme-light .mfa-secret-key-icon {\n color: #6b7280;\n opacity: 1;\n}\n\n.mfa-secret-code {\n flex: 1;\n font-family: \"GeistMono\", monospace;\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n letter-spacing: 0.5px;\n}\n\n.wallet-modal-theme-dark .mfa-secret-code {\n color: #f3f4f6;\n}\n\n.wallet-modal-theme-light .mfa-secret-code {\n color: #1f2937;\n}\n\n.mfa-secret-copy {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 6px;\n border-radius: 6px;\n color: inherit;\n opacity: 0.6;\n transition: all 0.2s;\n}\n\n.wallet-modal-theme-dark .mfa-secret-copy {\n color: rgba(255, 255, 255, 0.78);\n opacity: 1;\n}\n\n.wallet-modal-theme-light .mfa-secret-copy {\n color: #4b5563;\n}\n\n.mfa-secret-copy:hover {\n opacity: 1;\n background: rgba(255, 255, 255, 0.1);\n}\n\n.mfa-secret-copy.copied {\n color: #22c55e;\n opacity: 1;\n}\n\n.mfa-verification-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 0;\n}\n\n.mfa-divider {\n display: block;\n font-size: 14px;\n font-weight: 500;\n /* opacity: 0.5; */\n margin: 0;\n text-align: left;\n}\n\n.wallet-modal-theme-dark .mfa-divider {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.wallet-modal-theme-light .mfa-divider {\n color: #4b5563;\n}\n\n.mfa-otp-grid {\n display: flex;\n justify-content: center;\n gap: 6px;\n}\n\n.mfa-otp-slot {\n display: flex;\n align-items: center;\n gap: 0;\n}\n\n.mfa-otp-input {\n width: 50px;\n height: 55px;\n border-radius: 14px;\n border: 1.5px solid;\n background: transparent;\n text-align: center;\n font-size: 24px;\n font-weight: 700;\n font-family: \"GeistMono\", monospace;\n outline: none;\n transition: all 0.2s;\n}\n\n.wallet-modal-theme-dark .mfa-otp-input {\n border-color: rgba(255, 255, 255, 0.3);\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .mfa-otp-input {\n border-color: rgba(0, 0, 0, 0.3);\n color: #111827;\n}\n\n.mfa-otp-input:focus {\n border-color: var(--abstraxn-primary, #3b82f6);\n background: rgba(59, 130, 246, 0.05);\n box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.1);\n}\n\n.mfa-otp-dash {\n font-size: 24px;\n opacity: 0.3;\n}\n\n.mfa-refresh-text {\n text-align: center;\n font-size: 13px;\n opacity: 0.5;\n margin: 0;\n}\n\n.wallet-modal-theme-dark .mfa-refresh-text {\n color: rgba(255, 255, 255, 0.72);\n}\n\n.wallet-modal-theme-light .mfa-refresh-text {\n color: #6b7280;\n}\n\n.mfa-setup-error {\n font-size: 14px;\n color: #ef4444;\n margin: 0;\n text-align: center;\n}\n\n.mfa-verify-button {\n width: 100%;\n padding: 18px;\n border-radius: 18px;\n border: none;\n background: var(--abstraxn-primary, #111827);\n color: var(--abstraxn-primary-text, #ffffff);\n font-size: 16px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.mfa-verify-button:hover:not(:disabled) {\n transform: translateY(-1px);\n background: var(--abstraxn-primary-hover, #1f2937);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n.mfa-verify-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mfa-verify-button.mfa-disable-primary-button {\n background: #ef4444;\n color: #ffffff;\n}\n\n.mfa-verify-button.mfa-disable-primary-button:hover:not(:disabled) {\n background: #dc2626;\n}\n\n.mfa-trouble-text {\n text-align: center;\n font-size: 14px;\n margin: 0;\n opacity: 0.7;\n}\n\n.wallet-modal-theme-dark .mfa-trouble-text {\n color: rgba(255, 255, 255, 0.82);\n}\n\n.wallet-modal-theme-light .mfa-trouble-text {\n color: #374151;\n}\n\n.mfa-link-button {\n background: transparent;\n border: none;\n color: inherit;\n font-weight: 600;\n cursor: pointer;\n padding: 0;\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n\n.wallet-modal-theme-dark .mfa-link-button {\n color: #cbd5e1;\n}\n\n.wallet-modal-theme-light .mfa-link-button {\n color: #080808;\n}\n\n.wallet-modal-theme-dark .mfa-link-button:hover {\n color: #e2e8f0;\n}\n\n.wallet-modal-theme-light .mfa-link-button:hover {\n color: #080808;\n}\n\n.mfa-recovery-section {\n display: flex;\n flex-direction: column;\n gap: 14px;\n margin-top: 8px;\n}\n\n.mfa-recovery-grid {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.mfa-recovery-input {\n text-transform: uppercase;\n}\n\n.mfa-recovery-field {\n width: 100%;\n height: 55px;\n border-radius: 14px;\n border: 1.5px solid;\n background: transparent;\n text-align: center;\n font-size: 20px;\n font-weight: 700;\n font-family: \"GeistMono\", monospace;\n text-transform: uppercase;\n letter-spacing: 0.16em;\n outline: none;\n transition: all 0.2s;\n box-sizing: border-box;\n padding: 0 14px;\n}\n\n.wallet-modal-theme-dark .mfa-recovery-field {\n border-color: rgba(255, 255, 255, 0.1);\n color: #ffffff;\n}\n\n.wallet-modal-theme-light .mfa-recovery-field {\n border-color: rgba(0, 0, 0, 0.1);\n color: #111827;\n}\n\n.mfa-recovery-field:focus {\n border-color: var(--abstraxn-primary, #3b82f6);\n background: rgba(59, 130, 246, 0.05);\n box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.1);\n}\n\n.mfa-recovery-field::placeholder {\n letter-spacing: 0;\n font-size: 14px;\n font-weight: 500;\n font-family: \"GeistSans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", sans-serif;\n text-transform: none;\n}\n\n.wallet-modal-mfa-backup-list {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 10px;\n margin-bottom: 14px;\n}\n\n.wallet-modal-mfa-backup-heading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 2px;\n margin-bottom: 10px;\n}\n\n.wallet-modal-mfa-backup-heading-label {\n font-size: 12px;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n\n.wallet-modal-theme-dark .wallet-modal-mfa-backup-heading-label {\n color: rgba(226, 232, 240, 0.7);\n}\n\n.wallet-modal-theme-light .wallet-modal-mfa-backup-heading-label {\n color: rgba(15, 23, 42, 0.65);\n}\n\n.wallet-modal-mfa-backup-code-wrapper {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 12px 14px;\n border-radius: 10px;\n border: 1px solid;\n transition: all 0.2s ease;\n}\n\n.wallet-modal-theme-dark .wallet-modal-mfa-backup-code-wrapper {\n background: rgba(15, 23, 42, 0.5);\n border-color: rgba(148, 163, 184, 0.25);\n}\n\n.wallet-modal-theme-light .wallet-modal-mfa-backup-code-wrapper {\n background: rgba(248, 250, 252, 0.9);\n border-color: rgba(148, 163, 184, 0.35);\n}\n\n.wallet-modal-mfa-backup-code {\n font-family: \"GeistMono\", monospace;\n font-size: 15px;\n font-weight: 700;\n letter-spacing: 1px;\n}\n\n.wallet-modal-theme-dark .wallet-modal-mfa-backup-code {\n color: #f9fafb;\n}\n\n.wallet-modal-theme-light .wallet-modal-mfa-backup-code {\n color: #111827;\n}\n\n.wallet-modal-mfa-backup-actions {\n display: flex;\n gap: 12px;\n margin-bottom: 12px;\n}\n\n.wallet-modal-mfa-backup-action-btn {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 12px 14px;\n border-radius: 10px;\n border: 1px solid transparent;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.wallet-modal-theme-dark .wallet-modal-mfa-backup-action-btn {\n background: rgba(30, 41, 59, 0.45);\n color: rgba(226, 232, 240, 0.95);\n border-color: rgba(148, 163, 184, 0.28);\n}\n\n.wallet-modal-theme-light .wallet-modal-mfa-backup-action-btn {\n background: rgba(241, 245, 249, 0.95);\n color: #1f2937;\n border-color: rgba(148, 163, 184, 0.3);\n}\n\n.wallet-modal-mfa-backup-action-btn:hover:not(:disabled) {\n transform: translateY(-1px);\n filter: brightness(1.05);\n}\n\n.wallet-modal-mfa-backup-action-btn.copied {\n color: #22c55e;\n background: rgba(34, 197, 94, 0.1);\n}\n\n.wallet-modal-mfa-backup-action-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n}\n";
@@ -1,4 +1,3 @@
1
- import "./ManageWalletModal.css";
2
1
  export interface ManageWalletModalProps {
3
2
  isOpen: boolean;
4
3
  onClose: () => void;