(function() {
                        // Add styles
                        const style = document.createElement('style');
                        style.textContent = ":root{--modal-bg: rgba(0, 0, 0, .85);--content-bg: #1a1a1a;--border-color: #333;--accent-color: #00ffff;--text-color: #fff}.theme-bitcoin{--modal-bg: rgba(0, 0, 0, .85);--content-bg: #1a1a1a;--border-color: #f7931a;--accent-color: #f7931a;--text-color: #fff;--input-bg: #222;--button-gradient: linear-gradient(45deg, #f7931a, #ffa726)}.theme-ethereum{--modal-bg: rgba(0, 0, 0, .85);--content-bg: #1c2951;--border-color: #62688f;--accent-color: #00ffff;--text-color: #fff;--input-bg: #2a3c6e;--button-gradient: linear-gradient(45deg, #5c6bc0, #00ffff)}.theme-ordinals{--modal-bg: rgba(0, 0, 0, .85);--content-bg: #1a1a1a;--border-color: #333;--accent-color: #00ffff;--text-color: #fff;--input-bg: #222;--button-gradient: linear-gradient(45deg, #ff8e53, #00ffff)}.theme-monero{--modal-bg: rgba(0, 0, 0, .85);--content-bg: #252525;--border-color: #ff6b00;--accent-color: #ff6b00;--text-color: #fff;--input-bg: #333;--button-gradient: linear-gradient(45deg, #ff6b00, #ff9340)}.theme-cardano{--modal-bg: rgba(0, 0, 0, .85);--content-bg: #1e4147;--border-color: #0033ad;--accent-color: #17d1aa;--text-color: #fff;--input-bg: #2a565e;--button-gradient: linear-gradient(45deg, #0033ad, #17d1aa)}.modal{position:fixed;top:0;left:0;width:100%;height:100%;background:var(--modal-bg);display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease;pointer-events:none}.modal.active{opacity:1;visibility:visible;pointer-events:all}.modal-content{background:var(--content-bg);border-radius:12px;width:90%;max-width:600px;color:var(--text-color);position:relative;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--border-color);height:98vh;max-height:98vh;margin:0;padding:60px 0 0;box-shadow:0 8px 32px #0006;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;letter-spacing:.02em;line-height:1.5}.wallet-list{display:flex;gap:10px;justify-content:center;background:rgba(26,26,26,.95)}.wallet-btn{background:#222;border:1px solid #444;color:var(--text-color);padding:12px 20px;border-radius:8px;cursor:pointer;transition:all .2s}.success-animation{position:fixed;top:20px;left:20px;background:rgba(0,0,0,.9);color:var(--text-color);padding:20px;border-radius:8px;z-index:10000}.wallet-info{display:flex;flex-direction:column}.scrollable-content{flex:1;overflow-y:auto;padding:20px 10px 100px}.sticky-footer{position:fixed;bottom:0;left:0;right:0;width:100%;padding:20px;background:linear-gradient(0deg,rgba(26,26,26,1) 0%,rgba(26,26,26,.95) 70%,rgba(26,26,26,0) 100%);display:flex;justify-content:center;align-items:center}.inscribe-button{width:auto;min-width:200px;max-width:300px;background:var(--button-gradient);color:#000;font-weight:700;border:none;border-radius:8px;padding:16px 32px;cursor:pointer;transition:all .2s ease}.inscribe-button:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 4px 12px #0ff3}.inscribe-button:disabled{opacity:.6;cursor:not-allowed;background:#444}.inscription-text,.file-input,.tick-input{background:var(--input-bg);border:1px solid var(--border-color);color:var(--text-color)}@media (max-width: 480px){.modal-content{max-width:90%}}.inscription-type-selector{display:flex;gap:8px;padding:16px 0;width:100%;overflow-x:auto;margin-bottom:16px}.menu-item{background:#222;border:1px solid var(--border-color);color:var(--text-color);padding:8px 16px;border-radius:6px;cursor:pointer;transition:all .2s;white-space:nowrap;font-size:14px;min-width:80px;text-align:center}.menu-item.active{background:var(--accent-color);color:#000;border-color:var(--accent-color)}.menu-item:hover:not(.active){border-color:var(--accent-color);background:#333}.text-inscription-container{display:flex;flex-direction:column;gap:12px}.input-group{display:flex;flex-direction:column;gap:8px}.input-group label{color:var(--text-color);font-size:14px}select{background:#222;border:1px solid var(--border-color);color:var(--text-color);padding:8px;border-radius:6px;width:100%;cursor:pointer}.inscription-text{width:100%;min-height:120px;padding:12px;border-radius:6px;resize:vertical;font-family:monospace;font-size:14px;line-height:1.4}.brc20-controls{display:flex;flex-direction:column;gap:12px}.tick-input{padding:12px;border-radius:6px;font-size:16px;text-transform:uppercase;text-align:center;letter-spacing:1px}.info-text{font-size:12px;color:#888;text-align:center}.bitmap-inscription-container{display:flex;flex-direction:column;gap:16px}.block-height-info{display:flex;justify-content:space-between;align-items:center;background:#222;padding:12px;border-radius:6px;font-size:14px}.use-height-btn{background:var(--accent-color);color:#000;border:none;padding:8px 12px;border-radius:4px;cursor:pointer;font-size:12px;white-space:nowrap}.bitmap-warning{background:rgba(255,166,0,.1);border:1px solid orange;border-radius:6px;padding:12px}.bitmap-warning pre{margin:0;font-size:12px;white-space:pre-wrap;color:orange}.file-upload-zone{border:2px dashed var(--border-color);border-radius:6px;padding:24px;text-align:center;cursor:pointer;transition:all .2s}.file-upload-zone:hover{border-color:var(--accent-color);background:rgba(0,255,255,.05)}.file-upload-zone input[type=file]{display:none}.file-preview{background:#222;padding:12px;border-radius:6px;margin-top:12px}.remove-file-btn{background:#ff4444;color:#fff;border:none;padding:6px 12px;border-radius:4px;margin-top:8px;cursor:pointer}.address-box{background:#222;padding:16px;border-radius:6px;margin-bottom:16px}.wallet-type{font-size:14px;color:#888;margin-bottom:4px}.address{font-family:monospace;font-size:12px;word-break:break-all;color:var(--accent-color)}.error-message{color:#f44;padding:8px;text-align:center;font-size:14px}.validation-error{color:#f44;font-size:12px;margin-top:4px}.preview-text{background:#222;padding:12px;border-radius:6px;font-family:monospace;font-size:14px;color:var(--accent-color)}input[type=text],input[type=number],select,textarea,.inscription-text,.file-input,.tick-input{background:var(--input-bg);border:1px solid var(--border-color);color:var(--text-color);padding:12px;border-radius:6px;font-size:14px;width:100%;transition:all .2s ease}input[type=text]:focus,input[type=number]:focus,select:focus,textarea:focus,.inscription-text:focus,.tick-input:focus{outline:none;border-color:var(--accent-color);box-shadow:0 0 0 2px #00ffff1a}input::placeholder,textarea::placeholder{color:#ffffff80}.content-type-input{background:#222;color:var(--text-color);border:1px solid var(--border-color);font-size:16px;text-align:center}.tick-input{background:#222;font-size:18px;letter-spacing:2px;text-align:center}.theme-selector{position:absolute;top:15px;left:20px;display:flex;gap:8px;z-index:1001}.theme-btn{width:24px;height:24px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:all .2s ease}.theme-btn.active{transform:scale(1.2);border-color:#fff}.theme-btn.bitcoin{background:#f7931a}.theme-btn.ethereum{background:#00ffff}.theme-btn.ordinals{background:linear-gradient(45deg,#ff8e53,#00ffff)}.theme-btn.monero{background:#ff6b00}.theme-btn.cardano{background:#17d1aa}.logo-container{position:fixed;top:20px;left:20px;z-index:1100;width:20vw;max-width:150px;min-width:40px;aspect-ratio:1;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.3);padding:4px;border-radius:8px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.logo-image{width:100%;height:100%;object-fit:contain}.tip-section-title h3{color:var(--accent-color);font-size:24px;font-weight:600;margin:0 0 20px;text-align:center;letter-spacing:.5px}.welcome-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:20px;text-align:center}.welcome-container h2{color:var(--accent-color);font-size:28px;margin-bottom:24px}.welcome-content{max-width:400px;margin:0 auto}.welcome-content h2{color:var(--accent-color);font-size:28px;margin-bottom:24px;word-wrap:break-word;overflow-wrap:break-word;max-width:100%}.success-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.85);display:flex;align-items:center;justify-content:center;z-index:2000}.success-message{background:var(--content-bg, #1a1a1a);border:1px solid var(--border-color, #333);border-radius:12px;padding:24px;max-width:500px;width:90%;color:var(--text-color, #fff)}.success-message h2{color:var(--accent-color, #00ffff);margin-bottom:20px;text-align:center}.tx-info{background:rgba(0,0,0,.2);padding:12px;border-radius:6px;margin:16px 0}.tx-info code{display:block;word-break:break-all;margin-top:4px;color:var(--accent-color, #00ffff)}.message-content{margin:20px 0}.transaction-note{background:rgba(255,166,0,.1);border:1px solid orange;padding:12px;border-radius:6px;margin-top:16px}.button-group{display:flex;gap:12px;margin-top:24px}.view-tx-btn,.close-success-btn{flex:1;padding:12px;border-radius:6px;border:none;cursor:pointer;font-weight:700;transition:transform .2s}.view-tx-btn{background:var(--accent-color, #00ffff);color:#000}.close-success-btn{background:#444;color:#fff}.view-tx-btn:hover,.close-success-btn:hover{transform:translateY(-2px)}html,body,#root{margin:0;width:100%;height:100%;background:#333;font-family:Font,serif}.gloww{text-shadow:0 0 55px #ff9900,0 0 32px rgba(255,119,0,.7),0 0 7px #000,0 0 16px #000,0 0 3px #bf00ff}";
                        document.head.appendChild(style);

                        // Add import map before anything else
                        const importMap = document.createElement('script');
                        importMap.type = 'importmap';
                        importMap.textContent = '{"imports":{"recursive-endpoints":"/content/89fbbeca30c87535f9db283da584006c90076f220dbf410a01985a1840e0ea0ci0","boxelGeometry":"/content/c0decdd785a4cfb37a4fce01f62386dec5be5e91a27bf09d121167e473b3cc9fi0","three":"/content/0d013bb60fc5bf5a6c77da7371b07dc162ebc7d7f3af0ff3bd00ae5f0c546445i0","react":"/content/609b117277f1e9c9f27f358fe02db34e13d08915bbcea18770dc36f5f3afcbb2i0","react-dom":"/content/609b117277f1e9c9f27f358fe02db34e13d08915bbcea18770dc36f5f3afcbb2i1","react-dom/client":"/content/4d9308ce08bed11c028acb3d1dd964ea0e9809f51daf141ca0760e745a8070aei0","react/jsx-runtime":"/content/609bad601cdafa4d4a2622bbd9f4ebfdd278b8c5ea1efeb0d468db33f871fffai1","babel-extends":"/content/a78ab4803a3bffd823f11d07beec6bb1acc4bf1291c14b171f407a2fdd354140i0","@use-gesture/react":"/content/609b66a0094944918cf2559d1abf0594a07480448e43f54cccef488332074623i0","@react-three/fiber":"/content/f1be1caad667af0ec844d1333ad4d38f2cd7cc2855404bba11ac436b53c799b6i0","@react-three/postprocessing":"/content/effe98d082131314b11e42f59ac9337ef04593bd51f17677e4caedfcb909e325i0","@react-three/drei":"/content/ded46f972b0f85ea041359cd94a7878a5e902126fb34ee11dbed1c9ae4dfb1ebi0","@react-three/cannon":"/content/ffffc61e639cb9b9c9f83bb5d2b3048e4f04d2aa8336bf3fabab86b8d3f36e88i1","@react-three/a11y":"/content/a11cfb88aceb35ee0e75a088d04ffb17cde8c2563dc2d6c0b7fa56eeb28cfbc9i0","@react-three/csg":"/content/a11cc72f15b96f6950ce7d7c4ffef8303db6e697293a96850a289aa078b6cb74i0","three-custom-shader-material":"/content/a11c58cd8c4c48e18cb1c1b0bc87a8be021f3e76c5afe09277e6353bc3e183dai0","leva":"/content/609bad601cdafa4d4a2622bbd9f4ebfdd278b8c5ea1efeb0d468db33f871fffai2","randomish":"/content/e61e018322265768010a2a88751510e9abb0591ed49e39cc3781f44716b912f0i0","material-composer":"/content/ffffa2b0d398de68409230e9f41f6dd7748a4433d4239f328a3f886874b46aa0i4","material-composer-r3f":"/content/ffffc61e639cb9b9c9f83bb5d2b3048e4f04d2aa8336bf3fabab86b8d3f36e88i0","shader-composer":"/content/ffffa2b0d398de68409230e9f41f6dd7748a4433d4239f328a3f886874b46aa0i1","shader-composer-r3f":"/content/ffffa2b0d398de68409230e9f41f6dd7748a4433d4239f328a3f886874b46aa0i2","shader-composer-toybox":"/content/ffffa2b0d398de68409230e9f41f6dd7748a4433d4239f328a3f886874b46aa0i3","vfx-composer":"/content/fffff8af34fb45dfac622a385bb6846a3c206595e6cb4daa04a7a90ed02bc833i0","vfx-composer-r3f":"/content/ffffa2b0d398de68409230e9f41f6dd7748a4433d4239f328a3f886874b46aa0i0","@react-spring/three":"/content/c0de1c2494d23616f14ad5e55e9c9ac4dc91e3908e3de0ad13f4b9009ae20bcai1","statery":"/content/c0de1c2494d23616f14ad5e55e9c9ac4dc91e3908e3de0ad13f4b9009ae20bcai2","maath":"/content/c0de1c2494d23616f14ad5e55e9c9ac4dc91e3908e3de0ad13f4b9009ae20bcai3","r3f-perf":"/content/c0de9e420433afaed5bdf59ad4f9bf84797304af067ac68c63ad509e0b927205i0","suspend-react":"/content/9200c4fe863cec5cd22fe31279e18a51dea437d8d0c2856a5fe239679fb96f58i0","miniplex":"/content/609b6f6f16d2efb9841357a3e161cc54f46dc12c20624696e1d613f86b36dbaai0","miniplex-react":"/content/c0de975da1f3e39cf1cc64eec4c9806d9ae3c0a1f585a95ee152ed655e5f291ei0","simplex-noise":"/content/424c377edc7b1ee294114b826a1d481421ec256a20aaf8d4fa25068a9187ac10i0","alea":"/content/b84e5be46252ecf755d161cc5751df86dc1aa41b03a4eb49e6a594799a93887bi0","/v135/react-dom@18.3.1/es2022/client.js":"/content/4d9308ce08bed11c028acb3d1dd964ea0e9809f51daf141ca0760e745a8070aei0","bitmapOCI":"/content/840bc0df4ffc5a7ccedbee35e97506c9577160e233982e627d0045d06366e362i0","bitmon":"/content/55551557695dd82a2bda5ec3497684ec7cbb2cc1752ff5101accff1648666c3ai0"}}';
                        document.head.appendChild(importMap);

                        // Function to load script and return promise
                        function loadScript(url, type = '') {
                            return new Promise((resolve, reject) => {
                                const script = document.createElement('script');
                                script.src = url;
                                if (type) script.type = type;
                                script.onload = resolve;
                                script.onerror = reject;
                                document.head.appendChild(script);
                            });
                        }

                        // Sequential loading of dependencies
                        Promise.all([
                            loadScript("/content/5d82695b820a676ba23cda5390249f295eacb1a97e4df20fc02eaa501bd20eedi0"),
                            loadScript("/content/609b117277f1e9c9f27f358fe02db34e13d08915bbcea18770dc36f5f3afcbb2i2")
                        ]).then(() => {
                            // Once dependencies are loaded, add the app script
                            const moduleScript = document.createElement('script');
                            moduleScript.type = 'module';
                            moduleScript.textContent = "import{jsx as n,jsxs as f}from\"react/jsx-runtime\";import ue,{useState as p,useEffect as B}from\"react\";import he from\"react-dom/client\";(function(){const r=document.createElement(\"link\").relList;if(r&&r.supports&&r.supports(\"modulepreload\"))return;for(const o of document.querySelectorAll('link[rel=\"modulepreload\"]'))s(o);new MutationObserver(o=>{for(const c of o)if(c.type===\"childList\")for(const d of c.addedNodes)d.tagName===\"LINK\"&&d.rel===\"modulepreload\"&&s(d)}).observe(document,{childList:!0,subtree:!0});function a(o){const c={};return o.integrity&&(c.integrity=o.integrity),o.referrerPolicy&&(c.referrerPolicy=o.referrerPolicy),o.crossOrigin===\"use-credentials\"?c.credentials=\"include\":o.crossOrigin===\"anonymous\"?c.credentials=\"omit\":c.credentials=\"same-origin\",c}function s(o){if(o.ep)return;o.ep=!0;const c=a(o);fetch(o.href,c)}})();const U=async t=>new Promise((r,a)=>{const s=new FileReader;s.onload=()=>{const o=s.result.split(\",\")[1];r({content:o,contentType:t.type||\"application/octet-stream\",payloadType:\"BASE_64\"})},s.onerror=()=>a(new Error(\"Failed to read file\")),s.readAsDataURL(t)}),G=\"63c0c6f6dc3ff3dc240af2f633c820396b46fc9e9089f79e0090c94c73e1b199i0\",me=t=>typeof t==\"string\"&&/^[0-9a-f]{64}i\\d+$/.test(t),J=()=>{try{const t=window.location.pathname;if(!t.includes(\"/content/\"))return null;const r=t.split(\"/content/\").pop().replace(/^\\/+|\\/+$/g,\"\");return me(r)?r:null}catch{return null}},ge=async t=>{try{return await(await fetch(`/r/inscription/${t}`)).json()}catch{return null}},X=async t=>{try{const r=`/r/parents/${t}`,a=await fetch(r);if(!a.ok)throw new Error(`HTTP error! status: ${a.status}`);const s=await a.json();return(s==null?void 0:s.ids)||[]}catch{return[]}},be=async t=>{try{const r=await X(t);if(r.includes(G))return{isVerified:!0,parents:r,grandParents:[]};const a=[];for(const o of r){const c=await X(o);a.push(...c)}return{isVerified:a.includes(G),parents:r,grandParents:a}}catch{return{isVerified:!1,parents:[],grandParents:[]}}},ve=async()=>{const t=J();if(!t)return R.SERVICE_ADDRESS;try{const r=await ge(t);return r!=null&&r.address&&(await be(t)).isVerified?r.address:R.SERVICE_ADDRESS}catch{return R.SERVICE_ADDRESS}},Ee={modalBg:\"rgba(0, 0, 0, 0.85)\",contentBg:\"#1a1a1a\",borderColor:\"#333\",accentColor:\"#00ffff\",textColor:\"#fff\",inputBg:\"#222\",buttonGradient:\"linear-gradient(45deg, #ff8e53, #00ffff)\"},R={SERVICE_ADDRESS:\"bc1pqu9t32xuc3kdl2lxnfvgf5tkgmssee450lhepw60yfzv2sga7f0q6jkejr\"},u={SERVICE_FEE:1500,SERVICE_ADDRESS:null,baseUrl:\"https://ordinals.com\",contentUrl:\"/content\",DEFAULT_LOGO:\"431e38d121477b0245a61b8e453ae783c355fa99814e103e13387d74886354dai0\",themeColors:{...Ee}},Ce=t=>{const r=document.documentElement;Object.entries(t).forEach(([a,s])=>{const o=`--${a.replace(/([A-Z])/g,\"-$1\").toLowerCase()}`;r.style.setProperty(o,s)})},Ie=async()=>(console.log(\"🔄 Initializing CONFIG...\"),u.SERVICE_ADDRESS=await ve(u.baseUrl),Ce(u.themeColors),console.log(\"✅ CONFIG initialized:\",{serviceAddress:u.SERVICE_ADDRESS,serviceFee:u.SERVICE_FEE}),u),ye=t=>{const a=btoa(JSON.stringify({typ:\"JWT\",alg:\"none\"})),s=btoa(JSON.stringify(t));return`${a}.${s}.`},Ne=async({payload:t,onFinish:r,onCancel:a})=>{var s;try{const o=(s=window.XverseProviders)==null?void 0:s.BitcoinProvider;if(console.log(\"Starting inscription with provider:\",o),!o)throw new Error(\"Xverse provider not found\");const c=ye(t);console.log(\"Created inscription request token:\",c);const d=await o.createInscription(c);if(console.log(\"Received inscription response:\",d),!d)throw new Error(\"No response from provider\");if(d.error)throw new Error(d.error.message||\"Provider returned an error\");const h={txId:d.txId,inscriptionId:d.inscriptionId};return console.log(\"Inscription successful:\",h),r==null||r(h),h}catch(o){if(console.error(\"Inscription error:\",o),o.code===4001)return a==null||a(),null;throw o}},we=async()=>{try{const r=await(await fetch(`${u.baseUrl}/r/blockheight`)).text(),s=await(await fetch(`${u.baseUrl}/r/blockinfo/${r.trim()}`)).json();return Math.max(s.average_fee_rate||2,2)}catch(t){return console.error(\"Error fetching fee rate:\",t),2}},_={modalBg:\"rgba(0, 0, 0, 0.85)\",contentBg:\"#1a1a1a\",borderColor:\"#333\",accentColor:\"#00ffff\",textColor:\"#fff\",inputBg:\"#222\",buttonGradient:\"linear-gradient(45deg, #ff8e53, #00ffff)\"},j={bitcoin:{modalBg:\"rgba(0, 0, 0, 0.85)\",contentBg:\"#1a1a1a\",borderColor:\"#f7931a\",accentColor:\"#f7931a\",textColor:\"#ffffff\",inputBg:\"#222222\",buttonGradient:\"linear-gradient(45deg, #f7931a, #ffa726)\"},ethereum:{modalBg:\"rgba(0, 0, 0, 0.85)\",contentBg:\"#1c2951\",borderColor:\"#62688f\",accentColor:\"#00ffff\",textColor:\"#ffffff\",inputBg:\"#2a3c6e\",buttonGradient:\"linear-gradient(45deg, #5c6bc0, #00ffff)\"},ordinals:{modalBg:\"rgba(0, 0, 0, 0.85)\",contentBg:\"#1a1a1a\",borderColor:\"#333\",accentColor:\"#00ffff\",textColor:\"#ffffff\",inputBg:\"#222\",buttonGradient:\"linear-gradient(45deg, #ff8e53, #00ffff)\"},monero:{modalBg:\"rgba(0, 0, 0, 0.85)\",contentBg:\"#252525\",borderColor:\"#ff6b00\",accentColor:\"#ff6b00\",textColor:\"#ffffff\",inputBg:\"#333\",buttonGradient:\"linear-gradient(45deg, #ff6b00, #ff9340)\"},cardano:{modalBg:\"rgba(0, 0, 0, 0.85)\",contentBg:\"#1e4147\",borderColor:\"#0033ad\",accentColor:\"#17d1aa\",textColor:\"#ffffff\",inputBg:\"#2a565e\",buttonGradient:\"linear-gradient(45deg, #0033ad, #17d1aa)\"}},Te=t=>{const r=document.documentElement;Object.entries(t).forEach(([a,s])=>{const o=`--${a.replace(/([A-Z])/g,\"-$1\").toLowerCase()}`;r.style.setProperty(o,s)})},Se=async t=>{var r;try{console.log(\"🔄 Starting theme fetch process...\");const s=await(await fetch(`/r/children/${t}`)).json();if(!((r=s==null?void 0:s.ids)!=null&&r.length))return console.log(\"❌ No children found, using defaults\"),{title:\"NeXscribe\",logo:u.DEFAULT_LOGO,theme:\"ordinals\",themeColors:_};const o=s.ids[s.ids.length-1];console.log(`✅ Latest child inscription: ${o}`);let c;try{const E=await(await fetch(`/content/${o}`)).text();try{c=JSON.parse(E.trim())}catch{try{const N=atob(E.trim());c=JSON.parse(N)}catch{console.warn(\"⚠️ Failed to parse content as JSON or base64:\",E),c={}}}}catch(h){console.warn(\"⚠️ Theme parsing error:\",h),c={}}let d={..._};if(c.themeColors&&typeof c.themeColors==\"object\"){const h=Object.entries(c.themeColors).filter(([E,y])=>y&&typeof y==\"string\").reduce((E,[y,N])=>({...E,[y]:N}),{});d={...d,...h}}else c.theme&&j[c.theme.toLowerCase()]&&(d=j[c.theme.toLowerCase()]);try{Te(d),console.log(\"✅ Theme colors applied\")}catch(h){console.warn(\"⚠️ Error applying styles:\",h)}return{title:c.title||\"NeXscribe\",logo:c.logo||u.DEFAULT_LOGO,theme:c.theme||\"custom\",themeColors:d}}catch(a){return console.error(\"❌ Theme fetch failed:\",a),{title:\"NeXscribe\",logo:u.DEFAULT_LOGO,theme:\"ordinals\",themeColors:_}}},Ae=({logoId:t})=>t?n(\"div\",{className:\"logo-container\",children:n(\"img\",{src:`${u.baseUrl}/content/${t}`,alt:\"Logo\",className:\"logo-image\"})}):null;const Re=({txId:t,onClose:r})=>n(\"div\",{className:\"success-modal\",children:f(\"div\",{className:\"success-message\",children:[n(\"h2\",{children:\"Inscription Successful! 🎨\"}),f(\"div\",{className:\"tx-info\",children:[n(\"strong\",{children:\"Transaction ID:\"}),n(\"code\",{children:t})]}),f(\"div\",{className:\"message-content\",children:[n(\"p\",{children:\"Your inscription has been created and will be processed shortly.\"}),n(\"p\",{children:\"You can track your inscription using Mempool.\"}),f(\"div\",{className:\"transaction-note\",children:[n(\"strong\",{children:\"Note:\"}),\" The inscription process typically takes 5-10 minutes to complete.\"]})]}),f(\"div\",{className:\"button-group\",children:[n(\"button\",{className:\"view-tx-btn\",onClick:()=>window.open(`https://mempool.space/tx/${t}`,\"_blank\"),children:\"View on Mempool\"}),n(\"button\",{className:\"close-success-btn\",onClick:r,children:\"Close\"})]})]})}),A={PLAIN:\"text/plain\",HTML:\"text/html\",JSON:\"application/json\",BITMAP:\"text/plain;charset=utf-8\",IMAGE_PNG:\"image/png\",IMAGE_JPEG:\"image/jpeg\",IMAGE_GIF:\"image/gif\",IMAGE_WEBP:\"image/webp\"},g={TEXT:\"text\",BITMAP:\"bitmap\",BRC20:\"brc20\",UPLOAD:\"upload\"},Be=`⚠️ Important Notice:\n1. This bitmap number may already be registered by someone else\n2. Multiple users might be attempting to register the same bitmap\n3. A successful transaction doesn't guarantee ownership\n4. Always verify the bitmap status before inscribing`,W={BITCOIN:\"bitcoin\",ETHEREUM:\"ethereum\",ORDINALS:\"ordinals\",MONERO:\"monero\",CARDANO:\"cardano\"},H=\"Nexscribe\",Oe=({isOpen:t,onClose:r})=>{const[a,s]=p(A.PLAIN),[o,c]=p(\"\"),[d,h]=p(null),[E,y]=p(!1),[N,w]=p(\"\"),[O,q]=p(null),[z,Y]=p(null),[T,Z]=p(g.TEXT),[x,K]=p(\"\"),[S,k]=p(\"\"),[Q,ee]=p(2),[m,te]=p(null),[L,P]=p(\"\"),[Le,ne]=p(R.SERVICE_ADDRESS),[re,oe]=p(W.ORDINALS),[C,se]=p(null),[$,D]=p(null);B(()=>{(async()=>{await Ie(),ne(u.SERVICE_ADDRESS)})()},[]),B(()=>{const e=async()=>{const i=await we();ee(i)};if(t){e();const i=setInterval(e,12e4);return()=>clearInterval(i)}},[t]),B(()=>{const e=async()=>{try{const l=await(await fetch(`${u.baseUrl}/r/blockheight`)).text();te(parseInt(l.trim()))}catch(i){console.error(\"Failed to fetch block height:\",i)}};if(t){e();const i=setInterval(e,3e4);return()=>clearInterval(i)}},[t]),B(()=>{(async()=>{const i=J();if(i){const l=await Se(i);l&&(se(l),oe(l.theme||W.ORDINALS))}})()},[]);const F=(e,i=\"success\")=>{const l=document.createElement(\"div\");l.className=\"success-animation\",l.innerHTML=`\n      <div style=\"font-size: 40px; margin-bottom: 10px\">\n        ${i===\"success\"?\"🎉\":\"❌\"}\n      </div>\n      <div>${e}</div>\n    `,document.body.appendChild(l),setTimeout(()=>l.remove(),3e3)},M=async()=>{var e,i;try{const l=(e=window.XverseProviders)==null?void 0:e.BitcoinProvider;if(!l)return w(\"Xverse provider not found\"),!1;const I=await l.request(\"getAccounts\",{purposes:[\"ordinals\"]});console.log(\"Wallet accounts:\",I);const v=(i=I==null?void 0:I.result)==null?void 0:i.find(b=>b.purpose===\"ordinals\");return v!=null&&v.address?(Y(\"Xverse\"),q(v.address),console.log(\"Connected ordinals address:\",v.address),F(\"Connected to Xverse\"),!0):(w(\"No Xverse ordinals account found\"),!1)}catch(l){return console.error(\"Wallet connection error:\",l),w((l==null?void 0:l.message)||\"Failed to connect wallet\"),!1}},ce=async e=>{const i=e.target.files[0];if(i)try{h(i);const{content:l,contentType:I}=await U(i);c(l),s(I),w(\"\")}catch{w(\"Failed to process file\"),h(null)}},ie=async()=>{try{if(console.log(\"Starting inscription process...\"),y(!0),w(\"\"),!O&&!await M())throw new Error(\"Please connect your wallet first\");let e=o,i=a,l=\"PLAIN_TEXT\";switch(T){case g.BITMAP:e=`${S}.bitmap`,i=A.BITMAP;break;case g.BRC20:e=JSON.stringify({p:\"brc-20\",op:\"deploy\",tick:x.toLowerCase(),max:\"21000000\"}),i=A.JSON;break;case g.UPLOAD:if(!d)throw new Error(\"No file selected\");const b=await U(d);e=b.content,i=b.contentType,l=\"BASE_64\";break}const I={contentType:i,content:e,payloadType:l,network:{type:\"Mainnet\"},appFeeAddress:u.SERVICE_ADDRESS,appFee:u.SERVICE_FEE,suggestedMinerFeeRate:Q};console.log(\"Creating inscription with payload:\",I);const v=await Ne({payload:I,onFinish:b=>{console.log(\"Inscription completed:\",b),b!=null&&b.txId&&D(b.txId)},onCancel:()=>{console.log(\"Inscription cancelled\"),F(\"Inscription cancelled\",\"error\")}});v!=null&&v.txId&&D(v.txId)}catch(e){console.error(\"Inscription error:\",e),F(e.message||\"Failed to create inscription\",\"error\"),w(e.message||\"Failed to create inscription\")}finally{y(!1)}},ae=()=>f(\"div\",{className:\"brc20-controls enhanced\",children:[n(\"input\",{type:\"text\",value:x,onChange:e=>K(e.target.value.toUpperCase()),placeholder:\"Enter BRC-20 token tick (e.g., ORDI)\",className:\"tick-input\",maxLength:4}),n(\"div\",{className:\"info-text\",children:\"BRC-20 ticks are typically 4 characters in length\"})]}),le=()=>f(\"div\",{className:\"bitmap-inscription-container\",children:[f(\"div\",{className:\"block-height-info\",children:[\"Current Block Height: \",m||\"Loading...\",f(\"button\",{className:\"use-height-btn\",onClick:()=>{k((m==null?void 0:m.toString())||\"\"),V((m==null?void 0:m.toString())||\"\")},disabled:!m,children:[\"Use Current Block Height: \",m||\"...\"]})]}),n(\"div\",{className:\"bitmap-warning\",children:n(\"pre\",{children:Be})}),n(\"input\",{type:\"number\",value:S,onChange:e=>{k(e.target.value),V(e.target.value)},placeholder:`Current block height: ${m||\"...\"}`,className:\"content-type-input\",max:m}),L&&n(\"div\",{className:\"validation-error\",children:L}),S&&!L&&f(\"div\",{className:\"preview-text\",children:[\"Will inscribe: \",S,\".bitmap\"]})]}),de=()=>f(\"div\",{className:\"wallet-info\",children:[n(\"div\",{className:\"scrollable-content\",children:f(\"div\",{className:\"info-grid\",children:[n(\"div\",{className:\"welcome-content\",children:n(\"h2\",{children:(C==null?void 0:C.title)||H})}),f(\"div\",{className:\"info-section\",children:[f(\"div\",{className:\"address-box\",children:[n(\"div\",{className:\"wallet-type\",children:z}),n(\"div\",{className:\"address\",children:O})]}),n(\"div\",{className:\"inscription-type-selector\",children:Object.values(g).map(e=>n(\"button\",{className:`menu-item ${T===e?\"active\":\"\"}`,onClick:()=>Z(e),children:e.charAt(0).toUpperCase()+e.slice(1)},e))}),T===g.TEXT&&f(\"div\",{className:\"text-inscription-container\",children:[f(\"div\",{className:\"input-group\",children:[n(\"label\",{children:\"Content Type:\"}),n(\"select\",{value:a,onChange:e=>s(e.target.value),children:Object.entries(A).map(([e,i])=>n(\"option\",{value:i,children:i},e))})]}),n(\"textarea\",{className:\"inscription-text enhanced\",value:o,onChange:e=>c(e.target.value),placeholder:\"Enter your inscription text...\",rows:6})]}),T===g.BRC20&&ae(),T===g.BITMAP&&le(),T===g.UPLOAD&&f(\"div\",{className:\"universal-controls enhanced\",children:[f(\"div\",{className:\"file-upload-zone\",children:[n(\"input\",{type:\"file\",onChange:ce,accept:\"image/*,text/*,application/json\",className:\"file-input\",id:\"file-input\"}),n(\"label\",{htmlFor:\"file-input\",children:\"Drop files here or click to upload\"})]}),d&&f(\"div\",{className:\"file-preview\",children:[f(\"p\",{children:[\"Selected file: \",d.name]}),n(\"button\",{className:\"remove-file-btn\",onClick:()=>{h(null),c(\"\"),s(A.PLAIN)},children:\"Remove File\"})]})]})]})]})}),n(\"div\",{className:\"sticky-footer\",children:n(\"button\",{className:\"inscribe-button\",onClick:ie,disabled:E||!fe(),children:E?\"Creating Inscription...\":\"Create Inscription\"})})]}),fe=()=>{switch(T){case g.TEXT:return o.trim().length>0;case g.BITMAP:return S.trim().length>0;case g.BRC20:return x.trim().length>0;case g.UPLOAD:return d!==null;default:return!1}},V=e=>/^\\d+$/.test(e)?m&&parseInt(e)>m?(P(`Bitmap number cannot exceed current block height (${m})`),!1):(P(\"\"),!0):(P(\"Bitmap number must be a positive integer\"),!1),pe=()=>{var e,i;return n(\"div\",{className:\"welcome-container\",children:f(\"div\",{className:\"welcome-content\",children:[n(\"h2\",{children:(C==null?void 0:C.title)||H}),n(\"button\",{className:\"wallet-btn\",onClick:M,disabled:!((e=window.XverseProviders)!=null&&e.BitcoinProvider),children:(i=window.XverseProviders)!=null&&i.BitcoinProvider?\"Connect Xverse Wallet\":\"Xverse Extension Required\"}),N&&n(\"div\",{className:\"error-message\",children:N})]})})};return n(\"div\",{className:`modal ${t?\"active\":\"\"} theme-${re}`,children:f(\"div\",{className:\"modal-content\",children:[n(Ae,{logoId:(C==null?void 0:C.logo)||u.DEFAULT_LOGO}),O?de():pe(),$&&n(Re,{txId:$,onClose:()=>{D(null),r()}})]})})};function xe(){return n(\"div\",{className:\"w-full h-full flex flex-col overflow-hidden\",children:n(Oe,{isOpen:!0,onClose:()=>{}})})}he.createRoot(document.getElementById(\"root\")).render(n(ue.StrictMode,{children:n(xe,{})}));";
                            document.body.appendChild(moduleScript);
                        }).catch(console.error);
                    })();