@lumiapassport/ui-kit 1.14.4 → 1.14.6

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
@@ -71,6 +71,7 @@ var init_assets = __esm({
71
71
  var lumiaPassport_exports = {};
72
72
  __export(lumiaPassport_exports, {
73
73
  DEFAULT_LUMIA_PASSPORT_CONFIG: () => DEFAULT_LUMIA_PASSPORT_CONFIG,
74
+ getBlockscoutApiUrl: () => getBlockscoutApiUrl,
74
75
  getIframeUrl: () => getIframeUrl,
75
76
  getServiceUrls: () => getServiceUrls
76
77
  });
@@ -104,6 +105,15 @@ function getIframeUrl() {
104
105
  const iframeUrl = buildIframeUrl || config.services.iframeUrl || "https://auth.lumiapassport.com";
105
106
  return iframeUrl;
106
107
  }
108
+ function getBlockscoutApiUrl() {
109
+ const config = DEFAULT_LUMIA_PASSPORT_CONFIG;
110
+ const buildBlockscoutUrl = "https://beam-explorer.lumia.org/api/v2";
111
+ if (buildBlockscoutUrl) {
112
+ return buildBlockscoutUrl;
113
+ }
114
+ const explorerUrl = config.network.explorerUrl || "https://beam-explorer.lumia.org";
115
+ return `${explorerUrl.replace(/\/$/, "")}/api/v2`;
116
+ }
107
117
  var DEFAULT_LUMIA_PASSPORT_CONFIG;
108
118
  var init_lumiaPassport = __esm({
109
119
  "src/config/lumiaPassport.tsx"() {
@@ -4319,7 +4329,7 @@ var init_profile = __esm({
4319
4329
  });
4320
4330
 
4321
4331
  // src/styles/built.css
4322
- var built_default = '.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\\201C""\\201D""\\2018""\\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.lumia-scope .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 .invisible{visibility:hidden}.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 .-right-2{right:-.5rem}.lumia-scope .-top-2{top:-.5rem}.lumia-scope .-top-3{top:-.75rem}.lumia-scope .bottom-full{bottom:100%}.lumia-scope .left-0{left:0}.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 .right-0{right:0}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.lumia-scope .right-\\[var\\(--l-pass-pd\\)\\]{right:var(--l-pass-pd)}.lumia-scope .right-full{right:100%}.lumia-scope .top-0{top:0}.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-\\[var\\(--l-pass-pd\\)\\]{top:var(--l-pass-pd)}.lumia-scope .top-full{top:100%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[9998\\]{z-index:9998}.lumia-scope .z-\\[9999\\]{z-index:9999}.lumia-scope .-m-px{margin:-1px}.lumia-scope .m-0{margin:0}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-1{margin-left:.25rem;margin-right:.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-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-2{margin-right:.5rem}.lumia-scope .mr-4{margin-right:1rem}.lumia-scope .mt-0{margin-top:0}.lumia-scope .mt-1{margin-top:.25rem}.lumia-scope .mt-2{margin-top:.5rem}.lumia-scope .mt-3{margin-top:.75rem}.lumia-scope .mt-4{margin-top:1rem}.lumia-scope .mt-6{margin-top:1.5rem}.lumia-scope .mt-\\[var\\(--l-pass-gap\\)\\]{margin-top:var(--l-pass-gap)}.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 .aspect-square{aspect-ratio:1/1}.lumia-scope .size-4{width:1rem;height:1rem}.lumia-scope .size-5{width:1.25rem;height:1.25rem}.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-\\[100dvh\\]{height:100dvh}.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-\\[95dvh\\]{max-height:95dvh}.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-\\[100dvw\\]{width:100dvw}.lumia-scope .w-\\[var\\(--l-pass-maw\\)\\]{width:var(--l-pass-maw)}.lumia-scope .w-fit{width:-moz-fit-content;width:fit-content}.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-\\[256px\\]{min-width:256px}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[144px\\]{max-width:144px}.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-none{flex:none}.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-x-\\[var\\(--l-pass-gap\\)\\]{--tw-translate-x:calc(var(--l-pass-gap)*-1)}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\],.lumia-scope .-translate-y-1{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{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .-translate-y-1\\/2,.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{transform:scale(1);box-shadow:0 0 16px var(--l-pass-bg-warning)}50%{transform:scale(.97);box-shadow:0 0 4px var(--l-pass-bg-warning)}}.lumia-scope .animate-glow-warning{animation:glow-warning 2s ease infinite}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.6}}.lumia-scope .animate-pulse-warning{animation:pulse-warning 2s ease infinite}@keyframes spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-default{cursor:default}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .cursor-text{cursor:text}.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 .appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.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 .place-content-center{place-content:center}.lumia-scope .items-start{align-items:flex-start}.lumia-scope .items-end{align-items:flex-end}.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 .justify-evenly{justify-content:space-evenly}.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 .gap-\\[10px\\]{gap:10px}.lumia-scope .gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope .gap-\\[var\\(--l-pass-pd\\)\\]{gap:var(--l-pass-pd)}.lumia-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-3>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-4>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-y-0>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-6>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.lumia-scope .overflow-auto{overflow:auto}.lumia-scope .overflow-hidden{overflow:hidden}.lumia-scope .overflow-visible{overflow:visible}.lumia-scope .overflow-y-auto{overflow-y:auto}.lumia-scope .overflow-y-hidden{overflow-y:hidden}.lumia-scope .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lumia-scope .text-ellipsis{text-overflow:ellipsis}.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-normal{overflow-wrap:normal;word-break:normal}.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-\\[10px\\]{border-radius:10px}.lumia-scope .rounded-\\[5px\\]{border-radius:5px}.lumia-scope .rounded-\\[var\\(--l-pass-bdrs\\)\\]{border-radius:var(--l-pass-bdrs)}.lumia-scope .rounded-\\[var\\(--l-pass-el-bdrs\\)\\]{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .rounded-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:.5rem}.lumia-scope .rounded-md{border-radius:.375rem}.lumia-scope .rounded-sm{border-radius:.125rem}.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-\\[var\\(--l-pass-bd\\)\\]{border-color:var(--l-pass-bd)}.lumia-scope .border-\\[var\\(--l-pass-error\\)\\]{border-color:var(--l-pass-error)}.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-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-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-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-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-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-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-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-\\[\\#002c15\\]{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#081f2c\\]{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#f3ba2f\\]{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[var\\(--l-pass-bg\\)\\]{background-color:var(--l-pass-bg)}.lumia-scope .bg-\\[var\\(--l-pass-bg-error\\)\\]{background-color:var(--l-pass-bg-error)}.lumia-scope .bg-\\[var\\(--l-pass-bg-info\\)\\]{background-color:var(--l-pass-bg-info)}.lumia-scope .bg-\\[var\\(--l-pass-bg-success\\)\\]{background-color:var(--l-pass-bg-success)}.lumia-scope .bg-\\[var\\(--l-pass-bg-warning\\)\\]{background-color:var(--l-pass-bg-warning)}.lumia-scope .bg-\\[var\\(--l-pass-fg\\)\\]{background-color:var(--l-pass-fg)}.lumia-scope .bg-\\[var\\(--l-pass-overlay\\)\\]{background-color:var(--l-pass-overlay)}.lumia-scope .bg-\\[var\\(--l-pass-primary\\)\\]{background-color:var(--l-pass-primary)}.lumia-scope .bg-\\[var\\(--l-pass-secondary\\)\\]{background-color:var(--l-pass-secondary)}.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-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-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.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-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,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-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.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-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-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-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.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-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-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,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-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-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-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,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-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 .p-\\[var\\(--l-pass-pd\\)\\]{padding:var(--l-pass-pd)}.lumia-scope .px-0{padding-left:0;padding-right:0}.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-5{padding-left:1.25rem;padding-right:1.25rem}.lumia-scope .px-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.lumia-scope .px-\\[var\\(--l-pass-pd\\)\\]{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.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-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 .py-\\[10px\\]{padding-top:10px;padding-bottom:10px}.lumia-scope .py-\\[var\\(--l-pass-gap\\)\\]{padding-top:var(--l-pass-gap);padding-bottom:var(--l-pass-gap)}.lumia-scope .py-\\[var\\(--l-pass-pd\\)\\]{padding-top:var(--l-pass-pd);padding-bottom:var(--l-pass-pd)}.lumia-scope .pb-2{padding-bottom:.5rem}.lumia-scope .pb-3{padding-bottom:.75rem}.lumia-scope .pb-4{padding-bottom:1rem}.lumia-scope .pb-5{padding-bottom:1.25rem}.lumia-scope .pb-6{padding-bottom:1.5rem}.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 .pt-5{padding-top:1.25rem}.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-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-4{line-height:1rem}.lumia-scope .leading-5{line-height:1.25rem}.lumia-scope .leading-6{line-height:1.5rem}.lumia-scope .leading-8{line-height:2rem}.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-\\[\\#c3f53c\\]{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .text-\\[var\\(--l-pass-bg-error\\)\\]{color:var(--l-pass-bg-error)}.lumia-scope .text-\\[var\\(--l-pass-bg-success\\)\\]{color:var(--l-pass-bg-success)}.lumia-scope .text-\\[var\\(--l-pass-bg-warning\\)\\]{color:var(--l-pass-bg-warning)}.lumia-scope .text-\\[var\\(--l-pass-error\\)\\]{color:var(--l-pass-error)}.lumia-scope .text-\\[var\\(--l-pass-fg\\)\\]{color:var(--l-pass-fg)}.lumia-scope .text-\\[var\\(--l-pass-fg-inverted\\)\\]{color:var(--l-pass-fg-inverted)}.lumia-scope .text-\\[var\\(--l-pass-fg-muted\\)\\]{color:var(--l-pass-fg-muted)}.lumia-scope .text-\\[var\\(--l-pass-info\\)\\]{color:var(--l-pass-info)}.lumia-scope .text-\\[var\\(--l-pass-muted\\)\\]{color:var(--l-pass-muted)}.lumia-scope .text-\\[var\\(--l-pass-success\\)\\]{color:var(--l-pass-success)}.lumia-scope .text-\\[var\\(--l-pass-text-secondary\\)\\]{color:var(--l-pass-text-secondary)}.lumia-scope .text-\\[var\\(--l-pass-warning\\)\\]{color:var(--l-pass-warning)}.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-black{--tw-text-opacity:1;color:rgb(0 0 0/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-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-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-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-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-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.lumia-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.lumia-scope .text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.lumia-scope .text-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 .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.lumia-scope .opacity-50{opacity:.5}.lumia-scope .opacity-60{opacity:.6}.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-none{outline:2px solid transparent;outline-offset:2px}.lumia-scope .outline{outline-style:solid}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.lumia-scope .grayscale{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 .grayscale{--tw-grayscale:grayscale(100%)}.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-none{transition-property:none}.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{transition-timing-function:cubic-bezier(.4,0,1,1)}.lumia-scope .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lumia-scope{--l-pass-ff:var(--lumia-passport-ff,-apple-system,BlinkMacSystemFont,"Inter",system-ui,sans-serif);--l-pass-maw:var(--lumia-passport-maw,384px);--l-pass-pd:var(--lumia-passport-pd,12px);--l-pass-gap:var(--lumia-passport-gap,10px);--l-pass-bdrs:var(--lumia-passport-bdrs,20px);--l-pass-el-bdrs:var(--lumia-passport-element-bdrs,10px);--l-pass-backdrop-blur:var(--lumia-passport-backdrop-blur,10px)}.lumia-scope[data-lumia-passport-mode=light]{--l-pass-overlay:var(--lumia-passport-overlay,hsla(0,0%,100%,.8));--l-pass-bg:var(--lumia-passport-bg,#fff);--l-pass-fg:var(--lumia-passport-fg,#000);--l-pass-fg-h:var(--lumia-passport-fg-h,rgba(0,0,0,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,rgba(0,0,0,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#fff);--l-pass-fg-muted:var(--lumia-passport-fg-muted,rgba(0,0,0,.6));--l-pass-primary:var(--lumia-passport-primary,#000);--l-pass-primary-h:var(--lumia-passport-primary-h,rgba(0,0,0,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,rgba(0,0,0,.6));--l-pass-secondary:var(--lumia-passport-secondary,#e4e4e4);--l-pass-secondary-h:var(--lumia-passport-secondary-h,hsla(0,0%,89%,.8));--l-pass-secondary-a:var(--lumia-passport-secondary-a,hsla(0,0%,89%,.6));--l-pass-bd:var(--lumia-passport-bd,#c9c9c9);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#a9a9a9);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#e4e4e4);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope[data-lumia-passport-mode=dark]{--l-pass-overlay:var(--lumia-passport-overlay,rgba(0,0,0,.8));--l-pass-bg:var(--lumia-passport-bg,#1a1a1a);--l-pass-fg:var(--lumia-passport-fg,#fff);--l-pass-fg-h:var(--lumia-passport-fg-h,hsla(0,0%,100%,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,hsla(0,0%,100%,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#000);--l-pass-fg-muted:var(--lumia-passport-fg-muted,hsla(0,0%,100%,.6));--l-pass-primary:var(--lumia-passport-primary,#fff);--l-pass-primary-h:var(--lumia-passport-primary-h,hsla(0,0%,100%,.9));--l-pass-primary-a:var(--lumia-passport-primary-a,hsla(0,0%,100%,.7));--l-pass-secondary:var(--lumia-passport-secondary,#2a2a2a);--l-pass-secondary-h:var(--lumia-passport-secondary-h,rgba(42,42,42,.9));--l-pass-secondary-a:var(--lumia-passport-secondary-a,rgba(42,42,42,.7));--l-pass-bd:var(--lumia-passport-bd,#3a3a3a);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#4a4a4a);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.5));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#2a2a2a);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg-inverted));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg-inverted));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope,.lumia-scope *{margin:0;box-sizing:border-box;font-family:var(--l-pass-ff);font-optical-sizing:auto;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-ms-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope button,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6,.lumia-scope input,.lumia-scope p,.lumia-scope select,.lumia-scope textarea{font-family:var(--l-pass-ff)!important;margin:0}.lumia-scope button,.lumia-scope input,.lumia-scope select,.lumia-scope textarea{border-style:solid;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.lumia-scope .lumia-passport-button{box-shadow:0 4px 10px var(--l-pass-shadow-c),inset 0 0 0 1px var(--l-pass-bd);transition:transform .25s ease}.lumia-scope .lumia-passport-button:hover{transform:scale(1.02)}.lumia-scope .lumia-passport-button:active{transform:scale(1)}@keyframes lumia-mobile-dialog-fade-in{0%{opacity:0;transform:translateY(64px)}to{opacity:1;transform:translateY(0)}}@keyframes lumia-mobile-dialog-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(64px)}}.lumia-scope .animate-mobile-dialog-in{animation:lumia-mobile-dialog-fade-in 375ms ease}.lumia-scope .animate-mobile-dialog-out{animation:lumia-mobile-dialog-fade-out 375ms ease}@keyframes lumia-dialog-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lumia-dialog-fade-out{0%{opacity:1}to{opacity:0}}.lumia-scope .animate-dialog-in{animation:lumia-dialog-fade-in 375ms ease}.lumia-scope .animate-dialog-out{animation:lumia-dialog-fade-out 375ms ease}.lumia-scope .list-scrollbar-y{width:100%;padding-right:var(--l-pass-list-scrollbar-pd-r,0);overflow-y:auto;max-height:var(--l-pass-scrollbar-mah,300px)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar{width:4px;height:4px}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-thumb{cursor:pointer;width:4px;border-radius:2px;background-color:var(--l-pass-bd)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-track{margin-top:10px;margin-bottom:10px;background-color:transparent}.lumia-scope .noScrollbars::-webkit-scrollbar{display:none}.lumia-scope .file\\:mr-\\[var\\(--l-pass-pd\\)\\]::file-selector-button{margin-right:var(--l-pass-pd)}.lumia-scope .file\\:h-8::file-selector-button{height:2rem}.lumia-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.lumia-scope .file\\:rounded-\\[var\\(--l-pass-el-bdrs\\)\\]::file-selector-button{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-\\[var\\(--l-pass-primary\\)\\]::file-selector-button{background-color:var(--l-pass-primary)}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-\\[var\\(--l-pass-pd\\)\\]::file-selector-button{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .file\\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:text-\\[var\\(--l-pass-fg-inverted\\)\\]::file-selector-button{color:var(--l-pass-fg-inverted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::-moz-placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .focus-within\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus-within{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus-within\\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover{background-color:var(--l-pass-bg)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-primary-h\\)\\]:hover{background-color:var(--l-pass-primary-h)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-secondary-h\\)\\]:hover{background-color:var(--l-pass-secondary-h)}.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-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:text-\\[\\#c3f53c\\]:hover{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-\\[var\\(--l-pass-fg\\)\\]:hover{color:var(--l-pass-fg)}.lumia-scope .hover\\:text-\\[var\\(--l-pass-fg-h\\)\\]:hover{color:var(--l-pass-fg-h)}.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\\:underline:hover{text-decoration-line:underline}.lumia-scope .file\\:hover\\:opacity-90:hover::file-selector-button{opacity:.9}.lumia-scope .focus\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus{background-color:var(--l-pass-secondary-a)}.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-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-0: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(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-\\[2px\\]: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-transparent:focus-visible{--tw-ring-color:transparent}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active{background-color:var(--l-pass-bg)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-primary-a\\)\\]:active{background-color:var(--l-pass-primary-a)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:active{background-color:var(--l-pass-secondary-a)}.lumia-scope .active\\:text-\\[\\#c3f53c\\]:active{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .active\\:text-\\[var\\(--l-pass-fg-a\\)\\]:active{color:var(--l-pass-fg-a)}.lumia-scope .file\\:active\\:opacity-80:active::file-selector-button{opacity:.8}.lumia-scope .disabled\\:cursor-default:disabled{cursor:default}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-primary\\)\\]:hover:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:hover\\:text-\\[var\\(--l-pass-fg\\)\\]:hover:disabled{color:var(--l-pass-fg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-primary\\)\\]:active:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:active\\:text-\\[var\\(--l-pass-fg\\)\\]:active:disabled{color:var(--l-pass-fg)}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}.lumia-scope :is(.group:hover .group-hover\\:opacity-60){opacity:.6}.lumia-scope .data-\\[state\\=checked\\]\\:border-\\[var\\(--l-pass-bd-intense\\)\\][data-state=checked]{border-color:var(--l-pass-bd-intense)}.lumia-scope .data-\\[state\\=checked\\]\\:bg-\\[var\\(--l-pass-secondary\\)\\][data-state=checked]{background-color:var(--l-pass-secondary)}.lumia-scope .data-\\[state\\=checked\\]\\:text-\\[var\\(--l-pass-fg\\)\\][data-state=checked]{color:var(--l-pass-fg)}@media (min-width:640px){.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\\:text-left{text-align:left}}@media (min-width:768px){.lumia-scope .md\\:h-8{height:2rem}.lumia-scope .md\\:w-8{width:2rem}.lumia-scope .md\\:gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope .md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}}@media (prefers-color-scheme:dark){.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\\: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 :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
4332
+ var built_default = '.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"\\201C""\\201D""\\2018""\\2019";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:rgba(17,24,39,.1);--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:hsla(0,0%,100%,.1);--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.lumia-scope .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 .invisible{visibility:hidden}.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 .-right-2{right:-.5rem}.lumia-scope .-top-1{top:-.25rem}.lumia-scope .-top-2{top:-.5rem}.lumia-scope .-top-3{top:-.75rem}.lumia-scope .bottom-full{bottom:100%}.lumia-scope .left-0{left:0}.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 .right-0{right:0}.lumia-scope .right-2{right:.5rem}.lumia-scope .right-3{right:.75rem}.lumia-scope .right-4{right:1rem}.lumia-scope .right-\\[var\\(--l-pass-pd\\)\\]{right:var(--l-pass-pd)}.lumia-scope .right-full{right:100%}.lumia-scope .top-0{top:0}.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-\\[var\\(--l-pass-pd\\)\\]{top:var(--l-pass-pd)}.lumia-scope .top-full{top:100%}.lumia-scope .z-10{z-index:10}.lumia-scope .z-50{z-index:50}.lumia-scope .z-\\[9998\\]{z-index:9998}.lumia-scope .z-\\[9999\\]{z-index:9999}.lumia-scope .-m-px{margin:-1px}.lumia-scope .m-0{margin:0}.lumia-scope .-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lumia-scope .mx-1{margin-left:.25rem;margin-right:.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-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-2{margin-right:.5rem}.lumia-scope .mr-4{margin-right:1rem}.lumia-scope .mt-0{margin-top:0}.lumia-scope .mt-1{margin-top:.25rem}.lumia-scope .mt-2{margin-top:.5rem}.lumia-scope .mt-3{margin-top:.75rem}.lumia-scope .mt-4{margin-top:1rem}.lumia-scope .mt-6{margin-top:1.5rem}.lumia-scope .mt-\\[var\\(--l-pass-gap\\)\\]{margin-top:var(--l-pass-gap)}.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 .aspect-square{aspect-ratio:1/1}.lumia-scope .size-4{width:1rem;height:1rem}.lumia-scope .size-5{width:1.25rem;height:1.25rem}.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-\\[100dvh\\]{height:100dvh}.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-\\[95dvh\\]{max-height:95dvh}.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-\\[100dvw\\]{width:100dvw}.lumia-scope .w-\\[var\\(--l-pass-maw\\)\\]{width:var(--l-pass-maw)}.lumia-scope .w-fit{width:-moz-fit-content;width:fit-content}.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-\\[256px\\]{min-width:256px}.lumia-scope .max-w-2xl{max-width:42rem}.lumia-scope .max-w-\\[144px\\]{max-width:144px}.lumia-scope .max-w-\\[150px\\]{max-width:150px}.lumia-scope .max-w-\\[160px\\]{max-width:160px}.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-none{flex:none}.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-x-\\[var\\(--l-pass-gap\\)\\]{--tw-translate-x:calc(var(--l-pass-gap)*-1)}.lumia-scope .-translate-x-\\[var\\(--l-pass-gap\\)\\],.lumia-scope .-translate-y-1{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{--tw-translate-y:-0.25rem}.lumia-scope .-translate-y-1\\/2{--tw-translate-y:-50%}.lumia-scope .-translate-y-1\\/2,.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{transform:scale(1);box-shadow:0 0 16px var(--l-pass-bg-warning)}50%{transform:scale(.97);box-shadow:0 0 4px var(--l-pass-bg-warning)}}.lumia-scope .animate-glow-warning{animation:glow-warning 2s ease infinite}@keyframes pulse-warning{0%,to{opacity:1}50%{opacity:.6}}.lumia-scope .animate-pulse-warning{animation:pulse-warning 2s ease infinite}@keyframes spin{to{transform:rotate(1turn)}}.lumia-scope .animate-spin{animation:spin 1s linear infinite}.lumia-scope .cursor-default{cursor:default}.lumia-scope .cursor-not-allowed{cursor:not-allowed}.lumia-scope .cursor-pointer{cursor:pointer}.lumia-scope .cursor-text{cursor:text}.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 .appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.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 .place-content-center{place-content:center}.lumia-scope .items-start{align-items:flex-start}.lumia-scope .items-end{align-items:flex-end}.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 .justify-evenly{justify-content:space-evenly}.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 .gap-\\[10px\\]{gap:10px}.lumia-scope .gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope .gap-\\[var\\(--l-pass-pd\\)\\]{gap:var(--l-pass-pd)}.lumia-scope :is(.space-x-1>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-2>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-3>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-x-4>:not([hidden])~:not([hidden])){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.lumia-scope :is(.space-y-0>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-0\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-1\\.5>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-2>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-3>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-4>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.lumia-scope :is(.space-y-6>:not([hidden])~:not([hidden])){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.lumia-scope .overflow-auto{overflow:auto}.lumia-scope .overflow-hidden{overflow:hidden}.lumia-scope .overflow-visible{overflow:visible}.lumia-scope .overflow-y-auto{overflow-y:auto}.lumia-scope .overflow-y-hidden{overflow-y:hidden}.lumia-scope .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lumia-scope .text-ellipsis{text-overflow:ellipsis}.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-normal{overflow-wrap:normal;word-break:normal}.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-\\[10px\\]{border-radius:10px}.lumia-scope .rounded-\\[5px\\]{border-radius:5px}.lumia-scope .rounded-\\[var\\(--l-pass-bdrs\\)\\]{border-radius:var(--l-pass-bdrs)}.lumia-scope .rounded-\\[var\\(--l-pass-el-bdrs\\)\\]{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .rounded-full{border-radius:9999px}.lumia-scope .rounded-lg{border-radius:.5rem}.lumia-scope .rounded-md{border-radius:.375rem}.lumia-scope .rounded-sm{border-radius:.125rem}.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-\\[var\\(--l-pass-bd\\)\\]{border-color:var(--l-pass-bd)}.lumia-scope .border-\\[var\\(--l-pass-error\\)\\]{border-color:var(--l-pass-error)}.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-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-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-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-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-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-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.lumia-scope .border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.lumia-scope .border-sky-200{--tw-border-opacity:1;border-color:rgb(186 230 253/var(--tw-border-opacity,1))}.lumia-scope .border-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-\\[\\#002c15\\]{--tw-bg-opacity:1;background-color:rgb(0 44 21/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#081f2c\\]{--tw-bg-opacity:1;background-color:rgb(8 31 44/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[\\#f3ba2f\\]{--tw-bg-opacity:1;background-color:rgb(243 186 47/var(--tw-bg-opacity,1))}.lumia-scope .bg-\\[var\\(--l-pass-accent\\)\\]{background-color:var(--l-pass-accent)}.lumia-scope .bg-\\[var\\(--l-pass-bg\\)\\]{background-color:var(--l-pass-bg)}.lumia-scope .bg-\\[var\\(--l-pass-bg-error\\)\\]{background-color:var(--l-pass-bg-error)}.lumia-scope .bg-\\[var\\(--l-pass-bg-info\\)\\]{background-color:var(--l-pass-bg-info)}.lumia-scope .bg-\\[var\\(--l-pass-bg-success\\)\\]{background-color:var(--l-pass-bg-success)}.lumia-scope .bg-\\[var\\(--l-pass-bg-warning\\)\\]{background-color:var(--l-pass-bg-warning)}.lumia-scope .bg-\\[var\\(--l-pass-fg\\)\\]{background-color:var(--l-pass-fg)}.lumia-scope .bg-\\[var\\(--l-pass-overlay\\)\\]{background-color:var(--l-pass-overlay)}.lumia-scope .bg-\\[var\\(--l-pass-primary\\)\\]{background-color:var(--l-pass-primary)}.lumia-scope .bg-\\[var\\(--l-pass-secondary\\)\\]{background-color:var(--l-pass-secondary)}.lumia-scope .bg-\\[var\\(--l-pass-warning-bg\\)\\]{background-color:var(--l-pass-warning-bg)}.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-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-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.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-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,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-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.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-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-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-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.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-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-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,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-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-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-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.lumia-scope .bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.lumia-scope .bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,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-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 .p-\\[var\\(--l-pass-pd\\)\\]{padding:var(--l-pass-pd)}.lumia-scope .px-0{padding-left:0;padding-right:0}.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-5{padding-left:1.25rem;padding-right:1.25rem}.lumia-scope .px-6{padding-left:1.5rem;padding-right:1.5rem}.lumia-scope .px-8{padding-left:2rem;padding-right:2rem}.lumia-scope .px-\\[var\\(--l-pass-pd\\)\\]{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.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-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 .py-\\[10px\\]{padding-top:10px;padding-bottom:10px}.lumia-scope .py-\\[var\\(--l-pass-gap\\)\\]{padding-top:var(--l-pass-gap);padding-bottom:var(--l-pass-gap)}.lumia-scope .py-\\[var\\(--l-pass-pd\\)\\]{padding-top:var(--l-pass-pd);padding-bottom:var(--l-pass-pd)}.lumia-scope .pb-2{padding-bottom:.5rem}.lumia-scope .pb-3{padding-bottom:.75rem}.lumia-scope .pb-4{padding-bottom:1rem}.lumia-scope .pb-5{padding-bottom:1.25rem}.lumia-scope .pb-6{padding-bottom:1.5rem}.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 .pt-5{padding-top:1.25rem}.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-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-normal{font-weight:400}.lumia-scope .font-semibold{font-weight:600}.lumia-scope .uppercase{text-transform:uppercase}.lumia-scope .italic{font-style:italic}.lumia-scope .leading-4{line-height:1rem}.lumia-scope .leading-5{line-height:1.25rem}.lumia-scope .leading-6{line-height:1.5rem}.lumia-scope .leading-8{line-height:2rem}.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-\\[\\#c3f53c\\]{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .text-\\[var\\(--l-pass-bg-error\\)\\]{color:var(--l-pass-bg-error)}.lumia-scope .text-\\[var\\(--l-pass-bg-success\\)\\]{color:var(--l-pass-bg-success)}.lumia-scope .text-\\[var\\(--l-pass-bg-warning\\)\\]{color:var(--l-pass-bg-warning)}.lumia-scope .text-\\[var\\(--l-pass-error\\)\\]{color:var(--l-pass-error)}.lumia-scope .text-\\[var\\(--l-pass-fg\\)\\]{color:var(--l-pass-fg)}.lumia-scope .text-\\[var\\(--l-pass-fg-inverted\\)\\]{color:var(--l-pass-fg-inverted)}.lumia-scope .text-\\[var\\(--l-pass-fg-muted\\)\\]{color:var(--l-pass-fg-muted)}.lumia-scope .text-\\[var\\(--l-pass-info\\)\\]{color:var(--l-pass-info)}.lumia-scope .text-\\[var\\(--l-pass-muted\\)\\]{color:var(--l-pass-muted)}.lumia-scope .text-\\[var\\(--l-pass-success\\)\\]{color:var(--l-pass-success)}.lumia-scope .text-\\[var\\(--l-pass-text-secondary\\)\\]{color:var(--l-pass-text-secondary)}.lumia-scope .text-\\[var\\(--l-pass-warning\\)\\]{color:var(--l-pass-warning)}.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-black{--tw-text-opacity:1;color:rgb(0 0 0/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-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-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-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-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-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.lumia-scope .text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.lumia-scope .text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.lumia-scope .text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.lumia-scope .text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.lumia-scope .text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.lumia-scope .text-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 .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope .opacity-0{opacity:0}.lumia-scope .opacity-100{opacity:1}.lumia-scope .opacity-40{opacity:.4}.lumia-scope .opacity-50{opacity:.5}.lumia-scope .opacity-60{opacity:.6}.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-none{outline:2px solid transparent;outline-offset:2px}.lumia-scope .outline{outline-style:solid}.lumia-scope .blur{--tw-blur:blur(8px)}.lumia-scope .blur,.lumia-scope .grayscale{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 .grayscale{--tw-grayscale:grayscale(100%)}.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-none{transition-property:none}.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{transition-timing-function:cubic-bezier(.4,0,1,1)}.lumia-scope .ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lumia-scope{--l-pass-ff:var(--lumia-passport-ff,-apple-system,BlinkMacSystemFont,"Inter",system-ui,sans-serif);--l-pass-maw:var(--lumia-passport-maw,384px);--l-pass-pd:var(--lumia-passport-pd,12px);--l-pass-gap:var(--lumia-passport-gap,10px);--l-pass-bdrs:var(--lumia-passport-bdrs,20px);--l-pass-el-bdrs:var(--lumia-passport-element-bdrs,10px);--l-pass-backdrop-blur:var(--lumia-passport-backdrop-blur,10px)}.lumia-scope[data-lumia-passport-mode=light]{--l-pass-overlay:var(--lumia-passport-overlay,hsla(0,0%,100%,.8));--l-pass-bg:var(--lumia-passport-bg,#fff);--l-pass-fg:var(--lumia-passport-fg,#000);--l-pass-fg-h:var(--lumia-passport-fg-h,rgba(0,0,0,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,rgba(0,0,0,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#fff);--l-pass-fg-muted:var(--lumia-passport-fg-muted,rgba(0,0,0,.6));--l-pass-primary:var(--lumia-passport-primary,#000);--l-pass-primary-h:var(--lumia-passport-primary-h,rgba(0,0,0,.8));--l-pass-primary-a:var(--lumia-passport-primary-a,rgba(0,0,0,.6));--l-pass-secondary:var(--lumia-passport-secondary,#e4e4e4);--l-pass-secondary-h:var(--lumia-passport-secondary-h,hsla(0,0%,89%,.8));--l-pass-secondary-a:var(--lumia-passport-secondary-a,hsla(0,0%,89%,.6));--l-pass-bd:var(--lumia-passport-bd,#c9c9c9);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#a9a9a9);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.1));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#e4e4e4);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope[data-lumia-passport-mode=dark]{--l-pass-overlay:var(--lumia-passport-overlay,rgba(0,0,0,.8));--l-pass-bg:var(--lumia-passport-bg,#1a1a1a);--l-pass-fg:var(--lumia-passport-fg,#fff);--l-pass-fg-h:var(--lumia-passport-fg-h,hsla(0,0%,100%,.6));--l-pass-fg-a:var(--lumia-passport-fg-a,hsla(0,0%,100%,.4));--l-pass-fg-inverted:var(--lumia-passport-fg-inverted,#000);--l-pass-fg-muted:var(--lumia-passport-fg-muted,hsla(0,0%,100%,.6));--l-pass-primary:var(--lumia-passport-primary,#fff);--l-pass-primary-h:var(--lumia-passport-primary-h,hsla(0,0%,100%,.9));--l-pass-primary-a:var(--lumia-passport-primary-a,hsla(0,0%,100%,.7));--l-pass-secondary:var(--lumia-passport-secondary,#2a2a2a);--l-pass-secondary-h:var(--lumia-passport-secondary-h,rgba(42,42,42,.9));--l-pass-secondary-a:var(--lumia-passport-secondary-a,rgba(42,42,42,.7));--l-pass-bd:var(--lumia-passport-bd,#3a3a3a);--l-pass-bd-intense:var(--lumia-passport-bd-intense,#4a4a4a);--l-pass-shadow-c:var(--lumia-passport-shadow-c,rgba(0,0,0,.5));--l-pass-info:var(--lumia-passport-info,var(--l-pass-fg));--l-pass-bg-info:var(--lumia-passport-bg-info,#2a2a2a);--l-pass-success:var(--lumia-passport-success,var(--l-pass-fg-inverted));--l-pass-bg-success:var(--lumia-passport-bg-success,#21ff51);--l-pass-warning:var(--lumia-passport-warning,var(--l-pass-fg-inverted));--l-pass-bg-warning:var(--lumia-passport-bg-warning,#e9fa00);--l-pass-error:var(--lumia-passport-error,#fff);--l-pass-bg-error:var(--lumia-passport-bg-error,#d6204e)}.lumia-scope,.lumia-scope *{margin:0;box-sizing:border-box;font-family:var(--l-pass-ff);font-optical-sizing:auto;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;-ms-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lumia-scope button,.lumia-scope h1,.lumia-scope h2,.lumia-scope h3,.lumia-scope h4,.lumia-scope h5,.lumia-scope h6,.lumia-scope input,.lumia-scope p,.lumia-scope select,.lumia-scope textarea{font-family:var(--l-pass-ff)!important;margin:0}.lumia-scope button,.lumia-scope input,.lumia-scope select,.lumia-scope textarea{border-style:solid;outline:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.lumia-scope .lumia-passport-button{box-shadow:0 4px 10px var(--l-pass-shadow-c),inset 0 0 0 1px var(--l-pass-bd);transition:transform .25s ease}.lumia-scope .lumia-passport-button:hover{transform:scale(1.02)}.lumia-scope .lumia-passport-button:active{transform:scale(1)}@keyframes lumia-mobile-dialog-fade-in{0%{opacity:0;transform:translateY(64px)}to{opacity:1;transform:translateY(0)}}@keyframes lumia-mobile-dialog-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(64px)}}.lumia-scope .animate-mobile-dialog-in{animation:lumia-mobile-dialog-fade-in 375ms ease}.lumia-scope .animate-mobile-dialog-out{animation:lumia-mobile-dialog-fade-out 375ms ease}@keyframes lumia-dialog-fade-in{0%{opacity:0}to{opacity:1}}@keyframes lumia-dialog-fade-out{0%{opacity:1}to{opacity:0}}.lumia-scope .animate-dialog-in{animation:lumia-dialog-fade-in 375ms ease}.lumia-scope .animate-dialog-out{animation:lumia-dialog-fade-out 375ms ease}.lumia-scope .list-scrollbar-y{width:100%;padding-right:var(--l-pass-list-scrollbar-pd-r,0);overflow-y:auto;max-height:var(--l-pass-scrollbar-mah,300px)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar{width:4px;height:4px}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-thumb{cursor:pointer;width:4px;border-radius:2px;background-color:var(--l-pass-bd)}.lumia-scope .list-scrollbar-y::-webkit-scrollbar-track{margin-top:10px;margin-bottom:10px;background-color:transparent}.lumia-scope .noScrollbars::-webkit-scrollbar{display:none}.lumia-scope .file\\:mr-\\[var\\(--l-pass-pd\\)\\]::file-selector-button{margin-right:var(--l-pass-pd)}.lumia-scope .file\\:h-8::file-selector-button{height:2rem}.lumia-scope .file\\:cursor-pointer::file-selector-button{cursor:pointer}.lumia-scope .file\\:rounded-\\[var\\(--l-pass-el-bdrs\\)\\]::file-selector-button{border-radius:var(--l-pass-el-bdrs)}.lumia-scope .file\\:border-0::file-selector-button{border-width:0}.lumia-scope .file\\:bg-\\[var\\(--l-pass-primary\\)\\]::file-selector-button{background-color:var(--l-pass-primary)}.lumia-scope .file\\:bg-transparent::file-selector-button{background-color:transparent}.lumia-scope .file\\:px-\\[var\\(--l-pass-pd\\)\\]::file-selector-button{padding-left:var(--l-pass-pd);padding-right:var(--l-pass-pd)}.lumia-scope .file\\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.lumia-scope .file\\:font-medium::file-selector-button{font-weight:500}.lumia-scope .file\\:text-\\[var\\(--l-pass-fg-inverted\\)\\]::file-selector-button{color:var(--l-pass-fg-inverted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::-moz-placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .placeholder\\:text-\\[var\\(--l-pass-fg-muted\\)\\]::placeholder{color:var(--l-pass-fg-muted)}.lumia-scope .focus-within\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus-within{background-color:var(--l-pass-secondary-a)}.lumia-scope .focus-within\\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover{background-color:var(--l-pass-bg)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-primary-h\\)\\]:hover{background-color:var(--l-pass-primary-h)}.lumia-scope .hover\\:bg-\\[var\\(--l-pass-secondary-h\\)\\]:hover{background-color:var(--l-pass-secondary-h)}.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-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.lumia-scope .hover\\:text-\\[\\#c3f53c\\]:hover{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .hover\\:text-\\[var\\(--l-pass-fg\\)\\]:hover{color:var(--l-pass-fg)}.lumia-scope .hover\\:text-\\[var\\(--l-pass-fg-h\\)\\]:hover{color:var(--l-pass-fg-h)}.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\\:underline:hover{text-decoration-line:underline}.lumia-scope .file\\:hover\\:opacity-90:hover::file-selector-button{opacity:.9}.lumia-scope .focus\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:focus{background-color:var(--l-pass-secondary-a)}.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-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-0: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(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-\\[2px\\]: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-transparent:focus-visible{--tw-ring-color:transparent}.lumia-scope .focus-visible\\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px}.lumia-scope .active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active{background-color:var(--l-pass-bg)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-primary-a\\)\\]:active{background-color:var(--l-pass-primary-a)}.lumia-scope .active\\:bg-\\[var\\(--l-pass-secondary-a\\)\\]:active{background-color:var(--l-pass-secondary-a)}.lumia-scope .active\\:text-\\[\\#c3f53c\\]:active{--tw-text-opacity:1;color:rgb(195 245 60/var(--tw-text-opacity,1))}.lumia-scope .active\\:text-\\[var\\(--l-pass-fg-a\\)\\]:active{color:var(--l-pass-fg-a)}.lumia-scope .file\\:active\\:opacity-80:active::file-selector-button{opacity:.8}.lumia-scope .disabled\\:cursor-default:disabled{cursor:default}.lumia-scope .disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.lumia-scope .disabled\\:opacity-50:disabled{opacity:.5}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-bg\\)\\]:hover:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:hover\\:bg-\\[var\\(--l-pass-primary\\)\\]:hover:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:hover\\:text-\\[var\\(--l-pass-fg\\)\\]:hover:disabled{color:var(--l-pass-fg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-bg\\)\\]:active:disabled{background-color:var(--l-pass-bg)}.lumia-scope .disabled\\:active\\:bg-\\[var\\(--l-pass-primary\\)\\]:active:disabled{background-color:var(--l-pass-primary)}.lumia-scope .disabled\\:active\\:text-\\[var\\(--l-pass-fg\\)\\]:active:disabled{color:var(--l-pass-fg)}.lumia-scope :is(.group:hover .group-hover\\:opacity-100){opacity:1}.lumia-scope :is(.group:hover .group-hover\\:opacity-60){opacity:.6}.lumia-scope .data-\\[state\\=checked\\]\\:border-\\[var\\(--l-pass-bd-intense\\)\\][data-state=checked]{border-color:var(--l-pass-bd-intense)}.lumia-scope .data-\\[state\\=checked\\]\\:bg-\\[var\\(--l-pass-secondary\\)\\][data-state=checked]{background-color:var(--l-pass-secondary)}.lumia-scope .data-\\[state\\=checked\\]\\:text-\\[var\\(--l-pass-fg\\)\\][data-state=checked]{color:var(--l-pass-fg)}@media (min-width:640px){.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\\:text-left{text-align:left}}@media (min-width:768px){.lumia-scope .md\\:h-8{height:2rem}.lumia-scope .md\\:w-8{width:2rem}.lumia-scope .md\\:gap-\\[var\\(--l-pass-gap\\)\\]{gap:var(--l-pass-gap)}.lumia-scope .md\\:py-1{padding-top:.25rem;padding-bottom:.25rem}}@media (prefers-color-scheme:dark){.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\\: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 :is(.\\[\\&_svg\\]\\:shrink-0 svg){flex-shrink:0}';
4323
4333
 
4324
4334
  // src/context/LumiaPassportContext.tsx
4325
4335
  init_lumiaPassport();
@@ -4328,15 +4338,15 @@ import { initSdkErrorTracking } from "@lumiapassport/core/internal/error-trackin
4328
4338
  import { merge as merge2 } from "lodash-es";
4329
4339
  import {
4330
4340
  createContext,
4331
- useCallback as useCallback19,
4341
+ useCallback as useCallback20,
4332
4342
  useContext,
4333
4343
  useEffect as useEffect33,
4334
- useMemo as useMemo4,
4335
- useRef as useRef12
4344
+ useMemo as useMemo5,
4345
+ useRef as useRef13
4336
4346
  } from "react";
4337
4347
 
4338
4348
  // src/context/LumiaPassportSessionContext.tsx
4339
- import { Fragment as Fragment18 } from "react";
4349
+ import { Fragment as Fragment19 } from "react";
4340
4350
  import { create as create6 } from "zustand";
4341
4351
 
4342
4352
  // src/internal/components/BalanceFeedProvider/BalanceFeedProvider.tsx
@@ -4352,12 +4362,16 @@ import { create } from "zustand";
4352
4362
  init_assets();
4353
4363
  import { Key as Key2, Mail as Mail2, Wallet2 as Wallet22 } from "lucide-react";
4354
4364
  var LOCAL_COLOR_MODE_KEY = "lumia-passport-theme";
4355
- var DEFAULT_AUTH_MENU_HEIGHT = 253;
4365
+ var DEFAULT_AUTH_MENU_HEIGHT = 337;
4356
4366
  var DEFAULT_MAIN_MENU_HEIGHT = 90;
4357
4367
  var DEFAULT_SETTINGS_MENU_HEIGHT = 346;
4358
4368
  var MAX_CONTENT_HEIGHT = 640;
4359
4369
  var MAIN_DIALOG_ANIMATION_SPEED = 375;
4360
4370
  var Y_ANIMATION_SETUP = { duration: 0.15, ease: "easeInOut", height: { duration: 0.375 } };
4371
+ var BLOCKSCOUT_QUERY_STALE_TIME = 30 * 1e3;
4372
+ var BLOCKSCOUT_QUERY_GC_TIME = 5 * 60 * 1e3;
4373
+ var BLOCKSCOUT_REFRESH_DEBOUNCE = 2e3;
4374
+ var IPFS_GATEWAY = "https://ipfs.io/ipfs/";
4361
4375
  var PROVIDERS_META2 = {
4362
4376
  passkey: { name: "Passkey", icon: Key2, description: "Biometric authentication" },
4363
4377
  email: { name: "Email", icon: Mail2, description: "Email verification" },
@@ -4369,23 +4383,23 @@ var PROVIDERS_META2 = {
4369
4383
  };
4370
4384
 
4371
4385
  // src/internal/hooks/useLayoutDataStore.ts
4372
- var PageKey = /* @__PURE__ */ ((PageKey2) => {
4373
- PageKey2["AUTH"] = "auth";
4374
- PageKey2["TERMS_OF_SERVICE"] = "terms-of-service";
4375
- PageKey2["MAIN_MENU"] = "main-menu";
4376
- PageKey2["SETTINGS"] = "settings";
4377
- PageKey2["SEND"] = "send";
4378
- PageKey2["RECEIVE"] = "receive";
4379
- PageKey2["BUY"] = "buy";
4380
- PageKey2["KYC"] = "kyc";
4381
- PageKey2["TRANSACTIONS"] = "transactions";
4382
- PageKey2["ASSETS"] = "assets";
4383
- PageKey2["MANAGE_WALLET"] = "manage-wallet";
4384
- PageKey2["UNLINK_PROVIDER"] = "unlink-provider";
4385
- PageKey2["SECURITY"] = "security";
4386
- PageKey2["KEYSARE_BACKUP"] = "keysare-backup";
4387
- PageKey2["KEYSHARE_RESTORE"] = "keyshare-restore";
4388
- return PageKey2;
4386
+ var PageKey = /* @__PURE__ */ ((PageKey4) => {
4387
+ PageKey4["AUTH"] = "auth";
4388
+ PageKey4["TERMS_OF_SERVICE"] = "terms-of-service";
4389
+ PageKey4["MAIN_MENU"] = "main-menu";
4390
+ PageKey4["SETTINGS"] = "settings";
4391
+ PageKey4["SEND"] = "send";
4392
+ PageKey4["RECEIVE"] = "receive";
4393
+ PageKey4["BUY"] = "buy";
4394
+ PageKey4["KYC"] = "kyc";
4395
+ PageKey4["TRANSACTIONS"] = "transactions";
4396
+ PageKey4["ASSETS"] = "assets";
4397
+ PageKey4["MANAGE_WALLET"] = "manage-wallet";
4398
+ PageKey4["UNLINK_PROVIDER"] = "unlink-provider";
4399
+ PageKey4["SECURITY"] = "security";
4400
+ PageKey4["KEYSARE_BACKUP"] = "keysare-backup";
4401
+ PageKey4["KEYSHARE_RESTORE"] = "keyshare-restore";
4402
+ return PageKey4;
4389
4403
  })(PageKey || {});
4390
4404
  var useLayoutDataStore = create((set) => ({
4391
4405
  page: null,
@@ -4397,6 +4411,7 @@ var useLayoutDataStore = create((set) => ({
4397
4411
  balance: { decimals: 18, formatted: "0.0", symbol: "LUMIA", value: BigInt(0) },
4398
4412
  mainPageHeight: DEFAULT_MAIN_MENU_HEIGHT,
4399
4413
  settingsNotifications: [],
4414
+ isWalletLinking: false,
4400
4415
  setPage: (page) => set({ page }),
4401
4416
  setPageParams: (pageOptions) => set({ pageParams: pageOptions }),
4402
4417
  setCryptoRate: (lumiaRate) => set({ cryptoRate: lumiaRate }),
@@ -4414,7 +4429,8 @@ var useLayoutDataStore = create((set) => ({
4414
4429
  }
4415
4430
  const filtered = prev.settingsNotifications.filter((n) => n.id !== notification.id);
4416
4431
  return { settingsNotifications: filtered };
4417
- })
4432
+ }),
4433
+ setIsWalletLinking: (isWalletLinking) => set({ isWalletLinking })
4418
4434
  }));
4419
4435
 
4420
4436
  // src/internal/components/BalanceFeedProvider/BalanceFeedProvider.tsx
@@ -4510,7 +4526,7 @@ import { useEffect as useEffect31 } from "react";
4510
4526
  // package.json
4511
4527
  var package_default = {
4512
4528
  name: "@lumiapassport/ui-kit",
4513
- version: "1.14.3",
4529
+ version: "1.14.6",
4514
4530
  description: "React UI components and hooks for Lumia Passport authentication and Account Abstraction",
4515
4531
  type: "module",
4516
4532
  main: "./dist/index.cjs",
@@ -4743,6 +4759,15 @@ Button.displayName = "Button";
4743
4759
 
4744
4760
  // src/internal/components/Footer/Footer.tsx
4745
4761
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
4762
+ function Version({ className }) {
4763
+ return /* @__PURE__ */ jsx4(
4764
+ "span",
4765
+ {
4766
+ className: cn("font-mono text-[10px] text-[var(--l-pass-fg-muted)]", className),
4767
+ children: `v${package_default.version}`
4768
+ }
4769
+ );
4770
+ }
4746
4771
  function Footer() {
4747
4772
  const qc = useQueryClient();
4748
4773
  const { callbacks } = useLumiaPassportConfig();
@@ -4781,7 +4806,7 @@ function Footer() {
4781
4806
  "div",
4782
4807
  {
4783
4808
  style: { borderTop: "1px solid var(--l-pass-bd)" },
4784
- className: cn("w-full flex flex-col gap-1 items-center p-[var(--l-pass-pd)] pb-5"),
4809
+ className: "w-full flex flex-col items-center p-[var(--l-pass-pd)] pb-5",
4785
4810
  children: [
4786
4811
  /* @__PURE__ */ jsxs3("div", { className: "w-full flex items-center justify-between", children: [
4787
4812
  /* @__PURE__ */ jsxs3(
@@ -4823,9 +4848,9 @@ function Footer() {
4823
4848
  isDisconnecting ? /* @__PURE__ */ jsx4(Loader, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx4(LogOut, { className: "w-4 h-4" })
4824
4849
  ]
4825
4850
  }
4826
- ) : /* @__PURE__ */ jsx4("span", { className: "font-mono text-[10px] text-[var(--l-pass-fg-muted)]", children: `v${package_default.version}` })
4851
+ ) : /* @__PURE__ */ jsx4(Version, {})
4827
4852
  ] }),
4828
- !!address && /* @__PURE__ */ jsx4("span", { className: "font-mono text-[10px] text-[var(--l-pass-fg-muted)]", children: `v${package_default.version}` })
4853
+ !!address && /* @__PURE__ */ jsx4(Version, { className: "block w-fit mt-1" })
4829
4854
  ]
4830
4855
  }
4831
4856
  );
@@ -5478,8 +5503,34 @@ DialogDescription.displayName = DialogPrimitive.Description.displayName;
5478
5503
  import { jsx as jsx13 } from "react/jsx-runtime";
5479
5504
  var VisuallyHidden = ({ children }) => /* @__PURE__ */ jsx13("span", { className: "sr-only absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0", children });
5480
5505
 
5506
+ // src/internal/hooks/useListenIframeAuthEvents.ts
5507
+ import { useCallback, useEffect as useEffect3 } from "react";
5508
+ function useListenIframeAuthEvents() {
5509
+ const setPage = useLayoutDataStore((state) => state.setPage);
5510
+ const setIsIframeReady = useLumiaPassportSession((state) => state.setIsIframeReady);
5511
+ const handleIframeMessage = useCallback(
5512
+ (event) => {
5513
+ if (event.data?.type === "LUMIA_PASSPORT_IFRAME_READY") {
5514
+ console.log("[ IFRAME MESSAGE CACTHED ] Iframe is ready");
5515
+ setIsIframeReady(true);
5516
+ } else if (event.data?.type === "LUMIA_PASSPORT_SHOW_IFRAME") {
5517
+ console.log("[ IFRAME MESSAGE CACTHED ] Consent screen shown - hiding auth modal");
5518
+ } else if (event.data?.type === "LUMIA_PASSPORT_HIDE_IFRAME") {
5519
+ console.log("[ IFRAME MESSAGE CACTHED ] Consent screen hidden");
5520
+ } else if (event.data?.type === "KEYSHARE_RECOVERY_NEEDED") {
5521
+ console.log("[ IFRAME MESSAGE CACTHED] recovery neede");
5522
+ }
5523
+ },
5524
+ [setPage, setIsIframeReady]
5525
+ );
5526
+ useEffect3(() => {
5527
+ window.addEventListener("message", handleIframeMessage);
5528
+ return () => window.removeEventListener("message", handleIframeMessage);
5529
+ }, [handleIframeMessage]);
5530
+ }
5531
+
5481
5532
  // src/internal/hooks/useAutoConnect.ts
5482
- import { useCallback, useEffect as useEffect3, useRef as useRef2 } from "react";
5533
+ import { useCallback as useCallback2, useEffect as useEffect4, useRef as useRef2 } from "react";
5483
5534
  function useAutoConnect() {
5484
5535
  const {
5485
5536
  config: { current: config },
@@ -5499,7 +5550,7 @@ function useAutoConnect() {
5499
5550
  setIsIframeReady,
5500
5551
  setIsLoading
5501
5552
  } = useLumiaPassportSession();
5502
- const createSessionWithKeyshare = useCallback(
5553
+ const createSessionWithKeyshare = useCallback2(
5503
5554
  async (userId, hasServerKeyshare, isNewUser) => {
5504
5555
  try {
5505
5556
  try {
@@ -5534,7 +5585,7 @@ function useAutoConnect() {
5534
5585
  [usePaymaster, setStatus, callbacks]
5535
5586
  );
5536
5587
  const autoConnectAttemptedRef = useRef2(false);
5537
- useEffect3(() => {
5588
+ useEffect4(() => {
5538
5589
  if (autoConnectAttemptedRef.current) return;
5539
5590
  setIsLoading(true);
5540
5591
  const tryAutoConnect = async (attempt) => {
@@ -5656,14 +5707,13 @@ function useAutoConnect() {
5656
5707
 
5657
5708
  // src/internal/hooks/useBackupStatusChanges.ts
5658
5709
  import { useMutation as useMutation2 } from "@tanstack/react-query";
5659
- import { useEffect as useEffect4 } from "react";
5710
+ import { useEffect as useEffect5 } from "react";
5660
5711
  init_vaultClient();
5661
5712
  function useBackupStatusChanges() {
5662
5713
  const setHasServerVault = useLumiaPassportSession((st) => st.setHasServerVault);
5663
5714
  const { mutate: handleBackupStatusChanged } = useMutation2({
5664
5715
  mutationFn: async (event) => {
5665
5716
  const customEvent = event;
5666
- console.log("[BACKUP STATUS] changed:", customEvent.detail);
5667
5717
  return await getShareRecoveryStats();
5668
5718
  },
5669
5719
  onSuccess: (stats) => {
@@ -5680,7 +5730,7 @@ function useBackupStatusChanges() {
5680
5730
  console.warn("[BACKUP STATUS] Failed to fetch initial vault status:", error);
5681
5731
  }
5682
5732
  });
5683
- useEffect4(() => {
5733
+ useEffect5(() => {
5684
5734
  window.addEventListener("lumia-passport-backup-status-changed", handleBackupStatusChanged);
5685
5735
  return () => {
5686
5736
  window.removeEventListener("lumia-passport-backup-status-changed", handleBackupStatusChanged);
@@ -5689,7 +5739,7 @@ function useBackupStatusChanges() {
5689
5739
  }
5690
5740
 
5691
5741
  // src/internal/hooks/useBackupWarning.ts
5692
- import { useEffect as useEffect5, useRef as useRef3 } from "react";
5742
+ import { useEffect as useEffect6, useRef as useRef3 } from "react";
5693
5743
  var WARNING_TIMEOUT_MS = 24e3;
5694
5744
  function useBackupWarning() {
5695
5745
  const config = useLumiaPassportConfig().config;
@@ -5698,7 +5748,7 @@ function useBackupWarning() {
5698
5748
  const page = useLayoutDataStore((st) => st.page);
5699
5749
  const setPage = useLayoutDataStore((st) => st.setPage);
5700
5750
  const timeoutRef = useRef3(null);
5701
- useEffect5(() => {
5751
+ useEffect6(() => {
5702
5752
  if (timeoutRef.current) {
5703
5753
  clearTimeout(timeoutRef.current);
5704
5754
  timeoutRef.current = null;
@@ -5720,7 +5770,7 @@ function useBackupWarning() {
5720
5770
 
5721
5771
  // src/internal/hooks/useCheckVaultStatus.ts
5722
5772
  import { useMutation as useMutation3 } from "@tanstack/react-query";
5723
- import { useEffect as useEffect6 } from "react";
5773
+ import { useEffect as useEffect7 } from "react";
5724
5774
  init_vaultClient();
5725
5775
  function useCheckVaultStatus() {
5726
5776
  const address = useLumiaPassportSession((st) => st.address);
@@ -5739,7 +5789,7 @@ function useCheckVaultStatus() {
5739
5789
  setHasServerVault(false);
5740
5790
  }
5741
5791
  });
5742
- useEffect6(() => {
5792
+ useEffect7(() => {
5743
5793
  if (!address) return setHasServerVault(false);
5744
5794
  checkVaultStatus();
5745
5795
  }, [address, checkVaultStatus]);
@@ -5747,12 +5797,12 @@ function useCheckVaultStatus() {
5747
5797
 
5748
5798
  // src/internal/hooks/useDetectMaxScrollHeight.ts
5749
5799
  import { debounce } from "lodash-es";
5750
- import { useCallback as useCallback2, useEffect as useEffect7 } from "react";
5800
+ import { useCallback as useCallback3, useEffect as useEffect8 } from "react";
5751
5801
  var DEBOUNCE_DELAY = 50;
5752
5802
  function useDetectMaxScrollHeight() {
5753
5803
  const setIsMobileView = useLayoutStore((state) => state.setIsMobileView);
5754
5804
  const setMaxScrollHeight = useLayoutStore((state) => state.setMaxScrollHeight);
5755
- const onResize = useCallback2(
5805
+ const onResize = useCallback3(
5756
5806
  debounce(({ width, height }) => {
5757
5807
  const limContentHeight = height * 0.92 - 116 - 72;
5758
5808
  setIsMobileView(width < height && (width < 475 || limContentHeight <= MAX_CONTENT_HEIGHT));
@@ -5760,7 +5810,7 @@ function useDetectMaxScrollHeight() {
5760
5810
  }, DEBOUNCE_DELAY),
5761
5811
  [setMaxScrollHeight, setIsMobileView]
5762
5812
  );
5763
- useEffect7(() => {
5813
+ useEffect8(() => {
5764
5814
  const obs = new ResizeObserver(([entry]) => onResize(entry.contentRect));
5765
5815
  const doc = window.document.getElementsByTagName("html")[0];
5766
5816
  if (doc) obs.observe(doc);
@@ -5769,13 +5819,38 @@ function useDetectMaxScrollHeight() {
5769
5819
  }
5770
5820
 
5771
5821
  // src/internal/hooks/usePageMapper.tsx
5772
- import { useCallback as useCallback16, useEffect as useEffect28 } from "react";
5822
+ import { useCallback as useCallback17, useEffect as useEffect28 } from "react";
5773
5823
 
5774
5824
  // src/internal/components/AuthMenu/AuthMenu.tsx
5775
5825
  import { AnimatePresence, motion } from "framer-motion";
5776
- import { Loader as Loader5 } from "lucide-react";
5826
+ import { AlertTriangle as AlertTriangle2, Loader as Loader5 } from "lucide-react";
5777
5827
  import { useEffect as useEffect11, useMemo } from "react";
5778
5828
 
5829
+ // src/internal/components/ui/highlight.tsx
5830
+ import { jsx as jsx14 } from "react/jsx-runtime";
5831
+ var CARD_STYLES = {
5832
+ info: "text-[var(--l-pass-info)] bg-[var(--l-pass-bg-info)]",
5833
+ success: "text-[var(--l-pass-success)] bg-[var(--l-pass-bg-success)]",
5834
+ warning: "text-[var(--l-pass-warning)] bg-[var(--l-pass-bg-warning)]",
5835
+ error: "text-[var(--l-pass-error)] bg-[var(--l-pass-bg-error)]"
5836
+ };
5837
+ function Highlight(props) {
5838
+ const { type = "info", children, className } = props;
5839
+ return /* @__PURE__ */ jsx14(
5840
+ "div",
5841
+ {
5842
+ className: cn(
5843
+ "w-full text-xs rounded-[var(--l-pass-el-bdrs)] p-[var(--l-pass-pd)]",
5844
+ "whitespace-pre-line",
5845
+ type === "error" ? "break-all" : "break-normal",
5846
+ CARD_STYLES[type],
5847
+ className
5848
+ ),
5849
+ children
5850
+ }
5851
+ );
5852
+ }
5853
+
5779
5854
  // src/internal/components/AuthMenu/AuthFailedStep.tsx
5780
5855
  import { AlertTriangle, Cross } from "lucide-react";
5781
5856
 
@@ -5788,68 +5863,58 @@ var useAuthStore = create3((set) => ({
5788
5863
  expiresIn: null,
5789
5864
  codeSendError: null,
5790
5865
  passkeyStatus: "idle",
5791
- passkeyError: null,
5792
- failedMessage: null,
5793
5866
  failedType: "general",
5794
- verificationError: null,
5795
5867
  setStep: (step) => set({ step }),
5796
- setAlert: (alert2) => set({ alert: alert2 }),
5797
5868
  setEmail: (email) => set({ email }),
5798
5869
  setExpiresIn: (expiresIn) => set({ expiresIn }),
5799
- setCodeSendError: (error) => set({ codeSendError: error }),
5800
5870
  setPasskeyStatus: (status) => set({ passkeyStatus: status }),
5801
- setPasskeyError: (error) => set({ passkeyError: error }),
5802
- setFailedMessage: (message) => set({ failedMessage: message }),
5803
- setFailedType: (type) => set({ failedType: type }),
5804
- setVerificationError: (error) => set({ verificationError: error })
5871
+ setAlert: (alert2) => set({ alert: alert2 }),
5872
+ setFailedType: (type) => set({ failedType: type })
5805
5873
  }));
5806
5874
 
5807
5875
  // src/internal/components/AuthMenu/AuthFailedStep.tsx
5808
- import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
5876
+ import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
5809
5877
  function AuthFailedStep() {
5810
5878
  const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
5811
- const { failedMessage, failedType, setStep, setFailedMessage, setFailedType } = useAuthStore();
5879
+ const { failedType, setStep, setFailedType, setAlert } = useAuthStore();
5812
5880
  const isCritical = failedType === "critical" || failedType === "config";
5813
5881
  return /* @__PURE__ */ jsxs12("div", { className: "w-full flex flex-col text-center gap-4 p-4", children: [
5814
- /* @__PURE__ */ jsxs12(
5882
+ /* @__PURE__ */ jsx15(
5815
5883
  "div",
5816
5884
  {
5817
5885
  className: cn(
5818
5886
  "w-full flex flex-col p-2 gap-2 rounded-[var(--l-pass-el-bdrs)]",
5819
5887
  isCritical ? "text-[var(--l-pass-error)] bg-[var(--l-pass-bg-error)]" : "text-[var(--l-pass-warning)] bg-[var(--l-pass-bg-warning)]"
5820
5888
  ),
5821
- children: [
5822
- /* @__PURE__ */ jsxs12("div", { className: "w-full flex items-center justify-center gap-2", children: [
5823
- isCritical ? /* @__PURE__ */ jsx14(AlertTriangle, { className: "w-5 h-5 text-[var(--l-pass-error)]" }) : /* @__PURE__ */ jsx14(Cross, { className: "w-5 h-5 text-[var(--l-pass-warning)]" }),
5824
- /* @__PURE__ */ jsx14("span", { className: "text-center block text-xl font-bold", children: failedType === "config" ? "Configuration Error" : failedType === "critical" ? "Critical Error" : "Failed" })
5825
- ] }),
5826
- failedMessage && /* @__PURE__ */ jsx14("span", { className: "text-center block text-sm whitespace-pre-line leading-relaxed", children: failedMessage })
5827
- ]
5889
+ children: /* @__PURE__ */ jsxs12("div", { className: "w-full flex items-center justify-center gap-2", children: [
5890
+ isCritical ? /* @__PURE__ */ jsx15(AlertTriangle, { className: "w-5 h-5 text-[var(--l-pass-error)]" }) : /* @__PURE__ */ jsx15(Cross, { className: "w-5 h-5 text-[var(--l-pass-warning)]" }),
5891
+ /* @__PURE__ */ jsx15("span", { className: "text-center block text-xl font-bold", children: failedType === "config" ? "Configuration Error" : failedType === "critical" ? "Critical Error" : "Failed" })
5892
+ ] })
5828
5893
  }
5829
5894
  ),
5830
5895
  failedType === "config" && /* @__PURE__ */ jsxs12("div", { className: "p-2 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-info)]", children: [
5831
- /* @__PURE__ */ jsx14("div", { className: "text-sm font-medium text-[var(--l-pass-info)] mb-2", children: "To fix this issue:" }),
5896
+ /* @__PURE__ */ jsx15("div", { className: "text-sm font-medium text-[var(--l-pass-info)] mb-2", children: "To fix this issue:" }),
5832
5897
  /* @__PURE__ */ jsxs12("ul", { className: "text-xs text-[var(--l-pass-info)] text-left space-y-1 list-disc list-inside", children: [
5833
- /* @__PURE__ */ jsx14("li", { children: "Contact your project administrator" }),
5834
- /* @__PURE__ */ jsx14("li", { children: "Verify projectId is correctly configured" }),
5835
- /* @__PURE__ */ jsx14("li", { children: "Check project metadata on the server" })
5898
+ /* @__PURE__ */ jsx15("li", { children: "Contact your project administrator" }),
5899
+ /* @__PURE__ */ jsx15("li", { children: "Verify projectId is correctly configured" }),
5900
+ /* @__PURE__ */ jsx15("li", { children: "Check project metadata on the server" })
5836
5901
  ] })
5837
5902
  ] }),
5838
5903
  failedType === "critical" && /* @__PURE__ */ jsxs12("div", { className: "p-2 rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-error)] border", children: [
5839
- /* @__PURE__ */ jsx14("div", { className: "text-sm font-semibold text-[var(--l-pass-error)] mb-2", children: "What to do next:" }),
5904
+ /* @__PURE__ */ jsx15("div", { className: "text-sm font-semibold text-[var(--l-pass-error)] mb-2", children: "What to do next:" }),
5840
5905
  /* @__PURE__ */ jsxs12("ul", { className: "text-xs text-[var(--l-pass-error)] text-left space-y-1 list-disc list-inside", children: [
5841
- /* @__PURE__ */ jsx14("li", { children: "Contact support immediately" }),
5842
- /* @__PURE__ */ jsx14("li", { children: "Provide your projectId and error details" }),
5843
- /* @__PURE__ */ jsx14("li", { children: "You may need to create a new account" })
5906
+ /* @__PURE__ */ jsx15("li", { children: "Contact support immediately" }),
5907
+ /* @__PURE__ */ jsx15("li", { children: "Provide your projectId and error details" }),
5908
+ /* @__PURE__ */ jsx15("li", { children: "You may need to create a new account" })
5844
5909
  ] })
5845
5910
  ] }),
5846
- /* @__PURE__ */ jsx14("div", { className: "flex flex-col gap-2", children: /* @__PURE__ */ jsx14(
5911
+ /* @__PURE__ */ jsx15("div", { className: "flex flex-col gap-2", children: /* @__PURE__ */ jsx15(
5847
5912
  Button,
5848
5913
  {
5849
5914
  size: "large",
5850
5915
  onClick: () => {
5851
5916
  setStep("signin");
5852
- setFailedMessage("");
5917
+ setAlert(null);
5853
5918
  setFailedType("general");
5854
5919
  setIsLoading(false);
5855
5920
  },
@@ -5868,7 +5933,7 @@ init_profile();
5868
5933
 
5869
5934
  // src/internal/components/ui/input.tsx
5870
5935
  import React2, { useImperativeHandle, useRef as useRef4 } from "react";
5871
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
5936
+ import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
5872
5937
  var Input = React2.forwardRef((props, ref) => {
5873
5938
  const { className, disabled, error, Icon, element, ...inputProps } = props;
5874
5939
  const internalRef = useRef4(null);
@@ -5890,8 +5955,8 @@ var Input = React2.forwardRef((props, ref) => {
5890
5955
  internalRef.current?.focus();
5891
5956
  },
5892
5957
  children: [
5893
- Icon && /* @__PURE__ */ jsx15("div", { className: "flex flex-none items-center justify-center w-6 h-6 p-1", children: /* @__PURE__ */ jsx15(Icon, { width: 16, height: 16, className: "text-[var(--l-pass-fg)]" }) }),
5894
- /* @__PURE__ */ jsx15(
5958
+ Icon && /* @__PURE__ */ jsx16("div", { className: "flex flex-none items-center justify-center w-6 h-6 p-1", children: /* @__PURE__ */ jsx16(Icon, { width: 16, height: 16, className: "text-[var(--l-pass-fg)]" }) }),
5959
+ /* @__PURE__ */ jsx16(
5895
5960
  "input",
5896
5961
  {
5897
5962
  ref: internalRef,
@@ -5910,13 +5975,13 @@ var Input = React2.forwardRef((props, ref) => {
5910
5975
  ]
5911
5976
  }
5912
5977
  ),
5913
- !!error?.length && /* @__PURE__ */ jsx15("span", { className: "block text-[var(--l-pass-error)]", children: error })
5978
+ !!error?.length && /* @__PURE__ */ jsx16("span", { className: "block text-[var(--l-pass-error)]", children: error })
5914
5979
  ] });
5915
5980
  });
5916
5981
  Input.displayName = "Input";
5917
5982
 
5918
5983
  // src/internal/components/AuthMenu/DisaplayNameStep/DisplayNameInput.tsx
5919
- import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
5984
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
5920
5985
  var DisplayNameInput = ({ onComplete, onSkip }) => {
5921
5986
  const [displayName, setDisplayName] = useState4("");
5922
5987
  const [isLoading, setIsLoading] = useState4(false);
@@ -5946,12 +6011,12 @@ var DisplayNameInput = ({ onComplete, onSkip }) => {
5946
6011
  };
5947
6012
  return /* @__PURE__ */ jsxs14("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: [
5948
6013
  /* @__PURE__ */ jsxs14("div", { className: "flex items-center justify-center gap-2 px-5 pt-3 pb-6", children: [
5949
- /* @__PURE__ */ jsx16(LumiaLogo, { size: 24, className: "w-6 h-6" }),
5950
- /* @__PURE__ */ jsx16("span", { className: "font-bold text-xl leading-6", children: "What's your name?" })
6014
+ /* @__PURE__ */ jsx17(LumiaLogo, { size: 24, className: "w-6 h-6" }),
6015
+ /* @__PURE__ */ jsx17("span", { className: "font-bold text-xl leading-6", children: "What's your name?" })
5951
6016
  ] }),
5952
- /* @__PURE__ */ jsx16("span", { className: "block w-full text-xs text-center", children: "This helps personalize your experience" }),
6017
+ /* @__PURE__ */ jsx17("span", { className: "block w-full text-xs text-center", children: "This helps personalize your experience" }),
5953
6018
  /* @__PURE__ */ jsxs14("form", { onSubmit: handleSubmit, className: "w-full flex flex-col gap-[var(--l-pass-pd)]", children: [
5954
- /* @__PURE__ */ jsx16(
6019
+ /* @__PURE__ */ jsx17(
5955
6020
  Input,
5956
6021
  {
5957
6022
  Icon: User,
@@ -5969,7 +6034,7 @@ var DisplayNameInput = ({ onComplete, onSkip }) => {
5969
6034
  }
5970
6035
  ),
5971
6036
  /* @__PURE__ */ jsxs14("div", { className: "w-full flex gap-[var(--l-pass-gap)]", children: [
5972
- /* @__PURE__ */ jsx16(
6037
+ /* @__PURE__ */ jsx17(
5973
6038
  Button,
5974
6039
  {
5975
6040
  type: "submit",
@@ -5979,7 +6044,7 @@ var DisplayNameInput = ({ onComplete, onSkip }) => {
5979
6044
  children: isLoading ? "Saving..." : "Continue"
5980
6045
  }
5981
6046
  ),
5982
- /* @__PURE__ */ jsx16(
6047
+ /* @__PURE__ */ jsx17(
5983
6048
  Button,
5984
6049
  {
5985
6050
  className: "flex-1 text-[var(--l-pass-fg-muted)]",
@@ -5997,17 +6062,16 @@ var DisplayNameInput = ({ onComplete, onSkip }) => {
5997
6062
  };
5998
6063
 
5999
6064
  // src/internal/components/AuthMenu/DisaplayNameStep/DisplayNameStep.tsx
6000
- import { jsx as jsx17 } from "react/jsx-runtime";
6065
+ import { jsx as jsx18 } from "react/jsx-runtime";
6001
6066
  function DisplayNameStep(props) {
6002
6067
  const { onAuthSuccess } = props;
6003
6068
  const setPage = useLayoutDataStore((st) => st.setPage);
6004
- const { setVerificationError, setStep, setEmail, setPasskeyError, setPasskeyStatus } = useAuthStore();
6069
+ const { setStep, setEmail, setPasskeyStatus, setAlert } = useAuthStore();
6005
6070
  const onSkip = async () => {
6006
6071
  setPage(null);
6007
6072
  setStep("signin");
6008
6073
  setEmail("");
6009
- setVerificationError("");
6010
- setPasskeyError("");
6074
+ setAlert(null);
6011
6075
  setPasskeyStatus("idle");
6012
6076
  await new Promise((resolve) => setTimeout(resolve, 250));
6013
6077
  if (onAuthSuccess) await onAuthSuccess();
@@ -6016,21 +6080,20 @@ function DisplayNameStep(props) {
6016
6080
  setPage(null);
6017
6081
  setStep("signin");
6018
6082
  setEmail("");
6019
- setVerificationError("");
6020
- setPasskeyError("");
6083
+ setAlert(null);
6021
6084
  setPasskeyStatus("idle");
6022
6085
  await new Promise((resolve) => setTimeout(resolve, 250));
6023
6086
  if (onAuthSuccess) await onAuthSuccess();
6024
6087
  };
6025
- return /* @__PURE__ */ jsx17(DisplayNameInput, { onComplete, onSkip });
6088
+ return /* @__PURE__ */ jsx18(DisplayNameInput, { onComplete, onSkip });
6026
6089
  }
6027
6090
 
6028
6091
  // src/internal/components/AuthMenu/PassKeyStep.tsx
6029
6092
  import { ArrowLeft as ArrowLeft3, Key as Key3 } from "lucide-react";
6030
- import { useCallback as useCallback4 } from "react";
6093
+ import { useCallback as useCallback5 } from "react";
6031
6094
 
6032
6095
  // src/internal/assets/PasskeyAddIcon.tsx
6033
- import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
6096
+ import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
6034
6097
  function PasskeyAddIcon(props) {
6035
6098
  const { width = "24", height = "24", className = "w-6 h-6", ...rest } = props;
6036
6099
  return /* @__PURE__ */ jsxs15(
@@ -6046,11 +6109,11 @@ function PasskeyAddIcon(props) {
6046
6109
  strokeLinejoin: "round",
6047
6110
  xmlns: "http://www.w3.org/2000/svg",
6048
6111
  children: [
6049
- /* @__PURE__ */ jsx18("path", { d: "m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4" }),
6050
- /* @__PURE__ */ jsx18("path", { d: "m21 2-9.6 9.6" }),
6051
- /* @__PURE__ */ jsx18("circle", { cx: "7.5", cy: "15.5", r: "5.5" }),
6052
- /* @__PURE__ */ jsx18("path", { d: "M18 15v6" }),
6053
- /* @__PURE__ */ jsx18("path", { d: "M21 18h-6" })
6112
+ /* @__PURE__ */ jsx19("path", { d: "m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4" }),
6113
+ /* @__PURE__ */ jsx19("path", { d: "m21 2-9.6 9.6" }),
6114
+ /* @__PURE__ */ jsx19("circle", { cx: "7.5", cy: "15.5", r: "5.5" }),
6115
+ /* @__PURE__ */ jsx19("path", { d: "M18 15v6" }),
6116
+ /* @__PURE__ */ jsx19("path", { d: "M21 18h-6" })
6054
6117
  ]
6055
6118
  }
6056
6119
  );
@@ -6060,16 +6123,16 @@ function PasskeyAddIcon(props) {
6060
6123
  init_auth();
6061
6124
 
6062
6125
  // src/internal/components/Expandable/hooks/useExpandable.ts
6063
- import { useCallback as useCallback3, useEffect as useEffect8, useRef as useRef5 } from "react";
6126
+ import { useCallback as useCallback4, useEffect as useEffect9, useRef as useRef5 } from "react";
6064
6127
  var useExpandable = (props) => {
6065
6128
  const { isExpanded = false, children, initHeight = 0, minHeight = 0 } = props;
6066
6129
  const expandableRef = useRef5(null);
6067
6130
  const contentRef = useRef5(null);
6068
- useEffect8(() => {
6131
+ useEffect9(() => {
6069
6132
  if (!expandableRef.current) return;
6070
6133
  expandableRef.current.style.setProperty("--ifo-basic-expandable-h", `${initHeight}px )`);
6071
6134
  }, []);
6072
- const setExpandableHeight = useCallback3(
6135
+ const setExpandableHeight = useCallback4(
6073
6136
  (isExpnd) => {
6074
6137
  if (!contentRef.current || !expandableRef.current) return;
6075
6138
  expandableRef.current.style.setProperty(
@@ -6080,7 +6143,7 @@ var useExpandable = (props) => {
6080
6143
  // ON_RESIZE_DELEAY),
6081
6144
  [minHeight]
6082
6145
  );
6083
- useEffect8(() => {
6146
+ useEffect9(() => {
6084
6147
  if (!contentRef.current || !expandableRef.current) return;
6085
6148
  const obs = new ResizeObserver(() => setExpandableHeight(isExpanded));
6086
6149
  obs.observe(expandableRef.current);
@@ -6093,24 +6156,24 @@ var useExpandable = (props) => {
6093
6156
  };
6094
6157
 
6095
6158
  // src/internal/components/Expandable/Expandable.tsx
6096
- import { jsx as jsx19 } from "react/jsx-runtime";
6159
+ import { jsx as jsx20 } from "react/jsx-runtime";
6097
6160
  function Expandable(props) {
6098
6161
  const { children, className, contentClassName, minHeight, divProps } = props;
6099
6162
  const { expandableRef, contentRef } = useExpandable(props);
6100
- return /* @__PURE__ */ jsx19(
6163
+ return /* @__PURE__ */ jsx20(
6101
6164
  "div",
6102
6165
  {
6103
6166
  ...divProps,
6104
6167
  ref: expandableRef,
6105
6168
  className: cn("w-full overflow-y-hidden", className),
6106
6169
  style: { height: "var(--ifo-basic-expandable-h)", transition: "height 375ms ease" },
6107
- children: /* @__PURE__ */ jsx19("div", { className: cn("w-full", contentClassName), ref: contentRef, style: minHeight ? { minHeight } : void 0, children })
6170
+ children: /* @__PURE__ */ jsx20("div", { className: cn("w-full", contentClassName), ref: contentRef, style: minHeight ? { minHeight } : void 0, children })
6108
6171
  }
6109
6172
  );
6110
6173
  }
6111
6174
 
6112
6175
  // src/internal/components/AuthMenu/PassKeyStep.tsx
6113
- import { Fragment as Fragment2, jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
6176
+ import { Fragment as Fragment2, jsx as jsx21, jsxs as jsxs16 } from "react/jsx-runtime";
6114
6177
  function normalizeWebAuthnError(err) {
6115
6178
  const raw = err?.message || String(err || "");
6116
6179
  const lower = raw.toLowerCase();
@@ -6132,20 +6195,9 @@ function PassKeyStep(props) {
6132
6195
  const setPage = useLayoutDataStore((st) => st.setPage);
6133
6196
  const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
6134
6197
  const autoCloseOnSuccess = !recoveryUserId;
6135
- const {
6136
- passkeyError,
6137
- passkeyStatus,
6138
- setStep,
6139
- setPasskeyError,
6140
- setPasskeyStatus,
6141
- setAlert,
6142
- setEmail,
6143
- setVerificationError,
6144
- setFailedMessage,
6145
- setFailedType
6146
- } = useAuthStore();
6147
- const onPasskeyRegister = useCallback4(async () => {
6148
- setPasskeyError("");
6198
+ const { passkeyStatus, setStep, setPasskeyStatus, setAlert, setEmail, setFailedType } = useAuthStore();
6199
+ const onPasskeyRegister = useCallback5(async () => {
6200
+ setAlert(null);
6149
6201
  setPasskeyStatus("registering passkey...");
6150
6202
  setIsLoading(true);
6151
6203
  try {
@@ -6172,8 +6224,7 @@ function PassKeyStep(props) {
6172
6224
  if (onAuthSuccess) await onAuthSuccess();
6173
6225
  setStep("signin");
6174
6226
  setEmail("");
6175
- setVerificationError("");
6176
- setPasskeyError("");
6227
+ setAlert(null);
6177
6228
  setPasskeyStatus("idle");
6178
6229
  } else {
6179
6230
  setPasskeyStatus("Passkey registered successfully!");
@@ -6195,7 +6246,10 @@ function PassKeyStep(props) {
6195
6246
  message: "This passkey is already registered for your account. No need to register again!"
6196
6247
  });
6197
6248
  } else if (!normalized.benignCancel) {
6198
- setPasskeyError(errorMessage);
6249
+ setAlert({
6250
+ title: "Passkey Error",
6251
+ message: errorMessage
6252
+ });
6199
6253
  }
6200
6254
  if (!normalized.benignCancel) {
6201
6255
  try {
@@ -6211,8 +6265,8 @@ function PassKeyStep(props) {
6211
6265
  setIsLoading(false);
6212
6266
  }
6213
6267
  }, [onAuthSuccess, setPage, callbacks]);
6214
- const onPasskeyAuth = useCallback4(async () => {
6215
- setPasskeyError("");
6268
+ const onPasskeyAuth = useCallback5(async () => {
6269
+ setAlert(null);
6216
6270
  setPasskeyStatus("checking available passkeys...");
6217
6271
  setIsLoading(true);
6218
6272
  try {
@@ -6228,9 +6282,10 @@ function PassKeyStep(props) {
6228
6282
  pendingLoginResponseRef.current = result.loginResponse;
6229
6283
  const hasKeyshare = result.loginResponse.hasKeyshare ?? false;
6230
6284
  if (!hasKeyshare && result.loginResponse.isNewUser === void 0) {
6231
- setFailedMessage(
6232
- "The backend could not determine user status. This indicates you probably already have used the passkey and did not create required backups.\n Unfortunately, your wallet cannot be recovered. You need to create account using a different passkey."
6233
- );
6285
+ setAlert({
6286
+ title: "Configuration Error",
6287
+ message: "The backend could not determine user status. This indicates you probably already have used the passkey and did not create required backups.\n Unfortunately, your wallet cannot be recovered. You need to create account using a different passkey."
6288
+ });
6234
6289
  setFailedType("config");
6235
6290
  setStep("failed");
6236
6291
  setPasskeyStatus("idle");
@@ -6238,9 +6293,10 @@ function PassKeyStep(props) {
6238
6293
  return;
6239
6294
  }
6240
6295
  if (!hasKeyshare && result.loginResponse.isNewUser === false) {
6241
- setFailedMessage(
6242
- "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."
6243
- );
6296
+ setAlert({
6297
+ title: "Data has been lost",
6298
+ message: "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."
6299
+ });
6244
6300
  setFailedType("critical");
6245
6301
  setStep("failed");
6246
6302
  setPasskeyStatus("idle");
@@ -6261,7 +6317,10 @@ function PassKeyStep(props) {
6261
6317
  if (onAuthSuccess) await onAuthSuccess();
6262
6318
  } catch (authError) {
6263
6319
  if (authError?.message?.includes("User denied authorization")) {
6264
- setFailedMessage("Authorization cancelled");
6320
+ setAlert({
6321
+ title: "Authorization Cancelled",
6322
+ message: authError?.message || "You have cancelled the authorization process."
6323
+ });
6265
6324
  setStep("failed");
6266
6325
  setPasskeyStatus("idle");
6267
6326
  return;
@@ -6271,8 +6330,7 @@ function PassKeyStep(props) {
6271
6330
  if (autoCloseOnSuccess) {
6272
6331
  setStep("signin");
6273
6332
  setEmail("");
6274
- setVerificationError("");
6275
- setPasskeyError("");
6333
+ setAlert(null);
6276
6334
  setPasskeyStatus("idle");
6277
6335
  setPage(null);
6278
6336
  }
@@ -6280,7 +6338,10 @@ function PassKeyStep(props) {
6280
6338
  const normalized = normalizeWebAuthnError(e);
6281
6339
  const errorMessage = normalized.message || "Authentication failed";
6282
6340
  if (!normalized.benignCancel) {
6283
- setPasskeyError(errorMessage);
6341
+ setAlert({
6342
+ title: "Passkey Error",
6343
+ message: errorMessage
6344
+ });
6284
6345
  try {
6285
6346
  callbacks?.onLumiaPassportError?.({
6286
6347
  error: e instanceof Error ? e : new Error(errorMessage),
@@ -6297,8 +6358,8 @@ function PassKeyStep(props) {
6297
6358
  }, [onAuthSuccess, setPage, callbacks]);
6298
6359
  return /* @__PURE__ */ jsxs16(Expandable, { isExpanded: true, contentClassName: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: [
6299
6360
  /* @__PURE__ */ jsxs16("div", { className: "relative flex items-center justify-center gap-2 px-5 pt-3 pb-6", children: [
6300
- /* @__PURE__ */ jsx20(Key3, { className: "w-6 h-6" }),
6301
- /* @__PURE__ */ jsx20("span", { className: "font-bold text-xl leading-6", children: "Passkey" }),
6361
+ /* @__PURE__ */ jsx21(Key3, { className: "w-6 h-6" }),
6362
+ /* @__PURE__ */ jsx21("span", { className: "font-bold text-xl leading-6", children: "Passkey" }),
6302
6363
  /* @__PURE__ */ jsxs16(
6303
6364
  Button,
6304
6365
  {
@@ -6309,25 +6370,24 @@ function PassKeyStep(props) {
6309
6370
  className: "absolute left-0 top-0 w-5 h-5",
6310
6371
  onClick: () => setStep("signin"),
6311
6372
  children: [
6312
- /* @__PURE__ */ jsx20(ArrowLeft3, { className: "h-4 w-4" }),
6313
- /* @__PURE__ */ jsx20("span", { className: "sr-only", children: "Back to SignIn" })
6373
+ /* @__PURE__ */ jsx21(ArrowLeft3, { className: "h-4 w-4" }),
6374
+ /* @__PURE__ */ jsx21("span", { className: "sr-only", children: "Back to SignIn" })
6314
6375
  ]
6315
6376
  }
6316
6377
  )
6317
6378
  ] }),
6318
6379
  /* @__PURE__ */ jsxs16(Button, { variant: "default", size: "large", className: "w-full", onClick: onPasskeyAuth, disabled: isLoading, children: [
6319
- /* @__PURE__ */ jsx20(Key3, { className: "w-4 h-4" }),
6380
+ /* @__PURE__ */ jsx21(Key3, { className: "w-4 h-4" }),
6320
6381
  "Sign in with existing Passkey"
6321
6382
  ] }),
6322
6383
  config.passkey.showCreateButton && /* @__PURE__ */ jsxs16(Fragment2, { children: [
6323
- /* @__PURE__ */ jsx20("span", { className: "block w-full text-center text-sm text-[var(--l-pass-fg-muted)]", children: "Don't have a passkey?" }),
6384
+ /* @__PURE__ */ jsx21("span", { className: "block w-full text-center text-sm text-[var(--l-pass-fg-muted)]", children: "Don't have a passkey?" }),
6324
6385
  /* @__PURE__ */ jsxs16(Button, { variant: "outline", size: "large", className: "w-full", onClick: onPasskeyRegister, disabled: isLoading, children: [
6325
- /* @__PURE__ */ jsx20(PasskeyAddIcon, { className: "w-4 h-4" }),
6386
+ /* @__PURE__ */ jsx21(PasskeyAddIcon, { className: "w-4 h-4" }),
6326
6387
  "Create Passkey"
6327
6388
  ] })
6328
6389
  ] }),
6329
- passkeyError && /* @__PURE__ */ jsx20("div", { className: "w-full p-[var(--l-pass-pd)] rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-error)]", children: /* @__PURE__ */ jsx20("span", { className: "w-full block text-sm text-[var(--l-pass-error)] break-words whitespace-pre-wrap text-center", children: passkeyError }) }),
6330
- !passkeyError && passkeyStatus !== "idle" && /* @__PURE__ */ jsx20("div", { className: "w-full p-[var(--l-pass-pd)] rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-success)]", children: /* @__PURE__ */ jsx20("span", { className: "w-full block text-sm text-[var(--l-pass-success)] break-words whitespace-pre-wrap text-center", children: passkeyStatus }) })
6390
+ passkeyStatus !== "idle" && /* @__PURE__ */ jsx21("div", { className: "w-full p-[var(--l-pass-pd)] rounded-[var(--l-pass-el-bdrs)] bg-[var(--l-pass-bg-success)]", children: /* @__PURE__ */ jsx21("span", { className: "w-full block text-sm text-[var(--l-pass-success)] break-words whitespace-pre-wrap text-center", children: passkeyStatus }) })
6331
6391
  ] });
6332
6392
  }
6333
6393
 
@@ -6341,40 +6401,13 @@ init_projectId();
6341
6401
  import { useMutation as useMutation4 } from "@tanstack/react-query";
6342
6402
  import { ChevronRight, Loader as Loader3, Mail as Mail3 } from "lucide-react";
6343
6403
  import { useRef as useRef6 } from "react";
6344
-
6345
- // src/internal/components/ui/highlight.tsx
6346
- import { jsx as jsx21 } from "react/jsx-runtime";
6347
- var CARD_STYLES = {
6348
- info: "text-[var(--l-pass-info)] bg-[var(--l-pass-bg-info)]",
6349
- success: "text-[var(--l-pass-success)] bg-[var(--l-pass-bg-success)]",
6350
- warning: "text-[var(--l-pass-warning)] bg-[var(--l-pass-bg-warning)]",
6351
- error: "text-[var(--l-pass-error)] bg-[var(--l-pass-bg-error)]"
6352
- };
6353
- function Highlight(props) {
6354
- const { type = "info", children, className } = props;
6355
- return /* @__PURE__ */ jsx21(
6356
- "div",
6357
- {
6358
- className: cn(
6359
- "w-full text-xs rounded-[var(--l-pass-el-bdrs)] p-[var(--l-pass-pd)]",
6360
- "whitespace-pre-line",
6361
- type === "error" ? "break-all" : "break-normal",
6362
- CARD_STYLES[type],
6363
- className
6364
- ),
6365
- children
6366
- }
6367
- );
6368
- }
6369
-
6370
- // src/internal/components/AuthMenu/SignInStep/Email.tsx
6371
6404
  import { jsx as jsx22, jsxs as jsxs17 } from "react/jsx-runtime";
6372
6405
  function Email() {
6373
6406
  const { config, callbacks } = useLumiaPassportConfig();
6374
6407
  const buttonRef = useRef6(null);
6375
6408
  const isLoading = useLumiaPassportSession((st) => st.isLoading);
6376
6409
  const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
6377
- const { email, codeSendError, alert: alert2, setEmail, setCodeSendError, setExpiresIn, setStep, setAlert } = useAuthStore();
6410
+ const { email, alert: alert2, setEmail, setExpiresIn, setStep, setAlert } = useAuthStore();
6378
6411
  const { mutate: onSendVerificationCode } = useMutation4({
6379
6412
  mutationFn: async (mail) => {
6380
6413
  const isEmailValid = mail.length !== 0 && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(mail);
@@ -6382,7 +6415,7 @@ function Email() {
6382
6415
  throw new Error("Invalid email format, please correct and try again.");
6383
6416
  }
6384
6417
  setIsLoading(true);
6385
- setCodeSendError("");
6418
+ setAlert(null);
6386
6419
  const apiUrl = addProjectIdToUrl(`${getServiceUrls().tssUrl}/api/auth/email/send-code`);
6387
6420
  return await fetch(apiUrl, {
6388
6421
  method: "POST",
@@ -6399,83 +6432,75 @@ function Email() {
6399
6432
  } else {
6400
6433
  if (response.status === 429) {
6401
6434
  const retryAfter = data.retryAfter || 60;
6402
- setCodeSendError(`Code already sent recently. Please wait ${retryAfter} seconds before requesting another.`);
6435
+ setAlert({
6436
+ title: "Code already sent recently (Too Many Requests)",
6437
+ message: `Please wait ${retryAfter} seconds before requesting another.`
6438
+ });
6403
6439
  } else if (response.status === 400) {
6404
- setCodeSendError(data.message || "Invalid email address");
6440
+ setAlert({
6441
+ title: "Failed to send verification code",
6442
+ message: data.message || "Unknown error occurred"
6443
+ });
6405
6444
  } else {
6406
- setCodeSendError(data.message || "Failed to send verification code");
6445
+ setAlert({
6446
+ title: "Failed to send verification code",
6447
+ message: data.message || "Unknown error occurred"
6448
+ });
6407
6449
  }
6408
6450
  }
6409
6451
  setIsLoading(false);
6410
6452
  },
6411
6453
  onError: (error) => {
6412
6454
  callbacks?.onLumiaPassportError?.({ error, message: error?.message || "" });
6413
- setCodeSendError(error?.message || "Network error. Please check your connection.");
6455
+ setAlert({
6456
+ title: "Failed to send verification code",
6457
+ message: error?.message || "Unknown error occurred"
6458
+ });
6414
6459
  setIsLoading(false);
6415
6460
  }
6416
6461
  });
6417
- return /* @__PURE__ */ jsxs17(Expandable, { isExpanded: true, contentClassName: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
6418
- /* @__PURE__ */ jsxs17(
6419
- "div",
6420
- {
6421
- className: "w-full flex gap-[10px] items-center",
6422
- onKeyDown: (e) => {
6423
- if (e.key === "Enter" && !isLoading && email) {
6424
- buttonRef.current?.click();
6425
- }
6426
- },
6427
- children: [
6428
- /* @__PURE__ */ jsx22(
6429
- Input,
6430
- {
6431
- name: "signin-email",
6432
- Icon: Mail3,
6433
- type: "email",
6434
- autoComplete: "off",
6435
- placeholder: config.current?.email?.placeholder || "Enter your email",
6436
- value: email,
6437
- disabled: isLoading,
6438
- className: "flex-1 w-full",
6439
- onChange: (e) => {
6440
- if (alert2) setAlert(null);
6441
- setEmail(e.target.value);
6442
- }
6443
- }
6444
- ),
6445
- /* @__PURE__ */ jsx22(
6446
- Button,
6447
- {
6448
- ref: buttonRef,
6449
- className: "w-12 h-12 flex-none",
6450
- variant: "default",
6451
- size: "large",
6452
- disabled: !email || isLoading,
6453
- onClick: () => onSendVerificationCode(email),
6454
- children: isLoading ? /* @__PURE__ */ jsx22(Loader3, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx22(ChevronRight, { className: "w-4 h-4" })
6462
+ return /* @__PURE__ */ jsx22("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: /* @__PURE__ */ jsxs17(
6463
+ "div",
6464
+ {
6465
+ className: "w-full flex gap-[10px] items-center",
6466
+ onKeyDown: (e) => {
6467
+ if (e.key === "Enter" && !isLoading && email) {
6468
+ buttonRef.current?.click();
6469
+ }
6470
+ },
6471
+ children: [
6472
+ /* @__PURE__ */ jsx22(
6473
+ Input,
6474
+ {
6475
+ name: "signin-email",
6476
+ Icon: Mail3,
6477
+ type: "email",
6478
+ autoComplete: "off",
6479
+ placeholder: config.current?.email?.placeholder || "Enter your email",
6480
+ value: email,
6481
+ disabled: isLoading,
6482
+ className: "flex-1 w-full",
6483
+ onChange: (e) => {
6484
+ if (alert2) setAlert(null);
6485
+ setEmail(e.target.value);
6455
6486
  }
6456
- )
6457
- ]
6458
- }
6459
- ),
6460
- !!codeSendError && /* @__PURE__ */ jsxs17(Highlight, { type: "warning", className: "flex gap-[var(--l-pass-gap)]", children: [
6461
- /* @__PURE__ */ jsx22(Mail3, { className: "w-4 h-4" }),
6462
- /* @__PURE__ */ jsx22("span", { children: codeSendError })
6463
- ] })
6464
- ] });
6465
- }
6466
-
6467
- // src/internal/components/AuthMenu/SignInStep/ErrorAlert.tsx
6468
- import { AlertTriangle as AlertTriangle2 } from "lucide-react";
6469
- import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
6470
- function ErrorAlert(props) {
6471
- const { title, message } = props;
6472
- return /* @__PURE__ */ jsxs18(Highlight, { type: "error", className: "w-full flex gap-[var(--l-pass-gap)]", children: [
6473
- /* @__PURE__ */ jsx23(AlertTriangle2, { className: "w-5 h-5 text-[var(--l-pass-error)]" }),
6474
- /* @__PURE__ */ jsxs18("div", { className: "w-full flex-1", children: [
6475
- /* @__PURE__ */ jsx23("span", { className: "block w-full font-bold", children: title }),
6476
- /* @__PURE__ */ jsx23("span", { className: "block w-full whitespace-pre-line", children: message })
6477
- ] })
6478
- ] });
6487
+ }
6488
+ ),
6489
+ /* @__PURE__ */ jsx22(
6490
+ Button,
6491
+ {
6492
+ ref: buttonRef,
6493
+ className: "w-12 h-12 flex-none",
6494
+ variant: "default",
6495
+ size: "large",
6496
+ disabled: !email || isLoading,
6497
+ onClick: () => onSendVerificationCode(email),
6498
+ children: isLoading ? /* @__PURE__ */ jsx22(Loader3, { className: "w-4 h-4 animate-spin" }) : /* @__PURE__ */ jsx22(ChevronRight, { className: "w-4 h-4" })
6499
+ }
6500
+ )
6501
+ ]
6502
+ }
6503
+ ) });
6479
6504
  }
6480
6505
 
6481
6506
  // src/internal/components/AuthMenu/SignInStep/Social.tsx
@@ -6484,28 +6509,26 @@ init_lumiaPassport();
6484
6509
  init_auth();
6485
6510
  init_projectId();
6486
6511
  import { Key as Key4 } from "lucide-react";
6487
- import { useCallback as useCallback5 } from "react";
6512
+ import { useCallback as useCallback6 } from "react";
6488
6513
 
6489
6514
  // src/internal/components/AuthMenu/SignInStep/utils.ts
6490
- var POSSIBLE_SIGNIN_METHODS = [
6491
- "email",
6492
- "passkey",
6493
- "social"
6494
- // 'wallet'
6495
- ];
6515
+ var POSSIBLE_SIGNIN_METHODS = ["email", "passkey", "social", "wallet"];
6496
6516
  function getSignInEnabledMethods(params) {
6497
6517
  const { order, config, exclude } = params;
6498
6518
  const enabled = new Array(POSSIBLE_SIGNIN_METHODS.length).fill(null);
6519
+ const unordered = new Array(POSSIBLE_SIGNIN_METHODS.length).fill(null);
6499
6520
  POSSIBLE_SIGNIN_METHODS.forEach((sign) => {
6500
6521
  const orderedIdx = order.indexOf(sign);
6501
6522
  if (orderedIdx < 0) {
6502
- const unordered = config[sign]?.enabled ? sign : null;
6503
- enabled.push(unordered);
6523
+ unordered.push(config[sign]?.enabled ? sign : null);
6504
6524
  } else {
6505
6525
  enabled[orderedIdx] = config[sign]?.enabled ? sign : null;
6506
6526
  }
6507
6527
  });
6508
- return enabled.filter(Boolean).filter((s) => !exclude.includes(s));
6528
+ return [
6529
+ ...enabled.filter(Boolean).filter((s) => !exclude.includes(s)),
6530
+ ...unordered.filter(Boolean).filter((s) => !exclude.includes(s))
6531
+ ];
6509
6532
  }
6510
6533
  async function normalizeSocialLoginResponse(rawLoginResponse, providerKey, userData) {
6511
6534
  if (!rawLoginResponse) {
@@ -6545,7 +6568,7 @@ async function normalizeSocialLoginResponse(rawLoginResponse, providerKey, userD
6545
6568
  }
6546
6569
 
6547
6570
  // src/internal/components/AuthMenu/SignInStep/Social.tsx
6548
- import { jsx as jsx24, jsxs as jsxs19 } from "react/jsx-runtime";
6571
+ import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
6549
6572
  var SUPPORTED_PROVIDERS = ["telegram", "x", "twitter"];
6550
6573
  var SOCIAL_ICONS = {
6551
6574
  google: GoogleIcon,
@@ -6653,18 +6676,8 @@ function Social(props) {
6653
6676
  const { config, callbacks } = useLumiaPassportConfig();
6654
6677
  const isLoading = useLumiaPassportSession((st) => st.isLoading);
6655
6678
  const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
6656
- const {
6657
- alert: alert2,
6658
- setStep,
6659
- setEmail,
6660
- setVerificationError,
6661
- setFailedType,
6662
- setAlert,
6663
- setFailedMessage,
6664
- setPasskeyError,
6665
- setPasskeyStatus
6666
- } = useAuthStore();
6667
- const onSocialAuth = useCallback5(
6679
+ const { alert: alert2, setStep, setEmail, setFailedType, setAlert, setPasskeyStatus } = useAuthStore();
6680
+ const onSocialAuth = useCallback6(
6668
6681
  async (providerId) => {
6669
6682
  const normalizedProviderId = providerId.toLowerCase();
6670
6683
  const provider = config.current?.social?.providers?.find(
@@ -6718,9 +6731,10 @@ function Social(props) {
6718
6731
  loginResponse2.hasKeyshare = false;
6719
6732
  loginResponse2.isNewUser = false;
6720
6733
  } else {
6721
- setFailedMessage(
6722
- "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."
6723
- );
6734
+ setAlert({
6735
+ title: "Configuration Error",
6736
+ message: "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."
6737
+ });
6724
6738
  setFailedType("config");
6725
6739
  setStep("failed");
6726
6740
  setIsLoading(false);
@@ -6729,9 +6743,10 @@ function Social(props) {
6729
6743
  }
6730
6744
  }
6731
6745
  if (loginResponse2.hasKeyshare === false && loginResponse2.isNewUser === false && providerKey !== "x") {
6732
- setFailedMessage(
6733
- "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."
6734
- );
6746
+ setAlert({
6747
+ title: "Account Data Lost",
6748
+ message: "Your account data has been lost on the server. This should never happen and indicates a serious system failure.\n\nUnfortunately, your wallet cannot be recovered. You will need to create a new account.\n\nPlease contact support immediately with this error."
6749
+ });
6735
6750
  setFailedType("critical");
6736
6751
  setStep("failed");
6737
6752
  setIsLoading(false);
@@ -6781,16 +6796,14 @@ function Social(props) {
6781
6796
  onAuthSuccess?.();
6782
6797
  setStep("signin");
6783
6798
  setEmail("");
6784
- setVerificationError("");
6785
- setPasskeyError("");
6799
+ setAlert(null);
6786
6800
  setPasskeyStatus("idle");
6787
6801
  setIsLoading(false);
6788
6802
  } else {
6789
6803
  onAuthSuccess?.();
6790
6804
  setStep("signin");
6791
6805
  setEmail("");
6792
- setVerificationError("");
6793
- setPasskeyError("");
6806
+ setAlert(null);
6794
6807
  setPasskeyStatus("idle");
6795
6808
  setIsLoading(false);
6796
6809
  }
@@ -6880,13 +6893,13 @@ function Social(props) {
6880
6893
  );
6881
6894
  const isPasskey = config.current?.passkey?.enabled;
6882
6895
  const gridCols = (config.current?.social?.gridColumns || 1) + (isPasskey ? 1 : 0);
6883
- return /* @__PURE__ */ jsxs19(
6896
+ return /* @__PURE__ */ jsxs18(
6884
6897
  "div",
6885
6898
  {
6886
6899
  className: "grid gap-[var(--l-pass-gap)]",
6887
6900
  style: { gridTemplateColumns: `repeat(${gridCols}, minmax(0, 1fr))` },
6888
6901
  children: [
6889
- isPasskey && /* @__PURE__ */ jsx24(
6902
+ isPasskey && /* @__PURE__ */ jsx23(
6890
6903
  Button,
6891
6904
  {
6892
6905
  variant: "outline",
@@ -6898,7 +6911,7 @@ function Social(props) {
6898
6911
  },
6899
6912
  disabled: isLoading,
6900
6913
  title: "Passkey",
6901
- children: /* @__PURE__ */ jsx24(Key4, { className: "w-5 h-5" })
6914
+ children: /* @__PURE__ */ jsx23(Key4, { className: "w-5 h-5" })
6902
6915
  }
6903
6916
  ),
6904
6917
  config.current?.social?.providers.filter((provider) => provider.enabled).map((provider) => {
@@ -6906,7 +6919,7 @@ function Social(props) {
6906
6919
  const isSupported = SUPPORTED_PROVIDERS.includes(providerId);
6907
6920
  const IconComponent = config.current?.ui?.useExternalIcons ? provider.icon : SOCIAL_ICONS[providerId];
6908
6921
  const handleClick = isSupported ? () => onSocialAuth(providerId) : () => setAlert({ title: "Coming Soon", message: `${provider.name} authentication is coming soon!` });
6909
- return /* @__PURE__ */ jsx24(
6922
+ return /* @__PURE__ */ jsx23(
6910
6923
  Button,
6911
6924
  {
6912
6925
  variant: "outline",
@@ -6918,7 +6931,7 @@ function Social(props) {
6918
6931
  },
6919
6932
  disabled: isLoading,
6920
6933
  title: provider.comingSoon ? `${provider.name} (Coming Soon)` : provider.name,
6921
- children: IconComponent ? /* @__PURE__ */ jsx24(IconComponent, { className: "w-5 h-5" }) : /* @__PURE__ */ jsx24("span", { className: "text-lg font-bold", children: provider.name.slice(0, 1).toUpperCase() })
6934
+ children: IconComponent ? /* @__PURE__ */ jsx23(IconComponent, { className: "w-5 h-5" }) : /* @__PURE__ */ jsx23("span", { className: "text-lg font-bold", children: provider.name.slice(0, 1).toUpperCase() })
6922
6935
  },
6923
6936
  provider.id
6924
6937
  );
@@ -6928,12 +6941,35 @@ function Social(props) {
6928
6941
  );
6929
6942
  }
6930
6943
 
6944
+ // src/internal/components/AuthMenu/SignInStep/Wallet.tsx
6945
+ import { jsx as jsx24, jsxs as jsxs19 } from "react/jsx-runtime";
6946
+ function Wallet() {
6947
+ const setAlert = useAuthStore((st) => st.setAlert);
6948
+ const setIsWalletLinking = useLayoutDataStore((st) => st.setIsWalletLinking);
6949
+ const Icon = PROVIDERS_META2.wallet.icon;
6950
+ return /* @__PURE__ */ jsxs19(
6951
+ Button,
6952
+ {
6953
+ size: "large",
6954
+ variant: "outline",
6955
+ className: "w-full",
6956
+ onClick: () => {
6957
+ setAlert(null);
6958
+ setIsWalletLinking(true);
6959
+ },
6960
+ children: [
6961
+ /* @__PURE__ */ jsx24(Icon, { className: "w-5 h-5" }),
6962
+ "Wallet"
6963
+ ]
6964
+ }
6965
+ );
6966
+ }
6967
+
6931
6968
  // src/internal/components/AuthMenu/SignInStep/SignInStep.tsx
6932
6969
  import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
6933
6970
  function SignInStep(props) {
6934
6971
  const { pendingLoginResponseRef, onAuthSuccess, checkDisplayNameRequired } = props;
6935
6972
  const { config } = useLumiaPassportConfig();
6936
- const alert2 = useAuthStore((st) => st.alert);
6937
6973
  const setPage = useLayoutDataStore((st) => st.setPage);
6938
6974
  const enabledWoPasskey = getSignInEnabledMethods({
6939
6975
  config: config.current,
@@ -6949,24 +6985,22 @@ function SignInStep(props) {
6949
6985
  onAuthSuccess,
6950
6986
  checkDisplayNameRequired
6951
6987
  }
6952
- )
6988
+ ),
6989
+ wallet: /* @__PURE__ */ jsx25(Wallet, {})
6953
6990
  };
6954
6991
  return /* @__PURE__ */ jsxs20("div", { className: "w-full p-[var(--l-pass-pd)] flex flex-col gap-[var(--l-pass-gap)]", children: [
6955
6992
  /* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-center gap-2 px-5 pt-3 pb-6", children: [
6956
6993
  /* @__PURE__ */ jsx25(UserCircle, { className: "w-6 h-6" }),
6957
6994
  /* @__PURE__ */ jsx25("span", { className: "font-bold text-xl leading-6", children: "Sign In" })
6958
6995
  ] }),
6959
- /* @__PURE__ */ jsxs20("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
6960
- enabledWoPasskey.map((kind, idx) => /* @__PURE__ */ jsxs20(Fragment3, { children: [
6961
- idx > 0 && /* @__PURE__ */ jsxs20("div", { className: "flex items-center", children: [
6962
- /* @__PURE__ */ jsx25("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" }),
6963
- /* @__PURE__ */ jsx25("div", { className: "flex-none px-2 text-xs leading-4", children: "Or sign in using" }),
6964
- /* @__PURE__ */ jsx25("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" })
6965
- ] }, `auth-method-${kind}-${idx}`),
6966
- signInMethods[kind]
6967
- ] }, `fragment-${idx}`)),
6968
- !!alert2 && /* @__PURE__ */ jsx25(ErrorAlert, { title: alert2.title, message: alert2.message })
6969
- ] }),
6996
+ /* @__PURE__ */ jsx25("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: enabledWoPasskey.map((kind, idx) => /* @__PURE__ */ jsxs20(Fragment3, { children: [
6997
+ idx > 0 && /* @__PURE__ */ jsxs20("div", { className: "flex items-center", children: [
6998
+ /* @__PURE__ */ jsx25("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" }),
6999
+ /* @__PURE__ */ jsx25("div", { className: "flex-none px-2 text-xs leading-4", children: "Or" }),
7000
+ /* @__PURE__ */ jsx25("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" })
7001
+ ] }, `auth-method-${kind}-${idx}`),
7002
+ signInMethods[kind]
7003
+ ] }, `fragment-${idx}`)) }),
6970
7004
  /* @__PURE__ */ jsxs20("div", { className: "w-full flex items-center gap-2 justify-center", children: [
6971
7005
  /* @__PURE__ */ jsx25("span", { className: "text-[10px] font-medium", children: "By signing in, you agree to the" }),
6972
7006
  /* @__PURE__ */ jsx25(
@@ -6986,7 +7020,7 @@ function SignInStep(props) {
6986
7020
  // src/internal/components/AuthMenu/useAuthMenuHanders.ts
6987
7021
  init_auth();
6988
7022
  import { useQueryClient as useQueryClient2 } from "@tanstack/react-query";
6989
- import { useCallback as useCallback6, useRef as useRef7, useState as useState5 } from "react";
7023
+ import { useCallback as useCallback7, useRef as useRef7, useState as useState5 } from "react";
6990
7024
  function useAuthMenuHandlers() {
6991
7025
  const { config, callbacks } = useLumiaPassportConfig();
6992
7026
  const qc = useQueryClient2();
@@ -6994,8 +7028,9 @@ function useAuthMenuHandlers() {
6994
7028
  const setPage = useLayoutDataStore((st) => st.setPage);
6995
7029
  const [telegramCleanup, setTelegramCleanup] = useState5(null);
6996
7030
  const { usePaymaster, setError, setStatus, setSession, setAddress, setRecoveryUserId, setHasServerVault } = useLumiaPassportSession();
6997
- const { setStep, setVerificationError, setCodeSendError, setFailedMessage } = useAuthStore();
6998
- const createSessionWithKeyshare = useCallback6(
7031
+ const setStep = useAuthStore((st) => st.setStep);
7032
+ const setAlert = useAuthStore((st) => st.setAlert);
7033
+ const createSessionWithKeyshare = useCallback7(
6999
7034
  async (userId, hasServerKeyshare, isNewUser) => {
7000
7035
  try {
7001
7036
  try {
@@ -7029,7 +7064,7 @@ function useAuthMenuHandlers() {
7029
7064
  },
7030
7065
  [setStatus, callbacks, usePaymaster]
7031
7066
  );
7032
- const onAuthSuccess = useCallback6(async () => {
7067
+ const onAuthSuccess = useCallback7(async () => {
7033
7068
  const loginResponse = pendingLoginResponseRef.current;
7034
7069
  if (!loginResponse || !loginResponse.userId) {
7035
7070
  setError("Authentication failed - no login data available");
@@ -7057,7 +7092,7 @@ function useAuthMenuHandlers() {
7057
7092
  jwt?.isNewUser
7058
7093
  );
7059
7094
  setError(null);
7060
- setFailedMessage(null);
7095
+ setAlert(null);
7061
7096
  setSession(sess);
7062
7097
  setAddress(addr);
7063
7098
  setStatus("ready");
@@ -7095,7 +7130,10 @@ function useAuthMenuHandlers() {
7095
7130
  await jwtTokenManager2.clearTokens();
7096
7131
  setStatus("error");
7097
7132
  setError(error?.message || String(error));
7098
- setFailedMessage("Authorization cancelled");
7133
+ setAlert({
7134
+ title: "Authorization cancelled",
7135
+ message: error?.message || String(error) || "An unknown error occurred during authentication."
7136
+ });
7099
7137
  setStep("failed");
7100
7138
  }
7101
7139
  }
@@ -7107,12 +7145,13 @@ function useAuthMenuHandlers() {
7107
7145
  setError,
7108
7146
  setStatus,
7109
7147
  setSession,
7148
+ setAlert,
7110
7149
  setAddress,
7111
7150
  setRecoveryUserId,
7112
7151
  setHasServerVault,
7113
7152
  createSessionWithKeyshare
7114
7153
  ]);
7115
- const checkDisplayNameRequired = useCallback6(async (loginResponse) => {
7154
+ const checkDisplayNameRequired = useCallback7(async (loginResponse) => {
7116
7155
  if (!config.current?.features?.displayNameNeeded) {
7117
7156
  return false;
7118
7157
  }
@@ -7136,15 +7175,14 @@ function useAuthMenuHandlers() {
7136
7175
  return false;
7137
7176
  }
7138
7177
  }, []);
7139
- const goBackToSignIn = useCallback6(() => {
7178
+ const goBackToSignIn = useCallback7(() => {
7140
7179
  setStep("signin");
7141
- setVerificationError("");
7142
- setCodeSendError("");
7180
+ setAlert(null);
7143
7181
  if (telegramCleanup) {
7144
7182
  telegramCleanup();
7145
7183
  setTelegramCleanup(null);
7146
7184
  }
7147
- }, [setStep, setVerificationError, setCodeSendError, telegramCleanup]);
7185
+ }, [setStep, setAlert, telegramCleanup]);
7148
7186
  return {
7149
7187
  pendingLoginResponseRef,
7150
7188
  onAuthSuccess,
@@ -7153,35 +7191,6 @@ function useAuthMenuHandlers() {
7153
7191
  };
7154
7192
  }
7155
7193
 
7156
- // src/internal/components/AuthMenu/useListenIframeAuthEvents.ts
7157
- import { useCallback as useCallback7, useEffect as useEffect9 } from "react";
7158
- function useListenIframeAuthEvents() {
7159
- const setPage = useLayoutDataStore((state) => state.setPage);
7160
- const setIsIframeReady = useLumiaPassportSession((state) => state.setIsIframeReady);
7161
- const handleIframeMessage = useCallback7(
7162
- (event) => {
7163
- console.log("[AuthMenu] Received iframe message:", event.data);
7164
- if (event.data?.type === "LUMIA_PASSPORT_IFRAME_READY") {
7165
- console.log("[AuthMenu] Iframe is ready");
7166
- setIsIframeReady(true);
7167
- } else if (event.data?.type === "LUMIA_PASSPORT_SHOW_IFRAME") {
7168
- console.log("[AuthMenu] Consent screen shown - hiding auth modal");
7169
- setPage(null);
7170
- } else if (event.data?.type === "LUMIA_PASSPORT_HIDE_IFRAME") {
7171
- console.log("[AuthMenu] Consent screen hidden");
7172
- } else if (event.data?.type === "KEYSHARE_RECOVERY_NEEDED") {
7173
- console.log("[AuthMenu] recovery neede");
7174
- setPage("keyshare-restore" /* KEYSHARE_RESTORE */);
7175
- }
7176
- },
7177
- [setPage, setIsIframeReady]
7178
- );
7179
- useEffect9(() => {
7180
- window.addEventListener("message", handleIframeMessage);
7181
- return () => window.removeEventListener("message", handleIframeMessage);
7182
- }, [handleIframeMessage]);
7183
- }
7184
-
7185
7194
  // src/internal/components/AuthMenu/VerifyStep/VerifyStep.tsx
7186
7195
  init_lumiaPassport();
7187
7196
  import { useMutation as useMutation5 } from "@tanstack/react-query";
@@ -7208,8 +7217,8 @@ init_projectId();
7208
7217
  import { useEffect as useEffect10, useRef as useRef8, useState as useState6 } from "react";
7209
7218
  import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
7210
7219
  var VerificationCodeInput = (props) => {
7211
- const { onVerifyCode, onResendCode, isLoading, expiresIn, error } = props;
7212
- const setVerificationError = useAuthStore((st) => st.setVerificationError);
7220
+ const { onVerifyCode, onResendCode, isLoading, expiresIn } = props;
7221
+ const setAlert = useAuthStore((st) => st.setAlert);
7213
7222
  const [timeLeft, setTimeLeft] = useState6(expiresIn);
7214
7223
  useEffect10(() => setTimeLeft(expiresIn), [expiresIn]);
7215
7224
  useEffect10(() => {
@@ -7305,7 +7314,6 @@ var VerificationCodeInput = (props) => {
7305
7314
  },
7306
7315
  i
7307
7316
  )) }),
7308
- error && /* @__PURE__ */ jsx27("div", { className: "w-full bg-[var(--l-pass-bg-error)] p-[var(--l-pass-pd)] rounded-[var(--l-pass-el-bdrs)]", children: /* @__PURE__ */ jsx27("span", { className: "w-full block text-sm text-[var(--l-pass-error)] break-words whitespace-pre-wrap text-center", children: error }) }),
7309
7317
  /* @__PURE__ */ jsxs21("div", { className: "text-xs", children: [
7310
7318
  "Code expires in ",
7311
7319
  mm,
@@ -7323,8 +7331,8 @@ var VerificationCodeInput = (props) => {
7323
7331
  className: "text-xs h-fit px-0 leading-4 text-[var(--l-pass-fg-muted)] underline underline-offset-4",
7324
7332
  onClick: () => {
7325
7333
  if (!timeLeft) return onResendCode();
7326
- setVerificationError("Please wait until the current code expires to resend.");
7327
- setTimeout(() => setVerificationError(""), 3e3);
7334
+ setAlert({ title: "Please wait", message: "Please wait until the current code expires to resend." });
7335
+ setTimeout(() => setAlert(null), 3e3);
7328
7336
  },
7329
7337
  children: "Resend"
7330
7338
  }
@@ -7345,18 +7353,16 @@ function VerifyStep(props) {
7345
7353
  const {
7346
7354
  email,
7347
7355
  expiresIn,
7348
- verificationError,
7349
- setVerificationError,
7350
- setFailedMessage,
7351
7356
  setFailedType,
7352
7357
  setStep,
7353
7358
  setEmail,
7354
- setExpiresIn
7359
+ setExpiresIn,
7360
+ setAlert
7355
7361
  } = useAuthStore();
7356
7362
  const { mutate: onVerifyCode, isPending: isCodeVerifying } = useMutation5({
7357
7363
  mutationFn: async (code) => {
7358
7364
  setIsLoading(true);
7359
- setVerificationError("");
7365
+ setAlert(null);
7360
7366
  const { loginWithEmail: loginWithEmail2 } = await Promise.resolve().then(() => (init_auth(), auth_exports));
7361
7367
  const loginResponse = await loginWithEmail2(email, code, { skipTokenSave: true });
7362
7368
  pendingLoginResponseRef.current = loginResponse;
@@ -7364,9 +7370,10 @@ function VerifyStep(props) {
7364
7370
  },
7365
7371
  onSuccess: async (loginResponse) => {
7366
7372
  if (!loginResponse.hasKeyshare && loginResponse.isNewUser === void 0) {
7367
- setFailedMessage(
7368
- "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."
7369
- );
7373
+ setAlert({
7374
+ title: "Configuration Error",
7375
+ message: "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."
7376
+ });
7370
7377
  setFailedType("config");
7371
7378
  setStep("failed");
7372
7379
  pendingLoginResponseRef.current = null;
@@ -7374,9 +7381,10 @@ function VerifyStep(props) {
7374
7381
  return;
7375
7382
  }
7376
7383
  if (!loginResponse.hasKeyshare && loginResponse.isNewUser === false) {
7377
- setFailedMessage(
7378
- "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."
7379
- );
7384
+ setAlert({
7385
+ title: "Account Data Lost",
7386
+ message: "Your account data has been lost on the server. This should never happen and indicates a serious system failure.\n\nUnfortunately, your wallet cannot be recovered. You will need to create a new account.\n\nPlease contact support immediately with this error."
7387
+ });
7380
7388
  setFailedType("critical");
7381
7389
  setStep("failed");
7382
7390
  pendingLoginResponseRef.current = null;
@@ -7402,7 +7410,7 @@ function VerifyStep(props) {
7402
7410
  if (!recoveryUserId && !needsRecovery) {
7403
7411
  setStep("signin");
7404
7412
  setEmail("");
7405
- setVerificationError("");
7413
+ setAlert(null);
7406
7414
  setPage(null);
7407
7415
  }
7408
7416
  setIsLoading(false);
@@ -7418,7 +7426,10 @@ function VerifyStep(props) {
7418
7426
  } else {
7419
7427
  errorMessage = error.message || "Verification failed. Please try again.";
7420
7428
  }
7421
- setVerificationError(errorMessage);
7429
+ setAlert({
7430
+ title: "Verification failed",
7431
+ message: errorMessage
7432
+ });
7422
7433
  callbacks?.onLumiaPassportError?.({
7423
7434
  error: error instanceof Error ? error : new Error(errorMessage),
7424
7435
  message: errorMessage
@@ -7428,7 +7439,7 @@ function VerifyStep(props) {
7428
7439
  });
7429
7440
  const { mutate: onResendCode, isPending: isCodeResending } = useMutation5({
7430
7441
  mutationFn: async () => {
7431
- setVerificationError("");
7442
+ setAlert(null);
7432
7443
  setIsLoading(true);
7433
7444
  const response = await fetch(addProjectIdToUrl(`${getServiceUrls().tssUrl}/api/auth/email/send-code`), {
7434
7445
  method: "POST",
@@ -7444,17 +7455,24 @@ function VerifyStep(props) {
7444
7455
  setExpiresIn(data.expiresIn || 300);
7445
7456
  }
7446
7457
  if (!response.ok && response.status === 429) {
7447
- setVerificationError(
7448
- `Code already sent recently. Please wait ${data.retryAfter || 60} seconds before requesting another.`
7449
- );
7458
+ setAlert({
7459
+ title: "Code already sent recently (Too Many Requests)",
7460
+ message: `Please wait ${data.retryAfter || 60} seconds before requesting another.`
7461
+ });
7450
7462
  }
7451
7463
  if (!response.ok && response.status !== 429) {
7452
- setVerificationError(data.message || "Failed to resend verification code");
7464
+ setAlert({
7465
+ title: "Failed to resend verification code",
7466
+ message: data.message || "Unknown error occurred"
7467
+ });
7453
7468
  }
7454
7469
  setIsLoading(false);
7455
7470
  },
7456
7471
  onError: (err) => {
7457
- setVerificationError(err.message || "Network error. Please check your connection.");
7472
+ setAlert({
7473
+ title: "Failed to resend verification code",
7474
+ message: err.message || "Unknown error occurred"
7475
+ });
7458
7476
  setIsLoading(false);
7459
7477
  }
7460
7478
  });
@@ -7491,8 +7509,7 @@ function VerifyStep(props) {
7491
7509
  onVerifyCode,
7492
7510
  onResendCode,
7493
7511
  isLoading,
7494
- expiresIn,
7495
- error: verificationError
7512
+ expiresIn
7496
7513
  }
7497
7514
  )
7498
7515
  ] });
@@ -7502,31 +7519,17 @@ function VerifyStep(props) {
7502
7519
  import { jsx as jsx29, jsxs as jsxs23 } from "react/jsx-runtime";
7503
7520
  var AuthMenu = () => {
7504
7521
  const isIframeReady = useLumiaPassportSession((st) => st.isIframeReady);
7505
- const page = useLayoutDataStore((st) => st.page);
7506
7522
  const setMainPageHeight = useLayoutDataStore((st) => st.setMainPageHeight);
7507
- useEffect11(() => setMainPageHeight(DEFAULT_AUTH_MENU_HEIGHT), [setMainPageHeight]);
7508
- const {
7509
- step,
7510
- setStep,
7511
- setPasskeyError,
7512
- setPasskeyStatus,
7513
- setEmail,
7514
- setVerificationError,
7515
- setFailedMessage,
7516
- setCodeSendError
7517
- } = useAuthStore();
7523
+ const { step, alert: alert2, setStep, setPasskeyStatus, setEmail, setAlert } = useAuthStore();
7524
+ useEffect11(() => setMainPageHeight(DEFAULT_AUTH_MENU_HEIGHT), []);
7518
7525
  useEffect11(() => {
7519
- if (page !== "auth" /* AUTH */) {
7526
+ return () => {
7520
7527
  setStep("signin");
7521
7528
  setEmail("");
7522
- setVerificationError("");
7523
- setCodeSendError("");
7524
- setPasskeyError("");
7525
7529
  setPasskeyStatus("idle");
7526
- setFailedMessage("");
7527
- }
7528
- }, [page]);
7529
- useListenIframeAuthEvents();
7530
+ setAlert(null);
7531
+ };
7532
+ }, []);
7530
7533
  const { pendingLoginResponseRef, onAuthSuccess, goBackToSignIn, checkDisplayNameRequired } = useAuthMenuHandlers();
7531
7534
  if (!isIframeReady) {
7532
7535
  return /* @__PURE__ */ jsxs23("div", { className: "w-full p-8 flex flex-col justify-center items-center gap-[var(--l-pass-gap)]", children: [
@@ -7566,28 +7569,35 @@ var AuthMenu = () => {
7566
7569
  }),
7567
7570
  [onAuthSuccess, goBackToSignIn, checkDisplayNameRequired]
7568
7571
  );
7569
- return (
7570
- // simple wrap by div
7571
- /* @__PURE__ */ jsx29("div", { className: "w-full", children: /* @__PURE__ */ jsx29(AnimatePresence, { mode: "wait", initial: false, children: /* @__PURE__ */ jsx29(
7572
- motion.div,
7573
- {
7574
- initial: { opacity: 0, height: DEFAULT_AUTH_MENU_HEIGHT },
7575
- animate: { opacity: 1, height: "auto" },
7576
- exit: { opacity: 0, height: DEFAULT_AUTH_MENU_HEIGHT },
7577
- style: { overflow: "hidden" },
7578
- transition: Y_ANIMATION_SETUP,
7579
- children: stepContent[step]
7580
- },
7581
- step
7582
- ) }) })
7583
- );
7584
- };
7585
-
7586
- // src/internal/components/BuyMenu/ByuMenu.tsx
7587
- import { ArrowLeft as ArrowLeft5 } from "lucide-react";
7588
-
7589
- // src/internal/components/BuyMenu/assets/BinanceIcon.tsx
7590
- import { jsx as jsx30, jsxs as jsxs24 } from "react/jsx-runtime";
7572
+ return /* @__PURE__ */ jsx29("div", { className: "w-full", children: /* @__PURE__ */ jsx29(AnimatePresence, { mode: "wait", initial: false, children: /* @__PURE__ */ jsxs23(
7573
+ motion.div,
7574
+ {
7575
+ initial: { opacity: 0, height: DEFAULT_AUTH_MENU_HEIGHT },
7576
+ animate: { opacity: 1, height: "auto" },
7577
+ exit: { opacity: 0, height: DEFAULT_AUTH_MENU_HEIGHT },
7578
+ style: { overflow: "hidden" },
7579
+ transition: Y_ANIMATION_SETUP,
7580
+ children: [
7581
+ stepContent[step],
7582
+ !!alert2 && // <Expandable isExpanded contentClassName="px-[var(--l-pass-pd)]">
7583
+ /* @__PURE__ */ jsxs23(Highlight, { type: "error", className: "w-full flex gap-[var(--l-pass-gap)]", children: [
7584
+ /* @__PURE__ */ jsx29(AlertTriangle2, { className: "w-5 h-5 text-[var(--l-pass-error)]" }),
7585
+ /* @__PURE__ */ jsxs23("span", { className: "block w-full flex flex-col gap-1 flex-1", children: [
7586
+ /* @__PURE__ */ jsx29("span", { className: "block font-bold leading-5", children: alert2.title }),
7587
+ /* @__PURE__ */ jsx29("span", { className: "block whitespace-pre-line", children: alert2.message })
7588
+ ] })
7589
+ ] })
7590
+ ]
7591
+ },
7592
+ step
7593
+ ) }) });
7594
+ };
7595
+
7596
+ // src/internal/components/BuyMenu/ByuMenu.tsx
7597
+ import { ArrowLeft as ArrowLeft5 } from "lucide-react";
7598
+
7599
+ // src/internal/components/BuyMenu/assets/BinanceIcon.tsx
7600
+ import { jsx as jsx30, jsxs as jsxs24 } from "react/jsx-runtime";
7591
7601
  function BinanceIcon() {
7592
7602
  return /* @__PURE__ */ jsxs24("svg", { width: "107", height: "23", viewBox: "0 0 107 23", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
7593
7603
  /* @__PURE__ */ jsx30(
@@ -9431,29 +9441,21 @@ import { ChevronRight as ChevronRight3, Loader as Loader12, Mail as Mail4 } from
9431
9441
  // src/internal/components/ManageWalletMenu/hooks/useStore.ts
9432
9442
  import { create as create5 } from "zustand";
9433
9443
  var useManageWalletStore = create5((set) => ({
9444
+ alert: null,
9434
9445
  emailStep: "input",
9435
9446
  email: "",
9436
9447
  emailCode: "",
9437
- emailCodeSentError: "",
9438
9448
  emailCodeExpiresIn: 0,
9439
- isWalletLinking: false,
9440
9449
  linkIsLoading: false,
9441
- linkError: "",
9442
- verificationError: "",
9443
9450
  providerType: null,
9444
9451
  confirmUnlink: null,
9452
+ setAlert: (alert2) => set({ alert: alert2 }),
9445
9453
  setEmailStep: (emailStep) => set({ emailStep }),
9446
9454
  setEmail: (email) => set({ email }),
9447
9455
  setEmailCode: (emailCode) => set({ emailCode }),
9448
- setEmailCodeSentError: (emailCodeSentError) => set({ emailCodeSentError }),
9449
9456
  setEmailCodeExpiresIn: (emailCodeExpiresIn) => set({ emailCodeExpiresIn }),
9450
- setIsWalletLinking: (isWalletLinking) => set({ isWalletLinking }),
9451
9457
  setLinkIsLoading: (linkIsLoading) => set({ linkIsLoading }),
9452
- setLinkError: (linkError) => set({ linkError }),
9453
- setVerificationError: (verificationError) => set({ verificationError }),
9454
- setProviderType: (providerType) => {
9455
- set({ providerType });
9456
- },
9458
+ setProviderType: (providerType) => set({ providerType }),
9457
9459
  setConfirmUnlink: (confirmUnlink) => set({ confirmUnlink })
9458
9460
  }));
9459
9461
 
@@ -9466,12 +9468,12 @@ function EmailForm() {
9466
9468
  } = useLumiaPassportConfig();
9467
9469
  const isLoading = useLumiaPassportSession((st) => st.isLoading);
9468
9470
  const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
9469
- const { email, setEmail, setEmailCodeSentError, setEmailCodeExpiresIn, setEmailStep } = useManageWalletStore();
9471
+ const { email, setEmail, setAlert, setEmailCodeExpiresIn, setEmailStep } = useManageWalletStore();
9470
9472
  const { mutate: onSendVerificationCode } = useMutation11({
9471
9473
  mutationFn: async () => {
9472
9474
  if (!email) return;
9473
9475
  setIsLoading(true);
9474
- setEmailCodeSentError("");
9476
+ setAlert(null);
9475
9477
  try {
9476
9478
  const response = await fetch(addProjectIdToUrl(`${getServiceUrls().tssUrl}/api/auth/email/send-code`), {
9477
9479
  method: "POST",
@@ -9491,18 +9493,28 @@ function EmailForm() {
9491
9493
  } else {
9492
9494
  if (response.status === 429) {
9493
9495
  const retryAfter = data.retryAfter || 60;
9494
- setEmailCodeSentError(
9495
- `Code already sent recently. Please wait ${retryAfter} seconds before requesting another.`
9496
- );
9496
+ setAlert({
9497
+ title: "Too Many Requests",
9498
+ message: `Code already sent recently. Please wait ${retryAfter} seconds before requesting another.`
9499
+ });
9497
9500
  } else if (response.status === 400) {
9498
- setEmailCodeSentError(data.message || "Invalid email address");
9501
+ setAlert({
9502
+ title: "Invalid Email",
9503
+ message: data.message || "Invalid email address"
9504
+ });
9499
9505
  } else {
9500
- setEmailCodeSentError(data.message || "Failed to send verification code");
9506
+ setAlert({
9507
+ title: "Error",
9508
+ message: data.message || "Failed to send verification code"
9509
+ });
9501
9510
  }
9502
9511
  }
9503
9512
  } catch (error) {
9504
9513
  const errorMessage = "Network error. Please check your connection.";
9505
- setEmailCodeSentError(errorMessage);
9514
+ setAlert({
9515
+ title: "Network Error",
9516
+ message: errorMessage
9517
+ });
9506
9518
  try {
9507
9519
  callbacks?.onLumiaPassportError?.({
9508
9520
  error: error instanceof Error ? error : new Error(errorMessage),
@@ -9547,19 +9559,21 @@ function EmailForm() {
9547
9559
  init_email();
9548
9560
  import { useMutation as useMutation12 } from "@tanstack/react-query";
9549
9561
  function useSendVerificationCode() {
9550
- const { setVerificationError, setLinkIsLoading, setEmailCodeSentError, setEmailCodeExpiresIn } = useManageWalletStore();
9562
+ const setAlert = useManageWalletStore((st) => st.setAlert);
9563
+ const setLinkIsLoading = useManageWalletStore((st) => st.setLinkIsLoading);
9564
+ const setEmailCodeExpiresIn = useManageWalletStore((st) => st.setEmailCodeExpiresIn);
9551
9565
  return useMutation12({
9552
9566
  mutationFn: async (email) => {
9553
9567
  if (!email) {
9554
9568
  throw new Error("Email is required");
9555
9569
  }
9556
- setVerificationError("");
9570
+ setAlert(null);
9557
9571
  setLinkIsLoading(true);
9558
9572
  await sendEmailLinkCode(email);
9559
9573
  },
9560
9574
  onError: (error) => {
9561
9575
  console.error("Failed to send verification code", error.message);
9562
- setEmailCodeSentError(error?.message || "Failed to send verification code");
9576
+ setAlert({ title: "Error", message: error?.message || "Failed to send verification code" });
9563
9577
  setLinkIsLoading(false);
9564
9578
  },
9565
9579
  onSuccess: () => {
@@ -9578,28 +9592,17 @@ function useVerifyCode() {
9578
9592
  const qc = useQueryClient10();
9579
9593
  const address = useLumiaPassportSession((st) => st.address);
9580
9594
  const setIsLoading = useLumiaPassportSession((st) => st.setIsLoading);
9581
- const {
9582
- email,
9583
- emailCode,
9584
- setEmail,
9585
- setEmailStep,
9586
- setEmailCode,
9587
- setProviderType,
9588
- setLinkIsLoading,
9589
- setVerificationError,
9590
- setEmailCodeSentError
9591
- } = useManageWalletStore();
9595
+ const { email, emailCode, setEmail, setEmailStep, setEmailCode, setProviderType, setLinkIsLoading, setAlert } = useManageWalletStore();
9592
9596
  return useMutation13({
9593
9597
  mutationFn: async (codeToVerify) => {
9594
9598
  const code = codeToVerify ?? emailCode;
9595
9599
  if (!code) {
9596
- setEmailCodeSentError("Please enter the verification code");
9600
+ setAlert({ title: "Error", message: "Please enter the verification code" });
9597
9601
  return;
9598
9602
  }
9599
9603
  setIsLoading(true);
9600
9604
  setLinkIsLoading(true);
9601
- setVerificationError("");
9602
- setEmailCodeSentError("");
9605
+ setAlert(null);
9603
9606
  return await verifyEmailLinkCode(email, code);
9604
9607
  },
9605
9608
  onSuccess: async () => {
@@ -9608,8 +9611,7 @@ function useVerifyCode() {
9608
9611
  setProviderType(null);
9609
9612
  setEmail("");
9610
9613
  setEmailCode("");
9611
- setVerificationError("");
9612
- setEmailCodeSentError("");
9614
+ setAlert(null);
9613
9615
  setEmailStep("input");
9614
9616
  try {
9615
9617
  callbacks?.onLumiaPassportUpdate?.({ providers: qc.getQueryData([PROVIDERS_QUERY_KEY, address]) });
@@ -9619,7 +9621,7 @@ function useVerifyCode() {
9619
9621
  setLinkIsLoading(false);
9620
9622
  },
9621
9623
  onError: (error) => {
9622
- setVerificationError(error?.message || "Failed to verify and link email");
9624
+ setAlert({ title: "Error", message: error?.message || "Failed to verify and link email" });
9623
9625
  setIsLoading(false);
9624
9626
  setLinkIsLoading(false);
9625
9627
  }
@@ -9640,7 +9642,7 @@ function normalizePasskeyLinkError(msg) {
9640
9642
  }
9641
9643
  function AddProvider() {
9642
9644
  const qc = useQueryClient11();
9643
- const { callbacks } = useLumiaPassportConfig();
9645
+ const callbacks = useLumiaPassportConfig().callbacks;
9644
9646
  const address = useLumiaPassportSession((st) => st.address);
9645
9647
  const {
9646
9648
  linkIsLoading,
@@ -9648,8 +9650,8 @@ function AddProvider() {
9648
9650
  email,
9649
9651
  emailStep,
9650
9652
  emailCodeExpiresIn,
9653
+ setAlert,
9651
9654
  setProviderType,
9652
- setLinkError,
9653
9655
  setLinkIsLoading
9654
9656
  } = useManageWalletStore();
9655
9657
  const setPage = useLayoutDataStore((st) => st.setPage);
@@ -9689,7 +9691,7 @@ function AddProvider() {
9689
9691
  size: "medium",
9690
9692
  disabled: isLoading,
9691
9693
  onClick: async () => {
9692
- setLinkError("");
9694
+ setAlert(null);
9693
9695
  setLinkIsLoading(true);
9694
9696
  try {
9695
9697
  await linkPasskeyWithWebAuthn({
@@ -9711,7 +9713,7 @@ function AddProvider() {
9711
9713
  setProviderType(null);
9712
9714
  } catch (e) {
9713
9715
  const msg = e?.message || "Failed to link passkey";
9714
- setLinkError(normalizePasskeyLinkError(msg));
9716
+ setAlert({ title: "Error", message: normalizePasskeyLinkError(msg) });
9715
9717
  } finally {
9716
9718
  setLinkIsLoading(false);
9717
9719
  }
@@ -9730,7 +9732,7 @@ function AddProvider() {
9730
9732
  size: "medium",
9731
9733
  disabled: isLoading,
9732
9734
  onClick: async () => {
9733
- setLinkError("");
9735
+ setAlert(null);
9734
9736
  setLinkIsLoading(true);
9735
9737
  try {
9736
9738
  await linkPasskeyWithWebAuthn({
@@ -9752,7 +9754,7 @@ function AddProvider() {
9752
9754
  setProviderType(null);
9753
9755
  } catch (e) {
9754
9756
  const msg = e?.message || "Failed to link passkey";
9755
- setLinkError(normalizePasskeyLinkError(msg));
9757
+ setAlert({ title: "Error", message: normalizePasskeyLinkError(msg) });
9756
9758
  } finally {
9757
9759
  setLinkIsLoading(false);
9758
9760
  }
@@ -9810,14 +9812,15 @@ function useLinkSocial() {
9810
9812
  callbacks
9811
9813
  } = useLumiaPassportConfig();
9812
9814
  const setPage = useLayoutDataStore((st) => st.setPage);
9813
- const { providerType, linkIsLoading, isWalletLinking, setProviderType, setLinkIsLoading, setLinkError } = useManageWalletStore();
9815
+ const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
9816
+ const { providerType, linkIsLoading, setProviderType, setAlert, setLinkIsLoading } = useManageWalletStore();
9814
9817
  const handleLinkSocialProvider = React7.useCallback(
9815
9818
  async (providerIdRaw) => {
9816
9819
  const providerKey = providerIdRaw.toLowerCase();
9817
9820
  const normalizedKey = providerKey === "twitter" ? "x" : providerKey;
9818
9821
  try {
9819
9822
  setLinkIsLoading(true);
9820
- setLinkError("");
9823
+ setAlert(null);
9821
9824
  const socialProvider = config.social?.providers?.find(
9822
9825
  (p) => (p.id || "").toLowerCase() === normalizedKey && p.enabled
9823
9826
  );
@@ -9855,7 +9858,7 @@ function useLinkSocial() {
9855
9858
  } catch (e) {
9856
9859
  console.error(`[ManageWallet] Failed to link ${providerIdRaw}:`, e);
9857
9860
  const message = e?.message || `Failed to link ${providerIdRaw}`;
9858
- setLinkError(message);
9861
+ setAlert({ title: "Error", message });
9859
9862
  setProviderType(null);
9860
9863
  } finally {
9861
9864
  setLinkIsLoading(false);
@@ -9884,9 +9887,9 @@ function useLinkSocial() {
9884
9887
  }
9885
9888
 
9886
9889
  // src/internal/components/ManageWalletMenu/hooks/useLinkTelegram.ts
9890
+ init_telegram2();
9887
9891
  import { useQueryClient as useQueryClient13 } from "@tanstack/react-query";
9888
9892
  import { useCallback as useCallback11, useEffect as useEffect23, useState as useState8 } from "react";
9889
- init_telegram2();
9890
9893
  function useLinkTelegram() {
9891
9894
  const {
9892
9895
  config: { current: config },
@@ -9894,12 +9897,13 @@ function useLinkTelegram() {
9894
9897
  } = useLumiaPassportConfig();
9895
9898
  const qc = useQueryClient13();
9896
9899
  const address = useLumiaPassportSession((st) => st.address);
9897
- const { providerType, linkIsLoading, isWalletLinking, setLinkIsLoading, setProviderType, setLinkError } = useManageWalletStore();
9900
+ const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
9901
+ const { providerType, linkIsLoading, setLinkIsLoading, setProviderType, setAlert } = useManageWalletStore();
9898
9902
  const setPage = useLayoutDataStore((st) => st.setPage);
9899
9903
  const handleLinkTelegram = useCallback11(async () => {
9900
9904
  try {
9901
9905
  setLinkIsLoading(true);
9902
- setLinkError("");
9906
+ setAlert(null);
9903
9907
  const telegramProvider = config.social?.providers?.find(
9904
9908
  (p) => (p.id || "").toLowerCase() === "telegram" && p.enabled
9905
9909
  );
@@ -9932,7 +9936,7 @@ function useLinkTelegram() {
9932
9936
  setProviderType(null);
9933
9937
  } catch (e) {
9934
9938
  console.error("[ManageWallet] Failed to link Telegram:", e);
9935
- setLinkError(e?.message || "Failed to link Telegram");
9939
+ setAlert({ title: "Error", message: e?.message || "Failed to link Telegram" });
9936
9940
  setProviderType(null);
9937
9941
  } finally {
9938
9942
  setLinkIsLoading(false);
@@ -9940,7 +9944,12 @@ function useLinkTelegram() {
9940
9944
  }, [config.social?.providers, callbacks]);
9941
9945
  const [telegramLinkStarted, setTelegramLinkStarted] = useState8(false);
9942
9946
  useEffect23(() => {
9943
- console.log("[useLinkTelegram] Effect triggered:", { providerType, linkIsLoading, telegramLinkStarted, isWalletLinking });
9947
+ console.log("[useLinkTelegram] Effect triggered:", {
9948
+ providerType,
9949
+ linkIsLoading,
9950
+ telegramLinkStarted,
9951
+ isWalletLinking
9952
+ });
9944
9953
  if (isWalletLinking) {
9945
9954
  console.log("[useLinkTelegram] Skipping - wallet linking in progress");
9946
9955
  return;
@@ -10008,7 +10017,7 @@ function ProviderCard(props) {
10008
10017
  }
10009
10018
 
10010
10019
  // src/internal/components/ManageWalletMenu/ManageWallet.tsx
10011
- import { jsx as jsx50, jsxs as jsxs41 } from "react/jsx-runtime";
10020
+ import { Fragment as Fragment14, jsx as jsx50, jsxs as jsxs41 } from "react/jsx-runtime";
10012
10021
  var POSSIBLE_PROVIDERS = [
10013
10022
  "email",
10014
10023
  // 'google',
@@ -10041,22 +10050,18 @@ function ManageWalletMenu() {
10041
10050
  config: { current: config }
10042
10051
  } = useLumiaPassportConfig();
10043
10052
  const setPage = useLayoutDataStore((st) => st.setPage);
10053
+ const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
10054
+ const setIsWalletLinking = useLayoutDataStore((st) => st.setIsWalletLinking);
10044
10055
  const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
10045
10056
  const {
10057
+ alert: alert2,
10046
10058
  providerType,
10047
- isWalletLinking,
10048
- linkError,
10049
- verificationError,
10050
- emailCodeSentError,
10059
+ setAlert,
10051
10060
  setProviderType,
10052
10061
  setEmail,
10053
10062
  setEmailStep,
10054
- setEmailCodeSentError,
10055
10063
  setEmailCodeExpiresIn,
10056
- setEmailCode,
10057
- setLinkError,
10058
- setVerificationError,
10059
- setIsWalletLinking
10064
+ setEmailCode
10060
10065
  } = useManageWalletStore();
10061
10066
  const configuredProviders = getConfiguredProviders(config);
10062
10067
  const { data: providers = [], isLoading: isProvidersLoading, error: providersError } = useProvidersList();
@@ -10082,17 +10087,16 @@ function ManageWalletMenu() {
10082
10087
  disabled: isWalletLinking,
10083
10088
  onClick: () => {
10084
10089
  if (isWalletLinking) return;
10090
+ setAlert(null);
10085
10091
  switch (provider) {
10086
10092
  case "email":
10087
10093
  setEmail("");
10088
10094
  setEmailCode("");
10089
- setEmailCodeSentError("");
10090
10095
  setEmailCodeExpiresIn(0);
10091
10096
  setEmailStep("input");
10092
10097
  setProviderType(provider);
10093
10098
  break;
10094
10099
  case "twitter":
10095
- console.log("[ManageWallet] Twitter button clicked!");
10096
10100
  setProviderType("twitter");
10097
10101
  break;
10098
10102
  case "wallet":
@@ -10120,7 +10124,7 @@ function ManageWalletMenu() {
10120
10124
  useLinkSocial();
10121
10125
  const showCurrentProviders = !isProvidersLoading && !providersError && (providerType !== "email" && providerType !== "passkey" || providerType === null);
10122
10126
  const showExtraProvidersUi = !isProvidersLoading && !providersError && (providerType === "email" || providerType === "passkey");
10123
- const combinedError = emailCodeSentError || linkError || verificationError || null;
10127
+ const combinedAlertMessage = alert2?.message || providersError?.message || null;
10124
10128
  return /* @__PURE__ */ jsxs41(
10125
10129
  "div",
10126
10130
  {
@@ -10138,15 +10142,13 @@ function ManageWalletMenu() {
10138
10142
  size: "icon",
10139
10143
  title: "Back",
10140
10144
  onClick: () => {
10145
+ setAlert(null);
10141
10146
  if (providerType === "email") {
10142
10147
  setEmail("");
10143
10148
  setEmailCode("");
10144
10149
  setEmailStep("input");
10145
- setEmailCodeSentError("");
10146
10150
  setEmailCodeExpiresIn(0);
10147
- setVerificationError("");
10148
10151
  }
10149
- setLinkError("");
10150
10152
  if (!providerType) setPage("settings" /* SETTINGS */);
10151
10153
  setProviderType(null);
10152
10154
  },
@@ -10155,16 +10157,19 @@ function ManageWalletMenu() {
10155
10157
  ),
10156
10158
  /* @__PURE__ */ jsx50("span", { className: "text-xl font-semibold", children: "Profiles" })
10157
10159
  ] }),
10158
- /* @__PURE__ */ jsxs41("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
10159
- providersError && /* @__PURE__ */ jsxs41(Highlight, { type: "error", className: "flex items-start gap-[var(--l-pass-gap)] break-words whitespace-pre-wrap", children: [
10160
- /* @__PURE__ */ jsx50(AlertTriangle3, { className: "w-4 h-4 shrink-0" }),
10161
- /* @__PURE__ */ jsx50("span", { className: "block", children: providersError.message })
10162
- ] }),
10163
- isProvidersLoading && /* @__PURE__ */ jsx50("div", { className: "flex items-center justify-center p-4 text-[var(--l-pass-fg-muted)]", children: /* @__PURE__ */ jsx50(Loader13, { className: "w-5 h-5 animate-spin" }) }),
10164
- /* @__PURE__ */ jsx50(EmailNotConnectedWarning, {}),
10165
- showCurrentProviders && renderProviders.map((node) => node),
10166
- showExtraProvidersUi && /* @__PURE__ */ jsx50(AddProvider, {}),
10167
- combinedError && /* @__PURE__ */ jsx50(Highlight, { type: "error", children: /* @__PURE__ */ jsx50("span", { children: combinedError }) })
10160
+ isProvidersLoading && /* @__PURE__ */ jsx50("div", { className: "flex items-center justify-center p-4 text-[var(--l-pass-fg-muted)]", children: /* @__PURE__ */ jsx50(Loader13, { className: "w-5 h-5 animate-spin" }) }),
10161
+ /* @__PURE__ */ jsx50(EmailNotConnectedWarning, {}),
10162
+ showCurrentProviders && renderProviders.map((node) => node),
10163
+ showExtraProvidersUi && /* @__PURE__ */ jsx50(AddProvider, {}),
10164
+ combinedAlertMessage && /* @__PURE__ */ jsxs41(Highlight, { type: "error", className: "flex gap-[var(--l-pass-gap)]", children: [
10165
+ /* @__PURE__ */ jsx50(AlertTriangle3, { className: "w-4 h-4 shrink-0" }),
10166
+ /* @__PURE__ */ jsxs41("span", { className: "break-words whitespace-pre-wrap", children: [
10167
+ alert2?.title && /* @__PURE__ */ jsxs41(Fragment14, { children: [
10168
+ /* @__PURE__ */ jsx50("strong", { children: alert2.title }),
10169
+ /* @__PURE__ */ jsx50("br", {})
10170
+ ] }),
10171
+ combinedAlertMessage
10172
+ ] })
10168
10173
  ] })
10169
10174
  ]
10170
10175
  }
@@ -10182,7 +10187,7 @@ function UnlinkProviderMenu() {
10182
10187
  const address = useLumiaPassportSession((st) => st.address);
10183
10188
  const { callbacks } = useLumiaPassportConfig();
10184
10189
  const setPage = useLayoutDataStore((st) => st.setPage);
10185
- const { confirmUnlink, setConfirmUnlink, setLinkError } = useManageWalletStore();
10190
+ const { confirmUnlink, setConfirmUnlink, setAlert } = useManageWalletStore();
10186
10191
  const [confirmInput, setConfirmInput] = useState9("");
10187
10192
  const { mutate: handleUnlinkProvider, isPending: isProviderUnlinking } = useMutation14({
10188
10193
  mutationFn: async () => {
@@ -10204,7 +10209,7 @@ function UnlinkProviderMenu() {
10204
10209
  }
10205
10210
  },
10206
10211
  onError: (error) => {
10207
- setLinkError(error?.message || "Failed to unlink provider");
10212
+ setAlert({ title: "Error", message: error?.message || "Failed to unlink provider" });
10208
10213
  setPage("manage-wallet" /* MANAGE_WALLET */);
10209
10214
  }
10210
10215
  });
@@ -10258,193 +10263,355 @@ function UnlinkProviderMenu() {
10258
10263
 
10259
10264
  // src/internal/components/PortfolioMenu/PortfolioMenu.tsx
10260
10265
  import { useQueryClient as useQueryClient16 } from "@tanstack/react-query";
10261
- import { ArrowLeft as ArrowLeft11, Gem, Loader as Loader16, RefreshCw } from "lucide-react";
10262
- import { useCallback as useCallback12 } from "react";
10266
+ import { AlertCircle as AlertCircle4, ArrowLeft as ArrowLeft11, Gem, Loader as Loader16, RefreshCw } from "lucide-react";
10267
+ import { useCallback as useCallback13 } from "react";
10263
10268
 
10264
- // src/modules/assets.ts
10269
+ // src/internal/hooks/useBlockscoutAssets.ts
10270
+ init_lumiaPassport();
10265
10271
  init_base();
10266
- import React8 from "react";
10267
- import { useBalance as useBalance2, useReadContract, useReadContracts } from "wagmi";
10268
- import { formatUnits, erc20Abi } from "viem";
10269
- var COMMON_TOKENS = [
10270
- // Add real token addresses here when available
10271
- // {
10272
- // address: '0x....',
10273
- // name: 'USD Coin',
10274
- // symbol: 'USDC',
10275
- // decimals: 6,
10276
- // logo: 'https://...'
10277
- // }
10272
+ import { useCallback as useCallback12, useMemo as useMemo4, useRef as useRef12 } from "react";
10273
+ import { useQuery as useQuery11 } from "@tanstack/react-query";
10274
+ import { useBalance as useBalance2, usePublicClient } from "wagmi";
10275
+ import { formatUnits } from "viem";
10276
+ import {
10277
+ createBlockscoutClient
10278
+ } from "@lumiapassport/core/clients";
10279
+ var BLOCKSCOUT_QUERY_KEY = "blockscout-token-balances";
10280
+ var ERC3643_DETECTION_QUERY_KEY = "erc3643-detection";
10281
+ var ERC3643_ABI = [
10282
+ {
10283
+ name: "identityRegistry",
10284
+ type: "function",
10285
+ stateMutability: "view",
10286
+ inputs: [],
10287
+ outputs: [{ name: "", type: "address" }]
10288
+ }
10278
10289
  ];
10279
- function useAssets(address) {
10280
- const { data: nativeBalance, isLoading: nativeBalanceLoading, refetch: refetchNativeBalance } = useBalance2({
10290
+ function resolveIpfsUri(uri) {
10291
+ if (!uri) return "";
10292
+ if (uri.startsWith("ipfs://")) {
10293
+ return uri.replace("ipfs://", IPFS_GATEWAY);
10294
+ }
10295
+ if (uri.startsWith("data:application/json")) {
10296
+ return uri;
10297
+ }
10298
+ return uri;
10299
+ }
10300
+ function mapTokenType(blockscoutType) {
10301
+ switch (blockscoutType) {
10302
+ case "ERC-20":
10303
+ return "erc20";
10304
+ case "ERC-721":
10305
+ return "erc721";
10306
+ case "ERC-1155":
10307
+ return "erc1155";
10308
+ default:
10309
+ return "erc20";
10310
+ }
10311
+ }
10312
+ function mapBlockscoutToAsset(balance) {
10313
+ const { token, value, token_id, token_instance } = balance;
10314
+ const type = mapTokenType(token.type);
10315
+ const decimals = token.decimals ? parseInt(token.decimals, 10) : void 0;
10316
+ let formattedBalance;
10317
+ if (type === "erc721") {
10318
+ formattedBalance = "1";
10319
+ } else if (decimals !== void 0) {
10320
+ formattedBalance = parseFloat(formatUnits(BigInt(value), decimals)).toFixed(4);
10321
+ } else {
10322
+ formattedBalance = value;
10323
+ }
10324
+ const asset = {
10325
+ type,
10326
+ address: token.address,
10327
+ name: token.name || "Unknown Token",
10328
+ symbol: token.symbol || "???",
10329
+ balance: value,
10330
+ formattedBalance,
10331
+ decimals,
10332
+ logo: token.icon_url || void 0
10333
+ };
10334
+ if (type === "erc721" || type === "erc1155") {
10335
+ asset.tokenId = token_id || void 0;
10336
+ if (token_instance?.metadata) {
10337
+ const metadata = token_instance.metadata;
10338
+ asset.image = metadata.image ? resolveIpfsUri(metadata.image) : void 0;
10339
+ asset.nftMetadata = {
10340
+ name: metadata.name,
10341
+ description: metadata.description,
10342
+ image: asset.image,
10343
+ externalUrl: metadata.external_url,
10344
+ collectionName: token.name,
10345
+ attributes: metadata.attributes
10346
+ };
10347
+ }
10348
+ }
10349
+ return asset;
10350
+ }
10351
+ function mapBlockscoutNftToAsset(nft) {
10352
+ const { token, value, id, image_url, metadata } = nft;
10353
+ const type = mapTokenType(token.type);
10354
+ const imageUrl = image_url || (metadata?.image ? resolveIpfsUri(metadata.image) : void 0);
10355
+ const asset = {
10356
+ type,
10357
+ address: token.address,
10358
+ name: token.name || "Unknown NFT",
10359
+ symbol: token.symbol || "???",
10360
+ balance: value || "1",
10361
+ formattedBalance: "1",
10362
+ tokenId: id,
10363
+ logo: token.icon_url || void 0,
10364
+ image: imageUrl,
10365
+ nftMetadata: {
10366
+ name: metadata?.name,
10367
+ description: metadata?.description,
10368
+ image: imageUrl,
10369
+ externalUrl: metadata?.external_url,
10370
+ collectionName: token.name,
10371
+ attributes: metadata?.attributes
10372
+ }
10373
+ };
10374
+ return asset;
10375
+ }
10376
+ function createError(error) {
10377
+ if (error instanceof Error) {
10378
+ const message = error.message;
10379
+ if (message.includes("abort") || message.includes("timeout")) {
10380
+ return {
10381
+ type: "timeout",
10382
+ message: "Unable to load token list - request timed out",
10383
+ retryable: true
10384
+ };
10385
+ }
10386
+ if (message.includes("network") || message.includes("fetch")) {
10387
+ return {
10388
+ type: "network",
10389
+ message: "Unable to load token list - network error",
10390
+ retryable: true
10391
+ };
10392
+ }
10393
+ if (message.includes("Blockscout") || message.includes("API")) {
10394
+ return {
10395
+ type: "api",
10396
+ message: "Token service unavailable",
10397
+ retryable: true
10398
+ };
10399
+ }
10400
+ return {
10401
+ type: "unknown",
10402
+ message: "Unable to load token list",
10403
+ retryable: true
10404
+ };
10405
+ }
10406
+ return {
10407
+ type: "unknown",
10408
+ message: "Unable to load token list",
10409
+ retryable: true
10410
+ };
10411
+ }
10412
+ function useBlockscoutAssets(options) {
10413
+ const { address, enabled = true, detectSecurityTokens = true } = options;
10414
+ const blockscoutApiUrl = getBlockscoutApiUrl();
10415
+ const blockscoutClient = useMemo4(
10416
+ () => createBlockscoutClient({ baseUrl: blockscoutApiUrl }),
10417
+ [blockscoutApiUrl]
10418
+ );
10419
+ const publicClient2 = usePublicClient({ chainId: lumiaBeam.id });
10420
+ const lastRefreshRef = useRef12(0);
10421
+ const {
10422
+ data: nativeBalanceData,
10423
+ isLoading: nativeLoading,
10424
+ refetch: refetchNative
10425
+ } = useBalance2({
10281
10426
  address,
10282
10427
  chainId: lumiaBeam.id,
10283
10428
  query: {
10284
- enabled: !!address
10429
+ enabled: !!address && enabled
10285
10430
  }
10286
10431
  });
10287
- const tokenContracts = COMMON_TOKENS.map((token) => ({
10288
- address: token.address,
10289
- abi: erc20Abi,
10290
- functionName: "balanceOf",
10291
- args: [address],
10292
- chainId: lumiaBeam.id
10293
- }));
10294
- const readContractsResult = useReadContracts({
10295
- contracts: tokenContracts,
10296
- query: {
10297
- enabled: !!address && COMMON_TOKENS.length > 0
10298
- }
10432
+ const {
10433
+ data: tokenBalances,
10434
+ isLoading: tokensLoading,
10435
+ error: tokensError,
10436
+ refetch: refetchTokens,
10437
+ dataUpdatedAt
10438
+ } = useQuery11({
10439
+ queryKey: [BLOCKSCOUT_QUERY_KEY, address, blockscoutApiUrl],
10440
+ queryFn: () => blockscoutClient.getTokenBalances(address),
10441
+ enabled: !!address && enabled,
10442
+ staleTime: BLOCKSCOUT_QUERY_STALE_TIME,
10443
+ gcTime: BLOCKSCOUT_QUERY_GC_TIME,
10444
+ retry: 2,
10445
+ retryDelay: 1e3
10299
10446
  });
10300
- const { data: tokenBalances, isLoading: tokenBalancesLoading, refetch: refetchTokenBalances } = readContractsResult;
10301
- const getAllAssets = () => {
10302
- const assets = [];
10303
- if (nativeBalance) {
10304
- assets.push({
10447
+ const {
10448
+ data: nftItems,
10449
+ isLoading: nftsLoading,
10450
+ refetch: refetchNfts
10451
+ } = useQuery11({
10452
+ queryKey: [BLOCKSCOUT_QUERY_KEY, "nfts", address, blockscoutApiUrl],
10453
+ queryFn: () => blockscoutClient.getNfts(address),
10454
+ enabled: !!address && enabled,
10455
+ staleTime: BLOCKSCOUT_QUERY_STALE_TIME,
10456
+ gcTime: BLOCKSCOUT_QUERY_GC_TIME,
10457
+ retry: 2,
10458
+ retryDelay: 1e3
10459
+ });
10460
+ const erc20TokenAddresses = useMemo4(() => {
10461
+ if (!tokenBalances) return [];
10462
+ return tokenBalances.filter((tb) => tb.token.type === "ERC-20").map((tb) => tb.token.address);
10463
+ }, [tokenBalances]);
10464
+ const { data: erc3643Results } = useQuery11({
10465
+ queryKey: [ERC3643_DETECTION_QUERY_KEY, address, erc20TokenAddresses],
10466
+ queryFn: async () => {
10467
+ if (!publicClient2 || erc20TokenAddresses.length === 0) {
10468
+ return /* @__PURE__ */ new Map();
10469
+ }
10470
+ const results = /* @__PURE__ */ new Map();
10471
+ const batchSize = 10;
10472
+ for (let i = 0; i < erc20TokenAddresses.length; i += batchSize) {
10473
+ const batch = erc20TokenAddresses.slice(i, i + batchSize);
10474
+ const promises = batch.map(async (tokenAddress) => {
10475
+ try {
10476
+ const registry = await publicClient2.readContract({
10477
+ address: tokenAddress,
10478
+ abi: ERC3643_ABI,
10479
+ functionName: "identityRegistry"
10480
+ });
10481
+ if (registry && registry !== "0x0000000000000000000000000000000000000000") {
10482
+ return { tokenAddress, registry };
10483
+ }
10484
+ return null;
10485
+ } catch {
10486
+ return null;
10487
+ }
10488
+ });
10489
+ const batchResults = await Promise.allSettled(promises);
10490
+ batchResults.forEach((result) => {
10491
+ if (result.status === "fulfilled" && result.value) {
10492
+ results.set(result.value.tokenAddress.toLowerCase(), result.value.registry);
10493
+ }
10494
+ });
10495
+ }
10496
+ return results;
10497
+ },
10498
+ enabled: !!address && enabled && detectSecurityTokens && erc20TokenAddresses.length > 0 && !!publicClient2,
10499
+ staleTime: BLOCKSCOUT_QUERY_STALE_TIME * 2,
10500
+ // Less frequent refresh for contract calls
10501
+ gcTime: BLOCKSCOUT_QUERY_GC_TIME,
10502
+ retry: 1
10503
+ });
10504
+ const assets = useMemo4(() => {
10505
+ const result = [];
10506
+ if (nativeBalanceData) {
10507
+ result.push({
10305
10508
  type: "native",
10306
10509
  name: "Lumia",
10307
10510
  symbol: "LUMIA",
10308
- balance: nativeBalance.value.toString(),
10309
- formattedBalance: parseFloat(nativeBalance.formatted).toFixed(4),
10511
+ balance: nativeBalanceData.value.toString(),
10512
+ formattedBalance: parseFloat(nativeBalanceData.formatted).toFixed(4),
10310
10513
  decimals: 18
10311
10514
  });
10312
10515
  }
10313
- if (tokenBalances && COMMON_TOKENS.length > 0) {
10314
- tokenBalances.forEach((balance, index) => {
10315
- const token = COMMON_TOKENS[index];
10316
- if (balance.status === "success" && balance.result) {
10317
- const balanceValue = balance.result;
10318
- const formattedBalance = formatUnits(balanceValue, token.decimals);
10319
- assets.push({
10320
- type: "erc20",
10321
- address: token.address,
10322
- name: token.name,
10323
- symbol: token.symbol,
10324
- balance: balanceValue.toString(),
10325
- formattedBalance: parseFloat(formattedBalance).toFixed(4),
10326
- decimals: token.decimals,
10327
- logo: token.logo
10328
- });
10516
+ if (tokenBalances) {
10517
+ const erc20Tokens = tokenBalances.filter((balance) => balance.token.type === "ERC-20");
10518
+ const mappedTokens = erc20Tokens.map((balance) => {
10519
+ const asset = mapBlockscoutToAsset(balance);
10520
+ if (asset.type === "erc20" && asset.address && erc3643Results) {
10521
+ const registryAddress = erc3643Results.get(asset.address.toLowerCase());
10522
+ if (registryAddress) {
10523
+ asset.type = "erc3643";
10524
+ asset.complianceStatus = {
10525
+ isSecurityToken: true,
10526
+ identityRegistry: registryAddress
10527
+ };
10528
+ }
10329
10529
  }
10530
+ return asset;
10330
10531
  });
10532
+ result.push(...mappedTokens);
10331
10533
  }
10332
- return assets;
10333
- };
10334
- const getTokenBalance = (tokenAddress) => {
10335
- const tokenIndex = COMMON_TOKENS.findIndex(
10336
- (token2) => token2.address.toLowerCase() === tokenAddress.toLowerCase()
10337
- );
10338
- if (tokenIndex === -1 || !tokenBalances?.[tokenIndex]) {
10339
- return null;
10340
- }
10341
- const balance = tokenBalances[tokenIndex];
10342
- const token = COMMON_TOKENS[tokenIndex];
10343
- if (balance.status === "success" && balance.result) {
10344
- const balanceValue = balance.result;
10345
- const formattedBalance = formatUnits(balanceValue, token.decimals);
10346
- return {
10347
- address: token.address,
10348
- name: token.name,
10349
- symbol: token.symbol,
10350
- decimals: token.decimals,
10351
- balance: balanceValue.toString(),
10352
- formattedBalance: parseFloat(formattedBalance).toFixed(4),
10353
- logo: token.logo
10354
- };
10534
+ if (nftItems && nftItems.length > 0) {
10535
+ const mappedNfts = nftItems.map(mapBlockscoutNftToAsset);
10536
+ result.push(...mappedNfts);
10355
10537
  }
10356
- return null;
10357
- };
10358
- const refreshBalances = async () => {
10359
- await Promise.all([
10360
- refetchNativeBalance(),
10361
- refetchTokenBalances()
10362
- ]);
10363
- };
10364
- return {
10365
- nativeBalance,
10366
- tokenBalances,
10367
- assets: getAllAssets(),
10368
- getTokenBalance,
10369
- refreshBalances,
10370
- isLoading: nativeBalanceLoading || tokenBalancesLoading,
10371
- isConnected: !!address
10372
- };
10373
- }
10374
- function useTokenInfo(tokenAddress) {
10375
- const readContractsResult = useReadContracts({
10376
- contracts: [
10377
- { address: tokenAddress, abi: erc20Abi, functionName: "name", chainId: lumiaBeam.id },
10378
- { address: tokenAddress, abi: erc20Abi, functionName: "symbol", chainId: lumiaBeam.id },
10379
- { address: tokenAddress, abi: erc20Abi, functionName: "decimals", chainId: lumiaBeam.id }
10380
- ]
10381
- });
10382
- const { data: tokenData, isLoading } = readContractsResult;
10383
- if (!tokenData || isLoading) {
10384
- return { isLoading, tokenInfo: null };
10385
- }
10386
- const [nameResult, symbolResult, decimalsResult] = tokenData;
10387
- if (nameResult.status === "success" && symbolResult.status === "success" && decimalsResult.status === "success") {
10538
+ return result;
10539
+ }, [nativeBalanceData, tokenBalances, nftItems, erc3643Results]);
10540
+ const nativeBalance = useMemo4(() => {
10541
+ if (!nativeBalanceData) return null;
10388
10542
  return {
10389
- isLoading: false,
10390
- tokenInfo: {
10391
- name: nameResult.result,
10392
- symbol: symbolResult.result,
10393
- decimals: decimalsResult.result,
10394
- address: tokenAddress
10395
- }
10543
+ value: nativeBalanceData.value,
10544
+ formatted: nativeBalanceData.formatted,
10545
+ symbol: "LUMIA"
10396
10546
  };
10397
- }
10398
- return { isLoading: false, tokenInfo: null };
10399
- }
10400
- function useTokenBalance(tokenAddress, userAddress) {
10401
- const { data: balance, isLoading, refetch } = useReadContract({
10402
- address: tokenAddress,
10403
- abi: erc20Abi,
10404
- functionName: "balanceOf",
10405
- args: userAddress ? [userAddress] : void 0,
10406
- chainId: lumiaBeam.id,
10407
- query: {
10408
- enabled: !!userAddress
10547
+ }, [nativeBalanceData]);
10548
+ const error = useMemo4(() => {
10549
+ if (!tokensError) return null;
10550
+ return createError(tokensError);
10551
+ }, [tokensError]);
10552
+ const refreshBalances = useCallback12(async () => {
10553
+ const now = Date.now();
10554
+ if (now - lastRefreshRef.current < BLOCKSCOUT_REFRESH_DEBOUNCE) {
10555
+ return;
10409
10556
  }
10410
- });
10411
- const { tokenInfo } = useTokenInfo(tokenAddress);
10412
- const formattedBalance = React8.useMemo(() => {
10413
- if (!balance || !tokenInfo) return "0";
10414
- return formatUnits(balance, tokenInfo.decimals);
10415
- }, [balance, tokenInfo]);
10557
+ lastRefreshRef.current = now;
10558
+ await Promise.all([refetchNative(), refetchTokens(), refetchNfts()]);
10559
+ }, [refetchNative, refetchTokens, refetchNfts]);
10560
+ const getTokenBalance = useCallback12(
10561
+ (tokenAddress) => {
10562
+ return assets.find((a) => a.address?.toLowerCase() === tokenAddress.toLowerCase()) || null;
10563
+ },
10564
+ [assets]
10565
+ );
10416
10566
  return {
10417
- balance,
10418
- formattedBalance,
10419
- tokenInfo,
10420
- isLoading,
10421
- refetch
10567
+ nativeBalance,
10568
+ assets,
10569
+ isLoading: nativeLoading || tokensLoading || nftsLoading,
10570
+ isInitialLoading: nativeLoading && !nativeBalanceData,
10571
+ error,
10572
+ isBlockscoutAvailable: !tokensError,
10573
+ refreshBalances,
10574
+ getTokenBalance,
10575
+ lastUpdated: dataUpdatedAt || null
10422
10576
  };
10423
10577
  }
10424
10578
 
10425
10579
  // src/internal/components/PortfolioMenu/PortfolioItem.tsx
10426
10580
  init_base();
10427
- import { useQuery as useQuery11, useQueryClient as useQueryClient15 } from "@tanstack/react-query";
10428
- import { Loader as Loader15 } from "lucide-react";
10429
- import { Fragment as Fragment14, jsx as jsx52, jsxs as jsxs43 } from "react/jsx-runtime";
10581
+ import { useQuery as useQuery12, useQueryClient as useQueryClient15 } from "@tanstack/react-query";
10582
+ import { Image as ImageIcon, Loader as Loader15, Shield, Sparkles } from "lucide-react";
10583
+ import { useState as useState10 } from "react";
10584
+ import { Fragment as Fragment15, jsx as jsx52, jsxs as jsxs43 } from "react/jsx-runtime";
10430
10585
  var price16 = Intl.NumberFormat("en-US", { minimumFractionDigits: 16, maximumFractionDigits: 16 });
10431
10586
  function formatValue(price) {
10432
- if (!price) return /* @__PURE__ */ jsx52(Fragment14, { children: `0.00` });
10587
+ if (!price) return /* @__PURE__ */ jsx52(Fragment15, { children: `0.00` });
10433
10588
  if (price < 0.01) {
10434
10589
  const strigified = price16.format(price);
10435
10590
  const absValue = parseInt(strigified.replace(/^0\./, "")).toString().slice(0, 2);
10436
10591
  const zeroQnt = strigified.replace(/^0\./, "").split("").findIndex((el) => +el > 0);
10437
- return /* @__PURE__ */ jsxs43(Fragment14, { children: [
10592
+ return /* @__PURE__ */ jsxs43(Fragment15, { children: [
10438
10593
  `0.0`,
10439
10594
  /* @__PURE__ */ jsx52("sub", { className: "text-[10px]", children: zeroQnt }),
10440
10595
  absValue
10441
10596
  ] });
10442
10597
  }
10443
- return /* @__PURE__ */ jsx52(Fragment14, { children: price.toFixed(2) });
10598
+ return /* @__PURE__ */ jsx52(Fragment15, { children: price.toFixed(2) });
10444
10599
  }
10445
10600
  function openInExplorer(address) {
10446
10601
  window.open(`${LUMIA_EXPLORER_URL}/address/${address}`, "_blank");
10447
10602
  }
10603
+ function isNftAsset(asset) {
10604
+ if (!("type" in asset)) return false;
10605
+ return asset.type === "erc721" || asset.type === "erc1155";
10606
+ }
10607
+ function getNftImage(asset) {
10608
+ if (!("type" in asset)) return void 0;
10609
+ return asset.image || asset.nftMetadata?.image;
10610
+ }
10611
+ function isSecurityToken(asset) {
10612
+ if (!("type" in asset)) return false;
10613
+ return asset.type === "erc3643";
10614
+ }
10448
10615
  async function getAssetRate2(symbol) {
10449
10616
  const assetURL = `https://api.binance.com/api/v3/ticker/price?symbol=${symbol.toUpperCase()}USDT`;
10450
10617
  const response = await fetch(assetURL);
@@ -10453,14 +10620,18 @@ async function getAssetRate2(symbol) {
10453
10620
  var ASSETS_RATES_QUERY_KEY = "lumia-passport-assets-rates-query-key";
10454
10621
  function PortfolioItem(props) {
10455
10622
  const { address, asset, isProjectAsset } = props;
10623
+ const [nftImageError, setNftImageError] = useState10(false);
10456
10624
  const { assets: projectAssets, showBalanceAs: showBalanceAsSymbol } = useLumiaPassportConfig().config.current.projectAssets || {};
10457
10625
  const qc = useQueryClient15();
10458
10626
  const { balanceQueryKey } = projectAssets?.find((a) => a.symbol === showBalanceAsSymbol) || {};
10459
10627
  const projectAssetBalance = !!balanceQueryKey ? qc.getQueryData(balanceQueryKey) : null;
10460
- const { data: assetRate, isLoading: isRateLoading } = useQuery11({
10628
+ const isNft = isNftAsset(asset);
10629
+ const nftImage = getNftImage(asset);
10630
+ const isSecurity = isSecurityToken(asset);
10631
+ const { data: assetRate, isLoading: isRateLoading } = useQuery12({
10461
10632
  retry: false,
10462
10633
  staleTime: 4 * 60 * 1e3,
10463
- enabled: !!address && !!asset.symbol && !isProjectAsset,
10634
+ enabled: !!address && !!asset.symbol && !isProjectAsset && !isNft && !isSecurity,
10464
10635
  queryKey: [ASSETS_RATES_QUERY_KEY, address, asset.symbol],
10465
10636
  queryFn: async () => await getAssetRate2(asset.symbol)
10466
10637
  });
@@ -10476,22 +10647,68 @@ function PortfolioItem(props) {
10476
10647
  ),
10477
10648
  onClick: () => asset.address ? openInExplorer(asset.address) : void 0,
10478
10649
  children: [
10479
- /* @__PURE__ */ jsx52(
10650
+ /* @__PURE__ */ jsxs43(
10480
10651
  "div",
10481
10652
  {
10482
10653
  className: cn(
10483
- "flex-none w-10 h-10 bg-[var(--l-pass-fg)] rounded-full flex items-center justify-center",
10484
- "group-hover:opacity-60 transition-opacity"
10654
+ "flex-none flex items-center justify-center overflow-hidden relative",
10655
+ "group-hover:opacity-60 transition-opacity",
10656
+ // NFTs get rounded corners, tokens get circular
10657
+ isNft ? "w-12 h-12 rounded-lg" : "w-10 h-10 rounded-full",
10658
+ !asset.logo && !nftImage && "bg-[var(--l-pass-fg)]"
10485
10659
  ),
10486
- children: /* @__PURE__ */ jsx52("span", { className: "text-[var(--l-pass-fg-inverted)] font-bold text-sm", children: asset.symbol.charAt(0) })
10660
+ children: [
10661
+ isNft && nftImage && !nftImageError ? /* @__PURE__ */ jsx52(
10662
+ "img",
10663
+ {
10664
+ src: nftImage,
10665
+ alt: asset.nftMetadata?.name || asset.name,
10666
+ className: "w-full h-full object-cover",
10667
+ onError: () => setNftImageError(true)
10668
+ }
10669
+ ) : isNft && (!nftImage || nftImageError) ? (
10670
+ // NFT placeholder when no image available
10671
+ /* @__PURE__ */ jsx52("div", { className: "w-full h-full bg-[var(--l-pass-fg)] flex items-center justify-center", children: /* @__PURE__ */ jsx52(ImageIcon, { className: "w-5 h-5 text-[var(--l-pass-fg-inverted)]" }) })
10672
+ ) : asset.logo ? /* @__PURE__ */ jsx52(
10673
+ "img",
10674
+ {
10675
+ src: asset.logo,
10676
+ alt: asset.symbol,
10677
+ className: "w-full h-full object-cover",
10678
+ onError: (e) => {
10679
+ const target = e.target;
10680
+ target.style.display = "none";
10681
+ target.parentElement.classList.add("bg-[var(--l-pass-fg)]");
10682
+ target.parentElement.innerHTML = `<span class="text-[var(--l-pass-fg-inverted)] font-bold text-sm">${asset.symbol.charAt(0)}</span>`;
10683
+ }
10684
+ }
10685
+ ) : /* @__PURE__ */ jsx52("span", { className: "text-[var(--l-pass-fg-inverted)] font-bold text-sm", children: asset.symbol.charAt(0) }),
10686
+ isNft && /* @__PURE__ */ jsx52("div", { className: "absolute -top-1 -right-1 w-4 h-4 rounded-full bg-[var(--l-pass-accent)] flex items-center justify-center", children: /* @__PURE__ */ jsx52(Sparkles, { className: "w-2.5 h-2.5 text-[var(--l-pass-fg-inverted)]" }) }),
10687
+ isSecurity && /* @__PURE__ */ jsx52(
10688
+ "div",
10689
+ {
10690
+ className: "absolute -top-1 -right-1 w-4 h-4 rounded-full bg-amber-500 flex items-center justify-center",
10691
+ title: "Security Token (ERC-3643)",
10692
+ children: /* @__PURE__ */ jsx52(Shield, { className: "w-2.5 h-2.5 text-white" })
10693
+ }
10694
+ )
10695
+ ]
10487
10696
  }
10488
10697
  ),
10489
10698
  /* @__PURE__ */ jsxs43("div", { className: "w-full flex-1", children: [
10490
10699
  /* @__PURE__ */ jsxs43("div", { className: "w-full flex items-center justify-between text-xs", children: [
10491
- /* @__PURE__ */ jsx52("span", { children: asset.name }),
10492
- !isProjectAsset && /* @__PURE__ */ jsx52("span", { className: "text-[var(--l-pass-fg-muted)]", children: "USD" })
10700
+ /* @__PURE__ */ jsx52("span", { className: "truncate max-w-[150px]", title: isNft ? asset.nftMetadata?.collectionName || asset.name : asset.name, children: isNft ? asset.nftMetadata?.collectionName || asset.name || (asset.address ? `${asset.address.slice(0, 6)}...${asset.address.slice(-4)}` : "Unknown") : asset.name || (asset.address ? `${asset.address.slice(0, 6)}...${asset.address.slice(-4)}` : "Unknown") }),
10701
+ !isProjectAsset && !isNft && !isSecurity && /* @__PURE__ */ jsx52("span", { className: "text-[var(--l-pass-fg-muted)]", children: "USD" }),
10702
+ isNft && "type" in asset && /* @__PURE__ */ jsx52("span", { className: "text-[var(--l-pass-fg-muted)] uppercase text-[10px]", children: asset.type === "erc721" ? "ERC-721" : "ERC-1155" }),
10703
+ isSecurity && /* @__PURE__ */ jsx52("span", { className: "text-amber-500 uppercase text-[10px] font-medium", children: "Security Token" })
10493
10704
  ] }),
10494
- /* @__PURE__ */ jsxs43("div", { className: "w-full flex items-center justify-between font-bold text-lg leading-5", children: [
10705
+ /* @__PURE__ */ jsx52("div", { className: "w-full flex items-center justify-between font-bold text-lg leading-5", children: isNft ? /* @__PURE__ */ jsxs43(Fragment15, { children: [
10706
+ /* @__PURE__ */ jsx52("span", { className: "truncate max-w-[160px]", title: asset.nftMetadata?.name || asset.symbol, children: asset.nftMetadata?.name || asset.symbol }),
10707
+ "tokenId" in asset && asset.tokenId && /* @__PURE__ */ jsxs43("span", { className: "text-xs text-[var(--l-pass-fg-muted)] font-normal", children: [
10708
+ "#",
10709
+ asset.tokenId.length > 8 ? `${asset.tokenId.slice(0, 6)}...` : asset.tokenId
10710
+ ] })
10711
+ ] }) : /* @__PURE__ */ jsxs43(Fragment15, { children: [
10495
10712
  /* @__PURE__ */ jsxs43("span", { children: [
10496
10713
  /* @__PURE__ */ jsx52("span", { children: formatValue(Number(renderBalance)) }),
10497
10714
  /* @__PURE__ */ jsx52("span", { children: " " + asset.symbol })
@@ -10503,7 +10720,7 @@ function PortfolioItem(props) {
10503
10720
  currency: "USD",
10504
10721
  style: "currency"
10505
10722
  }) })
10506
- ] })
10723
+ ] }) })
10507
10724
  ] })
10508
10725
  ]
10509
10726
  }
@@ -10520,8 +10737,10 @@ function PortfolioMenu() {
10520
10737
  const setPage = useLayoutDataStore((st) => st.setPage);
10521
10738
  const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
10522
10739
  const address = useLumiaPassportSession((st) => st.address);
10523
- const { assets, refreshBalances, isLoading } = useAssets(address);
10524
- const refreshAllAssetsBalances = useCallback12(() => {
10740
+ const { assets, refreshBalances, isLoading, error, isBlockscoutAvailable } = useBlockscoutAssets({
10741
+ address
10742
+ });
10743
+ const refreshAllAssetsBalances = useCallback13(() => {
10525
10744
  Promise.all(projectAssets.map((asset) => qc.invalidateQueries({ queryKey: asset.balanceQueryKey })));
10526
10745
  refreshBalances();
10527
10746
  }, [qc, projectAssets, refreshBalances]);
@@ -10550,6 +10769,10 @@ function PortfolioMenu() {
10550
10769
  )
10551
10770
  ] }),
10552
10771
  /* @__PURE__ */ jsxs44("div", { className: "w-full flex flex-col gap-[var(--l-pass-gap)]", children: [
10772
+ error && !isBlockscoutAvailable && /* @__PURE__ */ jsxs44("div", { className: "w-full flex items-center gap-2 p-3 rounded-lg bg-[var(--l-pass-warning-bg)] text-[var(--l-pass-warning)]", children: [
10773
+ /* @__PURE__ */ jsx53(AlertCircle4, { className: "h-4 w-4 flex-shrink-0" }),
10774
+ /* @__PURE__ */ jsx53("span", { className: "text-sm", children: error.message })
10775
+ ] }),
10553
10776
  isLoading && /* @__PURE__ */ jsxs44("div", { className: "w-full flex items-center justify-center gap-[var(--l-pass-gap)] p-[var(--l-pass-pd)]", children: [
10554
10777
  /* @__PURE__ */ jsx53(Loader16, { className: "h-5 w-5 animate-spin" }),
10555
10778
  /* @__PURE__ */ jsx53("span", { className: "text-[var(--l-pass-muted)]", children: "Loading assets..." })
@@ -10566,7 +10789,7 @@ function PortfolioMenu() {
10566
10789
  address,
10567
10790
  asset
10568
10791
  },
10569
- `${asset.type}-${asset.address || "native"}-${index}`
10792
+ `${asset.type}-${asset.address || "native"}-${asset.tokenId || index}`
10570
10793
  ))
10571
10794
  ] })
10572
10795
  ] })
@@ -10578,7 +10801,7 @@ function PortfolioMenu() {
10578
10801
  // src/internal/components/SecurityMenu/SecurityMenu.tsx
10579
10802
  init_auth();
10580
10803
  init_keyshare();
10581
- import { useQuery as useQuery12, useQueryClient as useQueryClient17 } from "@tanstack/react-query";
10804
+ import { useQuery as useQuery13, useQueryClient as useQueryClient17 } from "@tanstack/react-query";
10582
10805
  import {
10583
10806
  AlertTriangle as AlertTriangle4,
10584
10807
  ArrowLeft as ArrowLeft12,
@@ -10589,10 +10812,10 @@ import {
10589
10812
  Loader as Loader17,
10590
10813
  RefreshCw as RefreshCw2,
10591
10814
  Server as Server2,
10592
- Shield,
10815
+ Shield as Shield2,
10593
10816
  Trash2 as Trash22
10594
10817
  } from "lucide-react";
10595
- import { useEffect as useEffect24, useState as useState10 } from "react";
10818
+ import { useEffect as useEffect24, useState as useState11 } from "react";
10596
10819
  init_iframe_manager();
10597
10820
  init_vaultClient();
10598
10821
  import { jsx as jsx54, jsxs as jsxs45 } from "react/jsx-runtime";
@@ -10614,21 +10837,21 @@ function SecurityMenu() {
10614
10837
  useEffect24(() => {
10615
10838
  if (!userId) setPage("main-menu" /* MAIN_MENU */);
10616
10839
  }, [userId, setPage]);
10617
- const [localInfo, setLocalInfo] = useState10(null);
10618
- const [recoveryCreatedAt, setRecoveryCreatedAt] = useState10(null);
10619
- const [recoveryBrowser, setRecoveryBrowser] = useState10(null);
10620
- const [recoveryUa, setRecoveryUa] = useState10(null);
10621
- const [recoveryDeviceId, setRecoveryDeviceId] = useState10(null);
10622
- const [recoveryDeviceName, setRecoveryDeviceName] = useState10(null);
10623
- const [recoveryCountry, setRecoveryCountry] = useState10(null);
10624
- const [hasServerBackup, setHasServerBackup] = useState10(false);
10625
- const [trustedApps, setTrustedApps] = useState10([]);
10626
- const [appToRemove, setAppToRemove] = useState10(null);
10840
+ const [localInfo, setLocalInfo] = useState11(null);
10841
+ const [recoveryCreatedAt, setRecoveryCreatedAt] = useState11(null);
10842
+ const [recoveryBrowser, setRecoveryBrowser] = useState11(null);
10843
+ const [recoveryUa, setRecoveryUa] = useState11(null);
10844
+ const [recoveryDeviceId, setRecoveryDeviceId] = useState11(null);
10845
+ const [recoveryDeviceName, setRecoveryDeviceName] = useState11(null);
10846
+ const [recoveryCountry, setRecoveryCountry] = useState11(null);
10847
+ const [hasServerBackup, setHasServerBackup] = useState11(false);
10848
+ const [trustedApps, setTrustedApps] = useState11([]);
10849
+ const [appToRemove, setAppToRemove] = useState11(null);
10627
10850
  const {
10628
10851
  data: recoveryData,
10629
10852
  isFetching: isRecoveryRefreshing
10630
10853
  // error: recoveryError
10631
- } = useQuery12({
10854
+ } = useQuery13({
10632
10855
  enabled: !!userId,
10633
10856
  queryKey: [KEYSHARE_RECOVERY_STATS_QUERY, userId],
10634
10857
  queryFn: async () => {
@@ -10727,7 +10950,7 @@ function SecurityMenu() {
10727
10950
  ] }),
10728
10951
  /* @__PURE__ */ jsxs45("div", { className: "space-y-2 text-center", children: [
10729
10952
  /* @__PURE__ */ jsxs45("div", { className: "flex items-center justify-center gap-[var(--l-pass-gap)]", children: [
10730
- /* @__PURE__ */ jsx54(Shield, { className: "h-4 w-4" }),
10953
+ /* @__PURE__ */ jsx54(Shield2, { className: "h-4 w-4" }),
10731
10954
  /* @__PURE__ */ jsx54("span", { className: "text-xs font-medium", children: "Vault" })
10732
10955
  ] }),
10733
10956
  /* @__PURE__ */ jsxs45(
@@ -10873,22 +11096,22 @@ function SecurityMenu() {
10873
11096
  }
10874
11097
 
10875
11098
  // src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
10876
- import { AlertCircle as AlertCircle4, ArrowLeft as ArrowLeft13, CheckCircle2 as CheckCircle24, Loader as Loader18, Wallet } from "lucide-react";
10877
- import { useEffect as useEffect25, useState as useState12 } from "react";
11099
+ import { AlertCircle as AlertCircle5, ArrowLeft as ArrowLeft13, CheckCircle2 as CheckCircle24, Loader as Loader18, Wallet as Wallet3 } from "lucide-react";
11100
+ import { useEffect as useEffect25, useState as useState13 } from "react";
10878
11101
  import { isAddress as isAddress2 } from "viem";
10879
- import { useBalance as useBalance3 } from "wagmi";
11102
+ import { useBalance as useBalance4 } from "wagmi";
10880
11103
 
10881
11104
  // src/hooks/useSendTransaction.ts
10882
- import { useCallback as useCallback13, useState as useState11 } from "react";
11105
+ import { useCallback as useCallback14, useState as useState12 } from "react";
10883
11106
  import { isAddress, parseEther as parseEther2 } from "viem";
10884
11107
  init_account();
10885
11108
  function useSendTransaction() {
10886
11109
  const session = useLumiaPassportSession((st) => st.session);
10887
11110
  const address = useLumiaPassportSession((st) => st.address);
10888
- const [isLoading, setIsLoading] = useState11(false);
10889
- const [error, setError] = useState11(null);
10890
- const [userOpHash, setUserOpHash] = useState11(null);
10891
- const sendTransaction = useCallback13(
11111
+ const [isLoading, setIsLoading] = useState12(false);
11112
+ const [error, setError] = useState12(null);
11113
+ const [userOpHash, setUserOpHash] = useState12(null);
11114
+ const sendTransaction = useCallback14(
10892
11115
  async (params) => {
10893
11116
  if (!session || !address) {
10894
11117
  setError("No active session");
@@ -10928,7 +11151,7 @@ function useSendTransaction() {
10928
11151
  },
10929
11152
  [session, address]
10930
11153
  );
10931
- const reset = useCallback13(() => {
11154
+ const reset = useCallback14(() => {
10932
11155
  setError(null);
10933
11156
  setUserOpHash(null);
10934
11157
  setIsLoading(false);
@@ -10942,9 +11165,170 @@ function useSendTransaction() {
10942
11165
  };
10943
11166
  }
10944
11167
 
11168
+ // src/modules/assets.ts
11169
+ init_base();
11170
+ import React8 from "react";
11171
+ import { useBalance as useBalance3, useReadContract, useReadContracts } from "wagmi";
11172
+ import { formatUnits as formatUnits2, erc20Abi } from "viem";
11173
+ var COMMON_TOKENS = [
11174
+ // Add real token addresses here when available
11175
+ // {
11176
+ // address: '0x....',
11177
+ // name: 'USD Coin',
11178
+ // symbol: 'USDC',
11179
+ // decimals: 6,
11180
+ // logo: 'https://...'
11181
+ // }
11182
+ ];
11183
+ function useAssets(address) {
11184
+ const { data: nativeBalance, isLoading: nativeBalanceLoading, refetch: refetchNativeBalance } = useBalance3({
11185
+ address,
11186
+ chainId: lumiaBeam.id,
11187
+ query: {
11188
+ enabled: !!address
11189
+ }
11190
+ });
11191
+ const tokenContracts = COMMON_TOKENS.map((token) => ({
11192
+ address: token.address,
11193
+ abi: erc20Abi,
11194
+ functionName: "balanceOf",
11195
+ args: [address],
11196
+ chainId: lumiaBeam.id
11197
+ }));
11198
+ const readContractsResult = useReadContracts({
11199
+ contracts: tokenContracts,
11200
+ query: {
11201
+ enabled: !!address && COMMON_TOKENS.length > 0
11202
+ }
11203
+ });
11204
+ const { data: tokenBalances, isLoading: tokenBalancesLoading, refetch: refetchTokenBalances } = readContractsResult;
11205
+ const getAllAssets = () => {
11206
+ const assets = [];
11207
+ if (nativeBalance) {
11208
+ assets.push({
11209
+ type: "native",
11210
+ name: "Lumia",
11211
+ symbol: "LUMIA",
11212
+ balance: nativeBalance.value.toString(),
11213
+ formattedBalance: parseFloat(nativeBalance.formatted).toFixed(4),
11214
+ decimals: 18
11215
+ });
11216
+ }
11217
+ if (tokenBalances && COMMON_TOKENS.length > 0) {
11218
+ tokenBalances.forEach((balance, index) => {
11219
+ const token = COMMON_TOKENS[index];
11220
+ if (balance.status === "success" && balance.result) {
11221
+ const balanceValue = balance.result;
11222
+ const formattedBalance = formatUnits2(balanceValue, token.decimals);
11223
+ assets.push({
11224
+ type: "erc20",
11225
+ address: token.address,
11226
+ name: token.name,
11227
+ symbol: token.symbol,
11228
+ balance: balanceValue.toString(),
11229
+ formattedBalance: parseFloat(formattedBalance).toFixed(4),
11230
+ decimals: token.decimals,
11231
+ logo: token.logo
11232
+ });
11233
+ }
11234
+ });
11235
+ }
11236
+ return assets;
11237
+ };
11238
+ const getTokenBalance = (tokenAddress) => {
11239
+ const tokenIndex = COMMON_TOKENS.findIndex(
11240
+ (token2) => token2.address.toLowerCase() === tokenAddress.toLowerCase()
11241
+ );
11242
+ if (tokenIndex === -1 || !tokenBalances?.[tokenIndex]) {
11243
+ return null;
11244
+ }
11245
+ const balance = tokenBalances[tokenIndex];
11246
+ const token = COMMON_TOKENS[tokenIndex];
11247
+ if (balance.status === "success" && balance.result) {
11248
+ const balanceValue = balance.result;
11249
+ const formattedBalance = formatUnits2(balanceValue, token.decimals);
11250
+ return {
11251
+ address: token.address,
11252
+ name: token.name,
11253
+ symbol: token.symbol,
11254
+ decimals: token.decimals,
11255
+ balance: balanceValue.toString(),
11256
+ formattedBalance: parseFloat(formattedBalance).toFixed(4),
11257
+ logo: token.logo
11258
+ };
11259
+ }
11260
+ return null;
11261
+ };
11262
+ const refreshBalances = async () => {
11263
+ await Promise.all([
11264
+ refetchNativeBalance(),
11265
+ refetchTokenBalances()
11266
+ ]);
11267
+ };
11268
+ return {
11269
+ nativeBalance,
11270
+ tokenBalances,
11271
+ assets: getAllAssets(),
11272
+ getTokenBalance,
11273
+ refreshBalances,
11274
+ isLoading: nativeBalanceLoading || tokenBalancesLoading,
11275
+ isConnected: !!address
11276
+ };
11277
+ }
11278
+ function useTokenInfo(tokenAddress) {
11279
+ const readContractsResult = useReadContracts({
11280
+ contracts: [
11281
+ { address: tokenAddress, abi: erc20Abi, functionName: "name", chainId: lumiaBeam.id },
11282
+ { address: tokenAddress, abi: erc20Abi, functionName: "symbol", chainId: lumiaBeam.id },
11283
+ { address: tokenAddress, abi: erc20Abi, functionName: "decimals", chainId: lumiaBeam.id }
11284
+ ]
11285
+ });
11286
+ const { data: tokenData, isLoading } = readContractsResult;
11287
+ if (!tokenData || isLoading) {
11288
+ return { isLoading, tokenInfo: null };
11289
+ }
11290
+ const [nameResult, symbolResult, decimalsResult] = tokenData;
11291
+ if (nameResult.status === "success" && symbolResult.status === "success" && decimalsResult.status === "success") {
11292
+ return {
11293
+ isLoading: false,
11294
+ tokenInfo: {
11295
+ name: nameResult.result,
11296
+ symbol: symbolResult.result,
11297
+ decimals: decimalsResult.result,
11298
+ address: tokenAddress
11299
+ }
11300
+ };
11301
+ }
11302
+ return { isLoading: false, tokenInfo: null };
11303
+ }
11304
+ function useTokenBalance(tokenAddress, userAddress) {
11305
+ const { data: balance, isLoading, refetch } = useReadContract({
11306
+ address: tokenAddress,
11307
+ abi: erc20Abi,
11308
+ functionName: "balanceOf",
11309
+ args: userAddress ? [userAddress] : void 0,
11310
+ chainId: lumiaBeam.id,
11311
+ query: {
11312
+ enabled: !!userAddress
11313
+ }
11314
+ });
11315
+ const { tokenInfo } = useTokenInfo(tokenAddress);
11316
+ const formattedBalance = React8.useMemo(() => {
11317
+ if (!balance || !tokenInfo) return "0";
11318
+ return formatUnits2(balance, tokenInfo.decimals);
11319
+ }, [balance, tokenInfo]);
11320
+ return {
11321
+ balance,
11322
+ formattedBalance,
11323
+ tokenInfo,
11324
+ isLoading,
11325
+ refetch
11326
+ };
11327
+ }
11328
+
10945
11329
  // src/internal/components/SendRecieveMenu/SendLumiaMenu.tsx
10946
11330
  init_base();
10947
- import { Fragment as Fragment15, jsx as jsx55, jsxs as jsxs46 } from "react/jsx-runtime";
11331
+ import { Fragment as Fragment16, jsx as jsx55, jsxs as jsxs46 } from "react/jsx-runtime";
10948
11332
  function SendLumiaMenu() {
10949
11333
  const page = useLayoutDataStore((st) => st.page);
10950
11334
  const setPage = useLayoutDataStore((st) => st.setPage);
@@ -10952,14 +11336,14 @@ function SendLumiaMenu() {
10952
11336
  const address = useLumiaPassportSession((st) => st.address);
10953
11337
  const { assets } = useAssets(address);
10954
11338
  const { sendTransaction, isLoading, error, userOpHash, reset } = useSendTransaction();
10955
- const { refetch: refetchBalance } = useBalance3({
11339
+ const { refetch: refetchBalance } = useBalance4({
10956
11340
  address,
10957
11341
  chainId: lumiaBeam.id
10958
11342
  });
10959
- const [recipient, setRecipient] = useState12("");
10960
- const [amount, setAmount] = useState12("");
10961
- const [txStep, setTxStep] = useState12("input");
10962
- const [validationError, setValidationError] = useState12(null);
11343
+ const [recipient, setRecipient] = useState13("");
11344
+ const [amount, setAmount] = useState13("");
11345
+ const [txStep, setTxStep] = useState13("input");
11346
+ const [validationError, setValidationError] = useState13(null);
10963
11347
  const nativeAsset = assets.find((a) => a.type === "native");
10964
11348
  const balance = nativeAsset ? parseFloat(nativeAsset.formattedBalance) : 0;
10965
11349
  useEffect25(() => {
@@ -11022,13 +11406,13 @@ function SendLumiaMenu() {
11022
11406
  txStep === "input" && /* @__PURE__ */ jsx55(Button, { variant: "ghost", size: "icon", title: "Back", onClick: () => setPage("main-menu" /* MAIN_MENU */), children: /* @__PURE__ */ jsx55(ArrowLeft13, { className: "h-4 w-4" }) }),
11023
11407
  /* @__PURE__ */ jsx55("span", { className: "text-xl font-semibold", children: "Send LUMIA" })
11024
11408
  ] }),
11025
- txStep === "input" && /* @__PURE__ */ jsxs46(Fragment15, { children: [
11409
+ txStep === "input" && /* @__PURE__ */ jsxs46(Fragment16, { children: [
11026
11410
  /* @__PURE__ */ jsxs46("div", { className: "w-full flex flex-col gap-2", children: [
11027
11411
  /* @__PURE__ */ jsx55("span", { className: "block text-sm font-medium mb-2 text-[var(--l-pass-fg-muted)]", children: "Recipient Address" }),
11028
11412
  /* @__PURE__ */ jsx55(
11029
11413
  Input,
11030
11414
  {
11031
- Icon: Wallet,
11415
+ Icon: Wallet3,
11032
11416
  type: "text",
11033
11417
  value: recipient,
11034
11418
  onChange: (e) => setRecipient(e.target.value),
@@ -11071,12 +11455,12 @@ function SendLumiaMenu() {
11071
11455
  ] })
11072
11456
  ] }),
11073
11457
  (validationError || error) && /* @__PURE__ */ jsxs46("div", { className: "flex items-center gap-2 p-3 bg-[var(--l-pass-bg-error)] text-[var(--l-pass-error)] rounded-[var(--l-pass-el-bdrs)]", children: [
11074
- /* @__PURE__ */ jsx55(AlertCircle4, { className: "h-4 w-4" }),
11458
+ /* @__PURE__ */ jsx55(AlertCircle5, { className: "h-4 w-4" }),
11075
11459
  /* @__PURE__ */ jsx55("span", { className: "text-sm", children: validationError || error })
11076
11460
  ] }),
11077
11461
  /* @__PURE__ */ jsx55(Button, { onClick: handleSend, disabled: isLoading, className: "w-full", size: "large", children: "Continue" })
11078
11462
  ] }),
11079
- txStep === "confirm" && /* @__PURE__ */ jsxs46(Fragment15, { children: [
11463
+ txStep === "confirm" && /* @__PURE__ */ jsxs46(Fragment16, { children: [
11080
11464
  /* @__PURE__ */ jsxs46("div", { className: "bg-gray-50 rounded-lg p-4", children: [
11081
11465
  /* @__PURE__ */ jsx55("h3", { className: "font-medium mb-3", children: "Transaction Details" }),
11082
11466
  /* @__PURE__ */ jsxs46("div", { className: "space-y-2 text-sm", children: [
@@ -11112,7 +11496,7 @@ function SendLumiaMenu() {
11112
11496
  /* @__PURE__ */ jsx55("span", { className: "block text-sm mt-1", children: "Please wait while we process your transaction" })
11113
11497
  ] })
11114
11498
  ] }),
11115
- txStep === "success" && userOpHash && /* @__PURE__ */ jsxs46(Fragment15, { children: [
11499
+ txStep === "success" && userOpHash && /* @__PURE__ */ jsxs46(Fragment16, { children: [
11116
11500
  /* @__PURE__ */ jsxs46("div", { className: "text-center py-4", children: [
11117
11501
  /* @__PURE__ */ jsx55(CheckCircle24, { className: "h-12 w-12 text-[var(--l-pass-success)] mx-auto mb-3" }),
11118
11502
  /* @__PURE__ */ jsx55("p", { className: "font-medium", children: "Transaction Sent!" }),
@@ -11127,16 +11511,16 @@ function SendLumiaMenu() {
11127
11511
  init_clients();
11128
11512
  import { ArrowLeft as ArrowLeft14, CheckCircle2 as CheckCircle25, Copy as Copy2, Loader as Loader19 } from "lucide-react";
11129
11513
  import QRCode from "qrcode";
11130
- import { useCallback as useCallback14, useEffect as useEffect26, useState as useState13 } from "react";
11131
- import { Fragment as Fragment16, jsx as jsx56, jsxs as jsxs47 } from "react/jsx-runtime";
11514
+ import { useCallback as useCallback15, useEffect as useEffect26, useState as useState14 } from "react";
11515
+ import { Fragment as Fragment17, jsx as jsx56, jsxs as jsxs47 } from "react/jsx-runtime";
11132
11516
  function ReceiveLumiaMenu() {
11133
11517
  const address = useLumiaPassportSession((st) => st.address);
11134
11518
  const page = useLayoutDataStore((st) => st.page);
11135
11519
  const setPage = useLayoutDataStore((st) => st.setPage);
11136
11520
  const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
11137
11521
  const open = page === "receive";
11138
- const [qrCodeUrl, setQrCodeUrl] = useState13("");
11139
- const [copied, setCopied] = useState13(false);
11522
+ const [qrCodeUrl, setQrCodeUrl] = useState14("");
11523
+ const [copied, setCopied] = useState14(false);
11140
11524
  useEffect26(() => {
11141
11525
  if (open && address) {
11142
11526
  QRCode.toDataURL(address, {
@@ -11150,7 +11534,7 @@ function ReceiveLumiaMenu() {
11150
11534
  });
11151
11535
  }
11152
11536
  }, [open, address]);
11153
- const handleCopy = useCallback14(async () => {
11537
+ const handleCopy = useCallback15(async () => {
11154
11538
  if (!address) return;
11155
11539
  try {
11156
11540
  await navigator.clipboard.writeText(address);
@@ -11180,10 +11564,10 @@ function ReceiveLumiaMenu() {
11180
11564
  /* @__PURE__ */ jsx56("div", { className: "flex items-center justify-center p-[var(--l-pass-pd)]", style: { minHeight: "216px" }, children: qrCodeUrl ? /* @__PURE__ */ jsx56("img", { src: qrCodeUrl, alt: "Wallet QR Code", className: "w-48 h-48" }) : /* @__PURE__ */ jsx56(Loader19, { className: "w-5 h-5 animate-spin text-[var(--l-pass-fg-muted)]" }) }),
11181
11565
  /* @__PURE__ */ jsxs47(Highlight, { type: "info", children: [
11182
11566
  /* @__PURE__ */ jsx56("span", { className: "block w-full text-center font-mono text-[10px] break-all mb-2", children: address }),
11183
- /* @__PURE__ */ jsx56(Button, { onClick: handleCopy, className: "w-full", size: "medium", children: copied ? /* @__PURE__ */ jsxs47(Fragment16, { children: [
11567
+ /* @__PURE__ */ jsx56(Button, { onClick: handleCopy, className: "w-full", size: "medium", children: copied ? /* @__PURE__ */ jsxs47(Fragment17, { children: [
11184
11568
  /* @__PURE__ */ jsx56(CheckCircle25, { className: "h-4 w-4" }),
11185
11569
  /* @__PURE__ */ jsx56("span", { children: "Copied!" })
11186
- ] }) : /* @__PURE__ */ jsxs47(Fragment16, { children: [
11570
+ ] }) : /* @__PURE__ */ jsxs47(Fragment17, { children: [
11187
11571
  /* @__PURE__ */ jsx56(Copy2, { className: "h-4 w-4" }),
11188
11572
  /* @__PURE__ */ jsx56("span", { children: "Copy Address" })
11189
11573
  ] }) })
@@ -11289,9 +11673,9 @@ function TermsOfService() {
11289
11673
  }
11290
11674
 
11291
11675
  // src/internal/components/TransactionsMenu/TransactionsMenu.tsx
11292
- import { useQuery as useQuery13, useQueryClient as useQueryClient18 } from "@tanstack/react-query";
11676
+ import { useQuery as useQuery14, useQueryClient as useQueryClient18 } from "@tanstack/react-query";
11293
11677
  import { ArrowLeft as ArrowLeft17, Loader as Loader20, RefreshCw as RefreshCw3, XCircle as XCircle2 } from "lucide-react";
11294
- import { useCallback as useCallback15, useState as useState14 } from "react";
11678
+ import { useCallback as useCallback16, useState as useState15 } from "react";
11295
11679
 
11296
11680
  // src/internal/components/TransactionsMenu/api.ts
11297
11681
  init_base();
@@ -11640,7 +12024,7 @@ var formatTimestamp = (timestampMs) => {
11640
12024
  };
11641
12025
 
11642
12026
  // src/internal/components/TransactionsMenu/TransactionsGroup.tsx
11643
- import { Fragment as Fragment17, jsx as jsx61, jsxs as jsxs51 } from "react/jsx-runtime";
12027
+ import { Fragment as Fragment18, jsx as jsx61, jsxs as jsxs51 } from "react/jsx-runtime";
11644
12028
  function InternalTransaction({ internal, assetSymbol, assetDecimals }) {
11645
12029
  const internalSymbol = internal.assetSymbol || assetSymbol;
11646
12030
  const internalDecimals = internal.decimals ?? assetDecimals;
@@ -11717,7 +12101,7 @@ function TransactionsGroup(props) {
11717
12101
  )
11718
12102
  ] })
11719
12103
  ] }),
11720
- internalsToRender.length > 0 && /* @__PURE__ */ jsxs51(Fragment17, { children: [
12104
+ internalsToRender.length > 0 && /* @__PURE__ */ jsxs51(Fragment18, { children: [
11721
12105
  /* @__PURE__ */ jsxs51("div", { className: "w-full flex items-center", children: [
11722
12106
  /* @__PURE__ */ jsx61("div", { style: { borderTop: "1px solid var(--l-pass-bd)" }, className: "flex-1" }),
11723
12107
  /* @__PURE__ */ jsx61("div", { className: "flex-none font-bold px-2 text-xs leading-4 text-[var(--l-pass-fg-muted)]", children: "Internals" }),
@@ -11772,19 +12156,19 @@ function TransactionsMenu() {
11772
12156
  const page = useLayoutDataStore((st) => st.page);
11773
12157
  const setPage = useLayoutDataStore((st) => st.setPage);
11774
12158
  const maxScrollHeight = useLayoutStore((st) => st.maxScrollHeight);
11775
- const [expandedGroups, setExpandedGroups] = useState14({});
12159
+ const [expandedGroups, setExpandedGroups] = useState15({});
11776
12160
  const {
11777
12161
  data: txHistoryGroups = [],
11778
12162
  isLoading: isTxHistoryLoading,
11779
12163
  isFetching: isTxHistoryFetching,
11780
12164
  error: txHistoryError
11781
- } = useQuery13({
12165
+ } = useQuery14({
11782
12166
  retry: false,
11783
12167
  enabled: !!address && page === "transactions",
11784
12168
  queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, address],
11785
12169
  queryFn: () => getTransactionsListQuery(address)
11786
12170
  });
11787
- const refreshTxHistory = useCallback15(
12171
+ const refreshTxHistory = useCallback16(
11788
12172
  () => qc.invalidateQueries({ queryKey: [TRANSACTIONS_HISTORY_QUERY_KEY, address] }),
11789
12173
  [qc, address]
11790
12174
  );
@@ -11944,7 +12328,7 @@ function usePageMapper() {
11944
12328
  setIsDialogOpen,
11945
12329
  setIsDialogClosing
11946
12330
  } = useLayoutStore();
11947
- const closeDialog = useCallback16(() => {
12331
+ const closeDialog = useCallback17(() => {
11948
12332
  setIsDialogClosing(true);
11949
12333
  setTimeout(() => {
11950
12334
  setDialogContent(null);
@@ -11955,7 +12339,7 @@ function usePageMapper() {
11955
12339
  setIsDialogOpen(false);
11956
12340
  }, CLEAR_DIALOG_TIMEOUT);
11957
12341
  }, [setDialogContent, setDialogDescription, setDialogTitle, setIsDialogForced, setIsDialogOpen, setIsDialogClosing]);
11958
- const openDialog = useCallback16(
12342
+ const openDialog = useCallback17(
11959
12343
  (pageItem) => {
11960
12344
  const PageContentComponent = pageItem.component;
11961
12345
  setDialogTitle(pageItem.title);
@@ -12056,6 +12440,7 @@ function LumiaPassportDialog() {
12056
12440
  useBackupStatusChanges();
12057
12441
  useDetectMaxScrollHeight();
12058
12442
  useSettingsNotifications();
12443
+ useListenIframeAuthEvents();
12059
12444
  useBackupWarning();
12060
12445
  useWalletStatus();
12061
12446
  return /* @__PURE__ */ jsx64(
@@ -12089,7 +12474,7 @@ function LumiaPassportDialog() {
12089
12474
  }
12090
12475
 
12091
12476
  // src/internal/components/TssManager.tsx
12092
- import React10, { useCallback as useCallback17 } from "react";
12477
+ import React10, { useCallback as useCallback18 } from "react";
12093
12478
  init_auth();
12094
12479
  init_clients();
12095
12480
  var TssManagerWithRef = React10.forwardRef((props, ref) => {
@@ -12098,7 +12483,7 @@ var TssManagerWithRef = React10.forwardRef((props, ref) => {
12098
12483
  const setStatus = useLumiaPassportSession((st) => st.setStatus);
12099
12484
  const setSession = useLumiaPassportSession((st) => st.setSession);
12100
12485
  const setAddress = useLumiaPassportSession((st) => st.setAddress);
12101
- const onSessionCreated = useCallback17(
12486
+ const onSessionCreated = useCallback18(
12102
12487
  (session, address) => {
12103
12488
  setSession(session);
12104
12489
  setAddress(address);
@@ -12133,48 +12518,52 @@ var TssManagerWithRef = React10.forwardRef((props, ref) => {
12133
12518
  // src/internal/components/WalletConnectHandler.tsx
12134
12519
  init_wallet();
12135
12520
  import { useConnectModal } from "@rainbow-me/rainbowkit";
12136
- import { useQueryClient as useQueryClient19 } from "@tanstack/react-query";
12137
- import React11, { useCallback as useCallback18, useEffect as useEffect32 } from "react";
12521
+ import { useMutation as useMutation15, useQueryClient as useQueryClient19 } from "@tanstack/react-query";
12522
+ import React11, { useCallback as useCallback19, useEffect as useEffect32 } from "react";
12138
12523
  import { useAccount, useDisconnect, useSignMessage } from "wagmi";
12139
12524
  function WalletConnectHandler() {
12140
12525
  const qc = useQueryClient19();
12141
- const { callbacks } = useLumiaPassportConfig();
12142
- const userAddress = useLumiaPassportSession((st) => st.address);
12526
+ const callbacks = useLumiaPassportConfig().callbacks;
12527
+ const passportWalletAddress = useLumiaPassportSession((st) => st.address);
12143
12528
  const { address: walletAddress, isConnected, chain, connector } = useAccount();
12529
+ const { openConnectModal, connectModalOpen } = useConnectModal();
12144
12530
  const { disconnect } = useDisconnect();
12145
12531
  const { signMessageAsync } = useSignMessage();
12532
+ const isWalletLinking = useLayoutDataStore((st) => st.isWalletLinking);
12146
12533
  const setPage = useLayoutDataStore((st) => st.setPage);
12147
- const { isWalletLinking, setLinkError, setIsWalletLinking, setLinkIsLoading, setProviderType } = useManageWalletStore();
12148
- const onError = useCallback18((error) => {
12149
- setLinkError(error);
12150
- setIsWalletLinking(false);
12151
- setPage("manage-wallet" /* MANAGE_WALLET */);
12152
- }, []);
12153
- const onLinkingComplete = useCallback18(
12534
+ const setIsWalletLinking = useLayoutDataStore((st) => st.setIsWalletLinking);
12535
+ const setAuthError = useAuthStore((st) => st.setAlert);
12536
+ const setManageWalletLinkError = useManageWalletStore((st) => st.setLinkError);
12537
+ const setLinkIsLoading = useManageWalletStore((st) => st.setLinkIsLoading);
12538
+ const setProviderType = useManageWalletStore((st) => st.setProviderType);
12539
+ const onLinkingComplete = useCallback19(
12154
12540
  async (success) => {
12155
- console.log("[WalletConnectHandler] onLinkingComplete called:", { success, userAddress });
12156
12541
  setIsWalletLinking(false);
12542
+ if (!success && !passportWalletAddress) {
12543
+ setProviderType(null);
12544
+ setPage("auth" /* AUTH */);
12545
+ return;
12546
+ }
12547
+ if (!success && passportWalletAddress) {
12548
+ setProviderType(null);
12549
+ setPage("manage-wallet" /* MANAGE_WALLET */);
12550
+ return;
12551
+ }
12157
12552
  setProviderType(null);
12158
12553
  setPage("manage-wallet" /* MANAGE_WALLET */);
12159
- if (success) {
12160
- console.log("[WalletConnectHandler] Invalidating and refetching queries with key:", [
12161
- PROVIDERS_QUERY_KEY,
12162
- userAddress
12163
- ]);
12164
- await qc.invalidateQueries({ queryKey: [PROVIDERS_QUERY_KEY, userAddress], refetchType: "active" });
12165
- await qc.invalidateQueries({ queryKey: [LINKED_PROFILES_QUERY_KEY, userAddress], refetchType: "active" });
12166
- await qc.refetchQueries({ queryKey: [PROVIDERS_QUERY_KEY, userAddress] });
12167
- try {
12168
- callbacks?.onLumiaPassportUpdate?.({ providers: qc.getQueryData([PROVIDERS_QUERY_KEY, userAddress]) });
12169
- } catch {
12170
- }
12554
+ await qc.invalidateQueries({ queryKey: [PROVIDERS_QUERY_KEY, passportWalletAddress], refetchType: "active" });
12555
+ await qc.invalidateQueries({
12556
+ queryKey: [LINKED_PROFILES_QUERY_KEY, passportWalletAddress],
12557
+ refetchType: "active"
12558
+ });
12559
+ try {
12560
+ callbacks?.onLumiaPassportUpdate?.({ providers: qc.getQueryData([PROVIDERS_QUERY_KEY, passportWalletAddress]) });
12561
+ } catch {
12171
12562
  }
12172
12563
  },
12173
- [qc, userAddress, callbacks, setProviderType, setPage, setIsWalletLinking]
12564
+ [qc, passportWalletAddress, callbacks, setProviderType, setPage, setIsWalletLinking]
12174
12565
  );
12175
- const { openConnectModal, connectModalOpen } = useConnectModal();
12176
12566
  const [hasStartedLinking, setHasStartedLinking] = React11.useState(false);
12177
- const timeoutRef = React11.useRef();
12178
12567
  useEffect32(() => {
12179
12568
  if (isWalletLinking && !hasStartedLinking) {
12180
12569
  setHasStartedLinking(true);
@@ -12182,94 +12571,101 @@ function WalletConnectHandler() {
12182
12571
  if (isConnected) {
12183
12572
  disconnect();
12184
12573
  setTimeout(() => {
12185
- if (openConnectModal) {
12186
- setPage(null);
12187
- openConnectModal();
12188
- }
12189
- }, 500);
12190
- } else {
12191
- if (openConnectModal) {
12192
12574
  setPage(null);
12193
12575
  openConnectModal();
12194
- }
12576
+ }, 500);
12577
+ } else {
12578
+ setPage(null);
12579
+ openConnectModal();
12195
12580
  }
12196
12581
  }
12197
12582
  if (!isWalletLinking && hasStartedLinking) {
12198
12583
  setHasStartedLinking(false);
12199
- if (timeoutRef.current) clearTimeout(timeoutRef.current);
12200
12584
  if (isConnected) disconnect();
12201
12585
  }
12202
12586
  }, [isWalletLinking, hasStartedLinking, isConnected, openConnectModal, disconnect, setPage, setProviderType]);
12203
12587
  useEffect32(() => {
12204
- console.log("[WalletConnectHandler] Modal state check:", {
12205
- hasStartedLinking,
12206
- connectModalOpen,
12207
- isConnected,
12208
- isWalletLinking
12209
- });
12210
12588
  if (hasStartedLinking && !connectModalOpen && !isConnected && isWalletLinking) {
12211
- console.log("[WalletConnectHandler] Modal closed without connecting, resetting state");
12589
+ console.log("[WalletConnectHandler] Modal closed without connecting");
12212
12590
  onLinkingComplete(false);
12213
12591
  setHasStartedLinking(false);
12214
12592
  }
12215
12593
  }, [connectModalOpen, hasStartedLinking, isConnected, isWalletLinking]);
12216
- useEffect32(() => {
12217
- if (isConnected && walletAddress && isWalletLinking && hasStartedLinking) {
12218
- handleWalletSign();
12219
- }
12220
- }, [isConnected, walletAddress, isWalletLinking, hasStartedLinking]);
12221
- const handleWalletSign = async () => {
12222
- if (timeoutRef.current) {
12223
- clearTimeout(timeoutRef.current);
12224
- }
12225
- if (!walletAddress || !chain) {
12226
- onError("No wallet connected");
12227
- disconnect();
12228
- onLinkingComplete(false);
12229
- setHasStartedLinking(false);
12230
- return;
12231
- }
12232
- try {
12594
+ const { mutate: handleWalletSign, isPending: isWalletSigning } = useMutation15({
12595
+ mutationFn: async (payload) => {
12596
+ const { chainId, signingWalletAddress } = payload;
12597
+ if (!signingWalletAddress || !chainId) {
12598
+ disconnect();
12599
+ if (passportWalletAddress) {
12600
+ setManageWalletLinkError("Wallet error! No wallet available");
12601
+ } else {
12602
+ setAuthError({ title: "Wallet error", message: "No wallet available" });
12603
+ }
12604
+ setIsWalletLinking(false);
12605
+ setHasStartedLinking(false);
12606
+ onLinkingComplete(false);
12607
+ setPage(passportWalletAddress ? "manage-wallet" /* MANAGE_WALLET */ : "auth" /* AUTH */);
12608
+ return;
12609
+ }
12233
12610
  setLinkIsLoading(true);
12234
- const message = createSignatureMessage(walletAddress);
12235
- const signature = await signMessageAsync({ message });
12611
+ const message = createSignatureMessage(signingWalletAddress);
12612
+ const signature = await signMessageAsync({ message, account: signingWalletAddress });
12236
12613
  if (!signature) {
12237
12614
  throw new Error("Failed to get signature");
12238
12615
  }
12239
12616
  const walletName = connector?.name || "Unknown Wallet";
12240
12617
  const walletType = connector?.id || "unknown";
12241
- console.log("[WalletConnectHandler] Wallet metadata:", {
12242
- walletName,
12243
- walletType,
12244
- connectorInfo: connector
12245
- });
12246
- await linkWallet({
12247
- address: walletAddress,
12618
+ return await linkWallet({
12619
+ // chainId: chain.id,
12620
+ chainId,
12621
+ address: signingWalletAddress,
12248
12622
  signature,
12249
12623
  message,
12250
- chainId: chain.id,
12251
12624
  walletName,
12252
12625
  walletType
12253
12626
  });
12627
+ },
12628
+ onSuccess: () => {
12254
12629
  disconnect();
12630
+ setHasStartedLinking(false);
12255
12631
  onLinkingComplete(true);
12632
+ setLinkIsLoading(false);
12633
+ },
12634
+ onError: (err) => {
12635
+ disconnect();
12636
+ setIsWalletLinking(false);
12637
+ onLinkingComplete(false);
12256
12638
  setHasStartedLinking(false);
12257
- } catch (err) {
12639
+ setLinkIsLoading(false);
12258
12640
  const errorMsg = err?.message || "Failed to link wallet";
12259
12641
  if (errorMsg.includes("User rejected") || errorMsg.includes("User denied")) {
12260
- onError("Signature request was cancelled");
12642
+ if (passportWalletAddress) {
12643
+ setManageWalletLinkError("Signature request was cancelled");
12644
+ } else {
12645
+ setAuthError({ title: "Signature error", message: "Signature request was cancelled" });
12646
+ }
12261
12647
  } else if (errorMsg.includes("already linked")) {
12262
- onError("This wallet is already linked to another account");
12648
+ if (passportWalletAddress) {
12649
+ setManageWalletLinkError("This wallet is already linked to another account");
12650
+ } else {
12651
+ setAuthError({ title: "Wallet error", message: "This wallet is already linked to another account" });
12652
+ }
12263
12653
  } else {
12264
- onError(errorMsg);
12654
+ if (passportWalletAddress) {
12655
+ setManageWalletLinkError(errorMsg);
12656
+ } else {
12657
+ setAuthError({ title: "Error", message: errorMsg });
12658
+ }
12265
12659
  }
12266
- disconnect();
12267
- onLinkingComplete(false);
12268
- setHasStartedLinking(false);
12269
- } finally {
12270
- setLinkIsLoading(false);
12660
+ setPage(passportWalletAddress ? "manage-wallet" /* MANAGE_WALLET */ : "auth" /* AUTH */);
12271
12661
  }
12272
- };
12662
+ });
12663
+ useEffect32(() => {
12664
+ if (!!chain?.id && isConnected && walletAddress && isWalletLinking && hasStartedLinking) {
12665
+ console.log("[WalletConnectHandler] handleWalletSign triggered");
12666
+ handleWalletSign({ chainId: chain.id, signingWalletAddress: walletAddress });
12667
+ }
12668
+ }, [chain, isConnected, walletAddress, isWalletLinking, hasStartedLinking]);
12273
12669
  return null;
12274
12670
  }
12275
12671
 
@@ -12300,7 +12696,7 @@ var useLumiaPassportSession = create6((set) => ({
12300
12696
  }));
12301
12697
  function LumiaPassportSessionProvider({ children }) {
12302
12698
  const config = useLumiaPassportConfig().config;
12303
- return /* @__PURE__ */ jsxs54(Fragment18, { children: [
12699
+ return /* @__PURE__ */ jsxs54(Fragment19, { children: [
12304
12700
  children,
12305
12701
  config.current?.wallet?.enabled && /* @__PURE__ */ jsx65(WalletConnectHandler, {}),
12306
12702
  /* @__PURE__ */ jsx65(BalanceFeedProvider, {}),
@@ -12358,8 +12754,8 @@ function LumiaPassportProvider(props) {
12358
12754
  const setIsIframeReady = useLumiaPassportSession((st) => st.setIsIframeReady);
12359
12755
  const setWalletReadyStatus = useLumiaPassportSession((st) => st.setWalletReadyStatus);
12360
12756
  useEffect33(() => notifyNoProjetctId(projectId), [projectId]);
12361
- const config = useRef12({ projectId, ...DEFAULT_LUMIA_PASSPORT_CONFIG });
12362
- const updateConfig = useCallback19((updates) => {
12757
+ const config = useRef13({ projectId, ...DEFAULT_LUMIA_PASSPORT_CONFIG });
12758
+ const updateConfig = useCallback20((updates) => {
12363
12759
  const prev = config.current;
12364
12760
  const next = { ...prev };
12365
12761
  if (updates.projectId !== void 0) next.projectId = updates.projectId;
@@ -12439,7 +12835,7 @@ function LumiaPassportProvider(props) {
12439
12835
  console.error("[LumiaPassport] Error setting up iframe manager:", error);
12440
12836
  }
12441
12837
  }, [projectId, initialConfig, callbacks, updateConfig, setIsIframeReady, setWalletReadyStatus]);
12442
- const contextValue = useMemo4(() => ({ config, updateConfig, callbacks }), [config, updateConfig, callbacks]);
12838
+ const contextValue = useMemo5(() => ({ config, updateConfig, callbacks }), [config, updateConfig, callbacks]);
12443
12839
  return /* @__PURE__ */ jsx67(LumiaWagmiProvider, { children: /* @__PURE__ */ jsx67(LumiaPassportContext.Provider, { value: contextValue, children }) });
12444
12840
  }
12445
12841
  var useLumiaPassportConfig = () => {
@@ -12449,10 +12845,10 @@ var useLumiaPassportConfig = () => {
12449
12845
  };
12450
12846
 
12451
12847
  // src/components/ConnectWalletButton.tsx
12452
- import { Cloud as Cloud4, Laptop as Laptop2, Loader as Loader21, Shield as Shield2 } from "lucide-react";
12453
- import { useEffect as useEffect34, useMemo as useMemo5 } from "react";
12848
+ import { Cloud as Cloud4, Laptop as Laptop2, Loader as Loader21, Shield as Shield3 } from "lucide-react";
12849
+ import { useEffect as useEffect34, useMemo as useMemo6 } from "react";
12454
12850
  init_auth();
12455
- import { Fragment as Fragment19, jsx as jsx68, jsxs as jsxs55 } from "react/jsx-runtime";
12851
+ import { Fragment as Fragment20, jsx as jsx68, jsxs as jsxs55 } from "react/jsx-runtime";
12456
12852
  function getFormattedStatus(label, status, showStatus) {
12457
12853
  const isStatus = showStatus && status && status !== "idle" && status !== "ready";
12458
12854
  if (!isStatus) return label;
@@ -12474,7 +12870,7 @@ function ConnectWalletButton(props) {
12474
12870
  useEffect34(() => setUsePaymaster(usePaymaster), [setUsePaymaster, usePaymaster]);
12475
12871
  const avatar = jwtTokenManager2.getAvatar();
12476
12872
  const displayName = jwtTokenManager2.getDisplayName();
12477
- const indicators = useMemo5(() => {
12873
+ const indicators = useMemo6(() => {
12478
12874
  const userId = jwtTokenManager2.getUserId();
12479
12875
  if (!userId) return { server: false, local: false, backup: false };
12480
12876
  const server = jwtTokenManager2.getHasKeyshare() ?? false;
@@ -12484,7 +12880,7 @@ function ConnectWalletButton(props) {
12484
12880
  const isConnecting = connectButtonLabel !== label || isLoading;
12485
12881
  return /* @__PURE__ */ jsx68("div", { "data-lumia-passport-mode": colorMode, className: cn("lumia-scope w-fit h-fit", className), children: !address ? (
12486
12882
  /** external Buttons can be provided */
12487
- /* @__PURE__ */ jsx68(Fragment19, { children: ConnectButton ? /* @__PURE__ */ jsxs55(
12883
+ /* @__PURE__ */ jsx68(Fragment20, { children: ConnectButton ? /* @__PURE__ */ jsxs55(
12488
12884
  ConnectButton,
12489
12885
  {
12490
12886
  type: "button",
@@ -12584,7 +12980,7 @@ function ConnectWalletButton(props) {
12584
12980
  ] }),
12585
12981
  /* @__PURE__ */ jsxs55("div", { className: "group relative", children: [
12586
12982
  /* @__PURE__ */ jsx68(
12587
- Shield2,
12983
+ Shield3,
12588
12984
  {
12589
12985
  className: `w-3 h-3 ${indicators.backup ? "text-[var(--l-pass-bg-success)]" : "text-[var(--l-pass-bg-warning)]"}`
12590
12986
  }
@@ -12646,13 +13042,13 @@ var useLumiaPassportRecoveryUserId = () => useLumiaPassportSession((st) => st.re
12646
13042
  var useLumiaPassportHasServerVault = () => useLumiaPassportSession((st) => st.hasServerVault);
12647
13043
 
12648
13044
  // src/hooks/useLumiaPassportOpen.ts
12649
- import { useCallback as useCallback20 } from "react";
13045
+ import { useCallback as useCallback21 } from "react";
12650
13046
  function useLumiaPassportOpen() {
12651
13047
  const page = useLayoutDataStore((st) => st.page);
12652
13048
  const setPage = useLayoutDataStore((st) => st.setPage);
12653
13049
  const setPageParams = useLayoutDataStore((st) => st.setPageParams);
12654
13050
  const address = useLumiaPassportSession((st) => st.address);
12655
- const open = useCallback20(
13051
+ const open = useCallback21(
12656
13052
  (passportPage, params) => {
12657
13053
  if (!address) return setPage("auth" /* AUTH */);
12658
13054
  if (!!address && passportPage === "auth" /* AUTH */) return setPage("manage-wallet" /* MANAGE_WALLET */);
@@ -12661,12 +13057,12 @@ function useLumiaPassportOpen() {
12661
13057
  },
12662
13058
  [setPage, setPageParams, address]
12663
13059
  );
12664
- const close = useCallback20(() => setPage(null), [setPage]);
13060
+ const close = useCallback21(() => setPage(null), [setPage]);
12665
13061
  return { open, close, isOpen: page !== null };
12666
13062
  }
12667
13063
 
12668
13064
  // src/hooks/useLumiaPassportColorMode.ts
12669
- import { useCallback as useCallback21, useEffect as useEffect35 } from "react";
13065
+ import { useCallback as useCallback22, useEffect as useEffect35 } from "react";
12670
13066
  function useLumiaPassportColorMode() {
12671
13067
  const {
12672
13068
  config: { current: config }
@@ -12674,7 +13070,7 @@ function useLumiaPassportColorMode() {
12674
13070
  const preferedColorMode = config?.preferedColorMode;
12675
13071
  const colorMode = useLayoutStore((st) => st.colorMode);
12676
13072
  const handleStoreColorMode = useLayoutStore((st) => st.setColorMode);
12677
- const setColorMode = useCallback21(
13073
+ const setColorMode = useCallback22(
12678
13074
  (mode) => {
12679
13075
  localStorage.setItem(LOCAL_COLOR_MODE_KEY, mode);
12680
13076
  handleStoreColorMode(mode);
@@ -12724,7 +13120,7 @@ function ThemeToggle(props) {
12724
13120
 
12725
13121
  // src/context/RainbowKitContext.tsx
12726
13122
  import { darkTheme, lightTheme, RainbowKitProvider } from "@rainbow-me/rainbowkit";
12727
- import { useMemo as useMemo6 } from "react";
13123
+ import { useMemo as useMemo7 } from "react";
12728
13124
  import { WagmiProvider as WagmiProvider2 } from "wagmi";
12729
13125
 
12730
13126
  // src/config/rainbowkit.ts
@@ -12952,12 +13348,12 @@ var rainbowTheme = {
12952
13348
 
12953
13349
  // src/context/RainbowKitContext.tsx
12954
13350
  import "@rainbow-me/rainbowkit/styles.css";
12955
- import { Fragment as Fragment20, jsx as jsx70 } from "react/jsx-runtime";
13351
+ import { Fragment as Fragment21, jsx as jsx70 } from "react/jsx-runtime";
12956
13352
  function LumiaRainbowKitProvider({ children }) {
12957
13353
  const config = useLumiaPassportConfig().config;
12958
13354
  const colorMode = useLayoutStore((st) => st.colorMode);
12959
- const rainbowConfig2 = useMemo6(() => createRainbowConfig(config.current?.wallet?.walletConnectProjectId), [config]);
12960
- const customTheme = useMemo6(
13355
+ const rainbowConfig2 = useMemo7(() => createRainbowConfig(config.current?.wallet?.walletConnectProjectId), [config]);
13356
+ const customTheme = useMemo7(
12961
13357
  () => colorMode === "dark" ? {
12962
13358
  ...darkTheme(),
12963
13359
  colors: { ...darkTheme().colors, ...rainbowTheme.darkMode.colors },
@@ -12971,13 +13367,13 @@ function LumiaRainbowKitProvider({ children }) {
12971
13367
  },
12972
13368
  [colorMode]
12973
13369
  );
12974
- if (!config.current?.wallet?.enabled) return /* @__PURE__ */ jsx70(Fragment20, { children });
13370
+ if (!config.current?.wallet?.enabled) return /* @__PURE__ */ jsx70(Fragment21, { children });
12975
13371
  return /* @__PURE__ */ jsx70(WagmiProvider2, { config: rainbowConfig2, children: /* @__PURE__ */ jsx70(RainbowKitProvider, { theme: customTheme, modalSize: "compact", showRecentTransactions: true, children }) });
12976
13372
  }
12977
13373
 
12978
13374
  // src/internal/components/UserOpStatus.tsx
12979
13375
  init_base();
12980
- import { AlertCircle as AlertCircle5, CheckCircle2 as CheckCircle27, Clock as Clock2, Copy as Copy5, ExternalLink as ExternalLink2, RefreshCw as RefreshCw4 } from "lucide-react";
13376
+ import { AlertCircle as AlertCircle6, CheckCircle2 as CheckCircle27, Clock as Clock2, Copy as Copy5, ExternalLink as ExternalLink2, RefreshCw as RefreshCw4 } from "lucide-react";
12981
13377
  import * as React13 from "react";
12982
13378
 
12983
13379
  // src/internal/utils/cn.ts
@@ -13207,19 +13603,19 @@ var UserOpStatus = ({
13207
13603
  if (receipt) {
13208
13604
  const ok = !!receipt.success;
13209
13605
  return /* @__PURE__ */ jsxs57(Badge, { variant: ok ? "success" : "destructive", className: "gap-1", children: [
13210
- ok ? /* @__PURE__ */ jsx73(CheckCircle27, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx73(AlertCircle5, { className: "h-3 w-3" }),
13606
+ ok ? /* @__PURE__ */ jsx73(CheckCircle27, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx73(AlertCircle6, { className: "h-3 w-3" }),
13211
13607
  ok ? "Included" : "Failed"
13212
13608
  ] });
13213
13609
  }
13214
13610
  if (rejected) {
13215
13611
  return /* @__PURE__ */ jsxs57(Badge, { variant: "destructive", className: "gap-1", children: [
13216
- /* @__PURE__ */ jsx73(AlertCircle5, { className: "h-3 w-3" }),
13612
+ /* @__PURE__ */ jsx73(AlertCircle6, { className: "h-3 w-3" }),
13217
13613
  " Rejected by bundler"
13218
13614
  ] });
13219
13615
  }
13220
13616
  if (timedOut) {
13221
13617
  return /* @__PURE__ */ jsxs57(Badge, { variant: "warning", className: "gap-1", children: [
13222
- /* @__PURE__ */ jsx73(AlertCircle5, { className: "h-3 w-3" }),
13618
+ /* @__PURE__ */ jsx73(AlertCircle6, { className: "h-3 w-3" }),
13223
13619
  " Timeout - may be rejected"
13224
13620
  ] });
13225
13621
  }
@@ -13327,16 +13723,16 @@ var UserOpStatus = ({
13327
13723
  ] })
13328
13724
  ] }),
13329
13725
  error && /* @__PURE__ */ jsxs57("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
13330
- /* @__PURE__ */ jsx73(AlertCircle5, { className: "h-4 w-4" }),
13726
+ /* @__PURE__ */ jsx73(AlertCircle6, { className: "h-4 w-4" }),
13331
13727
  " ",
13332
13728
  error
13333
13729
  ] }),
13334
13730
  rejected && /* @__PURE__ */ jsxs57("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
13335
- /* @__PURE__ */ jsx73(AlertCircle5, { className: "h-4 w-4" }),
13731
+ /* @__PURE__ */ jsx73(AlertCircle6, { className: "h-4 w-4" }),
13336
13732
  "UserOperation was dropped from bundler mempool. This usually means it was invalid or replaced."
13337
13733
  ] }),
13338
13734
  timedOut && /* @__PURE__ */ jsxs57("div", { className: "text-sm text-destructive flex items-center gap-1 mt-4", children: [
13339
- /* @__PURE__ */ jsx73(AlertCircle5, { className: "h-4 w-4" }),
13735
+ /* @__PURE__ */ jsx73(AlertCircle6, { className: "h-4 w-4" }),
13340
13736
  "Stopped polling after ",
13341
13737
  Math.round(maxPollTimeMs / 1e3),
13342
13738
  "s. UserOperation may have been rejected by the bundler."
@@ -13410,12 +13806,12 @@ var Hash = ({
13410
13806
 
13411
13807
  // src/internal/components/TransactionsMenu/TransactionsList.tsx
13412
13808
  init_base();
13413
- import { useEffect as useEffect37, useState as useState18 } from "react";
13809
+ import { useEffect as useEffect37, useState as useState19 } from "react";
13414
13810
  import { jsx as jsx75, jsxs as jsxs59 } from "react/jsx-runtime";
13415
13811
  var TransactionsList = ({ address, itemsCount = 10 }) => {
13416
- const [transactions, setTransactions] = useState18([]);
13417
- const [loading, setLoading] = useState18(true);
13418
- const [error, setError] = useState18(null);
13812
+ const [transactions, setTransactions] = useState19([]);
13813
+ const [loading, setLoading] = useState19(true);
13814
+ const [error, setError] = useState19(null);
13419
13815
  useEffect37(() => {
13420
13816
  const fetchTransactions = async () => {
13421
13817
  try {
@@ -13718,11 +14114,11 @@ function useUserOpStatus(options = {}) {
13718
14114
 
13719
14115
  // src/hooks/useLogout.ts
13720
14116
  import { logout as coreLogout, jwtTokenManager as jwtTokenManager3 } from "@lumiapassport/core/auth";
13721
- import { useCallback as useCallback24 } from "react";
14117
+ import { useCallback as useCallback25 } from "react";
13722
14118
  function useLogout() {
13723
14119
  const { setSession, setIsLoading, setAddress, setStatus, setError, address } = useLumiaPassportSession();
13724
14120
  const { callbacks } = useLumiaPassportConfig();
13725
- const logout2 = useCallback24(async () => {
14121
+ const logout2 = useCallback25(async () => {
13726
14122
  const prevAddress = address;
13727
14123
  let userId = null;
13728
14124
  setIsLoading(true);
@@ -13761,10 +14157,10 @@ init_profile();
13761
14157
 
13762
14158
  // src/modules/transactions.ts
13763
14159
  init_base();
13764
- import { usePublicClient, useWalletClient, useAccount as useAccount2 } from "wagmi";
14160
+ import { usePublicClient as usePublicClient2, useWalletClient, useAccount as useAccount2 } from "wagmi";
13765
14161
  import { parseEther as parseEther4 } from "viem";
13766
14162
  function useTransactions() {
13767
- const publicClient2 = usePublicClient({ chainId: lumiaBeam.id });
14163
+ const publicClient2 = usePublicClient2({ chainId: lumiaBeam.id });
13768
14164
  const { data: walletClient } = useWalletClient();
13769
14165
  const { address } = useAccount2();
13770
14166
  const sendTransaction = async (params) => {