@lumiapassport/ui-kit 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2395,6 +2395,7 @@ var init_iframe_manager = __esm({
2395
2395
  this.iframe.style.zIndex = "999999";
2396
2396
  this.iframe.style.background = "rgba(0, 0, 0, 0.5)";
2397
2397
  this.iframe.setAttribute("sandbox", "allow-scripts allow-same-origin");
2398
+ this.iframe.setAttribute("allow", "publickey-credentials-get *; publickey-credentials-create *");
2398
2399
  this.messageListener = this.handleMessage.bind(this);
2399
2400
  window.addEventListener("message", this.messageListener);
2400
2401
  document.body.appendChild(this.iframe);
@@ -2751,6 +2752,92 @@ var init_iframe_manager = __esm({
2751
2752
  }
2752
2753
  return false;
2753
2754
  }
2755
+ /**
2756
+ * Create backup of keyshare
2757
+ */
2758
+ async createBackup(userId, backupRequest, accessToken) {
2759
+ this.log("[IframeManager] Creating backup...");
2760
+ const response = await this.sendMessage("CREATE_BACKUP", {
2761
+ userId,
2762
+ backupRequest,
2763
+ accessToken
2764
+ // Pass access token for TSS API authentication
2765
+ });
2766
+ if (response.type === "LUMIA_PASSPORT_BACKUP_CREATED") {
2767
+ return response.result;
2768
+ }
2769
+ throw new Error("Unexpected response type");
2770
+ }
2771
+ /**
2772
+ * Restore keyshare from server backup
2773
+ */
2774
+ async restoreFromServer(userId, password, accessToken) {
2775
+ this.log("[IframeManager] Restoring backup from server...");
2776
+ const response = await this.sendMessage("RESTORE_BACKUP", {
2777
+ userId,
2778
+ password,
2779
+ accessToken
2780
+ // Pass access token for TSS API authentication
2781
+ });
2782
+ if (response.type === "LUMIA_PASSPORT_BACKUP_RESTORED") {
2783
+ return response.result;
2784
+ }
2785
+ throw new Error("Unexpected response type");
2786
+ }
2787
+ /**
2788
+ * Encrypt backup data without uploading (for cloud/local backups)
2789
+ * Returns encrypted data that parent can upload/download
2790
+ */
2791
+ async encryptBackupData(userId, password) {
2792
+ this.log("[IframeManager] Encrypting backup data...");
2793
+ const response = await this.sendMessage("ENCRYPT_BACKUP_DATA", {
2794
+ userId,
2795
+ password
2796
+ });
2797
+ if (response.type === "LUMIA_PASSPORT_BACKUP_ENCRYPTED") {
2798
+ return response.encryptedData;
2799
+ }
2800
+ throw new Error("Unexpected response type");
2801
+ }
2802
+ /**
2803
+ * Restore keyshare from local file backup
2804
+ */
2805
+ async restoreFromLocalFile(userId, fileContent, password) {
2806
+ this.log("[IframeManager] Restoring backup from local file...");
2807
+ const response = await this.sendMessage("RESTORE_FROM_FILE", {
2808
+ userId,
2809
+ fileContent,
2810
+ password
2811
+ });
2812
+ if (response.type === "LUMIA_PASSPORT_FILE_RESTORED") {
2813
+ return response.result;
2814
+ }
2815
+ throw new Error("Unexpected response type");
2816
+ }
2817
+ /**
2818
+ * Get backup status for user
2819
+ */
2820
+ async getBackupStatus(userId) {
2821
+ this.log("[IframeManager] Getting backup status...");
2822
+ const response = await this.sendMessage("GET_BACKUP_STATUS", {
2823
+ userId
2824
+ });
2825
+ if (response.type === "LUMIA_PASSPORT_BACKUP_STATUS") {
2826
+ return response.status;
2827
+ }
2828
+ throw new Error("Unexpected response type");
2829
+ }
2830
+ /**
2831
+ * Get available cloud providers
2832
+ */
2833
+ async getCloudProviders() {
2834
+ this.log("[IframeManager] Getting cloud providers...");
2835
+ const response = await this.sendMessage("GET_CLOUD_PROVIDERS", {});
2836
+ if (response.type === "LUMIA_PASSPORT_CLOUD_PROVIDERS") {
2837
+ return response.providers;
2838
+ }
2839
+ throw new Error("Unexpected response type");
2840
+ }
2754
2841
  /**
2755
2842
  * Cleanup and destroy iframe
2756
2843
  */
@@ -2807,6 +2894,7 @@ __export(index_exports, {
2807
2894
  UserOpStatus: () => UserOpStatus,
2808
2895
  getUserProfile: () => getUserProfile,
2809
2896
  lumiaBeam: () => lumiaBeam,
2897
+ prepareUserOperation: () => prepareUserOperation,
2810
2898
  queryClient: () => queryClient,
2811
2899
  sendUserOperation: () => sendUserOperation,
2812
2900
  updateUserProfile: () => updateUserProfile,
@@ -2826,7 +2914,7 @@ __export(index_exports, {
2826
2914
  module.exports = __toCommonJS(index_exports);
2827
2915
 
2828
2916
  // src/styles/built.css
2829
- var built_default = '.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\\201C""\\201D""\\2018""\\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.lumia-scope{background-color:hsl(var(--background));color:hsl(var(--foreground))}.lumia-scope,.lumia-scope *,.lumia-scope :after,.lumia-scope :before{box-sizing:border-box;border-width:0;border-style:solid}.lumia-scope input,.lumia-scope select,.lumia-scope textarea{font:inherit;color:inherit;margin:0;background-color:transparent}.lumia-scope button{font:inherit;margin:0}.lumia-scope input[type=search]::-webkit-search-cancel-button,.lumia-scope input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.lumia-scope,.lumia-scope *,.lumia-scope .lumia-heading,.lumia-scope [data-radix-dialog-content],.lumia-scope [data-radix-dialog-content] *,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6{font-family:system-ui,-apple-system,sans-serif!important}.lumia-scope .lumia-heading{font-weight:700}.lumia-scope .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lumia-scope .pointer-events-none{pointer-events:none}.lumia-scope .pointer-events-auto{pointer-events:auto}.lumia-scope .visible{visibility:visible}.lumia-scope .collapse{visibility:collapse}.lumia-scope .static{position:static}.lumia-scope .fixed{position:fixed}.lumia-scope .absolute{position:absolute}.lumia-scope .relative{position:relative}.lumia-scope .inset-0{inset:0}.lumia-scope .inset-y-0{top:0;bottom:0}.lumia-scope .-bottom-1{bottom:-.25rem}.lumia-scope .-right-1{right:-.25rem}.lumia-scope .bottom-full{bottom:100%}.lumia-scope .left-1{left:.25rem}.lumia-scope .left-1\\/2{left:50%}.lumia-scope .left-3{left:.75rem}.lumia-scope .left-4{left:1rem}.lumia-scope .left-\\[50\\%\\]{left:50%}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.lumia-scope .top-1{top:.25rem}.lumia-scope .top-1\\/2{top:50%}.lumia-scope .top-3{top:.75rem}.lumia-scope .top-4{top:1rem}.lumia-scope .top-\\[50\\%\\]{top:50%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[2147483646\\]{z-index:2147483646}.lumia-scope .z-\\[2147483647\\]{z-index:2147483647}.lumia-scope .z-\\[60\\]{z-index:60}.lumia-scope .-m-px{margin:-1px}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-auto{margin-left:auto;margin-right:auto}.lumia-scope .my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lumia-scope .-mt-5{margin-top:-1.25rem}.lumia-scope .mb-1{margin-bottom:.25rem}.lumia-scope .mb-2{margin-bottom:.5rem}.lumia-scope .mb-3{margin-bottom:.75rem}.lumia-scope .mb-4{margin-bottom:1rem}.lumia-scope .mb-6{margin-bottom:1.5rem}.lumia-scope .mb-8{margin-bottom:2rem}.lumia-scope .ml-1{margin-left:.25rem}.lumia-scope .ml-2{margin-left:.5rem}.lumia-scope .ml-4{margin-left:1rem}.lumia-scope .ml-auto{margin-left:auto}.lumia-scope .mr-1{margin-right:.25rem}.lumia-scope .mr-2{margin-right:.5rem}.lumia-scope .mt-0{margin-top:0}.lumia-scope .mt-0\\.5{margin-top:.125rem}.lumia-scope .mt-1{margin-top:.25rem}.lumia-scope .mt-2{margin-top:.5rem}.lumia-scope .mt-3{margin-top:.75rem}.lumia-scope .mt-4{margin-top:1rem}.lumia-scope .mt-6{margin-top:1.5rem}.lumia-scope .block{display:block}.lumia-scope .inline-block{display:inline-block}.lumia-scope .inline{display:inline}.lumia-scope .flex{display:flex}.lumia-scope .inline-flex{display:inline-flex}.lumia-scope .table{display:table}.lumia-scope .grid{display:grid}.lumia-scope .contents{display:contents}.lumia-scope .hidden{display:none}.lumia-scope .size-4{width:1rem;height:1rem}.lumia-scope .\\!h-5{height:1.25rem!important}.lumia-scope .\\!h-6{height:1.5rem!important}.lumia-scope .h-10{height:2.5rem}.lumia-scope .h-11{height:2.75rem}.lumia-scope .h-12{height:3rem}.lumia-scope .h-14{height:3.5rem}.lumia-scope .h-16{height:4rem}.lumia-scope .h-2{height:.5rem}.lumia-scope .h-2\\.5{height:.625rem}.lumia-scope .h-3{height:.75rem}.lumia-scope .h-3\\.5{height:.875rem}.lumia-scope .h-4{height:1rem}.lumia-scope .h-48{height:12rem}.lumia-scope .h-5{height:1.25rem}.lumia-scope .h-6{height:1.5rem}.lumia-scope .h-8{height:2rem}.lumia-scope .h-9{height:2.25rem}.lumia-scope .h-full{height:100%}.lumia-scope .h-px{height:1px}.lumia-scope .max-h-24{max-height:6rem}.lumia-scope .max-h-96{max-height:24rem}.lumia-scope .max-h-\\[60vh\\]{max-height:60vh}.lumia-scope .max-h-\\[80vh\\]{max-height:80vh}.lumia-scope .\\!w-5{width:1.25rem!important}.lumia-scope .\\!w-6{width:1.5rem!important}.lumia-scope .w-10{width:2.5rem}.lumia-scope .w-12{width:3rem}.lumia-scope .w-16{width:4rem}.lumia-scope .w-2{width:.5rem}.lumia-scope .w-2\\.5{width:.625rem}.lumia-scope .w-3{width:.75rem}.lumia-scope .w-3\\.5{width:.875rem}.lumia-scope .w-4{width:1rem}.lumia-scope .w-48{width:12rem}.lumia-scope .w-5{width:1.25rem}.lumia-scope .w-6{width:1.5rem}.lumia-scope .w-8{width:2rem}.lumia-scope .w-9{width:2.25rem}.lumia-scope .w-full{width:100%}.lumia-scope .w-px{width:1px}.lumia-scope .min-w-0{min-width:0}.lumia-scope .min-w-16{min-width:4rem}.lumia-scope .min-w-24{min-width:6rem}.lumia-scope .min-w-32{min-width:8rem}.lumia-scope .min-w-\\[280px\\]{min-width:280px}.lumia-scope .max-w-\\[380px\\]{max-width:380px}.lumia-scope .max-w-\\[400px\\]{max-width:400px}.lumia-scope .max-w-\\[500px\\]{max-width:500px}.lumia-scope .max-w-\\[680px\\]{max-width:680px}.lumia-scope .max-w-full{max-width:100%}.lumia-scope .max-w-lg{max-width:32rem}.lumia-scope .max-w-md{max-width:28rem}.lumia-scope .max-w-sm{max-width:24rem}.lumia-scope .flex-1{flex:1 1 0%}.lumia-scope .flex-shrink{flex-shrink:1}.lumia-scope .flex-shrink-0,.lumia-scope .shrink-0{flex-shrink:0}.lumia-scope .border-collapse{border-collapse:collapse}.lumia-scope .-translate-x-1{--tw-translate-x:-0.25rem}.lumia-scope .-translate-x-1,.lumia-scope .-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-x-1\\/2{--tw-translate-x:-50%}.lumia-scope .-translate-y-1{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1,.lumia-scope .-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.lumia-scope .translate-x-\\[-50\\%\\],.lumia-scope .translate-y-\\[-50\\%\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.lumia-scope .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.lumia-scope .resize{resize:both}.lumia-scope .list-inside{list-style-position:inside}.lumia-scope .list-disc{list-style-type:disc}.lumia-scope .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lumia-scope .grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lumia-scope .grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lumia-scope .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lumia-scope .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lumia-scope .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lumia-scope .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lumia-scope .flex-row{flex-direction:row}.lumia-scope .flex-col{flex-direction:column}.lumia-scope .flex-col-reverse{flex-direction:column-reverse}.lumia-scope .flex-wrap{flex-wrap:wrap}.lumia-scope .items-start{align-items:flex-start}.lumia-scope .items-center{align-items:center}.lumia-scope .justify-start{justify-content:flex-start}.lumia-scope .justify-end{justify-content:flex-end}.lumia-scope .justify-center{justify-content:center}.lumia-scope .justify-between{justify-content:space-between}.lumia-scope .gap-0{gap:0}.lumia-scope .gap-1{gap:.25rem}.lumia-scope .gap-2{gap:.5rem}.lumia-scope .gap-3{gap:.75rem}.lumia-scope .gap-4{gap:1rem}.lumia-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-3>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-4>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-y-0>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-6>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.lumia-scope .overflow-auto{overflow:auto}.lumia-scope .overflow-hidden{overflow:hidden}.lumia-scope .overflow-visible{overflow:visible}.lumia-scope .overflow-y-auto{overflow-y:auto}.lumia-scope .truncate{overflow:hidden;text-overflow:ellipsis}.lumia-scope .truncate,.lumia-scope .whitespace-nowrap{white-space:nowrap}.lumia-scope .whitespace-pre-line{white-space:pre-line}.lumia-scope .whitespace-pre-wrap{white-space:pre-wrap}.lumia-scope .break-words{overflow-wrap:break-word}.lumia-scope .break-all{word-break:break-all}.lumia-scope .rounded{border-radius:.25rem}.lumia-scope .rounded-2xl{border-radius:1rem}.lumia-scope .rounded-3xl{border-radius:1.5rem}.lumia-scope .rounded-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:var(--radius)}.lumia-scope .rounded-md{border-radius:calc(var(--radius) - 2px)}.lumia-scope .rounded-sm{border-radius:calc(var(--radius) - 4px)}.lumia-scope .rounded-xl{border-radius:.75rem}.lumia-scope .border{border-width:1px}.lumia-scope .border-0{border-width:0}.lumia-scope .border-2{border-width:2px}.lumia-scope .border-b{border-bottom-width:1px}.lumia-scope .border-b-2{border-bottom-width:2px}.lumia-scope .border-t{border-top-width:1px}.lumia-scope .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.lumia-scope .border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity,1))}.lumia-scope .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.lumia-scope .border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.lumia-scope .border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900\\/40{border-color:rgba(30,58,138,.4)}.lumia-scope .border-border{border-color:hsl(var(--border))}.lumia-scope .border-current{border-color:currentColor}.lumia-scope .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.lumia-scope .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.lumia-scope .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.lumia-scope .border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.lumia-scope .border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.lumia-scope .border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity,1))}.lumia-scope .border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.lumia-scope .border-input{border-color:hsl(var(--input))}.lumia-scope .border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.lumia-scope .border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity,1))}.lumia-scope .border-orange-900\\/40{border-color:rgba(124,45,18,.4)}.lumia-scope .border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.lumia-scope .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.lumia-scope .border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-transparent{border-color:transparent}.lumia-scope .border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.lumia-scope .border-t-transparent{border-top-color:transparent}.lumia-scope .\\!bg-transparent{background-color:transparent!important}.lumia-scope .bg-\\[\\#0088cc\\]{--tw-bg-opacity:1;background-color:rgb(0 136 204/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#2456f0\\]{--tw-bg-opacity:1;background-color:rgb(36 86 240/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#db2777\\]{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#fde2f3\\]{--tw-bg-opacity:1;background-color:rgb(253 226 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-900\\/30{background-color:rgba(120,53,15,.3)}.lumia-scope .bg-background{background-color:hsl(var(--background))}.lumia-scope .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.lumia-scope .bg-black\\/50{background-color:rgba(0,0,0,.5)}.lumia-scope .bg-black\\/80{background-color:rgba(0,0,0,.8)}.lumia-scope .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-50\\/50{background-color:rgba(239,246,255,.5)}.lumia-scope .bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-900\\/20{background-color:rgba(30,58,138,.2)}.lumia-scope .bg-blue-900\\/30{background-color:rgba(30,58,138,.3)}.lumia-scope .bg-blue-900\\/40{background-color:rgba(30,58,138,.4)}.lumia-scope .bg-card{background-color:hsl(var(--card))}.lumia-scope .bg-destructive{background-color:hsl(var(--destructive))}.lumia-scope .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-800\\/50{background-color:rgba(31,41,55,.5)}.lumia-scope .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-900\\/40{background-color:rgba(17,24,39,.4)}.lumia-scope .bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-900\\/30{background-color:rgba(20,83,45,.3)}.lumia-scope .bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900\\/20{background-color:rgba(124,45,18,.2)}.lumia-scope .bg-orange-900\\/30{background-color:rgba(124,45,18,.3)}.lumia-scope .bg-orange-900\\/40{background-color:rgba(124,45,18,.4)}.lumia-scope .bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-primary{background-color:hsl(var(--primary))}.lumia-scope .bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-50\\/50{background-color:rgba(250,245,255,.5)}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-900\\/30{background-color:rgba(127,29,29,.3)}.lumia-scope .bg-secondary{background-color:hsl(var(--secondary))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50\\/50{background-color:rgba(240,249,255,.5)}.lumia-scope .bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.lumia-scope .bg-transparent{background-color:transparent}.lumia-scope .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.lumia-scope .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.lumia-scope .bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.lumia-scope .from-purple-100{--tw-gradient-from:#f3e8ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(243,232,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .to-blue-100{--tw-gradient-to:#dbeafe var(--tw-gradient-to-position)}.lumia-scope .to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.lumia-scope .to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.lumia-scope .object-contain{-o-object-fit:contain;object-fit:contain}.lumia-scope .object-cover{-o-object-fit:cover;object-fit:cover}.lumia-scope .p-0{padding:0}.lumia-scope .p-1{padding:.25rem}.lumia-scope .p-2{padding:.5rem}.lumia-scope .p-2\\.5{padding:.625rem}.lumia-scope .p-3{padding:.75rem}.lumia-scope .p-4{padding:1rem}.lumia-scope .p-5{padding:1.25rem}.lumia-scope .p-6{padding:1.5rem}.lumia-scope .p-8{padding:2rem}.lumia-scope .px-12{padding-left:3rem;padding-right:3rem}.lumia-scope .px-2{padding-left:.5rem;padding-right:.5rem}.lumia-scope .px-2\\.5{padding-left:.625rem;padding-right:.625rem}.lumia-scope .px-3{padding-left:.75rem;padding-right:.75rem}.lumia-scope .px-4{padding-left:1rem;padding-right:1rem}.lumia-scope .px-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.lumia-scope .py-0{padding-top:0;padding-bottom:0}.lumia-scope .py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.lumia-scope .py-1{padding-top:.25rem;padding-bottom:.25rem}.lumia-scope .py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.lumia-scope .py-2{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .py-3{padding-top:.75rem;padding-bottom:.75rem}.lumia-scope .py-4{padding-top:1rem;padding-bottom:1rem}.lumia-scope .py-8{padding-top:2rem;padding-bottom:2rem}.lumia-scope .pb-4{padding-bottom:1rem}.lumia-scope .pl-11{padding-left:2.75rem}.lumia-scope .pr-10{padding-right:2.5rem}.lumia-scope .pr-16{padding-right:4rem}.lumia-scope .pt-0{padding-top:0}.lumia-scope .pt-2{padding-top:.5rem}.lumia-scope .pt-3{padding-top:.75rem}.lumia-scope .pt-4{padding-top:1rem}.lumia-scope .text-left{text-align:left}.lumia-scope .text-center{text-align:center}.lumia-scope .text-right{text-align:right}.lumia-scope .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.lumia-scope .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.lumia-scope .text-2xl{font-size:1.5rem;line-height:2rem}.lumia-scope .text-\\[10px\\]{font-size:10px}.lumia-scope .text-\\[11px\\]{font-size:11px}.lumia-scope .text-base{font-size:1rem;line-height:1.5rem}.lumia-scope .text-lg{font-size:1.125rem;line-height:1.75rem}.lumia-scope .text-sm{font-size:.875rem;line-height:1.25rem}.lumia-scope .text-xl{font-size:1.25rem;line-height:1.75rem}.lumia-scope .text-xs{font-size:.75rem;line-height:1rem}.lumia-scope .font-bold{font-weight:700}.lumia-scope .font-medium{font-weight:500}.lumia-scope .font-semibold{font-weight:600}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.lumia-scope .text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.lumia-scope .text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.lumia-scope .text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.lumia-scope .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.lumia-scope .text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .text-blue-400\\/80{color:rgba(96,165,250,.8)}.lumia-scope .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.lumia-scope .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .text-card-foreground{color:hsl(var(--card-foreground))}.lumia-scope .text-destructive{color:hsl(var(--destructive))}.lumia-scope .text-destructive-foreground{color:hsl(var(--destructive-foreground))}.lumia-scope .text-foreground{color:hsl(var(--foreground))}.lumia-scope .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.lumia-scope .text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.lumia-scope .text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.lumia-scope .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.lumia-scope .text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.lumia-scope .text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.lumia-scope .text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.lumia-scope .text-muted-foreground{color:hsl(var(--muted-foreground))}.lumia-scope .text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.lumia-scope .text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.lumia-scope .text-orange-400\\/80{color:rgba(251,146,60,.8)}.lumia-scope .text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.lumia-scope .text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.lumia-scope .text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.lumia-scope .text-primary{color:hsl(var(--primary))}.lumia-scope .text-primary-foreground{color:hsl(var(--primary-foreground))}.lumia-scope .text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.lumia-scope .text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.lumia-scope .text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.lumia-scope .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.lumia-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.lumia-scope .text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.lumia-scope .text-secondary-foreground{color:hsl(var(--secondary-foreground))}.lumia-scope .text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.lumia-scope .text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.lumia-scope .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.lumia-scope .text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.lumia-scope .underline{text-decoration-line:underline}.lumia-scope .underline-offset-4{text-underline-offset:4px}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.lumia-scope .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.lumia-scope .shadow,.lumia-scope .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.lumia-scope .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.lumia-scope .shadow-lg,.lumia-scope .shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lumia-scope .outline{outline-style:solid}.lumia-scope .ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.lumia-scope .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .backdrop-blur{--tw-backdrop-blur:blur(8px)}.lumia-scope .backdrop-blur,.lumia-scope .backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.lumia-scope .backdrop-filter{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .duration-200{transition-duration:.2s}.lumia-scope .file\\:mr-4::file-selector-button{margin-right:1rem}.lumia-scope .file\\:rounded::file-selector-button{border-radius:.25rem}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-gray-700::file-selector-button{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .file\\:bg-purple-50::file-selector-button{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-4::file-selector-button{padding-left:1rem;padding-right:1rem}.lumia-scope .file\\:py-2::file-selector-button{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .file\\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:font-semibold::file-selector-button{font-weight:600}.lumia-scope .file\\:text-gray-200::file-selector-button{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .file\\:text-purple-700::file-selector-button{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .hover\\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .hover\\:bg-\\[\\#0077bb\\]:hover{--tw-bg-opacity:1;background-color:rgb(0 119 187/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#1e49d8\\]:hover{--tw-bg-opacity:1;background-color:rgb(30 73 216/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#be185d\\]:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#f7c1df\\]:hover{--tw-bg-opacity:1;background-color:rgb(247 193 223/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-accent:hover{background-color:hsl(var(--accent))}.lumia-scope .hover\\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-900\\/60:hover{background-color:rgba(30,58,138,.6)}.lumia-scope .hover\\:bg-destructive\\/90:hover{background-color:hsl(var(--destructive)/.9)}.lumia-scope .hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-900\\/30:hover{background-color:rgba(20,83,45,.3)}.lumia-scope .hover\\:bg-orange-200:hover{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-orange-900\\/60:hover{background-color:rgba(124,45,18,.6)}.lumia-scope .hover\\:bg-pink-300:hover{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-pink-700:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-primary\\/80:hover{background-color:hsl(var(--primary)/.8)}.lumia-scope .hover\\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-purple-600:hover{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-900\\/20:hover{background-color:rgba(127,29,29,.2)}.lumia-scope .hover\\:bg-secondary\\/80:hover{background-color:hsl(var(--secondary)/.8)}.lumia-scope .hover\\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:from-purple-600:hover{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .hover\\:from-purple-700:hover{--tw-gradient-from:#7e22ce var(--tw-gradient-from-position);--tw-gradient-to:rgba(126,34,206,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .hover\\:to-blue-700:hover{--tw-gradient-to:#1d4ed8 var(--tw-gradient-to-position)}.lumia-scope .hover\\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .hover\\:underline:hover{text-decoration-line:underline}.lumia-scope .hover\\:no-underline:hover{text-decoration-line:none}.lumia-scope .hover\\:opacity-80:hover{opacity:.8}.lumia-scope .hover\\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .hover\\:file\\:bg-gray-600::file-selector-button:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:file\\:bg-purple-100::file-selector-button:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus\\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.lumia-scope .focus\\:ring-gray-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}.lumia-scope .focus\\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.lumia-scope .focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}.lumia-scope .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-blue-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.lumia-scope .focus-visible\\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.lumia-scope .disabled\\:pointer-events-none:disabled{pointer-events:none}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-100:disabled{opacity:1}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}@media (min-width:640px){.lumia-scope .sm\\:mt-0{margin-top:0}.lumia-scope .sm\\:flex-row{flex-direction:row}.lumia-scope .sm\\:justify-end{justify-content:flex-end}.lumia-scope :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope .sm\\:rounded-lg{border-radius:var(--radius)}.lumia-scope .sm\\:text-left{text-align:left}}@media (prefers-color-scheme:dark){.lumia-scope .dark\\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .dark\\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .dark\\:text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .dark\\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .dark\\:placeholder\\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .dark\\:placeholder\\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .dark\\:hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .dark\\:focus\\:ring-gray-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity,1))}}.lumia-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.lumia-scope :is(.\\[\\&_svg\\]\\:size-4 svg){width:1rem;height:1rem}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!h-5 svg){height:1.25rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!h-6 svg){height:1.5rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!w-5 svg){width:1.25rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!w-6 svg){width:1.5rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
2917
+ var built_default = '.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\\201C""\\201D""\\2018""\\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.lumia-scope{background-color:hsl(var(--background));color:hsl(var(--foreground))}.lumia-scope,.lumia-scope *,.lumia-scope :after,.lumia-scope :before{box-sizing:border-box;border-width:0;border-style:solid}.lumia-scope input,.lumia-scope select,.lumia-scope textarea{font:inherit;color:inherit;margin:0;background-color:transparent}.lumia-scope button{font:inherit;margin:0}.lumia-scope input[type=search]::-webkit-search-cancel-button,.lumia-scope input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.lumia-scope,.lumia-scope *,.lumia-scope .lumia-heading,.lumia-scope [data-radix-dialog-content],.lumia-scope [data-radix-dialog-content] *,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6{font-family:system-ui,-apple-system,sans-serif!important}.lumia-scope .lumia-heading{font-weight:700}.lumia-scope .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lumia-scope .pointer-events-none{pointer-events:none}.lumia-scope .pointer-events-auto{pointer-events:auto}.lumia-scope .visible{visibility:visible}.lumia-scope .collapse{visibility:collapse}.lumia-scope .static{position:static}.lumia-scope .fixed{position:fixed}.lumia-scope .absolute{position:absolute}.lumia-scope .relative{position:relative}.lumia-scope .inset-0{inset:0}.lumia-scope .inset-y-0{top:0;bottom:0}.lumia-scope .-bottom-1{bottom:-.25rem}.lumia-scope .-right-1{right:-.25rem}.lumia-scope .bottom-full{bottom:100%}.lumia-scope .left-1{left:.25rem}.lumia-scope .left-1\\/2{left:50%}.lumia-scope .left-3{left:.75rem}.lumia-scope .left-4{left:1rem}.lumia-scope .left-\\[50\\%\\]{left:50%}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.lumia-scope .top-1{top:.25rem}.lumia-scope .top-1\\/2{top:50%}.lumia-scope .top-3{top:.75rem}.lumia-scope .top-4{top:1rem}.lumia-scope .top-\\[50\\%\\]{top:50%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[2147483646\\]{z-index:2147483646}.lumia-scope .z-\\[2147483647\\]{z-index:2147483647}.lumia-scope .z-\\[60\\]{z-index:60}.lumia-scope .-m-px{margin:-1px}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-auto{margin-left:auto;margin-right:auto}.lumia-scope .my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lumia-scope .-mt-5{margin-top:-1.25rem}.lumia-scope .mb-1{margin-bottom:.25rem}.lumia-scope .mb-2{margin-bottom:.5rem}.lumia-scope .mb-3{margin-bottom:.75rem}.lumia-scope .mb-4{margin-bottom:1rem}.lumia-scope .mb-6{margin-bottom:1.5rem}.lumia-scope .mb-8{margin-bottom:2rem}.lumia-scope .ml-1{margin-left:.25rem}.lumia-scope .ml-2{margin-left:.5rem}.lumia-scope .ml-4{margin-left:1rem}.lumia-scope .ml-auto{margin-left:auto}.lumia-scope .mr-1{margin-right:.25rem}.lumia-scope .mr-2{margin-right:.5rem}.lumia-scope .mt-0{margin-top:0}.lumia-scope .mt-0\\.5{margin-top:.125rem}.lumia-scope .mt-1{margin-top:.25rem}.lumia-scope .mt-2{margin-top:.5rem}.lumia-scope .mt-3{margin-top:.75rem}.lumia-scope .mt-4{margin-top:1rem}.lumia-scope .mt-6{margin-top:1.5rem}.lumia-scope .block{display:block}.lumia-scope .inline-block{display:inline-block}.lumia-scope .inline{display:inline}.lumia-scope .flex{display:flex}.lumia-scope .inline-flex{display:inline-flex}.lumia-scope .table{display:table}.lumia-scope .grid{display:grid}.lumia-scope .contents{display:contents}.lumia-scope .hidden{display:none}.lumia-scope .size-4{width:1rem;height:1rem}.lumia-scope .\\!h-5{height:1.25rem!important}.lumia-scope .\\!h-6{height:1.5rem!important}.lumia-scope .h-10{height:2.5rem}.lumia-scope .h-11{height:2.75rem}.lumia-scope .h-12{height:3rem}.lumia-scope .h-14{height:3.5rem}.lumia-scope .h-16{height:4rem}.lumia-scope .h-2{height:.5rem}.lumia-scope .h-2\\.5{height:.625rem}.lumia-scope .h-3{height:.75rem}.lumia-scope .h-3\\.5{height:.875rem}.lumia-scope .h-4{height:1rem}.lumia-scope .h-48{height:12rem}.lumia-scope .h-5{height:1.25rem}.lumia-scope .h-6{height:1.5rem}.lumia-scope .h-8{height:2rem}.lumia-scope .h-9{height:2.25rem}.lumia-scope .h-full{height:100%}.lumia-scope .h-px{height:1px}.lumia-scope .max-h-24{max-height:6rem}.lumia-scope .max-h-96{max-height:24rem}.lumia-scope .max-h-\\[60vh\\]{max-height:60vh}.lumia-scope .max-h-\\[80vh\\]{max-height:80vh}.lumia-scope .\\!w-5{width:1.25rem!important}.lumia-scope .\\!w-6{width:1.5rem!important}.lumia-scope .w-10{width:2.5rem}.lumia-scope .w-12{width:3rem}.lumia-scope .w-16{width:4rem}.lumia-scope .w-2{width:.5rem}.lumia-scope .w-2\\.5{width:.625rem}.lumia-scope .w-3{width:.75rem}.lumia-scope .w-3\\.5{width:.875rem}.lumia-scope .w-4{width:1rem}.lumia-scope .w-48{width:12rem}.lumia-scope .w-5{width:1.25rem}.lumia-scope .w-6{width:1.5rem}.lumia-scope .w-8{width:2rem}.lumia-scope .w-9{width:2.25rem}.lumia-scope .w-full{width:100%}.lumia-scope .w-px{width:1px}.lumia-scope .min-w-0{min-width:0}.lumia-scope .min-w-16{min-width:4rem}.lumia-scope .min-w-24{min-width:6rem}.lumia-scope .min-w-32{min-width:8rem}.lumia-scope .min-w-\\[280px\\]{min-width:280px}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[380px\\]{max-width:380px}.lumia-scope .max-w-\\[400px\\]{max-width:400px}.lumia-scope .max-w-\\[500px\\]{max-width:500px}.lumia-scope .max-w-\\[680px\\]{max-width:680px}.lumia-scope .max-w-full{max-width:100%}.lumia-scope .max-w-lg{max-width:32rem}.lumia-scope .max-w-md{max-width:28rem}.lumia-scope .max-w-sm{max-width:24rem}.lumia-scope .flex-1{flex:1 1 0%}.lumia-scope .flex-shrink{flex-shrink:1}.lumia-scope .flex-shrink-0,.lumia-scope .shrink-0{flex-shrink:0}.lumia-scope .border-collapse{border-collapse:collapse}.lumia-scope .-translate-x-1{--tw-translate-x:-0.25rem}.lumia-scope .-translate-x-1,.lumia-scope .-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-x-1\\/2{--tw-translate-x:-50%}.lumia-scope .-translate-y-1{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1,.lumia-scope .-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.lumia-scope .translate-x-\\[-50\\%\\],.lumia-scope .translate-y-\\[-50\\%\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.lumia-scope .transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.lumia-scope .resize{resize:both}.lumia-scope .list-inside{list-style-position:inside}.lumia-scope .list-disc{list-style-type:disc}.lumia-scope .grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lumia-scope .grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lumia-scope .grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lumia-scope .grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lumia-scope .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lumia-scope .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lumia-scope .grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lumia-scope .flex-row{flex-direction:row}.lumia-scope .flex-col{flex-direction:column}.lumia-scope .flex-col-reverse{flex-direction:column-reverse}.lumia-scope .flex-wrap{flex-wrap:wrap}.lumia-scope .items-start{align-items:flex-start}.lumia-scope .items-center{align-items:center}.lumia-scope .justify-start{justify-content:flex-start}.lumia-scope .justify-end{justify-content:flex-end}.lumia-scope .justify-center{justify-content:center}.lumia-scope .justify-between{justify-content:space-between}.lumia-scope .gap-0{gap:0}.lumia-scope .gap-1{gap:.25rem}.lumia-scope .gap-2{gap:.5rem}.lumia-scope .gap-3{gap:.75rem}.lumia-scope .gap-4{gap:1rem}.lumia-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-3>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-4>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-y-0>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-6>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.lumia-scope .overflow-auto{overflow:auto}.lumia-scope .overflow-hidden{overflow:hidden}.lumia-scope .overflow-visible{overflow:visible}.lumia-scope .overflow-y-auto{overflow-y:auto}.lumia-scope .truncate{overflow:hidden;text-overflow:ellipsis}.lumia-scope .truncate,.lumia-scope .whitespace-nowrap{white-space:nowrap}.lumia-scope .whitespace-pre-line{white-space:pre-line}.lumia-scope .whitespace-pre-wrap{white-space:pre-wrap}.lumia-scope .break-words{overflow-wrap:break-word}.lumia-scope .break-all{word-break:break-all}.lumia-scope .rounded{border-radius:.25rem}.lumia-scope .rounded-2xl{border-radius:1rem}.lumia-scope .rounded-3xl{border-radius:1.5rem}.lumia-scope .rounded-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:var(--radius)}.lumia-scope .rounded-md{border-radius:calc(var(--radius) - 2px)}.lumia-scope .rounded-sm{border-radius:calc(var(--radius) - 4px)}.lumia-scope .rounded-xl{border-radius:.75rem}.lumia-scope .border{border-width:1px}.lumia-scope .border-0{border-width:0}.lumia-scope .border-2{border-width:2px}.lumia-scope .border-b{border-bottom-width:1px}.lumia-scope .border-b-2{border-bottom-width:2px}.lumia-scope .border-t{border-top-width:1px}.lumia-scope .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.lumia-scope .border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity,1))}.lumia-scope .border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.lumia-scope .border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.lumia-scope .border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.lumia-scope .border-blue-900\\/40{border-color:rgba(30,58,138,.4)}.lumia-scope .border-border{border-color:hsl(var(--border))}.lumia-scope .border-current{border-color:currentColor}.lumia-scope .border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.lumia-scope .border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.lumia-scope .border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.lumia-scope .border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.lumia-scope .border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.lumia-scope .border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity,1))}.lumia-scope .border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.lumia-scope .border-input{border-color:hsl(var(--input))}.lumia-scope .border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.lumia-scope .border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity,1))}.lumia-scope .border-orange-900\\/40{border-color:rgba(124,45,18,.4)}.lumia-scope .border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.lumia-scope .border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.lumia-scope .border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-transparent{border-color:transparent}.lumia-scope .border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.lumia-scope .border-t-transparent{border-top-color:transparent}.lumia-scope .\\!bg-transparent{background-color:transparent!important}.lumia-scope .bg-\\[\\#0088cc\\]{--tw-bg-opacity:1;background-color:rgb(0 136 204/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#2456f0\\]{--tw-bg-opacity:1;background-color:rgb(36 86 240/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#db2777\\]{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#fde2f3\\]{--tw-bg-opacity:1;background-color:rgb(253 226 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-900\\/30{background-color:rgba(120,53,15,.3)}.lumia-scope .bg-background{background-color:hsl(var(--background))}.lumia-scope .bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.lumia-scope .bg-black\\/50{background-color:rgba(0,0,0,.5)}.lumia-scope .bg-black\\/80{background-color:rgba(0,0,0,.8)}.lumia-scope .bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-50\\/50{background-color:rgba(239,246,255,.5)}.lumia-scope .bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-900\\/20{background-color:rgba(30,58,138,.2)}.lumia-scope .bg-blue-900\\/30{background-color:rgba(30,58,138,.3)}.lumia-scope .bg-blue-900\\/40{background-color:rgba(30,58,138,.4)}.lumia-scope .bg-card{background-color:hsl(var(--card))}.lumia-scope .bg-destructive{background-color:hsl(var(--destructive))}.lumia-scope .bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-800\\/50{background-color:rgba(31,41,55,.5)}.lumia-scope .bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.lumia-scope .bg-gray-900\\/40{background-color:rgba(17,24,39,.4)}.lumia-scope .bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-900\\/30{background-color:rgba(20,83,45,.3)}.lumia-scope .bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900{--tw-bg-opacity:1;background-color:rgb(124 45 18/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-900\\/20{background-color:rgba(124,45,18,.2)}.lumia-scope .bg-orange-900\\/30{background-color:rgba(124,45,18,.3)}.lumia-scope .bg-orange-900\\/40{background-color:rgba(124,45,18,.4)}.lumia-scope .bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}.lumia-scope .bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.lumia-scope .bg-primary{background-color:hsl(var(--primary))}.lumia-scope .bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-50\\/50{background-color:rgba(250,245,255,.5)}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-900\\/30{background-color:rgba(127,29,29,.3)}.lumia-scope .bg-secondary{background-color:hsl(var(--secondary))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50\\/50{background-color:rgba(240,249,255,.5)}.lumia-scope .bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.lumia-scope .bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.lumia-scope .bg-transparent{background-color:transparent}.lumia-scope .bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.lumia-scope .bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.lumia-scope .bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.lumia-scope .from-purple-100{--tw-gradient-from:#f3e8ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(243,232,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:rgba(168,85,247,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .from-purple-600{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .to-blue-100{--tw-gradient-to:#dbeafe var(--tw-gradient-to-position)}.lumia-scope .to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.lumia-scope .to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.lumia-scope .object-contain{-o-object-fit:contain;object-fit:contain}.lumia-scope .object-cover{-o-object-fit:cover;object-fit:cover}.lumia-scope .p-0{padding:0}.lumia-scope .p-1{padding:.25rem}.lumia-scope .p-2{padding:.5rem}.lumia-scope .p-2\\.5{padding:.625rem}.lumia-scope .p-3{padding:.75rem}.lumia-scope .p-4{padding:1rem}.lumia-scope .p-5{padding:1.25rem}.lumia-scope .p-6{padding:1.5rem}.lumia-scope .p-8{padding:2rem}.lumia-scope .px-12{padding-left:3rem;padding-right:3rem}.lumia-scope .px-2{padding-left:.5rem;padding-right:.5rem}.lumia-scope .px-2\\.5{padding-left:.625rem;padding-right:.625rem}.lumia-scope .px-3{padding-left:.75rem;padding-right:.75rem}.lumia-scope .px-4{padding-left:1rem;padding-right:1rem}.lumia-scope .px-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.lumia-scope .py-0{padding-top:0;padding-bottom:0}.lumia-scope .py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.lumia-scope .py-1{padding-top:.25rem;padding-bottom:.25rem}.lumia-scope .py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.lumia-scope .py-2{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .py-3{padding-top:.75rem;padding-bottom:.75rem}.lumia-scope .py-4{padding-top:1rem;padding-bottom:1rem}.lumia-scope .py-8{padding-top:2rem;padding-bottom:2rem}.lumia-scope .pb-4{padding-bottom:1rem}.lumia-scope .pl-11{padding-left:2.75rem}.lumia-scope .pr-10{padding-right:2.5rem}.lumia-scope .pr-16{padding-right:4rem}.lumia-scope .pt-0{padding-top:0}.lumia-scope .pt-2{padding-top:.5rem}.lumia-scope .pt-3{padding-top:.75rem}.lumia-scope .pt-4{padding-top:1rem}.lumia-scope .text-left{text-align:left}.lumia-scope .text-center{text-align:center}.lumia-scope .text-right{text-align:right}.lumia-scope .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.lumia-scope .font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.lumia-scope .text-2xl{font-size:1.5rem;line-height:2rem}.lumia-scope .text-\\[10px\\]{font-size:10px}.lumia-scope .text-\\[11px\\]{font-size:11px}.lumia-scope .text-base{font-size:1rem;line-height:1.5rem}.lumia-scope .text-lg{font-size:1.125rem;line-height:1.75rem}.lumia-scope .text-sm{font-size:.875rem;line-height:1.25rem}.lumia-scope .text-xl{font-size:1.25rem;line-height:1.75rem}.lumia-scope .text-xs{font-size:.75rem;line-height:1rem}.lumia-scope .font-bold{font-weight:700}.lumia-scope .font-medium{font-weight:500}.lumia-scope .font-semibold{font-weight:600}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.lumia-scope .text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.lumia-scope .text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.lumia-scope .text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.lumia-scope .text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.lumia-scope .text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .text-blue-400\\/80{color:rgba(96,165,250,.8)}.lumia-scope .text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.lumia-scope .text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .text-card-foreground{color:hsl(var(--card-foreground))}.lumia-scope .text-destructive{color:hsl(var(--destructive))}.lumia-scope .text-destructive-foreground{color:hsl(var(--destructive-foreground))}.lumia-scope .text-foreground{color:hsl(var(--foreground))}.lumia-scope .text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.lumia-scope .text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.lumia-scope .text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.lumia-scope .text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.lumia-scope .text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.lumia-scope .text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.lumia-scope .text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.lumia-scope .text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.lumia-scope .text-muted-foreground{color:hsl(var(--muted-foreground))}.lumia-scope .text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.lumia-scope .text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.lumia-scope .text-orange-400\\/80{color:rgba(251,146,60,.8)}.lumia-scope .text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.lumia-scope .text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.lumia-scope .text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.lumia-scope .text-primary{color:hsl(var(--primary))}.lumia-scope .text-primary-foreground{color:hsl(var(--primary-foreground))}.lumia-scope .text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.lumia-scope .text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.lumia-scope .text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.lumia-scope .text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.lumia-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.lumia-scope .text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.lumia-scope .text-secondary-foreground{color:hsl(var(--secondary-foreground))}.lumia-scope .text-sky-400{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.lumia-scope .text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.lumia-scope .text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.lumia-scope .text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.lumia-scope .underline{text-decoration-line:underline}.lumia-scope .underline-offset-4{text-underline-offset:4px}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.lumia-scope .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.lumia-scope .shadow,.lumia-scope .shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.lumia-scope .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.lumia-scope .shadow-lg,.lumia-scope .shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.lumia-scope .outline{outline-style:solid}.lumia-scope .ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.lumia-scope .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.lumia-scope .backdrop-blur{--tw-backdrop-blur:blur(8px)}.lumia-scope .backdrop-blur,.lumia-scope .backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.lumia-scope .backdrop-filter{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.lumia-scope .transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lumia-scope .duration-200{transition-duration:.2s}.lumia-scope .file\\:mr-4::file-selector-button{margin-right:1rem}.lumia-scope .file\\:rounded::file-selector-button{border-radius:.25rem}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-gray-700::file-selector-button{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .file\\:bg-purple-50::file-selector-button{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-4::file-selector-button{padding-left:1rem;padding-right:1rem}.lumia-scope .file\\:py-2::file-selector-button{padding-top:.5rem;padding-bottom:.5rem}.lumia-scope .file\\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:font-semibold::file-selector-button{font-weight:600}.lumia-scope .file\\:text-gray-200::file-selector-button{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .file\\:text-purple-700::file-selector-button{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .placeholder\\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .hover\\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lumia-scope .hover\\:bg-\\[\\#0077bb\\]:hover{--tw-bg-opacity:1;background-color:rgb(0 119 187/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#1e49d8\\]:hover{--tw-bg-opacity:1;background-color:rgb(30 73 216/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#be185d\\]:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-\\[\\#f7c1df\\]:hover{--tw-bg-opacity:1;background-color:rgb(247 193 223/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-accent:hover{background-color:hsl(var(--accent))}.lumia-scope .hover\\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-blue-900\\/60:hover{background-color:rgba(30,58,138,.6)}.lumia-scope .hover\\:bg-destructive\\/90:hover{background-color:hsl(var(--destructive)/.9)}.lumia-scope .hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-green-900\\/30:hover{background-color:rgba(20,83,45,.3)}.lumia-scope .hover\\:bg-orange-200:hover{--tw-bg-opacity:1;background-color:rgb(254 215 170/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-orange-900\\/60:hover{background-color:rgba(124,45,18,.6)}.lumia-scope .hover\\:bg-pink-300:hover{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-pink-700:hover{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-primary\\/80:hover{background-color:hsl(var(--primary)/.8)}.lumia-scope .hover\\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-purple-600:hover{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-900\\/20:hover{background-color:rgba(127,29,29,.2)}.lumia-scope .hover\\:bg-secondary\\/80:hover{background-color:hsl(var(--secondary)/.8)}.lumia-scope .hover\\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:from-purple-600:hover{--tw-gradient-from:#9333ea var(--tw-gradient-from-position);--tw-gradient-to:rgba(147,51,234,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .hover\\:from-purple-700:hover{--tw-gradient-from:#7e22ce var(--tw-gradient-from-position);--tw-gradient-to:rgba(126,34,206,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.lumia-scope .hover\\:to-blue-700:hover{--tw-gradient-to:#1d4ed8 var(--tw-gradient-to-position)}.lumia-scope .hover\\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .hover\\:underline:hover{text-decoration-line:underline}.lumia-scope .hover\\:no-underline:hover{text-decoration-line:none}.lumia-scope .hover\\:opacity-80:hover{opacity:.8}.lumia-scope .hover\\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lumia-scope .hover\\:file\\:bg-gray-600::file-selector-button:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:file\\:bg-purple-100::file-selector-button:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.lumia-scope .focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus\\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus\\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.lumia-scope .focus\\:ring-gray-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}.lumia-scope .focus\\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.lumia-scope .focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px}.lumia-scope .focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.lumia-scope .focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.lumia-scope .focus-visible\\:ring-blue-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.lumia-scope .focus-visible\\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.lumia-scope .disabled\\:pointer-events-none:disabled{pointer-events:none}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-100:disabled{opacity:1}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}@media (min-width:640px){.lumia-scope .sm\\:mt-0{margin-top:0}.lumia-scope .sm\\:flex-row{flex-direction:row}.lumia-scope .sm\\:justify-end{justify-content:flex-end}.lumia-scope :is(.sm\\:space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope .sm\\:rounded-lg{border-radius:var(--radius)}.lumia-scope .sm\\:text-left{text-align:left}}@media (prefers-color-scheme:dark){.lumia-scope .dark\\:border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.lumia-scope .dark\\:bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.lumia-scope .dark\\:text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.lumia-scope .dark\\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.lumia-scope .dark\\:placeholder\\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .dark\\:placeholder\\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.lumia-scope .dark\\:hover\\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:bg-yellow-500:hover{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.lumia-scope .dark\\:hover\\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.lumia-scope .dark\\:focus\\:ring-gray-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity,1))}}.lumia-scope :is(.\\[\\&_svg\\]\\:pointer-events-none svg){pointer-events:none}.lumia-scope :is(.\\[\\&_svg\\]\\:size-4 svg){width:1rem;height:1rem}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!h-5 svg){height:1.25rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!h-6 svg){height:1.5rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!w-5 svg){width:1.25rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:\\!w-6 svg){width:1.5rem!important}.lumia-scope :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
2830
2918
 
2831
2919
  // src/context/LumiaPassportContext.tsx
2832
2920
  var import_react = require("react");
@@ -3622,6 +3710,7 @@ Input.displayName = "Input";
3622
3710
 
3623
3711
  // src/internal/components/KeyshareRestore.tsx
3624
3712
  init_vaultClient();
3713
+ init_iframe_manager();
3625
3714
  var import_jsx_runtime16 = require("react/jsx-runtime");
3626
3715
  function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
3627
3716
  const { config } = useLumiaPassportConfig();
@@ -3635,6 +3724,14 @@ function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
3635
3724
  const [restorePassword, setRestorePassword] = React10.useState("");
3636
3725
  const [hasServerBackup, setHasServerBackup] = React10.useState(null);
3637
3726
  const [checkingBackup, setCheckingBackup] = React10.useState(true);
3727
+ const iframeManager = React10.useMemo(() => {
3728
+ try {
3729
+ return getIframeManager();
3730
+ } catch (e) {
3731
+ console.error("[KeyshareRestore] Failed to get iframe manager:", e);
3732
+ return null;
3733
+ }
3734
+ }, []);
3638
3735
  React10.useEffect(() => {
3639
3736
  const checkBackupAvailability = async () => {
3640
3737
  try {
@@ -3657,20 +3754,31 @@ function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
3657
3754
  }, [userId]);
3658
3755
  const handleRestoreFromServer = async () => {
3659
3756
  console.log("[KeyshareRestore] Starting server restore for userId:", userId);
3757
+ if (!iframeManager) {
3758
+ setError("Iframe manager not initialized");
3759
+ return;
3760
+ }
3660
3761
  setLoading((prev) => ({ ...prev, server: true }));
3661
3762
  setError(null);
3662
3763
  setSuccess(null);
3663
3764
  try {
3664
- const passwordToUse = useCustomPassword ? restorePassword : null;
3665
- console.log("[KeyshareRestore] Calling restoreFromServer with method:", useCustomPassword ? "password" : "passkey");
3666
- await restoreFromServer(userId, passwordToUse);
3667
- console.log("[KeyshareRestore] Server restore successful");
3668
- setSuccess("Successfully restored keyshare from server backup");
3669
- setTimeout(() => {
3670
- onRestoreSuccess?.();
3671
- }, 100);
3765
+ const passwordToUse = useCustomPassword ? restorePassword : void 0;
3766
+ console.log("[KeyshareRestore] Calling iframeManager.restoreFromServer with method:", useCustomPassword ? "password" : "passkey");
3767
+ const jwt = await Promise.resolve().then(() => (init_auth(), auth_exports)).then((m) => m.jwtTokenManager.getTokens());
3768
+ const accessToken = jwt?.accessToken;
3769
+ const result = await iframeManager.restoreFromServer(userId, passwordToUse, accessToken);
3770
+ if (result.success) {
3771
+ console.log("[KeyshareRestore] Server restore successful");
3772
+ setSuccess("Successfully restored keyshare from server backup");
3773
+ setTimeout(() => {
3774
+ onRestoreSuccess?.();
3775
+ }, 100);
3776
+ } else {
3777
+ console.error("[KeyshareRestore] Server restore failed:", result.error);
3778
+ setError(result.error || "Server restore failed");
3779
+ }
3672
3780
  } catch (err) {
3673
- console.error("[KeyshareRestore] Server restore failed:", err);
3781
+ console.error("[KeyshareRestore] Server restore exception:", err);
3674
3782
  const errorMsg = err instanceof Error ? err.message : "Server restore failed";
3675
3783
  setError(errorMsg);
3676
3784
  } finally {
@@ -3687,18 +3795,27 @@ function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
3687
3795
  setError("Please enter the backup password");
3688
3796
  return;
3689
3797
  }
3798
+ if (!iframeManager) {
3799
+ setError("Iframe manager not initialized");
3800
+ return;
3801
+ }
3690
3802
  setLoading((prev) => ({ ...prev, file: true }));
3691
3803
  setError(null);
3692
3804
  setSuccess(null);
3693
3805
  try {
3694
- const passwordToUse = useCustomPassword ? restorePassword : null;
3695
- await restoreFromBackup(restoreFile, passwordToUse, userId);
3696
- setSuccess("Successfully restored keyshare from backup file");
3697
- setRestoreFile(null);
3698
- setRestorePassword("");
3699
- setTimeout(() => {
3700
- onRestoreSuccess?.();
3701
- }, 100);
3806
+ const fileContent = await restoreFile.text();
3807
+ const passwordToUse = useCustomPassword ? restorePassword : void 0;
3808
+ const result = await iframeManager.restoreFromLocalFile(userId, fileContent, passwordToUse);
3809
+ if (result.success) {
3810
+ setSuccess("Successfully restored keyshare from backup file");
3811
+ setRestoreFile(null);
3812
+ setRestorePassword("");
3813
+ setTimeout(() => {
3814
+ onRestoreSuccess?.();
3815
+ }, 100);
3816
+ } else {
3817
+ setError(result.error || "File restore failed");
3818
+ }
3702
3819
  } catch (err) {
3703
3820
  const errorMsg = err instanceof Error ? err.message : "Restore failed";
3704
3821
  setError(errorMsg);
@@ -5294,6 +5411,208 @@ async function sendUserOperation(session, callTarget, amountWei, innerData = "0x
5294
5411
  }
5295
5412
  return hash;
5296
5413
  }
5414
+ async function prepareUserOperation(session, callTarget, amountWei, innerData = "0x", feeType = "standard", entryPointVersion = "v0.7") {
5415
+ const entryPointAddress = entryPointVersion === "v0.6" ? ENTRYPOINT_V06 : ENTRYPOINT_V07;
5416
+ const amountWeiBigInt = BigInt(amountWei);
5417
+ const isMinimalTest = callTarget === "0x0000000000000000000000000000000000000000" && amountWei === "0" && innerData === "0x";
5418
+ let callData;
5419
+ if (isMinimalTest) {
5420
+ callData = "0x";
5421
+ } else {
5422
+ callData = (0, import_viem3.encodeFunctionData)({ abi: executeAbi, functionName: "execute", args: [callTarget, amountWeiBigInt, innerData] });
5423
+ }
5424
+ let isDeployed = false;
5425
+ let deploymentMethod = "unknown";
5426
+ try {
5427
+ const code = await publicClient.getCode({ address: session.smartAccountAddress });
5428
+ if (code && code !== "0x" && code.length > 2) {
5429
+ isDeployed = true;
5430
+ deploymentMethod = "getCode";
5431
+ }
5432
+ } catch {
5433
+ }
5434
+ const nonce = await fetchEntryPointNonce(session.smartAccountAddress, entryPointAddress);
5435
+ const nonceValue = BigInt(nonce);
5436
+ if (!isDeployed && nonceValue !== 0n) throw new Error(`Undeployed account has non-zero nonce: ${nonce}. This will cause CodeHashChanged error.`);
5437
+ const shouldIncludeFactory = !isDeployed;
5438
+ let userOp;
5439
+ if (shouldIncludeFactory) {
5440
+ const compatCreateAbi = [{ type: "function", name: "createAccount", stateMutability: "payable", inputs: [{ name: "owner", type: "address" }, { name: "salt", type: "bytes32" }], outputs: [{ name: "", type: "address" }] }];
5441
+ const saltZero = "0x0000000000000000000000000000000000000000000000000000000000000000";
5442
+ const factoryData = (0, import_viem3.encodeFunctionData)({ abi: compatCreateAbi, functionName: "createAccount", args: [session.ownerAddress, saltZero] });
5443
+ userOp = await (0, import_bundler.createUserOperationWithDynamicFees)(
5444
+ session.smartAccountAddress,
5445
+ nonce,
5446
+ callData,
5447
+ true,
5448
+ session.factoryAddress,
5449
+ factoryData,
5450
+ feeType
5451
+ );
5452
+ } else {
5453
+ userOp = await (0, import_bundler.createUserOperationWithDynamicFees)(
5454
+ session.smartAccountAddress,
5455
+ nonce,
5456
+ callData,
5457
+ false,
5458
+ void 0,
5459
+ void 0,
5460
+ feeType
5461
+ );
5462
+ }
5463
+ const ensureGenerousDefaults = () => {
5464
+ const toHex2 = (v) => `0x${v.toString(16)}`;
5465
+ const minCallGas = 0x493e0n;
5466
+ const minVerificationGas = 0x989680n;
5467
+ const minPreVerificationGas = 0x30d40n;
5468
+ if (BigInt(userOp.callGasLimit || "0x0") < minCallGas) userOp.callGasLimit = toHex2(minCallGas);
5469
+ if (BigInt(userOp.verificationGasLimit || "0x0") < minVerificationGas) userOp.verificationGasLimit = toHex2(minVerificationGas);
5470
+ if (BigInt(userOp.preVerificationGas || "0x0") < minPreVerificationGas) userOp.preVerificationGas = toHex2(minPreVerificationGas);
5471
+ };
5472
+ const enforceCaps = (usePaymaster) => {
5473
+ try {
5474
+ const envCaps = typeof import_meta !== "undefined" && import_meta.env || {};
5475
+ const maxBundlerVerifGas = envCaps.VITE_MAX_VERIFICATION_GAS ? BigInt(envCaps.VITE_MAX_VERIFICATION_GAS) : MAX_BUNDLER_VERIFICATION_GAS;
5476
+ const maxCallGas = envCaps.VITE_MAX_CALL_GAS_LIMIT ? BigInt(envCaps.VITE_MAX_CALL_GAS_LIMIT) : 0x7a120n;
5477
+ const toHex2 = (v) => `0x${v.toString(16)}`;
5478
+ const maxAccountVerifGas = usePaymaster ? maxBundlerVerifGas - PAYMASTER_VERIFICATION_GAS : maxBundlerVerifGas;
5479
+ const verGas = BigInt(userOp.verificationGasLimit || "0x0");
5480
+ if (verGas > maxAccountVerifGas) userOp.verificationGasLimit = toHex2(maxAccountVerifGas);
5481
+ const callGas = BigInt(userOp.callGasLimit || "0x0");
5482
+ if (callGas > maxCallGas) userOp.callGasLimit = toHex2(maxCallGas);
5483
+ } catch {
5484
+ }
5485
+ };
5486
+ let estimated = false;
5487
+ try {
5488
+ const gasEst = await (0, import_bundler.estimateUserOperationGas)({ ...userOp, signature: `0x${"00".repeat(65)}` });
5489
+ userOp.callGasLimit = gasEst.callGasLimit;
5490
+ userOp.verificationGasLimit = gasEst.verificationGasLimit;
5491
+ userOp.preVerificationGas = gasEst.preVerificationGas;
5492
+ ensureGenerousDefaults();
5493
+ enforceCaps(session.usePaymaster);
5494
+ estimated = true;
5495
+ } catch {
5496
+ ensureGenerousDefaults();
5497
+ enforceCaps(session.usePaymaster);
5498
+ }
5499
+ try {
5500
+ const toHex2 = (v) => `0x${v.toString(16)}`;
5501
+ const isContractCall = !!userOp.callData && userOp.callData !== "0x";
5502
+ if (isContractCall) {
5503
+ const currentVer = BigInt(userOp.verificationGasLimit || "0x0");
5504
+ const call = BigInt(userOp.callGasLimit || "0x0");
5505
+ const postOp = 150000n;
5506
+ const safety10k = 10000n;
5507
+ let buffer = call + postOp + safety10k;
5508
+ buffer += buffer / 63n;
5509
+ const newVer = currentVer + buffer;
5510
+ userOp.verificationGasLimit = toHex2(newVer);
5511
+ enforceCaps(session.usePaymaster);
5512
+ }
5513
+ } catch {
5514
+ }
5515
+ if (session.usePaymaster && LUMIA_PAYMASTER_ADDRESS) {
5516
+ userOp.paymaster = LUMIA_PAYMASTER_ADDRESS;
5517
+ userOp.paymasterData = "0x";
5518
+ userOp.paymasterVerificationGasLimit = PAYMASTER_VERIFICATION_GAS_LIMIT;
5519
+ userOp.paymasterPostOpGasLimit = PAYMASTER_POSTOP_GAS_LIMIT;
5520
+ }
5521
+ userOp.nonce = nonce;
5522
+ let opHash;
5523
+ if (entryPointVersion === "v0.6") {
5524
+ const userOpV06 = convertUserOpV07ToV06(userOp);
5525
+ opHash = await publicClient.readContract({
5526
+ address: entryPointAddress,
5527
+ abi: [{ type: "function", name: "getUserOpHash", inputs: [{ name: "userOp", type: "tuple", components: [{ name: "sender", type: "address" }, { name: "nonce", type: "uint256" }, { name: "initCode", type: "bytes" }, { name: "callData", type: "bytes" }, { name: "callGasLimit", type: "uint256" }, { name: "verificationGasLimit", type: "uint256" }, { name: "preVerificationGas", type: "uint256" }, { name: "maxFeePerGas", type: "uint256" }, { name: "maxPriorityFeePerGas", type: "uint256" }, { name: "paymasterAndData", type: "bytes" }, { name: "signature", type: "bytes" }] }], outputs: [{ name: "", type: "bytes32" }] }],
5528
+ functionName: "getUserOpHash",
5529
+ args: [{
5530
+ sender: userOpV06.sender,
5531
+ nonce: BigInt(userOpV06.nonce),
5532
+ initCode: userOpV06.initCode,
5533
+ callData: userOpV06.callData,
5534
+ callGasLimit: BigInt(userOpV06.callGasLimit),
5535
+ verificationGasLimit: BigInt(userOpV06.verificationGasLimit),
5536
+ preVerificationGas: BigInt(userOpV06.preVerificationGas),
5537
+ maxFeePerGas: BigInt(userOpV06.maxFeePerGas),
5538
+ maxPriorityFeePerGas: BigInt(userOpV06.maxPriorityFeePerGas),
5539
+ paymasterAndData: userOpV06.paymasterAndData,
5540
+ signature: "0x"
5541
+ }]
5542
+ });
5543
+ } else {
5544
+ const hasFactoryData = !!(userOp.factory && userOp.factoryData);
5545
+ const initCode = hasFactoryData ? (() => {
5546
+ const factoryAddr = userOp.factory.startsWith("0x") ? userOp.factory.slice(2) : userOp.factory;
5547
+ const factoryDataClean = userOp.factoryData.startsWith("0x") ? userOp.factoryData.slice(2) : userOp.factoryData;
5548
+ return `0x${factoryAddr}${factoryDataClean}`;
5549
+ })() : "0x";
5550
+ const accountGasLimits = pack2x128(BigInt(userOp.verificationGasLimit), BigInt(userOp.callGasLimit));
5551
+ const gasFees = pack2x128(BigInt(userOp.maxPriorityFeePerGas), BigInt(userOp.maxFeePerGas));
5552
+ let paymasterAndData = "0x";
5553
+ if (userOp.paymaster && userOp.paymaster !== "0x0000000000000000000000000000000000000000") {
5554
+ const verificationGasLimit = userOp.paymasterVerificationGasLimit || "0x186a0";
5555
+ const postOpGasLimit = userOp.paymasterPostOpGasLimit || "0x186a0";
5556
+ const paymasterDataField = userOp.paymasterData || "0x";
5557
+ const packedPaymasterGasLimits = pack2x128(BigInt(verificationGasLimit), BigInt(postOpGasLimit));
5558
+ const paymasterAddr = userOp.paymaster.startsWith("0x") ? userOp.paymaster.slice(2) : userOp.paymaster;
5559
+ const paymasterDataClean = paymasterDataField === "0x" ? "" : paymasterDataField.startsWith("0x") ? paymasterDataField.slice(2) : paymasterDataField;
5560
+ paymasterAndData = `0x${paymasterAddr}${packedPaymasterGasLimits.slice(2)}${paymasterDataClean}`;
5561
+ }
5562
+ const packedForHash = {
5563
+ sender: session.smartAccountAddress,
5564
+ nonce: BigInt(nonce),
5565
+ initCode,
5566
+ callData,
5567
+ accountGasLimits,
5568
+ preVerificationGas: BigInt(userOp.preVerificationGas),
5569
+ gasFees,
5570
+ paymasterAndData,
5571
+ signature: "0x"
5572
+ };
5573
+ opHash = await publicClient.readContract({
5574
+ address: entryPointAddress,
5575
+ abi: import_account_abstraction2.entryPoint07Abi,
5576
+ functionName: "getUserOpHash",
5577
+ args: [packedForHash]
5578
+ });
5579
+ }
5580
+ let signature;
5581
+ if (session.mpcUserId) {
5582
+ const mpcSig = await signDigestWithMpc(session.mpcUserId, opHash, {
5583
+ sender: userOp.sender,
5584
+ nonce: userOp.nonce,
5585
+ callData: userOp.callData,
5586
+ callGasLimit: userOp.callGasLimit,
5587
+ verificationGasLimit: userOp.verificationGasLimit,
5588
+ preVerificationGas: userOp.preVerificationGas,
5589
+ maxFeePerGas: userOp.maxFeePerGas,
5590
+ maxPriorityFeePerGas: userOp.maxPriorityFeePerGas,
5591
+ paymaster: userOp.paymaster,
5592
+ factory: userOp.factory,
5593
+ factoryData: userOp.factoryData
5594
+ });
5595
+ if (!mpcSig) throw new Error("MPC signing failed");
5596
+ signature = mpcSig;
5597
+ } else if (session.ownerPrivateKey) {
5598
+ const account = (0, import_accounts.privateKeyToAccount)(session.ownerPrivateKey);
5599
+ const rawSig = await account.sign({ hash: opHash });
5600
+ signature = normalizeSignature(rawSig);
5601
+ } else {
5602
+ throw new Error("No signing method available");
5603
+ }
5604
+ userOp.signature = signature;
5605
+ if (typeof userOp.sender !== "string") {
5606
+ userOp.sender = session.smartAccountAddress;
5607
+ }
5608
+ console.log("[Account] \u2705 Prepared signed UserOp (not sent):", JSON.stringify(userOp, (key, value) => typeof value === "bigint" ? `0x${value.toString(16)}` : value, 2));
5609
+ console.log("[Account] \u{1F511} UserOp Hash:", opHash);
5610
+ if (entryPointVersion === "v0.6") {
5611
+ const userOpV06 = convertUserOpV07ToV06(userOp);
5612
+ return { userOp: userOpV06, userOpHash: opHash };
5613
+ }
5614
+ return { userOp, userOpHash: opHash };
5615
+ }
5297
5616
  async function getEntryPointDeposit(address, entryPointVersion = "v0.7") {
5298
5617
  const entryPointAddress = entryPointVersion === "v0.6" ? ENTRYPOINT_V06 : ENTRYPOINT_V07;
5299
5618
  const depositAbi = [{ type: "function", name: "balanceOf", stateMutability: "view", inputs: [{ name: "account", type: "address" }], outputs: [{ name: "", type: "uint256" }] }];
@@ -6513,152 +6832,453 @@ var SecurityModal = ({ open, onOpenChange, onBack }) => {
6513
6832
  ] });
6514
6833
  };
6515
6834
 
6516
- // src/internal/components/TransactionsModal.tsx
6517
- var import_react13 = __toESM(require("react"), 1);
6835
+ // src/internal/components/KeyshareBackup.tsx
6836
+ var React19 = __toESM(require("react"), 1);
6518
6837
  var import_lucide_react9 = require("lucide-react");
6519
- init_base();
6838
+ init_iframe_manager();
6520
6839
  var import_jsx_runtime23 = require("react/jsx-runtime");
6521
- var TransactionsModal = ({ open, onOpenChange, onBack }) => {
6522
- const { address } = useLumiaSession();
6523
- const [transactions, setTransactions] = import_react13.default.useState([]);
6524
- const [loading, setLoading] = import_react13.default.useState(false);
6525
- const [error, setError] = import_react13.default.useState(null);
6526
- const { config } = useLumiaPassportConfig();
6527
- const { isDark, classes: theme } = useTheme(config.ui.theme);
6528
- const loadTransactions = import_react13.default.useCallback(async () => {
6529
- if (!address) return;
6530
- setLoading(true);
6531
- setError(null);
6840
+ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
6841
+ const [backupStatus, setBackupStatus] = React19.useState({
6842
+ server: {},
6843
+ cloud: {},
6844
+ local: {}
6845
+ });
6846
+ const [loading, setLoading] = React19.useState({
6847
+ server: false,
6848
+ cloud: false,
6849
+ local: false
6850
+ });
6851
+ const [error, setError] = React19.useState(null);
6852
+ const [success, setSuccess] = React19.useState(null);
6853
+ const [showPassword, setShowPassword] = React19.useState(false);
6854
+ const [useCustomPassword, setUseCustomPassword] = React19.useState(false);
6855
+ const [customPassword, setCustomPassword] = React19.useState("");
6856
+ const [cloudProviders, setCloudProviders] = React19.useState([]);
6857
+ const [selectedCloudProvider, setSelectedCloudProvider] = React19.useState(null);
6858
+ const [hasKeyshareData, setHasKeyshareData] = React19.useState(true);
6859
+ const iframeManager = React19.useMemo(() => {
6532
6860
  try {
6533
- const explorerUrl = getExplorerUrl();
6534
- const baseUrl = explorerUrl.replace(/\/$/, "");
6535
- const apiUrl = `${baseUrl}/api/v2/addresses/${address}/transactions?items_count=20`;
6536
- const response = await fetch(apiUrl);
6537
- if (!response.ok) {
6538
- throw new Error(`Failed to fetch transactions: ${response.status}`);
6861
+ return getIframeManager();
6862
+ } catch (e) {
6863
+ console.error("[KeyshareBackup] Failed to get iframe manager:", e);
6864
+ return null;
6865
+ }
6866
+ }, []);
6867
+ React19.useEffect(() => {
6868
+ const loadCloudProviders = async () => {
6869
+ try {
6870
+ const { getAvailableCloudProviders: getAvailableCloudProviders3 } = await Promise.resolve().then(() => (init_cloudStorage(), cloudStorage_exports));
6871
+ const availableProviders = getAvailableCloudProviders3();
6872
+ const providers = availableProviders.map((p) => ({
6873
+ id: p.id,
6874
+ name: p.name,
6875
+ available: p.isAvailable()
6876
+ }));
6877
+ setCloudProviders(providers);
6878
+ if (providers.length > 0 && !selectedCloudProvider) {
6879
+ setSelectedCloudProvider(providers[0].id);
6880
+ }
6881
+ } catch (error2) {
6882
+ console.error("[KeyshareBackup] Failed to load cloud providers:", error2);
6539
6883
  }
6540
- const data = await response.json();
6541
- setTransactions(data.items || []);
6884
+ };
6885
+ loadCloudProviders();
6886
+ }, [selectedCloudProvider]);
6887
+ const refreshStatus = React19.useCallback(async () => {
6888
+ if (!iframeManager) return;
6889
+ try {
6890
+ const status = await iframeManager.getBackupStatus(userId);
6891
+ setBackupStatus(status);
6542
6892
  } catch (error2) {
6543
- console.error("Failed to load transactions:", error2);
6544
- setError(error2 instanceof Error ? error2.message : "Failed to load transactions");
6545
- } finally {
6546
- setLoading(false);
6893
+ console.error("[KeyshareBackup] Failed to get backup status:", error2);
6547
6894
  }
6548
- }, [address]);
6549
- import_react13.default.useEffect(() => {
6550
- if (open && address && !loading && transactions.length === 0) {
6551
- loadTransactions();
6895
+ }, [iframeManager, userId]);
6896
+ React19.useEffect(() => {
6897
+ refreshStatus();
6898
+ }, [refreshStatus]);
6899
+ const handleBackup = async (method) => {
6900
+ if (!iframeManager) {
6901
+ setError("Iframe manager not initialized");
6902
+ return;
6552
6903
  }
6553
- }, [open]);
6554
- const formatAddress = (addr) => {
6555
- return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
6556
- };
6557
- const formatTime = (timestamp) => {
6558
- return new Date(timestamp).toLocaleString();
6559
- };
6560
- const formatValue = (value) => {
6904
+ setLoading((prev) => ({ ...prev, [method]: true }));
6905
+ setError(null);
6906
+ setSuccess(null);
6561
6907
  try {
6562
- const wei = BigInt(value);
6563
- const eth = Number(wei) / 1e18;
6564
- return eth.toFixed(4);
6565
- } catch {
6566
- return "0.0000";
6567
- }
6568
- };
6569
- const getStatusIcon = (status) => {
6570
- return status === "ok" ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.CheckCircle2, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.XCircle, { className: "w-4 h-4 text-red-500" });
6571
- };
6572
- const getTransactionIcon = (from, to) => {
6573
- const isIncoming = to.toLowerCase() === address?.toLowerCase();
6574
- return isIncoming ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.ArrowDownRight, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.ArrowUpRight, { className: "w-4 h-4 text-blue-500" });
6575
- };
6576
- const openInExplorer = (txHash) => {
6908
+ const password = useCustomPassword ? customPassword : void 0;
6909
+ if (method === "server") {
6910
+ const jwt = await Promise.resolve().then(() => (init_auth(), auth_exports)).then((m) => m.jwtTokenManager.getTokens());
6911
+ const accessToken = jwt?.accessToken;
6912
+ const result = await iframeManager.createBackup(userId, {
6913
+ method,
6914
+ password
6915
+ }, accessToken);
6916
+ if (result.success) {
6917
+ setSuccess("Successfully created server backup");
6918
+ await refreshStatus();
6919
+ onBackupSuccess?.();
6920
+ } else {
6921
+ throw new Error(result.error || "Server backup failed");
6922
+ }
6923
+ } else if (method === "cloud") {
6924
+ const encryptedData = await iframeManager.encryptBackupData(userId, password);
6925
+ const { getAvailableCloudProviders: getAvailableCloudProviders3 } = await Promise.resolve().then(() => (init_cloudStorage(), cloudStorage_exports));
6926
+ const providers = getAvailableCloudProviders3();
6927
+ const provider = selectedCloudProvider ? providers.find((p) => p.id === selectedCloudProvider) : providers[0];
6928
+ if (!provider) {
6929
+ throw new Error("No cloud provider available");
6930
+ }
6931
+ if (!provider.isAuthenticated()) {
6932
+ const authenticated = await provider.authenticate();
6933
+ if (!authenticated) {
6934
+ throw new Error(`Failed to authenticate with ${provider.name}`);
6935
+ }
6936
+ }
6937
+ const timestamp = Date.now();
6938
+ const fileName = `lumia-keyshare-backup-${userId}-${timestamp}.json`;
6939
+ const fileContent = JSON.stringify(encryptedData, null, 2);
6940
+ await provider.upload(fileName, fileContent, true);
6941
+ setSuccess(`Successfully created cloud backup on ${provider.name}`);
6942
+ await refreshStatus();
6943
+ onBackupSuccess?.();
6944
+ } else if (method === "local") {
6945
+ const encryptedData = await iframeManager.encryptBackupData(userId, password);
6946
+ const blob = new Blob([JSON.stringify(encryptedData, null, 2)], {
6947
+ type: "application/json"
6948
+ });
6949
+ const url = URL.createObjectURL(blob);
6950
+ const a = document.createElement("a");
6951
+ a.href = url;
6952
+ a.download = `lumia-passport-backup-${userId}-${Date.now()}.json`;
6953
+ document.body.appendChild(a);
6954
+ a.click();
6955
+ document.body.removeChild(a);
6956
+ URL.revokeObjectURL(url);
6957
+ setSuccess("Backup file downloaded successfully");
6958
+ await refreshStatus();
6959
+ onBackupSuccess?.();
6960
+ }
6961
+ if (typeof window !== "undefined") {
6962
+ window.dispatchEvent(
6963
+ new CustomEvent("lumia-passport-backup-status-changed", {
6964
+ detail: { method, success: true }
6965
+ })
6966
+ );
6967
+ }
6968
+ } catch (err) {
6969
+ const errorMsg = err instanceof Error ? err.message : "Backup creation failed";
6970
+ setError(errorMsg);
6971
+ await refreshStatus();
6972
+ } finally {
6973
+ setLoading((prev) => ({ ...prev, [method]: false }));
6974
+ }
6975
+ };
6976
+ const formatLastBackup = (timestamp) => {
6977
+ if (!timestamp) return "Never";
6978
+ const date = new Date(timestamp);
6979
+ return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
6980
+ };
6981
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Card, { className: "border-green-200 bg-green-50", children: [
6982
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(CardHeader, { className: "pb-4", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between", children: [
6983
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-3", children: [
6984
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Shield, { className: "h-6 w-6 text-green-600" }),
6985
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
6986
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(CardTitle, { className: "text-lg", children: "Create Backup" }),
6987
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(CardDescription, { className: "text-sm", children: "Secure your keyshare with encrypted backups" })
6988
+ ] })
6989
+ ] }),
6990
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("button", { onClick: onClose, className: "p-1 rounded bg-red-100 text-red-600 hover:bg-red-200 transition-colors", title: "Close", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.X, { className: "h-4 w-4" }) })
6991
+ ] }) }),
6992
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(CardContent, { className: "space-y-6", children: [
6993
+ error && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2 p-3 rounded bg-red-50 border border-red-200 text-red-700 text-sm", children: [
6994
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
6995
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: error })
6996
+ ] }),
6997
+ success && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2 p-3 rounded bg-green-50 border border-green-200 text-green-700 text-sm", children: [
6998
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.CheckCircle2, { className: "h-4 w-4 flex-shrink-0" }),
6999
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: success })
7000
+ ] }),
7001
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-3", children: [
7002
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "text-sm font-medium text-gray-700", children: "Encryption Method:" }),
7003
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
7004
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7005
+ "input",
7006
+ {
7007
+ type: "checkbox",
7008
+ id: "use-backup-password",
7009
+ checked: useCustomPassword,
7010
+ onChange: (e) => setUseCustomPassword(e.target.checked),
7011
+ className: "rounded"
7012
+ }
7013
+ ),
7014
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "use-backup-password", className: "text-sm font-medium", children: "Use custom password instead of passkey" })
7015
+ ] }),
7016
+ !useCustomPassword && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "p-3 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
7017
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Key, { className: "h-4 w-4" }),
7018
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: "Your passkey will be used to encrypt the backup securely" })
7019
+ ] }) }),
7020
+ useCustomPassword && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "relative", children: [
7021
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7022
+ Input,
7023
+ {
7024
+ type: showPassword ? "text" : "password",
7025
+ placeholder: "Enter backup encryption password",
7026
+ value: customPassword,
7027
+ onChange: (e) => setCustomPassword(e.target.value),
7028
+ className: "pr-10"
7029
+ }
7030
+ ),
7031
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7032
+ "button",
7033
+ {
7034
+ type: "button",
7035
+ onClick: () => setShowPassword(!showPassword),
7036
+ className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-500 hover:text-gray-700",
7037
+ children: showPassword ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Eye, { className: "h-4 w-4" })
7038
+ }
7039
+ )
7040
+ ] })
7041
+ ] }),
7042
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-4", children: [
7043
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "text-sm font-medium text-gray-700", children: "Choose Backup Method:" }),
7044
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "p-4 rounded-lg border border-blue-200 bg-blue-50/50", children: [
7045
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex items-center justify-between mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-3", children: [
7046
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Server, { className: "h-5 w-5 text-blue-600" }),
7047
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
7048
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "font-medium text-sm", children: "Server Backup" }),
7049
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "text-xs text-gray-600", children: "Store encrypted backup on secure server" })
7050
+ ] })
7051
+ ] }) }),
7052
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7053
+ Button,
7054
+ {
7055
+ onClick: () => handleBackup("server"),
7056
+ disabled: loading.server || useCustomPassword && !customPassword || !hasKeyshareData,
7057
+ className: "px-4 py-2",
7058
+ children: loading.server ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
7059
+ }
7060
+ ),
7061
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "text-xs text-gray-600 mt-2", children: [
7062
+ "Encrypted backup stored on secure server \u2022 Last: ",
7063
+ formatLastBackup(backupStatus.server.lastBackup)
7064
+ ] })
7065
+ ] }),
7066
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "p-4 rounded-lg border border-sky-200 bg-sky-50/50", children: [
7067
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-3 mb-3", children: [
7068
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Cloud, { className: "h-5 w-5 text-sky-600" }),
7069
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
7070
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "font-medium text-sm", children: "Cloud Backup" }),
7071
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "text-xs text-gray-600", children: "Store encrypted backup in cloud storage" })
7072
+ ] })
7073
+ ] }),
7074
+ cloudProviders.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7075
+ "select",
7076
+ {
7077
+ value: selectedCloudProvider || "",
7078
+ onChange: (e) => setSelectedCloudProvider(e.target.value),
7079
+ className: "text-sm border rounded px-2 py-1 w-full",
7080
+ children: cloudProviders.map((provider) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("option", { value: provider.id, disabled: !provider.available, children: [
7081
+ provider.name,
7082
+ " ",
7083
+ provider.available ? "" : "(Not Available)"
7084
+ ] }, provider.id))
7085
+ }
7086
+ ) }),
7087
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7088
+ Button,
7089
+ {
7090
+ onClick: () => handleBackup("cloud"),
7091
+ disabled: loading.cloud || useCustomPassword && !customPassword || !hasKeyshareData || cloudProviders.length === 0,
7092
+ className: "px-4 py-2",
7093
+ children: loading.cloud ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
7094
+ }
7095
+ ),
7096
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "text-xs text-gray-600 mt-2", children: cloudProviders.length > 0 ? `Direct backup to ${cloudProviders.find((p) => p.id === selectedCloudProvider)?.name || "cloud storage"} \u2022 Last: ${formatLastBackup(backupStatus.cloud.lastBackup)}` : `No cloud providers configured \u2022 Last: ${formatLastBackup(backupStatus.cloud.lastBackup)}` })
7097
+ ] }),
7098
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "p-4 rounded-lg border border-purple-200 bg-purple-50/50", children: [
7099
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-3 mb-3", children: [
7100
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Download, { className: "h-5 w-5 text-purple-600" }),
7101
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
7102
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "font-medium text-sm", children: "File Backup" }),
7103
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "text-xs text-gray-600", children: "Download encrypted backup file to your device" })
7104
+ ] })
7105
+ ] }),
7106
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7107
+ Button,
7108
+ {
7109
+ onClick: () => handleBackup("local"),
7110
+ disabled: loading.local || useCustomPassword && !customPassword || !hasKeyshareData,
7111
+ className: "w-full",
7112
+ children: loading.local ? "Creating..." : useCustomPassword ? "Create & Download" : "Create & Download with Passkey"
7113
+ }
7114
+ ),
7115
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "text-xs text-gray-600 mt-2", children: [
7116
+ "Download encrypted backup file to your device \u2022 Last: ",
7117
+ formatLastBackup(backupStatus.local.lastBackup)
7118
+ ] })
7119
+ ] })
7120
+ ] }),
7121
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-start gap-2 p-3 bg-amber-50 border border-amber-200 rounded text-amber-800 text-xs", children: [
7122
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Lock, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
7123
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
7124
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "font-medium", children: "Security Notice" }),
7125
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "mt-1", children: [
7126
+ useCustomPassword ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_jsx_runtime23.Fragment, { children: "All backups are encrypted with AES-256 using your custom password. Store your password securely - without it, backups cannot be restored." }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_jsx_runtime23.Fragment, { children: "All backups are encrypted with AES-256 using your passkey. Your passkey authenticator (device/biometrics) is required to restore backups." }),
7127
+ " ",
7128
+ "Without backup access, you cannot recover your smart account if you lose this device."
7129
+ ] })
7130
+ ] })
7131
+ ] })
7132
+ ] })
7133
+ ] });
7134
+ }
7135
+
7136
+ // src/internal/components/TransactionsModal.tsx
7137
+ var import_react13 = __toESM(require("react"), 1);
7138
+ var import_lucide_react10 = require("lucide-react");
7139
+ init_base();
7140
+ var import_jsx_runtime24 = require("react/jsx-runtime");
7141
+ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
7142
+ const { address } = useLumiaSession();
7143
+ const [transactions, setTransactions] = import_react13.default.useState([]);
7144
+ const [loading, setLoading] = import_react13.default.useState(false);
7145
+ const [error, setError] = import_react13.default.useState(null);
7146
+ const { config } = useLumiaPassportConfig();
7147
+ const { isDark, classes: theme } = useTheme(config.ui.theme);
7148
+ const loadTransactions = import_react13.default.useCallback(async () => {
7149
+ if (!address) return;
7150
+ setLoading(true);
7151
+ setError(null);
7152
+ try {
7153
+ const explorerUrl = getExplorerUrl();
7154
+ const baseUrl = explorerUrl.replace(/\/$/, "");
7155
+ const apiUrl = `${baseUrl}/api/v2/addresses/${address}/transactions?items_count=20`;
7156
+ const response = await fetch(apiUrl);
7157
+ if (!response.ok) {
7158
+ throw new Error(`Failed to fetch transactions: ${response.status}`);
7159
+ }
7160
+ const data = await response.json();
7161
+ setTransactions(data.items || []);
7162
+ } catch (error2) {
7163
+ console.error("Failed to load transactions:", error2);
7164
+ setError(error2 instanceof Error ? error2.message : "Failed to load transactions");
7165
+ } finally {
7166
+ setLoading(false);
7167
+ }
7168
+ }, [address]);
7169
+ import_react13.default.useEffect(() => {
7170
+ if (open && address && !loading && transactions.length === 0) {
7171
+ loadTransactions();
7172
+ }
7173
+ }, [open]);
7174
+ const formatAddress = (addr) => {
7175
+ return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
7176
+ };
7177
+ const formatTime = (timestamp) => {
7178
+ return new Date(timestamp).toLocaleString();
7179
+ };
7180
+ const formatValue = (value) => {
7181
+ try {
7182
+ const wei = BigInt(value);
7183
+ const eth = Number(wei) / 1e18;
7184
+ return eth.toFixed(4);
7185
+ } catch {
7186
+ return "0.0000";
7187
+ }
7188
+ };
7189
+ const getStatusIcon = (status) => {
7190
+ return status === "ok" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.CheckCircle2, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.XCircle, { className: "w-4 h-4 text-red-500" });
7191
+ };
7192
+ const getTransactionIcon = (from, to) => {
7193
+ const isIncoming = to.toLowerCase() === address?.toLowerCase();
7194
+ return isIncoming ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.ArrowDownRight, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.ArrowUpRight, { className: "w-4 h-4 text-blue-500" });
7195
+ };
7196
+ const openInExplorer = (txHash) => {
6577
7197
  const explorerUrl = getExplorerUrl();
6578
7198
  window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
6579
7199
  };
