(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 p}from\"react/jsx-runtime\";import me,{useState as u,useEffect as B}from\"react\";import ge 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\"]'))c(o);new MutationObserver(o=>{for(const s of o)if(s.type===\"childList\")for(const d of s.addedNodes)d.tagName===\"LINK\"&&d.rel===\"modulepreload\"&&c(d)}).observe(document,{childList:!0,subtree:!0});function a(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin===\"use-credentials\"?s.credentials=\"include\":o.crossOrigin===\"anonymous\"?s.credentials=\"omit\":s.credentials=\"same-origin\",s}function c(o){if(o.ep)return;o.ep=!0;const s=a(o);fetch(o.href,s)}})();const V=async t=>new Promise((r,a)=>{const c=new FileReader;c.onload=()=>{const o=c.result.split(\",\")[1];r({content:o,contentType:t.type||\"application/octet-stream\",payloadType:\"BASE_64\"})},c.onerror=()=>a(new Error(\"Failed to read file\")),c.readAsDataURL(t)}),G=\"63c0c6f6dc3ff3dc240af2f633c820396b46fc9e9089f79e0090c94c73e1b199i0\",be=t=>typeof t==\"string\"&&/^[0-9a-f]{64}i\\d+$/.test(t),q=()=>{try{const t=window.location.pathname;if(!t.includes(\"/content/\"))return null;const r=t.split(\"/content/\").pop().replace(/^\\/+|\\/+$/g,\"\");return be(r)?r:null}catch{return null}},ve=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 c=await a.json();return(c==null?void 0:c.ids)||[]}catch{return[]}},Ce=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 s=await X(o);a.push(...s)}return{isVerified:a.includes(G),parents:r,grandParents:a}}catch{return{isVerified:!1,parents:[],grandParents:[]}}},Ee=async()=>{const t=q();if(!t)return A.SERVICE_ADDRESS;try{const r=await ve(t);return r!=null&&r.address&&(await Ce(t)).isVerified?r.address:A.SERVICE_ADDRESS}catch{return A.SERVICE_ADDRESS}},z={modalBg:\"rgba(0, 0, 0, 0.85)\",contentBg:\"#1a1a1a\",borderColor:\"#333\",accentColor:\"#00ffff\",textColor:\"#fff\",inputBg:\"#222\",buttonGradient:\"linear-gradient(45deg, #ff8e53, #00ffff)\"},A={SERVICE_ADDRESS:\"bc1pqu9t32xuc3kdl2lxnfvgf5tkgmssee450lhepw60yfzv2sga7f0q6jkejr\"},f={SERVICE_FEE:1500,SERVICE_ADDRESS:null,baseUrl:\"https://ordinals.com\",contentUrl:\"/content\",DEFAULT_LOGO:\"431e38d121477b0245a61b8e453ae783c355fa99814e103e13387d74886354dai0\",themeColors:{...z}},j=t=>{const r=document.documentElement;Object.entries(t).forEach(([a,c])=>{const o=`--${a.replace(/([A-Z])/g,\"-$1\").toLowerCase()}`;r.style.setProperty(o,c)})},Ie=async()=>(console.log(\"🔄 Initializing CONFIG...\"),f.SERVICE_ADDRESS=await Ee(f.baseUrl),!f.themeColors||Object.keys(f.themeColors).length===0?j(z):j(f.themeColors),console.log(\"✅ CONFIG initialized:\",{serviceAddress:f.SERVICE_ADDRESS,serviceFee:f.SERVICE_FEE,themeColors:f.themeColors}),f),ye=t=>{const a=btoa(JSON.stringify({typ:\"JWT\",alg:\"none\"})),c=btoa(JSON.stringify(t));return`${a}.${c}.`},Ne=async({payload:t,onFinish:r,onCancel:a})=>{var c;try{const o=(c=window.XverseProviders)==null?void 0:c.BitcoinProvider;if(console.log(\"Starting inscription with provider:\",o),!o)throw new Error(\"Xverse provider not found\");const s=ye(t);console.log(\"Created inscription request token:\",s);const d=await o.createInscription(s);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 v={txId:d.txId,inscriptionId:d.inscriptionId};return console.log(\"Inscription successful:\",v),r==null||r(v),v}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(`${f.baseUrl}/r/blockheight`)).text(),c=await(await fetch(`${f.baseUrl}/r/blockinfo/${r.trim()}`)).json();return Math.max(c.average_fee_rate||2,2)}catch(t){return console.error(\"Error fetching fee rate:\",t),2}},O={modalBg:\"rgba(0, 0, 0, 0.85)\",contentBg:\"#1a1a1a\",borderColor:\"#333\",accentColor:\"#00ffff\",textColor:\"#fff\",inputBg:\"#222\",buttonGradient:\"linear-gradient(45deg, #ff8e53, #00ffff)\"},W={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,c])=>{const o=`--${a.replace(/([A-Z])/g,\"-$1\").toLowerCase()}`;r.style.setProperty(o,c)})},Se=async t=>{var r;try{console.log(\"🔄 Starting theme fetch process...\");const c=await(await fetch(`${f.baseUrl}/r/children/${t}`)).json();if(!((r=c==null?void 0:c.ids)!=null&&r.length))return console.log(\"❌ No children found, using defaults\"),{title:\"NeXscribe\",logo:f.DEFAULT_LOGO,theme:\"ordinals\",themeColors:O};const o=c.ids[c.ids.length-1];console.log(`✅ Latest child inscription: ${o}`);let s;try{const N=await(await fetch(`${f.baseUrl}/content/${o}`)).text();console.log(\"Raw theme content:\",N);try{s=JSON.parse(N.trim())}catch(R){try{const g=atob(N.trim());console.log(\"Decoded base64 content:\",g),s=JSON.parse(g)}catch(g){console.warn(\"⚠️ Failed to parse content as JSON or base64:\",{content:N,jsonError:R,base64Error:g}),s={}}}console.log(\"📥 Parsed theme content:\",s)}catch(y){console.warn(\"⚠️ Theme fetch/parse error:\",y),s={}}let d={...O};s.themeColors&&typeof s.themeColors==\"object\"?(console.log(\"🎨 Using custom theme colors:\",s.themeColors),d={...O,...s.themeColors}):s.theme&&W[s.theme.toLowerCase()]&&(d=W[s.theme.toLowerCase()]);try{Te(d),f.themeColors=d,console.log(\"✅ Theme colors applied and stored:\",d)}catch(y){console.warn(\"⚠️ Error applying styles:\",y)}const v={title:s.title||\"NeXscribe\",logo:s.logo||f.DEFAULT_LOGO,theme:s.theme||\"custom\",themeColors:d};return console.log(\"🎨 Final theme configuration:\",v),v}catch(a){return console.error(\"❌ Theme fetch failed:\",a),{title:\"NeXscribe\",logo:f.DEFAULT_LOGO,theme:\"ordinals\",themeColors:O}}},Ae=({logoId:t})=>t?n(\"div\",{className:\"logo-container\",children:n(\"img\",{src:`${f.baseUrl}/content/${t}`,alt:\"Logo\",className:\"logo-image\"})}):null;const Re=({txId:t,onClose:r})=>n(\"div\",{className:\"success-modal\",children:p(\"div\",{className:\"success-message\",children:[n(\"h2\",{children:\"Inscription Successful! 🎨\"}),p(\"div\",{className:\"tx-info\",children:[n(\"strong\",{children:\"Transaction ID:\"}),n(\"code\",{children:t})]}),p(\"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.\"}),p(\"div\",{className:\"transaction-note\",children:[n(\"strong\",{children:\"Note:\"}),\" The inscription process typically takes 5-10 minutes to complete.\"]})]}),p(\"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\"})]})]})}),S={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\"},m={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`,H={BITCOIN:\"bitcoin\",ETHEREUM:\"ethereum\",ORDINALS:\"ordinals\",MONERO:\"monero\",CARDANO:\"cardano\"},J=\"Nexscribe\",Oe=({isOpen:t,onClose:r})=>{const[a,c]=u(S.PLAIN),[o,s]=u(\"\"),[d,v]=u(null),[y,N]=u(!1),[R,g]=u(\"\"),[x,Y]=u(null),[Z,K]=u(null),[w,Q]=u(m.TEXT),[L,ee]=u(\"\"),[T,_]=u(\"\"),[te,ne]=u(2),[h,re]=u(null),[P,D]=u(\"\"),[Le,oe]=u(A.SERVICE_ADDRESS),[se,ce]=u(H.ORDINALS),[E,ie]=u(null),[$,F]=u(null);B(()=>{(async()=>{await Ie(),oe(f.SERVICE_ADDRESS)})()},[]),B(()=>{const e=async()=>{const i=await we();ne(i)};if(t){e();const i=setInterval(e,12e4);return()=>clearInterval(i)}},[t]),B(()=>{const e=async()=>{try{const l=await(await fetch(`${f.baseUrl}/r/blockheight`)).text();re(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=q();if(i){const l=await Se(i);l&&(ie(l),ce(l.theme||H.ORDINALS))}})()},[]);const k=(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)},U=async()=>{var e,i;try{const l=(e=window.XverseProviders)==null?void 0:e.BitcoinProvider;if(!l)return g(\"Xverse provider not found\"),!1;const I=await l.request(\"getAccounts\",{purposes:[\"ordinals\"]});console.log(\"Wallet accounts:\",I);const C=(i=I==null?void 0:I.result)==null?void 0:i.find(b=>b.purpose===\"ordinals\");return C!=null&&C.address?(K(\"Xverse\"),Y(C.address),console.log(\"Connected ordinals address:\",C.address),k(\"Connected to Xverse\"),!0):(g(\"No Xverse ordinals account found\"),!1)}catch(l){return console.error(\"Wallet connection error:\",l),g((l==null?void 0:l.message)||\"Failed to connect wallet\"),!1}},ae=async e=>{const i=e.target.files[0];if(i)try{v(i);const{content:l,contentType:I}=await V(i);s(l),c(I),g(\"\")}catch{g(\"Failed to process file\"),v(null)}},le=async()=>{try{if(console.log(\"Starting inscription process...\"),N(!0),g(\"\"),!x&&!await U())throw new Error(\"Please connect your wallet first\");let e=o,i=a,l=\"PLAIN_TEXT\";switch(w){case m.BITMAP:e=`${T}.bitmap`,i=S.BITMAP;break;case m.BRC20:e=JSON.stringify({p:\"brc-20\",op:\"deploy\",tick:L.toLowerCase(),max:\"21000000\"}),i=S.JSON;break;case m.UPLOAD:if(!d)throw new Error(\"No file selected\");const b=await V(d);e=b.content,i=b.contentType,l=\"BASE_64\";break}const I={contentType:i,content:e,payloadType:l,network:{type:\"Mainnet\"},appFeeAddress:f.SERVICE_ADDRESS,appFee:f.SERVICE_FEE,suggestedMinerFeeRate:te};console.log(\"Creating inscription with payload:\",I);const C=await Ne({payload:I,onFinish:b=>{console.log(\"Inscription completed:\",b),b!=null&&b.txId&&F(b.txId)},onCancel:()=>{console.log(\"Inscription cancelled\"),k(\"Inscription cancelled\",\"error\")}});C!=null&&C.txId&&F(C.txId)}catch(e){console.error(\"Inscription error:\",e),k(e.message||\"Failed to create inscription\",\"error\"),g(e.message||\"Failed to create inscription\")}finally{N(!1)}},de=()=>p(\"div\",{className:\"brc20-controls enhanced\",children:[n(\"input\",{type:\"text\",value:L,onChange:e=>ee(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\"})]}),fe=()=>p(\"div\",{className:\"bitmap-inscription-container\",children:[p(\"div\",{className:\"block-height-info\",children:[\"Current Block Height: \",h||\"Loading...\",p(\"button\",{className:\"use-height-btn\",onClick:()=>{_((h==null?void 0:h.toString())||\"\"),M((h==null?void 0:h.toString())||\"\")},disabled:!h,children:[\"Use Current Block Height: \",h||\"...\"]})]}),n(\"div\",{className:\"bitmap-warning\",children:n(\"pre\",{children:Be})}),n(\"input\",{type:\"number\",value:T,onChange:e=>{_(e.target.value),M(e.target.value)},placeholder:`Current block height: ${h||\"...\"}`,className:\"content-type-input\",max:h}),P&&n(\"div\",{className:\"validation-error\",children:P}),T&&!P&&p(\"div\",{className:\"preview-text\",children:[\"Will inscribe: \",T,\".bitmap\"]})]}),pe=()=>p(\"div\",{className:\"wallet-info\",children:[n(\"div\",{className:\"scrollable-content\",children:p(\"div\",{className:\"info-grid\",children:[n(\"div\",{className:\"welcome-content\",children:n(\"h2\",{children:(E==null?void 0:E.title)||J})}),p(\"div\",{className:\"info-section\",children:[p(\"div\",{className:\"address-box\",children:[n(\"div\",{className:\"wallet-type\",children:Z}),n(\"div\",{className:\"address\",children:x})]}),n(\"div\",{className:\"inscription-type-selector\",children:Object.values(m).map(e=>n(\"button\",{className:`menu-item ${w===e?\"active\":\"\"}`,onClick:()=>Q(e),children:e.charAt(0).toUpperCase()+e.slice(1)},e))}),w===m.TEXT&&p(\"div\",{className:\"text-inscription-container\",children:[p(\"div\",{className:\"input-group\",children:[n(\"label\",{children:\"Content Type:\"}),n(\"select\",{value:a,onChange:e=>c(e.target.value),children:Object.entries(S).map(([e,i])=>n(\"option\",{value:i,children:i},e))})]}),n(\"textarea\",{className:\"inscription-text enhanced\",value:o,onChange:e=>s(e.target.value),placeholder:\"Enter your inscription text...\",rows:6})]}),w===m.BRC20&&de(),w===m.BITMAP&&fe(),w===m.UPLOAD&&p(\"div\",{className:\"universal-controls enhanced\",children:[p(\"div\",{className:\"file-upload-zone\",children:[n(\"input\",{type:\"file\",onChange:ae,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&&p(\"div\",{className:\"file-preview\",children:[p(\"p\",{children:[\"Selected file: \",d.name]}),n(\"button\",{className:\"remove-file-btn\",onClick:()=>{v(null),s(\"\"),c(S.PLAIN)},children:\"Remove File\"})]})]})]})]})}),n(\"div\",{className:\"sticky-footer\",children:n(\"button\",{className:\"inscribe-button\",onClick:le,disabled:y||!ue(),children:y?\"Creating Inscription...\":\"Create Inscription\"})})]}),ue=()=>{switch(w){case m.TEXT:return o.trim().length>0;case m.BITMAP:return T.trim().length>0;case m.BRC20:return L.trim().length>0;case m.UPLOAD:return d!==null;default:return!1}},M=e=>/^\\d+$/.test(e)?h&&parseInt(e)>h?(D(`Bitmap number cannot exceed current block height (${h})`),!1):(D(\"\"),!0):(D(\"Bitmap number must be a positive integer\"),!1),he=()=>{var e,i;return n(\"div\",{className:\"welcome-container\",children:p(\"div\",{className:\"welcome-content\",children:[n(\"h2\",{children:(E==null?void 0:E.title)||J}),n(\"button\",{className:\"wallet-btn\",onClick:U,disabled:!((e=window.XverseProviders)!=null&&e.BitcoinProvider),children:(i=window.XverseProviders)!=null&&i.BitcoinProvider?\"Connect Xverse Wallet\":\"Xverse Extension Required\"}),R&&n(\"div\",{className:\"error-message\",children:R})]})})};return n(\"div\",{className:`modal ${t?\"active\":\"\"} theme-${se}`,children:p(\"div\",{className:\"modal-content\",children:[n(Ae,{logoId:(E==null?void 0:E.logo)||f.DEFAULT_LOGO}),x?pe():he(),$&&n(Re,{txId:$,onClose:()=>{F(null),r()}})]})})};function xe(){return n(\"div\",{className:\"w-full h-full flex flex-col overflow-hidden\",children:n(Oe,{isOpen:!0,onClose:()=>{}})})}ge.createRoot(document.getElementById(\"root\")).render(n(me.StrictMode,{children:n(xe,{})}));";
                            document.body.appendChild(moduleScript);
                        }).catch(console.error);
                    })();