@lumiapassport/ui-kit 1.10.1 → 1.11.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
@@ -18,16 +18,29 @@ var __copyProps = (to, from, except, desc) => {
18
18
  return to;
19
19
  };
20
20
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
21
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
22
 
22
23
  // src/styles/built.css
23
24
  var built_default;
24
25
  var init_built = __esm({
25
26
  "src/styles/built.css"() {
26
- 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;background-color:transparent;border: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 .my-auto{margin-top:auto;margin-bottom:auto}.lumia-scope .-mt-5{margin-top:-1.25rem}.lumia-scope .mb-1{margin-bottom:.25rem}.lumia-scope .mb-1\\.5{margin-bottom:.375rem}.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-3{margin-left:.75rem}.lumia-scope .ml-4{margin-left:1rem}.lumia-scope .ml-auto{margin-left:auto}.lumia-scope .mr-1{margin-right:.25rem}.lumia-scope .mr-1\\.5{margin-right:.375rem}.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-1\\.5{margin-top:.375rem}.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-20{height:5rem}.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-\\[32px\\]{height:32px}.lumia-scope .h-fit{height:-moz-fit-content;height:fit-content}.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-20{width:5rem}.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-\\[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 glow-warning{0%,to{box-shadow:0 0 0 rgba(234,88,12,.5)}50%{box-shadow:0 0 20px rgba(234,88,12,.8)}}.lumia-scope .animate-glow-warning{animation:glow-warning 2s ease-in-out infinite}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.6}}.lumia-scope .animate-pulse-warning{animation:pulse-warning 2s cubic-bezier(.4,0,.6,1) infinite}@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-2\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*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-3\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.875rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.875rem*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-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.lumia-scope .border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.lumia-scope .border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.lumia-scope .border-amber-500\\/30{border-color:rgba(245,158,11,.3)}.lumia-scope .border-amber-500\\/40{border-color:rgba(245,158,11,.4)}.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-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.lumia-scope .border-blue-500\\/30{border-color:rgba(59,130,246,.3)}.lumia-scope .border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.lumia-scope .border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/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-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.lumia-scope .border-green-500\\/40{border-color:rgba(34,197,94,.4)}.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-green-900\\/60{border-color:rgba(20,83,45,.6)}.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-800{--tw-border-opacity:1;border-color:rgb(154 52 18/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-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.lumia-scope .border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity,1))}.lumia-scope .border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/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-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.lumia-scope .border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.lumia-scope .border-red-500\\/40{border-color:rgba(239,68,68,.4)}.lumia-scope .border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.lumia-scope .border-red-800\\/80{border-color:rgba(153,27,27,.8)}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-red-900\\/40{border-color:rgba(127,29,29,.4)}.lumia-scope .border-red-900\\/60{border-color:rgba(127,29,29,.6)}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity,1))}.lumia-scope .border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/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-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-500\\/10{background-color:rgba(245,158,11,.1)}.lumia-scope .bg-amber-500\\/15{background-color:rgba(245,158,11,.15)}.lumia-scope .bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity,1))}.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-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-500\\/10{background-color:rgba(59,130,246,.1)}.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-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.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-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-500\\/15{background-color:rgba(34,197,94,.15)}.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-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-950\\/50{background-color:rgba(5,46,22,.5)}.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-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/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-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.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-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-500\\/10{background-color:rgba(168,85,247,.1)}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/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-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-500\\/15{background-color:rgba(239,68,68,.15)}.lumia-scope .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-700\\/80{background-color:rgba(185,28,28,.8)}.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\\/20{background-color:rgba(127,29,29,.2)}.lumia-scope .bg-red-900\\/30{background-color:rgba(127,29,29,.3)}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950\\/50{background-color:rgba(69,10,10,.5)}.lumia-scope .bg-red-950\\/90{background-color:rgba(69,10,10,.9)}.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-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-500\\/10{background-color:rgba(14,165,233,.1)}.lumia-scope .bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity,1))}.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-3{padding-bottom:.75rem}.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-3xl{font-size:1.875rem;line-height:2.25rem}.lumia-scope .text-4xl{font-size:2.25rem;line-height:2.5rem}.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-relaxed{line-height:1.625}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.lumia-scope .text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.lumia-scope .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.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-500{--tw-text-opacity:1;color:rgb(245 158 11/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-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/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-200{--tw-text-opacity:1;color:rgb(187 247 208/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-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity,1))}.lumia-scope .text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.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-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-500{--tw-text-opacity:1;color:rgb(168 85 247/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-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.lumia-scope .text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/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-300\\/95{color:hsla(0,94%,82%,.95)}.lumia-scope .text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-400\\/80{color:hsla(0,91%,71%,.8)}.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-600\\/90{color:rgba(220,38,38,.9)}.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 .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lumia-scope .\\[background\\:var\\(--lumia-bg\\)\\]{background:var(--lumia-bg)}.lumia-scope .\\[border-color\\:var\\(--lumia-border\\)\\]{border-color:var(--lumia-border)}.lumia-scope .\\[color\\:var\\(--lumia-text\\)\\]{color:var(--lumia-text)}.lumia-scope .\\[color\\:var\\(--lumia-text-muted\\)\\]{color:var(--lumia-text-muted)}.lumia-scope .\\[color\\:var\\(--lumia-text-secondary\\)\\]{color:var(--lumia-text-secondary)}.lumia-scope .file\\:mr-3::file-selector-button{margin-right:.75rem}.lumia-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.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-purple-600::file-selector-button{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-3::file-selector-button{padding-left:.75rem;padding-right:.75rem}.lumia-scope .file\\:py-1\\.5::file-selector-button{padding-top:.375rem;padding-bottom:.375rem}.lumia-scope .file\\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.lumia-scope .file\\:text-xs::file-selector-button{font-size:.75rem;line-height:1rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:text-white::file-selector-button{--tw-text-opacity:1;color:rgb(255 255 255/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-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-600\\/90:hover{background-color:rgba(220,38,38,.9)}.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-purple-700::file-selector-button:hover{--tw-bg-opacity:1;background-color:rgb(126 34 206/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}';
27
+ 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;background-color:transparent;border: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 .my-auto{margin-top:auto;margin-bottom:auto}.lumia-scope .-mt-5{margin-top:-1.25rem}.lumia-scope .mb-1{margin-bottom:.25rem}.lumia-scope .mb-1\\.5{margin-bottom:.375rem}.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-3{margin-left:.75rem}.lumia-scope .ml-4{margin-left:1rem}.lumia-scope .ml-auto{margin-left:auto}.lumia-scope .mr-1{margin-right:.25rem}.lumia-scope .mr-1\\.5{margin-right:.375rem}.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-1\\.5{margin-top:.375rem}.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-20{height:5rem}.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-\\[32px\\]{height:32px}.lumia-scope .h-fit{height:-moz-fit-content;height:fit-content}.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-20{width:5rem}.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-\\[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 glow-warning{0%,to{box-shadow:0 0 0 rgba(234,88,12,.5)}50%{box-shadow:0 0 20px rgba(234,88,12,.8)}}.lumia-scope .animate-glow-warning{animation:glow-warning 2s ease-in-out infinite}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.6}}.lumia-scope .animate-pulse-warning{animation:pulse-warning 2s cubic-bezier(.4,0,.6,1) infinite}@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-2\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem*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-3\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.875rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.875rem*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-dashed{border-style:dashed}.lumia-scope .border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.lumia-scope .border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.lumia-scope .border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.lumia-scope .border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.lumia-scope .border-amber-500\\/30{border-color:rgba(245,158,11,.3)}.lumia-scope .border-amber-500\\/40{border-color:rgba(245,158,11,.4)}.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-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.lumia-scope .border-blue-500\\/30{border-color:rgba(59,130,246,.3)}.lumia-scope .border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.lumia-scope .border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/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-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.lumia-scope .border-green-500\\/40{border-color:rgba(34,197,94,.4)}.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-green-900\\/60{border-color:rgba(20,83,45,.6)}.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-800{--tw-border-opacity:1;border-color:rgb(154 52 18/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-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.lumia-scope .border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity,1))}.lumia-scope .border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/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-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.lumia-scope .border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.lumia-scope .border-red-500\\/40{border-color:rgba(239,68,68,.4)}.lumia-scope .border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.lumia-scope .border-red-800\\/80{border-color:rgba(153,27,27,.8)}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-red-900\\/40{border-color:rgba(127,29,29,.4)}.lumia-scope .border-red-900\\/60{border-color:rgba(127,29,29,.6)}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-sky-800{--tw-border-opacity:1;border-color:rgb(7 89 133/var(--tw-border-opacity,1))}.lumia-scope .border-sky-900{--tw-border-opacity:1;border-color:rgb(12 74 110/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-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-500\\/10{background-color:rgba(245,158,11,.1)}.lumia-scope .bg-amber-500\\/15{background-color:rgba(245,158,11,.15)}.lumia-scope .bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.lumia-scope .bg-amber-950{--tw-bg-opacity:1;background-color:rgb(69 26 3/var(--tw-bg-opacity,1))}.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-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.lumia-scope .bg-blue-500\\/10{background-color:rgba(59,130,246,.1)}.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-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.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\\/60{background-color:rgba(17,24,39,.6)}.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-500\\/15{background-color:rgba(34,197,94,.15)}.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-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.lumia-scope .bg-green-950\\/50{background-color:rgba(5,46,22,.5)}.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-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity,1))}.lumia-scope .bg-orange-800{--tw-bg-opacity:1;background-color:rgb(154 52 18/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-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.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-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-500\\/10{background-color:rgba(168,85,247,.1)}.lumia-scope .bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity,1))}.lumia-scope .bg-purple-900\\/40{background-color:rgba(88,28,135,.4)}.lumia-scope .bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/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-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-500\\/15{background-color:rgba(239,68,68,.15)}.lumia-scope .bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-700\\/80{background-color:rgba(185,28,28,.8)}.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\\/20{background-color:rgba(127,29,29,.2)}.lumia-scope .bg-red-900\\/30{background-color:rgba(127,29,29,.3)}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950\\/50{background-color:rgba(69,10,10,.5)}.lumia-scope .bg-red-950\\/90{background-color:rgba(69,10,10,.9)}.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-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-500\\/10{background-color:rgba(14,165,233,.1)}.lumia-scope .bg-sky-950{--tw-bg-opacity:1;background-color:rgb(8 47 73/var(--tw-bg-opacity,1))}.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-white\\/70{background-color:hsla(0,0%,100%,.7)}.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-3{padding-bottom:.75rem}.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-3xl{font-size:1.875rem;line-height:2.25rem}.lumia-scope .text-4xl{font-size:2.25rem;line-height:2.5rem}.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 .uppercase{text-transform:uppercase}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-none{line-height:1}.lumia-scope .leading-relaxed{line-height:1.625}.lumia-scope .leading-tight{line-height:1.25}.lumia-scope .tracking-tight{letter-spacing:-.025em}.lumia-scope .tracking-wide{letter-spacing:.025em}.lumia-scope .text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.lumia-scope .text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.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-500{--tw-text-opacity:1;color:rgb(245 158 11/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-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/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-200{--tw-text-opacity:1;color:rgb(187 247 208/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-100{--tw-text-opacity:1;color:rgb(255 237 213/var(--tw-text-opacity,1))}.lumia-scope .text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.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-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-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.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-500{--tw-text-opacity:1;color:rgb(168 85 247/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-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.lumia-scope .text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.lumia-scope .text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/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-300\\/95{color:hsla(0,94%,82%,.95)}.lumia-scope .text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-400\\/80{color:hsla(0,91%,71%,.8)}.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-600\\/90{color:rgba(220,38,38,.9)}.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 .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lumia-scope .\\[background\\:var\\(--lumia-bg\\)\\]{background:var(--lumia-bg)}.lumia-scope .\\[border-color\\:var\\(--lumia-border\\)\\]{border-color:var(--lumia-border)}.lumia-scope .\\[color\\:var\\(--lumia-text\\)\\]{color:var(--lumia-text)}.lumia-scope .\\[color\\:var\\(--lumia-text-muted\\)\\]{color:var(--lumia-text-muted)}.lumia-scope .\\[color\\:var\\(--lumia-text-secondary\\)\\]{color:var(--lumia-text-secondary)}.lumia-scope .file\\:mr-3::file-selector-button{margin-right:.75rem}.lumia-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.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-purple-600::file-selector-button{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-3::file-selector-button{padding-left:.75rem;padding-right:.75rem}.lumia-scope .file\\:py-1\\.5::file-selector-button{padding-top:.375rem;padding-bottom:.375rem}.lumia-scope .file\\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.lumia-scope .file\\:text-xs::file-selector-button{font-size:.75rem;line-height:1rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:text-white::file-selector-button{--tw-text-opacity:1;color:rgb(255 255 255/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-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-600\\/90:hover{background-color:rgba(220,38,38,.9)}.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-purple-700::file-selector-button:hover{--tw-bg-opacity:1;background-color:rgb(126 34 206/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}';
27
28
  }
28
29
  });
29
30
 
30
31
  // src/config/lumiaPassport.tsx
32
+ var lumiaPassport_exports = {};
33
+ __export(lumiaPassport_exports, {
34
+ DiscordIcon: () => DiscordIcon,
35
+ GoogleIcon: () => GoogleIcon,
36
+ TelegramIcon: () => TelegramIcon,
37
+ TwitterIcon: () => TwitterIcon,
38
+ defaultLumiaPassportConfig: () => defaultLumiaPassportConfig,
39
+ getIframeUrl: () => getIframeUrl,
40
+ getLumiaPassportConfig: () => getLumiaPassportConfig,
41
+ getServiceUrls: () => getServiceUrls,
42
+ updateLumiaPassportConfig: () => updateLumiaPassportConfig
43
+ });
31
44
  import { jsx, jsxs } from "react/jsx-runtime";
32
45
  function getServiceUrls() {
33
46
  const config = defaultLumiaPassportConfig;
@@ -59,6 +72,29 @@ function getIframeUrl() {
59
72
  const iframeUrl = buildIframeUrl || config.services.iframeUrl || "https://auth.lumiapassport.com";
60
73
  return iframeUrl;
61
74
  }
75
+ function getLumiaPassportConfig() {
76
+ return defaultLumiaPassportConfig;
77
+ }
78
+ function updateLumiaPassportConfig(updates) {
79
+ const config = { ...defaultLumiaPassportConfig };
80
+ if (updates.passkey) config.passkey = { ...config.passkey, ...updates.passkey };
81
+ if (updates.email) config.email = { ...config.email, ...updates.email };
82
+ if (updates.social) {
83
+ config.social = { ...config.social, ...updates.social };
84
+ if (updates.social.providers) config.social.providers = updates.social.providers;
85
+ }
86
+ if (updates.development) config.development = { ...config.development, ...updates.development };
87
+ if (updates.ui) {
88
+ config.ui = { ...config.ui, ...updates.ui };
89
+ if (updates.ui.branding) config.ui.branding = { ...config.ui.branding, ...updates.ui.branding };
90
+ if (updates.ui.modal) config.ui.modal = { ...config.ui.modal, ...updates.ui.modal };
91
+ }
92
+ if (updates.network) config.network = { ...config.network, ...updates.network };
93
+ if (updates.features) config.features = { ...config.features, ...updates.features };
94
+ if (updates.warnings) config.warnings = { ...config.warnings, ...updates.warnings };
95
+ if (updates.kyc) config.kyc = { ...config.kyc, ...updates.kyc };
96
+ return config;
97
+ }
62
98
  var GoogleIcon, TelegramIcon, TwitterIcon, DiscordIcon, defaultLumiaPassportConfig;
63
99
  var init_lumiaPassport = __esm({
64
100
  "src/config/lumiaPassport.tsx"() {
@@ -773,9 +809,10 @@ async function ensureDkgAndGetOwner(userId, _clientSeedHex) {
773
809
  }
774
810
  await iframeManager.authenticate(userId);
775
811
  const { jwtTokenManager: jwtTokenManager4 } = await Promise.resolve().then(() => (init_auth(), auth_exports));
776
- const accessToken = jwtTokenManager4.getAccessToken();
812
+ let accessToken = jwtTokenManager4.getAccessToken();
777
813
  if (!accessToken) {
778
- throw new Error("No access token available for DKG");
814
+ console.warn("[iframe-mpc-client] No access token available for DKG, attempting cookie-based session");
815
+ accessToken = void 0;
779
816
  }
780
817
  const ownerAddress = await iframeManager.startDKG(userId, accessToken);
781
818
  return {
@@ -2305,6 +2342,34 @@ var init_wallet = __esm({
2305
2342
  }
2306
2343
  });
2307
2344
 
2345
+ // src/internal/auth/providers/x.ts
2346
+ async function linkX() {
2347
+ const hasValidToken = await ensureValidToken();
2348
+ if (!hasValidToken) throw new Error("No authentication token available");
2349
+ throw new Error('Use openSocialAuthPopup("x") to link X account');
2350
+ }
2351
+ async function loginWithX() {
2352
+ throw new Error('Use openSocialAuthPopup("x") to login with X account');
2353
+ }
2354
+ async function unlinkX(externalId) {
2355
+ const hasValidToken = await ensureValidToken();
2356
+ if (!hasValidToken) throw new Error("No authentication token available");
2357
+ const url = externalId ? `${getTssUrl3()}/api/auth/unlink/x?externalId=${encodeURIComponent(externalId)}` : `${getTssUrl3()}/api/auth/unlink/x`;
2358
+ const response = await authenticatedFetch(url, {
2359
+ method: "DELETE"
2360
+ });
2361
+ if (!response.ok) {
2362
+ const errorData = await response.json().catch(() => ({}));
2363
+ throw new Error(errorData.message || `Failed to unlink X account: ${response.statusText}`);
2364
+ }
2365
+ }
2366
+ var init_x = __esm({
2367
+ "src/internal/auth/providers/x.ts"() {
2368
+ init_auth();
2369
+ init_types();
2370
+ }
2371
+ });
2372
+
2308
2373
  // src/internal/auth/providers/index.ts
2309
2374
  var init_providers = __esm({
2310
2375
  "src/internal/auth/providers/index.ts"() {
@@ -2314,6 +2379,7 @@ var init_providers = __esm({
2314
2379
  init_passkey2();
2315
2380
  init_telegram2();
2316
2381
  init_wallet();
2382
+ init_x();
2317
2383
  }
2318
2384
  });
2319
2385
 
@@ -2354,9 +2420,11 @@ __export(auth_exports, {
2354
2420
  linkPasskeyWithWebAuthn: () => linkPasskeyWithWebAuthn,
2355
2421
  linkTelegram: () => linkTelegram,
2356
2422
  linkWallet: () => linkWallet,
2423
+ linkX: () => linkX,
2357
2424
  loginWithEmail: () => loginWithEmail,
2358
2425
  loginWithTelegram: () => loginWithTelegram,
2359
2426
  loginWithUserId: () => loginWithUserId,
2427
+ loginWithX: () => loginWithX,
2360
2428
  logout: () => logout,
2361
2429
  mountTelegramLoginWidget: () => mountTelegramLoginWidget,
2362
2430
  registerPasskey: () => registerPasskey,
@@ -2366,6 +2434,7 @@ __export(auth_exports, {
2366
2434
  syncKeyshareStatus: () => syncKeyshareStatus,
2367
2435
  unlinkProvider: () => unlinkProvider,
2368
2436
  unlinkWallet: () => unlinkWallet,
2437
+ unlinkX: () => unlinkX,
2369
2438
  verifyEmailLinkCode: () => verifyEmailLinkCode,
2370
2439
  verifyToken: () => verifyToken
2371
2440
  });
@@ -2438,6 +2507,13 @@ var init_iframe_manager = __esm({
2438
2507
  this.pendingRequests = /* @__PURE__ */ new Map();
2439
2508
  this.usedNonces = /* @__PURE__ */ new Set();
2440
2509
  this.messageListener = null;
2510
+ // Track hidden dialog elements for restoration
2511
+ this.hiddenElements = [];
2512
+ this.pointerGuardCleanup = null;
2513
+ this.iframeHideTimeout = null;
2514
+ this.iframeActive = false;
2515
+ this.providerSessions = /* @__PURE__ */ new Map();
2516
+ this.providerConnections = /* @__PURE__ */ new Map();
2441
2517
  // Timeouts
2442
2518
  this.REQUEST_TIMEOUT = 3e5;
2443
2519
  // 5 minutes (for user interactions like consent)
@@ -2493,6 +2569,7 @@ var init_iframe_manager = __esm({
2493
2569
  document.body.appendChild(this.iframe);
2494
2570
  await this.readyPromise;
2495
2571
  await this.authenticateSDK();
2572
+ await this.primeProviderSessions();
2496
2573
  this.log("[IframeManager] \u2705 Iframe ready and authenticated");
2497
2574
  }
2498
2575
  /**
@@ -2728,7 +2805,18 @@ var init_iframe_manager = __esm({
2728
2805
  */
2729
2806
  showIframe() {
2730
2807
  if (this.iframe) {
2808
+ if (this.iframeHideTimeout) {
2809
+ clearTimeout(this.iframeHideTimeout);
2810
+ this.iframeHideTimeout = null;
2811
+ }
2812
+ this.hideAllDialogs();
2813
+ this.iframeActive = true;
2814
+ this.enablePointerEventGuards();
2731
2815
  this.iframe.style.display = "block";
2816
+ this.iframe.style.zIndex = "2147483648";
2817
+ this.iframe.style.pointerEvents = "auto";
2818
+ this.iframe.style.visibility = "visible";
2819
+ this.iframe.style.background = "rgba(0, 0, 0, 0.5)";
2732
2820
  }
2733
2821
  }
2734
2822
  /**
@@ -2736,7 +2824,123 @@ var init_iframe_manager = __esm({
2736
2824
  */
2737
2825
  hideIframe() {
2738
2826
  if (this.iframe) {
2739
- this.iframe.style.display = "none";
2827
+ this.log("[IframeManager] hideIframe called - making iframe non-blocking");
2828
+ this.iframeActive = false;
2829
+ this.iframe.style.zIndex = "1";
2830
+ this.iframe.style.background = "transparent";
2831
+ this.iframe.style.pointerEvents = "none";
2832
+ this.iframe.style.visibility = "hidden";
2833
+ this.log("[IframeManager] iframe z-index set to 1, transparent, pointer-events: none");
2834
+ this.restoreAllDialogs();
2835
+ this.disablePointerEventGuards();
2836
+ this.iframeHideTimeout = setTimeout(() => {
2837
+ if (this.iframe) {
2838
+ this.log("[IframeManager] Fully hiding iframe with display: none");
2839
+ this.iframe.style.display = "none";
2840
+ this.iframe.style.zIndex = "999999";
2841
+ this.iframe.style.background = "rgba(0, 0, 0, 0.5)";
2842
+ this.iframe.style.pointerEvents = "auto";
2843
+ this.iframe.style.visibility = "visible";
2844
+ }
2845
+ this.iframeHideTimeout = null;
2846
+ }, 200);
2847
+ }
2848
+ }
2849
+ /**
2850
+ * Hide all Radix Dialog modals (SendModal, etc.)
2851
+ */
2852
+ hideAllDialogs() {
2853
+ this.hiddenElements = [];
2854
+ const allElements = document.body.querySelectorAll("*");
2855
+ allElements.forEach((element) => {
2856
+ const htmlElement = element;
2857
+ if (htmlElement.id === "lumia-passport-iframe" || htmlElement.closest("#lumia-passport-iframe")) {
2858
+ return;
2859
+ }
2860
+ if (htmlElement.hasAttribute("data-lumia-auth-modal") || htmlElement.closest("[data-lumia-auth-modal]")) {
2861
+ return;
2862
+ }
2863
+ const computedStyle = window.getComputedStyle(htmlElement);
2864
+ const zIndex = parseInt(computedStyle.zIndex, 10);
2865
+ const isRadixElement = htmlElement.hasAttribute("data-radix-focus-guard") || htmlElement.hasAttribute("data-radix-portal") || htmlElement.hasAttribute("data-radix-popper-content-wrapper");
2866
+ if (!isNaN(zIndex) && zIndex > 1e6 || isRadixElement) {
2867
+ this.hiddenElements.push({
2868
+ element: htmlElement,
2869
+ originalDisplay: htmlElement.style.display || "",
2870
+ originalVisibility: htmlElement.style.visibility || "",
2871
+ originalPointerEvents: htmlElement.style.pointerEvents || "",
2872
+ originalZIndex: htmlElement.style.zIndex || ""
2873
+ });
2874
+ htmlElement.style.display = "none";
2875
+ htmlElement.style.visibility = "hidden";
2876
+ htmlElement.style.pointerEvents = "none";
2877
+ htmlElement.style.zIndex = "-1";
2878
+ const elementType = isRadixElement ? "Radix element" : `z-index ${zIndex}`;
2879
+ this.log(`[IframeManager] Hiding ${elementType}: ${htmlElement.className || "(no class)"} (Tag: ${htmlElement.tagName})`);
2880
+ }
2881
+ });
2882
+ this.log(`[IframeManager] Hidden ${this.hiddenElements.length} elements total`);
2883
+ }
2884
+ /**
2885
+ * Restore all previously hidden Radix Dialog modals
2886
+ */
2887
+ restoreAllDialogs() {
2888
+ this.log(`[IframeManager] Restoring ${this.hiddenElements.length} elements`);
2889
+ this.hiddenElements.forEach(({ element, originalDisplay, originalVisibility, originalPointerEvents, originalZIndex }) => {
2890
+ element.style.display = originalDisplay;
2891
+ element.style.visibility = originalVisibility;
2892
+ element.style.pointerEvents = originalPointerEvents || "auto";
2893
+ element.style.zIndex = originalZIndex;
2894
+ this.log(`[IframeManager] Restored element: ${element.className} (Tag: ${element.tagName}), pointerEvents set to: ${element.style.pointerEvents}`);
2895
+ });
2896
+ this.hiddenElements = [];
2897
+ this.log(`[IframeManager] All elements restored`);
2898
+ }
2899
+ /**
2900
+ * Stop Radix dismissable layers from swallowing the first click on the iframe.
2901
+ * Radix attaches pointer event guards at the document level; we intercept at window
2902
+ * capture phase so user clicks flow straight into the consent iframe.
2903
+ */
2904
+ enablePointerEventGuards() {
2905
+ if (this.pointerGuardCleanup) {
2906
+ return;
2907
+ }
2908
+ const handler = (event) => {
2909
+ if (!this.iframeActive || !this.iframe) {
2910
+ return;
2911
+ }
2912
+ const target = event.target;
2913
+ const composedPath = typeof event.composedPath === "function" ? event.composedPath() : [];
2914
+ const hitsIframe = target === this.iframe || Array.isArray(composedPath) && composedPath.includes(this.iframe);
2915
+ if (!hitsIframe) {
2916
+ return;
2917
+ }
2918
+ if (typeof event.stopImmediatePropagation === "function") {
2919
+ event.stopImmediatePropagation();
2920
+ }
2921
+ event.stopPropagation();
2922
+ };
2923
+ const options = { capture: true };
2924
+ const eventNames = ["pointerdown", "mousedown", "mouseup", "click", "touchstart", "focusin"];
2925
+ eventNames.forEach((eventName) => {
2926
+ window.addEventListener(eventName, handler, options);
2927
+ });
2928
+ this.pointerGuardCleanup = () => {
2929
+ eventNames.forEach((eventName) => {
2930
+ window.removeEventListener(eventName, handler, options);
2931
+ });
2932
+ this.pointerGuardCleanup = null;
2933
+ };
2934
+ this.log("[IframeManager] Enabled pointer event guards for iframe consent");
2935
+ }
2936
+ /**
2937
+ * Remove pointer interception once iframe is hidden again.
2938
+ */
2939
+ disablePointerEventGuards() {
2940
+ if (this.pointerGuardCleanup) {
2941
+ this.pointerGuardCleanup();
2942
+ this.pointerGuardCleanup = null;
2943
+ this.log("[IframeManager] Disabled pointer event guards for iframe consent");
2740
2944
  }
2741
2945
  }
2742
2946
  // ========================================
@@ -2745,10 +2949,12 @@ var init_iframe_manager = __esm({
2745
2949
  /**
2746
2950
  * Authenticate user with application
2747
2951
  */
2748
- async authenticate(userId) {
2952
+ async authenticate(userId, avatar, displayName) {
2749
2953
  const response = await this.sendMessage("AUTHENTICATE", {
2750
2954
  userId,
2751
- projectId: this.projectId
2955
+ projectId: this.projectId,
2956
+ avatar,
2957
+ displayName
2752
2958
  });
2753
2959
  if (response.type === "LUMIA_PASSPORT_AUTH_SUCCESS") {
2754
2960
  return {
@@ -2776,13 +2982,20 @@ var init_iframe_manager = __esm({
2776
2982
  /**
2777
2983
  * Sign transaction
2778
2984
  */
2779
- async signTransaction(userId, transaction, accessToken) {
2985
+ async signTransaction(userId, transaction, accessToken, avatar, displayName) {
2986
+ if (!avatar || !displayName) {
2987
+ const { jwtTokenManager: jwtTokenManager4 } = await import("@lumiapassport/core/auth");
2988
+ avatar = avatar || jwtTokenManager4.getAvatar();
2989
+ displayName = displayName || jwtTokenManager4.getDisplayName();
2990
+ }
2780
2991
  const response = await this.sendMessage("SIGN_TRANSACTION", {
2781
2992
  userId,
2782
2993
  projectId: this.projectId,
2783
2994
  transaction,
2784
- accessToken
2995
+ accessToken,
2785
2996
  // Pass access token for TSS API authentication
2997
+ avatar,
2998
+ displayName
2786
2999
  });
2787
3000
  if (response.type === "LUMIA_PASSPORT_SIGNATURE") {
2788
3001
  return response.signature;
@@ -2792,19 +3005,26 @@ var init_iframe_manager = __esm({
2792
3005
  /**
2793
3006
  * Sign EIP712 typed data
2794
3007
  */
2795
- async signTypedData(userId, typedData, digest32, accessToken) {
3008
+ async signTypedData(userId, typedData, digest32, accessToken, avatar, displayName) {
2796
3009
  console.log("[IframeManager] signTypedData: Sending SIGN_TYPED_DATA message", {
2797
3010
  userId,
2798
3011
  primaryType: typedData.primaryType,
2799
3012
  digest32
2800
3013
  });
3014
+ if (!avatar || !displayName) {
3015
+ const { jwtTokenManager: jwtTokenManager4 } = await import("@lumiapassport/core/auth");
3016
+ avatar = avatar || jwtTokenManager4.getAvatar();
3017
+ displayName = displayName || jwtTokenManager4.getDisplayName();
3018
+ }
2801
3019
  const response = await this.sendMessage("SIGN_TYPED_DATA", {
2802
3020
  userId,
2803
3021
  projectId: this.projectId,
2804
3022
  typedData,
2805
3023
  digest32,
2806
- accessToken
3024
+ accessToken,
2807
3025
  // Pass access token for TSS API authentication
3026
+ avatar,
3027
+ displayName
2808
3028
  });
2809
3029
  console.log("[IframeManager] signTypedData: Response received", {
2810
3030
  type: response.type,
@@ -2848,8 +3068,13 @@ var init_iframe_manager = __esm({
2848
3068
  async openSocialAuthPopup(provider, config) {
2849
3069
  this.log(`[IframeManager] Opening social auth popup for provider: ${provider}`);
2850
3070
  return new Promise((resolve, reject) => {
3071
+ const normalizedProviderName = provider.toLowerCase();
3072
+ const providerKey = normalizedProviderName === "twitter" ? "x" : normalizedProviderName;
3073
+ const xMode = config?.mode === "link" ? "link" : "login";
3074
+ const sessionBeforeFlow = providerKey === "x" ? this.getKnownSessionId("x") : null;
3075
+ const connectionBeforeFlow = providerKey === "x" ? this.getKnownProviderConnection("x") : null;
2851
3076
  let popupUrl;
2852
- if (provider.toLowerCase() === "telegram") {
3077
+ if (providerKey === "telegram") {
2853
3078
  const iframeOrigin = new URL(this.iframeUrl).origin;
2854
3079
  const botUsername = config?.botUsername;
2855
3080
  this.log("[IframeManager] Telegram config:", config);
@@ -2860,6 +3085,25 @@ var init_iframe_manager = __esm({
2860
3085
  }
2861
3086
  popupUrl = url.toString();
2862
3087
  this.log("[IframeManager] Popup URL:", popupUrl);
3088
+ } else if (providerKey === "x") {
3089
+ const iframeOrigin = new URL(this.iframeUrl).origin;
3090
+ this.log("[IframeManager] X OAuth config:", config);
3091
+ const url = new URL(`${iframeOrigin}/oauth/x.html`);
3092
+ const { getServiceUrls: getServiceUrls2 } = (init_lumiaPassport(), __toCommonJS(lumiaPassport_exports));
3093
+ const { tssUrl } = getServiceUrls2();
3094
+ const projectId = typeof window !== "undefined" ? window.__LUMIA_PROJECT_ID__ : void 0;
3095
+ this.log("[IframeManager] TSS URL from config:", tssUrl);
3096
+ this.log("[IframeManager] Project ID:", projectId);
3097
+ url.searchParams.set("tssUrl", tssUrl);
3098
+ url.searchParams.set("mode", xMode);
3099
+ if (projectId) {
3100
+ url.searchParams.set("projectId", projectId);
3101
+ }
3102
+ if (xMode === "link" && config?.token) {
3103
+ url.searchParams.set("token", config.token);
3104
+ }
3105
+ popupUrl = url.toString();
3106
+ this.log("[IframeManager] X OAuth Popup URL:", popupUrl);
2863
3107
  } else {
2864
3108
  reject(new Error(`Provider ${provider} not supported yet`));
2865
3109
  return;
@@ -2873,46 +3117,267 @@ var init_iframe_manager = __esm({
2873
3117
  reject(new Error("Failed to open popup. Please allow popups for this site."));
2874
3118
  return;
2875
3119
  }
2876
- const messageHandler = (event) => {
3120
+ let checkClosed;
3121
+ let resolved = false;
3122
+ let messageHandler = null;
3123
+ let pendingCancellation = false;
3124
+ const cleanup = (closePopup = true) => {
3125
+ if (messageHandler) {
3126
+ window.removeEventListener("message", messageHandler);
3127
+ }
3128
+ if (checkClosed) {
3129
+ clearInterval(checkClosed);
3130
+ checkClosed = void 0;
3131
+ }
3132
+ if (closePopup && !popup.closed) {
3133
+ popup.close();
3134
+ }
3135
+ };
3136
+ const finalize = (result, closePopup = true) => {
3137
+ if (resolved) {
3138
+ return;
3139
+ }
3140
+ resolved = true;
3141
+ cleanup(closePopup);
3142
+ if (result.success && providerKey === "x") {
3143
+ this.updateProviderTrackingFromUser("x", result.user);
3144
+ }
3145
+ resolve({
3146
+ provider,
3147
+ ...result
3148
+ });
3149
+ };
3150
+ messageHandler = (event) => {
2877
3151
  const iframeOrigin = new URL(this.iframeUrl).origin;
2878
3152
  if (event.origin !== iframeOrigin) {
2879
3153
  return;
2880
3154
  }
2881
- if (event.data.type === "TELEGRAM_AUTH_SUCCESS" && event.data.provider === provider) {
2882
- this.log("[IframeManager] Social auth successful from popup:", event.data);
2883
- window.removeEventListener("message", messageHandler);
2884
- if (!popup.closed) {
2885
- popup.close();
2886
- }
2887
- resolve({
2888
- provider,
3155
+ const eventProvider = event.data.provider?.toLowerCase();
3156
+ if (event.data.type === "TELEGRAM_AUTH_SUCCESS" && eventProvider === "telegram" && providerKey === "telegram") {
3157
+ this.log("[IframeManager] Telegram auth successful from popup:", event.data);
3158
+ finalize({
2889
3159
  success: true,
2890
3160
  user: event.data.user
2891
3161
  });
2892
- } else if (event.data.type === "TELEGRAM_AUTH_CANCELLED" && event.data.provider === provider) {
2893
- this.log("[IframeManager] Social auth cancelled by user");
2894
- window.removeEventListener("message", messageHandler);
2895
- resolve({
2896
- provider,
3162
+ } else if (event.data.type === "X_AUTH_SUCCESS" && eventProvider === "x" && providerKey === "x") {
3163
+ this.log("[IframeManager] X auth successful from popup:", event.data);
3164
+ finalize({
3165
+ success: true,
3166
+ user: event.data.user,
3167
+ mode: event.data.mode
3168
+ });
3169
+ } else if (event.data.type === "TELEGRAM_AUTH_CANCELLED" && eventProvider === "telegram" && providerKey === "telegram") {
3170
+ this.log("[IframeManager] Telegram auth cancelled by user");
3171
+ finalize({
2897
3172
  success: false,
2898
3173
  error: "User cancelled authentication"
3174
+ }, false);
3175
+ } else if (event.data.type === "X_AUTH_CANCELLED" && eventProvider === "x" && providerKey === "x") {
3176
+ this.log("[IframeManager] X auth cancelled by user");
3177
+ pendingCancellation = true;
3178
+ this.verifyXAuthSession().then((verification) => {
3179
+ const sessionId = verification.sessionId || null;
3180
+ const providers = verification.providers || [];
3181
+ const isConnectedNow = providers.includes("x");
3182
+ const sessionChanged = !!sessionId && sessionId !== sessionBeforeFlow;
3183
+ const connectionGained = connectionBeforeFlow === false && isConnectedNow;
3184
+ if (verification.success) {
3185
+ if (sessionChanged || connectionGained) {
3186
+ this.log("[IframeManager] X auth cancellation fallback found active session change, treating as success");
3187
+ finalize(
3188
+ {
3189
+ success: true,
3190
+ user: verification.user,
3191
+ mode: xMode
3192
+ },
3193
+ true
3194
+ );
3195
+ } else {
3196
+ this.log("[IframeManager] X auth fallback did not detect new session, treating as cancellation");
3197
+ if (popup.closed) {
3198
+ finalize(
3199
+ {
3200
+ success: false,
3201
+ error: "User cancelled authentication"
3202
+ },
3203
+ false
3204
+ );
3205
+ }
3206
+ }
3207
+ } else {
3208
+ this.log("[IframeManager] X auth fallback verification reported no session, treating as cancellation");
3209
+ if (popup.closed) {
3210
+ finalize(
3211
+ {
3212
+ success: false,
3213
+ error: "User cancelled authentication"
3214
+ },
3215
+ false
3216
+ );
3217
+ }
3218
+ }
3219
+ }).catch((error) => {
3220
+ this.log("[IframeManager] X auth fallback verification error:", error);
3221
+ if (popup.closed) {
3222
+ finalize(
3223
+ {
3224
+ success: false,
3225
+ error: "User cancelled authentication"
3226
+ },
3227
+ false
3228
+ );
3229
+ }
3230
+ });
3231
+ } else if (event.data.type === "X_AUTH_ERROR" && eventProvider === "x" && providerKey === "x") {
3232
+ this.log("[IframeManager] X auth error from popup:", event.data.error);
3233
+ finalize({
3234
+ success: false,
3235
+ error: event.data.error || "Authentication failed"
2899
3236
  });
2900
3237
  }
2901
3238
  };
2902
3239
  window.addEventListener("message", messageHandler);
2903
- const checkClosed = setInterval(() => {
3240
+ checkClosed = setInterval(() => {
2904
3241
  if (popup.closed) {
2905
- clearInterval(checkClosed);
2906
- window.removeEventListener("message", messageHandler);
2907
- resolve({
2908
- provider,
2909
- success: false,
2910
- error: "Popup was closed"
2911
- });
3242
+ if (checkClosed) {
3243
+ clearInterval(checkClosed);
3244
+ checkClosed = void 0;
3245
+ }
3246
+ if (!resolved) {
3247
+ if (providerKey === "x" && pendingCancellation) {
3248
+ finalize({
3249
+ success: false,
3250
+ error: "User cancelled authentication"
3251
+ }, false);
3252
+ } else {
3253
+ finalize({
3254
+ success: false,
3255
+ error: "Popup was closed"
3256
+ }, false);
3257
+ }
3258
+ }
2912
3259
  }
2913
3260
  }, 500);
2914
3261
  });
2915
3262
  }
3263
+ /**
3264
+ * Fallback verification for X OAuth cancellations.
3265
+ * Attempts to detect if the backend session was still established.
3266
+ */
3267
+ async verifyXAuthSession(options = {}) {
3268
+ if (typeof window === "undefined" || typeof fetch === "undefined") {
3269
+ return { success: false };
3270
+ }
3271
+ try {
3272
+ const { getServiceUrls: getServiceUrls2 } = (init_lumiaPassport(), __toCommonJS(lumiaPassport_exports));
3273
+ const { tssUrl } = getServiceUrls2();
3274
+ const projectId = typeof window !== "undefined" ? window.__LUMIA_PROJECT_ID__ : void 0;
3275
+ if (!tssUrl) {
3276
+ this.log("[IframeManager] X auth fallback aborted: missing TSS URL");
3277
+ return { success: false };
3278
+ }
3279
+ const verifyUrl = new URL(`${tssUrl}/api/auth/verify`);
3280
+ if (projectId) {
3281
+ verifyUrl.searchParams.set("projectId", projectId);
3282
+ }
3283
+ const response = await fetch(verifyUrl.toString(), {
3284
+ method: "GET",
3285
+ credentials: "include"
3286
+ });
3287
+ if (!response.ok) {
3288
+ this.log("[IframeManager] X auth fallback verify returned status:", response.status);
3289
+ this.recordProviderSession("x", null);
3290
+ this.recordProviderConnection("x", false);
3291
+ return { success: false };
3292
+ }
3293
+ let userData = void 0;
3294
+ try {
3295
+ userData = await response.json();
3296
+ } catch (jsonError) {
3297
+ this.log("[IframeManager] X auth fallback verify JSON parse failed:", jsonError);
3298
+ }
3299
+ const sessionId = this.extractSessionId(userData);
3300
+ const providers = this.getProvidersList(userData);
3301
+ this.recordProviderSession("x", sessionId);
3302
+ this.recordProviderConnection("x", providers.includes("x"));
3303
+ if (!options.silent) {
3304
+ this.log("[IframeManager] X auth verify result:", {
3305
+ sessionId,
3306
+ providers
3307
+ });
3308
+ }
3309
+ return {
3310
+ success: true,
3311
+ user: userData,
3312
+ sessionId,
3313
+ providers
3314
+ };
3315
+ } catch (error) {
3316
+ this.log("[IframeManager] X auth fallback verify threw error:", error);
3317
+ this.recordProviderSession("x", null);
3318
+ this.recordProviderConnection("x", false);
3319
+ return { success: false };
3320
+ }
3321
+ }
3322
+ /**
3323
+ * Prime provider session/cache state to detect future changes.
3324
+ */
3325
+ async primeProviderSessions() {
3326
+ try {
3327
+ await this.verifyXAuthSession({ silent: true });
3328
+ } catch (error) {
3329
+ this.log("[IframeManager] Prime provider sessions failed:", error);
3330
+ }
3331
+ }
3332
+ getKnownSessionId(providerKey) {
3333
+ return this.providerSessions.has(providerKey) ? this.providerSessions.get(providerKey) ?? null : null;
3334
+ }
3335
+ getKnownProviderConnection(providerKey) {
3336
+ if (!this.providerConnections.has(providerKey)) {
3337
+ return null;
3338
+ }
3339
+ const value = this.providerConnections.get(providerKey);
3340
+ return typeof value === "boolean" ? value : null;
3341
+ }
3342
+ recordProviderSession(providerKey, sessionId) {
3343
+ this.providerSessions.set(providerKey, sessionId ?? null);
3344
+ }
3345
+ recordProviderConnection(providerKey, connected) {
3346
+ this.providerConnections.set(providerKey, connected);
3347
+ }
3348
+ updateProviderTrackingFromUser(providerKey, user) {
3349
+ if (!user) {
3350
+ return;
3351
+ }
3352
+ if (providerKey === "x") {
3353
+ const sessionId = this.extractSessionId(user);
3354
+ this.recordProviderSession("x", sessionId);
3355
+ const providers = this.getProvidersList(user);
3356
+ this.recordProviderConnection("x", providers.includes("x"));
3357
+ }
3358
+ }
3359
+ extractSessionId(user) {
3360
+ if (!user || typeof user !== "object") {
3361
+ return null;
3362
+ }
3363
+ if (typeof user.sessionId === "string") {
3364
+ return user.sessionId;
3365
+ }
3366
+ if (user.data && typeof user.data.sessionId === "string") {
3367
+ return user.data.sessionId;
3368
+ }
3369
+ return null;
3370
+ }
3371
+ getProvidersList(user) {
3372
+ if (!user || typeof user !== "object") {
3373
+ return [];
3374
+ }
3375
+ const providersRaw = user.providers || user.data?.providers;
3376
+ if (!Array.isArray(providersRaw)) {
3377
+ return [];
3378
+ }
3379
+ return providersRaw.map((provider) => typeof provider === "string" ? provider.toLowerCase() : null).filter((provider) => provider !== null);
3380
+ }
2916
3381
  /**
2917
3382
  * Get trusted apps for user
2918
3383
  */
@@ -4840,7 +5305,11 @@ var init_AuthModal = __esm({
4840
5305
  const needsRecovery = loginResponse.hasKeyshare && !loginResponse.isNewUser && !localKeyshare;
4841
5306
  const displayNameRequired = await checkDisplayNameRequired(loginResponse);
4842
5307
  if (displayNameRequired) {
4843
- await jwtTokenManager2.setTokens(loginResponse);
5308
+ if (loginResponse.accessToken && loginResponse.refreshToken) {
5309
+ await jwtTokenManager2.setTokens(loginResponse);
5310
+ } else {
5311
+ console.warn("[AuthModal] Display name flow skipped token save - tokens missing");
5312
+ }
4844
5313
  setStep("display-name");
4845
5314
  return;
4846
5315
  }
@@ -4947,7 +5416,11 @@ var init_AuthModal = __esm({
4947
5416
  if (loginResponse.isNewUser) {
4948
5417
  const displayNameRequired = await checkDisplayNameRequired(loginResponse);
4949
5418
  if (displayNameRequired) {
4950
- await jwtTokenManager2.setTokens(loginResponse);
5419
+ if (loginResponse.accessToken && loginResponse.refreshToken) {
5420
+ await jwtTokenManager2.setTokens(loginResponse);
5421
+ } else {
5422
+ console.warn("[AuthModal] Verification flow skipped token save - tokens missing");
5423
+ }
4951
5424
  setStep("display-name");
4952
5425
  return;
4953
5426
  }
@@ -5030,7 +5503,11 @@ var init_AuthModal = __esm({
5030
5503
  }
5031
5504
  const displayNameRequired = await checkDisplayNameRequired(result.loginResponse);
5032
5505
  if (displayNameRequired) {
5033
- await jwtTokenManager2.setTokens(result.loginResponse);
5506
+ if (result.loginResponse?.accessToken && result.loginResponse?.refreshToken) {
5507
+ await jwtTokenManager2.setTokens(result.loginResponse);
5508
+ } else {
5509
+ console.warn("[AuthModal] Passkey auth flow skipped token save - tokens missing");
5510
+ }
5034
5511
  setStep("display-name");
5035
5512
  return;
5036
5513
  }
@@ -5075,7 +5552,8 @@ var init_AuthModal = __esm({
5075
5552
  }
5076
5553
  }, [onAuthSuccess, onOpenChange, callbacks]);
5077
5554
  const handleSocialAuth = React13.useCallback(async (providerId) => {
5078
- const provider = config?.social?.providers?.find((p) => (p.id || "").toLowerCase() === providerId.toLowerCase() && p.enabled);
5555
+ const normalizedProviderId = providerId.toLowerCase();
5556
+ const provider = config?.social?.providers?.find((p) => (p.id || "").toLowerCase() === normalizedProviderId && p.enabled);
5079
5557
  if (!provider) {
5080
5558
  showError("Configuration Error", `${providerId} provider not found or not enabled.`);
5081
5559
  return;
@@ -5084,8 +5562,277 @@ var init_AuthModal = __esm({
5084
5562
  try {
5085
5563
  const { getIframeManager: getIframeManager2 } = await Promise.resolve().then(() => (init_index(), index_exports));
5086
5564
  const iframeManager = getIframeManager2();
5565
+ const normalizeLoginResponse = async (rawLoginResponse, providerKey, userData) => {
5566
+ if (!rawLoginResponse) {
5567
+ return rawLoginResponse;
5568
+ }
5569
+ let normalized = { ...rawLoginResponse };
5570
+ if (providerKey === "x") {
5571
+ const needsEnrichment = typeof normalized.hasKeyshare !== "boolean" || typeof normalized.isNewUser === "undefined";
5572
+ if (needsEnrichment) {
5573
+ try {
5574
+ const { getUserProfile: getUserProfile2 } = await Promise.resolve().then(() => (init_profile(), profile_exports));
5575
+ const profile = await getUserProfile2();
5576
+ if (typeof normalized.hasKeyshare !== "boolean" && typeof profile.hasKeyshare === "boolean") {
5577
+ normalized.hasKeyshare = profile.hasKeyshare;
5578
+ }
5579
+ if (typeof normalized.isNewUser === "undefined") {
5580
+ normalized.isNewUser = !profile.hasKeyshare;
5581
+ }
5582
+ if (profile.displayName && (normalized.displayName === void 0 || normalized.displayName === null)) {
5583
+ normalized.displayName = profile.displayName;
5584
+ }
5585
+ if (profile.avatar && (normalized.avatar === void 0 || normalized.avatar === null)) {
5586
+ normalized.avatar = profile.avatar;
5587
+ }
5588
+ } catch (profileError) {
5589
+ console.warn("[AuthModal] Failed to enrich X login response with profile:", profileError);
5590
+ if (typeof normalized.hasKeyshare !== "boolean") {
5591
+ normalized.hasKeyshare = false;
5592
+ }
5593
+ if (typeof normalized.isNewUser === "undefined") {
5594
+ normalized.isNewUser = false;
5595
+ }
5596
+ }
5597
+ }
5598
+ }
5599
+ return normalized;
5600
+ };
5601
+ const fetchTokensFromRefreshEndpoint = async () => {
5602
+ try {
5603
+ const { tssUrl: tssUrl2 } = getServiceUrls();
5604
+ const refreshUrl = addProjectIdToUrl(`${tssUrl2}/api/auth/refresh`);
5605
+ const response2 = await fetch(refreshUrl, {
5606
+ method: "POST",
5607
+ headers: { "Content-Type": "application/json" },
5608
+ credentials: "include",
5609
+ body: JSON.stringify({})
5610
+ });
5611
+ if (!response2.ok) {
5612
+ const errorText = await response2.text().catch(() => "Token refresh failed");
5613
+ console.warn("[AuthModal] Token refresh endpoint responded with error:", response2.status, errorText);
5614
+ return null;
5615
+ }
5616
+ const refreshData = await response2.json();
5617
+ if (refreshData?.accessToken && refreshData?.refreshToken) {
5618
+ return {
5619
+ accessToken: refreshData.accessToken,
5620
+ refreshToken: refreshData.refreshToken,
5621
+ expiresIn: refreshData.accessTokenExpiresIn ?? refreshData.expiresIn ?? 3600,
5622
+ refreshTokenExpiresIn: refreshData.refreshTokenExpiresIn
5623
+ };
5624
+ }
5625
+ console.warn("[AuthModal] Token refresh response missing tokens:", refreshData);
5626
+ return null;
5627
+ } catch (error) {
5628
+ console.error("[AuthModal] Token refresh request failed:", error);
5629
+ return null;
5630
+ }
5631
+ };
5632
+ const enrichLoginResponseWithTokens = async (loginResponse2, providerKey, exchangeConfig) => {
5633
+ if (!loginResponse2) {
5634
+ return loginResponse2;
5635
+ }
5636
+ const hasAccessToken = typeof loginResponse2.accessToken === "string" && loginResponse2.accessToken.length > 0;
5637
+ const hasRefreshToken = typeof loginResponse2.refreshToken === "string" && loginResponse2.refreshToken.length > 0;
5638
+ if (hasAccessToken && hasRefreshToken) {
5639
+ return loginResponse2;
5640
+ }
5641
+ if (!exchangeConfig) {
5642
+ console.warn("[AuthModal] Token exchange skipped - no configuration provided for provider:", providerKey);
5643
+ return loginResponse2;
5644
+ }
5645
+ const sessionId = loginResponse2.sessionId;
5646
+ if (!sessionId) {
5647
+ console.warn("[AuthModal] Missing sessionId in login response, cannot exchange tokens");
5648
+ return loginResponse2;
5649
+ }
5650
+ const { audience, scopes, ttl, additionalBody } = exchangeConfig;
5651
+ try {
5652
+ const { tssUrl: tssUrl2 } = getServiceUrls();
5653
+ const exchangeUrl = addProjectIdToUrl(`${tssUrl2}/api/auth/token/exchange`);
5654
+ const exchangeResponse = await fetch(exchangeUrl, {
5655
+ method: "POST",
5656
+ headers: { "Content-Type": "application/json" },
5657
+ credentials: "include",
5658
+ body: JSON.stringify({
5659
+ sessionId,
5660
+ provider: providerKey,
5661
+ audience,
5662
+ scopes,
5663
+ ...typeof ttl === "number" ? { ttl } : {},
5664
+ ...additionalBody || {}
5665
+ })
5666
+ });
5667
+ if (!exchangeResponse.ok) {
5668
+ const errorText = await exchangeResponse.text().catch(() => "Token exchange failed");
5669
+ console.warn("[AuthModal] Token exchange failed:", exchangeResponse.status, errorText);
5670
+ return loginResponse2;
5671
+ }
5672
+ const tokenData = await exchangeResponse.json();
5673
+ if (tokenData && tokenData.accessToken && tokenData.refreshToken) {
5674
+ console.log("[AuthModal] Token exchange successful for provider:", providerKey);
5675
+ const merged = {
5676
+ ...loginResponse2,
5677
+ accessToken: tokenData.accessToken,
5678
+ refreshToken: tokenData.refreshToken,
5679
+ expiresIn: tokenData.expiresIn ?? loginResponse2.expiresIn ?? 3600,
5680
+ hasKeyshare: tokenData.hasKeyshare ?? loginResponse2.hasKeyshare,
5681
+ isNewUser: tokenData.isNewUser ?? loginResponse2.isNewUser,
5682
+ avatar: tokenData.avatar ?? loginResponse2.avatar,
5683
+ displayName: tokenData.displayName ?? loginResponse2.displayName,
5684
+ providers: tokenData.providers ?? loginResponse2.providers
5685
+ };
5686
+ return merged;
5687
+ }
5688
+ console.warn("[AuthModal] Token exchange response missing tokens:", tokenData);
5689
+ return loginResponse2;
5690
+ } catch (error) {
5691
+ console.error("[AuthModal] Token exchange error:", error);
5692
+ return loginResponse2;
5693
+ }
5694
+ };
5695
+ const finalizeSocialLogin = async (rawLoginResponse, providerKey, userData) => {
5696
+ let loginResponse2 = await normalizeLoginResponse(rawLoginResponse, providerKey, userData);
5697
+ const tokenExchangeConfig = authConfig?.tokenExchange || provider?.tokenExchange;
5698
+ loginResponse2 = await enrichLoginResponseWithTokens(loginResponse2, providerKey, tokenExchangeConfig);
5699
+ if (!loginResponse2.accessToken || !loginResponse2.refreshToken) {
5700
+ const refreshTokens = await fetchTokensFromRefreshEndpoint();
5701
+ if (refreshTokens) {
5702
+ loginResponse2 = {
5703
+ ...loginResponse2,
5704
+ accessToken: refreshTokens.accessToken,
5705
+ refreshToken: refreshTokens.refreshToken,
5706
+ expiresIn: refreshTokens.expiresIn
5707
+ };
5708
+ }
5709
+ }
5710
+ if (!loginResponse2) {
5711
+ showError("Authentication Failed", "No login response received");
5712
+ setIsLoading(false);
5713
+ return;
5714
+ }
5715
+ await jwtTokenManager2.clearTokens();
5716
+ if (!loginResponse2.accessToken || !loginResponse2.refreshToken) {
5717
+ console.warn("[AuthModal] Authentication tokens were not issued; continuing with cookie-based session only.");
5718
+ }
5719
+ let tokensPersisted = false;
5720
+ const persistTokensIfAvailable = async () => {
5721
+ if (!tokensPersisted && loginResponse2.accessToken && loginResponse2.refreshToken) {
5722
+ await jwtTokenManager2.setTokens(loginResponse2);
5723
+ tokensPersisted = true;
5724
+ }
5725
+ };
5726
+ _pendingLoginResponse = loginResponse2;
5727
+ const missingStatusInfo = typeof loginResponse2.hasKeyshare !== "boolean" && typeof loginResponse2.isNewUser === "undefined";
5728
+ if (missingStatusInfo) {
5729
+ if (providerKey === "x") {
5730
+ loginResponse2.hasKeyshare = false;
5731
+ loginResponse2.isNewUser = false;
5732
+ } else {
5733
+ setFailedMessage(
5734
+ "The backend could not determine user status. This indicates that your projectId is not properly configured or the project metadata is missing.\n\nPlease contact support with your projectId to resolve this issue."
5735
+ );
5736
+ setFailedType("config");
5737
+ setStep("failed");
5738
+ setIsLoading(false);
5739
+ _pendingLoginResponse = null;
5740
+ return;
5741
+ }
5742
+ }
5743
+ if (loginResponse2.hasKeyshare === false && loginResponse2.isNewUser === false && providerKey !== "x") {
5744
+ setFailedMessage(
5745
+ "Your account data has been lost on the server.\nThis should never happen and indicates a serious system failure.\n\nUnfortunately, your wallet cannot be recovered.\nYou will need to create a new account.\n\nPlease contact support immediately with this error."
5746
+ );
5747
+ setFailedType("critical");
5748
+ setStep("failed");
5749
+ setIsLoading(false);
5750
+ _pendingLoginResponse = null;
5751
+ return;
5752
+ }
5753
+ const displayNameRequired = await checkDisplayNameRequired(loginResponse2);
5754
+ if (displayNameRequired) {
5755
+ let autoDisplayName = null;
5756
+ if (providerKey === "telegram" && userData) {
5757
+ autoDisplayName = [userData.first_name, userData.last_name].filter(Boolean).join(" ").trim() || userData.username || "Telegram User";
5758
+ } else if (providerKey === "x") {
5759
+ const providerMeta = userData?.meta || loginResponse2.providers?.find((p) => (p.provider || "").toLowerCase() === "x")?.meta;
5760
+ autoDisplayName = providerMeta?.name || providerMeta?.username || loginResponse2.displayName || null;
5761
+ }
5762
+ if (providerKey === "x" && !autoDisplayName) {
5763
+ try {
5764
+ await persistTokensIfAvailable();
5765
+ const { getUserProfile: getUserProfile2 } = await Promise.resolve().then(() => (init_profile(), profile_exports));
5766
+ const profile = await getUserProfile2();
5767
+ const xProvider = profile.providers?.find((p) => (p.provider || "").toLowerCase() === "x");
5768
+ autoDisplayName = xProvider?.meta?.name || xProvider?.meta?.username || profile.displayName || autoDisplayName;
5769
+ } catch (error) {
5770
+ console.warn("[AuthModal] Failed to fetch profile for display name:", error);
5771
+ }
5772
+ }
5773
+ if (autoDisplayName) {
5774
+ console.log("[AuthModal] Auto-setting display name for", providerKey, ":", autoDisplayName);
5775
+ await persistTokensIfAvailable();
5776
+ try {
5777
+ const { updateUserProfile: updateUserProfile2 } = await Promise.resolve().then(() => (init_profile(), profile_exports));
5778
+ await updateUserProfile2({ displayName: autoDisplayName });
5779
+ loginResponse2.displayName = autoDisplayName;
5780
+ console.log("[AuthModal] Display name set successfully for", providerKey);
5781
+ } catch (error) {
5782
+ console.error("[AuthModal] Failed to set display name:", error);
5783
+ }
5784
+ } else {
5785
+ await persistTokensIfAvailable();
5786
+ setStep("display-name");
5787
+ setIsLoading(false);
5788
+ return;
5789
+ }
5790
+ }
5791
+ if (loginResponse2.isNewUser || !loginResponse2.hasKeyshare) {
5792
+ console.log("[AuthModal] New user detected - closing modal before DKG...");
5793
+ setStep("signin");
5794
+ setEmail("");
5795
+ setVerificationError("");
5796
+ setPasskeyError("");
5797
+ setPasskeyStatus("idle");
5798
+ setIsLoading(false);
5799
+ onOpenChange(false);
5800
+ await new Promise((resolve) => setTimeout(resolve, 100));
5801
+ console.log("[AuthModal] Calling onAuthSuccess for new user...");
5802
+ if (onAuthSuccess) {
5803
+ await onAuthSuccess();
5804
+ }
5805
+ console.log("[AuthModal] New user setup completed");
5806
+ } else {
5807
+ console.log("[AuthModal] Existing user - calling onAuthSuccess...");
5808
+ try {
5809
+ if (onAuthSuccess) {
5810
+ await onAuthSuccess();
5811
+ console.log("[AuthModal] onAuthSuccess completed successfully");
5812
+ }
5813
+ } catch (authError) {
5814
+ console.error("[AuthModal] onAuthSuccess failed:", authError);
5815
+ if (authError?.message?.includes("User denied authorization")) {
5816
+ setFailedMessage("Authorization cancelled");
5817
+ setStep("failed");
5818
+ setIsLoading(false);
5819
+ return;
5820
+ }
5821
+ throw authError;
5822
+ }
5823
+ console.log("[AuthModal] Resetting state and closing modal...");
5824
+ setStep("signin");
5825
+ setEmail("");
5826
+ setVerificationError("");
5827
+ setPasskeyError("");
5828
+ setPasskeyStatus("idle");
5829
+ setIsLoading(false);
5830
+ onOpenChange(false);
5831
+ console.log("[AuthModal] Modal closed");
5832
+ }
5833
+ };
5087
5834
  let authConfig = provider?.meta || {};
5088
- if (providerId.toLowerCase() === "telegram" && !authConfig.botUsername) {
5835
+ if (normalizedProviderId === "telegram" && !authConfig.botUsername) {
5089
5836
  const defaultBotUsername = "LumiaPassportDevBot";
5090
5837
  if (defaultBotUsername) {
5091
5838
  authConfig = { ...authConfig, botUsername: defaultBotUsername };
@@ -5093,7 +5840,7 @@ var init_AuthModal = __esm({
5093
5840
  }
5094
5841
  console.log("[AuthModal] Auth config for", providerId, ":", authConfig);
5095
5842
  const result = await iframeManager.openSocialAuthPopup(
5096
- providerId.toLowerCase(),
5843
+ normalizedProviderId,
5097
5844
  authConfig
5098
5845
  );
5099
5846
  if (!result.success) {
@@ -5102,116 +5849,55 @@ var init_AuthModal = __esm({
5102
5849
  return;
5103
5850
  }
5104
5851
  const { user } = result;
5852
+ if (normalizedProviderId === "x" || normalizedProviderId === "twitter") {
5853
+ console.log("[AuthModal] X OAuth completed, user authenticated via callback");
5854
+ const { tssUrl: tssUrl2 } = getServiceUrls();
5855
+ const verifyUrl = addProjectIdToUrl(`${tssUrl2}/api/auth/verify`);
5856
+ const verifyResponse = await fetch(verifyUrl, {
5857
+ method: "GET",
5858
+ credentials: "include"
5859
+ });
5860
+ if (!verifyResponse.ok) {
5861
+ showError("Authentication Failed", "Failed to verify X authentication");
5862
+ setIsLoading(false);
5863
+ return;
5864
+ }
5865
+ const loginResponse2 = await verifyResponse.json();
5866
+ console.log("[AuthModal] X login verified:", loginResponse2);
5867
+ await finalizeSocialLogin(loginResponse2, "x");
5868
+ return;
5869
+ }
5105
5870
  if (!user) {
5106
5871
  showError("Authentication Failed", "No user data received");
5107
5872
  setIsLoading(false);
5108
5873
  return;
5109
5874
  }
5110
5875
  const { tssUrl } = getServiceUrls();
5111
- const apiUrl = addProjectIdToUrl(`${tssUrl}/api/auth/telegram/login`);
5112
- const telegramPayload = {
5876
+ const apiUrl = addProjectIdToUrl(`${tssUrl}/api/auth/${providerId}/login`);
5877
+ const payload = normalizedProviderId === "telegram" ? {
5113
5878
  id: user.id,
5114
5879
  first_name: user.first_name,
5115
5880
  auth_date: user.auth_date,
5116
5881
  hash: user.hash
5117
- };
5118
- if (user.last_name) telegramPayload.last_name = user.last_name;
5119
- if (user.username) telegramPayload.username = user.username;
5120
- if (user.photo_url) telegramPayload.photo_url = user.photo_url;
5882
+ } : user;
5883
+ if (normalizedProviderId === "telegram") {
5884
+ if (user.last_name) payload.last_name = user.last_name;
5885
+ if (user.username) payload.username = user.username;
5886
+ if (user.photo_url) payload.photo_url = user.photo_url;
5887
+ }
5121
5888
  const response = await fetch(apiUrl, {
5122
5889
  method: "POST",
5123
5890
  headers: { "Content-Type": "application/json" },
5124
5891
  credentials: "include",
5125
- body: JSON.stringify(telegramPayload)
5892
+ body: JSON.stringify(payload)
5126
5893
  });
5127
5894
  if (!response.ok) {
5128
5895
  const errorText = await response.text().catch(() => "Login failed");
5129
5896
  throw new Error(`Login failed: ${response.status} ${errorText}`);
5130
5897
  }
5131
5898
  const loginResponse = await response.json();
5132
- console.log("[AuthModal] Telegram login response:", loginResponse);
5133
- if (!loginResponse) {
5134
- showError("Authentication Failed", "No login response received");
5135
- setIsLoading(false);
5136
- return;
5137
- }
5138
- jwtTokenManager2.clearTokens();
5139
- _pendingLoginResponse = loginResponse;
5140
- if (!loginResponse.hasKeyshare && loginResponse.isNewUser === void 0) {
5141
- setFailedMessage(
5142
- "The backend could not determine user status. This indicates that your projectId is not properly configured or the project metadata is missing.\n\nPlease contact support with your projectId to resolve this issue."
5143
- );
5144
- setFailedType("config");
5145
- setStep("failed");
5146
- setIsLoading(false);
5147
- _pendingLoginResponse = null;
5148
- return;
5149
- }
5150
- if (!loginResponse.hasKeyshare && loginResponse.isNewUser === false) {
5151
- setFailedMessage(
5152
- "Your account data has been lost on the server.\nThis should never happen and indicates a serious system failure.\n\nUnfortunately, your wallet cannot be recovered.\nYou will need to create a new account.\n\nPlease contact support immediately with this error."
5153
- );
5154
- setFailedType("critical");
5155
- setStep("failed");
5156
- setIsLoading(false);
5157
- _pendingLoginResponse = null;
5158
- return;
5159
- }
5160
- const displayNameRequired = await checkDisplayNameRequired(loginResponse);
5161
- if (displayNameRequired) {
5162
- const displayName = [user.first_name, user.last_name].filter(Boolean).join(" ").trim() || user.username || "Telegram User";
5163
- console.log("[AuthModal] Auto-setting display name for Telegram user:", displayName);
5164
- await jwtTokenManager2.setTokens(loginResponse);
5165
- try {
5166
- const { updateUserProfile: updateUserProfile2 } = await Promise.resolve().then(() => (init_profile(), profile_exports));
5167
- await updateUserProfile2({ displayName });
5168
- console.log("[AuthModal] Display name set successfully");
5169
- } catch (error) {
5170
- console.error("[AuthModal] Failed to set display name:", error);
5171
- }
5172
- }
5173
- if (loginResponse.isNewUser || !loginResponse.hasKeyshare) {
5174
- console.log("[AuthModal] New user detected - closing modal before DKG...");
5175
- setStep("signin");
5176
- setEmail("");
5177
- setVerificationError("");
5178
- setPasskeyError("");
5179
- setPasskeyStatus("idle");
5180
- setIsLoading(false);
5181
- onOpenChange(false);
5182
- await new Promise((resolve) => setTimeout(resolve, 100));
5183
- console.log("[AuthModal] Calling onAuthSuccess for new user...");
5184
- if (onAuthSuccess) {
5185
- await onAuthSuccess();
5186
- }
5187
- console.log("[AuthModal] New user setup completed");
5188
- } else {
5189
- console.log("[AuthModal] Existing user - calling onAuthSuccess...");
5190
- try {
5191
- if (onAuthSuccess) {
5192
- await onAuthSuccess();
5193
- console.log("[AuthModal] onAuthSuccess completed successfully");
5194
- }
5195
- } catch (authError) {
5196
- console.error("[AuthModal] onAuthSuccess failed:", authError);
5197
- if (authError?.message?.includes("User denied authorization")) {
5198
- setFailedMessage("Authorization cancelled");
5199
- setStep("failed");
5200
- setIsLoading(false);
5201
- return;
5202
- }
5203
- throw authError;
5204
- }
5205
- console.log("[AuthModal] Resetting state and closing modal...");
5206
- setStep("signin");
5207
- setEmail("");
5208
- setVerificationError("");
5209
- setPasskeyError("");
5210
- setPasskeyStatus("idle");
5211
- setIsLoading(false);
5212
- onOpenChange(false);
5213
- console.log("[AuthModal] Modal closed");
5214
- }
5899
+ console.log(`[AuthModal] ${providerId} login response:`, loginResponse);
5900
+ await finalizeSocialLogin(loginResponse, normalizedProviderId, user);
5215
5901
  } catch (error) {
5216
5902
  showError(
5217
5903
  `${provider.name} Authentication Failed`,
@@ -5220,9 +5906,6 @@ var init_AuthModal = __esm({
5220
5906
  setIsLoading(false);
5221
5907
  }
5222
5908
  }, [config?.social?.providers, onAuthSuccess, onOpenChange, callbacks]);
5223
- const handleTelegramAuth = React13.useCallback(async () => {
5224
- await handleSocialAuth("telegram");
5225
- }, [handleSocialAuth]);
5226
5909
  const handleComingSoon = (providerName) => {
5227
5910
  showError("Coming Soon", `${providerName} authentication is coming soon!`);
5228
5911
  };
@@ -5232,6 +5915,7 @@ var init_AuthModal = __esm({
5232
5915
  {
5233
5916
  className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden ${isDark ? "lumia-dark" : "lumia-light"}`,
5234
5917
  hideClose: true,
5918
+ "data-lumia-auth-modal": "true",
5235
5919
  children: [
5236
5920
  /* @__PURE__ */ jsx19(DialogTitle, { className: "sr-only", children: "Restore Account Access" }),
5237
5921
  /* @__PURE__ */ jsx19(KeyshareRestore, { userId: recoveryUserId, onClose: onRecoveryClose, onRestoreSuccess: onRecoverySuccess })
@@ -5249,6 +5933,7 @@ var init_AuthModal = __esm({
5249
5933
  maxWidth: config.ui.modal?.width || "400px"
5250
5934
  },
5251
5935
  hideClose: true,
5936
+ "data-lumia-auth-modal": "true",
5252
5937
  children: [
5253
5938
  /* @__PURE__ */ jsx19(DialogTitle, { className: "sr-only", children: "Enter Your Name" }),
5254
5939
  /* @__PURE__ */ jsx19("div", { className: "p-8", children: /* @__PURE__ */ jsx19(
@@ -5293,6 +5978,7 @@ var init_AuthModal = __esm({
5293
5978
  borderRadius: config.ui.modal?.borderRadius || "24px",
5294
5979
  maxWidth: config.ui.modal?.width || "400px"
5295
5980
  },
5981
+ "data-lumia-auth-modal": "true",
5296
5982
  children: [
5297
5983
  /* @__PURE__ */ jsx19(DialogTitle, { className: "sr-only", children: failedType === "config" ? "Configuration Error" : failedType === "critical" ? "Critical Error" : "Authentication Failed" }),
5298
5984
  /* @__PURE__ */ jsx19("div", { className: "p-8", children: /* @__PURE__ */ jsx19(
@@ -5321,6 +6007,7 @@ var init_AuthModal = __esm({
5321
6007
  borderRadius: config.ui.modal?.borderRadius || "24px",
5322
6008
  maxWidth: config.ui.modal?.width || "400px"
5323
6009
  },
6010
+ "data-lumia-auth-modal": "true",
5324
6011
  children: [
5325
6012
  /* @__PURE__ */ jsx19(DialogTitle, { className: "sr-only", children: "Email Verification" }),
5326
6013
  /* @__PURE__ */ jsxs11("div", { className: "p-5", children: [
@@ -5357,6 +6044,7 @@ var init_AuthModal = __esm({
5357
6044
  DialogContent,
5358
6045
  {
5359
6046
  className: `lumia-scope max-w-[400px] p-0 border-0 ${theme.modalBg} rounded-2xl overflow-hidden`,
6047
+ "data-lumia-auth-modal": "true",
5360
6048
  children: [
5361
6049
  /* @__PURE__ */ jsx19(DialogTitle, { className: "sr-only", children: "Sign in to Lumia Passport" }),
5362
6050
  /* @__PURE__ */ jsxs11("div", { className: "p-8", children: [
@@ -5466,7 +6154,10 @@ var init_AuthModal = __esm({
5466
6154
  discord: DiscordIcon
5467
6155
  };
5468
6156
  const IconComponent = provider.icon ?? fallbackMap[(provider.id || "").toLowerCase()];
5469
- const handleClick = provider.id === "telegram" ? handleTelegramAuth : () => handleComingSoon(provider.name);
6157
+ const supportedProviders = ["telegram", "x", "twitter"];
6158
+ const providerId = (provider.id || "").toLowerCase();
6159
+ const isSupported = supportedProviders.includes(providerId);
6160
+ const handleClick = isSupported ? () => handleSocialAuth(providerId) : () => handleComingSoon(provider.name);
5470
6161
  return /* @__PURE__ */ jsx19(
5471
6162
  Button,
5472
6163
  {
@@ -6390,6 +7081,7 @@ var init_ManageWallet = __esm({
6390
7081
  init_lumiaPassport();
6391
7082
  init_VerificationCodeInput();
6392
7083
  init_WalletConnectHandler();
7084
+ init_auth();
6393
7085
  ManageWallet = ({ open, onOpenChange, onBack }) => {
6394
7086
  const [providers, setProviders] = useState7([]);
6395
7087
  const [loading, setLoading] = useState7(false);
@@ -6493,6 +7185,68 @@ var init_ManageWallet = __esm({
6493
7185
  setTelegramLinkStarted(false);
6494
7186
  }
6495
7187
  }, [providerType]);
7188
+ const handleLinkSocialProvider = React16.useCallback(async (providerIdRaw) => {
7189
+ const providerKey = providerIdRaw.toLowerCase();
7190
+ try {
7191
+ setLinkIsLoading(true);
7192
+ setLinkError("");
7193
+ setError("");
7194
+ const socialProvider = config.social?.providers?.find(
7195
+ (p) => (p.id || "").toLowerCase() === providerKey && p.enabled
7196
+ );
7197
+ if (!socialProvider) {
7198
+ throw new Error(`${providerIdRaw} provider not configured`);
7199
+ }
7200
+ let authConfig = {
7201
+ ...socialProvider.meta || {},
7202
+ mode: "link"
7203
+ };
7204
+ try {
7205
+ await ensureValidToken();
7206
+ } catch (tokenError) {
7207
+ console.warn("[ManageWallet] ensureValidToken failed before linking", tokenError);
7208
+ }
7209
+ const accessToken = jwtTokenManager2.getAccessToken();
7210
+ if (accessToken) {
7211
+ authConfig.token = accessToken;
7212
+ }
7213
+ const normalizedProvider = providerKey === "twitter" ? "x" : providerKey;
7214
+ const { getIframeManager: getIframeManager2 } = await Promise.resolve().then(() => (init_index(), index_exports));
7215
+ const iframeManager = getIframeManager2();
7216
+ const result = await iframeManager.openSocialAuthPopup(normalizedProvider, authConfig);
7217
+ if (!result.success) {
7218
+ throw new Error(result.error || `${socialProvider.name || providerIdRaw} authentication failed`);
7219
+ }
7220
+ const list = await getLinkedProviders();
7221
+ setProviders(list);
7222
+ setProvidersJustUpdated(true);
7223
+ try {
7224
+ callbacks?.onLumiaPassportUpdate?.({ providers: list });
7225
+ } catch {
7226
+ }
7227
+ setShowAdd(false);
7228
+ setProviderType(null);
7229
+ } catch (e) {
7230
+ console.error(`[ManageWallet] Failed to link ${providerIdRaw}:`, e);
7231
+ const message = e?.message || `Failed to link ${providerIdRaw}`;
7232
+ setLinkError(message);
7233
+ setProviderType(null);
7234
+ } finally {
7235
+ setLinkIsLoading(false);
7236
+ }
7237
+ }, [config.social?.providers, callbacks]);
7238
+ const [socialLinkStarted, setSocialLinkStarted] = React16.useState(false);
7239
+ useEffect6(() => {
7240
+ const key = providerType?.toLowerCase();
7241
+ if (key && key !== "telegram" && key !== "email" && key !== "passkey" && key !== "wallet") {
7242
+ if (!linkIsLoading && !socialLinkStarted) {
7243
+ setSocialLinkStarted(true);
7244
+ handleLinkSocialProvider(key);
7245
+ }
7246
+ } else if (socialLinkStarted) {
7247
+ setSocialLinkStarted(false);
7248
+ }
7249
+ }, [providerType, linkIsLoading, socialLinkStarted, handleLinkSocialProvider]);
6496
7250
  const canUnlink = (p) => {
6497
7251
  const verified = providers.filter((x) => x.verified);
6498
7252
  if (verified.length <= 1 && p.verified) return false;
@@ -6831,13 +7585,7 @@ var init_ManageWallet = __esm({
6831
7585
  ),
6832
7586
  linkError && /* @__PURE__ */ jsx20("div", { className: `p-3 rounded text-sm break-words whitespace-pre-wrap ${isDark ? "bg-red-900/30 border border-red-900 text-red-400" : "bg-red-50 border border-red-200 text-red-700"}`, children: linkError })
6833
7587
  ] }),
6834
- providerType && providerType !== "email" && providerType !== "passkey" && providerType !== "telegram" && providerType !== "wallet" && /* @__PURE__ */ jsxs12("div", { className: `p-3 rounded-xl text-sm ${isDark ? "bg-blue-900/30 border border-blue-900 text-blue-400" : "bg-blue-50 border border-blue-200 text-blue-700"}`, children: [
6835
- "Linking with ",
6836
- providerType.charAt(0).toUpperCase() + providerType.slice(1),
6837
- " requires OAuth implementation. This would typically redirect to ",
6838
- providerType,
6839
- " for authentication."
6840
- ] })
7588
+ providerType && providerType !== "email" && providerType !== "passkey" && providerType !== "telegram" && providerType !== "wallet" && /* @__PURE__ */ jsx20("div", { className: `p-3 rounded-xl text-sm ${isDark ? "bg-blue-900/30 border border-blue-900 text-blue-400" : "bg-blue-50 border border-blue-200 text-blue-700"}`, children: linkIsLoading ? `Linking with ${providerType.charAt(0).toUpperCase() + providerType.slice(1)}\u2026 Follow the popup to approve the connection.` : `Launching ${providerType.charAt(0).toUpperCase() + providerType.slice(1)} authentication\u2026` })
6841
7589
  ] })
6842
7590
  ] }) }) }),
6843
7591
  /* @__PURE__ */ jsx20(Dialog, { open: !!confirmUnlink, onOpenChange: (v) => {
@@ -6932,6 +7680,8 @@ var init_SecurityModal = __esm({
6932
7680
  const iframeManager = getIframeManager2();
6933
7681
  const apps = await iframeManager.getTrustedApps(userId);
6934
7682
  console.log("[SecurityModal] Received trusted apps:", apps);
7683
+ console.log("[SecurityModal] Trusted apps count:", apps?.length);
7684
+ console.log("[SecurityModal] Setting trusted apps state with:", apps);
6935
7685
  setTrustedApps(apps);
6936
7686
  } catch (error) {
6937
7687
  console.error("[SecurityModal] Failed to load trusted apps:", error);
@@ -7489,7 +8239,7 @@ var init_KeyshareBackup = __esm({
7489
8239
  import React19 from "react";
7490
8240
  import { Activity, ArrowUpRight, ArrowDownRight, CheckCircle2 as CheckCircle24, XCircle, ArrowLeft as ArrowLeft6, RefreshCw as RefreshCw3 } from "lucide-react";
7491
8241
  import { jsx as jsx23, jsxs as jsxs15 } from "react/jsx-runtime";
7492
- var TransactionsModal;
8242
+ var ENTRYPOINT_ADDRESSES, MAX_HISTORY_ITEMS, TransactionsModal;
7493
8243
  var init_TransactionsModal = __esm({
7494
8244
  "src/internal/components/TransactionsModal.tsx"() {
7495
8245
  init_dialog();
@@ -7498,65 +8248,366 @@ var init_TransactionsModal = __esm({
7498
8248
  init_base();
7499
8249
  init_LumiaPassportContext();
7500
8250
  init_useTheme();
8251
+ ENTRYPOINT_ADDRESSES = new Set(
8252
+ [
8253
+ "0x000000000000000000000000000000000000a032",
8254
+ // User mentioned EntryPoint-like address
8255
+ "0x0576a174d229e3cfa37253523e645a78a0c91b57",
8256
+ // Canonical EntryPoint (v0.6)
8257
+ "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789"
8258
+ // EntryPoint v0.7
8259
+ ].map((addr) => addr.toLowerCase())
8260
+ );
8261
+ MAX_HISTORY_ITEMS = 40;
7501
8262
  TransactionsModal = ({ open, onOpenChange, onBack }) => {
7502
8263
  const { address } = useLumiaPassportSession();
7503
- const [transactions, setTransactions] = React19.useState([]);
8264
+ const [historyGroups, setHistoryGroups] = React19.useState([]);
7504
8265
  const [loading, setLoading] = React19.useState(false);
7505
8266
  const [error, setError] = React19.useState(null);
7506
8267
  const { config } = useLumiaPassportConfig();
7507
8268
  const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
8269
+ const [expandedGroups, setExpandedGroups] = React19.useState({});
7508
8270
  const loadTransactions = React19.useCallback(async () => {
7509
8271
  if (!address) return;
7510
8272
  setLoading(true);
7511
8273
  setError(null);
8274
+ const toBigInt = (value) => {
8275
+ try {
8276
+ return BigInt(value || "0");
8277
+ } catch {
8278
+ return 0n;
8279
+ }
8280
+ };
7512
8281
  try {
7513
8282
  const explorerUrl = getExplorerUrl();
7514
8283
  const baseUrl = explorerUrl.replace(/\/$/, "");
7515
- const apiUrl = `${baseUrl}/api/v2/addresses/${address}/transactions?items_count=20`;
7516
- const response = await fetch(apiUrl, { credentials: "include" });
7517
- if (!response.ok) {
7518
- throw new Error(`Failed to fetch transactions: ${response.status}`);
8284
+ const transactionsUrl = `${baseUrl}/api/v2/addresses/${address}/transactions?items_count=20`;
8285
+ const internalsUrl = `${baseUrl}/api/v2/addresses/${address}/internal-transactions?items_count=40`;
8286
+ const tokenTransfersUrl = `${baseUrl}/api/v2/addresses/${address}/token-transfers?type=ERC-20&items_count=40`;
8287
+ const [transactionsResponse, internalResponse, tokenResponse] = await Promise.allSettled([
8288
+ fetch(transactionsUrl),
8289
+ fetch(internalsUrl),
8290
+ fetch(tokenTransfersUrl)
8291
+ ]);
8292
+ if (transactionsResponse.status !== "fulfilled" || !transactionsResponse.value.ok) {
8293
+ const status = transactionsResponse.status === "fulfilled" ? transactionsResponse.value.status : "fetch_error";
8294
+ throw new Error(`Failed to fetch transactions: ${status}`);
7519
8295
  }
7520
- const data = await response.json();
7521
- setTransactions(data.items || []);
7522
- } catch (error2) {
7523
- console.error("Failed to load transactions:", error2);
7524
- setError(error2 instanceof Error ? error2.message : "Failed to load transactions");
8296
+ let transactionsData = [];
8297
+ const transactionsJson = await transactionsResponse.value.json();
8298
+ if (transactionsJson?.items && Array.isArray(transactionsJson.items)) {
8299
+ transactionsData = transactionsJson.items;
8300
+ }
8301
+ let internalData = [];
8302
+ if (internalResponse.status === "fulfilled") {
8303
+ if (internalResponse.value.ok) {
8304
+ const internalsJson = await internalResponse.value.json();
8305
+ if (internalsJson?.items && Array.isArray(internalsJson.items)) {
8306
+ internalData = internalsJson.items;
8307
+ }
8308
+ } else if (internalResponse.value.status !== 404) {
8309
+ throw new Error(`Failed to fetch internal transactions: ${internalResponse.value.status}`);
8310
+ }
8311
+ } else if (internalResponse.status === "rejected") {
8312
+ console.warn("[TransactionsModal] Failed to load internal transactions", internalResponse.reason);
8313
+ }
8314
+ let tokenTransfersData = [];
8315
+ if (tokenResponse.status === "fulfilled") {
8316
+ if (tokenResponse.value.ok) {
8317
+ const tokensJson = await tokenResponse.value.json();
8318
+ if (tokensJson?.items && Array.isArray(tokensJson.items)) {
8319
+ tokenTransfersData = tokensJson.items;
8320
+ }
8321
+ } else if (tokenResponse.value.status !== 404) {
8322
+ console.warn("[TransactionsModal] Token transfers unavailable", tokenResponse.value.status);
8323
+ }
8324
+ } else if (tokenResponse.status === "rejected") {
8325
+ console.warn("[TransactionsModal] Failed to load token transfers", tokenResponse.reason);
8326
+ }
8327
+ const combinedHistory = [];
8328
+ const lowerAddress = address.toLowerCase();
8329
+ const now = Date.now();
8330
+ transactionsData.forEach((tx) => {
8331
+ const toMatches = tx.to?.hash?.toLowerCase() === lowerAddress;
8332
+ const fromMatches = tx.from?.hash?.toLowerCase() === lowerAddress;
8333
+ const direction = toMatches ? "in" : "out";
8334
+ const counterpart = direction === "in" ? tx.from : tx.to;
8335
+ const counterpartHash = counterpart?.hash ?? "0x0000000000000000000000000000000000000000";
8336
+ const counterpartLower = counterpartHash.toLowerCase();
8337
+ const isEntryPoint = ENTRYPOINT_ADDRESSES.has(counterpartLower);
8338
+ const timestampMs = tx.timestamp ? new Date(tx.timestamp).getTime() : now;
8339
+ combinedHistory.push({
8340
+ id: `tx-${tx.hash}`,
8341
+ kind: "transaction",
8342
+ hash: tx.hash,
8343
+ parentHash: tx.hash,
8344
+ direction,
8345
+ counterparty: counterpartHash,
8346
+ counterpartyName: counterpart?.name ?? null,
8347
+ counterpartyIsContract: Boolean(counterpart?.is_contract),
8348
+ value: tx.value ?? "0",
8349
+ status: tx.status === "ok" ? "ok" : "error",
8350
+ timestampMs: Number.isFinite(timestampMs) ? timestampMs : now,
8351
+ method: tx.method,
8352
+ blockNumber: tx.block_number,
8353
+ badgeLabel: Array.isArray(tx.transaction_types) && tx.transaction_types.length > 0 ? tx.transaction_types[0]?.replace(/_/g, " ") : void 0,
8354
+ assetSymbol: "LUMIA",
8355
+ decimals: 18,
8356
+ isEntryPoint
8357
+ });
8358
+ if (!toMatches && !fromMatches && Array.isArray(tx.transaction_types)) {
8359
+ const hasUserOpTag = tx.transaction_types.some((type) => type.includes("erc4337"));
8360
+ if (hasUserOpTag) {
8361
+ combinedHistory[combinedHistory.length - 1].badgeLabel = "User Operation";
8362
+ }
8363
+ }
8364
+ });
8365
+ internalData.forEach((trace, index) => {
8366
+ const fromHash = trace.from?.hash?.toLowerCase();
8367
+ const toHash = trace.to?.hash?.toLowerCase();
8368
+ if (fromHash !== lowerAddress && toHash !== lowerAddress) {
8369
+ return;
8370
+ }
8371
+ const direction = fromHash === lowerAddress ? "out" : "in";
8372
+ const counterpart = direction === "out" ? trace.to : trace.from;
8373
+ const counterpartHash = counterpart?.hash ?? "0x0000000000000000000000000000000000000000";
8374
+ const counterpartLower = counterpartHash.toLowerCase();
8375
+ const isEntryPoint = ENTRYPOINT_ADDRESSES.has(counterpartLower);
8376
+ const tsInput = trace.timestamp;
8377
+ const timestampMs = typeof tsInput === "number" ? tsInput * 1e3 : tsInput ? new Date(tsInput).getTime() : now;
8378
+ combinedHistory.push({
8379
+ id: `internal-${trace.transaction_hash}-${index}`,
8380
+ kind: "internal",
8381
+ hash: trace.transaction_hash,
8382
+ parentHash: trace.transaction_hash,
8383
+ direction,
8384
+ counterparty: counterpartHash,
8385
+ counterpartyName: counterpart?.name ?? null,
8386
+ counterpartyIsContract: Boolean(counterpart?.is_contract),
8387
+ value: trace.value ?? "0",
8388
+ status: trace.success === false || trace.status === "error" ? "error" : "ok",
8389
+ timestampMs: Number.isFinite(timestampMs) ? timestampMs : now,
8390
+ method: trace.call_type ? trace.call_type.toUpperCase() : void 0,
8391
+ blockNumber: trace.block_number,
8392
+ badgeLabel: "Internal",
8393
+ assetSymbol: "LUMIA",
8394
+ decimals: 18,
8395
+ isEntryPoint
8396
+ });
8397
+ });
8398
+ const parentMap = /* @__PURE__ */ new Map();
8399
+ const orphanInternals = [];
8400
+ combinedHistory.forEach((item) => {
8401
+ if (item.kind === "transaction") {
8402
+ parentMap.set(item.parentHash.toLowerCase(), {
8403
+ id: item.parentHash,
8404
+ parent: item,
8405
+ internals: [],
8406
+ timestampMs: item.timestampMs
8407
+ });
8408
+ }
8409
+ });
8410
+ combinedHistory.forEach((item) => {
8411
+ if (item.kind === "internal") {
8412
+ const group = parentMap.get(item.parentHash.toLowerCase());
8413
+ if (group) {
8414
+ group.internals.push(item);
8415
+ group.timestampMs = Math.max(group.timestampMs, item.timestampMs);
8416
+ } else {
8417
+ orphanInternals.push(item);
8418
+ }
8419
+ }
8420
+ });
8421
+ const groups = Array.from(parentMap.values());
8422
+ groups.forEach((group) => {
8423
+ if (group.internals.length === 0) {
8424
+ return;
8425
+ }
8426
+ const meaningfulInternals = group.internals.filter((internal) => {
8427
+ const amount = toBigInt(internal.value);
8428
+ return amount !== 0n && !internal.isEntryPoint;
8429
+ });
8430
+ if (meaningfulInternals.length === 0) {
8431
+ group.internals = [];
8432
+ return;
8433
+ }
8434
+ let totalIn = 0n;
8435
+ let totalOut = 0n;
8436
+ meaningfulInternals.forEach((internal) => {
8437
+ const amount = toBigInt(internal.value);
8438
+ if (amount === 0n) {
8439
+ return;
8440
+ }
8441
+ if (internal.direction === "in") {
8442
+ totalIn += amount;
8443
+ } else {
8444
+ totalOut += amount;
8445
+ }
8446
+ });
8447
+ const hasPositiveFlow = totalIn > 0n || totalOut > 0n;
8448
+ if (hasPositiveFlow) {
8449
+ const direction = totalIn >= totalOut ? "in" : "out";
8450
+ const netValue = direction === "in" ? totalIn - totalOut : totalOut - totalIn;
8451
+ group.parent.direction = direction;
8452
+ group.parent.value = netValue > 0n ? netValue.toString() : group.parent.value;
8453
+ const candidates = meaningfulInternals.filter((internal) => internal.direction === direction).map((internal) => ({
8454
+ internal,
8455
+ amount: toBigInt(internal.value)
8456
+ })).sort((a, b) => {
8457
+ if (a.amount === b.amount) return 0;
8458
+ return a.amount > b.amount ? -1 : 1;
8459
+ });
8460
+ const primary = candidates.length > 0 ? candidates[0].internal : meaningfulInternals[0];
8461
+ if (primary) {
8462
+ group.parent.counterparty = primary.counterparty;
8463
+ group.parent.counterpartyName = primary.counterpartyName;
8464
+ group.parent.counterpartyIsContract = primary.counterpartyIsContract;
8465
+ group.parent.method = group.parent.method || primary.method;
8466
+ }
8467
+ group.internals = meaningfulInternals;
8468
+ } else {
8469
+ group.internals = [];
8470
+ }
8471
+ });
8472
+ orphanInternals.forEach((internalItem) => {
8473
+ if (internalItem.isEntryPoint || toBigInt(internalItem.value) === 0n) {
8474
+ return;
8475
+ }
8476
+ groups.push({
8477
+ id: internalItem.id,
8478
+ parent: internalItem,
8479
+ internals: [],
8480
+ timestampMs: internalItem.timestampMs
8481
+ });
8482
+ });
8483
+ tokenTransfersData.forEach((transfer, index) => {
8484
+ const rawValue = transfer.value ?? "0";
8485
+ const amount = toBigInt(rawValue);
8486
+ if (amount === 0n) {
8487
+ return;
8488
+ }
8489
+ const toHash = transfer.to?.hash ?? "";
8490
+ const fromHash = transfer.from?.hash ?? "";
8491
+ const toLower = toHash.toLowerCase();
8492
+ const fromLower = fromHash.toLowerCase();
8493
+ const direction = toLower === lowerAddress ? "in" : "out";
8494
+ const counterparty = direction === "in" ? fromHash : toHash;
8495
+ if (!counterparty || ENTRYPOINT_ADDRESSES.has(counterparty.toLowerCase())) {
8496
+ return;
8497
+ }
8498
+ const tsInput = transfer.timestamp;
8499
+ const timestampMs = typeof tsInput === "number" ? tsInput > 1e12 ? tsInput : tsInput * 1e3 : tsInput ? new Date(tsInput).getTime() : now;
8500
+ const decimalsRaw = transfer.token?.decimals;
8501
+ const decimals = typeof decimalsRaw === "string" ? parseInt(decimalsRaw, 10) : typeof decimalsRaw === "number" ? decimalsRaw : 18;
8502
+ const assetSymbol = transfer.token?.symbol || "Token";
8503
+ const tokenItem = {
8504
+ id: `token-${transfer.tx_hash}-${index}`,
8505
+ kind: "token",
8506
+ hash: transfer.tx_hash,
8507
+ parentHash: transfer.tx_hash,
8508
+ direction,
8509
+ counterparty,
8510
+ counterpartyName: null,
8511
+ counterpartyIsContract: false,
8512
+ value: rawValue,
8513
+ status: "ok",
8514
+ timestampMs: Number.isFinite(timestampMs) ? timestampMs : now,
8515
+ method: "ERC20",
8516
+ blockNumber: transfer.block_number ?? 0,
8517
+ badgeLabel: assetSymbol.toUpperCase(),
8518
+ assetSymbol: assetSymbol.toUpperCase(),
8519
+ decimals: Number.isFinite(decimals) ? Number(decimals) : 18,
8520
+ isEntryPoint: false
8521
+ };
8522
+ groups.push({
8523
+ id: tokenItem.id,
8524
+ parent: tokenItem,
8525
+ internals: [],
8526
+ timestampMs: tokenItem.timestampMs
8527
+ });
8528
+ });
8529
+ const filteredGroups = groups.filter((group) => {
8530
+ const parent = group.parent;
8531
+ if (parent.kind === "token") {
8532
+ return true;
8533
+ }
8534
+ const amount = toBigInt(parent.value);
8535
+ if (amount === 0n) {
8536
+ return false;
8537
+ }
8538
+ const counterpartyLower = parent.counterparty?.toLowerCase?.() || "";
8539
+ if (ENTRYPOINT_ADDRESSES.has(counterpartyLower)) {
8540
+ return false;
8541
+ }
8542
+ if (parent.assetSymbol && parent.assetSymbol !== "LUMIA") {
8543
+ return amount > 0n;
8544
+ }
8545
+ return true;
8546
+ });
8547
+ filteredGroups.sort((a, b) => b.timestampMs - a.timestampMs);
8548
+ setHistoryGroups(filteredGroups.slice(0, MAX_HISTORY_ITEMS));
8549
+ setExpandedGroups({});
8550
+ } catch (err) {
8551
+ console.error("Failed to load transactions:", err);
8552
+ setError(err instanceof Error ? err.message : "Failed to load transactions");
7525
8553
  } finally {
7526
8554
  setLoading(false);
7527
8555
  }
7528
8556
  }, [address]);
7529
8557
  React19.useEffect(() => {
7530
- if (open && address && !loading && transactions.length === 0) {
8558
+ if (open && address && !loading && historyGroups.length === 0) {
7531
8559
  loadTransactions();
7532
8560
  }
7533
8561
  }, [open]);
7534
8562
  const formatAddress = (addr) => {
8563
+ if (!addr) return "Unknown";
8564
+ if (!addr.startsWith("0x") || addr.length <= 12) {
8565
+ return addr;
8566
+ }
7535
8567
  return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
7536
8568
  };
7537
- const formatTime = (timestamp) => {
7538
- return new Date(timestamp).toLocaleString();
7539
- };
7540
- const formatValue = (value) => {
8569
+ const parseValue = (value) => {
7541
8570
  try {
7542
- const wei = BigInt(value);
7543
- const eth = Number(wei) / 1e18;
7544
- return eth.toFixed(4);
8571
+ return BigInt(value || "0");
7545
8572
  } catch {
7546
- return "0.0000";
8573
+ return 0n;
7547
8574
  }
7548
8575
  };
7549
- const getStatusIcon = (status) => {
7550
- 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" });
7551
- };
7552
- const getTransactionIcon = (from, to) => {
7553
- const isIncoming = to.toLowerCase() === address?.toLowerCase();
7554
- return isIncoming ? /* @__PURE__ */ jsx23(ArrowDownRight, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsx23(ArrowUpRight, { className: "w-4 h-4 text-blue-500" });
8576
+ const formatValue = (value, decimals = 18) => {
8577
+ const amount = parseValue(value);
8578
+ if (amount === 0n) return "0";
8579
+ if (decimals <= 0) {
8580
+ return amount.toString();
8581
+ }
8582
+ const scale = 10n ** BigInt(decimals);
8583
+ const whole = amount / scale;
8584
+ const fraction = amount % scale;
8585
+ if (fraction === 0n) {
8586
+ return whole.toString();
8587
+ }
8588
+ const fractionStr = fraction.toString().padStart(decimals, "0").replace(/0+$/, "");
8589
+ const trimmed = fractionStr.slice(0, Math.min(6, fractionStr.length));
8590
+ return `${whole.toString()}.${trimmed}`;
7555
8591
  };
8592
+ const getStatusIcon = (status) => status === "ok" ? /* @__PURE__ */ jsx23(CheckCircle24, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsx23(XCircle, { className: "w-4 h-4 text-red-500" });
8593
+ const getTransactionIcon = (direction) => direction === "in" ? /* @__PURE__ */ jsx23(ArrowDownRight, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsx23(ArrowUpRight, { className: "w-4 h-4 text-blue-500" });
7556
8594
  const openInExplorer = (txHash) => {
7557
8595
  const explorerUrl = getExplorerUrl();
7558
8596
  window.open(`${explorerUrl}/tx/${txHash}`, "_blank");
7559
8597
  };
8598
+ const formatTimestamp = (timestampMs) => {
8599
+ try {
8600
+ return new Date(timestampMs).toLocaleString();
8601
+ } catch {
8602
+ return "";
8603
+ }
8604
+ };
8605
+ const toggleGroup = (groupId) => {
8606
+ setExpandedGroups((prev) => ({
8607
+ ...prev,
8608
+ [groupId]: !prev[groupId]
8609
+ }));
8610
+ };
7560
8611
  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: [
7561
8612
  /* @__PURE__ */ jsx23(VisuallyHidden, { children: /* @__PURE__ */ jsx23(DialogTitle, { children: "Transaction History" }) }),
7562
8613
  /* @__PURE__ */ jsx23(DialogDescription, { className: "sr-only", children: "View your transaction history" }),
@@ -7588,76 +8639,107 @@ var init_TransactionsModal = __esm({
7588
8639
  /* @__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: [
7589
8640
  /* @__PURE__ */ jsx23(XCircle, { className: "w-12 h-12 mb-2" }),
7590
8641
  /* @__PURE__ */ jsx23("p", { className: "text-center text-sm", children: error })
7591
- ] }) : transactions.length === 0 ? /* @__PURE__ */ jsxs15("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
8642
+ ] }) : historyGroups.length === 0 ? /* @__PURE__ */ jsxs15("div", { className: `flex flex-col items-center justify-center py-8 ${theme.mutedText}`, children: [
7592
8643
  /* @__PURE__ */ jsx23(Activity, { className: `w-12 h-12 mb-2 ${isDark ? "text-gray-600" : "text-gray-300"}` }),
7593
8644
  /* @__PURE__ */ jsxs15("p", { className: "text-center", children: [
7594
8645
  "No transactions found",
7595
8646
  /* @__PURE__ */ jsx23("br", {}),
7596
8647
  /* @__PURE__ */ jsx23("span", { className: "text-xs mt-2", children: "Smart account transactions will appear here" })
7597
8648
  ] })
7598
- ] }) : /* @__PURE__ */ jsx23("div", { className: "space-y-3", children: transactions.map((tx) => {
7599
- const isIncoming = tx.to.hash.toLowerCase() === address?.toLowerCase();
7600
- const displayAddress = isIncoming ? tx.from.hash : tx.to.hash;
8649
+ ] }) : /* @__PURE__ */ jsx23("div", { className: "space-y-3", children: historyGroups.map((group) => {
8650
+ const { parent } = group;
8651
+ const isIncoming = parent.direction === "in";
8652
+ const expanded = expandedGroups[group.id] ?? false;
8653
+ const assetSymbol = parent.assetSymbol || "LUMIA";
8654
+ const assetDecimals = parent.decimals ?? 18;
8655
+ const internalsToRender = group.internals.filter((internal) => parseValue(internal.value) !== 0n);
7601
8656
  return /* @__PURE__ */ jsxs15(
7602
8657
  "div",
7603
8658
  {
7604
8659
  className: `${isDark ? "bg-gray-800 hover:bg-gray-700" : "bg-gray-50 hover:bg-gray-100"} rounded-xl p-4 transition-colors cursor-pointer`,
7605
- onClick: () => openInExplorer(tx.hash),
8660
+ onClick: () => openInExplorer(parent.parentHash),
7606
8661
  children: [
7607
8662
  /* @__PURE__ */ jsxs15("div", { className: "flex items-center justify-between mb-2", children: [
7608
8663
  /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
7609
- getTransactionIcon(tx.from.hash, tx.to.hash),
8664
+ getTransactionIcon(parent.direction),
7610
8665
  /* @__PURE__ */ jsx23("span", { className: `font-medium ${theme.titleText}`, children: isIncoming ? "Received" : "Sent" }),
7611
- getStatusIcon(tx.status)
8666
+ getStatusIcon(parent.status),
8667
+ parent.badgeLabel && /* @__PURE__ */ jsx23("span", { className: `text-[10px] uppercase tracking-wide ${isDark ? "bg-purple-900/40 text-purple-200" : "bg-purple-100 text-purple-700"} px-2 py-0.5 rounded-full`, children: parent.badgeLabel })
7612
8668
  ] }),
7613
- /* @__PURE__ */ jsx23("div", { className: `text-xs ${theme.mutedText}`, children: formatTime(tx.timestamp) })
8669
+ /* @__PURE__ */ jsx23("div", { className: `text-xs ${theme.mutedText}`, children: formatTimestamp(group.timestampMs) })
7614
8670
  ] }),
7615
8671
  /* @__PURE__ */ jsxs15("div", { className: "space-y-1 text-sm", children: [
7616
8672
  /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
7617
8673
  /* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: isIncoming ? "From:" : "To:" }),
7618
8674
  /* @__PURE__ */ jsxs15("span", { className: `font-mono ${theme.titleText}`, children: [
7619
- formatAddress(displayAddress),
7620
- (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)" })
8675
+ parent.counterpartyName || formatAddress(parent.counterparty),
8676
+ parent.counterpartyIsContract && /* @__PURE__ */ jsx23("span", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} ml-1`, children: "(Contract)" })
7621
8677
  ] })
7622
8678
  ] }),
7623
8679
  /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
7624
8680
  /* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: "Value:" }),
7625
8681
  /* @__PURE__ */ jsxs15("span", { className: `font-semibold ${theme.titleText}`, children: [
7626
- formatValue(tx.value),
7627
- " LUMIA"
8682
+ formatValue(parent.value, assetDecimals),
8683
+ " ",
8684
+ assetSymbol
7628
8685
  ] })
7629
8686
  ] }),
7630
8687
  /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
7631
8688
  /* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: "Block:" }),
7632
- /* @__PURE__ */ jsxs15("span", { className: `font-mono ${theme.titleText}`, children: [
7633
- "#",
7634
- tx.block_number
7635
- ] })
8689
+ /* @__PURE__ */ jsx23("span", { className: `font-mono ${theme.titleText}`, children: parent.blockNumber ? `#${parent.blockNumber}` : "-" })
7636
8690
  ] }),
7637
- tx.method && /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
8691
+ parent.method && /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
7638
8692
  /* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: "Method:" }),
7639
- /* @__PURE__ */ jsx23("span", { className: `${isDark ? "text-blue-400" : "text-blue-600"} text-xs`, children: tx.method })
7640
- ] }),
7641
- 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(
7642
- "span",
7643
- {
7644
- className: `text-xs ${isDark ? "bg-blue-900/30 text-blue-300" : "bg-blue-100 text-blue-800"} px-2 py-0.5 rounded-full`,
7645
- children: type.replace("_", " ")
7646
- },
7647
- idx
7648
- )) })
7649
- ] })
8693
+ /* @__PURE__ */ jsx23("span", { className: `${isDark ? "text-blue-400" : "text-blue-600"} text-xs`, children: parent.method })
8694
+ ] })
8695
+ ] }),
8696
+ internalsToRender.length > 0 && /* @__PURE__ */ jsxs15(
8697
+ "div",
8698
+ {
8699
+ className: `mt-4 rounded-lg ${isDark ? "bg-gray-900/60" : "bg-white/70"} border border-dashed ${isDark ? "border-gray-700" : "border-gray-200"}`,
8700
+ onClick: (event) => event.stopPropagation(),
8701
+ children: [
8702
+ /* @__PURE__ */ jsxs15(
8703
+ "button",
8704
+ {
8705
+ className: `w-full flex items-center justify-between px-3 py-2 text-xs ${theme.bodyText}`,
8706
+ onClick: () => toggleGroup(group.id),
8707
+ children: [
8708
+ /* @__PURE__ */ jsxs15("span", { children: [
8709
+ "View internal calls (",
8710
+ internalsToRender.length,
8711
+ ")"
8712
+ ] }),
8713
+ /* @__PURE__ */ jsx23("span", { children: expanded ? "Hide" : "Show" })
8714
+ ]
8715
+ }
8716
+ ),
8717
+ expanded && /* @__PURE__ */ jsx23("div", { className: "px-3 pb-3 space-y-2 text-xs", children: internalsToRender.map((internal) => {
8718
+ const internalSymbol = internal.assetSymbol || assetSymbol;
8719
+ const internalDecimals = internal.decimals ?? assetDecimals;
8720
+ return /* @__PURE__ */ jsxs15("div", { className: "border-t border-dashed border-current pt-2", children: [
8721
+ /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
8722
+ /* @__PURE__ */ jsx23("span", { className: `${theme.mutedText}`, children: internal.method || "CALL" }),
8723
+ /* @__PURE__ */ jsxs15("span", { className: `${theme.bodyText}`, children: [
8724
+ formatValue(internal.value, internalDecimals),
8725
+ " ",
8726
+ internalSymbol
8727
+ ] })
8728
+ ] }),
8729
+ /* @__PURE__ */ jsxs15("div", { className: "flex justify-between", children: [
8730
+ /* @__PURE__ */ jsx23("span", { className: `${theme.bodyText}`, children: internal.direction === "in" ? "From" : "To" }),
8731
+ /* @__PURE__ */ jsx23("span", { className: `font-mono ${theme.titleText}`, children: internal.counterpartyName || formatAddress(internal.counterparty) })
8732
+ ] })
8733
+ ] }, internal.id);
8734
+ }) })
8735
+ ]
8736
+ }
8737
+ )
7650
8738
  ]
7651
8739
  },
7652
- tx.hash
8740
+ group.id
7653
8741
  );
7654
- }) }) }),
7655
- 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: [
7656
- "Total: ",
7657
- transactions.length,
7658
- " transaction",
7659
- transactions.length !== 1 ? "s" : ""
7660
- ] }) })
8742
+ }) }) })
7661
8743
  ] }) });
7662
8744
  };
7663
8745
  }
@@ -7831,7 +8913,7 @@ var init_assets = __esm({
7831
8913
 
7832
8914
  // src/internal/components/ViewAssetsModal.tsx
7833
8915
  import React21 from "react";
7834
- import { Gem, RefreshCw as RefreshCw4, Copy, ExternalLink as ExternalLink2, ArrowLeft as ArrowLeft7 } from "lucide-react";
8916
+ import { Gem, RefreshCw as RefreshCw4, Copy, ExternalLink, ArrowLeft as ArrowLeft7 } from "lucide-react";
7835
8917
  import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
7836
8918
  var ViewAssetsModal;
7837
8919
  var init_ViewAssetsModal = __esm({
@@ -7926,7 +9008,7 @@ var init_ViewAssetsModal = __esm({
7926
9008
  onClick: () => openInExplorer(asset.address),
7927
9009
  className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
7928
9010
  title: "View in explorer",
7929
- children: /* @__PURE__ */ jsx24(ExternalLink2, { className: "w-3 h-3" })
9011
+ children: /* @__PURE__ */ jsx24(ExternalLink, { className: "w-3 h-3" })
7930
9012
  }
7931
9013
  )
7932
9014
  ] })
@@ -7955,7 +9037,7 @@ var init_ViewAssetsModal = __esm({
7955
9037
  onClick: () => openInExplorer(address),
7956
9038
  className: `${isDark ? "text-gray-500 hover:text-gray-300" : "text-gray-400 hover:text-gray-600"}`,
7957
9039
  title: "View in explorer",
7958
- children: /* @__PURE__ */ jsx24(ExternalLink2, { className: "w-3 h-3" })
9040
+ children: /* @__PURE__ */ jsx24(ExternalLink, { className: "w-3 h-3" })
7959
9041
  }
7960
9042
  )
7961
9043
  ] })
@@ -8037,414 +9119,21 @@ var init_useSendTransaction = __esm({
8037
9119
  }
8038
9120
  });
8039
9121
 
8040
- // src/internal/utils/cn.ts
8041
- import { clsx as clsx2 } from "clsx";
8042
- import { twMerge as twMerge2 } from "tailwind-merge";
8043
- function cn2(...inputs) {
8044
- return twMerge2(clsx2(inputs));
8045
- }
8046
- var init_cn = __esm({
8047
- "src/internal/utils/cn.ts"() {
8048
- }
8049
- });
8050
-
8051
- // src/internal/components/ui/badge.tsx
8052
- import { cva as cva2 } from "class-variance-authority";
8053
- import { jsx as jsx25 } from "react/jsx-runtime";
8054
- function Badge({ className, variant, ...props }) {
8055
- return /* @__PURE__ */ jsx25("div", { className: cn2(badgeVariants({ variant }), className), ...props });
8056
- }
8057
- var badgeVariants;
8058
- var init_badge = __esm({
8059
- "src/internal/components/ui/badge.tsx"() {
8060
- init_cn();
8061
- badgeVariants = cva2(
8062
- "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",
8063
- {
8064
- variants: {
8065
- variant: {
8066
- default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
8067
- secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
8068
- destructive: "border-transparent bg-red-600 text-white hover:bg-red-700 dark:bg-red-700 dark:hover:bg-red-600",
8069
- outline: "text-foreground",
8070
- success: "border-transparent bg-green-600 text-white hover:bg-green-700 dark:bg-green-700 dark:hover:bg-green-600",
8071
- warning: "border-transparent bg-yellow-500 text-white hover:bg-yellow-600 dark:bg-yellow-600 dark:hover:bg-yellow-500"
8072
- }
8073
- },
8074
- defaultVariants: {
8075
- variant: "default"
8076
- }
8077
- }
8078
- );
8079
- }
8080
- });
8081
-
8082
- // src/internal/components/Address.tsx
8083
- import * as React22 from "react";
8084
- import { Copy as Copy2, ExternalLink as ExternalLink3 } from "lucide-react";
8085
- import { jsx as jsx26, jsxs as jsxs17 } from "react/jsx-runtime";
8086
- function toExplorerAddressUrl(address, chain) {
8087
- const base2 = chain?.blockExplorers?.default?.url;
8088
- if (!base2) return null;
8089
- return `${base2.replace(/\/$/, "")}/address/${address}`;
8090
- }
8091
- function short(addr) {
8092
- if (addr.length <= 14) return addr;
8093
- return `${addr.slice(0, 10)}...${addr.slice(-8)}`;
8094
- }
8095
- var Address;
8096
- var init_Address = __esm({
8097
- "src/internal/components/Address.tsx"() {
8098
- init_button();
8099
- init_cn();
8100
- Address = ({
8101
- address,
8102
- chain,
8103
- className,
8104
- truncate = true,
8105
- showCopy = true,
8106
- showExplorer = true,
8107
- label
8108
- }) => {
8109
- const addr = address || "";
8110
- const explorer = toExplorerAddressUrl(addr, chain || void 0);
8111
- const [copied, setCopied] = React22.useState(false);
8112
- if (!addr) return /* @__PURE__ */ jsx26("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
8113
- return /* @__PURE__ */ jsxs17("div", { className: cn2("flex items-center gap-2", className), style: { listStyle: "none" }, children: [
8114
- label && /* @__PURE__ */ jsx26("span", { className: "text-sm font-medium", children: label }),
8115
- /* @__PURE__ */ jsx26("code", { className: "text-xs bg-background px-2 py-1 rounded select-all", children: truncate ? short(addr) : addr }),
8116
- showCopy && /* @__PURE__ */ jsx26(
8117
- Button,
8118
- {
8119
- variant: "ghost",
8120
- size: "sm",
8121
- title: copied ? "Copied" : "Copy address",
8122
- onClick: async () => {
8123
- try {
8124
- await navigator.clipboard.writeText(addr);
8125
- setCopied(true);
8126
- setTimeout(() => setCopied(false), 1200);
8127
- } catch {
8128
- }
8129
- },
8130
- children: /* @__PURE__ */ jsx26(Copy2, { className: "h-4 w-4" })
8131
- }
8132
- ),
8133
- showExplorer && explorer && /* @__PURE__ */ jsx26(
8134
- "a",
8135
- {
8136
- href: explorer,
8137
- target: "_blank",
8138
- rel: "noreferrer noopener",
8139
- className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
8140
- title: "Open in explorer",
8141
- children: /* @__PURE__ */ jsx26(ExternalLink3, { className: "h-4 w-4" })
8142
- }
8143
- )
8144
- ] });
8145
- };
8146
- }
8147
- });
8148
-
8149
- // src/internal/components/UserOpStatus.tsx
8150
- import * as React23 from "react";
8151
- import { AlertCircle as AlertCircle3, CheckCircle2 as CheckCircle25, Clock as Clock3, Copy as Copy3, ExternalLink as ExternalLink4, RefreshCw as RefreshCw5 } from "lucide-react";
8152
- import { jsx as jsx27, jsxs as jsxs18 } from "react/jsx-runtime";
8153
- var UserOpStatus;
8154
- var init_UserOpStatus = __esm({
8155
- "src/internal/components/UserOpStatus.tsx"() {
8156
- init_button();
8157
- init_badge();
8158
- init_Address();
8159
- init_cn();
8160
- init_base();
8161
- UserOpStatus = ({
8162
- userOpHash,
8163
- chain,
8164
- className,
8165
- pollMs = 1e3,
8166
- maxPollTimeMs = 6e4,
8167
- // Default 1 minute
8168
- externalState
8169
- }) => {
8170
- const useExternalState = !!externalState;
8171
- const [internalReceipt, setInternalReceipt] = React23.useState(null);
8172
- const [internalMempool, setInternalMempool] = React23.useState(null);
8173
- const [internalError, setInternalError] = React23.useState(null);
8174
- const [attempt, setAttempt] = React23.useState(0);
8175
- const [internalRefreshing, setInternalRefreshing] = React23.useState(false);
8176
- const [timedOut, setTimedOut] = React23.useState(false);
8177
- const [rejected, setRejected] = React23.useState(false);
8178
- const intervalRef = React23.useRef(null);
8179
- const startTimeRef = React23.useRef(Date.now());
8180
- const receipt = useExternalState ? externalState.receipt ?? null : internalReceipt;
8181
- const mempool = useExternalState ? externalState.mempool ?? null : internalMempool;
8182
- const error = useExternalState ? externalState.error ?? null : internalError;
8183
- const refreshing = useExternalState ? externalState.isPolling ?? false : internalRefreshing;
8184
- const rpc = React23.useCallback(async (method, params) => {
8185
- const body = { jsonrpc: "2.0", id: 1, method, params };
8186
- const res = await fetch(getBundlerUrl(), {
8187
- method: "POST",
8188
- headers: { "content-type": "application/json" },
8189
- body: JSON.stringify(body)
8190
- });
8191
- const json = await res.json();
8192
- if (json.error) throw new Error(json.error.message || JSON.stringify(json.error));
8193
- return json.result;
8194
- }, []);
8195
- const extractMempoolInfo = React23.useCallback((m) => {
8196
- if (!m) return null;
8197
- const entryPoint = m.entryPoint || m?.userOperation?.entryPoint || null;
8198
- const sender = m.sender || m?.userOperation?.sender || null;
8199
- if (!entryPoint && !sender) return null;
8200
- return { entryPoint, sender };
8201
- }, []);
8202
- const tick = React23.useCallback(async () => {
8203
- if (useExternalState) return;
8204
- const elapsed = Date.now() - startTimeRef.current;
8205
- if (elapsed > maxPollTimeMs) {
8206
- setTimedOut(true);
8207
- setInternalMempool(null);
8208
- if (intervalRef.current) {
8209
- clearInterval(intervalRef.current);
8210
- intervalRef.current = null;
8211
- }
8212
- return;
8213
- }
8214
- try {
8215
- setInternalRefreshing(true);
8216
- setInternalError(null);
8217
- const r = await rpc("eth_getUserOperationReceipt", [userOpHash]);
8218
- if (r) {
8219
- setInternalReceipt(r);
8220
- setInternalMempool(null);
8221
- if (intervalRef.current) {
8222
- clearInterval(intervalRef.current);
8223
- intervalRef.current = null;
8224
- }
8225
- return;
8226
- }
8227
- const m = await rpc("eth_getUserOperationByHash", [userOpHash]);
8228
- if (m === null) {
8229
- setRejected(true);
8230
- setInternalMempool(null);
8231
- if (intervalRef.current) {
8232
- clearInterval(intervalRef.current);
8233
- intervalRef.current = null;
8234
- }
8235
- return;
8236
- }
8237
- const info = extractMempoolInfo(m);
8238
- setInternalMempool(info);
8239
- } catch (e) {
8240
- setInternalError(e?.message || String(e));
8241
- } finally {
8242
- setInternalRefreshing(false);
8243
- setAttempt((x) => x + 1);
8244
- }
8245
- }, [rpc, userOpHash, maxPollTimeMs, extractMempoolInfo, useExternalState]);
8246
- React23.useEffect(() => {
8247
- if (useExternalState) return;
8248
- console.log("[UserOpStatus] Initializing polling for UserOp hash:", userOpHash);
8249
- startTimeRef.current = Date.now();
8250
- setTimedOut(false);
8251
- setRejected(false);
8252
- setInternalReceipt(null);
8253
- setInternalMempool(null);
8254
- setInternalError(null);
8255
- setAttempt(0);
8256
- setInternalRefreshing(false);
8257
- }, [userOpHash, useExternalState]);
8258
- React23.useEffect(() => {
8259
- if (useExternalState) {
8260
- console.log("[UserOpStatus] Using external state, skipping internal polling");
8261
- return;
8262
- }
8263
- if (receipt) {
8264
- console.log("[UserOpStatus] Already have receipt, not starting polling");
8265
- return;
8266
- }
8267
- let mounted = true;
8268
- const startPolling = async () => {
8269
- if (mounted) {
8270
- console.log("[UserOpStatus] Starting polling for hash:", userOpHash, "pollMs:", pollMs);
8271
- await tick();
8272
- if (mounted && !receipt) {
8273
- console.log("[UserOpStatus] Starting interval polling every", pollMs, "ms");
8274
- intervalRef.current = setInterval(() => {
8275
- if (mounted) tick();
8276
- }, pollMs);
8277
- }
8278
- }
8279
- };
8280
- startPolling();
8281
- return () => {
8282
- mounted = false;
8283
- if (intervalRef.current) {
8284
- console.log("[UserOpStatus] Clearing interval in cleanup");
8285
- clearInterval(intervalRef.current);
8286
- intervalRef.current = null;
8287
- }
8288
- };
8289
- }, [userOpHash, pollMs, useExternalState]);
8290
- const stateBadge = () => {
8291
- if (receipt) {
8292
- const ok = !!receipt.success;
8293
- return /* @__PURE__ */ jsxs18(Badge, { variant: ok ? "success" : "destructive", className: "gap-1", children: [
8294
- ok ? /* @__PURE__ */ jsx27(CheckCircle25, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-3 w-3" }),
8295
- ok ? "Included" : "Failed"
8296
- ] });
8297
- }
8298
- if (rejected) {
8299
- return /* @__PURE__ */ jsxs18(Badge, { variant: "destructive", className: "gap-1", children: [
8300
- /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-3 w-3" }),
8301
- " Rejected by bundler"
8302
- ] });
8303
- }
8304
- if (timedOut) {
8305
- return /* @__PURE__ */ jsxs18(Badge, { variant: "warning", className: "gap-1", children: [
8306
- /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-3 w-3" }),
8307
- " Timeout - may be rejected"
8308
- ] });
8309
- }
8310
- if (mempool) {
8311
- return /* @__PURE__ */ jsxs18(Badge, { variant: "outline", className: "gap-1", children: [
8312
- /* @__PURE__ */ jsx27(Clock3, { className: "h-3 w-3" }),
8313
- " Pending in bundler"
8314
- ] });
8315
- }
8316
- return /* @__PURE__ */ jsxs18(Badge, { variant: "secondary", className: "gap-1", children: [
8317
- /* @__PURE__ */ jsx27(Clock3, { className: "h-3 w-3" }),
8318
- " Waiting"
8319
- ] });
8320
- };
8321
- return /* @__PURE__ */ jsxs18(
8322
- "div",
8323
- {
8324
- className: cn2("lumia-scope bg-card text-card-foreground p-0 rounded-xl border border-border w-full max-w-[680px]", className),
8325
- style: { textAlign: "left", listStyle: "none" },
8326
- children: [
8327
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center justify-between mb-3", children: [
8328
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2", children: [
8329
- stateBadge(),
8330
- /* @__PURE__ */ jsx27("span", { className: "text-xs text-muted-foreground", children: "This is a UserOperation hash (EIP-4337), not a L2 tx hash." })
8331
- ] }),
8332
- /* @__PURE__ */ jsxs18(Button, { variant: "ghost", size: "sm", onClick: () => tick(), disabled: refreshing, className: "h-8", children: [
8333
- /* @__PURE__ */ jsx27(RefreshCw5, { className: cn2("h-3.5 w-3.5 mr-1", refreshing && "animate-spin") }),
8334
- /* @__PURE__ */ jsx27("span", { className: "text-xs", children: "Refresh" })
8335
- ] })
8336
- ] }),
8337
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2 mb-2", children: [
8338
- /* @__PURE__ */ jsx27("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "UO Hash" }),
8339
- /* @__PURE__ */ jsx27("code", { className: "text-xs font-mono flex-1 select-all", children: userOpHash }),
8340
- /* @__PURE__ */ jsx27(
8341
- Button,
8342
- {
8343
- variant: "ghost",
8344
- size: "sm",
8345
- className: "h-8 w-8 p-0",
8346
- onClick: async () => {
8347
- try {
8348
- await navigator.clipboard.writeText(userOpHash);
8349
- } catch {
8350
- }
8351
- },
8352
- children: /* @__PURE__ */ jsx27(Copy3, { className: "h-3.5 w-3.5" })
8353
- }
8354
- )
8355
- ] }),
8356
- receipt && receipt.receipt?.transactionHash && /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2 mb-3", children: [
8357
- /* @__PURE__ */ jsx27("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "Tx Hash" }),
8358
- /* @__PURE__ */ jsx27("code", { className: "text-xs font-mono flex-1 select-all", children: receipt.receipt.transactionHash }),
8359
- /* @__PURE__ */ jsx27(
8360
- Button,
8361
- {
8362
- variant: "ghost",
8363
- size: "sm",
8364
- className: "h-8 w-8 p-0",
8365
- onClick: async () => {
8366
- try {
8367
- await navigator.clipboard.writeText(receipt.receipt.transactionHash);
8368
- } catch {
8369
- }
8370
- },
8371
- children: /* @__PURE__ */ jsx27(Copy3, { className: "h-3.5 w-3.5" })
8372
- }
8373
- ),
8374
- chain?.blockExplorers?.default?.url && /* @__PURE__ */ jsx27(
8375
- "a",
8376
- {
8377
- href: `${chain.blockExplorers.default.url}/tx/${receipt.receipt.transactionHash}`,
8378
- target: "_blank",
8379
- rel: "noreferrer noopener",
8380
- className: "inline-flex items-center justify-center h-8 w-8 rounded-md hover:bg-accent text-foreground",
8381
- title: "Open in explorer",
8382
- children: /* @__PURE__ */ jsx27(ExternalLink4, { className: "h-3.5 w-3.5" })
8383
- }
8384
- )
8385
- ] }),
8386
- receipt && /* @__PURE__ */ jsxs18("div", { className: "text-xs text-muted-foreground mb-3", children: [
8387
- "Block ",
8388
- parseInt(receipt.receipt?.blockNumber || "0x0", 16),
8389
- " \u2022 Gas Used",
8390
- " ",
8391
- parseInt(receipt.actualGasUsed || "0x0", 16),
8392
- " \u2022 Success ",
8393
- String(!!receipt.success)
8394
- ] }),
8395
- /* @__PURE__ */ jsx27("div", { className: "text-xs text-muted-foreground", children: !receipt && !timedOut && !rejected && /* @__PURE__ */ jsxs18("span", { className: "ml-2", children: [
8396
- "\u2022 Polling for ",
8397
- Math.round((Date.now() - startTimeRef.current) / 1e3),
8398
- "s"
8399
- ] }) }),
8400
- mempool && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-muted-foreground mt-2", style: { listStyle: "none" }, children: [
8401
- /* @__PURE__ */ jsxs18("div", { children: [
8402
- "Seen by bundler at ",
8403
- /* @__PURE__ */ jsx27(Address, { address: mempool.entryPoint, chain, showExplorer: true, truncate: false })
8404
- ] }),
8405
- /* @__PURE__ */ jsxs18("div", { children: [
8406
- "sender ",
8407
- /* @__PURE__ */ jsx27(Address, { address: mempool.sender, chain, truncate: false })
8408
- ] })
8409
- ] }),
8410
- error && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
8411
- /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-4 w-4" }),
8412
- " ",
8413
- error
8414
- ] }),
8415
- rejected && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
8416
- /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-4 w-4" }),
8417
- "UserOperation was dropped from bundler mempool. This usually means it was invalid or replaced."
8418
- ] }),
8419
- timedOut && /* @__PURE__ */ jsxs18("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
8420
- /* @__PURE__ */ jsx27(AlertCircle3, { className: "h-4 w-4" }),
8421
- "Stopped polling after ",
8422
- Math.round(maxPollTimeMs / 1e3),
8423
- "s. UserOperation may have been rejected by the bundler."
8424
- ] })
8425
- ]
8426
- }
8427
- );
8428
- };
8429
- }
8430
- });
8431
-
8432
- // src/internal/components/SendModal.tsx
8433
- import { useState as useState12, useEffect as useEffect9 } from "react";
8434
- import { Send, ArrowLeft as ArrowLeft8, Loader2, CheckCircle2 as CheckCircle26, AlertCircle as AlertCircle4 } from "lucide-react";
8435
- import { isAddress as isAddress2 } from "viem";
8436
- import { useBalance as useBalance2 } from "wagmi";
8437
- import { jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
8438
- var SendModal;
8439
- var init_SendModal = __esm({
8440
- "src/internal/components/SendModal.tsx"() {
8441
- init_dialog();
8442
- init_visually_hidden();
9122
+ // src/internal/components/SendModal.tsx
9123
+ import { useState as useState10, useEffect as useEffect8 } from "react";
9124
+ import { Send, ArrowLeft as ArrowLeft8, Loader2, CheckCircle2 as CheckCircle25, AlertCircle as AlertCircle3 } from "lucide-react";
9125
+ import { isAddress as isAddress2 } from "viem";
9126
+ import { useBalance as useBalance2 } from "wagmi";
9127
+ import { jsx as jsx25, jsxs as jsxs17 } from "react/jsx-runtime";
9128
+ var SendModal;
9129
+ var init_SendModal = __esm({
9130
+ "src/internal/components/SendModal.tsx"() {
9131
+ init_dialog();
9132
+ init_visually_hidden();
8443
9133
  init_button();
8444
9134
  init_useSendTransaction();
8445
9135
  init_LumiaPassportSessionContext();
8446
9136
  init_assets();
8447
- init_UserOpStatus();
8448
9137
  init_base();
8449
9138
  init_LumiaPassportContext();
8450
9139
  init_useTheme();
@@ -8452,6 +9141,7 @@ var init_SendModal = __esm({
8452
9141
  open,
8453
9142
  onOpenChange,
8454
9143
  onBack,
9144
+ onSuccess,
8455
9145
  recipientAddress: initialRecipient = "",
8456
9146
  amount: initialAmount = ""
8457
9147
  }) => {
@@ -8464,13 +9154,13 @@ var init_SendModal = __esm({
8464
9154
  address,
8465
9155
  chainId: lumiaBeam.id
8466
9156
  });
8467
- const [recipient, setRecipient] = useState12(initialRecipient);
8468
- const [amount, setAmount] = useState12(initialAmount);
8469
- const [txStep, setTxStep] = useState12("input");
8470
- const [validationError, setValidationError] = useState12(null);
9157
+ const [recipient, setRecipient] = useState10(initialRecipient);
9158
+ const [amount, setAmount] = useState10(initialAmount);
9159
+ const [txStep, setTxStep] = useState10("input");
9160
+ const [validationError, setValidationError] = useState10(null);
8471
9161
  const nativeAsset = assets.find((a) => a.type === "native");
8472
9162
  const balance = nativeAsset ? parseFloat(nativeAsset.formattedBalance) : 0;
8473
- useEffect9(() => {
9163
+ useEffect8(() => {
8474
9164
  if (open) {
8475
9165
  setTxStep("input");
8476
9166
  setValidationError(null);
@@ -8526,11 +9216,22 @@ var init_SendModal = __esm({
8526
9216
  const handleClose = () => {
8527
9217
  onOpenChange(false);
8528
9218
  };
9219
+ const handleDone = () => {
9220
+ console.log("[SendModal] handleDone called, onSuccess exists:", !!onSuccess);
9221
+ if (onSuccess) {
9222
+ console.log("[SendModal] Calling onSuccess to open Transaction History");
9223
+ onSuccess();
9224
+ }
9225
+ setTimeout(() => {
9226
+ console.log("[SendModal] Closing SendModal");
9227
+ onOpenChange(false);
9228
+ }, 50);
9229
+ };
8529
9230
  const handleMaxAmount = () => {
8530
9231
  const maxAmount = Math.max(0, balance - 1e-3);
8531
9232
  setAmount(maxAmount.toFixed(6));
8532
9233
  };
8533
- return /* @__PURE__ */ jsx28(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs19(
9234
+ return /* @__PURE__ */ jsx25(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs17(
8534
9235
  DialogContent,
8535
9236
  {
8536
9237
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -8542,28 +9243,28 @@ var init_SendModal = __esm({
8542
9243
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
8543
9244
  },
8544
9245
  children: [
8545
- /* @__PURE__ */ jsx28(VisuallyHidden, { children: /* @__PURE__ */ jsx28(DialogTitle, { children: "Send Transaction" }) }),
8546
- /* @__PURE__ */ jsx28(DialogDescription, { className: "sr-only", children: "Send LUMIA tokens to another address" }),
8547
- /* @__PURE__ */ jsx28("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2", children: [
8548
- onBack && txStep === "input" && /* @__PURE__ */ jsx28(
9246
+ /* @__PURE__ */ jsx25(VisuallyHidden, { children: /* @__PURE__ */ jsx25(DialogTitle, { children: "Send Transaction" }) }),
9247
+ /* @__PURE__ */ jsx25(DialogDescription, { className: "sr-only", children: "Send LUMIA tokens to another address" }),
9248
+ /* @__PURE__ */ jsx25("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-2", children: [
9249
+ onBack && txStep === "input" && /* @__PURE__ */ jsx25(
8549
9250
  "button",
8550
9251
  {
8551
9252
  onClick: onBack,
8552
9253
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
8553
9254
  title: "Back",
8554
- children: /* @__PURE__ */ jsx28(ArrowLeft8, { className: "h-4 w-4" })
9255
+ children: /* @__PURE__ */ jsx25(ArrowLeft8, { className: "h-4 w-4" })
8555
9256
  }
8556
9257
  ),
8557
- /* @__PURE__ */ jsxs19("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8558
- /* @__PURE__ */ jsx28(Send, { className: "h-5 w-5" }),
8559
- /* @__PURE__ */ jsx28("span", { children: "Send LUMIA" })
9258
+ /* @__PURE__ */ jsxs17("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
9259
+ /* @__PURE__ */ jsx25(Send, { className: "h-5 w-5" }),
9260
+ /* @__PURE__ */ jsx25("span", { children: "Send LUMIA" })
8560
9261
  ] })
8561
9262
  ] }) }),
8562
- /* @__PURE__ */ jsxs19("div", { className: "p-5", children: [
8563
- txStep === "input" && /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
8564
- /* @__PURE__ */ jsxs19("div", { children: [
8565
- /* @__PURE__ */ jsx28("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Recipient Address" }),
8566
- /* @__PURE__ */ jsx28(
9263
+ /* @__PURE__ */ jsxs17("div", { className: "p-5", children: [
9264
+ txStep === "input" && /* @__PURE__ */ jsxs17("div", { className: "space-y-4", children: [
9265
+ /* @__PURE__ */ jsxs17("div", { children: [
9266
+ /* @__PURE__ */ jsx25("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Recipient Address" }),
9267
+ /* @__PURE__ */ jsx25(
8567
9268
  "input",
8568
9269
  {
8569
9270
  type: "text",
@@ -8574,17 +9275,17 @@ var init_SendModal = __esm({
8574
9275
  }
8575
9276
  )
8576
9277
  ] }),
8577
- /* @__PURE__ */ jsxs19("div", { children: [
8578
- /* @__PURE__ */ jsxs19("div", { className: "flex justify-between items-center mb-2", children: [
8579
- /* @__PURE__ */ jsx28("label", { className: `text-sm font-medium ${theme.bodyText}`, children: "Amount" }),
8580
- /* @__PURE__ */ jsxs19("div", { className: `text-sm ${theme.mutedText}`, children: [
9278
+ /* @__PURE__ */ jsxs17("div", { children: [
9279
+ /* @__PURE__ */ jsxs17("div", { className: "flex justify-between items-center mb-2", children: [
9280
+ /* @__PURE__ */ jsx25("label", { className: `text-sm font-medium ${theme.bodyText}`, children: "Amount" }),
9281
+ /* @__PURE__ */ jsxs17("div", { className: `text-sm ${theme.mutedText}`, children: [
8581
9282
  "Balance: ",
8582
9283
  balance.toFixed(4),
8583
9284
  " LUMIA"
8584
9285
  ] })
8585
9286
  ] }),
8586
- /* @__PURE__ */ jsxs19("div", { className: "relative", children: [
8587
- /* @__PURE__ */ jsx28(
9287
+ /* @__PURE__ */ jsxs17("div", { className: "relative", children: [
9288
+ /* @__PURE__ */ jsx25(
8588
9289
  "input",
8589
9290
  {
8590
9291
  type: "number",
@@ -8595,7 +9296,7 @@ var init_SendModal = __esm({
8595
9296
  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`
8596
9297
  }
8597
9298
  ),
8598
- /* @__PURE__ */ jsx28(
9299
+ /* @__PURE__ */ jsx25(
8599
9300
  "button",
8600
9301
  {
8601
9302
  onClick: handleMaxAmount,
@@ -8605,11 +9306,11 @@ var init_SendModal = __esm({
8605
9306
  )
8606
9307
  ] })
8607
9308
  ] }),
8608
- (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: [
8609
- /* @__PURE__ */ jsx28(AlertCircle4, { className: "h-4 w-4" }),
8610
- /* @__PURE__ */ jsx28("span", { className: "text-sm", children: validationError || error })
9309
+ (validationError || error) && /* @__PURE__ */ jsxs17("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: [
9310
+ /* @__PURE__ */ jsx25(AlertCircle3, { className: "h-4 w-4" }),
9311
+ /* @__PURE__ */ jsx25("span", { className: "text-sm", children: validationError || error })
8611
9312
  ] }),
8612
- /* @__PURE__ */ jsx28(
9313
+ /* @__PURE__ */ jsx25(
8613
9314
  Button,
8614
9315
  {
8615
9316
  onClick: handleSend,
@@ -8620,29 +9321,29 @@ var init_SendModal = __esm({
8620
9321
  }
8621
9322
  )
8622
9323
  ] }),
8623
- txStep === "confirm" && /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
8624
- /* @__PURE__ */ jsxs19("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
8625
- /* @__PURE__ */ jsx28("h3", { className: `font-medium ${theme.titleText} mb-3`, children: "Transaction Details" }),
8626
- /* @__PURE__ */ jsxs19("div", { className: "space-y-2 text-sm", children: [
8627
- /* @__PURE__ */ jsxs19("div", { className: "flex justify-between", children: [
8628
- /* @__PURE__ */ jsx28("span", { className: `${theme.bodyText}`, children: "To:" }),
8629
- /* @__PURE__ */ jsx28("span", { className: `font-mono ${theme.titleText}`, children: `${recipient.slice(0, 6)}...${recipient.slice(-4)}` })
9324
+ txStep === "confirm" && /* @__PURE__ */ jsxs17("div", { className: "space-y-4", children: [
9325
+ /* @__PURE__ */ jsxs17("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
9326
+ /* @__PURE__ */ jsx25("h3", { className: `font-medium ${theme.titleText} mb-3`, children: "Transaction Details" }),
9327
+ /* @__PURE__ */ jsxs17("div", { className: "space-y-2 text-sm", children: [
9328
+ /* @__PURE__ */ jsxs17("div", { className: "flex justify-between", children: [
9329
+ /* @__PURE__ */ jsx25("span", { className: `${theme.bodyText}`, children: "To:" }),
9330
+ /* @__PURE__ */ jsx25("span", { className: `font-mono ${theme.titleText}`, children: `${recipient.slice(0, 6)}...${recipient.slice(-4)}` })
8630
9331
  ] }),
8631
- /* @__PURE__ */ jsxs19("div", { className: "flex justify-between", children: [
8632
- /* @__PURE__ */ jsx28("span", { className: `${theme.bodyText}`, children: "Amount:" }),
8633
- /* @__PURE__ */ jsxs19("span", { className: `font-semibold ${theme.titleText}`, children: [
9332
+ /* @__PURE__ */ jsxs17("div", { className: "flex justify-between", children: [
9333
+ /* @__PURE__ */ jsx25("span", { className: `${theme.bodyText}`, children: "Amount:" }),
9334
+ /* @__PURE__ */ jsxs17("span", { className: `font-semibold ${theme.titleText}`, children: [
8634
9335
  amount,
8635
9336
  " LUMIA"
8636
9337
  ] })
8637
9338
  ] }),
8638
- /* @__PURE__ */ jsxs19("div", { className: "flex justify-between", children: [
8639
- /* @__PURE__ */ jsx28("span", { className: `${theme.bodyText}`, children: "Network:" }),
8640
- /* @__PURE__ */ jsx28("span", { className: `${theme.titleText}`, children: "Lumia Beam" })
9339
+ /* @__PURE__ */ jsxs17("div", { className: "flex justify-between", children: [
9340
+ /* @__PURE__ */ jsx25("span", { className: `${theme.bodyText}`, children: "Network:" }),
9341
+ /* @__PURE__ */ jsx25("span", { className: `${theme.titleText}`, children: "Lumia Beam" })
8641
9342
  ] })
8642
9343
  ] })
8643
9344
  ] }),
8644
- /* @__PURE__ */ jsxs19("div", { className: "flex gap-2", children: [
8645
- /* @__PURE__ */ jsx28(
9345
+ /* @__PURE__ */ jsxs17("div", { className: "flex gap-2", children: [
9346
+ /* @__PURE__ */ jsx25(
8646
9347
  Button,
8647
9348
  {
8648
9349
  onClick: () => setTxStep("input"),
@@ -8652,7 +9353,7 @@ var init_SendModal = __esm({
8652
9353
  children: "Back"
8653
9354
  }
8654
9355
  ),
8655
- /* @__PURE__ */ jsxs19(
9356
+ /* @__PURE__ */ jsxs17(
8656
9357
  Button,
8657
9358
  {
8658
9359
  onClick: handleConfirm,
@@ -8660,31 +9361,30 @@ var init_SendModal = __esm({
8660
9361
  className: "flex-1",
8661
9362
  size: "lg",
8662
9363
  children: [
8663
- isLoading && /* @__PURE__ */ jsx28(Loader2, { className: "h-4 w-4 animate-spin" }),
9364
+ isLoading && /* @__PURE__ */ jsx25(Loader2, { className: "h-4 w-4 animate-spin" }),
8664
9365
  "Confirm"
8665
9366
  ]
8666
9367
  }
8667
9368
  )
8668
9369
  ] })
8669
9370
  ] }),
8670
- txStep === "pending" && /* @__PURE__ */ jsxs19("div", { className: "py-8 text-center space-y-4", children: [
8671
- /* @__PURE__ */ jsx28(Loader2, { className: `h-12 w-12 animate-spin ${isDark ? "text-blue-400" : "text-blue-600"} mx-auto` }),
8672
- /* @__PURE__ */ jsxs19("div", { children: [
8673
- /* @__PURE__ */ jsx28("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Pending" }),
8674
- /* @__PURE__ */ jsx28("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Please wait while we process your transaction" })
9371
+ txStep === "pending" && /* @__PURE__ */ jsxs17("div", { className: "py-8 text-center space-y-4", children: [
9372
+ /* @__PURE__ */ jsx25(Loader2, { className: `h-12 w-12 animate-spin ${isDark ? "text-blue-400" : "text-blue-600"} mx-auto` }),
9373
+ /* @__PURE__ */ jsxs17("div", { children: [
9374
+ /* @__PURE__ */ jsx25("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Pending" }),
9375
+ /* @__PURE__ */ jsx25("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Please wait while we process your transaction" })
8675
9376
  ] })
8676
9377
  ] }),
8677
- txStep === "success" && userOpHash && /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
8678
- /* @__PURE__ */ jsxs19("div", { className: "text-center py-4", children: [
8679
- /* @__PURE__ */ jsx28(CheckCircle26, { className: `h-12 w-12 ${isDark ? "text-green-400" : "text-green-500"} mx-auto mb-3` }),
8680
- /* @__PURE__ */ jsx28("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Sent!" }),
8681
- /* @__PURE__ */ jsx28("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Your transaction is being processed" })
9378
+ txStep === "success" && userOpHash && /* @__PURE__ */ jsxs17("div", { className: "space-y-6", children: [
9379
+ /* @__PURE__ */ jsxs17("div", { className: "text-center py-4", children: [
9380
+ /* @__PURE__ */ jsx25(CheckCircle25, { className: `h-12 w-12 ${isDark ? "text-green-400" : "text-green-500"} mx-auto mb-3` }),
9381
+ /* @__PURE__ */ jsx25("p", { className: `font-medium ${theme.titleText}`, children: "Transaction Sent!" }),
9382
+ /* @__PURE__ */ jsx25("p", { className: `text-sm ${theme.mutedText} mt-1`, children: "Your transaction is being processed" })
8682
9383
  ] }),
8683
- /* @__PURE__ */ jsx28("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: /* @__PURE__ */ jsx28(UserOpStatus, { userOpHash, chain: lumiaBeam }) }),
8684
- /* @__PURE__ */ jsx28(
9384
+ /* @__PURE__ */ jsx25(
8685
9385
  Button,
8686
9386
  {
8687
- onClick: handleClose,
9387
+ onClick: handleDone,
8688
9388
  className: "w-full",
8689
9389
  size: "lg",
8690
9390
  children: "Done"
@@ -8700,10 +9400,10 @@ var init_SendModal = __esm({
8700
9400
  });
8701
9401
 
8702
9402
  // src/internal/components/ReceiveModal.tsx
8703
- import { useState as useState13, useEffect as useEffect10 } from "react";
8704
- import { QrCode, Copy as Copy4, ArrowLeft as ArrowLeft9, CheckCircle2 as CheckCircle27 } from "lucide-react";
9403
+ import { useState as useState11, useEffect as useEffect9 } from "react";
9404
+ import { QrCode, Copy as Copy2, ArrowLeft as ArrowLeft9, CheckCircle2 as CheckCircle26 } from "lucide-react";
8705
9405
  import QRCode from "qrcode";
8706
- import { Fragment as Fragment5, jsx as jsx29, jsxs as jsxs20 } from "react/jsx-runtime";
9406
+ import { Fragment as Fragment5, jsx as jsx26, jsxs as jsxs18 } from "react/jsx-runtime";
8707
9407
  var ReceiveModal;
8708
9408
  var init_ReceiveModal = __esm({
8709
9409
  "src/internal/components/ReceiveModal.tsx"() {
@@ -8719,11 +9419,11 @@ var init_ReceiveModal = __esm({
8719
9419
  onBack
8720
9420
  }) => {
8721
9421
  const { address } = useLumiaPassportSession();
8722
- const [qrCodeUrl, setQrCodeUrl] = useState13("");
9422
+ const [qrCodeUrl, setQrCodeUrl] = useState11("");
8723
9423
  const { config } = useLumiaPassportConfig();
8724
9424
  const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
8725
- const [copied, setCopied] = useState13(false);
8726
- useEffect10(() => {
9425
+ const [copied, setCopied] = useState11(false);
9426
+ useEffect9(() => {
8727
9427
  if (open && address) {
8728
9428
  QRCode.toDataURL(address, {
8729
9429
  width: 200,
@@ -8753,7 +9453,7 @@ var init_ReceiveModal = __esm({
8753
9453
  if (!addr) return "";
8754
9454
  return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
8755
9455
  };
8756
- return /* @__PURE__ */ jsx29(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs20(
9456
+ return /* @__PURE__ */ jsx26(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs18(
8757
9457
  DialogContent,
8758
9458
  {
8759
9459
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden max-h-[80vh] gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -8765,51 +9465,51 @@ var init_ReceiveModal = __esm({
8765
9465
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
8766
9466
  },
8767
9467
  children: [
8768
- /* @__PURE__ */ jsx29(VisuallyHidden, { children: /* @__PURE__ */ jsx29(DialogTitle, { children: "Receive LUMIA" }) }),
8769
- /* @__PURE__ */ jsx29(DialogDescription, { className: "sr-only", children: "Your wallet address and QR code for receiving LUMIA" }),
8770
- /* @__PURE__ */ jsx29("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
8771
- onBack && /* @__PURE__ */ jsx29(
9468
+ /* @__PURE__ */ jsx26(VisuallyHidden, { children: /* @__PURE__ */ jsx26(DialogTitle, { children: "Receive LUMIA" }) }),
9469
+ /* @__PURE__ */ jsx26(DialogDescription, { className: "sr-only", children: "Your wallet address and QR code for receiving LUMIA" }),
9470
+ /* @__PURE__ */ jsx26("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2", children: [
9471
+ onBack && /* @__PURE__ */ jsx26(
8772
9472
  "button",
8773
9473
  {
8774
9474
  onClick: onBack,
8775
9475
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
8776
9476
  title: "Back",
8777
- children: /* @__PURE__ */ jsx29(ArrowLeft9, { className: "h-4 w-4" })
9477
+ children: /* @__PURE__ */ jsx26(ArrowLeft9, { className: "h-4 w-4" })
8778
9478
  }
8779
9479
  ),
8780
- /* @__PURE__ */ jsxs20("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8781
- /* @__PURE__ */ jsx29(QrCode, { className: "h-5 w-5" }),
8782
- /* @__PURE__ */ jsx29("span", { children: "Receive LUMIA" })
9480
+ /* @__PURE__ */ jsxs18("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
9481
+ /* @__PURE__ */ jsx26(QrCode, { className: "h-5 w-5" }),
9482
+ /* @__PURE__ */ jsx26("span", { children: "Receive LUMIA" })
8783
9483
  ] })
8784
9484
  ] }) }),
8785
- /* @__PURE__ */ jsxs20("div", { className: "p-5 space-y-4", children: [
8786
- 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" }) }) }),
8787
- /* @__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: [
8788
- /* @__PURE__ */ jsx29("p", { className: "font-medium", children: "Network: Lumia Beam" }),
8789
- /* @__PURE__ */ jsx29("p", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} mt-0.5`, children: "Ensure sender is on the same network" })
9485
+ /* @__PURE__ */ jsxs18("div", { className: "p-5 space-y-4", children: [
9486
+ qrCodeUrl && /* @__PURE__ */ jsx26("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx26("div", { className: `${isDark ? "bg-white" : "bg-white"} p-4 rounded-xl border ${theme.divider}`, children: /* @__PURE__ */ jsx26("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) }) }),
9487
+ /* @__PURE__ */ jsx26("div", { className: `${isDark ? "bg-blue-900/30 border-blue-600" : "bg-blue-50 border-blue-200"} rounded-lg p-3`, children: /* @__PURE__ */ jsx26("div", { className: `flex items-center gap-2 ${isDark ? "text-blue-300" : "text-blue-700"} text-sm`, children: /* @__PURE__ */ jsxs18("div", { className: "flex-1", children: [
9488
+ /* @__PURE__ */ jsx26("p", { className: "font-medium", children: "Network: Lumia Beam" }),
9489
+ /* @__PURE__ */ jsx26("p", { className: `text-xs ${isDark ? "text-blue-400" : "text-blue-600"} mt-0.5`, children: "Ensure sender is on the same network" })
8790
9490
  ] }) }) }),
8791
- /* @__PURE__ */ jsxs20("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
8792
- /* @__PURE__ */ jsx29("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Your Wallet Address" }),
8793
- /* @__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 }) }),
8794
- /* @__PURE__ */ jsx29(
9491
+ /* @__PURE__ */ jsxs18("div", { className: `${isDark ? "bg-gray-800" : "bg-gray-50"} rounded-lg p-4`, children: [
9492
+ /* @__PURE__ */ jsx26("label", { className: `block text-sm font-medium ${theme.bodyText} mb-2`, children: "Your Wallet Address" }),
9493
+ /* @__PURE__ */ jsx26("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsx26("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 }) }),
9494
+ /* @__PURE__ */ jsx26(
8795
9495
  Button,
8796
9496
  {
8797
9497
  onClick: handleCopy,
8798
9498
  className: "w-full mt-3",
8799
9499
  size: "lg",
8800
- children: copied ? /* @__PURE__ */ jsxs20(Fragment5, { children: [
8801
- /* @__PURE__ */ jsx29(CheckCircle27, { className: "h-4 w-4" }),
8802
- /* @__PURE__ */ jsx29("span", { children: "Copied!" })
8803
- ] }) : /* @__PURE__ */ jsxs20(Fragment5, { children: [
8804
- /* @__PURE__ */ jsx29(Copy4, { className: "h-4 w-4" }),
8805
- /* @__PURE__ */ jsx29("span", { children: "Copy Address" })
9500
+ children: copied ? /* @__PURE__ */ jsxs18(Fragment5, { children: [
9501
+ /* @__PURE__ */ jsx26(CheckCircle26, { className: "h-4 w-4" }),
9502
+ /* @__PURE__ */ jsx26("span", { children: "Copied!" })
9503
+ ] }) : /* @__PURE__ */ jsxs18(Fragment5, { children: [
9504
+ /* @__PURE__ */ jsx26(Copy2, { className: "h-4 w-4" }),
9505
+ /* @__PURE__ */ jsx26("span", { children: "Copy Address" })
8806
9506
  ] })
8807
9507
  }
8808
9508
  )
8809
9509
  ] }),
8810
- /* @__PURE__ */ jsxs20("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
8811
- /* @__PURE__ */ jsx29("p", { children: "Share this address to receive LUMIA tokens." }),
8812
- /* @__PURE__ */ jsx29("p", { className: "mt-1", children: "Only send LUMIA tokens to this address on Lumia Beam network." })
9510
+ /* @__PURE__ */ jsxs18("div", { className: `text-center text-sm ${theme.mutedText}`, children: [
9511
+ /* @__PURE__ */ jsx26("p", { children: "Share this address to receive LUMIA tokens." }),
9512
+ /* @__PURE__ */ jsx26("p", { className: "mt-1", children: "Only send LUMIA tokens to this address on Lumia Beam network." })
8813
9513
  ] })
8814
9514
  ] })
8815
9515
  ]
@@ -8821,7 +9521,7 @@ var init_ReceiveModal = __esm({
8821
9521
 
8822
9522
  // src/internal/components/BuyModal.tsx
8823
9523
  import { CreditCard, ArrowLeft as ArrowLeft10 } from "lucide-react";
8824
- import { jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
9524
+ import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
8825
9525
  var BuyModal;
8826
9526
  var init_BuyModal = __esm({
8827
9527
  "src/internal/components/BuyModal.tsx"() {
@@ -8833,7 +9533,7 @@ var init_BuyModal = __esm({
8833
9533
  BuyModal = ({ open, onOpenChange, onBack }) => {
8834
9534
  const { config } = useLumiaPassportConfig();
8835
9535
  const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
8836
- return /* @__PURE__ */ jsx30(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs21(
9536
+ return /* @__PURE__ */ jsx27(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs19(
8837
9537
  DialogContent,
8838
9538
  {
8839
9539
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -8845,26 +9545,26 @@ var init_BuyModal = __esm({
8845
9545
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
8846
9546
  },
8847
9547
  children: [
8848
- /* @__PURE__ */ jsx30(VisuallyHidden, { children: /* @__PURE__ */ jsx30(DialogTitle, { children: "Buy Crypto" }) }),
8849
- /* @__PURE__ */ jsx30(DialogDescription, { className: "sr-only", children: "On-ramp placeholder" }),
8850
- /* @__PURE__ */ jsx30("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2", children: [
8851
- onBack && /* @__PURE__ */ jsx30(
9548
+ /* @__PURE__ */ jsx27(VisuallyHidden, { children: /* @__PURE__ */ jsx27(DialogTitle, { children: "Buy Crypto" }) }),
9549
+ /* @__PURE__ */ jsx27(DialogDescription, { className: "sr-only", children: "On-ramp placeholder" }),
9550
+ /* @__PURE__ */ jsx27("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2", children: [
9551
+ onBack && /* @__PURE__ */ jsx27(
8852
9552
  "button",
8853
9553
  {
8854
9554
  onClick: onBack,
8855
9555
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
8856
9556
  title: "Back",
8857
- children: /* @__PURE__ */ jsx30(ArrowLeft10, { className: "h-4 w-4" })
9557
+ children: /* @__PURE__ */ jsx27(ArrowLeft10, { className: "h-4 w-4" })
8858
9558
  }
8859
9559
  ),
8860
- /* @__PURE__ */ jsxs21("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8861
- /* @__PURE__ */ jsx30(CreditCard, { className: "h-5 w-5" }),
8862
- /* @__PURE__ */ jsx30("span", { children: "Buy" })
9560
+ /* @__PURE__ */ jsxs19("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
9561
+ /* @__PURE__ */ jsx27(CreditCard, { className: "h-5 w-5" }),
9562
+ /* @__PURE__ */ jsx27("span", { children: "Buy" })
8863
9563
  ] })
8864
9564
  ] }) }),
8865
- /* @__PURE__ */ jsxs21("div", { className: "p-5", children: [
8866
- /* @__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" }) }),
8867
- /* @__PURE__ */ jsx30("div", { className: "pt-4", children: /* @__PURE__ */ jsx30(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
9565
+ /* @__PURE__ */ jsxs19("div", { className: "p-5", children: [
9566
+ /* @__PURE__ */ jsx27("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ jsx27("div", { className: `text-sm ${theme.mutedText}`, children: "On-ramp coming soon\u2026" }) }),
9567
+ /* @__PURE__ */ jsx27("div", { className: "pt-4", children: /* @__PURE__ */ jsx27(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
8868
9568
  ] })
8869
9569
  ]
8870
9570
  }
@@ -8875,7 +9575,7 @@ var init_BuyModal = __esm({
8875
9575
 
8876
9576
  // src/internal/components/KycModal.tsx
8877
9577
  import { ShieldCheck, ArrowLeft as ArrowLeft11 } from "lucide-react";
8878
- import { jsx as jsx31, jsxs as jsxs22 } from "react/jsx-runtime";
9578
+ import { jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
8879
9579
  var KycModal;
8880
9580
  var init_KycModal = __esm({
8881
9581
  "src/internal/components/KycModal.tsx"() {
@@ -8889,7 +9589,7 @@ var init_KycModal = __esm({
8889
9589
  const { isDark, classes: theme } = useTheme(config.ui.theme, config.ui.colors);
8890
9590
  const provider = config.kyc?.provider;
8891
9591
  const options = config.kyc?.options || {};
8892
- return /* @__PURE__ */ jsx31(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs22(
9592
+ return /* @__PURE__ */ jsx28(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs20(
8893
9593
  DialogContent,
8894
9594
  {
8895
9595
  className: `lumia-scope p-0 border-0 ${theme.modalBg} overflow-hidden gap-0 ${isDark ? "lumia-dark" : "lumia-light"}`,
@@ -8901,32 +9601,32 @@ var init_KycModal = __esm({
8901
9601
  fontFamily: config.ui.fonts?.base || "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif"
8902
9602
  },
8903
9603
  children: [
8904
- /* @__PURE__ */ jsx31(VisuallyHidden, { children: /* @__PURE__ */ jsx31(DialogTitle, { children: "KYC" }) }),
8905
- /* @__PURE__ */ jsx31(DialogDescription, { className: "sr-only", children: "KYC placeholder" }),
8906
- /* @__PURE__ */ jsx31("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2", children: [
8907
- onBack && /* @__PURE__ */ jsx31(
9604
+ /* @__PURE__ */ jsx28(VisuallyHidden, { children: /* @__PURE__ */ jsx28(DialogTitle, { children: "KYC" }) }),
9605
+ /* @__PURE__ */ jsx28(DialogDescription, { className: "sr-only", children: "KYC placeholder" }),
9606
+ /* @__PURE__ */ jsx28("div", { className: `p-5 border-b ${theme.divider}`, children: /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2", children: [
9607
+ onBack && /* @__PURE__ */ jsx28(
8908
9608
  "button",
8909
9609
  {
8910
9610
  onClick: onBack,
8911
9611
  className: `${theme.iconColor} hover:${isDark ? "text-gray-200" : "text-gray-700"} p-1 mr-1`,
8912
9612
  title: "Back",
8913
- children: /* @__PURE__ */ jsx31(ArrowLeft11, { className: "h-4 w-4" })
9613
+ children: /* @__PURE__ */ jsx28(ArrowLeft11, { className: "h-4 w-4" })
8914
9614
  }
8915
9615
  ),
8916
- /* @__PURE__ */ jsxs22("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
8917
- /* @__PURE__ */ jsx31(ShieldCheck, { className: "h-5 w-5" }),
8918
- /* @__PURE__ */ jsx31("span", { children: "KYC" })
9616
+ /* @__PURE__ */ jsxs20("div", { className: `flex items-center gap-2 ${theme.titleText} font-semibold`, children: [
9617
+ /* @__PURE__ */ jsx28(ShieldCheck, { className: "h-5 w-5" }),
9618
+ /* @__PURE__ */ jsx28("span", { children: "KYC" })
8919
9619
  ] })
8920
9620
  ] }) }),
8921
- /* @__PURE__ */ jsxs22("div", { className: "p-5", children: [
8922
- provider ? /* @__PURE__ */ jsxs22("div", { className: `rounded-xl p-4 ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: [
8923
- /* @__PURE__ */ jsxs22("div", { className: `text-sm ${theme.titleText} mb-2`, children: [
9621
+ /* @__PURE__ */ jsxs20("div", { className: "p-5", children: [
9622
+ provider ? /* @__PURE__ */ jsxs20("div", { className: `rounded-xl p-4 ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: [
9623
+ /* @__PURE__ */ jsxs20("div", { className: `text-sm ${theme.titleText} mb-2`, children: [
8924
9624
  "KYC provider: ",
8925
- /* @__PURE__ */ jsx31("span", { className: "font-medium", children: provider })
9625
+ /* @__PURE__ */ jsx28("span", { className: "font-medium", children: provider })
8926
9626
  ] }),
8927
- 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." })
8928
- ] }) : /* @__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" }) }),
8929
- /* @__PURE__ */ jsx31("div", { className: "pt-4", children: /* @__PURE__ */ jsx31(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
9627
+ Object.keys(options).length > 0 ? /* @__PURE__ */ jsx28("div", { className: `text-xs ${theme.mutedText} break-words whitespace-pre-wrap`, children: JSON.stringify(options, null, 2) }) : /* @__PURE__ */ jsx28("div", { className: `text-sm ${theme.mutedText}`, children: "No provider options configured." })
9628
+ ] }) : /* @__PURE__ */ jsx28("div", { className: `rounded-xl p-4 text-center ${isDark ? "bg-gray-800" : "bg-gray-50"}`, children: /* @__PURE__ */ jsx28("div", { className: `text-sm ${theme.mutedText}`, children: "KYC verification coming soon\u2026" }) }),
9629
+ /* @__PURE__ */ jsx28("div", { className: "pt-4", children: /* @__PURE__ */ jsx28(Button, { className: "w-full", onClick: () => onOpenChange(false), size: "lg", children: "Close" }) })
8930
9630
  ] })
8931
9631
  ]
8932
9632
  }
@@ -8936,13 +9636,13 @@ var init_KycModal = __esm({
8936
9636
  });
8937
9637
 
8938
9638
  // src/modules/linkedProfiles.ts
8939
- import * as React26 from "react";
9639
+ import * as React24 from "react";
8940
9640
  function useLumiaPassportLinkedProfiles() {
8941
- const [profiles, setProfiles] = React26.useState([]);
8942
- const [avatar, setAvatar] = React26.useState(null);
8943
- const [isLoading, setIsLoading] = React26.useState(false);
8944
- const [error, setError] = React26.useState(null);
8945
- const load = React26.useCallback(async () => {
9641
+ const [profiles, setProfiles] = React24.useState([]);
9642
+ const [avatar, setAvatar] = React24.useState(null);
9643
+ const [isLoading, setIsLoading] = React24.useState(false);
9644
+ const [error, setError] = React24.useState(null);
9645
+ const load = React24.useCallback(async () => {
8946
9646
  setIsLoading(true);
8947
9647
  setError(null);
8948
9648
  try {
@@ -8968,7 +9668,7 @@ function useLumiaPassportLinkedProfiles() {
8968
9668
  setIsLoading(false);
8969
9669
  }
8970
9670
  }, []);
8971
- React26.useEffect(() => {
9671
+ React24.useEffect(() => {
8972
9672
  load();
8973
9673
  }, [load]);
8974
9674
  return { profiles, avatar, isLoading, error, refresh: load };
@@ -8987,7 +9687,7 @@ var init_package = __esm({
8987
9687
  "package.json"() {
8988
9688
  package_default = {
8989
9689
  name: "@lumiapassport/ui-kit",
8990
- version: "1.10.1",
9690
+ version: "1.11.0",
8991
9691
  description: "React UI components and hooks for Lumia Passport authentication and Account Abstraction",
8992
9692
  type: "module",
8993
9693
  main: "./dist/index.cjs",
@@ -9079,11 +9779,11 @@ var init_package = __esm({
9079
9779
  });
9080
9780
 
9081
9781
  // src/components/ConnectWalletButton.tsx
9082
- import React27 from "react";
9782
+ import React25 from "react";
9083
9783
  import { flushSync } from "react-dom";
9084
9784
  import { useBalance as useBalance3 } from "wagmi";
9085
- import { Cloud as Cloud3, Laptop as Laptop2, Shield as Shield4, Copy as Copy5, ArrowUp, ArrowDown, Plus, Activity as Activity2, Gem as Gem2, CreditCard as CreditCard2, Lock as Lock2, ArrowUpRight as ArrowUpRight2, AlertTriangle as AlertTriangle5, ShieldCheck as ShieldCheck2 } from "lucide-react";
9086
- import { jsx as jsx32, jsxs as jsxs23 } from "react/jsx-runtime";
9785
+ import { Cloud as Cloud3, Laptop as Laptop2, Shield as Shield4, Copy as Copy3, ArrowUp, ArrowDown, Plus, Activity as Activity2, Gem as Gem2, CreditCard as CreditCard2, Lock as Lock2, ArrowUpRight as ArrowUpRight2, AlertTriangle as AlertTriangle5, ShieldCheck as ShieldCheck2 } from "lucide-react";
9786
+ import { jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
9087
9787
  var ConnectWalletButton;
9088
9788
  var init_ConnectWalletButton = __esm({
9089
9789
  "src/components/ConnectWalletButton.tsx"() {
@@ -9119,7 +9819,7 @@ var init_ConnectWalletButton = __esm({
9119
9819
  }) => {
9120
9820
  console.log("[ConnectWalletButton] Component rendering");
9121
9821
  const { config, callbacks: contextCallbacks } = useLumiaPassportConfig();
9122
- const callbacks = React27.useMemo(() => ({
9822
+ const callbacks = React25.useMemo(() => ({
9123
9823
  onLumiaPassportConnecting: buttonCallbacks?.onLumiaPassportConnecting ?? contextCallbacks?.onLumiaPassportConnecting,
9124
9824
  onLumiaPassportConnect: buttonCallbacks?.onLumiaPassportConnect ?? contextCallbacks?.onLumiaPassportConnect,
9125
9825
  onLumiaPassportAccount: buttonCallbacks?.onLumiaPassportAccount ?? contextCallbacks?.onLumiaPassportAccount,
@@ -9144,20 +9844,20 @@ var init_ConnectWalletButton = __esm({
9144
9844
  setIsRecoveryModalOpen
9145
9845
  } = useLumiaPassportSession();
9146
9846
  const { profiles, isLoading: profilesLoading } = useLumiaPassportLinkedProfiles();
9147
- const [isAuthModalOpen, setIsAuthModalOpen] = React27.useState(false);
9148
- const tssManagerRef = React27.useRef(null);
9149
- const [isWalletMenuOpen, setIsWalletMenuOpen] = React27.useState(false);
9150
- const [copied, setCopied] = React27.useState(false);
9151
- const [isManageWalletOpen, setIsManageWalletOpen] = React27.useState(false);
9152
- const [isSecurityOpen, setIsSecurityOpen] = React27.useState(false);
9153
- const [isBackupOpen, setIsBackupOpen] = React27.useState(false);
9154
- const [isTransactionsOpen, setIsTransactionsOpen] = React27.useState(false);
9155
- const [isViewAssetsOpen, setIsViewAssetsOpen] = React27.useState(false);
9156
- const [isSendOpen, setIsSendOpen] = React27.useState(false);
9157
- const [isReceiveOpen, setIsReceiveOpen] = React27.useState(false);
9158
- const [isBuyOpen, setIsBuyOpen] = React27.useState(false);
9159
- const [isKycOpen, setIsKycOpen] = React27.useState(false);
9160
- React27.useEffect(() => {
9847
+ const [isAuthModalOpen, setIsAuthModalOpen] = React25.useState(false);
9848
+ const tssManagerRef = React25.useRef(null);
9849
+ const [isWalletMenuOpen, setIsWalletMenuOpen] = React25.useState(false);
9850
+ const [copied, setCopied] = React25.useState(false);
9851
+ const [isManageWalletOpen, setIsManageWalletOpen] = React25.useState(false);
9852
+ const [isSecurityOpen, setIsSecurityOpen] = React25.useState(false);
9853
+ const [isBackupOpen, setIsBackupOpen] = React25.useState(false);
9854
+ const [isTransactionsOpen, setIsTransactionsOpen] = React25.useState(false);
9855
+ const [isViewAssetsOpen, setIsViewAssetsOpen] = React25.useState(false);
9856
+ const [isSendOpen, setIsSendOpen] = React25.useState(false);
9857
+ const [isReceiveOpen, setIsReceiveOpen] = React25.useState(false);
9858
+ const [isBuyOpen, setIsBuyOpen] = React25.useState(false);
9859
+ const [isKycOpen, setIsKycOpen] = React25.useState(false);
9860
+ React25.useEffect(() => {
9161
9861
  if (!callbacks?.onWalletReady) return;
9162
9862
  if (!config.projectId) {
9163
9863
  return;
@@ -9172,7 +9872,7 @@ var init_ConnectWalletButton = __esm({
9172
9872
  }
9173
9873
  })();
9174
9874
  }, [callbacks?.onWalletReady, config.projectId]);
9175
- React27.useEffect(() => {
9875
+ React25.useEffect(() => {
9176
9876
  try {
9177
9877
  const shouldAutoOpen = authOpen ?? config?.ui?.authOpen;
9178
9878
  if (!address && !session && shouldAutoOpen) {
@@ -9199,25 +9899,25 @@ var init_ConnectWalletButton = __esm({
9199
9899
  refetchOnWindowFocus: true
9200
9900
  }
9201
9901
  });
9202
- const formatAddress = React27.useCallback((addr) => {
9902
+ const formatAddress = React25.useCallback((addr) => {
9203
9903
  if (!addr) return "";
9204
9904
  return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
9205
9905
  }, []);
9206
- const avatar = React27.useMemo(() => jwtTokenManager2.getAvatar(), [isAuthModalOpen, status]);
9207
- const displayName = React27.useMemo(() => jwtTokenManager2.getDisplayName(), [isAuthModalOpen, status]);
9208
- const formatBalance = React27.useCallback(() => {
9906
+ const avatar = React25.useMemo(() => jwtTokenManager2.getAvatar(), [isAuthModalOpen, status]);
9907
+ const displayName = React25.useMemo(() => jwtTokenManager2.getDisplayName(), [isAuthModalOpen, status]);
9908
+ const formatBalance = React25.useCallback(() => {
9209
9909
  if (!balance || balanceLoading) return "0.0000";
9210
9910
  return parseFloat(balance.formatted).toFixed(4);
9211
9911
  }, [balance, balanceLoading]);
9212
- const [hasServerVault, setHasServerVault] = React27.useState(false);
9213
- const indicators = React27.useMemo(() => {
9912
+ const [hasServerVault, setHasServerVault] = React25.useState(false);
9913
+ const indicators = React25.useMemo(() => {
9214
9914
  const userId = jwtTokenManager2.getUserId();
9215
9915
  if (!userId) return { server: false, local: false, backup: false };
9216
9916
  const server = jwtTokenManager2.getHasKeyshare() ?? false;
9217
9917
  const local = !!address;
9218
9918
  return { server, local, backup: hasServerVault };
9219
9919
  }, [session, address, hasServerVault]);
9220
- const handleAuthModalSuccess = React27.useCallback(async () => {
9920
+ const handleAuthModalSuccess = React25.useCallback(async () => {
9221
9921
  console.log("[ConnectWalletButton] handleAuthModalSuccess called");
9222
9922
  const { getPendingLoginResponse: getPendingLoginResponse2, clearPendingLoginResponse: clearPendingLoginResponse2 } = await Promise.resolve().then(() => (init_AuthModal(), AuthModal_exports));
9223
9923
  const loginResponse = getPendingLoginResponse2();
@@ -9238,9 +9938,13 @@ var init_ConnectWalletButton = __esm({
9238
9938
  const { getIframeManager: getIframeManager2 } = await Promise.resolve().then(() => (init_iframe_manager(), iframe_manager_exports));
9239
9939
  const iframeManager = getIframeManager2();
9240
9940
  console.log("[ConnectWalletButton] Calling iframeManager.authenticate...");
9241
- await iframeManager.authenticate(userId);
9941
+ await iframeManager.authenticate(userId, loginResponse.avatar, loginResponse.displayName);
9242
9942
  console.log("[ConnectWalletButton] iframeManager.authenticate completed");
9243
- await jwtTokenManager2.setTokens(loginResponse);
9943
+ if (loginResponse.accessToken && loginResponse.refreshToken) {
9944
+ await jwtTokenManager2.setTokens(loginResponse);
9945
+ } else {
9946
+ console.warn("[ConnectWalletButton] Login response missing tokens; skipping jwtTokenManager.setTokens");
9947
+ }
9244
9948
  clearPendingLoginResponse2();
9245
9949
  const jwt = await Promise.resolve().then(() => (init_auth(), auth_exports)).then((m) => m.jwtTokenManager.getTokens());
9246
9950
  const { session: sess, address: addr } = await createSessionWithKeyshare(userId, hasServerKeyshare, jwt?.isNewUser);
@@ -9286,7 +9990,7 @@ var init_ConnectWalletButton = __esm({
9286
9990
  }
9287
9991
  }
9288
9992
  }, [onConnected, setAddress, setError, setSession, setStatus]);
9289
- const handleDisconnect = React27.useCallback(async () => {
9993
+ const handleDisconnect = React25.useCallback(async () => {
9290
9994
  const prevAddress = address;
9291
9995
  let userId = null;
9292
9996
  try {
@@ -9306,7 +10010,7 @@ var init_ConnectWalletButton = __esm({
9306
10010
  } catch {
9307
10011
  }
9308
10012
  }, [setAddress, setError, setSession, setStatus]);
9309
- const createSessionWithKeyshare = React27.useCallback(async (userId, hasServerKeyshare, isNewUser) => {
10013
+ const createSessionWithKeyshare = React25.useCallback(async (userId, hasServerKeyshare, isNewUser) => {
9310
10014
  try {
9311
10015
  try {
9312
10016
  callbacks?.onLumiaPassportConnecting?.({ method: "wallet" });
@@ -9332,7 +10036,7 @@ var init_ConnectWalletButton = __esm({
9332
10036
  throw error2;
9333
10037
  }
9334
10038
  }, [usePaymaster, setStatus, callbacks]);
9335
- React27.useEffect(() => {
10039
+ React25.useEffect(() => {
9336
10040
  if (address) {
9337
10041
  (async () => {
9338
10042
  try {
@@ -9349,7 +10053,7 @@ var init_ConnectWalletButton = __esm({
9349
10053
  setHasServerVault(false);
9350
10054
  }
9351
10055
  }, [address]);
9352
- React27.useEffect(() => {
10056
+ React25.useEffect(() => {
9353
10057
  const handleBackupStatusChanged = async (event) => {
9354
10058
  const customEvent = event;
9355
10059
  const { method, success } = customEvent.detail || {};
@@ -9370,8 +10074,8 @@ var init_ConnectWalletButton = __esm({
9370
10074
  window.removeEventListener("lumia-passport-backup-status-changed", handleBackupStatusChanged);
9371
10075
  };
9372
10076
  }, []);
9373
- const autoConnectAttemptedRef = React27.useRef(false);
9374
- React27.useEffect(() => {
10077
+ const autoConnectAttemptedRef = React25.useRef(false);
10078
+ React25.useEffect(() => {
9375
10079
  if (autoConnectAttemptedRef.current) return;
9376
10080
  const tryAutoConnect = async (attempt) => {
9377
10081
  if (address || session) return;
@@ -9457,13 +10161,13 @@ var init_ConnectWalletButton = __esm({
9457
10161
  autoConnectAttemptedRef.current = true;
9458
10162
  tryAutoConnect(0);
9459
10163
  }, []);
9460
- React27.useEffect(() => {
10164
+ React25.useEffect(() => {
9461
10165
  if (address && refetchBalance) {
9462
10166
  refetchBalance();
9463
10167
  }
9464
10168
  }, [address]);
9465
- return /* @__PURE__ */ jsxs23("div", { className: [className, "lumia-scope"].filter(Boolean).join(" "), children: [
9466
- /* @__PURE__ */ jsx32("div", { className: "inline-flex items-center gap-2", children: !address ? /* @__PURE__ */ jsx32("div", { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx32(
10169
+ return /* @__PURE__ */ jsxs21("div", { className: [className, "lumia-scope"].filter(Boolean).join(" "), children: [
10170
+ /* @__PURE__ */ jsx29("div", { className: "inline-flex items-center gap-2", children: !address ? /* @__PURE__ */ jsx29("div", { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx29(
9467
10171
  "button",
9468
10172
  {
9469
10173
  onClick: () => {
@@ -9498,7 +10202,7 @@ var init_ConnectWalletButton = __esm({
9498
10202
  },
9499
10203
  children: label || "Connect"
9500
10204
  }
9501
- ) }) : /* @__PURE__ */ jsx32(
10205
+ ) }) : /* @__PURE__ */ jsx29(
9502
10206
  "div",
9503
10207
  {
9504
10208
  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] backdrop-blur`,
@@ -9509,51 +10213,51 @@ var init_ConnectWalletButton = __esm({
9509
10213
  borderColor: config.ui.colors?.[isDark ? "dark" : "light"]?.connectedButtonBorder || (isDark ? "#374151" : "#e5e7eb")
9510
10214
  },
9511
10215
  onClick: () => setIsWalletMenuOpen(true),
9512
- children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-3", children: [
9513
- /* @__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 ? (
10216
+ children: /* @__PURE__ */ jsxs21("div", { className: "flex items-center space-x-3", children: [
10217
+ /* @__PURE__ */ jsx29("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 ? (
9514
10218
  // eslint-disable-next-line @next/next/no-img-element
9515
- /* @__PURE__ */ jsx32("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
9516
- ) : /* @__PURE__ */ jsx32("span", { className: "text-white font-bold text-sm", children: "LP" }) }),
9517
- /* @__PURE__ */ jsxs23("div", { className: "text-left flex-1 min-w-0", children: [
9518
- /* @__PURE__ */ jsx32("div", { className: `font-semibold text-base truncate ${theme.titleText}`, children: mode === "compact" && displayName ? displayName : formatAddress(address) }),
9519
- /* @__PURE__ */ jsxs23("div", { className: `text-sm ${theme.mutedText}`, children: [
10219
+ /* @__PURE__ */ jsx29("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
10220
+ ) : /* @__PURE__ */ jsx29("span", { className: "text-white font-bold text-sm", children: "LP" }) }),
10221
+ /* @__PURE__ */ jsxs21("div", { className: "text-left flex-1 min-w-0", children: [
10222
+ /* @__PURE__ */ jsx29("div", { className: `font-semibold text-base truncate ${theme.titleText}`, children: mode === "compact" && displayName ? displayName : formatAddress(address) }),
10223
+ /* @__PURE__ */ jsxs21("div", { className: `text-sm ${theme.mutedText}`, children: [
9520
10224
  formatBalance(),
9521
10225
  " LUMIA"
9522
10226
  ] })
9523
10227
  ] }),
9524
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-1", children: [
9525
- /* @__PURE__ */ jsxs23("div", { className: "group relative", children: [
9526
- /* @__PURE__ */ jsx32(
10228
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-center space-x-1", children: [
10229
+ /* @__PURE__ */ jsxs21("div", { className: "group relative", children: [
10230
+ /* @__PURE__ */ jsx29(
9527
10231
  Cloud3,
9528
10232
  {
9529
10233
  className: `w-3 h-3 ${indicators.server ? "text-green-500" : "text-orange-400"}`
9530
10234
  }
9531
10235
  ),
9532
- /* @__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: [
10236
+ /* @__PURE__ */ jsxs21("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: [
9533
10237
  "Server Keyshare: ",
9534
10238
  indicators.server ? "Available" : "Missing"
9535
10239
  ] })
9536
10240
  ] }),
9537
- /* @__PURE__ */ jsxs23("div", { className: "group relative", children: [
9538
- /* @__PURE__ */ jsx32(
10241
+ /* @__PURE__ */ jsxs21("div", { className: "group relative", children: [
10242
+ /* @__PURE__ */ jsx29(
9539
10243
  Laptop2,
9540
10244
  {
9541
10245
  className: `w-3 h-3 ${indicators.local ? "text-green-500" : "text-orange-400"}`
9542
10246
  }
9543
10247
  ),
9544
- /* @__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: [
10248
+ /* @__PURE__ */ jsxs21("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: [
9545
10249
  "Local Keyshare: ",
9546
10250
  indicators.local ? "Available" : "Missing"
9547
10251
  ] })
9548
10252
  ] }),
9549
- /* @__PURE__ */ jsxs23("div", { className: "group relative", children: [
9550
- /* @__PURE__ */ jsx32(
10253
+ /* @__PURE__ */ jsxs21("div", { className: "group relative", children: [
10254
+ /* @__PURE__ */ jsx29(
9551
10255
  Shield4,
9552
10256
  {
9553
10257
  className: `w-3 h-3 ${indicators.backup ? "text-green-500" : "text-orange-400"}`
9554
10258
  }
9555
10259
  ),
9556
- /* @__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: [
10260
+ /* @__PURE__ */ jsxs21("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: [
9557
10261
  "Vault Backup: ",
9558
10262
  indicators.backup ? "Available" : "Not Found"
9559
10263
  ] })
@@ -9562,62 +10266,62 @@ var init_ConnectWalletButton = __esm({
9562
10266
  ] })
9563
10267
  }
9564
10268
  ) }),
9565
- 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: [
9566
- /* @__PURE__ */ jsx32(VisuallyHidden, { children: /* @__PURE__ */ jsx32(DialogTitle, { children: "Wallet Menu" }) }),
9567
- /* @__PURE__ */ jsx32(DialogDescription, { className: "sr-only", children: "Smart Account wallet actions and status" }),
9568
- /* @__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: [
9569
- /* @__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 ? (
10269
+ isWalletMenuOpen && address && /* @__PURE__ */ jsx29("div", { className: "fixed inset-0 z-[60]", children: /* @__PURE__ */ jsx29(Dialog, { open: isWalletMenuOpen, onOpenChange: setIsWalletMenuOpen, children: /* @__PURE__ */ jsxs21(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: [
10270
+ /* @__PURE__ */ jsx29(VisuallyHidden, { children: /* @__PURE__ */ jsx29(DialogTitle, { children: "Wallet Menu" }) }),
10271
+ /* @__PURE__ */ jsx29(DialogDescription, { className: "sr-only", children: "Smart Account wallet actions and status" }),
10272
+ /* @__PURE__ */ jsx29("div", { className: `p-4 border-b ${theme.divider}`, children: /* @__PURE__ */ jsx29("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs21("div", { className: "flex items-center space-x-4", children: [
10273
+ /* @__PURE__ */ jsx29("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 ? (
9570
10274
  // eslint-disable-next-line @next/next/no-img-element
9571
- /* @__PURE__ */ jsx32("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
9572
- ) : /* @__PURE__ */ jsx32("span", { className: "text-white font-bold text-lg", children: "L" }) }),
9573
- /* @__PURE__ */ jsxs23("div", { className: "flex-1 min-w-0", children: [
9574
- /* @__PURE__ */ jsx32("div", { className: `font-medium text-left text-lg ${theme.titleText}`, children: displayName || "Smart Account" }),
9575
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-2", children: [
9576
- /* @__PURE__ */ jsx32("div", { className: `text-sm ${theme.mutedText}`, children: formatAddress(address) }),
9577
- /* @__PURE__ */ jsx32("button", { onClick: async () => {
10275
+ /* @__PURE__ */ jsx29("img", { src: avatar, alt: "User avatar", className: "w-full h-full object-cover" })
10276
+ ) : /* @__PURE__ */ jsx29("span", { className: "text-white font-bold text-lg", children: "L" }) }),
10277
+ /* @__PURE__ */ jsxs21("div", { className: "flex-1 min-w-0", children: [
10278
+ /* @__PURE__ */ jsx29("div", { className: `font-medium text-left text-lg ${theme.titleText}`, children: displayName || "Smart Account" }),
10279
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-center space-x-2", children: [
10280
+ /* @__PURE__ */ jsx29("div", { className: `text-sm ${theme.mutedText}`, children: formatAddress(address) }),
10281
+ /* @__PURE__ */ jsx29("button", { onClick: async () => {
9578
10282
  try {
9579
10283
  await navigator.clipboard.writeText(address);
9580
10284
  setCopied(true);
9581
10285
  setTimeout(() => setCopied(false), 1500);
9582
10286
  } catch {
9583
10287
  }
9584
- }, 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" }) })
10288
+ }, title: "Copy address", className: `${theme.iconColor} hover:${theme.titleText} p-1`, children: copied ? /* @__PURE__ */ jsx29("span", { className: "text-green-500 text-sm", children: "\u2713" }) : /* @__PURE__ */ jsx29(Copy3, { className: "w-4 h-4" }) })
9585
10289
  ] })
9586
10290
  ] })
9587
10291
  ] }) }) }),
9588
- /* @__PURE__ */ jsxs23("div", { className: "p-4", children: [
9589
- /* @__PURE__ */ jsxs23("div", { className: "grid grid-cols-3 gap-2 mb-4", children: [
9590
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
10292
+ /* @__PURE__ */ jsxs21("div", { className: "p-4", children: [
10293
+ /* @__PURE__ */ jsxs21("div", { className: "grid grid-cols-3 gap-2 mb-4", children: [
10294
+ /* @__PURE__ */ jsxs21("button", { onClick: () => {
9591
10295
  setIsWalletMenuOpen(false);
9592
10296
  setIsSendOpen(true);
9593
10297
  }, 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: [
9594
- /* @__PURE__ */ jsx32(ArrowUp, { className: "w-5 h-5" }),
9595
- /* @__PURE__ */ jsx32("span", { className: "text-sm font-medium", children: "Send" })
10298
+ /* @__PURE__ */ jsx29(ArrowUp, { className: "w-5 h-5" }),
10299
+ /* @__PURE__ */ jsx29("span", { className: "text-sm font-medium", children: "Send" })
9596
10300
  ] }),
9597
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
10301
+ /* @__PURE__ */ jsxs21("button", { onClick: () => {
9598
10302
  setIsWalletMenuOpen(false);
9599
10303
  setIsReceiveOpen(true);
9600
10304
  }, 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: [
9601
- /* @__PURE__ */ jsx32(ArrowDown, { className: "w-5 h-5" }),
9602
- /* @__PURE__ */ jsx32("span", { className: "text-sm font-medium", children: "Receive" })
10305
+ /* @__PURE__ */ jsx29(ArrowDown, { className: "w-5 h-5" }),
10306
+ /* @__PURE__ */ jsx29("span", { className: "text-sm font-medium", children: "Receive" })
9603
10307
  ] }),
9604
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
10308
+ /* @__PURE__ */ jsxs21("button", { onClick: () => {
9605
10309
  setIsWalletMenuOpen(false);
9606
10310
  setIsBuyOpen(true);
9607
10311
  }, 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: [
9608
- /* @__PURE__ */ jsx32(Plus, { className: "w-5 h-5" }),
9609
- /* @__PURE__ */ jsx32("span", { className: "text-sm font-medium", children: "Buy" })
10312
+ /* @__PURE__ */ jsx29(Plus, { className: "w-5 h-5" }),
10313
+ /* @__PURE__ */ jsx29("span", { className: "text-sm font-medium", children: "Buy" })
9610
10314
  ] })
9611
10315
  ] }),
9612
- config.warnings?.backupWarning && !hasServerVault && /* @__PURE__ */ jsx32("div", { className: `mb-4 p-4 rounded-xl animate-glow-warning ${isDark ? "bg-red-950/90 border-2 border-red-800/80" : "bg-red-50 border-2 border-red-300"}`, children: /* @__PURE__ */ jsx32("div", { className: "flex items-start space-x-3 text-center", children: /* @__PURE__ */ jsxs23("div", { className: "flex-1 min-w-0", children: [
9613
- /* @__PURE__ */ jsx32("div", { className: `text-sm font-bold ${isDark ? "text-red-200" : "text-red-800"}`, children: "BACKUP NOT CREATED" }),
9614
- /* @__PURE__ */ jsxs23("div", { className: `text-xs mt-1.5 font-medium ${isDark ? "text-red-300/95" : "text-red-700"}`, children: [
10316
+ config.warnings?.backupWarning && !hasServerVault && /* @__PURE__ */ jsx29("div", { className: `mb-4 p-4 rounded-xl animate-glow-warning ${isDark ? "bg-red-950/90 border-2 border-red-800/80" : "bg-red-50 border-2 border-red-300"}`, children: /* @__PURE__ */ jsx29("div", { className: "flex items-start space-x-3 text-center", children: /* @__PURE__ */ jsxs21("div", { className: "flex-1 min-w-0", children: [
10317
+ /* @__PURE__ */ jsx29("div", { className: `text-sm font-bold ${isDark ? "text-red-200" : "text-red-800"}`, children: "BACKUP NOT CREATED" }),
10318
+ /* @__PURE__ */ jsxs21("div", { className: `text-xs mt-1.5 font-medium ${isDark ? "text-red-300/95" : "text-red-700"}`, children: [
9615
10319
  "Your wallet will be ",
9616
- /* @__PURE__ */ jsx32("strong", { children: "PERMANENTLY LOST" }),
10320
+ /* @__PURE__ */ jsx29("strong", { children: "PERMANENTLY LOST" }),
9617
10321
  " if browser data is cleared."
9618
10322
  ] }),
9619
- /* @__PURE__ */ jsx32("div", { className: `text-[11px] mt-1 ${isDark ? "text-red-400/80" : "text-red-600/90"}`, children: "\u26A0\uFE0F Lumia cannot recover your wallet without a backup!" }),
9620
- /* @__PURE__ */ jsxs23(
10323
+ /* @__PURE__ */ jsx29("div", { className: `text-[11px] mt-1 ${isDark ? "text-red-400/80" : "text-red-600/90"}`, children: "\u26A0\uFE0F Lumia cannot recover your wallet without a backup!" }),
10324
+ /* @__PURE__ */ jsxs21(
9621
10325
  "button",
9622
10326
  {
9623
10327
  onClick: () => {
@@ -9626,7 +10330,7 @@ var init_ConnectWalletButton = __esm({
9626
10330
  },
9627
10331
  className: `mt-3 px-4 py-2 text-xs font-bold rounded-lg transition-all hover:scale-105 ${isDark ? "bg-red-700/80 hover:bg-red-600/90 text-white shadow-lg" : "bg-red-600 hover:bg-red-700 text-white shadow-lg"}`,
9628
10332
  children: [
9629
- /* @__PURE__ */ jsx32(ShieldCheck2, { className: "w-3.5 h-3.5 inline mr-1.5" }),
10333
+ /* @__PURE__ */ jsx29(ShieldCheck2, { className: "w-3.5 h-3.5 inline mr-1.5" }),
9630
10334
  "Create Backup Now"
9631
10335
  ]
9632
10336
  }
@@ -9635,12 +10339,12 @@ var init_ConnectWalletButton = __esm({
9635
10339
  (() => {
9636
10340
  const providers = jwtTokenManager2.getProviders();
9637
10341
  const hasEmail = providers.includes("email");
9638
- return config.warnings?.emailNotConnectedWarning && !hasEmail && /* @__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: [
9639
- /* @__PURE__ */ jsx32(AlertTriangle5, { className: `w-5 h-5 ${isDark ? "text-blue-400" : "text-blue-500"} mt-0.5 flex-shrink-0` }),
9640
- /* @__PURE__ */ jsxs23("div", { className: "flex-1 min-w-0", children: [
9641
- /* @__PURE__ */ jsx32("div", { className: `text-sm font-medium ${isDark ? "text-blue-300" : "text-blue-700"}`, children: "Email Not Connected" }),
9642
- /* @__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." }),
9643
- /* @__PURE__ */ jsxs23(
10342
+ return config.warnings?.emailNotConnectedWarning && !hasEmail && /* @__PURE__ */ jsx29("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__ */ jsxs21("div", { className: "flex items-start space-x-3", children: [
10343
+ /* @__PURE__ */ jsx29(AlertTriangle5, { className: `w-5 h-5 ${isDark ? "text-blue-400" : "text-blue-500"} mt-0.5 flex-shrink-0` }),
10344
+ /* @__PURE__ */ jsxs21("div", { className: "flex-1 min-w-0", children: [
10345
+ /* @__PURE__ */ jsx29("div", { className: `text-sm font-medium ${isDark ? "text-blue-300" : "text-blue-700"}`, children: "Email Not Connected" }),
10346
+ /* @__PURE__ */ jsx29("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." }),
10347
+ /* @__PURE__ */ jsxs21(
9644
10348
  "button",
9645
10349
  {
9646
10350
  onClick: () => {
@@ -9649,7 +10353,7 @@ var init_ConnectWalletButton = __esm({
9649
10353
  },
9650
10354
  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"}`,
9651
10355
  children: [
9652
- /* @__PURE__ */ jsx32(ShieldCheck2, { className: "w-3 h-3 inline mr-1" }),
10356
+ /* @__PURE__ */ jsx29(ShieldCheck2, { className: "w-3 h-3 inline mr-1" }),
9653
10357
  "Connect Email"
9654
10358
  ]
9655
10359
  }
@@ -9657,84 +10361,84 @@ var init_ConnectWalletButton = __esm({
9657
10361
  ] })
9658
10362
  ] }) });
9659
10363
  })(),
9660
- /* @__PURE__ */ jsx32(
10364
+ /* @__PURE__ */ jsx29(
9661
10365
  "button",
9662
10366
  {
9663
10367
  onClick: () => address && window.open(`${LUMIA_EXPLORER_URL}/address/${address}`, "_blank"),
9664
10368
  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`,
9665
- children: /* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between", children: [
9666
- /* @__PURE__ */ jsxs23("div", { className: "flex items-center space-x-3", children: [
9667
- /* @__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) }) }),
9668
- /* @__PURE__ */ jsxs23("div", { children: [
9669
- /* @__PURE__ */ jsx32("div", { className: `${theme.titleText} font-medium`, children: lumiaBeam.name }),
9670
- /* @__PURE__ */ jsxs23("div", { className: theme.mutedText + " text-sm", children: [
10369
+ children: /* @__PURE__ */ jsxs21("div", { className: "flex items-center justify-between", children: [
10370
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-center space-x-3", children: [
10371
+ /* @__PURE__ */ jsx29("div", { className: "w-8 h-8 rounded-full flex items-center justify-center bg-transparent overflow-hidden", children: lumiaBeam.logoDataUri ? /* @__PURE__ */ jsx29("img", { src: lumiaBeam.logoDataUri, alt: "Chain logo", className: "w-full h-full object-cover" }) : lumiaBeam.logo === "lumia" ? /* @__PURE__ */ jsx29(LumiaLogo, { size: 32 }) : /* @__PURE__ */ jsx29("span", { className: "text-white text-xs font-bold", children: (lumiaBeam.name || "L").charAt(0) }) }),
10372
+ /* @__PURE__ */ jsxs21("div", { children: [
10373
+ /* @__PURE__ */ jsx29("div", { className: `${theme.titleText} font-medium`, children: lumiaBeam.name }),
10374
+ /* @__PURE__ */ jsxs21("div", { className: theme.mutedText + " text-sm", children: [
9671
10375
  formatBalance(),
9672
10376
  " LUMIA"
9673
10377
  ] })
9674
10378
  ] })
9675
10379
  ] }),
9676
- /* @__PURE__ */ jsx32("div", { className: theme.iconColor, children: /* @__PURE__ */ jsx32(ArrowUpRight2, { className: "w-4 h-4" }) })
10380
+ /* @__PURE__ */ jsx29("div", { className: theme.iconColor, children: /* @__PURE__ */ jsx29(ArrowUpRight2, { className: "w-4 h-4" }) })
9677
10381
  ] })
9678
10382
  }
9679
10383
  ),
9680
- /* @__PURE__ */ jsxs23("div", { className: "space-y-1", children: [
9681
- config.features?.kycNeeded && /* @__PURE__ */ jsxs23("button", { onClick: () => {
10384
+ /* @__PURE__ */ jsxs21("div", { className: "space-y-1", children: [
10385
+ config.features?.kycNeeded && /* @__PURE__ */ jsxs21("button", { onClick: () => {
9682
10386
  setIsWalletMenuOpen(false);
9683
10387
  setIsKycOpen(true);
9684
10388
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
9685
- /* @__PURE__ */ jsx32(ShieldCheck2, { className: `w-5 h-5 ${theme.iconColor}` }),
9686
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "KYC" })
10389
+ /* @__PURE__ */ jsx29(ShieldCheck2, { className: `w-5 h-5 ${theme.iconColor}` }),
10390
+ /* @__PURE__ */ jsx29("span", { className: theme.titleText, children: "KYC" })
9687
10391
  ] }),
9688
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
10392
+ /* @__PURE__ */ jsxs21("button", { onClick: () => {
9689
10393
  setIsWalletMenuOpen(false);
9690
10394
  setIsTransactionsOpen(true);
9691
10395
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
9692
- /* @__PURE__ */ jsx32(Activity2, { className: `w-5 h-5 ${theme.iconColor}` }),
9693
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Transactions" })
10396
+ /* @__PURE__ */ jsx29(Activity2, { className: `w-5 h-5 ${theme.iconColor}` }),
10397
+ /* @__PURE__ */ jsx29("span", { className: theme.titleText, children: "Transactions" })
9694
10398
  ] }),
9695
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
10399
+ /* @__PURE__ */ jsxs21("button", { onClick: () => {
9696
10400
  setIsWalletMenuOpen(false);
9697
10401
  setIsViewAssetsOpen(true);
9698
10402
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
9699
- /* @__PURE__ */ jsx32(Gem2, { className: `w-5 h-5 ${theme.iconColor}` }),
9700
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "View Assets" })
10403
+ /* @__PURE__ */ jsx29(Gem2, { className: `w-5 h-5 ${theme.iconColor}` }),
10404
+ /* @__PURE__ */ jsx29("span", { className: theme.titleText, children: "View Assets" })
9701
10405
  ] }),
9702
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
10406
+ /* @__PURE__ */ jsxs21("button", { onClick: () => {
9703
10407
  setIsWalletMenuOpen(false);
9704
10408
  setIsManageWalletOpen(true);
9705
10409
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
9706
- /* @__PURE__ */ jsx32(CreditCard2, { className: `w-5 h-5 ${theme.iconColor}` }),
9707
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Manage Wallet" })
10410
+ /* @__PURE__ */ jsx29(CreditCard2, { className: `w-5 h-5 ${theme.iconColor}` }),
10411
+ /* @__PURE__ */ jsx29("span", { className: theme.titleText, children: "Manage Wallet" })
9708
10412
  ] }),
9709
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
10413
+ /* @__PURE__ */ jsxs21("button", { onClick: () => {
9710
10414
  setIsWalletMenuOpen(false);
9711
10415
  setIsSecurityOpen(true);
9712
10416
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
9713
- /* @__PURE__ */ jsx32(Lock2, { className: `w-5 h-5 ${theme.iconColor}` }),
9714
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Security" })
10417
+ /* @__PURE__ */ jsx29(Lock2, { className: `w-5 h-5 ${theme.iconColor}` }),
10418
+ /* @__PURE__ */ jsx29("span", { className: theme.titleText, children: "Security" })
9715
10419
  ] }),
9716
- /* @__PURE__ */ jsxs23("button", { onClick: () => {
10420
+ /* @__PURE__ */ jsxs21("button", { onClick: () => {
9717
10421
  setIsWalletMenuOpen(false);
9718
10422
  setIsBackupOpen(true);
9719
10423
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-gray-800" : "bg-transparent hover:bg-gray-100"} transition-colors flex items-center space-x-3`, children: [
9720
- /* @__PURE__ */ jsx32(Shield4, { className: `w-5 h-5 ${theme.iconColor}` }),
9721
- /* @__PURE__ */ jsx32("span", { className: theme.titleText, children: "Keyshare Backup" })
10424
+ /* @__PURE__ */ jsx29(Shield4, { className: `w-5 h-5 ${theme.iconColor}` }),
10425
+ /* @__PURE__ */ jsx29("span", { className: theme.titleText, children: "Keyshare Backup" })
9722
10426
  ] }),
9723
- /* @__PURE__ */ jsxs23("button", { onClick: async () => {
10427
+ /* @__PURE__ */ jsxs21("button", { onClick: async () => {
9724
10428
  await handleDisconnect();
9725
10429
  setIsWalletMenuOpen(false);
9726
10430
  }, className: `w-full text-left p-2.5 rounded-xl ${isDark ? "bg-transparent hover:bg-red-900/20" : "bg-transparent hover:bg-red-50"} transition-colors flex items-center space-x-3`, children: [
9727
- /* @__PURE__ */ jsx32(ArrowUpRight2, { className: "w-5 h-5 text-red-600" }),
9728
- /* @__PURE__ */ jsx32("span", { className: "text-red-600", children: "Disconnect Wallet" })
10431
+ /* @__PURE__ */ jsx29(ArrowUpRight2, { className: "w-5 h-5 text-red-600" }),
10432
+ /* @__PURE__ */ jsx29("span", { className: "text-red-600", children: "Disconnect Wallet" })
9729
10433
  ] })
9730
10434
  ] }),
9731
- /* @__PURE__ */ jsx32("div", { className: `mt-3 pt-3 border-t ${theme.divider} text-center`, children: /* @__PURE__ */ jsxs23("div", { className: `text-xs ${theme.mutedText}`, children: [
10435
+ /* @__PURE__ */ jsx29("div", { className: `mt-3 pt-3 border-t ${theme.divider} text-center`, children: /* @__PURE__ */ jsxs21("div", { className: `text-xs ${theme.mutedText}`, children: [
9732
10436
  "Lumia Passport v",
9733
10437
  package_default.version
9734
10438
  ] }) })
9735
10439
  ] })
9736
10440
  ] }) }) }),
9737
- /* @__PURE__ */ jsx32(
10441
+ /* @__PURE__ */ jsx29(
9738
10442
  ManageWallet,
9739
10443
  {
9740
10444
  open: isManageWalletOpen,
@@ -9745,7 +10449,7 @@ var init_ConnectWalletButton = __esm({
9745
10449
  }
9746
10450
  }
9747
10451
  ),
9748
- /* @__PURE__ */ jsx32(
10452
+ /* @__PURE__ */ jsx29(
9749
10453
  SecurityModal,
9750
10454
  {
9751
10455
  open: isSecurityOpen,
@@ -9756,12 +10460,12 @@ var init_ConnectWalletButton = __esm({
9756
10460
  }
9757
10461
  }
9758
10462
  ),
9759
- isBackupOpen && session?.mpcUserId && /* @__PURE__ */ jsx32(Dialog, { open: isBackupOpen, onOpenChange: setIsBackupOpen, children: /* @__PURE__ */ jsxs23(DialogContent, { className: "max-w-[400px] p-0", children: [
9760
- /* @__PURE__ */ jsxs23(VisuallyHidden, { children: [
9761
- /* @__PURE__ */ jsx32(DialogTitle, { children: "Keyshare Backup" }),
9762
- /* @__PURE__ */ jsx32(DialogDescription, { children: "Create and manage encrypted backups of your keyshare" })
10463
+ isBackupOpen && session?.mpcUserId && /* @__PURE__ */ jsx29(Dialog, { open: isBackupOpen, onOpenChange: setIsBackupOpen, children: /* @__PURE__ */ jsxs21(DialogContent, { className: "max-w-[400px] p-0", children: [
10464
+ /* @__PURE__ */ jsxs21(VisuallyHidden, { children: [
10465
+ /* @__PURE__ */ jsx29(DialogTitle, { children: "Keyshare Backup" }),
10466
+ /* @__PURE__ */ jsx29(DialogDescription, { children: "Create and manage encrypted backups of your keyshare" })
9763
10467
  ] }),
9764
- /* @__PURE__ */ jsx32(
10468
+ /* @__PURE__ */ jsx29(
9765
10469
  KeyshareBackup,
9766
10470
  {
9767
10471
  userId: session.mpcUserId,
@@ -9775,7 +10479,7 @@ var init_ConnectWalletButton = __esm({
9775
10479
  }
9776
10480
  )
9777
10481
  ] }) }),
9778
- /* @__PURE__ */ jsx32(
10482
+ /* @__PURE__ */ jsx29(
9779
10483
  TransactionsModal,
9780
10484
  {
9781
10485
  open: isTransactionsOpen,
@@ -9786,7 +10490,7 @@ var init_ConnectWalletButton = __esm({
9786
10490
  }
9787
10491
  }
9788
10492
  ),
9789
- /* @__PURE__ */ jsx32(
10493
+ /* @__PURE__ */ jsx29(
9790
10494
  ViewAssetsModal,
9791
10495
  {
9792
10496
  open: isViewAssetsOpen,
@@ -9797,7 +10501,7 @@ var init_ConnectWalletButton = __esm({
9797
10501
  }
9798
10502
  }
9799
10503
  ),
9800
- /* @__PURE__ */ jsx32(
10504
+ /* @__PURE__ */ jsx29(
9801
10505
  SendModal,
9802
10506
  {
9803
10507
  open: isSendOpen,
@@ -9805,10 +10509,15 @@ var init_ConnectWalletButton = __esm({
9805
10509
  onBack: () => {
9806
10510
  setIsSendOpen(false);
9807
10511
  setIsWalletMenuOpen(true);
10512
+ },
10513
+ onSuccess: () => {
10514
+ console.log("[ConnectWalletButton] SendModal onSuccess - opening Transaction History");
10515
+ setIsTransactionsOpen(true);
10516
+ console.log("[ConnectWalletButton] isTransactionsOpen set to true");
9808
10517
  }
9809
10518
  }
9810
10519
  ),
9811
- /* @__PURE__ */ jsx32(
10520
+ /* @__PURE__ */ jsx29(
9812
10521
  ReceiveModal,
9813
10522
  {
9814
10523
  open: isReceiveOpen,
@@ -9819,7 +10528,7 @@ var init_ConnectWalletButton = __esm({
9819
10528
  }
9820
10529
  }
9821
10530
  ),
9822
- /* @__PURE__ */ jsx32(
10531
+ /* @__PURE__ */ jsx29(
9823
10532
  BuyModal,
9824
10533
  {
9825
10534
  open: isBuyOpen,
@@ -9830,7 +10539,7 @@ var init_ConnectWalletButton = __esm({
9830
10539
  }
9831
10540
  }
9832
10541
  ),
9833
- /* @__PURE__ */ jsx32(
10542
+ /* @__PURE__ */ jsx29(
9834
10543
  KycModal,
9835
10544
  {
9836
10545
  open: isKycOpen,
@@ -9841,7 +10550,7 @@ var init_ConnectWalletButton = __esm({
9841
10550
  }
9842
10551
  }
9843
10552
  ),
9844
- /* @__PURE__ */ jsx32(
10553
+ /* @__PURE__ */ jsx29(
9845
10554
  AuthModal,
9846
10555
  {
9847
10556
  open: recoveryUserId ? isRecoveryModalOpen : isAuthModalOpen,
@@ -9905,7 +10614,7 @@ var init_ConnectWalletButton = __esm({
9905
10614
  }
9906
10615
  }
9907
10616
  ),
9908
- /* @__PURE__ */ jsx32(
10617
+ /* @__PURE__ */ jsx29(
9909
10618
  TssManagerWithRef,
9910
10619
  {
9911
10620
  ref: tssManagerRef,
@@ -9925,7 +10634,7 @@ var init_ConnectWalletButton = __esm({
9925
10634
  });
9926
10635
 
9927
10636
  // src/components/ThemeToggle.tsx
9928
- import { jsx as jsx33, jsxs as jsxs24 } from "react/jsx-runtime";
10637
+ import { jsx as jsx30, jsxs as jsxs22 } from "react/jsx-runtime";
9929
10638
  var ThemeToggle;
9930
10639
  var init_ThemeToggle = __esm({
9931
10640
  "src/components/ThemeToggle.tsx"() {
@@ -9974,7 +10683,7 @@ var init_ThemeToggle = __esm({
9974
10683
  return "auto";
9975
10684
  }
9976
10685
  };
9977
- return /* @__PURE__ */ jsx33("div", { className: "lumia-scope", children: /* @__PURE__ */ jsxs24(
10686
+ return /* @__PURE__ */ jsx30("div", { className: "lumia-scope", children: /* @__PURE__ */ jsxs22(
9978
10687
  "button",
9979
10688
  {
9980
10689
  onClick: cycleTheme,
@@ -9992,22 +10701,22 @@ var init_ThemeToggle = __esm({
9992
10701
  });
9993
10702
 
9994
10703
  // src/components/LumiaLogo.tsx
9995
- import { jsx as jsx34, jsxs as jsxs25 } from "react/jsx-runtime";
10704
+ import { jsx as jsx31, jsxs as jsxs23 } from "react/jsx-runtime";
9996
10705
  var LumiaLogo2;
9997
10706
  var init_LumiaLogo2 = __esm({
9998
10707
  "src/components/LumiaLogo.tsx"() {
9999
10708
  LumiaLogo2 = ({ size = 80, className = "" }) => {
10000
- return /* @__PURE__ */ jsx34(
10709
+ return /* @__PURE__ */ jsx31(
10001
10710
  "div",
10002
10711
  {
10003
10712
  className: `flex items-center justify-center ${className}`,
10004
10713
  style: { width: size, height: size },
10005
- children: /* @__PURE__ */ jsxs25("svg", { viewBox: "0 0 512 512", width: size, height: size, children: [
10006
- /* @__PURE__ */ jsx34("circle", { cx: "256", cy: "256", r: "256", fill: "#060117", strokeWidth: "0" }),
10007
- /* @__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" }),
10008
- /* @__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" }),
10009
- /* @__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" }),
10010
- /* @__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" })
10714
+ children: /* @__PURE__ */ jsxs23("svg", { viewBox: "0 0 512 512", width: size, height: size, children: [
10715
+ /* @__PURE__ */ jsx31("circle", { cx: "256", cy: "256", r: "256", fill: "#060117", strokeWidth: "0" }),
10716
+ /* @__PURE__ */ jsx31("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" }),
10717
+ /* @__PURE__ */ jsx31("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" }),
10718
+ /* @__PURE__ */ jsx31("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" }),
10719
+ /* @__PURE__ */ jsx31("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" })
10011
10720
  ] })
10012
10721
  }
10013
10722
  );
@@ -10016,10 +10725,10 @@ var init_LumiaLogo2 = __esm({
10016
10725
  });
10017
10726
 
10018
10727
  // src/hooks/useTheme.ts
10019
- import { useMemo as useMemo5, useState as useState15, useEffect as useEffect12 } from "react";
10728
+ import { useMemo as useMemo5, useState as useState13, useEffect as useEffect11 } from "react";
10020
10729
  function useTheme2(configTheme) {
10021
- const [systemTheme, setSystemTheme] = useState15("light");
10022
- useEffect12(() => {
10730
+ const [systemTheme, setSystemTheme] = useState13("light");
10731
+ useEffect11(() => {
10023
10732
  if (typeof window === "undefined" || !window.matchMedia) return;
10024
10733
  const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
10025
10734
  const updateSystemTheme = () => {
@@ -10075,9 +10784,401 @@ var init_useTheme2 = __esm({
10075
10784
  }
10076
10785
  });
10077
10786
 
10787
+ // src/internal/utils/cn.ts
10788
+ import { clsx as clsx2 } from "clsx";
10789
+ import { twMerge as twMerge2 } from "tailwind-merge";
10790
+ function cn2(...inputs) {
10791
+ return twMerge2(clsx2(inputs));
10792
+ }
10793
+ var init_cn = __esm({
10794
+ "src/internal/utils/cn.ts"() {
10795
+ }
10796
+ });
10797
+
10798
+ // src/internal/components/ui/badge.tsx
10799
+ import { cva as cva2 } from "class-variance-authority";
10800
+ import { jsx as jsx32 } from "react/jsx-runtime";
10801
+ function Badge({ className, variant, ...props }) {
10802
+ return /* @__PURE__ */ jsx32("div", { className: cn2(badgeVariants({ variant }), className), ...props });
10803
+ }
10804
+ var badgeVariants;
10805
+ var init_badge = __esm({
10806
+ "src/internal/components/ui/badge.tsx"() {
10807
+ init_cn();
10808
+ badgeVariants = cva2(
10809
+ "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",
10810
+ {
10811
+ variants: {
10812
+ variant: {
10813
+ default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
10814
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
10815
+ destructive: "border-transparent bg-red-600 text-white hover:bg-red-700 dark:bg-red-700 dark:hover:bg-red-600",
10816
+ outline: "text-foreground",
10817
+ success: "border-transparent bg-green-600 text-white hover:bg-green-700 dark:bg-green-700 dark:hover:bg-green-600",
10818
+ warning: "border-transparent bg-yellow-500 text-white hover:bg-yellow-600 dark:bg-yellow-600 dark:hover:bg-yellow-500"
10819
+ }
10820
+ },
10821
+ defaultVariants: {
10822
+ variant: "default"
10823
+ }
10824
+ }
10825
+ );
10826
+ }
10827
+ });
10828
+
10829
+ // src/internal/components/Address.tsx
10830
+ import * as React26 from "react";
10831
+ import { Copy as Copy4, ExternalLink as ExternalLink2 } from "lucide-react";
10832
+ import { jsx as jsx33, jsxs as jsxs24 } from "react/jsx-runtime";
10833
+ function toExplorerAddressUrl(address, chain) {
10834
+ const base2 = chain?.blockExplorers?.default?.url;
10835
+ if (!base2) return null;
10836
+ return `${base2.replace(/\/$/, "")}/address/${address}`;
10837
+ }
10838
+ function short(addr) {
10839
+ if (addr.length <= 14) return addr;
10840
+ return `${addr.slice(0, 10)}...${addr.slice(-8)}`;
10841
+ }
10842
+ var Address;
10843
+ var init_Address = __esm({
10844
+ "src/internal/components/Address.tsx"() {
10845
+ init_button();
10846
+ init_cn();
10847
+ Address = ({
10848
+ address,
10849
+ chain,
10850
+ className,
10851
+ truncate = true,
10852
+ showCopy = true,
10853
+ showExplorer = true,
10854
+ label
10855
+ }) => {
10856
+ const addr = address || "";
10857
+ const explorer = toExplorerAddressUrl(addr, chain || void 0);
10858
+ const [copied, setCopied] = React26.useState(false);
10859
+ if (!addr) return /* @__PURE__ */ jsx33("span", { className: cn2("text-muted-foreground", className), children: "\u2014" });
10860
+ return /* @__PURE__ */ jsxs24("div", { className: cn2("flex items-center gap-2", className), style: { listStyle: "none" }, children: [
10861
+ label && /* @__PURE__ */ jsx33("span", { className: "text-sm font-medium", children: label }),
10862
+ /* @__PURE__ */ jsx33("code", { className: "text-xs bg-background px-2 py-1 rounded select-all", children: truncate ? short(addr) : addr }),
10863
+ showCopy && /* @__PURE__ */ jsx33(
10864
+ Button,
10865
+ {
10866
+ variant: "ghost",
10867
+ size: "sm",
10868
+ title: copied ? "Copied" : "Copy address",
10869
+ onClick: async () => {
10870
+ try {
10871
+ await navigator.clipboard.writeText(addr);
10872
+ setCopied(true);
10873
+ setTimeout(() => setCopied(false), 1200);
10874
+ } catch {
10875
+ }
10876
+ },
10877
+ children: /* @__PURE__ */ jsx33(Copy4, { className: "h-4 w-4" })
10878
+ }
10879
+ ),
10880
+ showExplorer && explorer && /* @__PURE__ */ jsx33(
10881
+ "a",
10882
+ {
10883
+ href: explorer,
10884
+ target: "_blank",
10885
+ rel: "noreferrer noopener",
10886
+ className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
10887
+ title: "Open in explorer",
10888
+ children: /* @__PURE__ */ jsx33(ExternalLink2, { className: "h-4 w-4" })
10889
+ }
10890
+ )
10891
+ ] });
10892
+ };
10893
+ }
10894
+ });
10895
+
10896
+ // src/internal/components/UserOpStatus.tsx
10897
+ import * as React27 from "react";
10898
+ import { AlertCircle as AlertCircle4, CheckCircle2 as CheckCircle27, Clock as Clock2, Copy as Copy5, ExternalLink as ExternalLink3, RefreshCw as RefreshCw5 } from "lucide-react";
10899
+ import { jsx as jsx34, jsxs as jsxs25 } from "react/jsx-runtime";
10900
+ var UserOpStatus;
10901
+ var init_UserOpStatus = __esm({
10902
+ "src/internal/components/UserOpStatus.tsx"() {
10903
+ init_button();
10904
+ init_badge();
10905
+ init_Address();
10906
+ init_cn();
10907
+ init_base();
10908
+ UserOpStatus = ({
10909
+ userOpHash,
10910
+ chain,
10911
+ className,
10912
+ pollMs = 1e3,
10913
+ maxPollTimeMs = 6e4,
10914
+ // Default 1 minute
10915
+ externalState
10916
+ }) => {
10917
+ const useExternalState = !!externalState;
10918
+ const [internalReceipt, setInternalReceipt] = React27.useState(null);
10919
+ const [internalMempool, setInternalMempool] = React27.useState(null);
10920
+ const [internalError, setInternalError] = React27.useState(null);
10921
+ const [attempt, setAttempt] = React27.useState(0);
10922
+ const [internalRefreshing, setInternalRefreshing] = React27.useState(false);
10923
+ const [timedOut, setTimedOut] = React27.useState(false);
10924
+ const [rejected, setRejected] = React27.useState(false);
10925
+ const intervalRef = React27.useRef(null);
10926
+ const startTimeRef = React27.useRef(Date.now());
10927
+ const receipt = useExternalState ? externalState.receipt ?? null : internalReceipt;
10928
+ const mempool = useExternalState ? externalState.mempool ?? null : internalMempool;
10929
+ const error = useExternalState ? externalState.error ?? null : internalError;
10930
+ const refreshing = useExternalState ? externalState.isPolling ?? false : internalRefreshing;
10931
+ const rpc = React27.useCallback(async (method, params) => {
10932
+ const body = { jsonrpc: "2.0", id: 1, method, params };
10933
+ const res = await fetch(getBundlerUrl(), {
10934
+ method: "POST",
10935
+ headers: { "content-type": "application/json" },
10936
+ body: JSON.stringify(body)
10937
+ });
10938
+ const json = await res.json();
10939
+ if (json.error) throw new Error(json.error.message || JSON.stringify(json.error));
10940
+ return json.result;
10941
+ }, []);
10942
+ const extractMempoolInfo = React27.useCallback((m) => {
10943
+ if (!m) return null;
10944
+ const entryPoint = m.entryPoint || m?.userOperation?.entryPoint || null;
10945
+ const sender = m.sender || m?.userOperation?.sender || null;
10946
+ if (!entryPoint && !sender) return null;
10947
+ return { entryPoint, sender };
10948
+ }, []);
10949
+ const tick = React27.useCallback(async () => {
10950
+ if (useExternalState) return;
10951
+ const elapsed = Date.now() - startTimeRef.current;
10952
+ if (elapsed > maxPollTimeMs) {
10953
+ setTimedOut(true);
10954
+ setInternalMempool(null);
10955
+ if (intervalRef.current) {
10956
+ clearInterval(intervalRef.current);
10957
+ intervalRef.current = null;
10958
+ }
10959
+ return;
10960
+ }
10961
+ try {
10962
+ setInternalRefreshing(true);
10963
+ setInternalError(null);
10964
+ const r = await rpc("eth_getUserOperationReceipt", [userOpHash]);
10965
+ if (r) {
10966
+ setInternalReceipt(r);
10967
+ setInternalMempool(null);
10968
+ if (intervalRef.current) {
10969
+ clearInterval(intervalRef.current);
10970
+ intervalRef.current = null;
10971
+ }
10972
+ return;
10973
+ }
10974
+ const m = await rpc("eth_getUserOperationByHash", [userOpHash]);
10975
+ if (m === null) {
10976
+ setRejected(true);
10977
+ setInternalMempool(null);
10978
+ if (intervalRef.current) {
10979
+ clearInterval(intervalRef.current);
10980
+ intervalRef.current = null;
10981
+ }
10982
+ return;
10983
+ }
10984
+ const info = extractMempoolInfo(m);
10985
+ setInternalMempool(info);
10986
+ } catch (e) {
10987
+ setInternalError(e?.message || String(e));
10988
+ } finally {
10989
+ setInternalRefreshing(false);
10990
+ setAttempt((x) => x + 1);
10991
+ }
10992
+ }, [rpc, userOpHash, maxPollTimeMs, extractMempoolInfo, useExternalState]);
10993
+ React27.useEffect(() => {
10994
+ if (useExternalState) return;
10995
+ console.log("[UserOpStatus] Initializing polling for UserOp hash:", userOpHash);
10996
+ startTimeRef.current = Date.now();
10997
+ setTimedOut(false);
10998
+ setRejected(false);
10999
+ setInternalReceipt(null);
11000
+ setInternalMempool(null);
11001
+ setInternalError(null);
11002
+ setAttempt(0);
11003
+ setInternalRefreshing(false);
11004
+ }, [userOpHash, useExternalState]);
11005
+ React27.useEffect(() => {
11006
+ if (useExternalState) {
11007
+ console.log("[UserOpStatus] Using external state, skipping internal polling");
11008
+ return;
11009
+ }
11010
+ if (receipt) {
11011
+ console.log("[UserOpStatus] Already have receipt, not starting polling");
11012
+ return;
11013
+ }
11014
+ let mounted = true;
11015
+ const startPolling = async () => {
11016
+ if (mounted) {
11017
+ console.log("[UserOpStatus] Starting polling for hash:", userOpHash, "pollMs:", pollMs);
11018
+ await tick();
11019
+ if (mounted && !receipt) {
11020
+ console.log("[UserOpStatus] Starting interval polling every", pollMs, "ms");
11021
+ intervalRef.current = setInterval(() => {
11022
+ if (mounted) tick();
11023
+ }, pollMs);
11024
+ }
11025
+ }
11026
+ };
11027
+ startPolling();
11028
+ return () => {
11029
+ mounted = false;
11030
+ if (intervalRef.current) {
11031
+ console.log("[UserOpStatus] Clearing interval in cleanup");
11032
+ clearInterval(intervalRef.current);
11033
+ intervalRef.current = null;
11034
+ }
11035
+ };
11036
+ }, [userOpHash, pollMs, useExternalState]);
11037
+ const stateBadge = () => {
11038
+ if (receipt) {
11039
+ const ok = !!receipt.success;
11040
+ return /* @__PURE__ */ jsxs25(Badge, { variant: ok ? "success" : "destructive", className: "gap-1", children: [
11041
+ ok ? /* @__PURE__ */ jsx34(CheckCircle27, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx34(AlertCircle4, { className: "h-3 w-3" }),
11042
+ ok ? "Included" : "Failed"
11043
+ ] });
11044
+ }
11045
+ if (rejected) {
11046
+ return /* @__PURE__ */ jsxs25(Badge, { variant: "destructive", className: "gap-1", children: [
11047
+ /* @__PURE__ */ jsx34(AlertCircle4, { className: "h-3 w-3" }),
11048
+ " Rejected by bundler"
11049
+ ] });
11050
+ }
11051
+ if (timedOut) {
11052
+ return /* @__PURE__ */ jsxs25(Badge, { variant: "warning", className: "gap-1", children: [
11053
+ /* @__PURE__ */ jsx34(AlertCircle4, { className: "h-3 w-3" }),
11054
+ " Timeout - may be rejected"
11055
+ ] });
11056
+ }
11057
+ if (mempool) {
11058
+ return /* @__PURE__ */ jsxs25(Badge, { variant: "outline", className: "gap-1", children: [
11059
+ /* @__PURE__ */ jsx34(Clock2, { className: "h-3 w-3" }),
11060
+ " Pending in bundler"
11061
+ ] });
11062
+ }
11063
+ return /* @__PURE__ */ jsxs25(Badge, { variant: "secondary", className: "gap-1", children: [
11064
+ /* @__PURE__ */ jsx34(Clock2, { className: "h-3 w-3" }),
11065
+ " Waiting"
11066
+ ] });
11067
+ };
11068
+ return /* @__PURE__ */ jsxs25(
11069
+ "div",
11070
+ {
11071
+ className: cn2("lumia-scope bg-card text-card-foreground p-0 rounded-xl border border-border w-full max-w-[680px]", className),
11072
+ style: { textAlign: "left", listStyle: "none" },
11073
+ children: [
11074
+ /* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between mb-3", children: [
11075
+ /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-2", children: [
11076
+ stateBadge(),
11077
+ /* @__PURE__ */ jsx34("span", { className: "text-xs text-muted-foreground", children: "This is a UserOperation hash (EIP-4337), not a L2 tx hash." })
11078
+ ] }),
11079
+ /* @__PURE__ */ jsxs25(Button, { variant: "ghost", size: "sm", onClick: () => tick(), disabled: refreshing, className: "h-8", children: [
11080
+ /* @__PURE__ */ jsx34(RefreshCw5, { className: cn2("h-3.5 w-3.5 mr-1", refreshing && "animate-spin") }),
11081
+ /* @__PURE__ */ jsx34("span", { className: "text-xs", children: "Refresh" })
11082
+ ] })
11083
+ ] }),
11084
+ /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-2 mb-2", children: [
11085
+ /* @__PURE__ */ jsx34("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "UO Hash" }),
11086
+ /* @__PURE__ */ jsx34("code", { className: "text-xs font-mono flex-1 select-all", children: userOpHash }),
11087
+ /* @__PURE__ */ jsx34(
11088
+ Button,
11089
+ {
11090
+ variant: "ghost",
11091
+ size: "sm",
11092
+ className: "h-8 w-8 p-0",
11093
+ onClick: async () => {
11094
+ try {
11095
+ await navigator.clipboard.writeText(userOpHash);
11096
+ } catch {
11097
+ }
11098
+ },
11099
+ children: /* @__PURE__ */ jsx34(Copy5, { className: "h-3.5 w-3.5" })
11100
+ }
11101
+ )
11102
+ ] }),
11103
+ receipt && receipt.receipt?.transactionHash && /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-2 mb-3", children: [
11104
+ /* @__PURE__ */ jsx34("span", { className: "text-sm font-medium min-w-16 shrink-0", children: "Tx Hash" }),
11105
+ /* @__PURE__ */ jsx34("code", { className: "text-xs font-mono flex-1 select-all", children: receipt.receipt.transactionHash }),
11106
+ /* @__PURE__ */ jsx34(
11107
+ Button,
11108
+ {
11109
+ variant: "ghost",
11110
+ size: "sm",
11111
+ className: "h-8 w-8 p-0",
11112
+ onClick: async () => {
11113
+ try {
11114
+ await navigator.clipboard.writeText(receipt.receipt.transactionHash);
11115
+ } catch {
11116
+ }
11117
+ },
11118
+ children: /* @__PURE__ */ jsx34(Copy5, { className: "h-3.5 w-3.5" })
11119
+ }
11120
+ ),
11121
+ chain?.blockExplorers?.default?.url && /* @__PURE__ */ jsx34(
11122
+ "a",
11123
+ {
11124
+ href: `${chain.blockExplorers.default.url}/tx/${receipt.receipt.transactionHash}`,
11125
+ target: "_blank",
11126
+ rel: "noreferrer noopener",
11127
+ className: "inline-flex items-center justify-center h-8 w-8 rounded-md hover:bg-accent text-foreground",
11128
+ title: "Open in explorer",
11129
+ children: /* @__PURE__ */ jsx34(ExternalLink3, { className: "h-3.5 w-3.5" })
11130
+ }
11131
+ )
11132
+ ] }),
11133
+ receipt && /* @__PURE__ */ jsxs25("div", { className: "text-xs text-muted-foreground mb-3", children: [
11134
+ "Block ",
11135
+ parseInt(receipt.receipt?.blockNumber || "0x0", 16),
11136
+ " \u2022 Gas Used",
11137
+ " ",
11138
+ parseInt(receipt.actualGasUsed || "0x0", 16),
11139
+ " \u2022 Success ",
11140
+ String(!!receipt.success)
11141
+ ] }),
11142
+ /* @__PURE__ */ jsx34("div", { className: "text-xs text-muted-foreground", children: !receipt && !timedOut && !rejected && /* @__PURE__ */ jsxs25("span", { className: "ml-2", children: [
11143
+ "\u2022 Polling for ",
11144
+ Math.round((Date.now() - startTimeRef.current) / 1e3),
11145
+ "s"
11146
+ ] }) }),
11147
+ mempool && /* @__PURE__ */ jsxs25("div", { className: "text-sm text-muted-foreground mt-2", style: { listStyle: "none" }, children: [
11148
+ /* @__PURE__ */ jsxs25("div", { children: [
11149
+ "Seen by bundler at ",
11150
+ /* @__PURE__ */ jsx34(Address, { address: mempool.entryPoint, chain, showExplorer: true, truncate: false })
11151
+ ] }),
11152
+ /* @__PURE__ */ jsxs25("div", { children: [
11153
+ "sender ",
11154
+ /* @__PURE__ */ jsx34(Address, { address: mempool.sender, chain, truncate: false })
11155
+ ] })
11156
+ ] }),
11157
+ error && /* @__PURE__ */ jsxs25("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
11158
+ /* @__PURE__ */ jsx34(AlertCircle4, { className: "h-4 w-4" }),
11159
+ " ",
11160
+ error
11161
+ ] }),
11162
+ rejected && /* @__PURE__ */ jsxs25("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
11163
+ /* @__PURE__ */ jsx34(AlertCircle4, { className: "h-4 w-4" }),
11164
+ "UserOperation was dropped from bundler mempool. This usually means it was invalid or replaced."
11165
+ ] }),
11166
+ timedOut && /* @__PURE__ */ jsxs25("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
11167
+ /* @__PURE__ */ jsx34(AlertCircle4, { className: "h-4 w-4" }),
11168
+ "Stopped polling after ",
11169
+ Math.round(maxPollTimeMs / 1e3),
11170
+ "s. UserOperation may have been rejected by the bundler."
11171
+ ] })
11172
+ ]
11173
+ }
11174
+ );
11175
+ };
11176
+ }
11177
+ });
11178
+
10078
11179
  // src/internal/components/Hash.tsx
10079
11180
  import * as React28 from "react";
10080
- import { Copy as Copy6, ExternalLink as ExternalLink5 } from "lucide-react";
11181
+ import { Copy as Copy6, ExternalLink as ExternalLink4 } from "lucide-react";
10081
11182
  import { jsx as jsx35, jsxs as jsxs26 } from "react/jsx-runtime";
10082
11183
  function toExplorerUrl(kind, value, chain) {
10083
11184
  const base2 = chain?.blockExplorers?.default?.url;
@@ -10136,7 +11237,7 @@ var init_Hash = __esm({
10136
11237
  rel: "noreferrer noopener",
10137
11238
  className: "inline-flex items-center justify-center h-10 w-10 rounded-md hover:bg-accent text-foreground",
10138
11239
  title: "Open in explorer",
10139
- children: /* @__PURE__ */ jsx35(ExternalLink5, { className: "h-4 w-4" })
11240
+ children: /* @__PURE__ */ jsx35(ExternalLink4, { className: "h-4 w-4" })
10140
11241
  }
10141
11242
  )
10142
11243
  ] });
@@ -10167,7 +11268,7 @@ var init_TransactionsList = __esm({
10167
11268
  const baseUrl = explorerUrl.replace(/\/$/, "");
10168
11269
  const apiUrl = `${baseUrl}/api/v2/addresses/${address}/transactions?items_count=${itemsCount}`;
10169
11270
  console.log("[TransactionsList] Fetching from:", apiUrl);
10170
- const response = await fetch(apiUrl, { credentials: "include" });
11271
+ const response = await fetch(apiUrl);
10171
11272
  if (!response.ok) {
10172
11273
  throw new Error(`Failed to fetch transactions: ${response.status}`);
10173
11274
  }