6580
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
6581
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DialogTitle, { children: "Transaction History" }) }),
6582
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DialogDescription, { className: "sr-only", children: "View your transaction history" }),
6583
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
6584
- onBack && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7200
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
7201
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DialogTitle, { children: "Transaction History" }) }),
7202
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DialogDescription, { className: "sr-only", children: "View your transaction history" }),
7203
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2", children: [
7204
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
6585
7205
  "button",
6586
7206
  {
6587
7207
  onClick: onBack,
6588
7208
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
6589
7209
  title: "Back",
6590
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.ArrowLeft, { className: "h-4 w-4" })
7210
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.ArrowLeft, { className: "h-4 w-4" })
6591
7211
  }
6592
7212
  ),
6593
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
6594
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Activity, { className: "h-5 w-5" }),
6595
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: "Transaction History" }),
6596
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7213
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7214
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.Activity, { className: "h-5 w-5" }),
7215
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: "Transaction History" }),
7216
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
6597
7217
  "button",
6598
7218
  {
6599
7219
  onClick: loadTransactions,
6600
7220
  disabled: loading,
6601
7221
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1`,
6602
7222
  title: "Refresh transactions",
6603
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.RefreshCw, { className: `h-4 w-4 ${loading ? "animate-spin" : ""}` })
7223
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.RefreshCw, { className: `h-4 w-4 ${loading ? "animate-spin" : ""}` })
6604
7224
  }
6605
7225
  )
6606
7226
  ] })
6607
7227
  ] }) }),
6608
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: loading ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: `${theme.mutedText}`, children: "Loading transactions..." }) }) : error ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: `flex flex-col items-center justify-center py-8 ${isDark ? "text-red-400" : "text-red-500"}`, children: [
6609
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.XCircle, { className: "w-12 h-12 mb-2" }),
6610
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-center text-sm", children: error })
6611
- ] }) : transactions.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
6612
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.Activity, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
6613
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("p", { className: "text-center", children: [
7228
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: loading ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `${theme.mutedText}`, children: "Loading transactions..." }) }) : error ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `flex flex-col items-center justify-center py-8 ${isDark ? "text-red-400" : "text-red-500"}`, children: [
7229
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.XCircle, { className: "w-12 h-12 mb-2" }),
7230
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-center text-sm", children: error })
7231
+ ] }) : transactions.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
7232
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.Activity, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
7233
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("p", { className: "text-center", children: [
6614
7234
  "No transactions found",
6615
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("br", {}),
6616
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-xs mt-2", children: "Smart account transactions will appear here" })
7235
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("br", {}),
7236
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-xs mt-2", children: "Smart account transactions will appear here" })
6617
7237
  ] })
6618
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "space-y-3", children: transactions.map((tx) => {
7238
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "space-y-3", children: transactions.map((tx) => {
6619
7239
  const isIncoming = tx.to.hash.toLowerCase() === address?.toLowerCase();
6620
7240
  const displayAddress = isIncoming ? tx.from.hash : tx.to.hash;
6621
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
7241
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
6622
7242
  "div",
6623
7243
  {
6624
7244
  className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors cursor-pointer`,
6625
7245
  onClick: () => openInExplorer(tx.hash),
6626
7246
  children: [
6627
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center justify-between mb-2", children: [
6628
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-2", children: [
7247
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between mb-2", children: [
7248
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2", children: [
6629
7249
  getTransactionIcon(tx.from.hash, tx.to.hash),
6630
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `font-medium ${theme.titleText}`, children: isIncoming ? "Received" : "Sent" }),
7250
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `font-medium ${theme.titleText}`, children: isIncoming ? "Received" : "Sent" }),
6631
7251
  getStatusIcon(tx.status)
