@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.js CHANGED
@@ -2396,6 +2396,7 @@ var init_iframe_manager = __esm({
2396
2396
  this.iframe.style.zIndex = "999999";
2397
2397
  this.iframe.style.background = "rgba(0, 0, 0, 0.5)";
2398
2398
  this.iframe.setAttribute("sandbox", "allow-scripts allow-same-origin");
2399
+ this.iframe.setAttribute("allow", "publickey-credentials-get *; publickey-credentials-create *");
2399
2400
  this.messageListener = this.handleMessage.bind(this);
2400
2401
  window.addEventListener("message", this.messageListener);
2401
2402
  document.body.appendChild(this.iframe);
@@ -2752,6 +2753,92 @@ var init_iframe_manager = __esm({
2752
2753
  }
2753
2754
  return false;
2754
2755
  }
2756
+ /**
2757
+ * Create backup of keyshare
2758
+ */
2759
+ async createBackup(userId, backupRequest, accessToken) {
2760
+ this.log("[IframeManager] Creating backup...");
2761
+ const response = await this.sendMessage("CREATE_BACKUP", {
2762
+ userId,
2763
+ backupRequest,
2764
+ accessToken
2765
+ // Pass access token for TSS API authentication
2766
+ });
2767
+ if (response.type === "LUMIA_PASSPORT_BACKUP_CREATED") {
2768
+ return response.result;
2769
+ }
2770
+ throw new Error("Unexpected response type");
2771
+ }
2772
+ /**
2773
+ * Restore keyshare from server backup
2774
+ */
2775
+ async restoreFromServer(userId, password, accessToken) {
2776
+ this.log("[IframeManager] Restoring backup from server...");
2777
+ const response = await this.sendMessage("RESTORE_BACKUP", {
2778
+ userId,
2779
+ password,
2780
+ accessToken
2781
+ // Pass access token for TSS API authentication
2782
+ });
2783
+ if (response.type === "LUMIA_PASSPORT_BACKUP_RESTORED") {
2784
+ return response.result;
2785
+ }
2786
+ throw new Error("Unexpected response type");
2787
+ }
2788
+ /**
2789
+ * Encrypt backup data without uploading (for cloud/local backups)
2790
+ * Returns encrypted data that parent can upload/download
2791
+ */
2792
+ async encryptBackupData(userId, password) {
2793
+ this.log("[IframeManager] Encrypting backup data...");
2794
+ const response = await this.sendMessage("ENCRYPT_BACKUP_DATA", {
2795
+ userId,
2796
+ password
2797
+ });
2798
+ if (response.type === "LUMIA_PASSPORT_BACKUP_ENCRYPTED") {
2799
+ return response.encryptedData;
2800
+ }
2801
+ throw new Error("Unexpected response type");
2802
+ }
2803
+ /**
2804
+ * Restore keyshare from local file backup
2805
+ */
2806
+ async restoreFromLocalFile(userId, fileContent, password) {
2807
+ this.log("[IframeManager] Restoring backup from local file...");
2808
+ const response = await this.sendMessage("RESTORE_FROM_FILE", {
2809
+ userId,
2810
+ fileContent,
2811
+ password
2812
+ });
2813
+ if (response.type === "LUMIA_PASSPORT_FILE_RESTORED") {
2814
+ return response.result;
2815
+ }
2816
+ throw new Error("Unexpected response type");
2817
+ }
2818
+ /**
2819
+ * Get backup status for user
2820
+ */
2821
+ async getBackupStatus(userId) {
2822
+ this.log("[IframeManager] Getting backup status...");
2823
+ const response = await this.sendMessage("GET_BACKUP_STATUS", {
2824
+ userId
2825
+ });
2826
+ if (response.type === "LUMIA_PASSPORT_BACKUP_STATUS") {
2827
+ return response.status;
2828
+ }
2829
+ throw new Error("Unexpected response type");
2830
+ }
2831
+ /**
2832
+ * Get available cloud providers
2833
+ */
2834
+ async getCloudProviders() {
2835
+ this.log("[IframeManager] Getting cloud providers...");
2836
+ const response = await this.sendMessage("GET_CLOUD_PROVIDERS", {});
2837
+ if (response.type === "LUMIA_PASSPORT_CLOUD_PROVIDERS") {
2838
+ return response.providers;
2839
+ }
2840
+ throw new Error("Unexpected response type");
2841
+ }
2755
2842
  /**
2756
2843
  * Cleanup and destroy iframe
2757
2844
  */
@@ -2791,7 +2878,7 @@ var init_iframe_manager = __esm({
2791
2878
  });
2792
2879
 
2793
2880
  // src/styles/built.css
2794
- 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}';
2881
+ 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}';
2795
2882
 
2796
2883
  // src/context/LumiaPassportContext.tsx
2797
2884
  init_lumiaPassport();
@@ -3260,7 +3347,7 @@ var LumiaRainbowKitProvider = ({ children }) => {
3260
3347
  };
3261
3348
 
3262
3349
  // src/components/ConnectWalletButton.tsx
3263
- import React27 from "react";
3350
+ import React28 from "react";
3264
3351
  import { useBalance as useBalance3 } from "wagmi";
3265
3352
 
3266
3353
  // src/internal/components/ui/dialog.tsx
@@ -3596,6 +3683,7 @@ Input.displayName = "Input";
3596
3683
 
3597
3684
  // src/internal/components/KeyshareRestore.tsx
3598
3685
  init_vaultClient();
3686
+ init_iframe_manager();
3599
3687
  import { Fragment as Fragment2, jsx as jsx16, jsxs as jsxs8 } from "react/jsx-runtime";
3600
3688
  function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
3601
3689
  const { config } = useLumiaPassportConfig();
@@ -3609,6 +3697,14 @@ function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
3609
3697
  const [restorePassword, setRestorePassword] = React10.useState("");
3610
3698
  const [hasServerBackup, setHasServerBackup] = React10.useState(null);
3611
3699
  const [checkingBackup, setCheckingBackup] = React10.useState(true);