6632
7252
  ] }),
6633
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: `text-xs ${theme.mutedText}`, children: formatTime(tx.timestamp) })
7253
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `text-xs ${theme.mutedText}`, children: formatTime(tx.timestamp) })
6634
7254
  ] }),
6635
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1 text-sm", children: [
6636
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between", children: [
6637
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `${theme.bodyText}`, children: isIncoming ? "From:" : "To:" }),
6638
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: `font-mono ${theme.titleText}`, children: [
7255
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1 text-sm", children: [
7256
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex justify-between", children: [
7257
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.bodyText}`, children: isIncoming ? "From:" : "To:" }),
7258
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: `font-mono ${theme.titleText}`, children: [
6639
7259
  formatAddress(displayAddress),
6640
- (isIncoming ? tx.from.is_contract : tx.to.is_contract) && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} ml-1`, children: "(Contract)" })
7260
+ (isIncoming ? tx.from.is_contract : tx.to.is_contract) && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} ml-1`, children: "(Contract)" })
6641
7261
  ] })
6642
7262
  ] }),
6643
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between", children: [
6644
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `${theme.bodyText}`, children: "Value:" }),
6645
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: `font-semibold ${theme.titleText}`, children: [
7263
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex justify-between", children: [
7264
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.bodyText}`, children: "Value:" }),
7265
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: `font-semibold ${theme.titleText}`, children: [
6646
7266
  formatValue(tx.value),
6647
7267
  " LUMIA"
6648
7268
  ] })
6649
7269
  ] }),
6650
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between", children: [
6651
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `${theme.bodyText}`, children: "Block:" }),
6652
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: `font-mono ${theme.titleText}`, children: [
7270
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex justify-between", children: [
7271
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.bodyText}`, children: "Block:" }),
7272
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: `font-mono ${theme.titleText}`, children: [
6653
7273
  "#",
6654
7274
  tx.block_number
6655
7275
  ] })
6656
7276
  ] }),
6657
- tx.method && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between", children: [
6658
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `${theme.bodyText}`, children: "Method:" }),
6659
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: `${isDark ? "text-blue-400" : "text-blue-600"} text-xs`, children: tx.method })
7277
+ tx.method && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex justify-between", children: [
7278
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.bodyText}`, children: "Method:" }),
7279
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${isDark ? "text-blue-400" : "text-blue-600"} text-xs`, children: tx.method })
6660
7280
  ] }),
6661
- tx.transaction_types && tx.transaction_types.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7281
+ tx.transaction_types && tx.transaction_types.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
6662
7282
  "span",
6663
7283
  {
6664
7284
  className: `text-xs ${isDark ? "bg-blue-900/30 text-blue-300" : "bg-blue-100 text-blue-800"} px-2 py-0.5 rounded-full`,
@@ -6672,7 +7292,7 @@ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
6672
7292
  tx.hash
6673
7293
  );
6674
7294
  }) }) }),
6675
- transactions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
7295
+ transactions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
6676
7296
  "Total: ",
6677
7297
  transactions.length,
6678
7298
  " transaction",
@@ -6846,9 +7466,9 @@ function useTokenBalance(tokenAddress, userAddress) {
6846
7466
  }
6847
7467
 
6848
7468
  // src/internal/components/ViewAssetsModal.tsx
6849
- var import_lucide_react10 = require("lucide-react");
7469
+ var import_lucide_react11 = require("lucide-react");
6850
7470
  init_base();
6851
- var import_jsx_runtime24 = require("react/jsx-runtime");
7471
+ var import_jsx_runtime25 = require("react/jsx-runtime");
6852
7472
  var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
6853
7473
  const { address } = useLumiaSession();
6854
7474
  const { assets, refreshBalances, isLoading } = useAssets(address);
@@ -6867,107 +7487,107 @@ var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
6867
7487
  const openInExplorer = (address2) => {
6868
7488
  window.open(`${LUMIA_EXPLORER_URL}/address/${address2}`, "_blank");
6869
7489
  };
6870
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
6871
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DialogTitle, { children: "View Assets" }) }),
6872
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DialogDescription, { className: "sr-only", children: "View your token balances and assets" }),
6873
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2", children: [
6874
- onBack && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
7490
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
7491
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DialogTitle, { children: "View Assets" }) }),
7492
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DialogDescription, { className: "sr-only", children: "View your token balances and assets" }),
7493
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2", children: [
7494
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
6875
7495
  "button",
6876
7496
  {
6877
7497
  onClick: onBack,
6878
7498
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
6879
7499
  title: "Back",
6880
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.ArrowLeft, { className: "h-4 w-4" })
7500
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react11.ArrowLeft, { className: "h-4 w-4" })
6881
7501
  }
6882
7502
  ),
6883
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
6884
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.Gem, { className: "h-5 w-5" }),
6885
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: "Your Assets" }),
6886
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
7503
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7504
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react11.Gem, { className: "h-5 w-5" }),
7505
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: "Your Assets" }),
7506
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
6887
7507
  "button",
6888
7508
  {
6889
7509
  onClick: refreshBalances,
6890
7510
  disabled: isLoading,
6891
7511
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1`,
6892
7512
  title: "Refresh balances",