3700
+ const iframeManager = React10.useMemo(() => {
3701
+ try {
3702
+ return getIframeManager();
3703
+ } catch (e) {
3704
+ console.error("[KeyshareRestore] Failed to get iframe manager:", e);
3705
+ return null;
3706
+ }
3707
+ }, []);
3612
3708
  React10.useEffect(() => {
3613
3709
  const checkBackupAvailability = async () => {
3614
3710
  try {
@@ -3631,20 +3727,31 @@ function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
3631
3727
  }, [userId]);
3632
3728
  const handleRestoreFromServer = async () => {
3633
3729
  console.log("[KeyshareRestore] Starting server restore for userId:", userId);
3730
+ if (!iframeManager) {
3731
+ setError("Iframe manager not initialized");
3732
+ return;
3733
+ }
3634
3734
  setLoading((prev) => ({ ...prev, server: true }));
3635
3735
  setError(null);
3636
3736
  setSuccess(null);
3637
3737
  try {
3638
- const passwordToUse = useCustomPassword ? restorePassword : null;
3639
- console.log("[KeyshareRestore] Calling restoreFromServer with method:", useCustomPassword ? "password" : "passkey");
3640
- await restoreFromServer(userId, passwordToUse);
3641
- console.log("[KeyshareRestore] Server restore successful");
3642
- setSuccess("Successfully restored keyshare from server backup");
3643
- setTimeout(() => {
3644
- onRestoreSuccess?.();
3645
- }, 100);
3738
+ const passwordToUse = useCustomPassword ? restorePassword : void 0;
3739
+ console.log("[KeyshareRestore] Calling iframeManager.restoreFromServer with method:", useCustomPassword ? "password" : "passkey");
3740
+ const jwt = await Promise.resolve().then(() => (init_auth(), auth_exports)).then((m) => m.jwtTokenManager.getTokens());
3741
+ const accessToken = jwt?.accessToken;
3742
+ const result = await iframeManager.restoreFromServer(userId, passwordToUse, accessToken);
3743
+ if (result.success) {
3744
+ console.log("[KeyshareRestore] Server restore successful");
3745
+ setSuccess("Successfully restored keyshare from server backup");
3746
+ setTimeout(() => {
3747
+ onRestoreSuccess?.();
3748
+ }, 100);
3749
+ } else {
3750
+ console.error("[KeyshareRestore] Server restore failed:", result.error);
3751
+ setError(result.error || "Server restore failed");
3752
+ }
3646
3753
  } catch (err) {
3647
- console.error("[KeyshareRestore] Server restore failed:", err);
3754
+ console.error("[KeyshareRestore] Server restore exception:", err);
3648
3755
  const errorMsg = err instanceof Error ? err.message : "Server restore failed";
3649
3756
  setError(errorMsg);
3650
3757
  } finally {
@@ -3661,18 +3768,27 @@ function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
3661
3768
  setError("Please enter the backup password");
3662
3769
  return;
3663
3770
  }
3771
+ if (!iframeManager) {
3772
+ setError("Iframe manager not initialized");
3773
+ return;
3774
+ }
3664
3775
  setLoading((prev) => ({ ...prev, file: true }));
3665
3776
  setError(null);
3666
3777
  setSuccess(null);
3667
3778
  try {
3668
- const passwordToUse = useCustomPassword ? restorePassword : null;
3669
- await restoreFromBackup(restoreFile, passwordToUse, userId);
3670
- setSuccess("Successfully restored keyshare from backup file");
3671
- setRestoreFile(null);
3672
- setRestorePassword("");
3673
- setTimeout(() => {
3674
- onRestoreSuccess?.();
3675
- }, 100);
3779
+ const fileContent = await restoreFile.text();
3780
+ const passwordToUse = useCustomPassword ? restorePassword : void 0;
3781
+ const result = await iframeManager.restoreFromLocalFile(userId, fileContent, passwordToUse);
3782
+ if (result.success) {
3783
+ setSuccess("Successfully restored keyshare from backup file");
3784
+ setRestoreFile(null);
3785
+ setRestorePassword("");
3786
+ setTimeout(() => {
3787
+ onRestoreSuccess?.();
3788
+ }, 100);
3789
+ } else {
3790
+ setError(result.error || "File restore failed");
3791
+ }
3676
3792
  } catch (err) {
3677
3793
  const errorMsg = err instanceof Error ? err.message : "Restore failed";
3678
3794
  setError(errorMsg);
@@ -3910,7 +4026,7 @@ function KeyshareRestore({ userId, onClose, onRestoreSuccess }) {
3910
4026
  }
3911
4027
 
3912
4028
  // src/internal/components/VerificationCodeInput.tsx
3913
- import { useEffect as useEffect4, useMemo as useMemo2, useRef, useState as useState4 } from "react";
4029
+ import { useEffect as useEffect4, useMemo as useMemo3, useRef, useState as useState4 } from "react";
3914
4030
  import { jsx as jsx17, jsxs as jsxs9 } from "react/jsx-runtime";
3915
4031
  var VerificationCodeInput = ({ onVerifyCode, onResendCode, isLoading, expiresIn, error }) => {
3916
4032
  const { config } = useLumiaPassportConfig();
@@ -3926,7 +4042,7 @@ var VerificationCodeInput = ({ onVerifyCode, onResendCode, isLoading, expiresIn,
3926
4042
  const [digits, setDigits] = useState4(["", "", "", "", "", ""]);
3927
4043
  const inputsRef = useRef([]);
3928
4044
  const lastSubmittedRef = useRef(null);
3929
- const code = useMemo2(() => digits.join(""), [digits]);
4045
+ const code = useMemo3(() => digits.join(""), [digits]);
3930
4046
  useEffect4(() => {
3931
4047
  if (code.length === 6 && digits.every((d) => d !== "") && !isLoading) {
3932
4048
  if (lastSubmittedRef.current !== code) {
@@ -5272,6 +5388,208 @@ async function sendUserOperation(session, callTarget, amountWei, innerData = "0x
5272
5388
  }
5273
5389
  return hash;
5274
5390
  }
5391
+ async function prepareUserOperation(session, callTarget, amountWei, innerData = "0x", feeType = "standard", entryPointVersion = "v0.7") {
5392
+ const entryPointAddress = entryPointVersion === "v0.6" ? ENTRYPOINT_V06 : ENTRYPOINT_V07;
5393
+ const amountWeiBigInt = BigInt(amountWei);
5394
+ const isMinimalTest = callTarget === "0x0000000000000000000000000000000000000000" && amountWei === "0" && innerData === "0x";
5395
+ let callData;
5396
+ if (isMinimalTest) {
5397
+ callData = "0x";
5398
+ } else {
5399
+ callData = encodeFunctionData({ abi: executeAbi, functionName: "execute", args: [callTarget, amountWeiBigInt, innerData] });
5400
+ }
5401
+ let isDeployed = false;
5402
+ let deploymentMethod = "unknown";
5403
+ try {
5404
+ const code = await publicClient.getCode({ address: session.smartAccountAddress });
5405
+ if (code && code !== "0x" && code.length > 2) {
5406
+ isDeployed = true;
5407
+ deploymentMethod = "getCode";
5408
+ }
5409
+ } catch {
5410
+ }
5411
+ const nonce = await fetchEntryPointNonce(session.smartAccountAddress, entryPointAddress);
5412
+ const nonceValue = BigInt(nonce);
5413
+ if (!isDeployed && nonceValue !== 0n) throw new Error(`Undeployed account has non-zero nonce: ${nonce}. This will cause CodeHashChanged error.`);
5414
+ const shouldIncludeFactory = !isDeployed;
5415
+ let userOp;
5416
+ if (shouldIncludeFactory) {
5417
+ const compatCreateAbi = [{ type: "function", name: "createAccount", stateMutability: "payable", inputs: [{ name: "owner", type: "address" }, { name: "salt", type: "bytes32" }], outputs: [{ name: "", type: "address" }] }];
5418
+ const saltZero = "0x0000000000000000000000000000000000000000000000000000000000000000";
5419
+ const factoryData = encodeFunctionData({ abi: compatCreateAbi, functionName: "createAccount", args: [session.ownerAddress, saltZero] });
5420
+ userOp = await createUserOperationWithDynamicFees(
5421
+ session.smartAccountAddress,
5422
+ nonce,
5423
+ callData,
5424
+ true,
5425
+ session.factoryAddress,
5426
+ factoryData,
5427
+ feeType
5428
+ );
5429
+ } else {
5430
+ userOp = await createUserOperationWithDynamicFees(
5431
+ session.smartAccountAddress,
5432
+ nonce,
5433
+ callData,
5434
+ false,
5435
+ void 0,
5436
+ void 0,
5437
+ feeType
5438
+ );
5439
+ }
5440
+ const ensureGenerousDefaults = () => {
5441
+ const toHex2 = (v) => `0x${v.toString(16)}`;
5442
+ const minCallGas = 0x493e0n;
5443
+ const minVerificationGas = 0x989680n;
5444
+ const minPreVerificationGas = 0x30d40n;
5445
+ if (BigInt(userOp.callGasLimit || "0x0") < minCallGas) userOp.callGasLimit = toHex2(minCallGas);
5446
+ if (BigInt(userOp.verificationGasLimit || "0x0") < minVerificationGas) userOp.verificationGasLimit = toHex2(minVerificationGas);
5447
+ if (BigInt(userOp.preVerificationGas || "0x0") < minPreVerificationGas) userOp.preVerificationGas = toHex2(minPreVerificationGas);
5448
+ };
5449
+ const enforceCaps = (usePaymaster) => {
5450
+ try {
5451
+ const envCaps = typeof import.meta !== "undefined" && import.meta.env || {};
5452
+ const maxBundlerVerifGas = envCaps.VITE_MAX_VERIFICATION_GAS ? BigInt(envCaps.VITE_MAX_VERIFICATION_GAS) : MAX_BUNDLER_VERIFICATION_GAS;
5453
+ const maxCallGas = envCaps.VITE_MAX_CALL_GAS_LIMIT ? BigInt(envCaps.VITE_MAX_CALL_GAS_LIMIT) : 0x7a120n;
5454
+ const toHex2 = (v) => `0x${v.toString(16)}`;
5455
+ const maxAccountVerifGas = usePaymaster ? maxBundlerVerifGas - PAYMASTER_VERIFICATION_GAS : maxBundlerVerifGas;
5456
+ const verGas = BigInt(userOp.verificationGasLimit || "0x0");
5457
+ if (verGas > maxAccountVerifGas) userOp.verificationGasLimit = toHex2(maxAccountVerifGas);
5458
+ const callGas = BigInt(userOp.callGasLimit || "0x0");
5459
+ if (callGas > maxCallGas) userOp.callGasLimit = toHex2(maxCallGas);
5460
+ } catch {
5461
+ }
5462
+ };
5463
+ let estimated = false;
5464
+ try {
5465
+ const gasEst = await estimateUserOperationGas({ ...userOp, signature: `0x${"00".repeat(65)}` });
5466
+ userOp.callGasLimit = gasEst.callGasLimit;
5467
+ userOp.verificationGasLimit = gasEst.verificationGasLimit;
5468
+ userOp.preVerificationGas = gasEst.preVerificationGas;
5469
+ ensureGenerousDefaults();
5470
+ enforceCaps(session.usePaymaster);
5471
+ estimated = true;
5472
+ } catch {
5473
+ ensureGenerousDefaults();
5474
+ enforceCaps(session.usePaymaster);
5475
+ }
5476
+ try {
5477
+ const toHex2 = (v) => `0x${v.toString(16)}`;
5478
+ const isContractCall = !!userOp.callData && userOp.callData !== "0x";
5479
+ if (isContractCall) {
5480
+ const currentVer = BigInt(userOp.verificationGasLimit || "0x0");
5481
+ const call = BigInt(userOp.callGasLimit || "0x0");
5482
+ const postOp = 150000n;
5483
+ const safety10k = 10000n;
5484
+ let buffer = call + postOp + safety10k;
5485
+ buffer += buffer / 63n;
5486
+ const newVer = currentVer + buffer;
5487
+ userOp.verificationGasLimit = toHex2(newVer);
5488
+ enforceCaps(session.usePaymaster);
5489
+ }
5490
+ } catch {
5491
+ }
5492
+ if (session.usePaymaster && LUMIA_PAYMASTER_ADDRESS) {
5493
+ userOp.paymaster = LUMIA_PAYMASTER_ADDRESS;
5494
+ userOp.paymasterData = "0x";
5495
+ userOp.paymasterVerificationGasLimit = PAYMASTER_VERIFICATION_GAS_LIMIT;
5496
+ userOp.paymasterPostOpGasLimit = PAYMASTER_POSTOP_GAS_LIMIT;
5497
+ }
5498
+ userOp.nonce = nonce;
5499
+ let opHash;
5500
+ if (entryPointVersion === "v0.6") {
5501
+ const userOpV06 = convertUserOpV07ToV06(userOp);
5502
+ opHash = await publicClient.readContract({
5503
+ address: entryPointAddress,
5504
+ 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" }] }],
5505
+ functionName: "getUserOpHash",
5506
+ args: [{
5507
+ sender: userOpV06.sender,
5508
+ nonce: BigInt(userOpV06.nonce),
5509
+ initCode: userOpV06.initCode,
5510
+ callData: userOpV06.callData,
5511
+ callGasLimit: BigInt(userOpV06.callGasLimit),
5512
+ verificationGasLimit: BigInt(userOpV06.verificationGasLimit),
5513
+ preVerificationGas: BigInt(userOpV06.preVerificationGas),
5514
+ maxFeePerGas: BigInt(userOpV06.maxFeePerGas),
5515
+ maxPriorityFeePerGas: BigInt(userOpV06.maxPriorityFeePerGas),
5516
+ paymasterAndData: userOpV06.paymasterAndData,
5517
+ signature: "0x"
5518
+ }]
5519
+ });
5520
+ } else {
5521
+ const hasFactoryData = !!(userOp.factory && userOp.factoryData);
5522
+ const initCode = hasFactoryData ? (() => {
5523
+ const factoryAddr = userOp.factory.startsWith("0x") ? userOp.factory.slice(2) : userOp.factory;
5524
+ const factoryDataClean = userOp.factoryData.startsWith("0x") ? userOp.factoryData.slice(2) : userOp.factoryData;
5525
+ return `0x${factoryAddr}${factoryDataClean}`;
5526
+ })() : "0x";
5527
+ const accountGasLimits = pack2x128(BigInt(userOp.verificationGasLimit), BigInt(userOp.callGasLimit));
5528
+ const gasFees = pack2x128(BigInt(userOp.maxPriorityFeePerGas), BigInt(userOp.maxFeePerGas));
5529
+ let paymasterAndData = "0x";
5530
+ if (userOp.paymaster && userOp.paymaster !== "0x0000000000000000000000000000000000000000") {
5531
+ const verificationGasLimit = userOp.paymasterVerificationGasLimit || "0x186a0";
5532
+ const postOpGasLimit = userOp.paymasterPostOpGasLimit || "0x186a0";
5533
+ const paymasterDataField = userOp.paymasterData || "0x";
5534
+ const packedPaymasterGasLimits = pack2x128(BigInt(verificationGasLimit), BigInt(postOpGasLimit));
5535
+ const paymasterAddr = userOp.paymaster.startsWith("0x") ? userOp.paymaster.slice(2) : userOp.paymaster;
5536
+ const paymasterDataClean = paymasterDataField === "0x" ? "" : paymasterDataField.startsWith("0x") ? paymasterDataField.slice(2) : paymasterDataField;
5537
+ paymasterAndData = `0x${paymasterAddr}${packedPaymasterGasLimits.slice(2)}${paymasterDataClean}`;
5538
+ }
5539
+ const packedForHash = {
5540
+ sender: session.smartAccountAddress,
5541
+ nonce: BigInt(nonce),
5542
+ initCode,
5543
+ callData,
5544
+ accountGasLimits,
5545
+ preVerificationGas: BigInt(userOp.preVerificationGas),
5546
+ gasFees,
5547
+ paymasterAndData,
5548
+ signature: "0x"
5549
+ };
5550
+ opHash = await publicClient.readContract({
5551
+ address: entryPointAddress,
5552
+ abi: entryPoint07Abi,
5553
+ functionName: "getUserOpHash",
5554
+ args: [packedForHash]
5555
+ });
5556
+ }
5557
+ let signature;
5558
+ if (session.mpcUserId) {
5559
+ const mpcSig = await signDigestWithMpc(session.mpcUserId, opHash, {
5560
+ sender: userOp.sender,
5561
+ nonce: userOp.nonce,
5562
+ callData: userOp.callData,
5563
+ callGasLimit: userOp.callGasLimit,
5564
+ verificationGasLimit: userOp.verificationGasLimit,
5565
+ preVerificationGas: userOp.preVerificationGas,
5566
+ maxFeePerGas: userOp.maxFeePerGas,
5567
+ maxPriorityFeePerGas: userOp.maxPriorityFeePerGas,
5568
+ paymaster: userOp.paymaster,
5569
+ factory: userOp.factory,
5570
+ factoryData: userOp.factoryData
5571
+ });
5572
+ if (!mpcSig) throw new Error("MPC signing failed");
5573
+ signature = mpcSig;
5574
+ } else if (session.ownerPrivateKey) {
5575
+ const account = privateKeyToAccount(session.ownerPrivateKey);
5576
+ const rawSig = await account.sign({ hash: opHash });
5577
+ signature = normalizeSignature(rawSig);
5578
+ } else {
5579
+ throw new Error("No signing method available");
5580
+ }
5581
+ userOp.signature = signature;
5582
+ if (typeof userOp.sender !== "string") {
5583
+ userOp.sender = session.smartAccountAddress;
5584
+ }
5585
+ console.log("[Account] \u2705 Prepared signed UserOp (not sent):", JSON.stringify(userOp, (key, value) => typeof value === "bigint" ? `0x${value.toString(16)}` : value, 2));
5586
+ console.log("[Account] \u{1F511} UserOp Hash:", opHash);
5587
+ if (entryPointVersion === "v0.6") {
5588
+ const userOpV06 = convertUserOpV07ToV06(userOp);
5589
+ return { userOp: userOpV06, userOpHash: opHash };
5590
+ }
5591
+ return { userOp, userOpHash: opHash };
5592
+ }
5275
5593
  async function getEntryPointDeposit(address, entryPointVersion = "v0.7") {
5276
5594
  const entryPointAddress = entryPointVersion === "v0.6" ? ENTRYPOINT_V06 : ENTRYPOINT_V07;
5277
5595
  const depositAbi = [{ type: "function", name: "balanceOf", stateMutability: "view", inputs: [{ name: "account", type: "address" }], outputs: [{ name: "", type: "uint256" }] }];
@@ -6491,152 +6809,453 @@ var SecurityModal = ({ open, onOpenChange, onBack }) => {
6491
6809
  ] });
6492
6810
  };
6493
6811
 
6494
- // src/internal/components/TransactionsModal.tsx
6495
- import React19 from "react";
6496
- init_base();
6497
- import { Activity, ArrowUpRight, ArrowDownRight, CheckCircle2 as CheckCircle24, XCircle, ArrowLeft as ArrowLeft5, RefreshCw as RefreshCw3 } from "lucide-react";
6498
- import { jsx as jsx23, jsxs as jsxs15 } from "react/jsx-runtime";
6499
- var TransactionsModal = ({ open, onOpenChange, onBack }) => {
6500
- const { address } = useLumiaSession();
6501
- const [transactions, setTransactions] = React19.useState([]);
6502
- const [loading, setLoading] = React19.useState(false);
6812
+ // src/internal/components/KeyshareBackup.tsx
6813
+ import * as React19 from "react";
6814
+ import { Shield as Shield4, Server as Server4, CheckCircle2 as CheckCircle24, AlertCircle as AlertCircle3, Key as Key5, X as X3, Eye as Eye3, EyeOff as EyeOff3, Download as Download2, Cloud as Cloud3, Lock as Lock2 } from "lucide-react";
6815
+ init_iframe_manager();
6816
+ import { Fragment as Fragment6, jsx as jsx23, jsxs as jsxs15 } from "react/jsx-runtime";
6817
+ function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
6818
+ const [backupStatus, setBackupStatus] = React19.useState({
6819
+ server: {},
6820
+ cloud: {},
6821
+ local: {}
6822
+ });
6823
+ const [loading, setLoading] = React19.useState({
6824
+ server: false,
6825
+ cloud: false,
6826
+ local: false
6827
+ });
6503
6828
  const [error, setError] = React19.useState(null);
6504
- const { config } = useLumiaPassportConfig();
6505
- const { isDark, classes: theme } = useTheme(config.ui.theme);
6506
- const loadTransactions = React19.useCallback(async () => {
6507
- if (!address) return;
6508
- setLoading(true);
6509
- setError(null);
6829
+ const [success, setSuccess] = React19.useState(null);
6830
+ const [showPassword, setShowPassword] = React19.useState(false);
6831
+ const [useCustomPassword, setUseCustomPassword] = React19.useState(false);
6832
+ const [customPassword, setCustomPassword] = React19.useState("");
6833
+ const [cloudProviders, setCloudProviders] = React19.useState([]);
6834
+ const [selectedCloudProvider, setSelectedCloudProvider] = React19.useState(null);
6835
+ const [hasKeyshareData, setHasKeyshareData] = React19.useState(true);
6836
+ const iframeManager = React19.useMemo(() => {
6510
6837
  try {
6511
- const explorerUrl = getExplorerUrl();
6512
- const baseUrl = explorerUrl.replace(/\/$/, "");
6513
- const apiUrl = `${baseUrl}/api/v2/addresses/${address}/transactions?items_count=20`;
6514
- const response = await fetch(apiUrl);
6515
- if (!response.ok) {
6516
- throw new Error(`Failed to fetch transactions: ${response.status}`);
6838
+ return getIframeManager();
6839
+ } catch (e) {
6840
+ console.error("[KeyshareBackup] Failed to get iframe manager:", e);
6841
+ return null;
6842
+ }
6843
+ }, []);
6844
+ React19.useEffect(() => {
6845
+ const loadCloudProviders = async () => {
6846
+ try {
6847
+ const { getAvailableCloudProviders: getAvailableCloudProviders3 } = await Promise.resolve().then(() => (init_cloudStorage(), cloudStorage_exports));
6848
+ const availableProviders = getAvailableCloudProviders3();
6849
+ const providers = availableProviders.map((p) => ({
6850
+ id: p.id,
6851
+ name: p.name,
6852
+ available: p.isAvailable()
6853
+ }));
6854
+ setCloudProviders(providers);
6855
+ if (providers.length > 0 && !selectedCloudProvider) {
6856
+ setSelectedCloudProvider(providers[0].id);
6857
+ }
6858
+ } catch (error2) {
6859
+ console.error("[KeyshareBackup] Failed to load cloud providers:", error2);
6517
6860
  }
6518
- const data = await response.json();
6519
- setTransactions(data.items || []);
6861
+ };
6862
+ loadCloudProviders();
6863
+ }, [selectedCloudProvider]);
6864
+ const refreshStatus = React19.useCallback(async () => {
6865
+ if (!iframeManager) return;
6866
+ try {
6867
+ const status = await iframeManager.getBackupStatus(userId);
6868
+ setBackupStatus(status);
6520
6869
  } catch (error2) {
6521
- console.error("Failed to load transactions:", error2);
6522
- setError(error2 instanceof Error ? error2.message : "Failed to load transactions");
6523
- } finally {
6524
- setLoading(false);
6870
+ console.error("[KeyshareBackup] Failed to get backup status:", error2);
6525
6871
  }
6526
- }, [address]);
6872
+ }, [iframeManager, userId]);
6527
6873
  React19.useEffect(() => {
6528
- if (open && address && !loading && transactions.length === 0) {
6529
- loadTransactions();
6874
+ refreshStatus();
6875
+ }, [refreshStatus]);
6876
+ const handleBackup = async (method) => {
6877
+ if (!iframeManager) {
6878
+ setError("Iframe manager not initialized");
6879
+ return;
6530
6880
  }
6531
- }, [open]);
6532
- const formatAddress = (addr) => {
6533
- return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
6534
- };
6535
- const formatTime = (timestamp) => {
6536
- return new Date(timestamp).toLocaleString();
6537
- };
6538
- const formatValue = (value) => {
6881
+ setLoading((prev) => ({ ...prev, [method]: true }));
6882
+ setError(null);
6883
+ setSuccess(null);
6539
6884
  try {
6540
- const wei = BigInt(value);
6541
- const eth = Number(wei) / 1e18;
6542
- return eth.toFixed(4);
6543
- } catch {
6544
- return "0.0000";
6545
- }
6546
- };
6547
- const getStatusIcon = (status) => {
6548
- return status === "ok" ? /* @__PURE__ */ jsx23(CheckCircle24, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsx23(XCircle, { className: "w-4 h-4 text-red-500" });
6549
- };
6550
- const getTransactionIcon = (from, to) => {
6551
- const isIncoming = to.toLowerCase() === address?.toLowerCase();
6552
- return isIncoming ? /* @__PURE__ */ jsx23(ArrowDownRight, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsx23(ArrowUpRight, { className: "w-4 h-4 text-blue-500" });
6553
- };
6554
- const openInExplorer = (txHash) => {
6555
- const explorerUrl = getExplorerUrl();
6556
- window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
6557
- };
6558
- return /* @__PURE__ */ jsx23(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs15(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: [
6559
- /* @__PURE__ */ jsx23(VisuallyHidden, { children: /* @__PURE__ */ jsx23(DialogTitle, { children: "Transaction History" }) }),
6560
- /* @__PURE__ */ jsx23(DialogDescription, { className: "sr-only", children: "View your transaction history" }),
6561
- /* @__PURE__ */ jsx23("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
6562
- onBack && /* @__PURE__ */ jsx23(
6563
- "button",
6564
- {
6885
+ const password = useCustomPassword ? customPassword : void 0;
6886
+ if (method === "server") {
6887
+ const jwt = await Promise.resolve().then(() => (init_auth(), auth_exports)).then((m) => m.jwtTokenManager.getTokens());
6888
+ const accessToken = jwt?.accessToken;
6889
+ const result = await iframeManager.createBackup(userId, {
6890
+ method,
6891
+ password
6892
+ }, accessToken);
6893
+ if (result.success) {
6894
+ setSuccess("Successfully created server backup");
6895
+ await refreshStatus();
6896
+ onBackupSuccess?.();
6897
+ } else {
6898
+ throw new Error(result.error || "Server backup failed");
6899
+ }
6900
+ } else if (method === "cloud") {
6901
+ const encryptedData = await iframeManager.encryptBackupData(userId, password);
6902
+ const { getAvailableCloudProviders: getAvailableCloudProviders3 } = await Promise.resolve().then(() => (init_cloudStorage(), cloudStorage_exports));
6903
+ const providers = getAvailableCloudProviders3();
6904
+ const provider = selectedCloudProvider ? providers.find((p) => p.id === selectedCloudProvider) : providers[0];
6905
+ if (!provider) {
6906
+ throw new Error("No cloud provider available");
6907
+ }
6908
+ if (!provider.isAuthenticated()) {
6909
+ const authenticated = await provider.authenticate();
6910
+ if (!authenticated) {
6911
+ throw new Error(`Failed to authenticate with ${provider.name}`);
6912
+ }
6913
+ }
6914
+ const timestamp = Date.now();
6915
+ const fileName = `lumia-keyshare-backup-${userId}-${timestamp}.json`;
6916
+ const fileContent = JSON.stringify(encryptedData, null, 2);
6917
+ await provider.upload(fileName, fileContent, true);
6918
+ setSuccess(`Successfully created cloud backup on ${provider.name}`);
6919
+ await refreshStatus();
6920
+ onBackupSuccess?.();
6921
+ } else if (method === "local") {
6922
+ const encryptedData = await iframeManager.encryptBackupData(userId, password);
6923
+ const blob = new Blob([JSON.stringify(encryptedData, null, 2)], {
6924
+ type: "application/json"
6925
+ });
6926
+ const url = URL.createObjectURL(blob);
6927
+ const a = document.createElement("a");
6928
+ a.href = url;
6929
+ a.download = `lumia-passport-backup-${userId}-${Date.now()}.json`;
6930
+ document.body.appendChild(a);
6931
+ a.click();
6932
+ document.body.removeChild(a);
6933
+ URL.revokeObjectURL(url);
6934
+ setSuccess("Backup file downloaded successfully");
6935
+ await refreshStatus();
6936
+ onBackupSuccess?.();
6937
+ }
6938
+ if (typeof window !== "undefined") {
6939
+ window.dispatchEvent(
6940
+ new CustomEvent("lumia-passport-backup-status-changed", {
6941
+ detail: { method, success: true }
6942
+ })
6943
+ );
6944
+ }
6945
+ } catch (err) {
6946
+ const errorMsg = err instanceof Error ? err.message : "Backup creation failed";
6947
+ setError(errorMsg);
6948
+ await refreshStatus();
6949
+ } finally {
6950
+ setLoading((prev) => ({ ...prev, [method]: false }));
6951
+ }
6952
+ };
6953
+ const formatLastBackup = (timestamp) => {
6954
+ if (!timestamp) return "Never";
6955
+ const date = new Date(timestamp);
6956
+ return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
6957
+ };
6958
+ return /* @__PURE__ */ jsxs15(Card, { className: "border-green-200 bg-green-50", children: [
6959
+ /* @__PURE__ */ jsx23(CardHeader, { className: "pb-4", children: /* @__PURE__ */ jsxs15("div", { className: "flex items-center justify-between", children: [
6960
+ /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-3", children: [
6961
+ /* @__PURE__ */ jsx23(Shield4, { className: "h-6 w-6 text-green-600" }),
6962
+ /* @__PURE__ */ jsxs15("div", { children: [
6963
+ /* @__PURE__ */ jsx23(CardTitle, { className: "text-lg", children: "Create Backup" }),
6964
+ /* @__PURE__ */ jsx23(CardDescription, { className: "text-sm", children: "Secure your keyshare with encrypted backups" })
6965
+ ] })
6966
+ ] }),
6967
+ onClose && /* @__PURE__ */ jsx23("button", { onClick: onClose, className: "p-1 rounded bg-red-100 text-red-600 hover:bg-red-200 transition-colors", title: "Close", children: /* @__PURE__ */ jsx23(X3, { className: "h-4 w-4" }) })
6968
+ ] }) }),
6969
+ /* @__PURE__ */ jsxs15(CardContent, { className: "space-y-6", children: [
6970
+ error && /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2 p-3 rounded bg-red-50 border border-red-200 text-red-700 text-sm", children: [
6971
+ /* @__PURE__ */ jsx23(AlertCircle3, { className: "h-4 w-4 flex-shrink-0" }),
6972
+ /* @__PURE__ */ jsx23("span", { children: error })
6973
+ ] }),
6974
+ success && /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2 p-3 rounded bg-green-50 border border-green-200 text-green-700 text-sm", children: [
6975
+ /* @__PURE__ */ jsx23(CheckCircle24, { className: "h-4 w-4 flex-shrink-0" }),
6976
+ /* @__PURE__ */ jsx23("span", { children: success })
6977
+ ] }),
6978
+ /* @__PURE__ */ jsxs15("div", { className: "space-y-3", children: [
6979
+ /* @__PURE__ */ jsx23("div", { className: "text-sm font-medium text-gray-700", children: "Encryption Method:" }),
6980
+ /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
6981
+ /* @__PURE__ */ jsx23(
6982
+ "input",
6983
+ {
6984
+ type: "checkbox",
6985
+ id: "use-backup-password",
6986
+ checked: useCustomPassword,
6987
+ onChange: (e) => setUseCustomPassword(e.target.checked),
6988
+ className: "rounded"
6989
+ }
6990
+ ),
6991
+ /* @__PURE__ */ jsx23("label", { htmlFor: "use-backup-password", className: "text-sm font-medium", children: "Use custom password instead of passkey" })
6992
+ ] }),
6993
+ !useCustomPassword && /* @__PURE__ */ jsx23("div", { className: "p-3 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700", children: /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
6994
+ /* @__PURE__ */ jsx23(Key5, { className: "h-4 w-4" }),
6995
+ /* @__PURE__ */ jsx23("span", { children: "Your passkey will be used to encrypt the backup securely" })
6996
+ ] }) }),
6997
+ useCustomPassword && /* @__PURE__ */ jsxs15("div", { className: "relative", children: [
6998
+ /* @__PURE__ */ jsx23(
6999
+ Input,
7000
+ {
7001
+ type: showPassword ? "text" : "password",
7002
+ placeholder: "Enter backup encryption password",
7003
+ value: customPassword,
7004
+ onChange: (e) => setCustomPassword(e.target.value),
7005
+ className: "pr-10"
7006
+ }
7007
+ ),
7008
+ /* @__PURE__ */ jsx23(
7009
+ "button",
7010
+ {
7011
+ type: "button",
7012
+ onClick: () => setShowPassword(!showPassword),
7013
+ className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-500 hover:text-gray-700",
7014
+ children: showPassword ? /* @__PURE__ */ jsx23(EyeOff3, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx23(Eye3, { className: "h-4 w-4" })
7015
+ }
7016
+ )
7017
+ ] })
7018
+ ] }),
7019
+ /* @__PURE__ */ jsxs15("div", { className: "space-y-4", children: [
7020
+ /* @__PURE__ */ jsx23("div", { className: "text-sm font-medium text-gray-700", children: "Choose Backup Method:" }),
7021
+ /* @__PURE__ */ jsxs15("div", { className: "p-4 rounded-lg border border-blue-200 bg-blue-50/50", children: [
7022
+ /* @__PURE__ */ jsx23("div", { className: "flex items-center justify-between mb-3", children: /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-3", children: [
7023
+ /* @__PURE__ */ jsx23(Server4, { className: "h-5 w-5 text-blue-600" }),
7024
+ /* @__PURE__ */ jsxs15("div", { children: [
7025
+ /* @__PURE__ */ jsx23("div", { className: "font-medium text-sm", children: "Server Backup" }),
7026
+ /* @__PURE__ */ jsx23("div", { className: "text-xs text-gray-600", children: "Store encrypted backup on secure server" })
7027
+ ] })
7028
+ ] }) }),
7029
+ /* @__PURE__ */ jsx23(
7030
+ Button,
7031
+ {
7032
+ onClick: () => handleBackup("server"),
7033
+ disabled: loading.server || useCustomPassword && !customPassword || !hasKeyshareData,
7034
+ className: "px-4 py-2",
7035
+ children: loading.server ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
7036
+ }
7037
+ ),
7038
+ /* @__PURE__ */ jsxs15("div", { className: "text-xs text-gray-600 mt-2", children: [
7039
+ "Encrypted backup stored on secure server \u2022 Last: ",
7040
+ formatLastBackup(backupStatus.server.lastBackup)
7041
+ ] })
7042
+ ] }),
7043
+ /* @__PURE__ */ jsxs15("div", { className: "p-4 rounded-lg border border-sky-200 bg-sky-50/50", children: [
7044
+ /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-3 mb-3", children: [
7045
+ /* @__PURE__ */ jsx23(Cloud3, { className: "h-5 w-5 text-sky-600" }),
7046
+ /* @__PURE__ */ jsxs15("div", { children: [
7047
+ /* @__PURE__ */ jsx23("div", { className: "font-medium text-sm", children: "Cloud Backup" }),
7048
+ /* @__PURE__ */ jsx23("div", { className: "text-xs text-gray-600", children: "Store encrypted backup in cloud storage" })
7049
+ ] })
7050
+ ] }),
7051
+ cloudProviders.length > 1 && /* @__PURE__ */ jsx23("div", { className: "mb-3", children: /* @__PURE__ */ jsx23(
7052
+ "select",
7053
+ {
7054
+ value: selectedCloudProvider || "",
7055
+ onChange: (e) => setSelectedCloudProvider(e.target.value),
7056
+ className: "text-sm border rounded px-2 py-1 w-full",
7057
+ children: cloudProviders.map((provider) => /* @__PURE__ */ jsxs15("option", { value: provider.id, disabled: !provider.available, children: [
7058
+ provider.name,
7059
+ " ",
7060
+ provider.available ? "" : "(Not Available)"
7061
+ ] }, provider.id))
7062
+ }
7063
+ ) }),
7064
+ /* @__PURE__ */ jsx23(
7065
+ Button,
7066
+ {
7067
+ onClick: () => handleBackup("cloud"),
7068
+ disabled: loading.cloud || useCustomPassword && !customPassword || !hasKeyshareData || cloudProviders.length === 0,
7069
+ className: "px-4 py-2",
7070
+ children: loading.cloud ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
7071
+ }
7072
+ ),
7073
+ /* @__PURE__ */ jsx23("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)}` })
7074
+ ] }),
7075
+ /* @__PURE__ */ jsxs15("div", { className: "p-4 rounded-lg border border-purple-200 bg-purple-50/50", children: [
7076
+ /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-3 mb-3", children: [
7077
+ /* @__PURE__ */ jsx23(Download2, { className: "h-5 w-5 text-purple-600" }),
7078
+ /* @__PURE__ */ jsxs15("div", { children: [
7079
+ /* @__PURE__ */ jsx23("div", { className: "font-medium text-sm", children: "File Backup" }),
7080
+ /* @__PURE__ */ jsx23("div", { className: "text-xs text-gray-600", children: "Download encrypted backup file to your device" })
7081
+ ] })
7082
+ ] }),
7083
+ /* @__PURE__ */ jsx23(
7084
+ Button,
7085
+ {
7086
+ onClick: () => handleBackup("local"),
7087
+ disabled: loading.local || useCustomPassword && !customPassword || !hasKeyshareData,
7088
+ className: "w-full",
7089
+ children: loading.local ? "Creating..." : useCustomPassword ? "Create & Download" : "Create & Download with Passkey"
7090
+ }
7091
+ ),
7092
+ /* @__PURE__ */ jsxs15("div", { className: "text-xs text-gray-600 mt-2", children: [
7093
+ "Download encrypted backup file to your device \u2022 Last: ",
7094
+ formatLastBackup(backupStatus.local.lastBackup)
7095
+ ] })
7096
+ ] })
7097
+ ] }),
7098
+ /* @__PURE__ */ jsxs15("div", { className: "flex items-start gap-2 p-3 bg-amber-50 border border-amber-200 rounded text-amber-800 text-xs", children: [
7099
+ /* @__PURE__ */ jsx23(Lock2, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
7100
+ /* @__PURE__ */ jsxs15("div", { children: [
7101
+ /* @__PURE__ */ jsx23("div", { className: "font-medium", children: "Security Notice" }),
7102
+ /* @__PURE__ */ jsxs15("div", { className: "mt-1", children: [
7103
+ useCustomPassword ? /* @__PURE__ */ jsx23(Fragment6, { children: "All backups are encrypted with AES-256 using your custom password. Store your password securely - without it, backups cannot be restored." }) : /* @__PURE__ */ jsx23(Fragment6, { children: "All backups are encrypted with AES-256 using your passkey. Your passkey authenticator (device/biometrics) is required to restore backups." }),
7104
+ " ",
7105
+ "Without backup access, you cannot recover your smart account if you lose this device."
7106
+ ] })
7107
+ ] })
7108
+ ] })
7109
+ ] })
7110
+ ] });
7111
+ }
7112
+
7113
+ // src/internal/components/TransactionsModal.tsx
7114
+ import React20 from "react";
7115
+ init_base();
7116
+ import { Activity, ArrowUpRight, ArrowDownRight, CheckCircle2 as CheckCircle25, XCircle, ArrowLeft as ArrowLeft5, RefreshCw as RefreshCw3 } from "lucide-react";
7117
+ import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
7118
+ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
7119
+ const { address } = useLumiaSession();
7120
+ const [transactions, setTransactions] = React20.useState([]);
7121
+ const [loading, setLoading] = React20.useState(false);
7122
+ const [error, setError] = React20.useState(null);
7123
+ const { config } = useLumiaPassportConfig();
7124
+ const { isDark, classes: theme } = useTheme(config.ui.theme);
7125
+ const loadTransactions = React20.useCallback(async () => {
7126
+ if (!address) return;
7127
+ setLoading(true);
7128
+ setError(null);
7129
+ try {
7130
+ const explorerUrl = getExplorerUrl();
7131
+ const baseUrl = explorerUrl.replace(/\/$/, "");
7132
+ const apiUrl = `${baseUrl}/api/v2/addresses/${address}/transactions?items_count=20`;
7133
+ const response = await fetch(apiUrl);
7134
+ if (!response.ok) {
7135
+ throw new Error(`Failed to fetch transactions: ${response.status}`);
7136
+ }
7137
+ const data = await response.json();
7138
+ setTransactions(data.items || []);
7139
+ } catch (error2) {
7140
+ console.error("Failed to load transactions:", error2);
7141
+ setError(error2 instanceof Error ? error2.message : "Failed to load transactions");
7142
+ } finally {
7143
+ setLoading(false);
7144
+ }
7145
+ }, [address]);
7146
+ React20.useEffect(() => {
7147
+ if (open && address && !loading && transactions.length === 0) {
7148
+ loadTransactions();
7149
+ }
7150
+ }, [open]);
7151
+ const formatAddress = (addr) => {
7152
+ return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
7153
+ };
7154
+ const formatTime = (timestamp) => {
7155
+ return new Date(timestamp).toLocaleString();
7156
+ };
7157
+ const formatValue = (value) => {
7158
+ try {
7159
+ const wei = BigInt(value);
7160
+ const eth = Number(wei) / 1e18;
7161
+ return eth.toFixed(4);
7162
+ } catch {
7163
+ return "0.0000";
7164
+ }
7165
+ };
7166
+ const getStatusIcon = (status) => {
7167
+ return status === "ok" ? /* @__PURE__ */ jsx24(CheckCircle25, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsx24(XCircle, { className: "w-4 h-4 text-red-500" });
7168
+ };
7169
+ const getTransactionIcon = (from, to) => {
7170
+ const isIncoming = to.toLowerCase() === address?.toLowerCase();
7171
+ return isIncoming ? /* @__PURE__ */ jsx24(ArrowDownRight, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsx24(ArrowUpRight, { className: "w-4 h-4 text-blue-500" });
7172
+ };
7173
+ const openInExplorer = (txHash) => {
7174
+ const explorerUrl = getExplorerUrl();
7175
+ window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
7176
+ };
7177
+ return /* @__PURE__ */ jsx24(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs16(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: [
7178
+ /* @__PURE__ */ jsx24(VisuallyHidden, { children: /* @__PURE__ */ jsx24(DialogTitle, { children: "Transaction History" }) }),
7179
+ /* @__PURE__ */ jsx24(DialogDescription, { className: "sr-only", children: "View your transaction history" }),
7180
+ /* @__PURE__ */ jsx24("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
7181
+ onBack && /* @__PURE__ */ jsx24(
7182
+ "button",
7183
+ {
6565
7184
  onClick: onBack,
6566
7185
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
6567
7186
  title: "Back",
6568
- children: /* @__PURE__ */ jsx23(ArrowLeft5, { className: "h-4 w-4" })
7187
+ children: /* @__PURE__ */ jsx24(ArrowLeft5, { className: "h-4 w-4" })
6569
7188
  }
6570
7189
  ),
6571
- /* @__PURE__ */ jsxs15("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
6572
- /* @__PURE__ */ jsx23(Activity, { className: "h-5 w-5" }),
6573
- /* @__PURE__ */ jsx23("span", { children: "Transaction History" }),
6574
- /* @__PURE__ */ jsx23(
7190
+ /* @__PURE__ */ jsxs16("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7191
+ /* @__PURE__ */ jsx24(Activity, { className: "h-5 w-5" }),
7192
+ /* @__PURE__ */ jsx24("span", { children: "Transaction History" }),
7193
+ /* @__PURE__ */ jsx24(
6575
7194
  "button",
6576
7195
  {
6577
7196
  onClick: loadTransactions,
6578
7197
  disabled: loading,
6579
7198
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1`,
6580
7199
  title: "Refresh transactions",
6581
- children: /* @__PURE__ */ jsx23(RefreshCw3, { className: `h-4 w-4 ${loading ? "animate-spin" : ""}` })
7200
+ children: /* @__PURE__ */ jsx24(RefreshCw3, { className: `h-4 w-4 ${loading ? "animate-spin" : ""}` })
6582
7201
  }
6583
7202
  )
6584
7203
  ] })
6585
7204
  ] }) }),
6586
- /* @__PURE__ */ jsx23("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: loading ? /* @__PURE__ */ jsx23("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsx23("div", { className: `${theme.mutedText}`, children: "Loading transactions..." }) }) : error ? /* @__PURE__ */ jsxs15("div", { className: `flex flex-col items-center justify-center py-8 ${isDark ? "text-red-400" : "text-red-500"}`, children: [
6587
- /* @__PURE__ */ jsx23(XCircle, { className: "w-12 h-12 mb-2" }),
6588
- /* @__PURE__ */ jsx23("p", { className: "text-center text-sm", children: error })
6589
- ] }) : transactions.length === 0 ? /* @__PURE__ */ jsxs15("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
6590
- /* @__PURE__ */ jsx23(Activity, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
6591
- /* @__PURE__ */ jsxs15("p", { className: "text-center", children: [
7205
+ /* @__PURE__ */ jsx24("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: loading ? /* @__PURE__ */ jsx24("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsx24("div", { className: `${theme.mutedText}`, children: "Loading transactions..." }) }) : error ? /* @__PURE__ */ jsxs16("div", { className: `flex flex-col items-center justify-center py-8 ${isDark ? "text-red-400" : "text-red-500"}`, children: [
7206
+ /* @__PURE__ */ jsx24(XCircle, { className: "w-12 h-12 mb-2" }),
7207
+ /* @__PURE__ */ jsx24("p", { className: "text-center text-sm", children: error })
7208
+ ] }) : transactions.length === 0 ? /* @__PURE__ */ jsxs16("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
7209
+ /* @__PURE__ */ jsx24(Activity, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
7210
+ /* @__PURE__ */ jsxs16("p", { className: "text-center", children: [
6592
7211
  "No transactions found",
6593
- /* @__PURE__ */ jsx23("br", {}),
6594
- /* @__PURE__ */ jsx23("span", { className: "text-xs mt-2", children: "Smart account transactions will appear here" })
7212
+ /* @__PURE__ */ jsx24("br", {}),
7213
+ /* @__PURE__ */ jsx24("span", { className: "text-xs mt-2", children: "Smart account transactions will appear here" })
6595
7214
  ] })
6596
- ] }) : /* @__PURE__ */ jsx23("div", { className: "space-y-3", children: transactions.map((tx) => {
7215
+ ] }) : /* @__PURE__ */ jsx24("div", { className: "space-y-3", children: transactions.map((tx) => {
6597
7216
  const isIncoming = tx.to.hash.toLowerCase() === address?.toLowerCase();
6598
7217
  const displayAddress = isIncoming ? tx.from.hash : tx.to.hash;
6599
- return /* @__PURE__ */ jsxs15(
7218
+ return /* @__PURE__ */ jsxs16(
6600
7219
  "div",
6601
7220
  {
6602
7221
  className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors cursor-pointer`,
6603
7222
  onClick: () => openInExplorer(tx.hash),
6604
7223
  children: [
6605
- /* @__PURE__ */ jsxs15("div", { className: "flex items-center justify-between mb-2", children: [
6606
- /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
7224
+ /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between mb-2", children: [
7225
+ /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
6607
7226
  getTransactionIcon(tx.from.hash, tx.to.hash),
6608
- /* @__PURE__ */ jsx23("span", { className: `font-medium ${theme.titleText}`, children: isIncoming ? "Received" : "Sent" }),
7227
+ /* @__PURE__ */ jsx24("span", { className: `font-medium ${theme.titleText}`, children: isIncoming ? "Received" : "Sent" }),
6609
7228
  getStatusIcon(tx.status)
6610
7229
  ] }),
6611
- /* @__PURE__ */ jsx23("div", { className: `text-xs ${theme.mutedText}`, children: formatTime(tx.timestamp) })
7230
+ /* @__PURE__ */ jsx24("div", { className: `text-xs ${theme.mutedText}`, children: formatTime(tx.timestamp) })
6612
7231
  ] }),
6613
- /* @__PURE__ */ jsxs15("div", { className: "space-y-1 text-sm", children: [
6614
- /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
6615
- /* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: isIncoming ? "From:" : "To:" }),
6616
- /* @__PURE__ */ jsxs15("span", { className: `font-mono ${theme.titleText}`, children: [
7232
+ /* @__PURE__ */ jsxs16("div", { className: "space-y-1 text-sm", children: [
7233
+ /* @__PURE__ */ jsxs16("div", { className: "flex justify-between", children: [
7234
+ /* @__PURE__ */ jsx24("span", { className: `${theme.bodyText}`, children: isIncoming ? "From:" : "To:" }),
7235
+ /* @__PURE__ */ jsxs16("span", { className: `font-mono ${theme.titleText}`, children: [
6617
7236
  formatAddress(displayAddress),
6618
- (isIncoming ? tx.from.is_contract : tx.to.is_contract) && /* @__PURE__ */ jsx23("span", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} ml-1`, children: "(Contract)" })
7237
+ (isIncoming ? tx.from.is_contract : tx.to.is_contract) && /* @__PURE__ */ jsx24("span", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} ml-1`, children: "(Contract)" })
6619
7238
  ] })
6620
7239
  ] }),
6621
- /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
6622
- /* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: "Value:" }),
6623
- /* @__PURE__ */ jsxs15("span", { className: `font-semibold ${theme.titleText}`, children: [
7240
+ /* @__PURE__ */ jsxs16("div", { className: "flex justify-between", children: [
7241
+ /* @__PURE__ */ jsx24("span", { className: `${theme.bodyText}`, children: "Value:" }),
7242
+ /* @__PURE__ */ jsxs16("span", { className: `font-semibold ${theme.titleText}`, children: [
6624
7243
  formatValue(tx.value),
6625
7244
  " LUMIA"
6626
7245
  ] })
6627
7246
  ] }),
6628
- /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
6629
- /* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: "Block:" }),
6630
- /* @__PURE__ */ jsxs15("span", { className: `font-mono ${theme.titleText}`, children: [
7247
+ /* @__PURE__ */ jsxs16("div", { className: "flex justify-between", children: [
7248
+ /* @__PURE__ */ jsx24("span", { className: `${theme.bodyText}`, children: "Block:" }),
7249
+ /* @__PURE__ */ jsxs16("span", { className: `font-mono ${theme.titleText}`, children: [
6631
7250
  "#",
6632
7251
  tx.block_number
6633
7252
  ] })
6634
7253
  ] }),
6635
- tx.method && /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
6636
- /* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: "Method:" }),
6637
- /* @__PURE__ */ jsx23("span", { className: `${isDark ? "text-blue-400" : "text-blue-600"} text-xs`, children: tx.method })
7254
+ tx.method && /* @__PURE__ */ jsxs16("div", { className: "flex justify-between", children: [
7255
+ /* @__PURE__ */ jsx24("span", { className: `${theme.bodyText}`, children: "Method:" }),
7256
+ /* @__PURE__ */ jsx24("span", { className: `${isDark ? "text-blue-400" : "text-blue-600"} text-xs`, children: tx.method })
6638
7257
  ] }),
6639
- tx.transaction_types && tx.transaction_types.length > 0 && /* @__PURE__ */ jsx23("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ jsx23(
7258
+ tx.transaction_types && tx.transaction_types.length > 0 && /* @__PURE__ */ jsx24("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ jsx24(
6640
7259
  "span",
6641
7260
  {
6642
7261
  className: `text-xs ${isDark ? "bg-blue-900/30 text-blue-300" : "bg-blue-100 text-blue-800"} px-2 py-0.5 rounded-full`,
@@ -6650,7 +7269,7 @@ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
6650
7269
  tx.hash
6651
7270
  );
6652
7271
  }) }) }),
6653
- transactions.length > 0 && /* @__PURE__ */ jsx23("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ jsxs15("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
7272
+ transactions.length > 0 && /* @__PURE__ */ jsx24("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ jsxs16("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
6654
7273
  "Total: ",
6655
7274
  transactions.length,
6656
7275
  " transaction",
@@ -6660,11 +7279,11 @@ var TransactionsModal = ({ open, onOpenChange, onBack }) => {
6660
7279
  };
6661
7280
 
6662
7281
  // src/internal/components/ViewAssetsModal.tsx
6663
- import React21 from "react";
7282
+ import React22 from "react";
6664
7283
 
6665
7284
  // src/modules/assets.ts
6666
7285
  init_base();
6667
- import React20 from "react";
7286
+ import React21 from "react";
6668
7287
  import { useBalance, useReadContract, useReadContracts } from "wagmi";
6669
7288
  import { formatUnits, erc20Abi } from "viem";
6670
7289
  var COMMON_TOKENS = [
@@ -6810,7 +7429,7 @@ function useTokenBalance(tokenAddress, userAddress) {
6810
7429
  }
6811
7430
  });
6812
7431
  const { tokenInfo } = useTokenInfo(tokenAddress);
6813
- const formattedBalance = React20.useMemo(() => {
7432
+ const formattedBalance = React21.useMemo(() => {
6814
7433
  if (!balance || !tokenInfo) return "0";
6815
7434
  return formatUnits(balance, tokenInfo.decimals);
6816
7435
  }, [balance, tokenInfo]);
@@ -6826,11 +7445,11 @@ function useTokenBalance(tokenAddress, userAddress) {
6826
7445
  // src/internal/components/ViewAssetsModal.tsx
6827
7446
  init_base();
6828
7447
  import { Gem, RefreshCw as RefreshCw4, Copy, ExternalLink as ExternalLink2, ArrowLeft as ArrowLeft6 } from "lucide-react";
6829
- import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
7448
+ import { jsx as jsx25, jsxs as jsxs17 } from "react/jsx-runtime";
6830
7449
  var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
6831
7450
  const { address } = useLumiaSession();
6832
7451
  const { assets, refreshBalances, isLoading } = useAssets(address);
6833
- const [copied, setCopied] = React21.useState(null);
7452
+ const [copied, setCopied] = React22.useState(null);
6834
7453
  const { config } = useLumiaPassportConfig();
6835
7454
  const { isDark, classes: theme } = useTheme(config.ui.theme);
6836
7455
  const handleCopy = async (text, type) => {
@@ -6845,107 +7464,107 @@ var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
6845
7464
  const openInExplorer = (address2) => {
6846
7465
  window.open(`${LUMIA_EXPLORER_URL}/address/${address2}`, "_blank");
6847
7466
  };
6848
- return /* @__PURE__ */ jsx24(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs16(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: [
6849
- /* @__PURE__ */ jsx24(VisuallyHidden, { children: /* @__PURE__ */ jsx24(DialogTitle, { children: "View Assets" }) }),
6850
- /* @__PURE__ */ jsx24(DialogDescription, { className: "sr-only", children: "View your token balances and assets" }),
6851
- /* @__PURE__ */ jsx24("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
6852
- onBack && /* @__PURE__ */ jsx24(
7467
+ return /* @__PURE__ */ jsx25(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs17(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: [
7468
+ /* @__PURE__ */ jsx25(VisuallyHidden, { children: /* @__PURE__ */ jsx25(DialogTitle, { children: "View Assets" }) }),
7469
+ /* @__PURE__ */ jsx25(DialogDescription, { className: "sr-only", children: "View your token balances and assets" }),
7470
+ /* @__PURE__ */ jsx25("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-2", children: [
7471
+ onBack && /* @__PURE__ */ jsx25(
6853
7472
  "button",
6854
7473
  {
6855
7474
  onClick: onBack,
6856
7475
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
6857
7476
  title: "Back",
6858
- children: /* @__PURE__ */ jsx24(ArrowLeft6, { className: "h-4 w-4" })
7477
+ children: /* @__PURE__ */ jsx25(ArrowLeft6, { className: "h-4 w-4" })
6859
7478
  }
6860
7479
  ),
6861
- /* @__PURE__ */ jsxs16("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
6862
- /* @__PURE__ */ jsx24(Gem, { className: "h-5 w-5" }),
6863
- /* @__PURE__ */ jsx24("span", { children: "Your Assets" }),
6864
- /* @__PURE__ */ jsx24(
7480
+ /* @__PURE__ */ jsxs17("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7481
+ /* @__PURE__ */ jsx25(Gem, { className: "h-5 w-5" }),
7482
+ /* @__PURE__ */ jsx25("span", { children: "Your Assets" }),
7483
+ /* @__PURE__ */ jsx25(
6865
7484
  "button",
6866
7485
  {
6867
7486
  onClick: refreshBalances,
6868
7487
  disabled: isLoading,
6869
7488
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1`,
6870
7489
  title: "Refresh balances",
6871
- children: /* @__PURE__ */ jsx24(RefreshCw4, { className: `h-4 w-4 ${isLoading ? "animate-spin" : ""}` })
7490
+ children: /* @__PURE__ */ jsx25(RefreshCw4, { className: `h-4 w-4 ${isLoading ? "animate-spin" : ""}` })
6872
7491
  }
6873
7492
  )
6874
7493
  ] })
6875
7494
  ] }) }),
6876
- /* @__PURE__ */ jsx24("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: isLoading ? /* @__PURE__ */ jsx24("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsx24("div", { className: `${theme.mutedText}`, children: "Loading assets..." }) }) : assets.length === 0 ? /* @__PURE__ */ jsxs16("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
6877
- /* @__PURE__ */ jsx24(Gem, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
6878
- /* @__PURE__ */ jsx24("p", { children: "No assets found" })
6879
- ] }) : /* @__PURE__ */ jsx24("div", { className: "space-y-3", children: assets.map((asset, index) => /* @__PURE__ */ jsxs16("div", { className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors`, children: [
6880
- /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between mb-2", children: [
6881
- /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
6882
- /* @__PURE__ */ jsx24("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__ */ jsx24("span", { className: "text-white font-bold text-sm", children: asset.symbol.charAt(0) }) }),
6883
- /* @__PURE__ */ jsxs16("div", { children: [
6884
- /* @__PURE__ */ jsx24("div", { className: `font-medium ${theme.titleText}`, children: asset.name }),
6885
- /* @__PURE__ */ jsx24("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
7495
+ /* @__PURE__ */ jsx25("div", { className: "p-5 max-h-[60vh] overflow-y-auto", children: isLoading ? /* @__PURE__ */ jsx25("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsx25("div", { className: `${theme.mutedText}`, children: "Loading assets..." }) }) : assets.length === 0 ? /* @__PURE__ */ jsxs17("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
7496
+ /* @__PURE__ */ jsx25(Gem, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
7497
+ /* @__PURE__ */ jsx25("p", { children: "No assets found" })
7498
+ ] }) : /* @__PURE__ */ jsx25("div", { className: "space-y-3", children: assets.map((asset, index) => /* @__PURE__ */ jsxs17("div", { className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors`, children: [
7499
+ /* @__PURE__ */ jsxs17("div", { className: "flex items-center justify-between mb-2", children: [
7500
+ /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-3", children: [
7501
+ /* @__PURE__ */ jsx25("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__ */ jsx25("span", { className: "text-white font-bold text-sm", children: asset.symbol.charAt(0) }) }),
7502
+ /* @__PURE__ */ jsxs17("div", { children: [
7503
+ /* @__PURE__ */ jsx25("div", { className: `font-medium ${theme.titleText}`, children: asset.name }),
7504
+ /* @__PURE__ */ jsx25("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
6886
7505
  ] })
6887
7506
  ] }),
6888
- /* @__PURE__ */ jsxs16("div", { className: "text-right", children: [
6889
- /* @__PURE__ */ jsx24("div", { className: `font-mono ${theme.titleText}`, children: asset.formattedBalance }),
6890
- /* @__PURE__ */ jsx24("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
7507
+ /* @__PURE__ */ jsxs17("div", { className: "text-right", children: [
7508
+ /* @__PURE__ */ jsx25("div", { className: `font-mono ${theme.titleText}`, children: asset.formattedBalance }),
7509
+ /* @__PURE__ */ jsx25("div", { className: `text-sm ${theme.mutedText}`, children: asset.symbol })
6891
7510
  ] })
6892
7511
  ] }),
6893
- asset.address && /* @__PURE__ */ jsxs16("div", { className: `space-y-2 mt-3 pt-3 border-t ${theme.divider}`, children: [
6894
- /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between text-sm", children: [
6895
- /* @__PURE__ */ jsx24("span", { className: `${theme.bodyText}`, children: "Contract Address:" }),
6896
- /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
6897
- /* @__PURE__ */ jsx24("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${asset.address.slice(0, 6)}...${asset.address.slice(-4)}` }),
6898
- /* @__PURE__ */ jsx24(
7512
+ asset.address && /* @__PURE__ */ jsxs17("div", { className: `space-y-2 mt-3 pt-3 border-t ${theme.divider}`, children: [
7513
+ /* @__PURE__ */ jsxs17("div", { className: "flex items-center justify-between text-sm", children: [
7514
+ /* @__PURE__ */ jsx25("span", { className: `${theme.bodyText}`, children: "Contract Address:" }),
7515
+ /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-2", children: [
7516
+ /* @__PURE__ */ jsx25("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${asset.address.slice(0, 6)}...${asset.address.slice(-4)}` }),
7517
+ /* @__PURE__ */ jsx25(
6899
7518
  "button",
6900
7519
  {
6901
7520
  onClick: () => handleCopy(asset.address, "address"),
6902
7521
  className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
6903
7522
  title: "Copy address",
6904
- children: copied === "address" ? /* @__PURE__ */ jsx24("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ jsx24(Copy, { className: "w-3 h-3" })
7523
+ children: copied === "address" ? /* @__PURE__ */ jsx25("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ jsx25(Copy, { className: "w-3 h-3" })
6905
7524
  }
6906
7525
  ),
6907
- /* @__PURE__ */ jsx24(
7526
+ /* @__PURE__ */ jsx25(
6908
7527
  "button",
6909
7528
  {
6910
7529
  onClick: () => openInExplorer(asset.address),
6911
7530
  className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
6912
7531
  title: "View in explorer",
6913
- children: /* @__PURE__ */ jsx24(ExternalLink2, { className: "w-3 h-3" })
7532
+ children: /* @__PURE__ */ jsx25(ExternalLink2, { className: "w-3 h-3" })
6914
7533
  }
6915
7534
  )
6916
7535
  ] })
6917
7536
  ] }),
6918
- asset.decimals && /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between text-sm", children: [
6919
- /* @__PURE__ */ jsx24("span", { className: `${theme.bodyText}`, children: "Decimals:" }),
6920
- /* @__PURE__ */ jsx24("span", { className: `${theme.titleText}`, children: asset.decimals })
7537
+ asset.decimals && /* @__PURE__ */ jsxs17("div", { className: "flex items-center justify-between text-sm", children: [
7538
+ /* @__PURE__ */ jsx25("span", { className: `${theme.bodyText}`, children: "Decimals:" }),
7539
+ /* @__PURE__ */ jsx25("span", { className: `${theme.titleText}`, children: asset.decimals })
6921
7540
  ] })
6922
7541
  ] }),
6923
- asset.type === "native" && address && /* @__PURE__ */ jsx24("div", { className: "mt-3 pt-3 border-t border-gray-200", children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between text-sm", children: [
6924
- /* @__PURE__ */ jsx24("span", { className: `${theme.bodyText}`, children: "Your Address:" }),
6925
- /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
6926
- /* @__PURE__ */ jsx24("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${address.slice(0, 6)}...${address.slice(-4)}` }),
6927
- /* @__PURE__ */ jsx24(
7542
+ asset.type === "native" && address && /* @__PURE__ */ jsx25("div", { className: "mt-3 pt-3 border-t border-gray-200", children: /* @__PURE__ */ jsxs17("div", { className: "flex items-center justify-between text-sm", children: [
7543
+ /* @__PURE__ */ jsx25("span", { className: `${theme.bodyText}`, children: "Your Address:" }),
7544
+ /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-2", children: [
7545
+ /* @__PURE__ */ jsx25("span", { className: `font-mono ${theme.titleText} text-xs`, children: `${address.slice(0, 6)}...${address.slice(-4)}` }),
7546
+ /* @__PURE__ */ jsx25(
6928
7547
  "button",
6929
7548
  {
6930
7549
  onClick: () => handleCopy(address, "wallet"),
6931
7550
  className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
6932
7551
  title: "Copy wallet address",
6933
- children: copied === "wallet" ? /* @__PURE__ */ jsx24("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ jsx24(Copy, { className: "w-3 h-3" })
7552
+ children: copied === "wallet" ? /* @__PURE__ */ jsx25("span", { className: `${isDark ? "text-green-400" : "text-green-500"} text-xs`, children: "\u2713" }) : /* @__PURE__ */ jsx25(Copy, { className: "w-3 h-3" })
6934
7553
  }
6935
7554
  ),
6936
- /* @__PURE__ */ jsx24(
7555
+ /* @__PURE__ */ jsx25(
6937
7556
  "button",
6938
7557
  {
6939
7558
  onClick: () => openInExplorer(address),
6940
7559
  className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
6941
7560
  title: "View in explorer",
6942
- children: /* @__PURE__ */ jsx24(ExternalLink2, { className: "w-3 h-3" })
7561
+ children: /* @__PURE__ */ jsx25(ExternalLink2, { className: "w-3 h-3" })
6943
7562
  }
6944
7563
  )
6945
7564
  ] })
6946
7565
  ] }) })
6947
7566
  ] }, `${asset.type}-${asset.address || "native"}-${index}`)) }) }),
6948
- assets.length > 0 && /* @__PURE__ */ jsx24("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ jsxs16("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
7567
+ assets.length > 0 && /* @__PURE__ */ jsx25("div", { className: `p-5 border-t ${theme.divider}`, children: /* @__PURE__ */ jsxs17("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
6949
7568
  "Total: ",
6950
7569
  assets.length,
6951
7570
  " asset",
@@ -6955,18 +7574,18 @@ var ViewAssetsModal = ({ open, onOpenChange, onBack }) => {
6955
7574
  };
6956
7575
 
6957
7576
  // src/internal/components/SendModal.tsx
6958
- import { useState as useState12, useEffect as useEffect9 } from "react";
6959
- import { Send, ArrowLeft as ArrowLeft7, Loader2, CheckCircle2 as CheckCircle26, AlertCircle as AlertCircle4 } from "lucide-react";
7577
+ import { useState as useState13, useEffect as useEffect10 } from "react";
7578
+ import { Send, ArrowLeft as ArrowLeft7, Loader2, CheckCircle2 as CheckCircle27, AlertCircle as AlertCircle5 } from "lucide-react";
6960
7579
 
6961
7580
  // src/hooks/useSendTransaction.ts
6962
- import { useState as useState9, useCallback as useCallback3 } from "react";
7581
+ import { useState as useState10, useCallback as useCallback4 } from "react";
6963
7582
  import { parseEther as parseEther2, isAddress } from "viem";
6964
7583
  function useSendTransaction() {
6965
7584
  const { session, address } = useLumiaSession();
6966
- const [isLoading, setIsLoading] = useState9(false);
6967
- const [error, setError] = useState9(null);
6968
- const [userOpHash, setUserOpHash] = useState9(null);
6969
- const sendTransaction = useCallback3(async (params) => {
7585
+ const [isLoading, setIsLoading] = useState10(false);
7586
+ const [error, setError] = useState10(null);
7587
+ const [userOpHash, setUserOpHash] = useState10(null);
7588
+ const sendTransaction = useCallback4(async (params) => {
6970
7589
  if (!session || !address) {
6971
7590
  setError("No active session");
6972
7591
  return null;
@@ -7003,7 +7622,7 @@ function useSendTransaction() {
7003
7622
  setIsLoading(false);
7004
7623
  }
7005
7624
  }, [session, address]);
7006
- const reset = useCallback3(() => {
7625
+ const reset = useCallback4(() => {
7007
7626
  setError(null);
7008
7627
  setUserOpHash(null);
7009
7628
  setIsLoading(false);
@@ -7022,8 +7641,8 @@ import { isAddress as isAddress2 } from "viem";
7022
7641
  import { useBalance as useBalance2 } from "wagmi";
7023
7642
 
7024
7643
  // src/internal/components/UserOpStatus.tsx
7025
- import * as React23 from "react";
7026
- import { AlertCircle as AlertCircle3, CheckCircle2 as CheckCircle25, Clock as Clock3, Copy as Copy3, ExternalLink as ExternalLink4, RefreshCw as RefreshCw5 } from "lucide-react";
7644
+ import * as React24 from "react";
7645
+ import { AlertCircle as AlertCircle4, CheckCircle2 as CheckCircle26, Clock as Clock3, Copy as Copy3, ExternalLink as ExternalLink4, RefreshCw as RefreshCw5 } from "lucide-react";
7027
7646
 
7028
7647
  // src/internal/components/ui/badge.tsx
7029
7648
  import { cva as cva2 } from "class-variance-authority";
@@ -7036,7 +7655,7 @@ function cn2(...inputs) {
7036
7655
  }
7037
7656
 
7038
7657
  // src/internal/components/ui/badge.tsx
7039
- import { jsx as jsx25 } from "react/jsx-runtime";
7658
+ import { jsx as jsx26 } from "react/jsx-runtime";
7040
7659
  var badgeVariants = cva2(
7041
7660
  "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",
7042
7661
  {
@@ -7056,13 +7675,13 @@ var badgeVariants = cva2(
7056
7675
  }
7057
7676
  );
7058
7677
  function Badge({ className, variant, ...props }) {
7059
- return /* @__PURE__ */ jsx25("div", { className: cn2(badgeVariants({ variant }), className), ...props });
7678
+ return /* @__PURE__ */ jsx26("div", { className: cn2(badgeVariants({ variant }), className), ...props });
7060
7679
  }
7061
7680
 
7062
7681
  // src/internal/components/Address.tsx
7063
- import * as React22 from "react";
7682
+ import * as React23 from "react";
7064
7683
  import { Copy as Copy2, ExternalLink as ExternalLink3 } from "lucide-react";
7065
- import { jsx as jsx26, jsxs as jsxs17 } from "react/jsx-runtime";
7684
+ import { jsx as jsx27, jsxs as jsxs18 } from "react/jsx-runtime";
7066
7685
  function toExplorerAddressUrl(address, chain) {
7067
7686
  const base2 = chain?.blockExplorers?.default?.url;
7068
7687
  if (!base2) return null;
@@ -7083,12 +7702,12 @@ var Address = ({
7083
7702
  }) => {
7084
7703
  const addr = address || "";
7085
7704
  const explorer = toExplorerAddressUrl(addr, chain || void 0);
7086
- const [copied, setCopied] = React22.useState(false);
7087
- if (!addr) return /* @__PURE__ */ jsx26("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
7088
- return /* @__PURE__ */ jsxs17("div", { className: cn2("flex items-center gap-2", className), style: { listStyle: "none" }, children: [
7089
- label && /* @__PURE__ */ jsx26("span", { className: "text-sm font-medium", children: label }),
7090
- /* @__PURE__ */ jsx26("code", { className: "text-xs bg-background px-2 py-1 rounded select-all", children: truncate ? short(addr) : addr }),
7091
- showCopy && /* @__PURE__ */ jsx26(
7705
+ const [copied, setCopied] = React23.useState(false);
7706
+ if (!addr) return /* @__PURE__ */ jsx27("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
7707
+ return /* @__PURE__ */ jsxs18("div", { className: cn2("flex items-center gap-2", className), style: { listStyle: "none" }, children: [
7708
+ label && /* @__PURE__ */ jsx27("span", { className: "text-sm font-medium", children: label }),
7709
+ /* @__PURE__ */ jsx27("code", { className: "text-xs bg-background px-2 py-1 rounded select-all", children: truncate ? short(addr) : addr }),
7710
+ showCopy && /* @__PURE__ */ jsx27(
7092
7711
  Button,
7093
7712
  {
7094
7713
  variant: "ghost",
@@ -7102,10 +7721,10 @@ var Address = ({
7102
7721
  } catch {
7103
7722
  }
7104
7723
  },
7105
- children: /* @__PURE__ */ jsx26(Copy2, { className: "h-4 w-4" })
7724
+ children: /* @__PURE__ */ jsx27(Copy2, { className: "h-4 w-4" })
7106
7725
  }
7107
7726
  ),
7108
- showExplorer && explorer && /* @__PURE__ */ jsx26(
7727
+ showExplorer && explorer && /* @__PURE__ */ jsx27(
7109
7728
  "a",
7110
7729
  {
7111
7730
  href: explorer,
@@ -7113,7 +7732,7 @@ var Address = ({
7113
7732
  rel: "noreferrer noopener",
7114
7733
  className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
7115
7734
  title: "Open in explorer",
7116
- children: /* @__PURE__ */ jsx26(ExternalLink3, { className: "h-4 w-4" })
7735
+ children: /* @__PURE__ */ jsx27(ExternalLink3, { className: "h-4 w-4" })
7117
7736
  }
7118
7737
  )
7119
7738
  ] });
@@ -7121,7 +7740,7 @@ var Address = ({
7121
7740
 
7122
7741
  // src/internal/components/UserOpStatus.tsx
7123
7742
  init_base();
7124
- import { jsx as jsx27, jsxs as jsxs18 } from "react/jsx-runtime";
7743
+ import { jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
7125
7744
  var UserOpStatus = ({
7126
7745
  userOpHash,
7127
7746
  chain,
@@ -7132,20 +7751,20 @@ var UserOpStatus = ({
7132
7751
  externalState
7133
7752
  }) => {
7134
7753
  const useExternalState = !!externalState;
7135
- const [internalReceipt, setInternalReceipt] = React23.useState(null);
7136
- const [internalMempool, setInternalMempool] = React23.useState(null);
7137
- const [internalError, setInternalError] = React23.useState(null);
7138
- const [attempt, setAttempt] = React23.useState(0);
7139
- const [internalRefreshing, setInternalRefreshing] = React23.useState(false);
7140
- const [timedOut, setTimedOut] = React23.useState(false);
7141
- const [rejected, setRejected] = React23.useState(false);
7142
- const intervalRef = React23.useRef(null);
7143
- const startTimeRef = React23.useRef(Date.now());
7754
+ const [internalReceipt, setInternalReceipt] = React24.useState(null);
7755
+ const [internalMempool, setInternalMempool] = React24.useState(null);
7756
+ const [internalError, setInternalError] = React24.useState(null);
7757
+ const [attempt, setAttempt] = React24.useState(0);
7758
+ const [internalRefreshing, setInternalRefreshing] = React24.useState(false);
7759
+ const [timedOut, setTimedOut] = React24.useState(false);
7760
+ const [rejected, setRejected] = React24.useState(false);
7761
+ const intervalRef = React24.useRef(null);
7762
+ const startTimeRef = React24.useRef(Date.now());
7144
7763
  const receipt = useExternalState ? externalState.receipt ?? null : internalReceipt;
7145
7764
  const mempool = useExternalState ? externalState.mempool ?? null : internalMempool;
7146
7765
  const error = useExternalState ? externalState.error ?? null : internalError;
7147
7766
  const refreshing = useExternalState ? externalState.isPolling ?? false : internalRefreshing;
7148
- const rpc = React23.useCallback(async (method, params) => {
7767
+ const rpc = React24.useCallback(async (method, params) => {
7149
7768
  const body = { jsonrpc: "2.0", id: 1, method, params };
7150
7769
  const res = await fetch(getBundlerUrl(), {
7151
7770
  method: "POST",
@@ -7156,14 +7775,14 @@ var UserOpStatus = ({
7156
7775
  if (json.error) throw new Error(json.error.message || JSON.stringify(json.error));
7157
7776
  return json.result;
7158
7777
  }, []);
7159
- const extractMempoolInfo = React23.useCallback((m) => {
7778
+ const extractMempoolInfo = React24.useCallback((m) => {
7160
7779
  if (!m) return null;
7161
7780
  const entryPoint = m.entryPoint || m?.userOperation?.entryPoint || null;
7162
7781
  const sender = m.sender || m?.userOperation?.sender || null;
7163
7782
  if (!entryPoint && !sender) return null;
7164
7783
  return { entryPoint, sender };
7165
7784
  }, []);
7166
- const tick = React23.useCallback(async () => {
7785
+ const tick = React24.useCallback(async () => {
7167
7786
  if (useExternalState) return;
7168
7787
  const elapsed = Date.now() - startTimeRef.current;
7169
7788
  if (elapsed > maxPollTimeMs) {
@@ -7207,7 +7826,7 @@ var UserOpStatus = ({
7207
7826
  setAttempt((x) => x + 1);
7208
7827
  }
7209
7828
  }, [rpc, userOpHash, maxPollTimeMs, extractMempoolInfo, useExternalState]);
7210
- React23.useEffect(() => {
7829
+ React24.useEffect(() => {
7211
7830
  if (useExternalState) return;
7212
7831
  console.log("[UserOpStatus] Initializing polling for UserOp hash:", userOpHash);
7213
7832
  startTimeRef.current = Date.now();
@@ -7219,7 +7838,7 @@ var UserOpStatus = ({
7219
7838
  setAttempt(0);
7220
7839
  setInternalRefreshing(false);
7221
7840
  }, [userOpHash, useExternalState]);
7222
- React23.useEffect(() => {
7841
+ React24.useEffect(() => {
7223
7842
  if (useExternalState) {
7224
7843
  console.log("[UserOpStatus] Using external state, skipping internal polling");
7225
7844
  return;
@@ -7254,54 +7873,54 @@ var UserOpStatus = ({
7254
7873
  const stateBadge = () => {
7255
7874
  if (receipt) {
7256
7875
  const ok = !!receipt.success;
7257
- return /* @__PURE__ */ jsxs18(Badge, { variant: ok ? "success" : "destructive", className: "gap-1", children: [
7258
- ok ? /* @__PURE__ */ jsx27(CheckCircle25, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-3 w-3" }),
7876
+ return /* @__PURE__ */ jsxs19(Badge, { variant: ok ? "success" : "destructive", className: "gap-1", children: [
7877
+ ok ? /* @__PURE__ */ jsx28(CheckCircle26, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx28(AlertCircle4, { className: "h-3 w-3" }),
7259
7878
  ok ? "Included" : "Failed"
7260
7879
  ] });
7261
7880
  }
7262
7881
  if (rejected) {
7263
- return /* @__PURE__ */ jsxs18(Badge, { variant: "destructive", className: "gap-1", children: [
7264
- /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-3 w-3" }),
7882
+ return /* @__PURE__ */ jsxs19(Badge, { variant: "destructive", className: "gap-1", children: [
7883
+ /* @__PURE__ */ jsx28(AlertCircle4, { className: "h-3 w-3" }),
7265
7884
  " Rejected by bundler"
7266
7885
  ] });
7267
7886
  }
7268
7887
  if (timedOut) {
7269
- return /* @__PURE__ */ jsxs18(Badge, { variant: "warning", className: "gap-1", children: [
7270
- /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-3 w-3" }),
7888
+ return /* @__PURE__ */ jsxs19(Badge, { variant: "warning", className: "gap-1", children: [
7889
+ /* @__PURE__ */ jsx28(AlertCircle4, { className: "h-3 w-3" }),
7271
7890
  " Timeout - may be rejected"
7272
7891
  ] });
7273
7892
  }
7274
7893
  if (mempool) {
7275
- return /* @__PURE__ */ jsxs18(Badge, { variant: "outline", className: "gap-1", children: [
7276
- /* @__PURE__ */ jsx27(Clock3, { className: "h-3 w-3" }),
7894
+ return /* @__PURE__ */ jsxs19(Badge, { variant: "outline", className: "gap-1", children: [
7895
+ /* @__PURE__ */ jsx28(Clock3, { className: "h-3 w-3" }),
7277
7896
  " Pending in bundler"
7278
7897
  ] });
7279
7898
  }
7280
- return /* @__PURE__ */ jsxs18(Badge, { variant: "secondary", className: "gap-1", children: [
7281
- /* @__PURE__ */ jsx27(Clock3, { className: "h-3 w-3" }),
7899
+ return /* @__PURE__ */ jsxs19(Badge, { variant: "secondary", className: "gap-1", children: [
7900
+ /* @__PURE__ */ jsx28(Clock3, { className: "h-3 w-3" }),
7282
7901
  " Waiting"
7283
7902
  ] });
7284
7903
  };
7285
- return /* @__PURE__ */ jsxs18(
7904
+ return /* @__PURE__ */ jsxs19(
7286
7905
  "div",
7287
7906
  {
7288
7907
  className: cn2("lumia-scope bg-card text-card-foreground p-0 rounded-xl border border-border w-full max-w-[680px]", className),
7289
7908
  style: { textAlign: "left", listStyle: "none" },
7290
7909
  children: [
7291
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center justify-between mb-3", children: [
7292
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2", children: [
7910
+ /* @__PURE__ */ jsxs19("div", { className: "flex items-center justify-between mb-3", children: [
7911
+ /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2", children: [
7293
7912
  stateBadge(),
7294
- /* @__PURE__ */ jsx27("span", { className: "text-xs text-muted-foreground", children: "This is a UserOperation hash (EIP-4337), not a L2 tx hash." })
7913
+ /* @__PURE__ */ jsx28("span", { className: "text-xs text-muted-foreground", children: "This is a UserOperation hash (EIP-4337), not a L2 tx hash." })
7295
7914
  ] }),
7296
- /* @__PURE__ */ jsxs18(Button, { variant: "ghost", size: "sm", onClick: () => tick(), disabled: refreshing, className: "h-8", children: [
7297
- /* @__PURE__ */ jsx27(RefreshCw5, { className: cn2("h-3.5 w-3.5 mr-1", refreshing && "animate-spin") }),
7298
- /* @__PURE__ */ jsx27("span", { className: "text-xs", children: "Refresh" })
7915
+ /* @__PURE__ */ jsxs19(Button, { variant: "ghost", size: "sm", onClick: () => tick(), disabled: refreshing, className: "h-8", children: [
7916
+ /* @__PURE__ */ jsx28(RefreshCw5, { className: cn2("h-3.5 w-3.5 mr-1", refreshing && "animate-spin") }),
7917
+ /* @__PURE__ */ jsx28("span", { className: "text-xs", children: "Refresh" })
7299
7918
  ] })
7300
7919
  ] }),
7301
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2 mb-2", children: [
7302
- /* @__PURE__ */ jsx27("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "UO Hash" }),
7303
- /* @__PURE__ */ jsx27("code", { className: "text-xs font-mono flex-1 select-all", children: userOpHash }),
7304
- /* @__PURE__ */ jsx27(
7920
+ /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2 mb-2", children: [
7921
+ /* @__PURE__ */ jsx28("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "UO Hash" }),
7922
+ /* @__PURE__ */ jsx28("code", { className: "text-xs font-mono flex-1 select-all", children: userOpHash }),
7923
+ /* @__PURE__ */ jsx28(
7305
7924
  Button,
7306
7925
  {
7307
7926
  variant: "ghost",
@@ -7313,14 +7932,14 @@ var UserOpStatus = ({
7313
7932
  } catch {
7314
7933
  }
7315
7934
  },
7316
- children: /* @__PURE__ */ jsx27(Copy3, { className: "h-3.5 w-3.5" })
7935
+ children: /* @__PURE__ */ jsx28(Copy3, { className: "h-3.5 w-3.5" })
7317
7936
  }
7318
7937
  )
7319
7938
  ] }),
7320
- receipt && receipt.receipt?.transactionHash && /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2 mb-3", children: [
7321
- /* @__PURE__ */ jsx27("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "Tx Hash" }),
7322
- /* @__PURE__ */ jsx27("code", { className: "text-xs font-mono flex-1 select-all", children: receipt.receipt.transactionHash }),
7323
- /* @__PURE__ */ jsx27(
7939
+ receipt && receipt.receipt?.transactionHash && /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2 mb-3", children: [
7940
+ /* @__PURE__ */ jsx28("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "Tx Hash" }),
7941
+ /* @__PURE__ */ jsx28("code", { className: "text-xs font-mono flex-1 select-all", children: receipt.receipt.transactionHash }),
7942
+ /* @__PURE__ */ jsx28(
7324
7943
  Button,
7325
7944
  {
7326
7945
  variant: "ghost",
@@ -7332,10 +7951,10 @@ var UserOpStatus = ({
7332
7951
  } catch {
7333
7952
  }
7334
7953
  },
7335
- children: /* @__PURE__ */ jsx27(Copy3, { className: "h-3.5 w-3.5" })
7954
+ children: /* @__PURE__ */ jsx28(Copy3, { className: "h-3.5 w-3.5" })
7336
7955
  }
7337
7956
  ),
7338
- chain?.blockExplorers?.default?.url && /* @__PURE__ */ jsx27(
7957
+ chain?.blockExplorers?.default?.url && /* @__PURE__ */ jsx28(
7339
7958
  "a",
7340
7959
  {
7341
7960
  href: `${chain.blockExplorers.default.url}/tx/${receipt.receipt.transactionHash}`,
@@ -7343,11 +7962,11 @@ var UserOpStatus = ({
7343
7962
  rel: "noreferrer noopener",
7344
7963
  className: "inline-flex items-center justify-center h-8 w-8 rounded-md hover:bg-accent text-foreground",
7345
7964
  title: "Open in explorer",
7346
- children: /* @__PURE__ */ jsx27(ExternalLink4, { className: "h-3.5 w-3.5" })
7965
+ children: /* @__PURE__ */ jsx28(ExternalLink4, { className: "h-3.5 w-3.5" })
7347
7966
  }
7348
7967
  )
7349
7968
  ] }),
7350
- receipt && /* @__PURE__ */ jsxs18("div", { className: "text-xs text-muted-foreground mb-3", children: [
7969
+ receipt && /* @__PURE__ */ jsxs19("div", { className: "text-xs text-muted-foreground mb-3", children: [
7351
7970
  "Block ",
7352
7971
  parseInt(receipt.receipt?.blockNumber || "0x0", 16),
7353
7972
  " \u2022 Gas Used",
@@ -7356,32 +7975,32 @@ var UserOpStatus = ({
7356
7975
  " \u2022 Success ",
7357
7976
  String(!!receipt.success)
7358
7977
  ] }),
7359
- /* @__PURE__ */ jsx27("div", { className: "text-xs text-muted-foreground", children: !receipt && !timedOut && !rejected && /* @__PURE__ */ jsxs18("span", { className: "ml-2", children: [
7978
+ /* @__PURE__ */ jsx28("div", { className: "text-xs text-muted-foreground", children: !receipt && !timedOut && !rejected && /* @__PURE__ */ jsxs19("span", { className: "ml-2", children: [
7360
7979
  "\u2022 Polling for ",
7361
7980
  Math.round((Date.now() - startTimeRef.current) / 1e3),
7362
7981
  "s"
7363
7982
  ] }) }),
7364
- mempool && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-muted-foreground mt-2", style: { listStyle: "none" }, children: [
7365
- /* @__PURE__ */ jsxs18("div", { children: [
7983
+ mempool && /* @__PURE__ */ jsxs19("div", { className: "text-sm text-muted-foreground mt-2", style: { listStyle: "none" }, children: [
7984
+ /* @__PURE__ */ jsxs19("div", { children: [
7366
7985
  "Seen by bundler at ",
7367
- /* @__PURE__ */ jsx27(Address, { address: mempool.entryPoint, chain, showExplorer: true, truncate: false })
7986
+ /* @__PURE__ */ jsx28(Address, { address: mempool.entryPoint, chain, showExplorer: true, truncate: false })
7368
7987
  ] }),
7369
- /* @__PURE__ */ jsxs18("div", { children: [
7988
+ /* @__PURE__ */ jsxs19("div", { children: [
7370
7989
  "sender ",
7371
- /* @__PURE__ */ jsx27(Address, { address: mempool.sender, chain, truncate: false })
7990
+ /* @__PURE__ */ jsx28(Address, { address: mempool.sender, chain, truncate: false })
7372
7991
  ] })
7373
7992
  ] }),
7374
- error && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
7375
- /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-4 w-4" }),
7993
+ error && /* @__PURE__ */ jsxs19("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
7994
+ /* @__PURE__ */ jsx28(AlertCircle4, { className: "h-4 w-4" }),
7376
7995
  " ",
7377
7996
  error
7378
7997
  ] }),
7379
- rejected && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
7380
- /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-4 w-4" }),
7998
+ rejected && /* @__PURE__ */ jsxs19("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
7999
+ /* @__PURE__ */ jsx28(AlertCircle4, { className: "h-4 w-4" }),
7381
8000
  "UserOperation was dropped from bundler mempool. This usually means it was invalid or replaced."
7382
8001
  ] }),
7383
- timedOut && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
7384
- /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-4 w-4" }),
8002
+ timedOut && /* @__PURE__ */ jsxs19("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
8003
+ /* @__PURE__ */ jsx28(AlertCircle4, { className: "h-4 w-4" }),
7385
8004
  "Stopped polling after ",
7386
8005
  Math.round(maxPollTimeMs / 1e3),
7387
8006
  "s. UserOperation may have been rejected by the bundler."
@@ -7393,7 +8012,7 @@ var UserOpStatus = ({
7393
8012
 
7394
8013
  // src/internal/components/SendModal.tsx
7395
8014
  init_base();
7396
- import { jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
8015
+ import { jsx as jsx29, jsxs as jsxs20 } from "react/jsx-runtime";
7397
8016
  var SendModal = ({
7398
8017
  open,
7399
8018
  onOpenChange,
@@ -7410,13 +8029,13 @@ var SendModal = ({
7410
8029
  address,
7411
8030
  chainId: lumiaBeam.id
7412
8031
  });
7413
- const [recipient, setRecipient] = useState12(initialRecipient);
7414
- const [amount, setAmount] = useState12(initialAmount);
7415
- const [txStep, setTxStep] = useState12("input");
7416
- const [validationError, setValidationError] = useState12(null);
8032
+ const [recipient, setRecipient] = useState13(initialRecipient);
8033
+ const [amount, setAmount] = useState13(initialAmount);
8034
+ const [txStep, setTxStep] = useState13("input");
8035
+ const [validationError, setValidationError] = useState13(null);
7417
8036
  const nativeAsset = assets.find((a) => a.type === "native");
7418
8037
  const balance = nativeAsset ? parseFloat(nativeAsset.formattedBalance) : 0;
7419
- useEffect9(() => {
8038
+ useEffect10(() => {
7420
8039
  if (open) {
7421
8040
  setTxStep("input");
7422
8041
  setValidationError(null);
@@ -7476,7 +8095,7 @@ var SendModal = ({
7476
8095
  const maxAmount = Math.max(0, balance - 1e-3);
7477
8096
  setAmount(maxAmount.toFixed(6));
7478
8097
  };
7479
- return /* @__PURE__ */ jsx28(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs19(
8098
+ return /* @__PURE__ */ jsx29(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs20(
7480
8099
  DialogContent,
7481
8100
  {
7482
8101
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -7488,28 +8107,28 @@ var SendModal = ({
7488
8107
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
7489
8108
  },
7490
8109
  children: [
7491
- /* @__PURE__ */ jsx28(VisuallyHidden, { children: /* @__PURE__ */ jsx28(DialogTitle, { children: "Send Transaction" }) }),
7492
- /* @__PURE__ */ jsx28(DialogDescription, { className: "sr-only", children: "Send LUMIA tokens to another address" }),
7493
- /* @__PURE__ */ jsx28("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2", children: [
7494
- onBack && txStep === "input" && /* @__PURE__ */ jsx28(
8110
+ /* @__PURE__ */ jsx29(VisuallyHidden, { children: /* @__PURE__ */ jsx29(DialogTitle, { children: "Send Transaction" }) }),
8111
+ /* @__PURE__ */ jsx29(DialogDescription, { className: "sr-only", children: "Send LUMIA tokens to another address" }),
8112
+ /* @__PURE__ */ jsx29("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
8113
+ onBack && txStep === "input" && /* @__PURE__ */ jsx29(
7495
8114
  "button",
7496
8115
  {
7497
8116
  onClick: onBack,
7498
8117
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
7499
8118
  title: "Back",
7500
- children: /* @__PURE__ */ jsx28(ArrowLeft7, { className: "h-4 w-4" })
8119
+ children: /* @__PURE__ */ jsx29(ArrowLeft7, { className: "h-4 w-4" })
7501
8120
  }
7502
8121
  ),
7503
- /* @__PURE__ */ jsxs19("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7504
- /* @__PURE__ */ jsx28(Send, { className: "h-5 w-5" }),
7505
- /* @__PURE__ */ jsx28("span", { children: "Send LUMIA" })
8122
+ /* @__PURE__ */ jsxs20("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8123
+ /* @__PURE__ */ jsx29(Send, { className: "h-5 w-5" }),
8124
+ /* @__PURE__ */ jsx29("span", { children: "Send LUMIA" })
7506
8125
  ] })
7507
8126
  ] }) }),
7508
- /* @__PURE__ */ jsxs19("div", { className: "p-5", children: [
7509
- txStep === "input" && /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
7510
- /* @__PURE__ */ jsxs19("div", { children: [
7511
- /* @__PURE__ */ jsx28("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Recipient Address" }),
7512
- /* @__PURE__ */ jsx28(
8127
+ /* @__PURE__ */ jsxs20("div", { className: "p-5", children: [
8128
+ txStep === "input" && /* @__PURE__ */ jsxs20("div", { className: "space-y-4", children: [
8129
+ /* @__PURE__ */ jsxs20("div", { children: [
8130
+ /* @__PURE__ */ jsx29("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Recipient Address" }),
8131
+ /* @__PURE__ */ jsx29(
7513
8132
  "input",
7514
8133
  {
7515
8134
  type: "text",
@@ -7520,17 +8139,17 @@ var SendModal = ({
7520
8139
  }
7521
8140
  )
7522
8141
  ] }),
7523
- /* @__PURE__ */ jsxs19("div", { children: [
7524
- /* @__PURE__ */ jsxs19("div", { className: "flex justify-between items-center mb-2", children: [
7525
- /* @__PURE__ */ jsx28("label", { className: `text-sm font-medium ${theme.bodyText}`, children: "Amount" }),
7526
- /* @__PURE__ */ jsxs19("div", { className: `text-sm ${theme.mutedText}`, children: [
8142
+ /* @__PURE__ */ jsxs20("div", { children: [
8143
+ /* @__PURE__ */ jsxs20("div", { className: "flex justify-between items-center mb-2", children: [
8144
+ /* @__PURE__ */ jsx29("label", { className: `text-sm font-medium ${theme.bodyText}`, children: "Amount" }),
8145
+ /* @__PURE__ */ jsxs20("div", { className: `text-sm ${theme.mutedText}`, children: [
7527
8146
  "Balance: ",
7528
8147
  balance.toFixed(4),
7529
8148
  " LUMIA"
7530
8149
  ] })
7531
8150
  ] }),
7532
- /* @__PURE__ */ jsxs19("div", { className: "relative", children: [
7533
- /* @__PURE__ */ jsx28(
8151
+ /* @__PURE__ */ jsxs20("div", { className: "relative", children: [
8152
+ /* @__PURE__ */ jsx29(
7534
8153
  "input",
7535
8154
  {
7536
8155
  type: "number",
@@ -7541,7 +8160,7 @@ var SendModal = ({
7541
8160
  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`
7542
8161
  }
7543
8162
  ),
7544
- /* @__PURE__ */ jsx28(
8163
+ /* @__PURE__ */ jsx29(
7545
8164
  "button",
7546
8165
  {
7547
8166
  onClick: handleMaxAmount,
@@ -7551,11 +8170,11 @@ var SendModal = ({
7551
8170
  )
7552
8171
  ] })
7553
8172
  ] }),
7554
- (validationError || error) && /* @__PURE__ */ jsxs19("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: [
7555
- /* @__PURE__ */ jsx28(AlertCircle4, { className: "h-4 w-4" }),
7556
- /* @__PURE__ */ jsx28("span", { className: "text-sm", children: validationError || error })
8173
+ (validationError || error) && /* @__PURE__ */ jsxs20("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: [
8174
+ /* @__PURE__ */ jsx29(AlertCircle5, { className: "h-4 w-4" }),
8175
+ /* @__PURE__ */ jsx29("span", { className: "text-sm", children: validationError || error })
7557
8176
  ] }),
7558
- /* @__PURE__ */ jsx28(
8177
+ /* @__PURE__ */ jsx29(
7559
8178
  Button,
7560
8179
  {
7561
8180
  onClick: handleSend,
@@ -7566,29 +8185,29 @@ var SendModal = ({
7566
8185
  }
7567
8186
  )
7568
8187
  ] }),
7569
- txStep === "confirm" && /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
7570
- /* @__PURE__ */ jsxs19("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
7571
- /* @__PURE__ */ jsx28("h3", { className: `font-medium ${theme.titleText} mb-3`, children: "Transaction Details" }),
7572
- /* @__PURE__ */ jsxs19("div", { className: "space-y-2 text-sm", children: [
7573
- /* @__PURE__ */ jsxs19("div", { className: "flex justify-between", children: [
7574
- /* @__PURE__ */ jsx28("span", { className: `${theme.bodyText}`, children: "To:" }),
7575
- /* @__PURE__ */ jsx28("span", { className: `font-mono ${theme.titleText}`, children: `${recipient.slice(0, 6)}...${recipient.slice(-4)}` })
8188
+ txStep === "confirm" && /* @__PURE__ */ jsxs20("div", { className: "space-y-4", children: [
8189
+ /* @__PURE__ */ jsxs20("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
8190
+ /* @__PURE__ */ jsx29("h3", { className: `font-medium ${theme.titleText} mb-3`, children: "Transaction Details" }),
8191
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-2 text-sm", children: [
8192
+ /* @__PURE__ */ jsxs20("div", { className: "flex justify-between", children: [
8193
+ /* @__PURE__ */ jsx29("span", { className: `${theme.bodyText}`, children: "To:" }),
8194
+ /* @__PURE__ */ jsx29("span", { className: `font-mono ${theme.titleText}`, children: `${recipient.slice(0, 6)}...${recipient.slice(-4)}` })
7576
8195
  ] }),
7577
- /* @__PURE__ */ jsxs19("div", { className: "flex justify-between", children: [
7578
- /* @__PURE__ */ jsx28("span", { className: `${theme.bodyText}`, children: "Amount:" }),
7579
- /* @__PURE__ */ jsxs19("span", { className: `font-semibold ${theme.titleText}`, children: [
8196
+ /* @__PURE__ */ jsxs20("div", { className: "flex justify-between", children: [
8197
+ /* @__PURE__ */ jsx29("span", { className: `${theme.bodyText}`, children: "Amount:" }),
8198
+ /* @__PURE__ */ jsxs20("span", { className: `font-semibold ${theme.titleText}`, children: [
7580
8199
  amount,
7581
8200
  " LUMIA"
7582
8201
  ] })
7583
8202
  ] }),
7584
- /* @__PURE__ */ jsxs19("div", { className: "flex justify-between", children: [
7585
- /* @__PURE__ */ jsx28("span", { className: `${theme.bodyText}`, children: "Network:" }),
7586
- /* @__PURE__ */ jsx28("span", { className: `${theme.titleText}`, children: "Lumia Beam" })
8203
+ /* @__PURE__ */ jsxs20("div", { className: "flex justify-between", children: [
8204
+ /* @__PURE__ */ jsx29("span", { className: `${theme.bodyText}`, children: "Network:" }),
8205
+ /* @__PURE__ */ jsx29("span", { className: `${theme.titleText}`, children: "Lumia Beam" })
7587
8206
  ] })
7588
8207
  ] })
7589
8208
  ] }),
7590
- /* @__PURE__ */ jsxs19("div", { className: "flex gap-2", children: [
7591
- /* @__PURE__ */ jsx28(
8209
+ /* @__PURE__ */ jsxs20("div", { className: "flex gap-2", children: [
8210
+ /* @__PURE__ */ jsx29(
7592
8211
  Button,
7593
8212
  {
7594
8213
  onClick: () => setTxStep("input"),
@@ -7598,7 +8217,7 @@ var SendModal = ({
7598
8217
  children: "Back"
7599
8218
  }
7600
8219
  ),
7601
- /* @__PURE__ */ jsxs19(
8220
+ /* @__PURE__ */ jsxs20(
7602
8221
  Button,
7603
8222
  {
7604
8223
  onClick: handleConfirm,
@@ -7606,28 +8225,28 @@ var SendModal = ({
7606
8225
  className: "flex-1",
7607
8226
  size: "lg",
7608
8227
  children: [
7609
- isLoading && /* @__PURE__ */ jsx28(Loader2, { className: "h-4 w-4 animate-spin" }),
8228
+ isLoading && /* @__PURE__ */ jsx29(Loader2, { className: "h-4 w-4 animate-spin" }),
7610
8229
  "Confirm"
7611
8230
  ]
7612
8231
  }
7613
8232
  )
7614
8233
  ] })
7615
8234
  ] }),
7616
- txStep === "pending" && /* @__PURE__ */ jsxs19("div", { className: "py-8 text-center space-y-4", children: [
7617
- /* @__PURE__ */ jsx28(Loader2, { className: `h-12 w-12 animate-spin ${isDark ? "text-blue-400" : "text-blue-600"} mx-auto` }),
7618
- /* @__PURE__ */ jsxs19("div", { children: [
7619
- /* @__PURE__ */ jsx28("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Pending" }),
7620
- /* @__PURE__ */ jsx28("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Please wait while we process your transaction" })
8235
+ txStep === "pending" && /* @__PURE__ */ jsxs20("div", { className: "py-8 text-center space-y-4", children: [
8236
+ /* @__PURE__ */ jsx29(Loader2, { className: `h-12 w-12 animate-spin ${isDark ? "text-blue-400" : "text-blue-600"} mx-auto` }),
8237
+ /* @__PURE__ */ jsxs20("div", { children: [
8238
+ /* @__PURE__ */ jsx29("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Pending" }),
8239
+ /* @__PURE__ */ jsx29("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Please wait while we process your transaction" })
7621
8240
  ] })
7622
8241
  ] }),
7623
- txStep === "success" && userOpHash && /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
7624
- /* @__PURE__ */ jsxs19("div", { className: "text-center py-4", children: [
7625
- /* @__PURE__ */ jsx28(CheckCircle26, { className: `h-12 w-12 ${isDark ? "text-green-400" : "text-green-500"} mx-auto mb-3` }),
7626
- /* @__PURE__ */ jsx28("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Sent!" }),
7627
- /* @__PURE__ */ jsx28("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Your transaction is being processed" })
8242
+ txStep === "success" && userOpHash && /* @__PURE__ */ jsxs20("div", { className: "space-y-4", children: [
8243
+ /* @__PURE__ */ jsxs20("div", { className: "text-center py-4", children: [
8244
+ /* @__PURE__ */ jsx29(CheckCircle27, { className: `h-12 w-12 ${isDark ? "text-green-400" : "text-green-500"} mx-auto mb-3` }),
8245
+ /* @__PURE__ */ jsx29("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Sent!" }),
8246
+ /* @__PURE__ */ jsx29("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Your transaction is being processed" })
7628
8247
  ] }),
7629
- /* @__PURE__ */ jsx28("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: /* @__PURE__ */ jsx28(UserOpStatus, { userOpHash, chain: lumiaBeam }) }),
7630
- /* @__PURE__ */ jsx28(
8248
+ /* @__PURE__ */ jsx29("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: /* @__PURE__ */ jsx29(UserOpStatus, { userOpHash, chain: lumiaBeam }) }),
8249
+ /* @__PURE__ */ jsx29(
7631
8250
  Button,
7632
8251
  {
7633
8252
  onClick: handleClose,
@@ -7644,21 +8263,21 @@ var SendModal = ({
7644
8263
  };
7645
8264
 
7646
8265
  // src/internal/components/ReceiveModal.tsx
7647
- import { useState as useState13, useEffect as useEffect10 } from "react";
7648
- import { QrCode, Copy as Copy4, ArrowLeft as ArrowLeft8, CheckCircle2 as CheckCircle27 } from "lucide-react";
8266
+ import { useState as useState14, useEffect as useEffect11 } from "react";
8267
+ import { QrCode, Copy as Copy4, ArrowLeft as ArrowLeft8, CheckCircle2 as CheckCircle28 } from "lucide-react";
7649
8268
  import QRCode from "qrcode";
7650
- import { Fragment as Fragment6, jsx as jsx29, jsxs as jsxs20 } from "react/jsx-runtime";
8269
+ import { Fragment as Fragment7, jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
7651
8270
  var ReceiveModal = ({
7652
8271
  open,
7653
8272
  onOpenChange,
7654
8273
  onBack
7655
8274
  }) => {
7656
8275
  const { address } = useLumiaSession();
7657
- const [qrCodeUrl, setQrCodeUrl] = useState13("");
8276
+ const [qrCodeUrl, setQrCodeUrl] = useState14("");
7658
8277
  const { config } = useLumiaPassportConfig();
7659
8278
  const { isDark, classes: theme } = useTheme(config.ui.theme);
7660
- const [copied, setCopied] = useState13(false);
7661
- useEffect10(() => {
8279
+ const [copied, setCopied] = useState14(false);
8280
+ useEffect11(() => {
7662
8281
  if (open && address) {
7663
8282
  QRCode.toDataURL(address, {
7664
8283
  width: 200,
@@ -7688,7 +8307,7 @@ var ReceiveModal = ({
7688
8307
  if (!addr) return "";
7689
8308
  return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
7690
8309
  };
7691
- return /* @__PURE__ */ jsx29(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs20(
8310
+ return /* @__PURE__ */ jsx30(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs21(
7692
8311
  DialogContent,
7693
8312
  {
7694
8313
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -7700,51 +8319,51 @@ var ReceiveModal = ({
7700
8319
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
7701
8320
  },
7702
8321
  children: [
7703
- /* @__PURE__ */ jsx29(VisuallyHidden, { children: /* @__PURE__ */ jsx29(DialogTitle, { children: "Receive LUMIA" }) }),
7704
- /* @__PURE__ */ jsx29(DialogDescription, { className: "sr-only", children: "Your wallet address and QR code for receiving LUMIA" }),
7705
- /* @__PURE__ */ jsx29("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
7706
- onBack && /* @__PURE__ */ jsx29(
8322
+ /* @__PURE__ */ jsx30(VisuallyHidden, { children: /* @__PURE__ */ jsx30(DialogTitle, { children: "Receive LUMIA" }) }),
8323
+ /* @__PURE__ */ jsx30(DialogDescription, { className: "sr-only", children: "Your wallet address and QR code for receiving LUMIA" }),
8324
+ /* @__PURE__ */ jsx30("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2", children: [
8325
+ onBack && /* @__PURE__ */ jsx30(
7707
8326
  "button",
7708
8327
  {
7709
8328
  onClick: onBack,
7710
8329
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
7711
8330
  title: "Back",
7712
- children: /* @__PURE__ */ jsx29(ArrowLeft8, { className: "h-4 w-4" })
8331
+ children: /* @__PURE__ */ jsx30(ArrowLeft8, { className: "h-4 w-4" })
7713
8332
  }
7714
8333
  ),
7715
- /* @__PURE__ */ jsxs20("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7716
- /* @__PURE__ */ jsx29(QrCode, { className: "h-5 w-5" }),
7717
- /* @__PURE__ */ jsx29("span", { children: "Receive LUMIA" })
8334
+ /* @__PURE__ */ jsxs21("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8335
+ /* @__PURE__ */ jsx30(QrCode, { className: "h-5 w-5" }),
8336
+ /* @__PURE__ */ jsx30("span", { children: "Receive LUMIA" })
7718
8337
  ] })
7719
8338
  ] }) }),
7720
- /* @__PURE__ */ jsxs20("div", { className: "p-5 space-y-4", children: [
7721
- qrCodeUrl && /* @__PURE__ */ jsx29("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx29("div", { className: `${isDark ? "bg-white" : "bg-white"} p-4 rounded-xl border ${theme.divider}`, children: /* @__PURE__ */ jsx29("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) }) }),
7722
- /* @__PURE__ */ jsx29("div", { className: `${isDark ? "bg-blue-900/30 border-blue-600" : "bg-blue-50 border-blue-200"} rounded-lg p-3`, children: /* @__PURE__ */ jsx29("div", { className: `flex items-center gap-2 ${isDark ? "text-blue-300" : "text-blue-700"} text-sm`, children: /* @__PURE__ */ jsxs20("div", { className: "flex-1", children: [
7723
- /* @__PURE__ */ jsx29("p", { className: "font-medium", children: "Network: Lumia Beam" }),
7724
- /* @__PURE__ */ jsx29("p", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} mt-0.5`, children: "Ensure sender is on the same network" })
8339
+ /* @__PURE__ */ jsxs21("div", { className: "p-5 space-y-4", children: [
8340
+ qrCodeUrl && /* @__PURE__ */ jsx30("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx30("div", { className: `${isDark ? "bg-white" : "bg-white"} p-4 rounded-xl border ${theme.divider}`, children: /* @__PURE__ */ jsx30("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) }) }),
8341
+ /* @__PURE__ */ jsx30("div", { className: `${isDark ? "bg-blue-900/30 border-blue-600" : "bg-blue-50 border-blue-200"} rounded-lg p-3`, children: /* @__PURE__ */ jsx30("div", { className: `flex items-center gap-2 ${isDark ? "text-blue-300" : "text-blue-700"} text-sm`, children: /* @__PURE__ */ jsxs21("div", { className: "flex-1", children: [
8342
+ /* @__PURE__ */ jsx30("p", { className: "font-medium", children: "Network: Lumia Beam" }),
8343
+ /* @__PURE__ */ jsx30("p", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} mt-0.5`, children: "Ensure sender is on the same network" })
7725
8344
  ] }) }) }),
7726
- /* @__PURE__ */ jsxs20("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
7727
- /* @__PURE__ */ jsx29("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Your Wallet Address" }),
7728
- /* @__PURE__ */ jsx29("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsx29("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 }) }),
7729
- /* @__PURE__ */ jsx29(
8345
+ /* @__PURE__ */ jsxs21("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
8346
+ /* @__PURE__ */ jsx30("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Your Wallet Address" }),
8347
+ /* @__PURE__ */ jsx30("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsx30("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 }) }),
8348
+ /* @__PURE__ */ jsx30(
7730
8349
  Button,
7731
8350
  {
7732
8351
  onClick: handleCopy,
7733
8352
  className: "w-full mt-3",
7734
8353
  size: "lg",
7735
- children: copied ? /* @__PURE__ */ jsxs20(Fragment6, { children: [
7736
- /* @__PURE__ */ jsx29(CheckCircle27, { className: "h-4 w-4" }),
7737
- /* @__PURE__ */ jsx29("span", { children: "Copied!" })
7738
- ] }) : /* @__PURE__ */ jsxs20(Fragment6, { children: [
7739
- /* @__PURE__ */ jsx29(Copy4, { className: "h-4 w-4" }),
7740
- /* @__PURE__ */ jsx29("span", { children: "Copy Address" })
8354
+ children: copied ? /* @__PURE__ */ jsxs21(Fragment7, { children: [
8355
+ /* @__PURE__ */ jsx30(CheckCircle28, { className: "h-4 w-4" }),
8356
+ /* @__PURE__ */ jsx30("span", { children: "Copied!" })
8357
+ ] }) : /* @__PURE__ */ jsxs21(Fragment7, { children: [
8358
+ /* @__PURE__ */ jsx30(Copy4, { className: "h-4 w-4" }),
8359
+ /* @__PURE__ */ jsx30("span", { children: "Copy Address" })
7741
8360
  ] })
7742
8361
  }
7743
8362
  )
7744
8363
  ] }),
7745
- /* @__PURE__ */ jsxs20("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
7746
- /* @__PURE__ */ jsx29("p", { children: "Share this address to receive LUMIA tokens." }),
7747
- /* @__PURE__ */ jsx29("p", { className: "mt-1", children: "Only send LUMIA tokens to this address on Lumia Beam network." })
8364
+ /* @__PURE__ */ jsxs21("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
8365
+ /* @__PURE__ */ jsx30("p", { children: "Share this address to receive LUMIA tokens." }),
8366
+ /* @__PURE__ */ jsx30("p", { className: "mt-1", children: "Only send LUMIA tokens to this address on Lumia Beam network." })
7748
8367
  ] })
7749
8368
  ] })
7750
8369
  ]
@@ -7754,11 +8373,11 @@ var ReceiveModal = ({
7754
8373
 
7755
8374
  // src/internal/components/BuyModal.tsx
7756
8375
  import { CreditCard, ArrowLeft as ArrowLeft9 } from "lucide-react";
7757
- import { jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
8376
+ import { jsx as jsx31, jsxs as jsxs22 } from "react/jsx-runtime";
7758
8377
  var BuyModal = ({ open, onOpenChange, onBack }) => {
7759
8378
  const { config } = useLumiaPassportConfig();
7760
8379
  const { isDark, classes: theme } = useTheme(config.ui.theme);
7761
- return /* @__PURE__ */ jsx30(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs21(
8380
+ return /* @__PURE__ */ jsx31(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs22(
7762
8381
  DialogContent,
7763
8382
  {
7764
8383
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -7770,26 +8389,26 @@ var BuyModal = ({ open, onOpenChange, onBack }) => {
7770
8389
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
7771
8390
  },
7772
8391
  children: [
7773
- /* @__PURE__ */ jsx30(VisuallyHidden, { children: /* @__PURE__ */ jsx30(DialogTitle, { children: "Buy Crypto" }) }),
7774
- /* @__PURE__ */ jsx30(DialogDescription, { className: "sr-only", children: "On-ramp placeholder" }),
7775
- /* @__PURE__ */ jsx30("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2", children: [
7776
- onBack && /* @__PURE__ */ jsx30(
8392
+ /* @__PURE__ */ jsx31(VisuallyHidden, { children: /* @__PURE__ */ jsx31(DialogTitle, { children: "Buy Crypto" }) }),
8393
+ /* @__PURE__ */ jsx31(DialogDescription, { className: "sr-only", children: "On-ramp placeholder" }),
8394
+ /* @__PURE__ */ jsx31("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2", children: [
8395
+ onBack && /* @__PURE__ */ jsx31(
7777
8396
  "button",
7778
8397
  {
7779
8398
  onClick: onBack,
7780
8399
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
7781
8400
  title: "Back",
7782
- children: /* @__PURE__ */ jsx30(ArrowLeft9, { className: "h-4 w-4" })
8401
+ children: /* @__PURE__ */ jsx31(ArrowLeft9, { className: "h-4 w-4" })
7783
8402
  }
7784
8403
  ),
7785
- /* @__PURE__ */ jsxs21("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7786
- /* @__PURE__ */ jsx30(CreditCard, { className: "h-5 w-5" }),
7787
- /* @__PURE__ */ jsx30("span", { children: "Buy" })
8404
+ /* @__PURE__ */ jsxs22("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8405
+ /* @__PURE__ */ jsx31(CreditCard, { className: "h-5 w-5" }),
8406
+ /* @__PURE__ */ jsx31("span", { children: "Buy" })
7788
8407
  ] })
7789
8408
  ] }) }),
7790
- /* @__PURE__ */ jsxs21("div", { className: "p-5", children: [
7791
- /* @__PURE__ */ jsx30("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ jsx30("div", { className: `text-sm ${theme.mutedText}`, children: "On-ramp coming soon\u2026" }) }),
7792
- /* @__PURE__ */ jsx30("div", { className: "pt-4", children: /* @__PURE__ */ jsx30(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
8409
+ /* @__PURE__ */ jsxs22("div", { className: "p-5", children: [
8410
+ /* @__PURE__ */ jsx31("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ jsx31("div", { className: `text-sm ${theme.mutedText}`, children: "On-ramp coming soon\u2026" }) }),
8411
+ /* @__PURE__ */ jsx31("div", { className: "pt-4", children: /* @__PURE__ */ jsx31(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
7793
8412
  ] })
7794
8413
  ]
7795
8414
  }
@@ -7798,13 +8417,13 @@ var BuyModal = ({ open, onOpenChange, onBack }) => {
7798
8417
 
7799
8418
  // src/internal/components/KycModal.tsx
7800
8419
  import { ShieldCheck, ArrowLeft as ArrowLeft10 } from "lucide-react";
7801
- import { jsx as jsx31, jsxs as jsxs22 } from "react/jsx-runtime";
8420
+ import { jsx as jsx32, jsxs as jsxs23 } from "react/jsx-runtime";
7802
8421
  var KycModal = ({ open, onOpenChange, onBack }) => {
7803
8422
  const { config } = useLumiaPassportConfig();
7804
8423
  const { isDark, classes: theme } = useTheme(config.ui.theme);
7805
8424
  const provider = config.kyc?.provider;
7806
8425
  const options = config.kyc?.options || {};
7807
- return /* @__PURE__ */ jsx31(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs22(
8426
+ return /* @__PURE__ */ jsx32(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs23(
7808
8427
  DialogContent,
7809
8428
  {
7810
8429
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -7816,32 +8435,32 @@ var KycModal = ({ open, onOpenChange, onBack }) => {
7816
8435
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
7817
8436
  },
7818
8437
  children: [
7819
- /* @__PURE__ */ jsx31(VisuallyHidden, { children: /* @__PURE__ */ jsx31(DialogTitle, { children: "KYC" }) }),
7820
- /* @__PURE__ */ jsx31(DialogDescription, { className: "sr-only", children: "KYC placeholder" }),
7821
- /* @__PURE__ */ jsx31("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2", children: [
7822
- onBack && /* @__PURE__ */ jsx31(
8438
+ /* @__PURE__ */ jsx32(VisuallyHidden, { children: /* @__PURE__ */ jsx32(DialogTitle, { children: "KYC" }) }),
8439
+ /* @__PURE__ */ jsx32(DialogDescription, { className: "sr-only", children: "KYC placeholder" }),
8440
+ /* @__PURE__ */ jsx32("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2", children: [
8441
+ onBack && /* @__PURE__ */ jsx32(
7823
8442
  "button",
7824
8443
  {
7825
8444
  onClick: onBack,
7826
8445
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
7827
8446
  title: "Back",
7828
- children: /* @__PURE__ */ jsx31(ArrowLeft10, { className: "h-4 w-4" })
8447
+ children: /* @__PURE__ */ jsx32(ArrowLeft10, { className: "h-4 w-4" })
7829
8448
  }
7830
8449
  ),
7831
- /* @__PURE__ */ jsxs22("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
7832
- /* @__PURE__ */ jsx31(ShieldCheck, { className: "h-5 w-5" }),
7833
- /* @__PURE__ */ jsx31("span", { children: "KYC" })
8450
+ /* @__PURE__ */ jsxs23("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8451
+ /* @__PURE__ */ jsx32(ShieldCheck, { className: "h-5 w-5" }),
8452
+ /* @__PURE__ */ jsx32("span", { children: "KYC" })
7834
8453
  ] })
7835
8454
  ] }) }),
7836
- /* @__PURE__ */ jsxs22("div", { className: "p-5", children: [
7837
- provider ? /* @__PURE__ */ jsxs22("div", { className: `rounded-xl p-4 ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: [
7838
- /* @__PURE__ */ jsxs22("div", { className: `text-sm ${theme.titleText} mb-2`, children: [
8455
+ /* @__PURE__ */ jsxs23("div", { className: "p-5", children: [
8456
+ provider ? /* @__PURE__ */ jsxs23("div", { className: `rounded-xl p-4 ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: [
8457
+ /* @__PURE__ */ jsxs23("div", { className: `text-sm ${theme.titleText} mb-2`, children: [
7839
8458
  "KYC provider: ",
7840
- /* @__PURE__ */ jsx31("span", { className: "font-medium", children: provider })
8459
+ /* @__PURE__ */ jsx32("span", { className: "font-medium", children: provider })
7841
8460
  ] }),
7842
- Object.keys(options).length > 0 ? /* @__PURE__ */ jsx31("div", { className: `text-xs ${theme.mutedText} break-words whitespace-pre-wrap`, children: JSON.stringify(options, null, 2) }) : /* @__PURE__ */ jsx31("div", { className: `text-sm ${theme.mutedText}`, children: "No provider options configured." })
7843
- ] }) : /* @__PURE__ */ jsx31("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ jsx31("div", { className: `text-sm ${theme.mutedText}`, children: "KYC verification coming soon\u2026" }) }),
7844
- /* @__PURE__ */ jsx31("div", { className: "pt-4", children: /* @__PURE__ */ jsx31(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
8461
+ Object.keys(options).length > 0 ? /* @__PURE__ */ jsx32("div", { className: `text-xs ${theme.mutedText} break-words whitespace-pre-wrap`, children: JSON.stringify(options, null, 2) }) : /* @__PURE__ */ jsx32("div", { className: `text-sm ${theme.mutedText}`, children: "No provider options configured." })
8462
+ ] }) : /* @__PURE__ */ jsx32("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ jsx32("div", { className: `text-sm ${theme.mutedText}`, children: "KYC verification coming soon\u2026" }) }),
8463
+ /* @__PURE__ */ jsx32("div", { className: "pt-4", children: /* @__PURE__ */ jsx32(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
7845
8464
  ] })
7846
8465
  ]
7847
8466
  }
@@ -7850,20 +8469,20 @@ var KycModal = ({ open, onOpenChange, onBack }) => {
7850
8469
 
7851
8470
  // src/components/ConnectWalletButton.tsx
7852
8471
  init_auth();
7853
- import { Cloud as Cloud3, Laptop as Laptop2, Shield as Shield4, Copy as Copy5, ArrowUp, ArrowDown, Plus as Plus2, Activity as Activity2, Gem as Gem2, CreditCard as CreditCard2, Lock as Lock2, ArrowUpRight as ArrowUpRight2, AlertTriangle as AlertTriangle4, ShieldCheck as ShieldCheck2 } from "lucide-react";
8472
+ import { Cloud as Cloud4, Laptop as Laptop2, Shield as Shield5, Copy as Copy5, ArrowUp, ArrowDown, Plus as Plus2, Activity as Activity2, Gem as Gem2, CreditCard as CreditCard2, Lock as Lock3, ArrowUpRight as ArrowUpRight2, AlertTriangle as AlertTriangle4, ShieldCheck as ShieldCheck2 } from "lucide-react";
7854
8473
  init_base();
7855
8474
 
7856
8475
  // src/modules/linkedProfiles.ts
7857
8476
  init_common();
7858
8477
  init_types();
7859
8478
  init_auth();
7860
- import * as React26 from "react";
8479
+ import * as React27 from "react";
7861
8480
  function useLumiaPassportLinkedProfiles() {
7862
- const [profiles, setProfiles] = React26.useState([]);
7863
- const [avatar, setAvatar] = React26.useState(null);
7864
- const [isLoading, setIsLoading] = React26.useState(false);
7865
- const [error, setError] = React26.useState(null);
7866
- const load = React26.useCallback(async () => {
8481
+ const [profiles, setProfiles] = React27.useState([]);
8482
+ const [avatar, setAvatar] = React27.useState(null);
8483
+ const [isLoading, setIsLoading] = React27.useState(false);
8484
+ const [error, setError] = React27.useState(null);
8485
+ const load = React27.useCallback(async () => {
7867
8486
  setIsLoading(true);
7868
8487
  setError(null);
7869
8488
  try {
@@ -7889,14 +8508,14 @@ function useLumiaPassportLinkedProfiles() {
7889
8508
  setIsLoading(false);
7890
8509
  }
7891
8510
  }, []);
7892
- React26.useEffect(() => {
8511
+ React27.useEffect(() => {
7893
8512
  load();
7894
8513
  }, [load]);
7895
8514
  return { profiles, avatar, isLoading, error, refresh: load };
7896
8515
  }
7897
8516
 
7898
8517
  // src/components/ConnectWalletButton.tsx
7899
- import { jsx as jsx32, jsxs as jsxs23 } from "react/jsx-runtime";
8518
+ import { jsx as jsx33, jsxs as jsxs24 } from "react/jsx-runtime";
7900
8519
  var ConnectWalletButton = ({
7901
8520
  className,
7902
8521
  label = "Connect Wallet",
@@ -7908,7 +8527,7 @@ var ConnectWalletButton = ({
7908
8527
  }) => {
7909
8528
  console.log("[ConnectWalletButton] Component rendering");
7910
8529
  const { config, callbacks: contextCallbacks } = useLumiaPassportConfig();
7911
- const callbacks = React27.useMemo(() => ({
8530
+ const callbacks = React28.useMemo(() => ({
7912
8531
  onLumiaPassportConnecting: buttonCallbacks?.onLumiaPassportConnecting ?? contextCallbacks?.onLumiaPassportConnecting,
7913
8532
  onLumiaPassportConnect: buttonCallbacks?.onLumiaPassportConnect ?? contextCallbacks?.onLumiaPassportConnect,
7914
8533
  onLumiaPassportAccount: buttonCallbacks?.onLumiaPassportAccount ?? contextCallbacks?.onLumiaPassportAccount,
@@ -7926,14 +8545,14 @@ var ConnectWalletButton = ({
7926
8545
  isAuthenticated: jwtTokenManager2.isAuthenticated?.(),
7927
8546
  hasTokens: !!jwtTokenManager2.getTokens()
7928
8547
  });
7929
- React27.useEffect(() => {
8548
+ React28.useEffect(() => {
7930
8549
  if (!profilesLoading && profiles.length > 0) {
7931
8550
  console.log("[ConnectWalletButton] Profiles loaded:", profiles.map((p) => ({ provider: p.provider, externalId: p.externalId })));
7932
8551
  const hasEmail = profiles.some((p) => p.provider?.toLowerCase() === "email");
7933
8552
  console.log("[ConnectWalletButton] Has email provider:", hasEmail);
7934
8553
  }
7935
8554
  }, [profiles, profilesLoading]);
7936
- React27.useEffect(() => {
8555
+ React28.useEffect(() => {
7937
8556
  console.log("[ConnectWalletButton] Theme state:", {
7938
8557
  configTheme: config.ui.theme,
7939
8558
  resolvedTheme,
@@ -7941,20 +8560,21 @@ var ConnectWalletButton = ({
7941
8560
  bodyClasses: document.body.className
7942
8561
  });
7943
8562
  }, [config.ui.theme, resolvedTheme, isDark]);
7944
- const [isAuthModalOpen, setIsAuthModalOpen] = React27.useState(false);
7945
- const [recoveryUserId, setRecoveryUserId] = React27.useState(null);
7946
- const tssManagerRef = React27.useRef(null);
7947
- const [isWalletMenuOpen, setIsWalletMenuOpen] = React27.useState(false);
7948
- const [copied, setCopied] = React27.useState(false);
7949
- const [isManageWalletOpen, setIsManageWalletOpen] = React27.useState(false);
7950
- const [isSecurityOpen, setIsSecurityOpen] = React27.useState(false);
7951
- const [isTransactionsOpen, setIsTransactionsOpen] = React27.useState(false);
7952
- const [isViewAssetsOpen, setIsViewAssetsOpen] = React27.useState(false);
7953
- const [isSendOpen, setIsSendOpen] = React27.useState(false);
7954
- const [isReceiveOpen, setIsReceiveOpen] = React27.useState(false);
7955
- const [isBuyOpen, setIsBuyOpen] = React27.useState(false);
7956
- const [isKycOpen, setIsKycOpen] = React27.useState(false);
7957
- React27.useEffect(() => {
8563
+ const [isAuthModalOpen, setIsAuthModalOpen] = React28.useState(false);
8564
+ const [recoveryUserId, setRecoveryUserId] = React28.useState(null);
8565
+ const tssManagerRef = React28.useRef(null);
8566
+ const [isWalletMenuOpen, setIsWalletMenuOpen] = React28.useState(false);
8567
+ const [copied, setCopied] = React28.useState(false);
8568
+ const [isManageWalletOpen, setIsManageWalletOpen] = React28.useState(false);
8569
+ const [isSecurityOpen, setIsSecurityOpen] = React28.useState(false);
8570
+ const [isBackupOpen, setIsBackupOpen] = React28.useState(false);
8571
+ const [isTransactionsOpen, setIsTransactionsOpen] = React28.useState(false);
8572
+ const [isViewAssetsOpen, setIsViewAssetsOpen] = React28.useState(false);
8573
+ const [isSendOpen, setIsSendOpen] = React28.useState(false);
8574
+ const [isReceiveOpen, setIsReceiveOpen] = React28.useState(false);
8575
+ const [isBuyOpen, setIsBuyOpen] = React28.useState(false);
8576
+ const [isKycOpen, setIsKycOpen] = React28.useState(false);
8577
+ React28.useEffect(() => {
7958
8578
  try {
7959
8579
  const shouldAutoOpen = authOpen ?? config?.ui?.authOpen;
7960
8580
  if (!address && !session && shouldAutoOpen) {
@@ -7981,25 +8601,25 @@ var ConnectWalletButton = ({
7981
8601
  refetchOnWindowFocus: true
7982
8602
  }
7983
8603
  });
7984
- const formatAddress = React27.useCallback((addr) => {
8604
+ const formatAddress = React28.useCallback((addr) => {
7985
8605
  if (!addr) return "";
7986
8606
  return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
7987
8607
  }, []);
7988
- const avatar = React27.useMemo(() => jwtTokenManager2.getAvatar(), [isAuthModalOpen, status]);
7989
- const displayName = React27.useMemo(() => jwtTokenManager2.getDisplayName(), [isAuthModalOpen, status]);
7990
- const formatBalance = React27.useCallback(() => {
8608
+ const avatar = React28.useMemo(() => jwtTokenManager2.getAvatar(), [isAuthModalOpen, status]);
8609
+ const displayName = React28.useMemo(() => jwtTokenManager2.getDisplayName(), [isAuthModalOpen, status]);
8610
+ const formatBalance = React28.useCallback(() => {
7991
8611
  if (!balance || balanceLoading) return "0.0000";
7992
8612
  return parseFloat(balance.formatted).toFixed(4);
7993
8613
  }, [balance, balanceLoading]);
7994
- const [hasServerVault, setHasServerVault] = React27.useState(false);
7995
- const indicators = React27.useMemo(() => {
8614
+ const [hasServerVault, setHasServerVault] = React28.useState(false);
8615
+ const indicators = React28.useMemo(() => {
7996
8616
  const userId = jwtTokenManager2.getUserId();
7997
8617
  if (!userId) return { server: false, local: false, backup: false };
7998
8618
  const server = jwtTokenManager2.getHasKeyshare() ?? false;
7999
8619
  const local = !!address;
8000
8620
  return { server, local, backup: hasServerVault };
8001
8621
  }, [session, address, hasServerVault]);
8002
- const handleAuthModalSuccess = React27.useCallback(async () => {
8622
+ const handleAuthModalSuccess = React28.useCallback(async () => {
8003
8623
  await new Promise((r) => setTimeout(r, 100));
8004
8624
  const userId = jwtTokenManager2.getUserId();
8005
8625
  const isAuthenticated = jwtTokenManager2.isAuthenticated();
@@ -8051,7 +8671,7 @@ var ConnectWalletButton = ({
8051
8671
  }
8052
8672
  }
8053
8673
  }, [onConnected, setAddress, setError, setSession, setStatus]);
8054
- const handleDisconnect = React27.useCallback(async () => {
8674
+ const handleDisconnect = React28.useCallback(async () => {
8055
8675
  const prevAddress = address;
8056
8676
  let userId = null;
8057
8677
  try {
@@ -8071,7 +8691,7 @@ var ConnectWalletButton = ({
8071
8691
  } catch {
8072
8692
  }
8073
8693
  }, [setAddress, setError, setSession, setStatus]);
8074
- React27.useEffect(() => {
8694
+ React28.useEffect(() => {
8075
8695
  if (address) {
8076
8696
  (async () => {
8077
8697
  try {
@@ -8088,7 +8708,7 @@ var ConnectWalletButton = ({
8088
8708
  setHasServerVault(false);
8089
8709
  }
8090
8710
  }, [address]);
8091
- React27.useEffect(() => {
8711
+ React28.useEffect(() => {
8092
8712
  console.log("[UI-KIT][AutoConnect] useEffect mounted");
8093
8713
  let cancelled = false;
8094
8714
  const tryAutoConnect = async (attempt) => {
@@ -8193,13 +8813,13 @@ var ConnectWalletButton = ({
8193
8813
  cancelled = true;
8194
8814
  };
8195
8815
  }, []);
8196
- React27.useEffect(() => {
8816
+ React28.useEffect(() => {
8197
8817
  if (address && refetchBalance) {
8198
8818
  refetchBalance();
8199
8819
  }
8200
8820
  }, [address]);
8201
- return /* @__PURE__ */ jsxs23("div", { className: [className, "lumia-scope"].filter(Boolean).join(" "), children: [
8202
- /* @__PURE__ */ jsx32("div", { className: "inline-flex items-center gap-2", children: !address ? /* @__PURE__ */ jsx32("div", { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx32(
8821
+ return /* @__PURE__ */ jsxs24("div", { className: [className, "lumia-scope"].filter(Boolean).join(" "), children: [
8822
+ /* @__PURE__ */ jsx33("div", { className: "inline-flex items-center gap-2", children: !address ? /* @__PURE__ */ jsx33("div", { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx33(
8203
8823
  "button",
8204
8824
  {
8205
8825
  onClick: () => {
@@ -8236,56 +8856,56 @@ var ConnectWalletButton = ({
8236
8856
  },
8237
8857
  children: label || "Connect"
8238
8858
  }
8239
- ) }) : /* @__PURE__ */ jsx32(
8859
+ ) }) : /* @__PURE__ */ jsx33(
8240
8860
  "div",
8241
8861
  {
8242
8862
  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"}`,
8243
8863
  onClick: () => setIsWalletMenuOpen(true),
8244
- children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-3", children: [
8245
- /* @__PURE__ */ jsx32("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 ? (
8864
+ children: /* @__PURE__ */ jsxs24("div", { className: "flex items-center space-x-3", children: [
8865
+ /* @__PURE__ */ jsx33("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 ? (
8246
8866
  // eslint-disable-next-line @next/next/no-img-element
8247
- /* @__PURE__ */ jsx32("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
8248
- ) : /* @__PURE__ */ jsx32("span", { className: "text-white font-bold text-sm", children: "LP" }) }),
8249
- /* @__PURE__ */ jsxs23("div", { className: "text-left flex-1 min-w-0", children: [
8250
- /* @__PURE__ */ jsx32("div", { className: `font-semibold text-base truncate ${theme.titleText}`, children: mode === "compact" && displayName ? displayName : formatAddress(address) }),
8251
- /* @__PURE__ */ jsxs23("div", { className: `text-sm ${theme.mutedText}`, children: [
8867
+ /* @__PURE__ */ jsx33("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
8868
+ ) : /* @__PURE__ */ jsx33("span", { className: "text-white font-bold text-sm", children: "LP" }) }),
8869
+ /* @__PURE__ */ jsxs24("div", { className: "text-left flex-1 min-w-0", children: [
8870
+ /* @__PURE__ */ jsx33("div", { className: `font-semibold text-base truncate ${theme.titleText}`, children: mode === "compact" && displayName ? displayName : formatAddress(address) }),
8871
+ /* @__PURE__ */ jsxs24("div", { className: `text-sm ${theme.mutedText}`, children: [
8252
8872
  formatBalance(),
8253
8873
  " LUMIA"
8254
8874
  ] })
8255
8875
  ] }),
8256
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-1", children: [
8257
- /* @__PURE__ */ jsxs23("div", { className: "group relative", children: [
8258
- /* @__PURE__ */ jsx32(
8259
- Cloud3,
8876
+ /* @__PURE__ */ jsxs24("div", { className: "flex items-center space-x-1", children: [
8877
+ /* @__PURE__ */ jsxs24("div", { className: "group relative", children: [
8878
+ /* @__PURE__ */ jsx33(
8879
+ Cloud4,
8260
8880
  {
8261
8881
  className: `w-3 h-3 ${indicators.server ? "text-green-500" : "text-orange-400"}`
8262
8882
  }
8263
8883
  ),
8264
- /* @__PURE__ */ jsxs23("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: [
8884
+ /* @__PURE__ */ jsxs24("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: [
8265
8885
  "Server Keyshare: ",
8266
8886
  indicators.server ? "Available" : "Missing"
8267
8887
  ] })
8268
8888
  ] }),
8269
- /* @__PURE__ */ jsxs23("div", { className: "group relative", children: [
8270
- /* @__PURE__ */ jsx32(
8889
+ /* @__PURE__ */ jsxs24("div", { className: "group relative", children: [
8890
+ /* @__PURE__ */ jsx33(
8271
8891
  Laptop2,
8272
8892
  {
8273
8893
  className: `w-3 h-3 ${indicators.local ? "text-green-500" : "text-orange-400"}`
8274
8894
  }
8275
8895
  ),
8276
- /* @__PURE__ */ jsxs23("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: [
8896
+ /* @__PURE__ */ jsxs24("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: [
8277
8897
  "Local Keyshare: ",
8278
8898
  indicators.local ? "Available" : "Missing"
8279
8899
  ] })
8280
8900
  ] }),
8281
- /* @__PURE__ */ jsxs23("div", { className: "group relative", children: [
8282
- /* @__PURE__ */ jsx32(
8283
- Shield4,
8901
+ /* @__PURE__ */ jsxs24("div", { className: "group relative", children: [
8902
+ /* @__PURE__ */ jsx33(
8903
+ Shield5,
8284
8904
  {
8285
8905
  className: `w-3 h-3 ${indicators.backup ? "text-green-500" : "text-orange-400"}`
8286
8906
  }
8287
8907
  ),
8288
- /* @__PURE__ */ jsxs23("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: [
8908
+ /* @__PURE__ */ jsxs24("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: [
8289
8909
  "Vault Backup: ",
8290
8910
  indicators.backup ? "Available" : "Not Found"
8291
8911
  ] })
@@ -8294,59 +8914,59 @@ var ConnectWalletButton = ({
8294
8914
  ] })
8295
8915
  }
8296
8916
  ) }),
8297
- isWalletMenuOpen && address && /* @__PURE__ */ jsx32("div", { className: "fixed inset-0 z-[60]", children: /* @__PURE__ */ jsx32(Dialog, { open: isWalletMenuOpen, onOpenChange: setIsWalletMenuOpen, children: /* @__PURE__ */ jsxs23(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: [
8298
- /* @__PURE__ */ jsx32(VisuallyHidden, { children: /* @__PURE__ */ jsx32(DialogTitle, { children: "Wallet Menu" }) }),
8299
- /* @__PURE__ */ jsx32(DialogDescription, { className: "sr-only", children: "Smart Account wallet actions and status" }),
8300
- /* @__PURE__ */ jsx32("div", { className: `p-4 border-b ${theme.divider}`, children: /* @__PURE__ */ jsx32("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-4", children: [
8301
- /* @__PURE__ */ jsx32("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 ? (
8917
+ isWalletMenuOpen && address && /* @__PURE__ */ jsx33("div", { className: "fixed inset-0 z-[60]", children: /* @__PURE__ */ jsx33(Dialog, { open: isWalletMenuOpen, onOpenChange: setIsWalletMenuOpen, children: /* @__PURE__ */ jsxs24(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: [
8918
+ /* @__PURE__ */ jsx33(VisuallyHidden, { children: /* @__PURE__ */ jsx33(DialogTitle, { children: "Wallet Menu" }) }),
8919
+ /* @__PURE__ */ jsx33(DialogDescription, { className: "sr-only", children: "Smart Account wallet actions and status" }),
8920
+ /* @__PURE__ */ jsx33("div", { className: `p-4 border-b ${theme.divider}`, children: /* @__PURE__ */ jsx33("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs24("div", { className: "flex items-center space-x-4", children: [
8921
+ /* @__PURE__ */ jsx33("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 ? (
8302
8922
  // eslint-disable-next-line @next/next/no-img-element
8303
- /* @__PURE__ */ jsx32("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
8304
- ) : /* @__PURE__ */ jsx32("span", { className: "text-white font-bold text-lg", children: "L" }) }),
8305
- /* @__PURE__ */ jsxs23("div", { className: "flex-1 min-w-0", children: [
8306
- /* @__PURE__ */ jsx32("div", { className: `font-medium text-lg ${theme.titleText}`, children: displayName || "Smart Account" }),
8307
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-2", children: [
8308
- /* @__PURE__ */ jsx32("div", { className: `text-sm ${theme.mutedText}`, children: formatAddress(address) }),
8309
- /* @__PURE__ */ jsx32("button", { onClick: async () => {
8923
+ /* @__PURE__ */ jsx33("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
8924
+ ) : /* @__PURE__ */ jsx33("span", { className: "text-white font-bold text-lg", children: "L" }) }),
8925
+ /* @__PURE__ */ jsxs24("div", { className: "flex-1 min-w-0", children: [
8926
+ /* @__PURE__ */ jsx33("div", { className: `font-medium text-lg ${theme.titleText}`, children: displayName || "Smart Account" }),
8927
+ /* @__PURE__ */ jsxs24("div", { className: "flex items-center space-x-2", children: [
8928
+ /* @__PURE__ */ jsx33("div", { className: `text-sm ${theme.mutedText}`, children: formatAddress(address) }),
8929
+ /* @__PURE__ */ jsx33("button", { onClick: async () => {
8310
8930
  try {
8311
8931
  await navigator.clipboard.writeText(address);
8312
8932
  setCopied(true);
8313
8933
  setTimeout(() => setCopied(false), 1500);
8314
8934
  } catch {
8315
8935
  }
8316
- }, title: "Copy address", className: `${theme.iconColor} hover:${theme.titleText} p-1`, children: copied ? /* @__PURE__ */ jsx32("span", { className: "text-green-500 text-sm", children: "\u2713" }) : /* @__PURE__ */ jsx32(Copy5, { className: "w-4 h-4" }) })
8936
+ }, title: "Copy address", className: `${theme.iconColor} hover:${theme.titleText} p-1`, children: copied ? /* @__PURE__ */ jsx33("span", { className: "text-green-500 text-sm", children: "\u2713" }) : /* @__PURE__ */ jsx33(Copy5, { className: "w-4 h-4" }) })
8317
8937
  ] })
8318
8938
  ] })
8319
8939
  ] }) }) }),
8320
- /* @__PURE__ */ jsxs23("div", { className: "p-4", children: [
8321
- /* @__PURE__ */ jsxs23("div", { className: "grid grid-cols-3 gap-2 mb-4", children: [
8322
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
8940
+ /* @__PURE__ */ jsxs24("div", { className: "p-4", children: [
8941
+ /* @__PURE__ */ jsxs24("div", { className: "grid grid-cols-3 gap-2 mb-4", children: [
8942
+ /* @__PURE__ */ jsxs24("button", { onClick: () => {
8323
8943
  setIsWalletMenuOpen(false);
8324
8944
  setIsSendOpen(true);
8325
8945
  }, 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: [
8326
- /* @__PURE__ */ jsx32(ArrowUp, { className: "w-5 h-5" }),
8327
- /* @__PURE__ */ jsx32("span", { className: "text-sm font-medium", children: "Send" })
8946
+ /* @__PURE__ */ jsx33(ArrowUp, { className: "w-5 h-5" }),
8947
+ /* @__PURE__ */ jsx33("span", { className: "text-sm font-medium", children: "Send" })
8328
8948
  ] }),
8329
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
8949
+ /* @__PURE__ */ jsxs24("button", { onClick: () => {
8330
8950
  setIsWalletMenuOpen(false);
8331
8951
  setIsReceiveOpen(true);
8332
8952
  }, 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: [
8333
- /* @__PURE__ */ jsx32(ArrowDown, { className: "w-5 h-5" }),
8334
- /* @__PURE__ */ jsx32("span", { className: "text-sm font-medium", children: "Receive" })
8953
+ /* @__PURE__ */ jsx33(ArrowDown, { className: "w-5 h-5" }),
8954
+ /* @__PURE__ */ jsx33("span", { className: "text-sm font-medium", children: "Receive" })
8335
8955
  ] }),
8336
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
8956
+ /* @__PURE__ */ jsxs24("button", { onClick: () => {
8337
8957
  setIsWalletMenuOpen(false);
8338
8958
  setIsBuyOpen(true);
8339
8959
  }, 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: [
8340
- /* @__PURE__ */ jsx32(Plus2, { className: "w-5 h-5" }),
8341
- /* @__PURE__ */ jsx32("span", { className: "text-sm font-medium", children: "Buy" })
8960
+ /* @__PURE__ */ jsx33(Plus2, { className: "w-5 h-5" }),
8961
+ /* @__PURE__ */ jsx33("span", { className: "text-sm font-medium", children: "Buy" })
8342
8962
  ] })
8343
8963
  ] }),
8344
- config.warnings?.backupWarning && !hasServerVault && /* @__PURE__ */ jsx32("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__ */ jsxs23("div", { className: "flex items-start space-x-3", children: [
8345
- /* @__PURE__ */ jsx32(AlertTriangle4, { className: `w-5 h-5 ${isDark ? "text-orange-400" : "text-orange-500"} mt-0.5 flex-shrink-0` }),
8346
- /* @__PURE__ */ jsxs23("div", { className: "flex-1 min-w-0", children: [
8347
- /* @__PURE__ */ jsx32("div", { className: `text-sm font-medium ${isDark ? "text-orange-300" : "text-orange-700"}`, children: "Backup Not Created" }),
8348
- /* @__PURE__ */ jsx32("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." }),
8349
- /* @__PURE__ */ jsxs23(
8964
+ config.warnings?.backupWarning && !hasServerVault && /* @__PURE__ */ jsx33("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__ */ jsxs24("div", { className: "flex items-start space-x-3", children: [
8965
+ /* @__PURE__ */ jsx33(AlertTriangle4, { className: `w-5 h-5 ${isDark ? "text-orange-400" : "text-orange-500"} mt-0.5 flex-shrink-0` }),
8966
+ /* @__PURE__ */ jsxs24("div", { className: "flex-1 min-w-0", children: [
8967
+ /* @__PURE__ */ jsx33("div", { className: `text-sm font-medium ${isDark ? "text-orange-300" : "text-orange-700"}`, children: "Backup Not Created" }),
8968
+ /* @__PURE__ */ jsx33("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." }),
8969
+ /* @__PURE__ */ jsxs24(
8350
8970
  "button",
8351
8971
  {
8352
8972
  onClick: () => {
@@ -8355,19 +8975,19 @@ var ConnectWalletButton = ({
8355
8975
  },
8356
8976
  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"}`,
8357
8977
  children: [
8358
- /* @__PURE__ */ jsx32(ShieldCheck2, { className: "w-3 h-3 inline mr-1" }),
8978
+ /* @__PURE__ */ jsx33(ShieldCheck2, { className: "w-3 h-3 inline mr-1" }),
8359
8979
  "Create Backup"
8360
8980
  ]
8361
8981
  }
8362
8982
  )
8363
8983
  ] })
8364
8984
  ] }) }),
8365
- config.warnings?.emailNotConnectedWarning && !profilesLoading && !profiles.some((p) => p.provider?.toLowerCase() === "email") && /* @__PURE__ */ jsx32("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__ */ jsxs23("div", { className: "flex items-start space-x-3", children: [
8366
- /* @__PURE__ */ jsx32(AlertTriangle4, { className: `w-5 h-5 ${isDark ? "text-blue-400" : "text-blue-500"} mt-0.5 flex-shrink-0` }),
8367
- /* @__PURE__ */ jsxs23("div", { className: "flex-1 min-w-0", children: [
8368
- /* @__PURE__ */ jsx32("div", { className: `text-sm font-medium ${isDark ? "text-blue-300" : "text-blue-700"}`, children: "Email Not Connected" }),
8369
- /* @__PURE__ */ jsx32("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." }),
8370
- /* @__PURE__ */ jsxs23(
8985
+ config.warnings?.emailNotConnectedWarning && !profilesLoading && !profiles.some((p) => p.provider?.toLowerCase() === "email") && /* @__PURE__ */ jsx33("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__ */ jsxs24("div", { className: "flex items-start space-x-3", children: [
8986
+ /* @__PURE__ */ jsx33(AlertTriangle4, { className: `w-5 h-5 ${isDark ? "text-blue-400" : "text-blue-500"} mt-0.5 flex-shrink-0` }),
8987
+ /* @__PURE__ */ jsxs24("div", { className: "flex-1 min-w-0", children: [
8988
+ /* @__PURE__ */ jsx33("div", { className: `text-sm font-medium ${isDark ? "text-blue-300" : "text-blue-700"}`, children: "Email Not Connected" }),
8989
+ /* @__PURE__ */ jsx33("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." }),
8990
+ /* @__PURE__ */ jsxs24(
8371
8991
  "button",
8372
8992
  {
8373
8993
  onClick: () => {
@@ -8376,80 +8996,87 @@ var ConnectWalletButton = ({
8376
8996
  },
8377
8997
  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"}`,
8378
8998
  children: [
8379
- /* @__PURE__ */ jsx32(ShieldCheck2, { className: "w-3 h-3 inline mr-1" }),
8999
+ /* @__PURE__ */ jsx33(ShieldCheck2, { className: "w-3 h-3 inline mr-1" }),
8380
9000
  "Connect Email"
8381
9001
  ]
8382
9002
  }
8383
9003
  )
8384
9004
  ] })
8385
9005
  ] }) }),
8386
- /* @__PURE__ */ jsx32(
9006
+ /* @__PURE__ */ jsx33(
8387
9007
  "button",
8388
9008
  {
8389
9009
  onClick: () => address && window.open(`${LUMIA_EXPLORER_URL}/address/${address}`, "_blank"),
8390
9010
  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`,
8391
- children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between", children: [
8392
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-3", children: [
8393
- /* @__PURE__ */ jsx32("div", { className: "w-8 h-8 rounded-full flex items-center justify-center bg-transparent overflow-hidden", children: lumiaBeam.logoDataUri ? /* @__PURE__ */ jsx32("img", { src: lumiaBeam.logoDataUri, alt: "Chain logo", className: "w-full h-full object-cover" }) : lumiaBeam.logo === "lumia" ? /* @__PURE__ */ jsx32(LumiaLogo, { size: 32 }) : /* @__PURE__ */ jsx32("span", { className: "text-white text-xs font-bold", children: (lumiaBeam.name || "L").charAt(0) }) }),
8394
- /* @__PURE__ */ jsxs23("div", { children: [
8395
- /* @__PURE__ */ jsx32("div", { className: `${theme.titleText} font-medium`, children: lumiaBeam.name }),
8396
- /* @__PURE__ */ jsxs23("div", { className: theme.mutedText + " text-sm", children: [
9011
+ children: /* @__PURE__ */ jsxs24("div", { className: "flex items-center justify-between", children: [
9012
+ /* @__PURE__ */ jsxs24("div", { className: "flex items-center space-x-3", children: [
9013
+ /* @__PURE__ */ jsx33("div", { className: "w-8 h-8 rounded-full flex items-center justify-center bg-transparent overflow-hidden", children: lumiaBeam.logoDataUri ? /* @__PURE__ */ jsx33("img", { src: lumiaBeam.logoDataUri, alt: "Chain logo", className: "w-full h-full object-cover" }) : lumiaBeam.logo === "lumia" ? /* @__PURE__ */ jsx33(LumiaLogo, { size: 32 }) : /* @__PURE__ */ jsx33("span", { className: "text-white text-xs font-bold", children: (lumiaBeam.name || "L").charAt(0) }) }),
9014
+ /* @__PURE__ */ jsxs24("div", { children: [
9015
+ /* @__PURE__ */ jsx33("div", { className: `${theme.titleText} font-medium`, children: lumiaBeam.name }),
9016
+ /* @__PURE__ */ jsxs24("div", { className: theme.mutedText + " text-sm", children: [
8397
9017
  formatBalance(),
8398
9018
  " LUMIA"
8399
9019
  ] })
8400
9020
  ] })
8401
9021
  ] }),
8402
- /* @__PURE__ */ jsx32("div", { className: theme.iconColor, children: /* @__PURE__ */ jsx32(ArrowUpRight2, { className: "w-4 h-4" }) })
9022
+ /* @__PURE__ */ jsx33("div", { className: theme.iconColor, children: /* @__PURE__ */ jsx33(ArrowUpRight2, { className: "w-4 h-4" }) })
8403
9023
  ] })
8404
9024
  }
8405
9025
  ),
8406
- /* @__PURE__ */ jsxs23("div", { className: "space-y-1", children: [
8407
- config.features?.kycNeeded && /* @__PURE__ */ jsxs23("button", { onClick: () => {
9026
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
9027
+ config.features?.kycNeeded && /* @__PURE__ */ jsxs24("button", { onClick: () => {
8408
9028
  setIsWalletMenuOpen(false);
8409
9029
  setIsKycOpen(true);
8410
9030
  }, 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: [
8411
- /* @__PURE__ */ jsx32(ShieldCheck2, { className: `w-5 h-5 ${theme.iconColor}` }),
8412
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "KYC" })
9031
+ /* @__PURE__ */ jsx33(ShieldCheck2, { className: `w-5 h-5 ${theme.iconColor}` }),
9032
+ /* @__PURE__ */ jsx33("span", { className: theme.titleText, children: "KYC" })
8413
9033
  ] }),
8414
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
9034
+ /* @__PURE__ */ jsxs24("button", { onClick: () => {
8415
9035
  setIsWalletMenuOpen(false);
8416
9036
  setIsTransactionsOpen(true);
8417
9037
  }, 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: [
8418
- /* @__PURE__ */ jsx32(Activity2, { className: `w-5 h-5 ${theme.iconColor}` }),
8419
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Transactions" })
9038
+ /* @__PURE__ */ jsx33(Activity2, { className: `w-5 h-5 ${theme.iconColor}` }),
9039
+ /* @__PURE__ */ jsx33("span", { className: theme.titleText, children: "Transactions" })
8420
9040
  ] }),
8421
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
9041
+ /* @__PURE__ */ jsxs24("button", { onClick: () => {
8422
9042
  setIsWalletMenuOpen(false);
8423
9043
  setIsViewAssetsOpen(true);
8424
9044
  }, 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: [
8425
- /* @__PURE__ */ jsx32(Gem2, { className: `w-5 h-5 ${theme.iconColor}` }),
8426
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "View Assets" })
9045
+ /* @__PURE__ */ jsx33(Gem2, { className: `w-5 h-5 ${theme.iconColor}` }),
9046
+ /* @__PURE__ */ jsx33("span", { className: theme.titleText, children: "View Assets" })
8427
9047
  ] }),
8428
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
9048
+ /* @__PURE__ */ jsxs24("button", { onClick: () => {
8429
9049
  setIsWalletMenuOpen(false);
8430
9050
  setIsManageWalletOpen(true);
8431
9051
  }, 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: [
8432
- /* @__PURE__ */ jsx32(CreditCard2, { className: `w-5 h-5 ${theme.iconColor}` }),
8433
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Manage Wallet" })
9052
+ /* @__PURE__ */ jsx33(CreditCard2, { className: `w-5 h-5 ${theme.iconColor}` }),
9053
+ /* @__PURE__ */ jsx33("span", { className: theme.titleText, children: "Manage Wallet" })
8434
9054
  ] }),
8435
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
9055
+ /* @__PURE__ */ jsxs24("button", { onClick: () => {
8436
9056
  setIsWalletMenuOpen(false);
8437
9057
  setIsSecurityOpen(true);
8438
9058
  }, 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: [
8439
- /* @__PURE__ */ jsx32(Lock2, { className: `w-5 h-5 ${theme.iconColor}` }),
8440
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Security" })
9059
+ /* @__PURE__ */ jsx33(Lock3, { className: `w-5 h-5 ${theme.iconColor}` }),
9060
+ /* @__PURE__ */ jsx33("span", { className: theme.titleText, children: "Security" })
9061
+ ] }),
9062
+ /* @__PURE__ */ jsxs24("button", { onClick: () => {
9063
+ setIsWalletMenuOpen(false);
9064
+ setIsBackupOpen(true);
9065
+ }, 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: [
9066
+ /* @__PURE__ */ jsx33(Shield5, { className: `w-5 h-5 ${theme.iconColor}` }),
9067
+ /* @__PURE__ */ jsx33("span", { className: theme.titleText, children: "Keyshare Backup" })
8441
9068
  ] }),
8442
- /* @__PURE__ */ jsxs23("button", { onClick: async () => {
9069
+ /* @__PURE__ */ jsxs24("button", { onClick: async () => {
8443
9070
  await handleDisconnect();
8444
9071
  setIsWalletMenuOpen(false);
8445
9072
  }, 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: [
8446
- /* @__PURE__ */ jsx32(ArrowUpRight2, { className: "w-5 h-5 text-red-600" }),
8447
- /* @__PURE__ */ jsx32("span", { className: "text-red-600", children: "Disconnect Wallet" })
9073
+ /* @__PURE__ */ jsx33(ArrowUpRight2, { className: "w-5 h-5 text-red-600" }),
9074
+ /* @__PURE__ */ jsx33("span", { className: "text-red-600", children: "Disconnect Wallet" })
8448
9075
  ] })
8449
9076
  ] })
8450
9077
  ] })
8451
9078
  ] }) }) }),
8452
- /* @__PURE__ */ jsx32(
9079
+ /* @__PURE__ */ jsx33(
8453
9080
  ManageWallet,
8454
9081
  {
8455
9082
  open: isManageWalletOpen,
@@ -8460,7 +9087,7 @@ var ConnectWalletButton = ({
8460
9087
  }
8461
9088
  }
8462
9089
  ),
8463
- /* @__PURE__ */ jsx32(
9090
+ /* @__PURE__ */ jsx33(
8464
9091
  SecurityModal,
8465
9092
  {
8466
9093
  open: isSecurityOpen,
@@ -8471,7 +9098,23 @@ var ConnectWalletButton = ({
8471
9098
  }
8472
9099
  }
8473
9100
  ),
8474
- /* @__PURE__ */ jsx32(
9101
+ isBackupOpen && session?.mpcUserId && /* @__PURE__ */ jsx33(Dialog, { open: isBackupOpen, onOpenChange: setIsBackupOpen, children: /* @__PURE__ */ jsxs24(DialogContent, { className: "max-w-2xl", children: [
9102
+ /* @__PURE__ */ jsxs24(VisuallyHidden, { children: [
9103
+ /* @__PURE__ */ jsx33(DialogTitle, { children: "Keyshare Backup" }),
9104
+ /* @__PURE__ */ jsx33(DialogDescription, { children: "Create and manage encrypted backups of your keyshare" })
9105
+ ] }),
9106
+ /* @__PURE__ */ jsx33(
9107
+ KeyshareBackup,
9108
+ {
9109
+ userId: session.mpcUserId,
9110
+ onClose: () => setIsBackupOpen(false),
9111
+ onBackupSuccess: () => {
9112
+ console.log("[ConnectWalletButton] Backup created successfully");
9113
+ }
9114
+ }
9115
+ )
9116
+ ] }) }),
9117
+ /* @__PURE__ */ jsx33(
8475
9118
  TransactionsModal,
8476
9119
  {
8477
9120
  open: isTransactionsOpen,
@@ -8482,7 +9125,7 @@ var ConnectWalletButton = ({
8482
9125
  }
8483
9126
  }
8484
9127
  ),
8485
- /* @__PURE__ */ jsx32(
9128
+ /* @__PURE__ */ jsx33(
8486
9129
  ViewAssetsModal,
8487
9130
  {
8488
9131
  open: isViewAssetsOpen,
@@ -8493,7 +9136,7 @@ var ConnectWalletButton = ({
8493
9136
  }
8494
9137
  }
8495
9138
  ),
8496
- /* @__PURE__ */ jsx32(
9139
+ /* @__PURE__ */ jsx33(
8497
9140
  SendModal,
8498
9141
  {
8499
9142
  open: isSendOpen,
@@ -8504,7 +9147,7 @@ var ConnectWalletButton = ({
8504
9147
  }
8505
9148
  }
8506
9149
  ),
8507
- /* @__PURE__ */ jsx32(
9150
+ /* @__PURE__ */ jsx33(
8508
9151
  ReceiveModal,
8509
9152
  {
8510
9153
  open: isReceiveOpen,
@@ -8515,7 +9158,7 @@ var ConnectWalletButton = ({
8515
9158
  }
8516
9159
  }
8517
9160
  ),
8518
- /* @__PURE__ */ jsx32(
9161
+ /* @__PURE__ */ jsx33(
8519
9162
  BuyModal,
8520
9163
  {
8521
9164
  open: isBuyOpen,
@@ -8526,7 +9169,7 @@ var ConnectWalletButton = ({
8526
9169
  }
8527
9170
  }
8528
9171
  ),
8529
- /* @__PURE__ */ jsx32(
9172
+ /* @__PURE__ */ jsx33(
8530
9173
  KycModal,
8531
9174
  {
8532
9175
  open: isKycOpen,
@@ -8537,7 +9180,7 @@ var ConnectWalletButton = ({
8537
9180
  }
8538
9181
  }
8539
9182
  ),
8540
- /* @__PURE__ */ jsx32(
9183
+ /* @__PURE__ */ jsx33(
8541
9184
  AuthModal,
8542
9185
  {
8543
9186
  open: isAuthModalOpen,
@@ -8582,7 +9225,7 @@ var ConnectWalletButton = ({
8582
9225
  }
8583
9226
  }
8584
9227
  ),
8585
- /* @__PURE__ */ jsx32(
9228
+ /* @__PURE__ */ jsx33(
8586
9229
  TssManagerWithRef,
8587
9230
  {
8588
9231
  ref: tssManagerRef,
@@ -8600,7 +9243,7 @@ var ConnectWalletButton = ({
8600
9243
  };
8601
9244
 
8602
9245
  // src/components/ThemeToggle.tsx
8603
- import { jsx as jsx33, jsxs as jsxs24 } from "react/jsx-runtime";
9246
+ import { jsx as jsx34, jsxs as jsxs25 } from "react/jsx-runtime";
8604
9247
  var ThemeToggle = () => {
8605
9248
  const { config, updateConfig } = useLumiaPassportConfig();
8606
9249
  const currentTheme = config.ui.theme;
@@ -8645,7 +9288,7 @@ var ThemeToggle = () => {
8645
9288
  return "auto";
8646
9289
  }
8647
9290
  };
8648
- return /* @__PURE__ */ jsx33("div", { className: "lumia-scope", children: /* @__PURE__ */ jsxs24(
9291
+ return /* @__PURE__ */ jsx34("div", { className: "lumia-scope", children: /* @__PURE__ */ jsxs25(
8649
9292
  "button",
8650
9293
  {
8651
9294
  onClick: cycleTheme,
@@ -8661,29 +9304,29 @@ var ThemeToggle = () => {
8661
9304
  };
8662
9305
 
8663
9306
  // src/components/LumiaLogo.tsx
8664
- import { jsx as jsx34, jsxs as jsxs25 } from "react/jsx-runtime";
9307
+ import { jsx as jsx35, jsxs as jsxs26 } from "react/jsx-runtime";
8665
9308
  var LumiaLogo2 = ({ size = 80, className = "" }) => {
8666
- return /* @__PURE__ */ jsx34(
9309
+ return /* @__PURE__ */ jsx35(
8667
9310
  "div",
8668
9311
  {
8669
9312
  className: `flex items-center justify-center ${className}`,
8670
9313
  style: { width: size, height: size },
8671
- children: /* @__PURE__ */ jsxs25("svg", { viewBox: "0 0 512 512", width: size, height: size, children: [
8672
- /* @__PURE__ */ jsx34("circle", { cx: "256", cy: "256", r: "256", fill: "#060117", strokeWidth: "0" }),
8673
- /* @__PURE__ */ jsx34("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" }),
8674
- /* @__PURE__ */ jsx34("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" }),
8675
- /* @__PURE__ */ jsx34("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" }),
8676
- /* @__PURE__ */ jsx34("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" })
9314
+ children: /* @__PURE__ */ jsxs26("svg", { viewBox: "0 0 512 512", width: size, height: size, children: [
9315
+ /* @__PURE__ */ jsx35("circle", { cx: "256", cy: "256", r: "256", fill: "#060117", strokeWidth: "0" }),
9316
+ /* @__PURE__ */ jsx35("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" }),
9317
+ /* @__PURE__ */ jsx35("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" }),
9318
+ /* @__PURE__ */ jsx35("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" }),
9319
+ /* @__PURE__ */ jsx35("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" })
8677
9320
  ] })
8678
9321
  }
8679
9322
  );
8680
9323
  };
8681
9324
 
8682
9325
  // src/hooks/useTheme.ts
8683
- import { useMemo as useMemo4, useState as useState15, useEffect as useEffect12 } from "react";
9326
+ import { useMemo as useMemo6, useState as useState16, useEffect as useEffect13 } from "react";
8684
9327
  function useTheme2(configTheme) {
8685
- const [systemTheme, setSystemTheme] = useState15("light");
8686
- useEffect12(() => {
9328
+ const [systemTheme, setSystemTheme] = useState16("light");
9329
+ useEffect13(() => {
8687
9330
  if (typeof window === "undefined" || !window.matchMedia) return;
8688
9331
  const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
8689
9332
  const updateSystemTheme = () => {
@@ -8693,14 +9336,14 @@ function useTheme2(configTheme) {
8693
9336
  mediaQuery.addEventListener("change", updateSystemTheme);
8694
9337
  return () => mediaQuery.removeEventListener("change", updateSystemTheme);
8695
9338
  }, []);
8696
- const resolvedTheme = useMemo4(() => {
9339
+ const resolvedTheme = useMemo6(() => {
8697
9340
  if (configTheme === "auto") {
8698
9341
  return systemTheme;
8699
9342
  }
8700
9343
  return configTheme;
8701
9344
  }, [configTheme, systemTheme]);
8702
9345
  const isDark = resolvedTheme === "dark";
8703
- const themeClasses = useMemo4(
9346
+ const themeClasses = useMemo6(
8704
9347
  () => ({
8705
9348
  // Modal background
8706
9349
  modalBg: isDark ? "bg-gray-900" : "bg-white",
@@ -8736,9 +9379,9 @@ function useTheme2(configTheme) {
8736
9379
  }
8737
9380
 
8738
9381
  // src/internal/components/Hash.tsx
8739
- import * as React28 from "react";
9382
+ import * as React29 from "react";
8740
9383
  import { Copy as Copy6, ExternalLink as ExternalLink5 } from "lucide-react";
8741
- import { jsx as jsx35, jsxs as jsxs26 } from "react/jsx-runtime";
9384
+ import { jsx as jsx36, jsxs as jsxs27 } from "react/jsx-runtime";
8742
9385
  function toExplorerUrl(kind, value, chain) {
8743
9386
  const base2 = chain?.blockExplorers?.default?.url;
8744
9387
  if (!base2) return null;
@@ -8761,12 +9404,12 @@ var Hash = ({
8761
9404
  }) => {
8762
9405
  const value = hash || "";
8763
9406
  const explorer = toExplorerUrl(kind, value, chain || void 0);
8764
- const [copied, setCopied] = React28.useState(false);
8765
- if (!value) return /* @__PURE__ */ jsx35("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
8766
- return /* @__PURE__ */ jsxs26("div", { className: cn2("flex items-center gap-2", className), children: [
8767
- label && /* @__PURE__ */ jsx35("span", { className: "text-sm font-medium", children: label }),
8768
- /* @__PURE__ */ jsx35("code", { className: "text-xs bg-background px-2 py-1 rounded break-all", children: truncate ? short2(value) : value }),
8769
- showCopy && /* @__PURE__ */ jsx35(
9407
+ const [copied, setCopied] = React29.useState(false);
9408
+ if (!value) return /* @__PURE__ */ jsx36("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
9409
+ return /* @__PURE__ */ jsxs27("div", { className: cn2("flex items-center gap-2", className), children: [
9410
+ label && /* @__PURE__ */ jsx36("span", { className: "text-sm font-medium", children: label }),
9411
+ /* @__PURE__ */ jsx36("code", { className: "text-xs bg-background px-2 py-1 rounded break-all", children: truncate ? short2(value) : value }),
9412
+ showCopy && /* @__PURE__ */ jsx36(
8770
9413
  Button,
8771
9414
  {
8772
9415
  variant: "ghost",
@@ -8780,10 +9423,10 @@ var Hash = ({
8780
9423
  } catch {
8781
9424
  }
8782
9425
  },
8783
- children: /* @__PURE__ */ jsx35(Copy6, { className: "h-4 w-4" })
9426
+ children: /* @__PURE__ */ jsx36(Copy6, { className: "h-4 w-4" })
8784
9427
  }
8785
9428
  ),
8786
- showExplorer && explorer && /* @__PURE__ */ jsx35(
9429
+ showExplorer && explorer && /* @__PURE__ */ jsx36(
8787
9430
  "a",
8788
9431
  {
8789
9432
  href: explorer,
@@ -8791,7 +9434,7 @@ var Hash = ({
8791
9434
  rel: "noreferrer noopener",
8792
9435
  className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
8793
9436
  title: "Open in explorer",
8794
- children: /* @__PURE__ */ jsx35(ExternalLink5, { className: "h-4 w-4" })
9437
+ children: /* @__PURE__ */ jsx36(ExternalLink5, { className: "h-4 w-4" })
8795
9438
  }
8796
9439
  )
8797
9440
  ] });
@@ -8799,16 +9442,16 @@ var Hash = ({
8799
9442
 
8800
9443
  // src/internal/components/TransactionsList.tsx
8801
9444
  init_base();
8802
- import { useState as useState17, useEffect as useEffect13 } from "react";
8803
- import { jsx as jsx36, jsxs as jsxs27 } from "react/jsx-runtime";
9445
+ import { useState as useState18, useEffect as useEffect14 } from "react";
9446
+ import { jsx as jsx37, jsxs as jsxs28 } from "react/jsx-runtime";
8804
9447
  var TransactionsList = ({
8805
9448
  address,
8806
9449
  itemsCount = 10
8807
9450
  }) => {
8808
- const [transactions, setTransactions] = useState17([]);
8809
- const [loading, setLoading] = useState17(true);
8810
- const [error, setError] = useState17(null);
8811
- useEffect13(() => {
9451
+ const [transactions, setTransactions] = useState18([]);
9452
+ const [loading, setLoading] = useState18(true);
9453
+ const [error, setError] = useState18(null);
9454
+ useEffect14(() => {
8812
9455
  const fetchTransactions = async () => {
8813
9456
  try {
8814
9457
  setLoading(true);
@@ -8854,15 +9497,15 @@ var TransactionsList = ({
8854
9497
  window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
8855
9498
  };
8856
9499
  if (loading) {
8857
- return /* @__PURE__ */ jsxs27("div", { className: "p-4 text-center", children: [
8858
- /* @__PURE__ */ jsx36("div", { className: "animate-spin inline-block w-6 h-6 border-2 border-current border-t-transparent rounded-full" }),
8859
- /* @__PURE__ */ jsx36("p", { className: "mt-2 text-sm text-gray-600", children: "Loading transactions..." })
9500
+ return /* @__PURE__ */ jsxs28("div", { className: "p-4 text-center", children: [
9501
+ /* @__PURE__ */ jsx37("div", { className: "animate-spin inline-block w-6 h-6 border-2 border-current border-t-transparent rounded-full" }),
9502
+ /* @__PURE__ */ jsx37("p", { className: "mt-2 text-sm text-gray-600", children: "Loading transactions..." })
8860
9503
  ] });
8861
9504
  }
8862
9505
  if (error) {
8863
- return /* @__PURE__ */ jsxs27("div", { className: "p-4 text-center", children: [
8864
- /* @__PURE__ */ jsx36("p", { className: "text-red-600 text-sm", children: error }),
8865
- /* @__PURE__ */ jsx36(
9506
+ return /* @__PURE__ */ jsxs28("div", { className: "p-4 text-center", children: [
9507
+ /* @__PURE__ */ jsx37("p", { className: "text-red-600 text-sm", children: error }),
9508
+ /* @__PURE__ */ jsx37(
8866
9509
  "button",
8867
9510
  {
8868
9511
  onClick: () => window.location.reload(),
@@ -8873,54 +9516,54 @@ var TransactionsList = ({
8873
9516
  ] });
8874
9517
  }
8875
9518
  if (transactions.length === 0) {
8876
- return /* @__PURE__ */ jsx36("div", { className: "p-4 text-center", children: /* @__PURE__ */ jsx36("p", { className: "text-gray-600 text-sm", children: "No transactions found" }) });
9519
+ return /* @__PURE__ */ jsx37("div", { className: "p-4 text-center", children: /* @__PURE__ */ jsx37("p", { className: "text-gray-600 text-sm", children: "No transactions found" }) });
8877
9520
  }
8878
- return /* @__PURE__ */ jsx36("div", { className: "max-h-96 overflow-y-auto", children: /* @__PURE__ */ jsx36("div", { className: "space-y-2 p-2", children: transactions.map((tx) => /* @__PURE__ */ jsxs27(
9521
+ return /* @__PURE__ */ jsx37("div", { className: "max-h-96 overflow-y-auto", children: /* @__PURE__ */ jsx37("div", { className: "space-y-2 p-2", children: transactions.map((tx) => /* @__PURE__ */ jsxs28(
8879
9522
  "div",
8880
9523
  {
8881
9524
  className: "border rounded-lg p-3 hover:bg-gray-50 cursor-pointer transition-colors",
8882
9525
  onClick: () => openTransaction(tx.hash),
8883
9526
  children: [
8884
- /* @__PURE__ */ jsxs27("div", { className: "flex justify-between items-start mb-2", children: [
8885
- /* @__PURE__ */ jsxs27("div", { className: "flex-1", children: [
8886
- /* @__PURE__ */ jsxs27("div", { className: "flex items-center space-x-2 mb-1", children: [
8887
- /* @__PURE__ */ jsx36("span", { className: "text-xs font-mono bg-gray-100 px-2 py-1 rounded", children: formatAddress(tx.hash) }),
8888
- /* @__PURE__ */ jsx36("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" })
9527
+ /* @__PURE__ */ jsxs28("div", { className: "flex justify-between items-start mb-2", children: [
9528
+ /* @__PURE__ */ jsxs28("div", { className: "flex-1", children: [
9529
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center space-x-2 mb-1", children: [
9530
+ /* @__PURE__ */ jsx37("span", { className: "text-xs font-mono bg-gray-100 px-2 py-1 rounded", children: formatAddress(tx.hash) }),
9531
+ /* @__PURE__ */ jsx37("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" })
8889
9532
  ] }),
8890
- /* @__PURE__ */ jsxs27("div", { className: "text-sm space-y-1", children: [
8891
- /* @__PURE__ */ jsxs27("div", { children: [
8892
- /* @__PURE__ */ jsx36("span", { className: "text-gray-600", children: "From:" }),
8893
- /* @__PURE__ */ jsxs27("span", { className: "font-mono ml-1", children: [
9533
+ /* @__PURE__ */ jsxs28("div", { className: "text-sm space-y-1", children: [
9534
+ /* @__PURE__ */ jsxs28("div", { children: [
9535
+ /* @__PURE__ */ jsx37("span", { className: "text-gray-600", children: "From:" }),
9536
+ /* @__PURE__ */ jsxs28("span", { className: "font-mono ml-1", children: [
8894
9537
  formatAddress(tx.from.hash),
8895
- tx.from.is_contract && /* @__PURE__ */ jsx36("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
9538
+ tx.from.is_contract && /* @__PURE__ */ jsx37("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
8896
9539
  ] })
8897
9540
  ] }),
8898
- /* @__PURE__ */ jsxs27("div", { children: [
8899
- /* @__PURE__ */ jsx36("span", { className: "text-gray-600", children: "To:" }),
8900
- /* @__PURE__ */ jsxs27("span", { className: "font-mono ml-1", children: [
9541
+ /* @__PURE__ */ jsxs28("div", { children: [
9542
+ /* @__PURE__ */ jsx37("span", { className: "text-gray-600", children: "To:" }),
9543
+ /* @__PURE__ */ jsxs28("span", { className: "font-mono ml-1", children: [
8901
9544
  formatAddress(tx.to.hash),
8902
- tx.to.is_contract && /* @__PURE__ */ jsx36("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
9545
+ tx.to.is_contract && /* @__PURE__ */ jsx37("span", { className: "text-xs text-blue-600 ml-1", children: "(Contract)" })
8903
9546
  ] })
8904
9547
  ] }),
8905
- /* @__PURE__ */ jsxs27("div", { children: [
8906
- /* @__PURE__ */ jsx36("span", { className: "text-gray-600", children: "Value:" }),
8907
- /* @__PURE__ */ jsxs27("span", { className: "font-semibold ml-1", children: [
9548
+ /* @__PURE__ */ jsxs28("div", { children: [
9549
+ /* @__PURE__ */ jsx37("span", { className: "text-gray-600", children: "Value:" }),
9550
+ /* @__PURE__ */ jsxs28("span", { className: "font-semibold ml-1", children: [
8908
9551
  formatValue(tx.value),
8909
9552
  " LUMIA"
8910
9553
  ] })
8911
9554
  ] })
8912
9555
  ] })
8913
9556
  ] }),
8914
- /* @__PURE__ */ jsxs27("div", { className: "text-right text-xs text-gray-500", children: [
8915
- /* @__PURE__ */ jsx36("div", { children: formatDate2(tx.timestamp) }),
8916
- /* @__PURE__ */ jsxs27("div", { className: "mt-1", children: [
9557
+ /* @__PURE__ */ jsxs28("div", { className: "text-right text-xs text-gray-500", children: [
9558
+ /* @__PURE__ */ jsx37("div", { children: formatDate2(tx.timestamp) }),
9559
+ /* @__PURE__ */ jsxs28("div", { className: "mt-1", children: [
8917
9560
  "Gas: ",
8918
9561
  parseInt(tx.gas_used).toLocaleString()
8919
9562
  ] }),
8920
- tx.method && /* @__PURE__ */ jsx36("div", { className: "mt-1 text-blue-600", children: tx.method })
9563
+ tx.method && /* @__PURE__ */ jsx37("div", { className: "mt-1 text-blue-600", children: tx.method })
8921
9564
  ] })
8922
9565
  ] }),
8923
- tx.transaction_types.length > 0 && /* @__PURE__ */ jsx36("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ jsx36(
9566
+ tx.transaction_types.length > 0 && /* @__PURE__ */ jsx37("div", { className: "flex flex-wrap gap-1 mt-2", children: tx.transaction_types.map((type, idx) => /* @__PURE__ */ jsx37(
8924
9567
  "span",
8925
9568
  {
8926
9569
  className: "text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded-full",
@@ -8934,247 +9577,6 @@ var TransactionsList = ({
8934
9577
  )) }) });
8935
9578
  };
8936
9579
 
8937
- // src/internal/components/KeyshareBackup.tsx
8938
- import * as React30 from "react";
8939
- import { Shield as Shield5, Server as Server4, CheckCircle2 as CheckCircle28, AlertCircle as AlertCircle5, Key as Key5, X as X3, Eye as Eye3, EyeOff as EyeOff3, Download as Download2, Cloud as Cloud4, Lock as Lock3 } from "lucide-react";
8940
- init_vaultClient();
8941
- import { Fragment as Fragment7, jsx as jsx37, jsxs as jsxs28 } from "react/jsx-runtime";
8942
- function KeyshareBackup({ userId, onClose, onBackupSuccess }) {
8943
- const [backupStatus, setBackupStatus] = React30.useState(() => getBackupStatus(userId));
8944
- const [loading, setLoading] = React30.useState({
8945
- server: false,
8946
- cloud: false,
8947
- local: false
8948
- });
8949
- const [error, setError] = React30.useState(null);
8950
- const [success, setSuccess] = React30.useState(null);
8951
- const [showPassword, setShowPassword] = React30.useState(false);
8952
- const [useCustomPassword, setUseCustomPassword] = React30.useState(false);
8953
- const [customPassword, setCustomPassword] = React30.useState("");
8954
- const [cloudProviders, setCloudProviders] = React30.useState([]);
8955
- const [selectedCloudProvider, setSelectedCloudProvider] = React30.useState(null);
8956
- const hasKeyshareData = React30.useMemo(() => {
8957
- return !!getCurrentKeyshareBackupData(userId);
8958
- }, [userId]);
8959
- React30.useEffect(() => {
8960
- getAvailableCloudProviders2().then((providers) => {
8961
- setCloudProviders(providers);
8962
- if (providers.length > 0 && !selectedCloudProvider) {
8963
- setSelectedCloudProvider(providers[0].id);
8964
- }
8965
- });
8966
- }, [selectedCloudProvider]);
8967
- const refreshStatus = React30.useCallback(() => {
8968
- setBackupStatus(getBackupStatus(userId));
8969
- }, [userId]);
8970
- React30.useEffect(() => {
8971
- refreshStatus();
8972
- }, [refreshStatus]);
8973
- const handleBackup = async (method) => {
8974
- setLoading((prev) => ({ ...prev, [method]: true }));
8975
- setError(null);
8976
- setSuccess(null);
8977
- try {
8978
- const password = useCustomPassword ? customPassword : void 0;
8979
- switch (method) {
8980
- case "server":
8981
- await backupToServer(userId, password);
8982
- setSuccess("Successfully created server backup");
8983
- break;
8984
- case "cloud": {
8985
- await backupToCloud(userId, password, selectedCloudProvider || void 0);
8986
- setSuccess(`Successfully created cloud backup`);
8987
- const updatedProviders = await getAvailableCloudProviders2();
8988
- setCloudProviders(updatedProviders);
8989
- break;
8990
- }
8991
- case "local":
8992
- await backupToLocalFile(userId, password);
8993
- setSuccess("Backup file downloaded successfully");
8994
- break;
8995
- }
8996
- refreshStatus();
8997
- setTimeout(() => {
8998
- if (typeof window !== "undefined") {
8999
- window.dispatchEvent(
9000
- new CustomEvent("lumia-passport-backup-status-changed", {
9001
- detail: { method, success: true }
9002
- })
9003
- );
9004
- }
9005
- onBackupSuccess?.();
9006
- }, 100);
9007
- } catch (err) {
9008
- const errorMsg = err instanceof Error ? err.message : "Backup creation failed";
9009
- setError(errorMsg);
9010
- updateBackupStatus(userId, method, { error: errorMsg });
9011
- refreshStatus();
9012
- } finally {
9013
- setLoading((prev) => ({ ...prev, [method]: false }));
9014
- }
9015
- };
9016
- const formatLastBackup = (timestamp) => {
9017
- if (!timestamp) return "Never";
9018
- const date = new Date(timestamp);
9019
- return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
9020
- };
9021
- return /* @__PURE__ */ jsxs28(Card, { className: "border-green-200 bg-green-50", children: [
9022
- /* @__PURE__ */ jsx37(CardHeader, { className: "pb-4", children: /* @__PURE__ */ jsxs28("div", { className: "flex items-center justify-between", children: [
9023
- /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-3", children: [
9024
- /* @__PURE__ */ jsx37(Shield5, { className: "h-6 w-6 text-green-600" }),
9025
- /* @__PURE__ */ jsxs28("div", { children: [
9026
- /* @__PURE__ */ jsx37(CardTitle, { className: "text-lg", children: "Create Backup" }),
9027
- /* @__PURE__ */ jsx37(CardDescription, { className: "text-sm", children: "Secure your keyshare with encrypted backups" })
9028
- ] })
9029
- ] }),
9030
- onClose && /* @__PURE__ */ jsx37("button", { onClick: onClose, className: "p-1 rounded bg-red-100 text-red-600 hover:bg-red-200 transition-colors", title: "Close", children: /* @__PURE__ */ jsx37(X3, { className: "h-4 w-4" }) })
9031
- ] }) }),
9032
- /* @__PURE__ */ jsxs28(CardContent, { className: "space-y-6", children: [
9033
- error && /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-2 p-3 rounded bg-red-50 border border-red-200 text-red-700 text-sm", children: [
9034
- /* @__PURE__ */ jsx37(AlertCircle5, { className: "h-4 w-4 flex-shrink-0" }),
9035
- /* @__PURE__ */ jsx37("span", { children: error })
9036
- ] }),
9037
- success && /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-2 p-3 rounded bg-green-50 border border-green-200 text-green-700 text-sm", children: [
9038
- /* @__PURE__ */ jsx37(CheckCircle28, { className: "h-4 w-4 flex-shrink-0" }),
9039
- /* @__PURE__ */ jsx37("span", { children: success })
9040
- ] }),
9041
- /* @__PURE__ */ jsxs28("div", { className: "space-y-3", children: [
9042
- /* @__PURE__ */ jsx37("div", { className: "text-sm font-medium text-gray-700", children: "Encryption Method:" }),
9043
- /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-2", children: [
9044
- /* @__PURE__ */ jsx37(
9045
- "input",
9046
- {
9047
- type: "checkbox",
9048
- id: "use-backup-password",
9049
- checked: useCustomPassword,
9050
- onChange: (e) => setUseCustomPassword(e.target.checked),
9051
- className: "rounded"
9052
- }
9053
- ),
9054
- /* @__PURE__ */ jsx37("label", { htmlFor: "use-backup-password", className: "text-sm font-medium", children: "Use custom password instead of passkey" })
9055
- ] }),
9056
- !useCustomPassword && /* @__PURE__ */ jsx37("div", { className: "p-3 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700", children: /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-2", children: [
9057
- /* @__PURE__ */ jsx37(Key5, { className: "h-4 w-4" }),
9058
- /* @__PURE__ */ jsx37("span", { children: "Your passkey will be used to encrypt the backup securely" })
9059
- ] }) }),
9060
- useCustomPassword && /* @__PURE__ */ jsxs28("div", { className: "relative", children: [
9061
- /* @__PURE__ */ jsx37(
9062
- Input,
9063
- {
9064
- type: showPassword ? "text" : "password",
9065
- placeholder: "Enter backup encryption password",
9066
- value: customPassword,
9067
- onChange: (e) => setCustomPassword(e.target.value),
9068
- className: "pr-10"
9069
- }
9070
- ),
9071
- /* @__PURE__ */ jsx37(
9072
- "button",
9073
- {
9074
- type: "button",
9075
- onClick: () => setShowPassword(!showPassword),
9076
- className: "absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-500 hover:text-gray-700",
9077
- children: showPassword ? /* @__PURE__ */ jsx37(EyeOff3, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx37(Eye3, { className: "h-4 w-4" })
9078
- }
9079
- )
9080
- ] })
9081
- ] }),
9082
- /* @__PURE__ */ jsxs28("div", { className: "space-y-4", children: [
9083
- /* @__PURE__ */ jsx37("div", { className: "text-sm font-medium text-gray-700", children: "Choose Backup Method:" }),
9084
- /* @__PURE__ */ jsxs28("div", { className: "p-4 rounded-lg border border-blue-200 bg-blue-50/50", children: [
9085
- /* @__PURE__ */ jsx37("div", { className: "flex items-center justify-between mb-3", children: /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-3", children: [
9086
- /* @__PURE__ */ jsx37(Server4, { className: "h-5 w-5 text-blue-600" }),
9087
- /* @__PURE__ */ jsxs28("div", { children: [
9088
- /* @__PURE__ */ jsx37("div", { className: "font-medium text-sm", children: "Server Backup" }),
9089
- /* @__PURE__ */ jsx37("div", { className: "text-xs text-gray-600", children: "Store encrypted backup on secure server" })
9090
- ] })
9091
- ] }) }),
9092
- /* @__PURE__ */ jsx37(
9093
- Button,
9094
- {
9095
- onClick: () => handleBackup("server"),
9096
- disabled: loading.server || useCustomPassword && !customPassword || !hasKeyshareData,
9097
- className: "px-4 py-2",
9098
- children: loading.server ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
9099
- }
9100
- ),
9101
- /* @__PURE__ */ jsxs28("div", { className: "text-xs text-gray-600 mt-2", children: [
9102
- "Encrypted backup stored on secure server \u2022 Last: ",
9103
- formatLastBackup(backupStatus.server.lastBackup)
9104
- ] })
9105
- ] }),
9106
- /* @__PURE__ */ jsxs28("div", { className: "p-4 rounded-lg border border-sky-200 bg-sky-50/50", children: [
9107
- /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-3 mb-3", children: [
9108
- /* @__PURE__ */ jsx37(Cloud4, { className: "h-5 w-5 text-sky-600" }),
9109
- /* @__PURE__ */ jsxs28("div", { children: [
9110
- /* @__PURE__ */ jsx37("div", { className: "font-medium text-sm", children: "Cloud Backup" }),
9111
- /* @__PURE__ */ jsx37("div", { className: "text-xs text-gray-600", children: "Store encrypted backup in cloud storage" })
9112
- ] })
9113
- ] }),
9114
- cloudProviders.length > 1 && /* @__PURE__ */ jsx37("div", { className: "mb-3", children: /* @__PURE__ */ jsx37(
9115
- "select",
9116
- {
9117
- value: selectedCloudProvider || "",
9118
- onChange: (e) => setSelectedCloudProvider(e.target.value),
9119
- className: "text-sm border rounded px-2 py-1 w-full",
9120
- children: cloudProviders.map((provider) => /* @__PURE__ */ jsxs28("option", { value: provider.id, children: [
9121
- provider.icon,
9122
- " ",
9123
- provider.name,
9124
- " ",
9125
- provider.isAuthenticated ? "\u2713" : ""
9126
- ] }, provider.id))
9127
- }
9128
- ) }),
9129
- /* @__PURE__ */ jsx37(
9130
- Button,
9131
- {
9132
- onClick: () => handleBackup("cloud"),
9133
- disabled: loading.cloud || useCustomPassword && !customPassword || !hasKeyshareData || cloudProviders.length === 0,
9134
- className: "px-4 py-2",
9135
- children: loading.cloud ? "Creating..." : useCustomPassword ? "Create with Password" : "Create with Passkey"
9136
- }
9137
- ),
9138
- /* @__PURE__ */ jsx37("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)}` })
9139
- ] }),
9140
- /* @__PURE__ */ jsxs28("div", { className: "p-4 rounded-lg border border-purple-200 bg-purple-50/50", children: [
9141
- /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-3 mb-3", children: [
9142
- /* @__PURE__ */ jsx37(Download2, { className: "h-5 w-5 text-purple-600" }),
9143
- /* @__PURE__ */ jsxs28("div", { children: [
9144
- /* @__PURE__ */ jsx37("div", { className: "font-medium text-sm", children: "File Backup" }),
9145
- /* @__PURE__ */ jsx37("div", { className: "text-xs text-gray-600", children: "Download encrypted backup file to your device" })
9146
- ] })
9147
- ] }),
9148
- /* @__PURE__ */ jsx37(
9149
- Button,
9150
- {
9151
- onClick: () => handleBackup("local"),
9152
- disabled: loading.local || useCustomPassword && !customPassword || !hasKeyshareData,
9153
- className: "w-full",
9154
- children: loading.local ? "Creating..." : useCustomPassword ? "Create & Download" : "Create & Download with Passkey"
9155
- }
9156
- ),
9157
- /* @__PURE__ */ jsxs28("div", { className: "text-xs text-gray-600 mt-2", children: [
9158
- "Download encrypted backup file to your device \u2022 Last: ",
9159
- formatLastBackup(backupStatus.local.lastBackup)
9160
- ] })
9161
- ] })
9162
- ] }),
9163
- /* @__PURE__ */ jsxs28("div", { className: "flex items-start gap-2 p-3 bg-amber-50 border border-amber-200 rounded text-amber-800 text-xs", children: [
9164
- /* @__PURE__ */ jsx37(Lock3, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
9165
- /* @__PURE__ */ jsxs28("div", { children: [
9166
- /* @__PURE__ */ jsx37("div", { className: "font-medium", children: "Security Notice" }),
9167
- /* @__PURE__ */ jsxs28("div", { className: "mt-1", children: [
9168
- useCustomPassword ? /* @__PURE__ */ jsx37(Fragment7, { children: "All backups are encrypted with AES-256 using your custom password. Store your password securely - without it, backups cannot be restored." }) : /* @__PURE__ */ jsx37(Fragment7, { children: "All backups are encrypted with AES-256 using your passkey. Your passkey authenticator (device/biometrics) is required to restore backups." }),
9169
- " ",
9170
- "Without backup access, you cannot recover your smart account if you lose this device."
9171
- ] })
9172
- ] })
9173
- ] })
9174
- ] })
9175
- ] });
9176
- }
9177
-
9178
9580
  // src/hooks/useUserOpStatus.ts
9179
9581
  init_base();
9180
9582
  import * as React31 from "react";
@@ -9501,6 +9903,7 @@ export {
9501
9903
  UserOpStatus,
9502
9904
  getUserProfile,
9503
9905
  lumiaBeam,
9906
+ prepareUserOperation,
9504
9907
  queryClient,
9505
9908
  sendUserOperation,
9506
9909
  updateUserProfile,