6893
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.RefreshCw, { className: `h-4 w-4 ${isLoading ? "animate-spin" : ""}` })
7513
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react11.RefreshCw, { className: `h-4 w-4 ${isLoading ? "animate-spin" : ""}` })
6894
7514
  }
6895
7515
  )
6896
7516
  ] })
6897
7517
  ] }) }),
6898
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `${theme.mutedText}`, children: "Loading assets..." }) }) : assets.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
6899
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.Gem, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
6900
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { children: "No assets found" })
6901
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "space-y-3", children: assets.map((asset, index) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors`, children: [
6902
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between mb-2", children: [
6903
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-3", children: [
6904
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "w-10 h-10 bg-gradient-to-br from-purple-500 to-blue-600 rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-white font-bold text-sm", children: asset.symbol.charAt(0) }) }),
6905
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { children: [
6906
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `font-medium ${theme.titleText}`, children: asset.name }),
6907
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
7518
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: `${theme.mutedText}`, children: "Loading assets..." }) }) : assets.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
7519
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react11.Gem, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
7520
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { children: "No assets found" })
7521
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "space-y-3", children: assets.map((asset, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors`, children: [
7522
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center justify-between mb-2", children: [
7523
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-3", children: [
7524
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "w-10 h-10 bg-gradient-to-br from-purple-500 to-blue-600 rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-white font-bold text-sm", children: asset.symbol.charAt(0) }) }),
7525
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { children: [
7526
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: `font-medium ${theme.titleText}`, children: asset.name }),
7527
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
6908
7528
  ] })
6909
7529
  ] }),
6910
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "text-right", children: [
6911
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `font-mono ${theme.titleText}`, children: asset.formattedBalance }),
6912
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
7530
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "text-right", children: [
7531
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: `font-mono ${theme.titleText}`, children: asset.formattedBalance }),
7532
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
6913
7533
  ] })
6914
7534
  ] }),
6915
- asset.address && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `space-y-2 mt-3 pt-3 border-t ${theme.divider}`, children: [
6916
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
6917
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.bodyText}`, children: "Contract Address:" }),
6918
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2", children: [
6919
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${asset.address.slice(0, 6)}...${asset.address.slice(-4)}` }),
6920
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
7535
+ asset.address && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: `space-y-2 mt-3 pt-3 border-t ${theme.divider}`, children: [
7536
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
7537
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: `${theme.bodyText}`, children: "Contract Address:" }),
7538
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2", children: [
7539
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${asset.address.slice(0, 6)}...${asset.address.slice(-4)}` }),
7540
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
6921
7541
  "button",
6922
7542
  {
6923
7543
  onClick: () => handleCopy(asset.address, "address"),
6924
7544
  className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
6925
7545
  title: "Copy address",
6926
- children: copied === "address" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.Copy, { className: "w-3 h-3" })
7546
+ children: copied === "address" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react11.Copy, { className: "w-3 h-3" })
6927
7547
  }
6928
7548
  ),
6929
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
7549
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
6930
7550
  "button",
6931
7551
  {
6932
7552
  onClick: () => openInExplorer(asset.address),
6933
7553
  className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
6934
7554
  title: "View in explorer",
6935
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.ExternalLink, { className: "w-3 h-3" })
7555
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react11.ExternalLink, { className: "w-3 h-3" })
6936
7556
  }
6937
7557
  )
6938
7558
  ] })
6939
7559
  ] }),
6940
- asset.decimals && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
6941
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.bodyText}`, children: "Decimals:" }),
6942
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.titleText}`, children: asset.decimals })
7560
+ asset.decimals && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
7561
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: `${theme.bodyText}`, children: "Decimals:" }),
7562
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: `${theme.titleText}`, children: asset.decimals })
6943
7563
  ] })
6944
7564
  ] }),
6945
- asset.type === "native" && address && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "mt-3 pt-3 border-t border-gray-200", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
6946
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${theme.bodyText}`, children: "Your Address:" }),
6947
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2", children: [
6948
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${address.slice(0, 6)}...${address.slice(-4)}` }),
6949
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
7565
+ asset.type === "native" && address && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "mt-3 pt-3 border-t border-gray-200", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
7566
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: `${theme.bodyText}`, children: "Your Address:" }),
7567
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2", children: [
7568
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${address.slice(0, 6)}...${address.slice(-4)}` }),
7569
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
6950
7570
  "button",
6951
7571
  {
6952
7572
  onClick: () => handleCopy(address, "wallet"),
6953
7573
  className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
6954
7574
  title: "Copy wallet address",
6955
- children: copied === "wallet" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.Copy, { className: "w-3 h-3" })
7575
+ children: copied === "wallet" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react11.Copy, { className: "w-3 h-3" })
6956
7576
  }
6957
7577
  ),
6958
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
7578
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
6959
7579
  "button",
6960
7580
  {
6961
7581
  onClick: () => openInExplorer(address),
6962
7582
  className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
6963
7583
  title: "View in explorer",
6964
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react10.ExternalLink, { className: "w-3 h-3" })
7584
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react11.ExternalLink, { className: "w-3 h-3" })
6965
7585
  }
6966
7586
  )
6967
7587
  ] })
6968
7588
  ] }) })
6969
7589
  ] }, `${asset.type}-${asset.address || "native"}-${index}`)) }) }),
6970
- assets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
7590
+ assets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
6971
7591
  "Total: ",
6972
7592
  assets.length,
6973
7593
  " asset",
@@ -6978,7 +7598,7 @@ var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
6978
7598
 
6979
7599
  // src/internal/components/SendModal.tsx
6980
7600
  var import_react17 = require("react");
6981
- var import_lucide_react13 = require("lucide-react");
7601
+ var import_lucide_react14 = require("lucide-react");
6982
7602
 
6983
7603
  // src/hooks/useSendTransaction.ts
6984
7604
  var import_react16 = require("react");
@@ -7044,8 +7664,8 @@ var import_viem6 = require("viem");
7044
7664
  var import_wagmi7 = require("wagmi");
7045
7665
 
7046
7666
  // src/internal/components/UserOpStatus.tsx
7047
- var React23 = __toESM(require("react"), 1);
7048
- var import_lucide_react12 = require("lucide-react");
7667
+ var React24 = __toESM(require("react"), 1);
7668
+ var import_lucide_react13 = require("lucide-react");
7049
7669
 
7050
7670
  // src/internal/components/ui/badge.tsx
7051
7671
  var import_class_variance_authority2 = require("class-variance-authority");
@@ -7058,7 +7678,7 @@ function cn2(...inputs) {
7058
7678
  }
7059
7679
 
7060
7680
  // src/internal/components/ui/badge.tsx
7061
- var import_jsx_runtime25 = require("react/jsx-runtime");
7681
+ var import_jsx_runtime26 = require("react/jsx-runtime");
7062
7682
  var badgeVariants = (0, import_class_variance_authority2.cva)(
7063
7683
  "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
7064
7684
  {
@@ -7078,13 +7698,13 @@ var badgeVariants = (0, import_class_variance_authority2.cva)(
7078
7698
  }
7079
7699
  );
7080
7700
  function Badge({ className, variant, ...props }) {
7081
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: cn2(badgeVariants({ variant }), className), ...props });
7701
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: cn2(badgeVariants({ variant }), className), ...props });
7082
7702
  }
7083
7703
 
7084
7704
  // src/internal/components/Address.tsx
7085
- var React22 = __toESM(require("react"), 1);
7086
- var import_lucide_react11 = require("lucide-react");
7087
- var import_jsx_runtime26 = require("react/jsx-runtime");
7705
+ var React23 = __toESM(require("react"), 1);
7706
+ var import_lucide_react12 = require("lucide-react");
7707
+ var import_jsx_runtime27 = require("react/jsx-runtime");
7088
7708
  function toExplorerAddressUrl(address, chain) {
7089
7709
  const base2 = chain?.blockExplorers?.default?.url;
7090
7710
  if (!base2) return null;
@@ -7105,12 +7725,12 @@ var Address = ({
7105
7725
  }) => {
7106
7726
  const addr = address || "";
7107
7727
  const explorer = toExplorerAddressUrl(addr, chain || void 0);
7108
- const [copied, setCopied] = React22.useState(false);
7109
- if (!addr) return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
7110
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: cn2("flex items-center gap-2", className), style: { listStyle: "none" }, children: [
7111
- label && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "text-sm font-medium", children: label }),
7112
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("code", { className: "text-xs bg-background px-2 py-1 rounded select-all", children: truncate ? short(addr) : addr }),
7113
- showCopy && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
7728
+ const [copied, setCopied] = React23.useState(false);
7729
+ if (!addr) return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
7730
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: cn2("flex items-center gap-2", className), style: { listStyle: "none" }, children: [
7731
+ label && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-sm font-medium", children: label }),
7732
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("code", { className: "text-xs bg-background px-2 py-1 rounded select-all", children: truncate ? short(addr) : addr }),
7733
+ showCopy && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
7114
7734
  Button,
7115
7735
  {
7116
7736
  variant: "ghost",
@@ -7124,10 +7744,10 @@ var Address = ({
7124
7744
  } catch {
7125
7745
  }
7126
7746
  },
7127
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.Copy, { className: "h-4 w-4" })
7747
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Copy, { className: "h-4 w-4" })
7128
7748
  }
7129
7749
  ),
7130
- showExplorer && explorer && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
7750
+ showExplorer && explorer && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
7131
7751
  "a",
7132
7752
  {
7133
7753
  href: explorer,
@@ -7135,7 +7755,7 @@ var Address = ({
7135
7755
  rel: "noreferrer noopener",
7136
7756
  className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
7137
7757
  title: "Open in explorer",
7138
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.ExternalLink, { className: "h-4 w-4" })
7758
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.ExternalLink, { className: "h-4 w-4" })
7139
7759
  }
7140
7760
  )
7141
7761
  ] });
@@ -7143,7 +7763,7 @@ var Address = ({
7143
7763
 
7144
7764
  // src/internal/components/UserOpStatus.tsx
7145
7765
  init_base();
7146
- var import_jsx_runtime27 = require("react/jsx-runtime");
7766
+ var import_jsx_runtime28 = require("react/jsx-runtime");
7147
7767
  var UserOpStatus = ({
7148
7768
  userOpHash,
7149
7769
  chain,
@@ -7154,20 +7774,20 @@ var UserOpStatus = ({
7154
7774
  externalState
7155
7775
  }) => {
7156
7776
  const useExternalState = !!externalState;
7157
- const [internalReceipt, setInternalReceipt] = React23.useState(null);
7158
- const [internalMempool, setInternalMempool] = React23.useState(null);
7159
- const [internalError, setInternalError] = React23.useState(null);
7160
- const [attempt, setAttempt] = React23.useState(0);
7161
- const [internalRefreshing, setInternalRefreshing] = React23.useState(false);
7162
- const [timedOut, setTimedOut] = React23.useState(false);
7163
- const [rejected, setRejected] = React23.useState(false);
7164
- const intervalRef = React23.useRef(null);
7165
- const startTimeRef = React23.useRef(Date.now());
7777
+ const [internalReceipt, setInternalReceipt] = React24.useState(null);
7778
+ const [internalMempool, setInternalMempool] = React24.useState(null);
7779
+ const [internalError, setInternalError] = React24.useState(null);
7780
+ const [attempt, setAttempt] = React24.useState(0);
7781
+ const [internalRefreshing, setInternalRefreshing] = React24.useState(false);
7782
+ const [timedOut, setTimedOut] = React24.useState(false);
7783
+ const [rejected, setRejected] = React24.useState(false);
7784
+ const intervalRef = React24.useRef(null);
7785
+ const startTimeRef = React24.useRef(Date.now());
7166
7786
  const receipt = useExternalState ? externalState.receipt ?? null : internalReceipt;
7167
7787
  const mempool = useExternalState ? externalState.mempool ?? null : internalMempool;
7168
7788
  const error = useExternalState ? externalState.error ?? null : internalError;
7169
7789
  const refreshing = useExternalState ? externalState.isPolling ?? false : internalRefreshing;
7170
- const rpc = React23.useCallback(async (method, params) => {
7790
+ const rpc = React24.useCallback(async (method, params) => {
7171
7791
  const body = { jsonrpc: "2.0", id: 1, method, params };
7172
7792
  const res = await fetch(getBundlerUrl(), {
7173
7793
  method: "POST",
@@ -7178,14 +7798,14 @@ var UserOpStatus = ({
7178
7798
  if (json.error) throw new Error(json.error.message || JSON.stringify(json.error));
7179
7799
  return json.result;
7180
7800
  }, []);
7181
- const extractMempoolInfo = React23.useCallback((m) => {
7801
+ const extractMempoolInfo = React24.useCallback((m) => {
7182
7802
  if (!m) return null;
7183
7803
  const entryPoint = m.entryPoint || m?.userOperation?.entryPoint || null;
7184
7804
  const sender = m.sender || m?.userOperation?.sender || null;
7185
7805
  if (!entryPoint && !sender) return null;
7186
7806
  return { entryPoint, sender };
7187
7807
  }, []);
7188
- const tick = React23.useCallback(async () => {
7808
+ const tick = React24.useCallback(async () => {
7189
7809
  if (useExternalState) return;
7190
7810
  const elapsed = Date.now() - startTimeRef.current;
7191
7811
  if (elapsed > maxPollTimeMs) {
@@ -7229,7 +7849,7 @@ var UserOpStatus = ({
7229
7849
  setAttempt((x) => x + 1);
7230
7850
  }
7231
7851
  }, [rpc, userOpHash, maxPollTimeMs, extractMempoolInfo, useExternalState]);
7232
- React23.useEffect(() => {
7852
+ React24.useEffect(() => {
7233
7853
  if (useExternalState) return;
7234
7854
  console.log("[UserOpStatus] Initializing polling for UserOp hash:", userOpHash);
7235
7855
  startTimeRef.current = Date.now();
@@ -7241,7 +7861,7 @@ var UserOpStatus = ({
7241
7861
  setAttempt(0);
7242
7862
  setInternalRefreshing(false);
7243
7863
  }, [userOpHash, useExternalState]);
7244
- React23.useEffect(() => {
7864
+ React24.useEffect(() => {
7245
7865
  if (useExternalState) {
7246
7866
  console.log("[UserOpStatus] Using external state, skipping internal polling");
7247
7867
  return;
@@ -7276,54 +7896,54 @@ var UserOpStatus = ({
7276
7896
  const stateBadge = () => {
7277
7897
  if (receipt) {
7278
7898
  const ok = !!receipt.success;
7279
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: ok ? "success" : "destructive", className: "gap-1", children: [
7280
- ok ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.CheckCircle2, { className: "h-3 w-3" }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-3 w-3" }),
7899
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Badge, { variant: ok ? "success" : "destructive", className: "gap-1", children: [
7900
+ ok ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.CheckCircle2, { className: "h-3 w-3" }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.AlertCircle, { className: "h-3 w-3" }),
7281
7901
  ok ? "Included" : "Failed"
7282
7902
  ] });
7283
7903
  }
7284
7904
  if (rejected) {
7285
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: "destructive", className: "gap-1", children: [
7286
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-3 w-3" }),
7905
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Badge, { variant: "destructive", className: "gap-1", children: [
7906
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.AlertCircle, { className: "h-3 w-3" }),
7287
7907
  " Rejected by bundler"
7288
7908
  ] });
7289
7909
  }
7290
7910
  if (timedOut) {
7291
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: "warning", className: "gap-1", children: [
7292
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-3 w-3" }),
7911
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Badge, { variant: "warning", className: "gap-1", children: [
7912
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.AlertCircle, { className: "h-3 w-3" }),
7293
7913
  " Timeout - may be rejected"
7294
7914
  ] });
7295
7915
  }
7296
7916
  if (mempool) {
7297
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: "outline", className: "gap-1", children: [
7298
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Clock, { className: "h-3 w-3" }),
7917
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Badge, { variant: "outline", className: "gap-1", children: [
7918
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Clock, { className: "h-3 w-3" }),
7299
7919
  " Pending in bundler"
7300
7920
  ] });
7301
7921
  }
7302
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: "secondary", className: "gap-1", children: [
7303
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Clock, { className: "h-3 w-3" }),
7922
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Badge, { variant: "secondary", className: "gap-1", children: [
7923
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Clock, { className: "h-3 w-3" }),
7304
7924
  " Waiting"
7305
7925
  ] });
7306
7926
  };
7307
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
7927
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
7308
7928
  "div",
7309
7929
  {
7310
7930
  className: cn2("lumia-scope bg-card text-card-foreground p-0 rounded-xl border border-border w-full max-w-[680px]", className),
7311
7931
  style: { textAlign: "left", listStyle: "none" },
7312
7932
  children: [
7313
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [
7314
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center gap-2", children: [
7933
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [
7934
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-2", children: [
7315
7935
  stateBadge(),
7316
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-xs text-muted-foreground", children: "This is a UserOperation hash (EIP-4337), not a L2 tx hash." })
7936
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-xs text-muted-foreground", children: "This is a UserOperation hash (EIP-4337), not a L2 tx hash." })
7317
7937
  ] }),
7318
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Button, { variant: "ghost", size: "sm", onClick: () => tick(), disabled: refreshing, className: "h-8", children: [
7319
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.RefreshCw, { className: cn2("h-3.5 w-3.5 mr-1", refreshing && "animate-spin") }),
7320
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-xs", children: "Refresh" })
7938
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Button, { variant: "ghost", size: "sm", onClick: () => tick(), disabled: refreshing, className: "h-8", children: [
7939
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.RefreshCw, { className: cn2("h-3.5 w-3.5 mr-1", refreshing && "animate-spin") }),
7940
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-xs", children: "Refresh" })
7321
7941
  ] })
7322
7942
  ] }),
7323
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
7324
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "UO Hash" }),
7325
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("code", { className: "text-xs font-mono flex-1 select-all", children: userOpHash }),
7326
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
7943
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
7944
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "UO Hash" }),
7945
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("code", { className: "text-xs font-mono flex-1 select-all", children: userOpHash }),
7946
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
7327
7947
  Button,
7328
7948
  {
7329
7949
  variant: "ghost",
@@ -7335,14 +7955,14 @@ var UserOpStatus = ({
7335
7955
  } catch {
7336
7956
  }
7337
7957
  },
7338
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Copy, { className: "h-3.5 w-3.5" })
7958
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Copy, { className: "h-3.5 w-3.5" })
7339
7959
  }
7340
7960
  )
7341
7961
  ] }),
7342
- receipt && receipt.receipt?.transactionHash && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center gap-2 mb-3", children: [
7343
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "Tx Hash" }),
7344
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("code", { className: "text-xs font-mono flex-1 select-all", children: receipt.receipt.transactionHash }),
7345
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
7962
+ receipt && receipt.receipt?.transactionHash && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-2 mb-3", children: [
7963
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "Tx Hash" }),
7964
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("code", { className: "text-xs font-mono flex-1 select-all", children: receipt.receipt.transactionHash }),
7965
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
7346
7966
  Button,
7347
7967
  {
7348
7968
  variant: "ghost",
@@ -7354,10 +7974,10 @@ var UserOpStatus = ({
7354
7974
  } catch {
7355
7975
  }
7356
7976
  },
7357
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Copy, { className: "h-3.5 w-3.5" })
7977
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Copy, { className: "h-3.5 w-3.5" })
7358
7978
  }
7359
7979
  ),
7360
- chain?.blockExplorers?.default?.url && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
7980
+ chain?.blockExplorers?.default?.url && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
7361
7981
  "a",
7362
7982
  {
7363
7983
  href: `${chain.blockExplorers.default.url}/tx/${receipt.receipt.transactionHash}`,
@@ -7365,11 +7985,11 @@ var UserOpStatus = ({
7365
7985
  rel: "noreferrer noopener",
7366
7986
  className: "inline-flex items-center justify-center h-8 w-8 rounded-md hover:bg-accent text-foreground",
7367
7987
  title: "Open in explorer",
7368
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.ExternalLink, { className: "h-3.5 w-3.5" })
7988
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.ExternalLink, { className: "h-3.5 w-3.5" })
7369
7989
  }
7370
7990
  )
7371
7991
  ] }),
7372
- receipt && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "text-xs text-muted-foreground mb-3", children: [
7992
+ receipt && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "text-xs text-muted-foreground mb-3", children: [
7373
7993
  "Block ",
7374
7994
  parseInt(receipt.receipt?.blockNumber || "0x0", 16),
7375
7995
  " \u2022 Gas Used",
@@ -7378,32 +7998,32 @@ var UserOpStatus = ({
7378
7998
  " \u2022 Success ",
7379
7999
  String(!!receipt.success)
7380
8000
  ] }),
7381
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "text-xs text-muted-foreground", children: !receipt && !timedOut && !rejected && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "ml-2", children: [
8001
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-xs text-muted-foreground", children: !receipt && !timedOut && !rejected && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("span", { className: "ml-2", children: [
7382
8002
  "\u2022 Polling for ",
7383
8003
  Math.round((Date.now() - startTimeRef.current) / 1e3),
7384
8004
  "s"
7385
8005
  ] }) }),
7386
- mempool && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "text-sm text-muted-foreground mt-2", style: { listStyle: "none" }, children: [
7387
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { children: [
8006
+ mempool && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "text-sm text-muted-foreground mt-2", style: { listStyle: "none" }, children: [
8007
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { children: [
7388
8008
  "Seen by bundler at ",
7389
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Address, { address: mempool.entryPoint, chain, showExplorer: true, truncate: false })
8009
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Address, { address: mempool.entryPoint, chain, showExplorer: true, truncate: false })
7390
8010
  ] }),
7391
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { children: [
8011
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { children: [
7392
8012
  "sender ",
7393
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Address, { address: mempool.sender, chain, truncate: false })
8013
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Address, { address: mempool.sender, chain, truncate: false })
7394
8014
  ] })
7395
8015
  ] }),
7396
- error && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
7397
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-4 w-4" }),
8016
+ error && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
8017
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.AlertCircle, { className: "h-4 w-4" }),
7398
8018
  " ",
7399
8019
  error
7400
8020
  ] }),
7401
- rejected && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
7402
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-4 w-4" }),
8021
+ rejected && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
8022
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.AlertCircle, { className: "h-4 w-4" }),
7403
8023
  "UserOperation was dropped from bundler mempool. This usually means it was invalid or replaced."
7404
8024
  ] }),
7405
- timedOut && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
7406
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.AlertCircle, { className: "h-4 w-4" }),
8025
+ timedOut && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
8026
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.AlertCircle, { className: "h-4 w-4" }),
7407
8027
  "Stopped polling after ",
7408
8028
  Math.round(maxPollTimeMs / 1e3),
7409
8029
  "s. UserOperation may have been rejected by the bundler."
@@ -7415,7 +8035,7 @@ var UserOpStatus = ({
7415
8035
 
7416
8036
  // src/internal/components/SendModal.tsx
7417
8037
  init_base();
7418
- var import_jsx_runtime28 = require("react/jsx-runtime");
8038
+ var import_jsx_runtime29 = require("react/jsx-runtime");
7419
8039
  var SendModal = ({
7420
8040
  open,
7421
8041
  onOpenChange,
@@ -7498,7 +8118,7 @@ var SendModal = ({
7498
8118
  const maxAmount = Math.max(0, balance - 1e-3);
7499
8119
  setAmount(maxAmount.toFixed(6));
7500
8120
  };
7501
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
8121
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
7502
8122
  DialogContent,
7503
8123
  {
7504
8124
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -7510,28 +8130,28 @@ var SendModal = ({
7510
8130
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
7511
8131
  },
7512
8132
  children: [
7513
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DialogTitle, { children: "Send Transaction" }) }),
7514
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DialogDescription, { className: "sr-only", children: "Send LUMIA tokens to another address" }),
7515
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-2", children: [
7516
- onBack && txStep === "input" && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
8133
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogTitle, { children: "Send Transaction" }) }),
8134
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogDescription, { className: "sr-only", children: "Send LUMIA tokens to another address" }),
8135
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center gap-2", children: [
8136
+ onBack && txStep === "input" && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
7517
8137
  "button",
7518
8138
  {
7519
8139
  onClick: onBack,
7520
8140
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
7521
8141
  title: "Back",
7522
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.ArrowLeft, { className: "h-4 w-4" })
8142
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.ArrowLeft, { className: "h-4 w-4" })
7523
8143
  }
7524
8144
  ),
7525
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7526
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Send, { className: "h-5 w-5" }),
7527
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { children: "Send LUMIA" })
8145
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8146
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.Send, { className: "h-5 w-5" }),
8147
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: "Send LUMIA" })
7528
8148
  ] })
7529
8149
  ] }) }),
7530
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "p-5", children: [
7531
- txStep === "input" && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-4", children: [
7532
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { children: [
7533
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Recipient Address" }),
7534
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
8150
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "p-5", children: [
8151
+ txStep === "input" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "space-y-4", children: [
8152
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { children: [
8153
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Recipient Address" }),
8154
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
7535
8155
  "input",
7536
8156
  {
7537
8157
  type: "text",
@@ -7542,17 +8162,17 @@ var SendModal = ({
7542
8162
  }
7543
8163
  )
7544
8164
  ] }),
7545
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { children: [
7546
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex justify-between items-center mb-2", children: [
7547
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { className: `text-sm font-medium ${theme.bodyText}`, children: "Amount" }),
7548
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: `text-sm ${theme.mutedText}`, children: [
8165
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { children: [
8166
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex justify-between items-center mb-2", children: [
8167
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("label", { className: `text-sm font-medium ${theme.bodyText}`, children: "Amount" }),
8168
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: `text-sm ${theme.mutedText}`, children: [
7549
8169
  "Balance: ",
7550
8170
  balance.toFixed(4),
7551
8171
  " LUMIA"
7552
8172
  ] })
7553
8173
  ] }),
7554
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "relative", children: [
7555
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
8174
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "relative", children: [
8175
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
7556
8176
  "input",
7557
8177
  {
7558
8178
  type: "number",
@@ -7563,7 +8183,7 @@ var SendModal = ({
7563
8183
  className: `w-full px-3 py-2 pr-16 border ${isDark ? "bg-gray-800 border-gray-600 text-white placeholder:text-gray-400" : "bg-white border-gray-300 text-gray-900 placeholder:text-gray-400"} rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500`
7564
8184
  }
7565
8185
  ),
7566
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
8186
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
7567
8187
  "button",
7568
8188
  {
7569
8189
  onClick: handleMaxAmount,
@@ -7573,11 +8193,11 @@ var SendModal = ({
7573
8193
  )
7574
8194
  ] })
7575
8195
  ] }),
7576
- (validationError || error) && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: `flex items-center gap-2 p-3 ${isDark ? "bg-red-900/30 text-red-400" : "bg-red-50 text-red-700"} rounded-lg`, children: [
7577
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.AlertCircle, { className: "h-4 w-4" }),
7578
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-sm", children: validationError || error })
8196
+ (validationError || error) && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: `flex items-center gap-2 p-3 ${isDark ? "bg-red-900/30 text-red-400" : "bg-red-50 text-red-700"} rounded-lg`, children: [
8197
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.AlertCircle, { className: "h-4 w-4" }),
8198
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "text-sm", children: validationError || error })
7579
8199
  ] }),
7580
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
8200
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
7581
8201
  Button,
7582
8202
  {
7583
8203
  onClick: handleSend,
@@ -7588,29 +8208,29 @@ var SendModal = ({
7588
8208
  }
7589
8209
  )
7590
8210
  ] }),
7591
- txStep === "confirm" && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-4", children: [
7592
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
7593
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("h3", { className: `font-medium ${theme.titleText} mb-3`, children: "Transaction Details" }),
7594
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-2 text-sm", children: [
7595
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex justify-between", children: [
7596
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: `${theme.bodyText}`, children: "To:" }),
7597
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: `font-mono ${theme.titleText}`, children: `${recipient.slice(0, 6)}...${recipient.slice(-4)}` })
8211
+ txStep === "confirm" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "space-y-4", children: [
8212
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
8213
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("h3", { className: `font-medium ${theme.titleText} mb-3`, children: "Transaction Details" }),
8214
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "space-y-2 text-sm", children: [
8215
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex justify-between", children: [
8216
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: `${theme.bodyText}`, children: "To:" }),
8217
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: `font-mono ${theme.titleText}`, children: `${recipient.slice(0, 6)}...${recipient.slice(-4)}` })
7598
8218
  ] }),
7599
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex justify-between", children: [
7600
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: `${theme.bodyText}`, children: "Amount:" }),
7601
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("span", { className: `font-semibold ${theme.titleText}`, children: [
8219
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex justify-between", children: [
8220
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: `${theme.bodyText}`, children: "Amount:" }),
8221
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: `font-semibold ${theme.titleText}`, children: [
7602
8222
  amount,
7603
8223
  " LUMIA"
7604
8224
  ] })
7605
8225
  ] }),
7606
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex justify-between", children: [
7607
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: `${theme.bodyText}`, children: "Network:" }),
7608
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: `${theme.titleText}`, children: "Lumia Beam" })
8226
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex justify-between", children: [
8227
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: `${theme.bodyText}`, children: "Network:" }),
8228
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: `${theme.titleText}`, children: "Lumia Beam" })
7609
8229
  ] })
7610
8230
  ] })
7611
8231
  ] }),
7612
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex gap-2", children: [
7613
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
8232
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex gap-2", children: [
8233
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
7614
8234
  Button,
7615
8235
  {
7616
8236
  onClick: () => setTxStep("input"),
@@ -7620,7 +8240,7 @@ var SendModal = ({
7620
8240
  children: "Back"
7621
8241
  }
7622
8242
  ),
7623
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
8243
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
7624
8244
  Button,
7625
8245
  {
7626
8246
  onClick: handleConfirm,
@@ -7628,28 +8248,28 @@ var SendModal = ({
7628
8248
  className: "flex-1",
7629
8249
  size: "lg",
7630
8250
  children: [
7631
- isLoading && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Loader2, { className: "h-4 w-4 animate-spin" }),
8251
+ isLoading && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.Loader2, { className: "h-4 w-4 animate-spin" }),
7632
8252
  "Confirm"
7633
8253
  ]
7634
8254
  }
7635
8255
  )
7636
8256
  ] })
7637
8257
  ] }),
7638
- txStep === "pending" && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "py-8 text-center space-y-4", children: [
7639
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Loader2, { className: `h-12 w-12 animate-spin ${isDark ? "text-blue-400" : "text-blue-600"} mx-auto` }),
7640
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { children: [
7641
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Pending" }),
7642
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Please wait while we process your transaction" })
8258
+ txStep === "pending" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "py-8 text-center space-y-4", children: [
8259
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.Loader2, { className: `h-12 w-12 animate-spin ${isDark ? "text-blue-400" : "text-blue-600"} mx-auto` }),
8260
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { children: [
8261
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Pending" }),
8262
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Please wait while we process your transaction" })
7643
8263
  ] })
7644
8264
  ] }),
7645
- txStep === "success" && userOpHash && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-4", children: [
7646
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "text-center py-4", children: [
7647
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.CheckCircle2, { className: `h-12 w-12 ${isDark ? "text-green-400" : "text-green-500"} mx-auto mb-3` }),
7648
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Sent!" }),
7649
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Your transaction is being processed" })
8265
+ txStep === "success" && userOpHash && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "space-y-4", children: [
8266
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "text-center py-4", children: [
8267
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.CheckCircle2, { className: `h-12 w-12 ${isDark ? "text-green-400" : "text-green-500"} mx-auto mb-3` }),
8268
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Sent!" }),
8269
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Your transaction is being processed" })
7650
8270
  ] }),
7651
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(UserOpStatus, { userOpHash, chain: lumiaBeam }) }),
7652
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
8271
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(UserOpStatus, { userOpHash, chain: lumiaBeam }) }),
8272
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
7653
8273
  Button,
7654
8274
  {
7655
8275
  onClick: handleClose,
@@ -7667,9 +8287,9 @@ var SendModal = ({
7667
8287
 
7668
8288
  // src/internal/components/ReceiveModal.tsx
7669
8289
  var import_react18 = require("react");
7670
- var import_lucide_react14 = require("lucide-react");
8290
+ var import_lucide_react15 = require("lucide-react");
7671
8291
  var import_qrcode = __toESM(require("qrcode"), 1);
7672
- var import_jsx_runtime29 = require("react/jsx-runtime");
8292
+ var import_jsx_runtime30 = require("react/jsx-runtime");
7673
8293
  var ReceiveModal = ({
7674
8294
  open,
7675
8295
  onOpenChange,
@@ -7710,7 +8330,7 @@ var ReceiveModal = ({
7710
8330
  if (!addr) return "";
7711
8331
  return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
7712
8332
  };
7713
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
8333
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
7714
8334
  DialogContent,
7715
8335
  {
7716
8336
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -7722,51 +8342,51 @@ var ReceiveModal = ({
7722
8342
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
7723
8343
  },
7724
8344
  children: [
7725
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogTitle, { children: "Receive LUMIA" }) }),
7726
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogDescription, { className: "sr-only", children: "Your wallet address and QR code for receiving LUMIA" }),
7727
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center gap-2", children: [
7728
- onBack && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
8345
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DialogTitle, { children: "Receive LUMIA" }) }),
8346
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DialogDescription, { className: "sr-only", children: "Your wallet address and QR code for receiving LUMIA" }),
8347
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex items-center gap-2", children: [
8348
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
7729
8349
  "button",
7730
8350
  {
7731
8351
  onClick: onBack,
7732
8352
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
7733
8353
  title: "Back",
7734
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.ArrowLeft, { className: "h-4 w-4" })
8354
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react15.ArrowLeft, { className: "h-4 w-4" })
7735
8355
  }
7736
8356
  ),
7737
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7738
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.QrCode, { className: "h-5 w-5" }),
7739
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: "Receive LUMIA" })
8357
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8358
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react15.QrCode, { className: "h-5 w-5" }),
8359
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: "Receive LUMIA" })
7740
8360
  ] })
7741
8361
  ] }) }),
7742
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "p-5 space-y-4", children: [
7743
- qrCodeUrl && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `${isDark ? "bg-white" : "bg-white"} p-4 rounded-xl border ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) }) }),
7744
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `${isDark ? "bg-blue-900/30 border-blue-600" : "bg-blue-50 border-blue-200"} rounded-lg p-3`, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `flex items-center gap-2 ${isDark ? "text-blue-300" : "text-blue-700"} text-sm`, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex-1", children: [
7745
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "font-medium", children: "Network: Lumia Beam" }),
7746
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} mt-0.5`, children: "Ensure sender is on the same network" })
8362
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "p-5 space-y-4", children: [
8363
+ qrCodeUrl && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `${isDark ? "bg-white" : "bg-white"} p-4 rounded-xl border ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) }) }),
8364
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `${isDark ? "bg-blue-900/30 border-blue-600" : "bg-blue-50 border-blue-200"} rounded-lg p-3`, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `flex items-center gap-2 ${isDark ? "text-blue-300" : "text-blue-700"} text-sm`, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex-1", children: [
8365
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "font-medium", children: "Network: Lumia Beam" }),
8366
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} mt-0.5`, children: "Ensure sender is on the same network" })
7747
8367
  ] }) }) }),
7748
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
7749
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Your Wallet Address" }),
7750
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: `flex-1 font-mono text-sm ${isDark ? "text-white bg-gray-700 border-gray-600" : "text-gray-900 bg-white border-gray-300"} rounded-lg px-3 py-2 break-all`, children: address }) }),
7751
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
8368
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
8369
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Your Wallet Address" }),
8370
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `flex-1 font-mono text-sm ${isDark ? "text-white bg-gray-700 border-gray-600" : "text-gray-900 bg-white border-gray-300"} rounded-lg px-3 py-2 break-all`, children: address }) }),
8371
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
7752
8372
  Button,
7753
8373
  {
7754
8374
  onClick: handleCopy,
7755
8375
  className: "w-full mt-3",
7756
8376
  size: "lg",
7757
- children: copied ? /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
7758
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.CheckCircle2, { className: "h-4 w-4" }),
7759
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: "Copied!" })
7760
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
7761
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react14.Copy, { className: "h-4 w-4" }),
7762
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: "Copy Address" })
8377
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
8378
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react15.CheckCircle2, { className: "h-4 w-4" }),
8379
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: "Copied!" })
8380
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
8381
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react15.Copy, { className: "h-4 w-4" }),
8382
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: "Copy Address" })
7763
8383
  ] })
7764
8384
  }
7765
8385
  )
7766
8386
  ] }),
7767
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
7768
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { children: "Share this address to receive LUMIA tokens." }),
7769
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "mt-1", children: "Only send LUMIA tokens to this address on Lumia Beam network." })
8387
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
8388
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { children: "Share this address to receive LUMIA tokens." }),
8389
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "mt-1", children: "Only send LUMIA tokens to this address on Lumia Beam network." })
7770
8390
  ] })
7771
8391
  ] })
7772
8392
  ]
@@ -7775,12 +8395,12 @@ var ReceiveModal = ({
7775
8395
  };
7776
8396
 
7777
8397
  // src/internal/components/BuyModal.tsx
7778
- var import_lucide_react15 = require("lucide-react");
7779
- var import_jsx_runtime30 = require("react/jsx-runtime");
8398
+ var import_lucide_react16 = require("lucide-react");
8399
+ var import_jsx_runtime31 = require("react/jsx-runtime");
7780
8400
  var BuyModal = ({ open, onOpenChange, onBack }) => {
7781
8401
  const { config } = useLumiaPassportConfig();
7782
8402
  const { isDark, classes: theme } = useTheme(config.ui.theme);
7783
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
8403
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
7784
8404
  DialogContent,
7785
8405
  {
7786
8406
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -7792,26 +8412,26 @@ var BuyModal = ({ open, onOpenChange, onBack }) => {
7792
8412
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
7793
8413
  },
7794
8414
  children: [
7795
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DialogTitle, { children: "Buy Crypto" }) }),
7796
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DialogDescription, { className: "sr-only", children: "On-ramp placeholder" }),
7797
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex items-center gap-2", children: [
7798
- onBack && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
8415
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DialogTitle, { children: "Buy Crypto" }) }),
8416
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DialogDescription, { className: "sr-only", children: "On-ramp placeholder" }),
8417
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-center gap-2", children: [
8418
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
7799
8419
  "button",
7800
8420
  {
7801
8421
  onClick: onBack,
7802
8422
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
7803
8423
  title: "Back",
7804
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react15.ArrowLeft, { className: "h-4 w-4" })
8424
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react16.ArrowLeft, { className: "h-4 w-4" })
7805
8425
  }
7806
8426
  ),
7807
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7808
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react15.CreditCard, { className: "h-5 w-5" }),
7809
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: "Buy" })
8427
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8428
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react16.CreditCard, { className: "h-5 w-5" }),
8429
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: "Buy" })
7810
8430
  ] })
7811
8431
  ] }) }),
7812
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "p-5", children: [
7813
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: "On-ramp coming soon\u2026" }) }),
7814
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "pt-4", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
8432
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "p-5", children: [
8433
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: "On-ramp coming soon\u2026" }) }),
8434
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "pt-4", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
7815
8435
  ] })
7816
8436
  ]
7817
8437
  }
@@ -7819,14 +8439,14 @@ var BuyModal = ({ open, onOpenChange, onBack }) => {
7819
8439
  };
7820
8440
 
7821
8441
  // src/internal/components/KycModal.tsx
7822
- var import_lucide_react16 = require("lucide-react");
7823
- var import_jsx_runtime31 = require("react/jsx-runtime");
8442
+ var import_lucide_react17 = require("lucide-react");
8443
+ var import_jsx_runtime32 = require("react/jsx-runtime");
7824
8444
  var KycModal = ({ open, onOpenChange, onBack }) => {
7825
8445
  const { config } = useLumiaPassportConfig();
7826
8446
  const { isDark, classes: theme } = useTheme(config.ui.theme);
7827
8447
  const provider = config.kyc?.provider;
7828
8448
  const options = config.kyc?.options || {};
7829
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
8449
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Dialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
7830
8450
  DialogContent,
7831
8451
  {
7832
8452
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -7838,32 +8458,32 @@ var KycModal = ({ open, onOpenChange, onBack }) => {
7838
8458
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
7839
8459
  },
7840
8460
  children: [
7841
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DialogTitle, { children: "KYC" }) }),
7842
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DialogDescription, { className: "sr-only", children: "KYC placeholder" }),
7843
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-center gap-2", children: [
7844
- onBack && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
8461
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(DialogTitle, { children: "KYC" }) }),
8462
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(DialogDescription, { className: "sr-only", children: "KYC placeholder" }),
8463
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center gap-2", children: [
8464
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
7845
8465
  "button",
7846
8466
  {
7847
8467
  onClick: onBack,
7848
8468
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
7849
8469
  title: "Back",
7850
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react16.ArrowLeft, { className: "h-4 w-4" })
8470
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ArrowLeft, { className: "h-4 w-4" })
7851
8471
  }
7852
8472
  ),
7853
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7854
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react16.ShieldCheck, { className: "h-5 w-5" }),
7855
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: "KYC" })
8473
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8474
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ShieldCheck, { className: "h-5 w-5" }),
8475
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: "KYC" })
7856
8476
  ] })
7857
8477
  ] }) }),
7858
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "p-5", children: [
7859
- provider ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: `rounded-xl p-4 ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: [
7860
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: `text-sm ${theme.titleText} mb-2`, children: [
8478
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "p-5", children: [
8479
+ provider ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: `rounded-xl p-4 ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: [
8480
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: `text-sm ${theme.titleText} mb-2`, children: [
7861
8481
  "KYC provider: ",
7862
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "font-medium", children: provider })
8482
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "font-medium", children: provider })
7863
8483
  ] }),
7864
- Object.keys(options).length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `text-xs ${theme.mutedText} break-words whitespace-pre-wrap`, children: JSON.stringify(options, null, 2) }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: "No provider options configured." })
7865
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: "KYC verification coming soon\u2026" }) }),
7866
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "pt-4", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
8484
+ Object.keys(options).length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-xs ${theme.mutedText} break-words whitespace-pre-wrap`, children: JSON.stringify(options, null, 2) }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: "No provider options configured." })
8485
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: "KYC verification coming soon\u2026" }) }),
8486
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "pt-4", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
7867
8487
  ] })
7868
8488
  ]
7869
8489
  }
@@ -7872,20 +8492,20 @@ var KycModal = ({ open, onOpenChange, onBack }) => {
7872
8492
 
7873
8493
  // src/components/ConnectWalletButton.tsx
7874
8494
  init_auth();
7875
- var import_lucide_react17 = require("lucide-react");
8495
+ var import_lucide_react18 = require("lucide-react");
7876
8496
  init_base();
7877
8497
 
7878
8498
  // src/modules/linkedProfiles.ts
7879
- var React26 = __toESM(require("react"), 1);
8499
+ var React27 = __toESM(require("react"), 1);
7880
8500
  init_common();
7881
8501
  init_types();
7882
8502
  init_auth();
7883
8503
  function useLumiaPassportLinkedProfiles() {
7884
- const [profiles, setProfiles] = React26.useState([]);
7885
- const [avatar, setAvatar] = React26.useState(null);
7886
- const [isLoading, setIsLoading] = React26.useState(false);
7887
- const [error, setError] = React26.useState(null);
7888
- const load = React26.useCallback(async () => {
8504
+ const [profiles, setProfiles] = React27.useState([]);
8505
+ const [avatar, setAvatar] = React27.useState(null);
8506
+ const [isLoading, setIsLoading] = React27.useState(false);
8507
+ const [error, setError] = React27.useState(null);
8508
+ const load = React27.useCallback(async () => {
7889
8509
  setIsLoading(true);
7890
8510
  setError(null);
7891
8511
  try {
@@ -7911,14 +8531,14 @@ function useLumiaPassportLinkedProfiles() {
7911
8531
  setIsLoading(false);
7912
8532
  }
7913
8533
  }, []);
7914
- React26.useEffect(() => {
8534
+ React27.useEffect(() => {
7915
8535
  load();
7916
8536
  }, [load]);
7917
8537
  return { profiles, avatar, isLoading, error, refresh: load };
7918
8538
  }
7919
8539
 
7920
8540
  // src/components/ConnectWalletButton.tsx
7921
- var import_jsx_runtime32 = require("react/jsx-runtime");
8541
+ var import_jsx_runtime33 = require("react/jsx-runtime");
7922
8542
  var ConnectWalletButton = ({
7923
8543
  className,
7924
8544
  label = "Connect Wallet",
@@ -7970,6 +8590,7 @@ var ConnectWalletButton = ({
7970
8590
  const [copied, setCopied] = import_react19.default.useState(false);
7971
8591
  const [isManageWalletOpen, setIsManageWalletOpen] = import_react19.default.useState(false);
7972
8592
  const [isSecurityOpen, setIsSecurityOpen] = import_react19.default.useState(false);
8593
+ const [isBackupOpen, setIsBackupOpen] = import_react19.default.useState(false);
7973
8594
  const [isTransactionsOpen, setIsTransactionsOpen] = import_react19.default.useState(false);
7974
8595
  const [isViewAssetsOpen, setIsViewAssetsOpen] = import_react19.default.useState(false);
7975
8596
  const [isSendOpen, setIsSendOpen] = import_react19.default.useState(false);
@@ -8220,8 +8841,8 @@ var ConnectWalletButton = ({
8220
8841
  refetchBalance();
8221
8842
  }
8222
8843
  }, [address]);
8223
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: [className, "lumia-scope"].filter(Boolean).join(" "), children: [
8224
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "inline-flex items-center gap-2", children: !address ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
8844
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: [className, "lumia-scope"].filter(Boolean).join(" "), children: [
8845
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "inline-flex items-center gap-2", children: !address ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8225
8846
  "button",
8226
8847
  {
8227
8848
  onClick: () => {
@@ -8258,56 +8879,56 @@ var ConnectWalletButton = ({
8258
8879
  },
8259
8880
  children: label || "Connect"
8260
8881
  }
8261
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
8882
+ ) }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8262
8883
  "div",
8263
8884
  {
8264
8885
  className: `relative rounded-2xl p-4 shadow-lg cursor-pointer transition-all duration-200 hover:scale-105 hover:shadow-xl max-w-sm min-w-[280px] ${isDark ? "bg-gray-900/40 backdrop-blur border border-gray-700" : "bg-white backdrop-blur border border-gray-200"}`,
8265
8886
  onClick: () => setIsWalletMenuOpen(true),
8266
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center space-x-3", children: [
8267
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "w-10 h-10 rounded-full flex items-center justify-center flex-shrink-0 overflow-hidden bg-gradient-to-br from-purple-500 to-blue-600", children: avatar ? (
8887
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center space-x-3", children: [
8888
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "w-10 h-10 rounded-full flex items-center justify-center flex-shrink-0 overflow-hidden bg-gradient-to-br from-purple-500 to-blue-600", children: avatar ? (
8268
8889
  // eslint-disable-next-line @next/next/no-img-element
8269
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
8270
- ) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-white font-bold text-sm", children: "LP" }) }),
8271
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "text-left flex-1 min-w-0", children: [
8272
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `font-semibold text-base truncate ${theme.titleText}`, children: mode === "compact" && displayName ? displayName : formatAddress(address) }),
8273
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: `text-sm ${theme.mutedText}`, children: [
8890
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
8891
+ ) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "text-white font-bold text-sm", children: "LP" }) }),
8892
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "text-left flex-1 min-w-0", children: [
8893
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `font-semibold text-base truncate ${theme.titleText}`, children: mode === "compact" && displayName ? displayName : formatAddress(address) }),
8894
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: `text-sm ${theme.mutedText}`, children: [
8274
8895
  formatBalance(),
8275
8896
  " LUMIA"
8276
8897
  ] })
8277
8898
  ] }),
8278
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center space-x-1", children: [
8279
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "group relative", children: [
8280
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
8281
- import_lucide_react17.Cloud,
8899
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center space-x-1", children: [
8900
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "group relative", children: [
8901
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8902
+ import_lucide_react18.Cloud,
8282
8903
  {
8283
8904
  className: `w-3 h-3 ${indicators.server ? "text-green-500" : "text-orange-400"}`
8284
8905
  }
8285
8906
  ),
8286
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-gray-800 text-white text-xs rounded opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-50", children: [
8907
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-gray-800 text-white text-xs rounded opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-50", children: [
8287
8908
  "Server Keyshare: ",
8288
8909
  indicators.server ? "Available" : "Missing"
8289
8910
  ] })
8290
8911
  ] }),
8291
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "group relative", children: [
8292
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
8293
- import_lucide_react17.Laptop,
8912
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "group relative", children: [
8913
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8914
+ import_lucide_react18.Laptop,
8294
8915
  {
8295
8916
  className: `w-3 h-3 ${indicators.local ? "text-green-500" : "text-orange-400"}`
8296
8917
  }
8297
8918
  ),
8298
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-gray-800 text-white text-xs rounded opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-50", children: [
8919
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-gray-800 text-white text-xs rounded opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-50", children: [
8299
8920
  "Local Keyshare: ",
8300
8921
  indicators.local ? "Available" : "Missing"
8301
8922
  ] })
8302
8923
  ] }),
8303
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "group relative", children: [
8304
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
8305
- import_lucide_react17.Shield,
8924
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "group relative", children: [
8925
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8926
+ import_lucide_react18.Shield,
8306
8927
  {
8307
8928
  className: `w-3 h-3 ${indicators.backup ? "text-green-500" : "text-orange-400"}`
8308
8929
  }
8309
8930
  ),
8310
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-gray-800 text-white text-xs rounded opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-50", children: [
8931
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-gray-800 text-white text-xs rounded opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-50", children: [
8311
8932
  "Vault Backup: ",
8312
8933
  indicators.backup ? "Available" : "Not Found"
8313
8934
  ] })
@@ -8316,59 +8937,59 @@ var ConnectWalletButton = ({
8316
8937
  ] })
8317
8938
  }
8318
8939
  ) }),
8319
- isWalletMenuOpen && address && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "fixed inset-0 z-[60]", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Dialog, { open: isWalletMenuOpen, onOpenChange: setIsWalletMenuOpen, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
8320
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(DialogTitle, { children: "Wallet Menu" }) }),
8321
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(DialogDescription, { className: "sr-only", children: "Smart Account wallet actions and status" }),
8322
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `p-4 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center space-x-4", children: [
8323
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "w-12 h-12 bg-gradient-to-br from-purple-500 to-blue-600 rounded-full flex items-center justify-center relative overflow-hidden", children: avatar ? (
8940
+ isWalletMenuOpen && address && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "fixed inset-0 z-[60]", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Dialog, { open: isWalletMenuOpen, onOpenChange: setIsWalletMenuOpen, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(DialogContent, { className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`, children: [
8941
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(DialogTitle, { children: "Wallet Menu" }) }),
8942
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(DialogDescription, { className: "sr-only", children: "Smart Account wallet actions and status" }),
8943
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `p-4 border-b ${theme.divider}`, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center space-x-4", children: [
8944
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "w-12 h-12 bg-gradient-to-br from-purple-500 to-blue-600 rounded-full flex items-center justify-center relative overflow-hidden", children: avatar ? (
8324
8945
  // eslint-disable-next-line @next/next/no-img-element
8325
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
8326
- ) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-white font-bold text-lg", children: "L" }) }),
8327
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex-1 min-w-0", children: [
8328
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `font-medium text-lg ${theme.titleText}`, children: displayName || "Smart Account" }),
8329
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center space-x-2", children: [
8330
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: formatAddress(address) }),
8331
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("button", { onClick: async () => {
8946
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
8947
+ ) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "text-white font-bold text-lg", children: "L" }) }),
8948
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex-1 min-w-0", children: [
8949
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `font-medium text-lg ${theme.titleText}`, children: displayName || "Smart Account" }),
8950
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center space-x-2", children: [
8951
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `text-sm ${theme.mutedText}`, children: formatAddress(address) }),
8952
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { onClick: async () => {
8332
8953
  try {
8333
8954
  await navigator.clipboard.writeText(address);
8334
8955
  setCopied(true);
8335
8956
  setTimeout(() => setCopied(false), 1500);
8336
8957
  } catch {
8337
8958
  }
8338
- }, title: "Copy address", className: `${theme.iconColor} hover:${theme.titleText} p-1`, children: copied ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-green-500 text-sm", children: "\u2713" }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Copy, { className: "w-4 h-4" }) })
8959
+ }, title: "Copy address", className: `${theme.iconColor} hover:${theme.titleText} p-1`, children: copied ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "text-green-500 text-sm", children: "\u2713" }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.Copy, { className: "w-4 h-4" }) })
8339
8960
  ] })
8340
8961
  ] })
8341
8962
  ] }) }) }),
8342
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "p-4", children: [
8343
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "grid grid-cols-3 gap-2 mb-4", children: [
8344
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
8963
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "p-4", children: [
8964
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "grid grid-cols-3 gap-2 mb-4", children: [
8965
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { onClick: () => {
8345
8966
  setIsWalletMenuOpen(false);
8346
8967
  setIsSendOpen(true);
8347
8968
  }, className: `${isDark ? "bg-slate-900 hover:bg-slate-800 text-blue-400" : "bg-blue-50 hover:bg-blue-100 text-blue-600"} rounded-xl p-3 transition-colors flex items-center justify-center gap-2`, children: [
8348
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ArrowUp, { className: "w-5 h-5" }),
8349
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-sm font-medium", children: "Send" })
8969
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.ArrowUp, { className: "w-5 h-5" }),
8970
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "text-sm font-medium", children: "Send" })
8350
8971
  ] }),
8351
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
8972
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { onClick: () => {
8352
8973
  setIsWalletMenuOpen(false);
8353
8974
  setIsReceiveOpen(true);
8354
8975
  }, className: `${isDark ? "bg-slate-900 hover:bg-slate-800 text-green-400" : "bg-green-50 hover:bg-green-100 text-green-600"} rounded-xl p-3 transition-colors flex items-center justify-center gap-2`, children: [
8355
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ArrowDown, { className: "w-5 h-5" }),
8356
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-sm font-medium", children: "Receive" })
8976
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.ArrowDown, { className: "w-5 h-5" }),
8977
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "text-sm font-medium", children: "Receive" })
8357
8978
  ] }),
8358
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
8979
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { onClick: () => {
8359
8980
  setIsWalletMenuOpen(false);
8360
8981
  setIsBuyOpen(true);
8361
8982
  }, className: `${isDark ? "bg-slate-900 hover:bg-slate-800 text-purple-400" : "bg-purple-50 hover:bg-purple-100 text-purple-600"} rounded-xl p-3 transition-colors flex items-center justify-center gap-2`, children: [
8362
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Plus, { className: "w-5 h-5" }),
8363
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-sm font-medium", children: "Buy" })
8983
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.Plus, { className: "w-5 h-5" }),
8984
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "text-sm font-medium", children: "Buy" })
8364
8985
  ] })
8365
8986
  ] }),
8366
- config.warnings?.backupWarning && !hasServerVault && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `mb-4 p-3 rounded-xl ${isDark ? "bg-orange-900/20 border border-orange-900/40" : "bg-orange-50 border border-orange-200"}`, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-start space-x-3", children: [
8367
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.AlertTriangle, { className: `w-5 h-5 ${isDark ? "text-orange-400" : "text-orange-500"} mt-0.5 flex-shrink-0` }),
8368
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex-1 min-w-0", children: [
8369
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-sm font-medium ${isDark ? "text-orange-300" : "text-orange-700"}`, children: "Backup Not Created" }),
8370
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-xs mt-1 ${isDark ? "text-orange-400/80" : "text-orange-600"}`, children: "Secure your wallet with an encrypted vault backup to protect against device loss." }),
8371
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
8987
+ config.warnings?.backupWarning && !hasServerVault && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `mb-4 p-3 rounded-xl ${isDark ? "bg-orange-900/20 border border-orange-900/40" : "bg-orange-50 border border-orange-200"}`, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-start space-x-3", children: [
8988
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.AlertTriangle, { className: `w-5 h-5 ${isDark ? "text-orange-400" : "text-orange-500"} mt-0.5 flex-shrink-0` }),
8989
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex-1 min-w-0", children: [
8990
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `text-sm font-medium ${isDark ? "text-orange-300" : "text-orange-700"}`, children: "Backup Not Created" }),
8991
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `text-xs mt-1 ${isDark ? "text-orange-400/80" : "text-orange-600"}`, children: "Secure your wallet with an encrypted vault backup to protect against device loss." }),
8992
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
8372
8993
  "button",
8373
8994
  {
8374
8995
  onClick: () => {
@@ -8377,19 +8998,19 @@ var ConnectWalletButton = ({
8377
8998
  },
8378
8999
  className: `mt-2 px-3 py-1.5 text-xs font-medium rounded-lg transition-colors ${isDark ? "bg-orange-900/40 hover:bg-orange-900/60 text-orange-300" : "bg-orange-100 hover:bg-orange-200 text-orange-700"}`,
8379
9000
  children: [
8380
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ShieldCheck, { className: "w-3 h-3 inline mr-1" }),
9001
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.ShieldCheck, { className: "w-3 h-3 inline mr-1" }),
8381
9002
  "Create Backup"
8382
9003
  ]
8383
9004
  }
8384
9005
  )
8385
9006
  ] })
8386
9007
  ] }) }),
8387
- config.warnings?.emailNotConnectedWarning && !profilesLoading && !profiles.some((p) => p.provider?.toLowerCase() === "email") && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `mb-4 p-3 rounded-xl ${isDark ? "bg-blue-900/20 border border-blue-900/40" : "bg-blue-50 border border-blue-200"}`, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-start space-x-3", children: [
8388
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.AlertTriangle, { className: `w-5 h-5 ${isDark ? "text-blue-400" : "text-blue-500"} mt-0.5 flex-shrink-0` }),
8389
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex-1 min-w-0", children: [
8390
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-sm font-medium ${isDark ? "text-blue-300" : "text-blue-700"}`, children: "Email Not Connected" }),
8391
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `text-xs mt-1 ${isDark ? "text-blue-400/80" : "text-blue-600"}`, children: "Connect your email for easier account recovery and additional security." }),
8392
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
9008
+ config.warnings?.emailNotConnectedWarning && !profilesLoading && !profiles.some((p) => p.provider?.toLowerCase() === "email") && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `mb-4 p-3 rounded-xl ${isDark ? "bg-blue-900/20 border border-blue-900/40" : "bg-blue-50 border border-blue-200"}`, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-start space-x-3", children: [
9009
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.AlertTriangle, { className: `w-5 h-5 ${isDark ? "text-blue-400" : "text-blue-500"} mt-0.5 flex-shrink-0` }),
9010
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex-1 min-w-0", children: [
9011
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `text-sm font-medium ${isDark ? "text-blue-300" : "text-blue-700"}`, children: "Email Not Connected" }),
9012
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `text-xs mt-1 ${isDark ? "text-blue-400/80" : "text-blue-600"}`, children: "Connect your email for easier account recovery and additional security." }),
9013
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
8393
9014
  "button",
8394
9015
  {
8395
9016
  onClick: () => {
@@ -8398,80 +9019,87 @@ var ConnectWalletButton = ({
8398
9019
  },
8399
9020
  className: `mt-2 px-3 py-1.5 text-xs font-medium rounded-lg transition-colors ${isDark ? "bg-blue-900/40 hover:bg-blue-900/60 text-blue-300" : "bg-blue-100 hover:bg-blue-200 text-blue-700"}`,
8400
9021
  children: [
8401
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ShieldCheck, { className: "w-3 h-3 inline mr-1" }),
9022
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.ShieldCheck, { className: "w-3 h-3 inline mr-1" }),
8402
9023
  "Connect Email"
8403
9024
  ]
8404
9025
  }
8405
9026
  )
8406
9027
  ] })
8407
9028
  ] }) }),
8408
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9029
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8409
9030
  "button",
8410
9031
  {
8411
9032
  onClick: () => address && window.open(`${LUMIA_EXPLORER_URL}/address/${address}`, "_blank"),
8412
9033
  className: `w-full ${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-3 mb-3 transition-colors cursor-pointer text-left`,
8413
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center justify-between", children: [
8414
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center space-x-3", children: [
8415
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "w-8 h-8 rounded-full flex items-center justify-center bg-transparent overflow-hidden", children: lumiaBeam.logoDataUri ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("img", { src: lumiaBeam.logoDataUri, alt: "Chain logo", className: "w-full h-full object-cover" }) : lumiaBeam.logo === "lumia" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(LumiaLogo, { size: 32 }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-white text-xs font-bold", children: (lumiaBeam.name || "L").charAt(0) }) }),
8416
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { children: [
8417
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: `${theme.titleText} font-medium`, children: lumiaBeam.name }),
8418
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: theme.mutedText + " text-sm", children: [
9034
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center justify-between", children: [
9035
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center space-x-3", children: [
9036
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "w-8 h-8 rounded-full flex items-center justify-center bg-transparent overflow-hidden", children: lumiaBeam.logoDataUri ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("img", { src: lumiaBeam.logoDataUri, alt: "Chain logo", className: "w-full h-full object-cover" }) : lumiaBeam.logo === "lumia" ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(LumiaLogo, { size: 32 }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "text-white text-xs font-bold", children: (lumiaBeam.name || "L").charAt(0) }) }),
9037
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { children: [
9038
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: `${theme.titleText} font-medium`, children: lumiaBeam.name }),
9039
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: theme.mutedText + " text-sm", children: [
8419
9040
  formatBalance(),
8420
9041
  " LUMIA"
8421
9042
  ] })
8422
9043
  ] })
8423
9044
  ] }),
8424
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: theme.iconColor, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ArrowUpRight, { className: "w-4 h-4" }) })
9045
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: theme.iconColor, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.ArrowUpRight, { className: "w-4 h-4" }) })
8425
9046
  ] })
8426
9047
  }
8427
9048
  ),
8428
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "space-y-1", children: [
8429
- config.features?.kycNeeded && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
9049
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1", children: [
9050
+ config.features?.kycNeeded && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { onClick: () => {
8430
9051
  setIsWalletMenuOpen(false);
8431
9052
  setIsKycOpen(true);
8432
9053
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
8433
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ShieldCheck, { className: `w-5 h-5 ${theme.iconColor}` }),
8434
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "KYC" })
9054
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.ShieldCheck, { className: `w-5 h-5 ${theme.iconColor}` }),
9055
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: theme.titleText, children: "KYC" })
8435
9056
  ] }),
8436
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
9057
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { onClick: () => {
8437
9058
  setIsWalletMenuOpen(false);
8438
9059
  setIsTransactionsOpen(true);
8439
9060
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
8440
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Activity, { className: `w-5 h-5 ${theme.iconColor}` }),
8441
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "Transactions" })
9061
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.Activity, { className: `w-5 h-5 ${theme.iconColor}` }),
9062
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: theme.titleText, children: "Transactions" })
8442
9063
  ] }),
8443
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
9064
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { onClick: () => {
8444
9065
  setIsWalletMenuOpen(false);
8445
9066
  setIsViewAssetsOpen(true);
8446
9067
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
8447
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Gem, { className: `w-5 h-5 ${theme.iconColor}` }),
8448
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "View Assets" })
9068
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.Gem, { className: `w-5 h-5 ${theme.iconColor}` }),
9069
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: theme.titleText, children: "View Assets" })
8449
9070
  ] }),
8450
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
9071
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { onClick: () => {
8451
9072
  setIsWalletMenuOpen(false);
8452
9073
  setIsManageWalletOpen(true);
8453
9074
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
8454
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.CreditCard, { className: `w-5 h-5 ${theme.iconColor}` }),
8455
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "Manage Wallet" })
9075
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.CreditCard, { className: `w-5 h-5 ${theme.iconColor}` }),
9076
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: theme.titleText, children: "Manage Wallet" })
8456
9077
  ] }),
8457
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: () => {
9078
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { onClick: () => {
8458
9079
  setIsWalletMenuOpen(false);
8459
9080
  setIsSecurityOpen(true);
8460
9081
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
8461
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.Lock, { className: `w-5 h-5 ${theme.iconColor}` }),
8462
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: theme.titleText, children: "Security" })
9082
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.Lock, { className: `w-5 h-5 ${theme.iconColor}` }),
9083
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: theme.titleText, children: "Security" })
9084
+ ] }),
9085
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { onClick: () => {
9086
+ setIsWalletMenuOpen(false);
9087
+ setIsBackupOpen(true);
9088
+ }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-gray-800" : "hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
9089
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.Shield, { className: `w-5 h-5 ${theme.iconColor}` }),
9090
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: theme.titleText, children: "Keyshare Backup" })
8463
9091
  ] }),
8464
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("button", { onClick: async () => {
9092
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("button", { onClick: async () => {
8465
9093
  await handleDisconnect();
8466
9094
  setIsWalletMenuOpen(false);
8467
9095
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "hover:bg-red-900/20" : "hover:bg-red-50"} transition-colors flex items-center space-x-3`, children: [
8468
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react17.ArrowUpRight, { className: "w-5 h-5 text-red-600" }),
8469
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-red-600", children: "Disconnect Wallet" })
9096
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react18.ArrowUpRight, { className: "w-5 h-5 text-red-600" }),
9097
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "text-red-600", children: "Disconnect Wallet" })
8470
9098
  ] })
8471
9099
  ] })
8472
9100
  ] })
8473
9101
  ] }) }) }),
8474
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9102
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8475
9103
  ManageWallet,
8476
9104
  {
8477
9105
  open: isManageWalletOpen,
@@ -8482,7 +9110,7 @@ var ConnectWalletButton = ({
8482
9110
  }
8483
9111
  }
8484
9112
  ),
8485
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9113
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8486
9114
  SecurityModal,
8487
9115
  {
8488
9116
  open: isSecurityOpen,
@@ -8493,7 +9121,23 @@ var ConnectWalletButton = ({
8493
9121
  }
8494
9122
  }
8495
9123
  ),
8496
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9124
+ isBackupOpen && session?.mpcUserId && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Dialog, { open: isBackupOpen, onOpenChange: setIsBackupOpen, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(DialogContent, { className: "max-w-2xl", children: [
9125
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(VisuallyHidden, { children: [
9126
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(DialogTitle, { children: "Keyshare Backup" }),
9127
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(DialogDescription, { children: "Create and manage encrypted backups of your keyshare" })
9128
+ ] }),
9129
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
9130
+ KeyshareBackup,
9131
+ {
9132
+ userId: session.mpcUserId,
9133
+ onClose: () => setIsBackupOpen(false),
9134
+ onBackupSuccess: () => {
9135
+ console.log("[ConnectWalletButton] Backup created successfully");
9136
+ }
9137
+ }
9138
+ )
9139
+ ] }) }),
9140
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8497
9141
  TransactionsModal,
8498
9142
  {
8499
9143
  open: isTransactionsOpen,
@@ -8504,7 +9148,7 @@ var ConnectWalletButton = ({
8504
9148
  }
8505
9149
  }
8506
9150
  ),
8507
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9151
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8508
9152
  ViewAssetsModal,
8509
9153
  {
8510
9154
  open: isViewAssetsOpen,
@@ -8515,7 +9159,7 @@ var ConnectWalletButton = ({
8515
9159
  }
8516
9160
  }
8517
9161
  ),
8518
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9162
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8519
9163
  SendModal,
8520
9164
  {
8521
9165
  open: isSendOpen,
@@ -8526,7 +9170,7 @@ var ConnectWalletButton = ({
8526
9170
  }
8527
9171
  }
8528
9172
  ),
8529
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9173
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8530
9174
  ReceiveModal,
8531
9175
  {
8532
9176
  open: isReceiveOpen,
@@ -8537,7 +9181,7 @@ var ConnectWalletButton = ({
8537
9181
  }
8538
9182
  }
8539
9183
  ),
8540
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9184
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8541
9185
  BuyModal,
8542
9186
  {
8543
9187
  open: isBuyOpen,
@@ -8548,7 +9192,7 @@ var ConnectWalletButton = ({
8548
9192
  }
8549
9193
  }
8550
9194
  ),
8551
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9195
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8552
9196
  KycModal,
8553
9197
  {
8554
9198
  open: isKycOpen,
@@ -8559,7 +9203,7 @@ var ConnectWalletButton = ({
8559
9203
  }
8560
9204
  }
8561
9205
  ),
8562
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9206
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8563
9207
  AuthModal,
8564
9208
  {
8565
9209
  open: isAuthModalOpen,
@@ -8604,7 +9248,7 @@ var ConnectWalletButton = ({
8604
9248
  }
8605
9249
  }
8606
9250
  ),
8607
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
9251
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
8608
9252
  TssManagerWithRef,
8609
9253
  {
8610
9254
  ref: tssManagerRef,
@@ -8622,7 +9266,7 @@ var ConnectWalletButton = ({
8622
9266
  };
8623
9267
 
8624
9268
  // src/components/ThemeToggle.tsx
8625
- var import_jsx_runtime33 = require("react/jsx-runtime");
9269
+ var import_jsx_runtime34 = require("react/jsx-runtime");
8626
9270
  var ThemeToggle = () => {
8627
9271
  const { config, updateConfig } = useLumiaPassportConfig();
8628
9272
  const currentTheme = config.ui.theme;
@@ -8667,7 +9311,7 @@ var ThemeToggle = () => {
8667
9311
  return "auto";
8668
9312
  }
8669
9313
  };
8670
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "lumia-scope", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
9314
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "lumia-scope", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
8671
9315
  "button",
8672
9316
  {
8673
9317
  onClick: cycleTheme,
@@ -8683,19 +9327,19 @@ var ThemeToggle = () => {
8683
9327
  };
8684
9328
 
8685
9329
  // src/components/LumiaLogo.tsx
8686
- var import_jsx_runtime34 = require("react/jsx-runtime");
9330
+ var import_jsx_runtime35 = require("react/jsx-runtime");
8687
9331
  var LumiaLogo2 = ({ size = 80, className = "" }) => {
8688
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
9332
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
8689
9333
  "div",
8690
9334
  {
8691
9335
  className: `flex items-center justify-center ${className}`,
8692
9336
  style: { width: size, height: size },
8693
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("svg", { viewBox: "0 0 512 512", width: size, height: size, children: [
8694
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("circle", { cx: "256", cy: "256", r: "256", fill: "#060117", strokeWidth: "0" }),
8695
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("path", { d: "M264.13948,48.01032l63.62778,132.2788,133.95322,68.65102h-147.34854s-48.55804-10.04649-50.23246-56.93012,0-143.99971,0-143.99971Z", fill: "#fefdff", strokeWidth: "0" }),
8696
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("path", { d: "M50.27932,245.59045l132.27894-63.62734L251.20943,48.01032l-.00012,147.34824s-10.04654,48.55792-56.93019,50.23222c-46.88366,1.6743-143.9998-.00033-143.9998-.00033Z", fill: "#fefdff", strokeWidth: "0" }),
8697
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("path", { d: "M247.86056,463.98968l-63.62772-132.27875-133.95315-68.65092,147.34848-.00011s48.55802,10.04646,50.23242,56.93008c1.6744,46.88362-.00004,143.9997-.00004,143.9997Z", fill: "#fefdff", strokeWidth: "0" }),
8698
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("path", { d: "M461.72068,266.40941l-132.2789,63.62744-68.65118,133.95283.00016-147.34823s10.04655-48.55792,56.93018-50.23226c46.88364-1.67434,143.99974.00023,143.99974.00023Z", fill: "#fefdff", strokeWidth: "0" })
9337
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("svg", { viewBox: "0 0 512 512", width: size, height: size, children: [
9338
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("circle", { cx: "256", cy: "256", r: "256", fill: "#060117", strokeWidth: "0" }),
9339
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("path", { d: "M264.13948,48.01032l63.62778,132.2788,133.95322,68.65102h-147.34854s-48.55804-10.04649-50.23246-56.93012,0-143.99971,0-143.99971Z", fill: "#fefdff", strokeWidth: "0" }),
9340
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("path", { d: "M50.27932,245.59045l132.27894-63.62734L251.20943,48.01032l-.00012,147.34824s-10.04654,48.55792-56.93019,50.23222c-46.88366,1.6743-143.9998-.00033-143.9998-.00033Z", fill: "#fefdff", strokeWidth: "0" }),
9341
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("path", { d: "M247.86056,463.98968l-63.62772-132.27875-133.95315-68.65092,147.34848-.00011s48.55802,10.04646,50.23242,56.93008c1.6744,46.88362-.00004,143.9997-.00004,143.9997Z", fill: "#fefdff", strokeWidth: "0" }),
9342
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("path", { d: "M461.72068,266.40941l-132.2789,63.62744-68.65118,133.95283.00016-147.34823s10.04655-48.55792,56.93018-50.23226c46.88364-1.67434,143.99974.00023,143.99974.00023Z", fill: "#fefdff", strokeWidth: "0" })
8699
9343
  ] })
8700
9344
  }
8701
9345
  );
@@ -8758,9 +9402,9 @@ function useTheme2(configTheme) {
8758
9402
  }
8759
9403
 
8760
9404
  // src/internal/components/Hash.tsx
8761
- var React28 = __toESM(require("react"), 1);
8762
- var import_lucide_react18 = require("lucide-react");
8763
- var import_jsx_runtime35 = require("react/jsx-runtime");
9405
+ var React29 = __toESM(require("react"), 1);
9406
+ var import_lucide_react19 = require("lucide-react");
9407
+ var import_jsx_runtime36 = require("react/jsx-runtime");
8764
9408
  function toExplorerUrl(kind, value, chain) {
8765
9409
  const base2 = chain?.blockExplorers?.default?.url;
8766
9410
  if (!base2) return null;
@@ -8783,12 +9427,12 @@ var Hash = ({
8783
9427
  }) => {
8784
9428
  const value = hash || "";
8785
9429
  const explorer = toExplorerUrl(kind, value, chain || void 0);
8786
- const [copied, setCopied] = React28.useState(false);
8787
- if (!value) return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
8788
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: cn2("flex items-center gap-2", className), children: [
8789
- label && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-sm font-medium", children: label }),
8790
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("code", { className: "text-xs bg-background px-2 py-1 rounded break-all", children: truncate ? short2(value) : value }),
8791
- showCopy && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
9430
+ const [copied, setCopied] = React29.useState(false);
9431
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
9432
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: cn2("flex items-center gap-2", className), children: [
9433
+ label && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-sm font-medium", children: label }),
9434
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("code", { className: "text-xs bg-background px-2 py-1 rounded break-all", children: truncate ? short2(value) : value }),
9435
+ showCopy && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
8792
9436
  Button,
8793
9437
  {
8794
9438
  variant: "ghost",
@@ -8802,10 +9446,10 @@ var Hash = ({
8802
9446
  } catch {
8803
9447
  }
8804
9448
  },
8805
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react18.Copy, { className: "h-4 w-4" })
9449
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react19.Copy, { className: "h-4 w-4" })
8806
9450
  }
8807
9451
  ),
8808
- showExplorer && explorer && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
9452
+ showExplorer && explorer && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
8809
9453
  "a",
8810
9454
  {
8811
9455
  href: explorer,
@@ -8813,7 +9457,7 @@ var Hash = ({
8813
9457
  rel: "noreferrer noopener",
8814
9458
  className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
8815
9459
  title: "Open in explorer",
8816
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react18.ExternalLink, { className: "h-4 w-4" })
9460
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react19.ExternalLink, { className: "h-4 w-4" })
8817
9461
  }
8818
9462
  )
8819
9463
  ] });
@@ -8822,7 +9466,7 @@ var Hash = ({
8822
9466
  // src/internal/components/TransactionsList.tsx
8823
9467
  var import_react21 = require("react");
8824
9468
  init_base();
8825
- var import_jsx_runtime36 = require("react/jsx-runtime");
9469
+ var import_jsx_runtime37 = require("react/jsx-runtime");
8826
9470
  var TransactionsList = ({
8827
9471
  address,
8828
9472
  itemsCount = 10
@@ -8876,15 +9520,15 @@ var TransactionsList = ({
8876
9520
  window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
8877
9521
  };
8878
9522
  if (loading) {
8879
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "p-4 text-center", children: [
8880
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "animate-spin inline-block w-6 h-6 border-2 border-current border-t-transparent rounded-full" }),
8881
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "mt-2 text-sm text-gray-600", children: "Loading transactions..." })
9523
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "p-4 text-center", children: [
9524
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "animate-spin inline-block w-6 h-6 border-2 border-current border-t-transparent rounded-full" }),
9525
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "mt-2 text-sm text-gray-600", children: "Loading transactions..." })
8882
9526
  ] });
8883
9527
  }
8884
9528
  if (error) {
8885
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "p-4 text-center", children: [
8886
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-red-600 text-sm", children: error }),
8887
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
9529
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "p-4 text-center", children: [
9530
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "text-red-600 text-sm", children: error }),
9531
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8888
9532
  "button",
8889
9533
  {
8890
9534
  onClick: () => window.location.reload(),
@@ -8895,54 +9539,54 @@ var TransactionsList = ({
8895
9539
  ] });
8896
9540
  }
8897
9541
  if (transactions.length === 0) {
8898
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "p-4 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-gray-600 text-sm", children: "No transactions found" }) });
9542
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "p-4 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "text-gray-600 text-sm", children: "No transactions found" }) });
8899
9543
  }
8900
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "max-h-96 overflow-y-auto", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "space-y-2 p-2", children: transactions.map((tx) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
9544
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "max-h-96 overflow-y-auto", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "space-y-2 p-2", children: transactions.map((tx) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
8901
9545
  "div",
8902
9546
  {
8903
9547
  className: "border rounded-lg p-3 hover:bg-gray-50 cursor-pointer transition-colors",
8904
9548
  onClick: () => openTransaction(tx.hash),
8905
9549
  children: [
8906
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex justify-between items-start mb-2", children: [
8907
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex-1", children: [
8908
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-center space-x-2 mb-1", children: [
8909
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-xs font-mono bg-gray-100 px-2 py-1 rounded", children: formatAddress(tx.hash) }),
8910
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: `text-xs px-2 py-1 rounded ${tx.status === "ok" ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800"}`, children: tx.status === "ok" ? "Success" : "Failed" })
9550
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex justify-between items-start mb-2", children: [
9551
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex-1", children: [
9552
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center space-x-2 mb-1", children: [
9553
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-xs font-mono bg-gray-100 px-2 py-1 rounded", children: formatAddress(tx.hash) }),
9554
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: `text-xs px-2 py-1 rounded ${tx.status === "ok" ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800"}`, children: tx.status === "ok" ? "Success" : "Failed" })
8911
9555
  ] }),
8912
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "text-sm space-y-1", children: [
8913
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { children: [
8914
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-gray-600", children: "From:" }),
8915
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "font-mono ml-1", children: [
9556
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "text-sm space-y-1", children: [
9557
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { children: [
9558
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-gray-600", children: "From:" }),
9559
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("span", { className: "font-mono ml-1", children: [
8916
9560
  formatAddress(tx.from.hash),
8917
- tx.from.is_contract && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
9561
+ tx.from.is_contract && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
8918
9562
  ] })
8919
9563
  ] }),
8920
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { children: [
8921
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-gray-600", children: "To:" }),
8922
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "font-mono ml-1", children: [
9564
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { children: [
9565
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-gray-600", children: "To:" }),
9566
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("span", { className: "font-mono ml-1", children: [
8923
9567
  formatAddress(tx.to.hash),
8924
- tx.to.is_contract && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
9568
+ tx.to.is_contract && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
8925
9569
  ] })
8926
9570
  ] }),
8927
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { children: [
8928
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-gray-600", children: "Value:" }),
8929
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "font-semibold ml-1", children: [
9571
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { children: [
9572
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-gray-600", children: "Value:" }),
9573
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("span", { className: "font-semibold ml-1", children: [
8930
9574
  formatValue(tx.value),
8931
9575
  " LUMIA"
8932
9576
  ] })
8933
9577
  ] })
8934
9578
  ] })
8935
9579
  ] }),
8936
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "text-right text-xs text-gray-500", children: [
8937
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { children: formatDate2(tx.timestamp) }),
8938
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "mt-1", children: [
9580
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "text-right text-xs text-gray-500", children: [
9581
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { children: formatDate2(tx.timestamp) }),
9582
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "mt-1", children: [
8939
9583
  "Gas: ",
8940
9584
  parseInt(tx.gas_used).toLocaleString()
8941
9585
  ] }),
8942
- tx.method && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "mt-1 text-blue-600", children: tx.method })
9586
+ tx.method && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "mt-1 text-blue-600", children: tx.method })
8943
9587
  ] })
8944
9588
  ] }),
8945
- tx.transaction_types.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
9589
+ tx.transaction_types.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8946
9590
  "span",
8947
9591
  {
8948
9592
  className: "text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded-full",
@@ -8956,247 +9600,6 @@ var TransactionsList = ({
8956
9600
  )) }) });
8957
9601
  };
8958
9602
 
8959
- // src/internal/components/KeyshareBackup.tsx
8960
- var React30 = __toESM(require("react"), 1);
8961
- var import_lucide_react19 = require("lucide-react");
8962
- init_vaultClient();
8963
- var import_jsx_runtime37 = require("react/jsx-runtime");
8964
- function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
8965
- const [backupStatus, setBackupStatus] = React30.useState(() => getBackupStatus(userId));
8966
- const [loading, setLoading] = React30.useState({
8967
- server: false,
8968
- cloud: false,
8969
- local: false
8970
- });
8971
- const [error, setError] = React30.useState(null);
8972
- const [success, setSuccess] = React30.useState(null);
8973
- const [showPassword, setShowPassword] = React30.useState(false);
8974
- const [useCustomPassword, setUseCustomPassword] = React30.useState(false);
8975
- const [customPassword, setCustomPassword] = React30.useState("");
8976
- const [cloudProviders, setCloudProviders] = React30.useState([]);
8977
- const [selectedCloudProvider, setSelectedCloudProvider] = React30.useState(null);
8978
- const hasKeyshareData = React30.useMemo(() => {
8979
- return !!getCurrentKeyshareBackupData(userId);
8980
- }, [userId]);
8981
- React30.useEffect(() => {
8982
- getAvailableCloudProviders2().then((providers) => {
8983
- setCloudProviders(providers);
8984
- if (providers.length > 0 && !selectedCloudProvider) {
8985
- setSelectedCloudProvider(providers[0].id);
8986
- }
8987
- });
8988
- }, [selectedCloudProvider]);
8989
- const refreshStatus = React30.useCallback(() => {
8990
- setBackupStatus(getBackupStatus(userId));
8991
- }, [userId]);
8992
- React30.useEffect(() => {
8993
- refreshStatus();
8994
- }, [refreshStatus]);
8995
- const handleBackup = async (method) => {
8996
- setLoading((prev) => ({ ...prev, [method]: true }));
8997
- setError(null);
8998
- setSuccess(null);
8999
- try {
9000
- const password = useCustomPassword ? customPassword : void 0;
9001
- switch (method) {
9002
- case "server":
9003
- await backupToServer(userId, password);
9004
- setSuccess("Successfully created server backup");
9005
- break;
9006
- case "cloud": {
9007
- await backupToCloud(userId, password, selectedCloudProvider || void 0);
9008
- setSuccess(`Successfully created cloud backup`);
9009
- const updatedProviders = await getAvailableCloudProviders2();
9010
- setCloudProviders(updatedProviders);
9011
- break;
9012
- }
9013
- case "local":
9014
- await backupToLocalFile(userId, password);
9015
- setSuccess("Backup file downloaded successfully");
9016
- break;
9017
- }
9018
- refreshStatus();
9019
- setTimeout(() => {
9020
- if (typeof window !== "undefined") {
9021
- window.dispatchEvent(
9022
- new CustomEvent("lumia-passport-backup-status-changed", {
9023
- detail: { method, success: true }
9024
- })
9025
- );
9026
- }
9027
- onBackupSuccess?.();
9028
- }, 100);
9029
- } catch (err) {
9030
- const errorMsg = err instanceof Error ? err.message : "Backup creation failed";
9031
- setError(errorMsg);
9032
- updateBackupStatus(userId, method, { error: errorMsg });
9033
- refreshStatus();
9034
- } finally {
9035
- setLoading((prev) => ({ ...prev, [method]: false }));
9036
- }
9037
- };
9038
- const formatLastBackup = (timestamp) => {
9039
- if (!timestamp) return "Never";
9040
- const date = new Date(timestamp);
9041
- return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
9042
- };
9043
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(Card, { className: "border-green-200 bg-green-50", children: [
9044
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(CardHeader, { className: "pb-4", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center justify-between", children: [
9045
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center gap-3", children: [
9046
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.Shield, { className: "h-6 w-6 text-green-600" }),
9047
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { children: [
9048
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(CardTitle, { className: "text-lg", children: "Create Backup" }),
9049
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(CardDescription, { className: "text-sm", children: "Secure your keyshare with encrypted backups" })
9050
- ] })
9051
- ] }),
9052
- onClose && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("button", { onClick: onClose, className: "p-1 rounded bg-red-100 text-red-600 hover:bg-red-200 transition-colors", title: "Close", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.X, { className: "h-4 w-4" }) })
9053
- ] }) }),
9054
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(CardContent, { className: "space-y-6", children: [
9055
- error && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center gap-2 p-3 rounded bg-red-50 border border-red-200 text-red-700 text-sm", children: [
9056
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.AlertCircle, { className: "h-4 w-4 flex-shrink-0" }),
9057
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { children: error })
9058
- ] }),
9059
- success && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center gap-2 p-3 rounded bg-green-50 border border-green-200 text-green-700 text-sm", children: [
9060
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.CheckCircle2, { className: "h-4 w-4 flex-shrink-0" }),
9061
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { children: success })
9062
- ] }),
9063
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "space-y-3", children: [
9064
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "text-sm font-medium text-gray-700", children: "Encryption Method:" }),
9065
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center gap-2", children: [
9066
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
9067
- "input",
9068
- {
9069
- type: "checkbox",
9070
- id: "use-backup-password",
9071
- checked: useCustomPassword,
9072
- onChange: (e) => setUseCustomPassword(e.target.checked),
9073
- className: "rounded"
9074
- }
9075
- ),
9076
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("label", { htmlFor: "use-backup-password", className: "text-sm font-medium", children: "Use custom password instead of passkey" })
9077
- ] }),
9078
- !useCustomPassword && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "p-3 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center gap-2", children: [
9079
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.Key, { className: "h-4 w-4" }),
9080
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { children: "Your passkey will be used to encrypt the backup securely" })
9081
- ] }) }),
9082
- useCustomPassword && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "relative", children: [
9083
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
9084
- Input,
9085
- {
9086
- type: showPassword ? "text" : "password",
9087
- placeholder: "Enter backup encryption password",
9088
- value: customPassword,
9089
- onChange: (e) => setCustomPassword(e.target.value),
9090
- className: "pr-10"
9091
- }
9092
- ),
9093
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
9094
- "button",
9095
- {
9096
- type: "button",
9097
- onClick: () => setShowPassword(!showPassword),
9098
- className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-500 hover:text-gray-700",
9099
- children: showPassword ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.EyeOff, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.Eye, { className: "h-4 w-4" })
9100
- }
9101
- )
9102
- ] })
9103
- ] }),
9104
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "space-y-4", children: [
9105
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "text-sm font-medium text-gray-700", children: "Choose Backup Method:" }),
9106
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "p-4 rounded-lg border border-blue-200 bg-blue-50/50", children: [
9107
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "flex items-center justify-between mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center gap-3", children: [
9108
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.Server, { className: "h-5 w-5 text-blue-600" }),
9109
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { children: [
9110
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "font-medium text-sm", children: "Server Backup" }),
9111
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "text-xs text-gray-600", children: "Store encrypted backup on secure server" })
9112
- ] })
9113
- ] }) }),
9114
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
9115
- Button,
9116
- {
9117
- onClick: () => handleBackup("server"),
9118
- disabled: loading.server || useCustomPassword && !customPassword || !hasKeyshareData,
9119
- className: "px-4 py-2",
9120
- children: loading.server ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
9121
- }
9122
- ),
9123
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "text-xs text-gray-600 mt-2", children: [
9124
- "Encrypted backup stored on secure server \u2022 Last: ",
9125
- formatLastBackup(backupStatus.server.lastBackup)
9126
- ] })
9127
- ] }),
9128
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "p-4 rounded-lg border border-sky-200 bg-sky-50/50", children: [
9129
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center gap-3 mb-3", children: [
9130
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.Cloud, { className: "h-5 w-5 text-sky-600" }),
9131
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { children: [
9132
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "font-medium text-sm", children: "Cloud Backup" }),
9133
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "text-xs text-gray-600", children: "Store encrypted backup in cloud storage" })
9134
- ] })
9135
- ] }),
9136
- cloudProviders.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
9137
- "select",
9138
- {
9139
- value: selectedCloudProvider || "",
9140
- onChange: (e) => setSelectedCloudProvider(e.target.value),
9141
- className: "text-sm border rounded px-2 py-1 w-full",
9142
- children: cloudProviders.map((provider) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("option", { value: provider.id, children: [
9143
- provider.icon,
9144
- " ",
9145
- provider.name,
9146
- " ",
9147
- provider.isAuthenticated ? "\u2713" : ""
9148
- ] }, provider.id))
9149
- }
9150
- ) }),
9151
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
9152
- Button,
9153
- {
9154
- onClick: () => handleBackup("cloud"),
9155
- disabled: loading.cloud || useCustomPassword && !customPassword || !hasKeyshareData || cloudProviders.length === 0,
9156
- className: "px-4 py-2",
9157
- children: loading.cloud ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
9158
- }
9159
- ),
9160
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "text-xs text-gray-600 mt-2", children: cloudProviders.length > 0 ? `Direct backup to ${cloudProviders.find((p) => p.id === selectedCloudProvider)?.name || "cloud storage"} \u2022 Last: ${formatLastBackup(backupStatus.cloud.lastBackup)}` : `No cloud providers configured \u2022 Last: ${formatLastBackup(backupStatus.cloud.lastBackup)}` })
9161
- ] }),
9162
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "p-4 rounded-lg border border-purple-200 bg-purple-50/50", children: [
9163
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center gap-3 mb-3", children: [
9164
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.Download, { className: "h-5 w-5 text-purple-600" }),
9165
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { children: [
9166
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "font-medium text-sm", children: "File Backup" }),
9167
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "text-xs text-gray-600", children: "Download encrypted backup file to your device" })
9168
- ] })
9169
- ] }),
9170
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
9171
- Button,
9172
- {
9173
- onClick: () => handleBackup("local"),
9174
- disabled: loading.local || useCustomPassword && !customPassword || !hasKeyshareData,
9175
- className: "w-full",
9176
- children: loading.local ? "Creating..." : useCustomPassword ? "Create & Download" : "Create & Download with Passkey"
9177
- }
9178
- ),
9179
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "text-xs text-gray-600 mt-2", children: [
9180
- "Download encrypted backup file to your device \u2022 Last: ",
9181
- formatLastBackup(backupStatus.local.lastBackup)
9182
- ] })
9183
- ] })
9184
- ] }),
9185
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-start gap-2 p-3 bg-amber-50 border border-amber-200 rounded text-amber-800 text-xs", children: [
9186
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react19.Lock, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
9187
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { children: [
9188
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "font-medium", children: "Security Notice" }),
9189
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "mt-1", children: [
9190
- useCustomPassword ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children: "All backups are encrypted with AES-256 using your custom password. Store your password securely - without it, backups cannot be restored." }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children: "All backups are encrypted with AES-256 using your passkey. Your passkey authenticator (device/biometrics) is required to restore backups." }),
9191
- " ",
9192
- "Without backup access, you cannot recover your smart account if you lose this device."
9193
- ] })
9194
- ] })
9195
- ] })
9196
- ] })
9197
- ] });
9198
- }
9199
-
9200
9603
  // src/hooks/useUserOpStatus.ts
9201
9604
  var React31 = __toESM(require("react"), 1);
9202
9605
  init_base();
@@ -9524,6 +9927,7 @@ function useSmartAccountTransactions() {
9524
9927
  UserOpStatus,
9525
9928
  getUserProfile,
9526
9929
  lumiaBeam,
9930
+ prepareUserOperation,
9527
9931
  queryClient,
9528
9932
  sendUserOperation,
9529
9933
  updateUserProfile,