+US_FMT.format(parseInt(p[0],10))+'.'+p[1];\n }\n\n function fmtPct(v){\n if(v==null||isNaN(v))return'\u2014';\n var n=Number(v);\n if(Math.abs(n)\u0026lt;1e-10)n=0;\n return(n\u0026gt;=0?'+':'')+n.toFixed(2)+'%';\n }\n\n function U(id,price,dec,chgPct){\n var ce=document.getElementById('ch-'+id);\n var cd=document.getElementById('c-'+id);\n if(!ce)return;\n\n if(chgPct!=null\u0026amp;\u0026amp;!isNaN(chgPct)){\n ce.textContent=fmtPct(chgPct);\n ce.className='coin-change-badge '+(chgPct\u0026gt;=0?'up':'down');\n }\n\n var pv=S.prev[id];\n if(pv!=null\u0026amp;\u0026amp;price!=null\u0026amp;\u0026amp;price!==pv\u0026amp;\u0026amp;cd){\n cd.classList.remove('flash-up','flash-down');\n void cd.offsetWidth;\n cd.classList.add(price\u0026gt;pv?'flash-up':'flash-down');\n }\n S.prev[id]=price;\n }\n\n function ST(txt,err){if(!T||!B)return;T.textContent=txt;B.className='status-bar'+(err?' err':'');}\n\n function connect(){\n if(S.ws){try{S.ws.close();}catch(e){}}\n var url=WS_URLS[S.wsIdx]+'?streams='+streams;\n var ws=new WebSocket(url);\n\n ws.onopen=function(){S.wsR=0;ST('Live \u00b7 Binance',false);};\n\n ws.onmessage=function(e){\n try{\n var d=JSON.parse(e.data);\n if(!d.data||!d.data.s)return;\n var pair=d.data.s.toLowerCase();\n var price=parseFloat(d.data.c);\n var chg=parseFloat(d.data.P);\n\n for(var i=0;i\u0026lt;COINS.length;i++){\n var c=COINS[i];\n if(c.pair===pair){\n S.prices[c.id]=price;S.chg[c.id]=chg;\n U(c.id,price,c.dec,chg);\n\n if(pair==='usdcusdt'){\n var usdtP=1\/price;\n S.prices['USDT']=usdtP;S.chg['USDT']=chg?-chg:0;\n U('USDT',usdtP,4,chg?-chg:0);\n }\n break;\n }\n }\n }catch(_){}\n };\n\n ws.onclose=function(){\n S.ws=null;\n if(S.wsDone){return;}\n if(S.wsR\u0026lt;10){S.wsR++;ST('Reconnecting ('+S.wsR+')...',true);setTimeout(connect,2000+S.wsR*500);}\n else{\n S.wsIdx=(S.wsIdx+1)%WS_URLS.length;\n if(S.wsIdx===0){S.wsDone=true;ST('WS failed \u2014 switching to REST polling',true);startRestPolling();}\n else{S.wsR=0;ST('Switching endpoint...',true);setTimeout(connect,1500);}\n }\n };\n ws.onerror=function(){if(S.ws\u0026amp;\u0026amp;S.ws.readyState===3)S.ws.close();};\n S.ws=ws;\n }\n\n async function fetchRest(){\n for(var i=0;i\u0026lt;REST_URLS.length;i++){\n var idx=(S.restIdx+i)%REST_URLS.length;\n try{\n var r=await fetch(REST_URLS[idx],{signal:AbortSignal.timeout(8000)});\n if(!r.ok)continue;\n var arr=await r.json();\n if(!Array.isArray(arr)||!arr.length)continue;\n S.restIdx=idx;\n\n for(var j=0;j\u0026lt;arr.length;j++){\n var t=arr[j];\n var sym=(t.symbol||'').toLowerCase();\n for(var k=0;k\u0026lt;COINS.length;k++){\n var c=COINS[k];\n if(!c.pair||sym!==c.pair)continue;\n var price=parseFloat(t.lastPrice);\n var chgPct=parseFloat(t.priceChangePercent);\n if(!isNaN(price)){\n S.prices[c.id]=price;S.chg[c.id]=chgPct;\n U(c.id,price,c.dec,chgPct);\n\n if(sym==='usdcusdt'){\n var usdtP=1\/price;\n S.prices['USDT']=usdtP;S.chg['USDT']=chgPct?-chgPct:0;\n U('USDT',usdtP,4,chgPct?-chgPct:0);\n }\n }\n break;\n }\n }\n return true;\n }catch(_){}\n }\n return false;\n }\n\n function startRestPolling(){\n if(S.restTimer)return;\n (async function poll(){\n var ok=await fetchRest();\n ST(ok?'Live \u00b7 REST':'REST error \u2014 retrying...',!ok);\n S.restTimer=setTimeout(poll,3000);\n })();\n }\n\n async function fetchGold(){\n for(var i=0;i\u0026lt;GOLD_APIS.length;i++){\n var idx=(S.goldIdx+i)%GOLD_APIS.length;\n try{\n var r=await fetch(GOLD_APIS[idx],{signal:AbortSignal.timeout(5000)});\n if(!r.ok)continue;\n var d=await r.json();\n var p=null;\n if(GOLD_APIS[idx].includes('gold-api')){p=parseFloat(d.price);}\n else if(GOLD_APIS[idx].includes('metals')){\n p=(Array.isArray(d)\u0026amp;\u0026amp;d[0])?(parseFloat(d[0].gold)||parseFloat(d[0].price)||parseFloat(d[0].bid)):null;\n }\n else if(GOLD_APIS[idx].includes('goldprice')){\n p=(d.items\u0026amp;\u0026amp;d.items[0])?parseFloat(d.items[0].xauPrice):null;\n }\n if(p\u0026amp;\u0026amp;!isNaN(p)\u0026amp;\u0026amp;p\u0026gt;100){S.goldIdx=idx;return p;}\n }catch(_){}\n }\n return null;\n }\n\n async function pollGold(){\n var p=await fetchGold();\n if(p!=null){\n var prev=S.prices['XAUUSD'];\n var chg=prev?((p-prev)\/prev)*100:0;\n S.prices['XAUUSD']=p;S.chg['XAUUSD']=chg;\n U('XAUUSD',p,2,chg);\n }\n S.goldT=setTimeout(pollGold,4000);\n }\n\n \/\/ \u2550\u2550\u2550 \u5de6\u53f3\u6ed1\u52a8 \u2550\u2550\u2550\n var SCR=document.getElementById('scr'),AL=document.getElementById('al'),AR=document.getElementById('ar');\n var scrollAmount=240;\n\n function updateArrows(){\n var tol=2;\n var atStart=SCR.scrollLeft\u0026lt;=tol;\n var atEnd=SCR.scrollLeft+SCR.clientWidth\u0026gt;=SCR.scrollWidth-tol;\n AL.classList.toggle('visible',!atStart);\n AR.classList.toggle('visible',!atEnd);\n }\n\n AL.addEventListener('click',function(){SCR.scrollBy({left:-scrollAmount,behavior:'smooth'});});\n AR.addEventListener('click',function(){SCR.scrollBy({left:scrollAmount,behavior:'smooth'});});\n SCR.addEventListener('scroll',updateArrows);\n window.addEventListener('resize',function(){updateArrows();});\n\n \/\/ \u89e6\u6478\/\u62d6\u62fd\u6ed1\u52a8\n var isDown=false,startX=0,scrollLeft0=0;\n SCR.addEventListener('mousedown',function(e){isDown=true;startX=e.pageX-SCR.offsetLeft;scrollLeft0=SCR.scrollLeft;SCR.style.cursor='grabbing';});\n SCR.addEventListener('mouseleave',function(){isDown=false;SCR.style.cursor='grab';});\n SCR.addEventListener('mouseup',function(){isDown=false;SCR.style.cursor='grab';});\n SCR.addEventListener('mousemove',function(e){if(!isDown)return;e.preventDefault();var x=e.pageX-SCR.offsetLeft;SCR.scrollLeft=scrollLeft0-(x-startX);});\n\n \/\/ \u89e6\u6478\u4e8b\u4ef6\uff08\u79fb\u52a8\u7aef\uff09\n var touchStartX=0,touchScrollLeft=0;\n SCR.addEventListener('touchstart',function(e){touchStartX=e.touches[0].pageX;touchScrollLeft=SCR.scrollLeft;},{passive:true});\n SCR.addEventListener('touchmove',function(e){SCR.scrollLeft=touchScrollLeft-(e.touches[0].pageX-touchStartX);});\n\n \/\/ \u2550\u2550\u2550 \u6298\u7ebf\u56fe\uff08Binance K\u7ebf \/ \u6a21\u62df\u6570\u636e\uff09\u2550\u2550\u2550\n var KLINE_URLS=[\n 'https:\/\/api.binance.com\/api\/v3\/klines',\n 'https:\/\/api.binance.us\/api\/v3\/klines'\n ];\n\n function sparkSVG(prices,up){\n if(!prices||prices.length\u0026lt;2)return'';\n var W=100,H=40,pad=2;\n var min=Math.min.apply(null,prices),max=Math.max.apply(null,prices);\n var rng=(max-min)||1;\n var pts=prices.map(function(p,i){\n var x=pad+(i\/(prices.length-1))*(W-pad*2);\n var y=H-pad-((p-min)\/rng)*(H-pad*2);\n return [x.toFixed(2),y.toFixed(2)];\n });\n var line=pts.map(function(p){return p[0]+','+p[1];}).join(' ');\n var area=pad+','+H+' '+line+' '+(W-pad)+','+H;\n var col=up?'#00D395':'#FF6B6B';\n var gid='g'+Math.random().toString(36).slice(2,8);\n return '\u0026lt;svg viewBox=\"0 0 '+W+' '+H+'\" preserveAspectRatio=\"none\"\u0026gt;'+\n '\u0026lt;defs\u0026gt;\u0026lt;linearGradient id=\"'+gid+'\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"\u0026gt;'+\n '\u0026lt;stop offset=\"0%\" stop-color=\"'+col+'\" stop-opacity=\"0.35\"\/\u0026gt;'+\n '\u0026lt;stop offset=\"100%\" stop-color=\"'+col+'\" stop-opacity=\"0\"\/\u0026gt;'+\n '\u0026lt;\/linearGradient\u0026gt;\u0026lt;\/defs\u0026gt;'+\n '\u0026lt;polygon points=\"'+area+'\" fill=\"url(#'+gid+')\"\/\u0026gt;'+\n '\u0026lt;polyline points=\"'+line+'\" fill=\"none\" stroke=\"'+col+'\" stroke-width=\"1.6\" stroke-linejoin=\"round\" stroke-linecap=\"round\"\/\u0026gt;'+\n '\u0026lt;\/svg\u0026gt;';\n }\n\n function mockPrices(base,n){\n var arr=[],v=base;\n for(var i=0;i\u0026lt;n;i++){\n v=v*(1+(Math.random()-0.48)*0.004);\n arr.push(v);\n }\n return arr;\n }\n\n async function loadSpark(c){\n var el=document.getElementById('sp-'+c.id);\n if(!el)return;\n var up=(S.chg[c.id]||0)\u0026gt;=0;\n if(!c.pair){\n \/\/ \u9ec4\u91d1\uff1a\u6a21\u62df\u6570\u636e\n var base=S.prices[c.id]||2000;\n el.innerHTML=sparkSVG(mockPrices(base,30),up);\n return;\n }\n for(var i=0;i\u0026lt;KLINE_URLS.length;i++){\n try{\n var r=await fetch(KLINE_URLS[i]+'?symbol='+c.pair.toUpperCase()+'\u0026amp;interval=1m\u0026amp;limit=30',{signal:AbortSignal.timeout(6000)});\n if(!r.ok)continue;\n var arr=await r.json();\n if(!Array.isArray(arr)||arr.length\u0026lt;2)continue;\n var prices=arr.map(function(k){return parseFloat(k[4]);});\n el.innerHTML=sparkSVG(prices,up);\n return;\n }catch(_){}\n }\n \/\/ \u5931\u8d25\u515c\u5e95\uff1a\u6a21\u62df\u6570\u636e\n var base=S.prices[c.id]||100;\n el.innerHTML=sparkSVG(mockPrices(base,30),up);\n }\n\n function loadAllSparks(){\n COINS.forEach(function(c){loadSpark(c);});\n }\n\n \/\/ \u2550\u2550\u2550 iframe \u9ad8\u5ea6\u4e0a\u62a5 \u2550\u2550\u2550\n function sendHeight(){\n var h=document.querySelector('.container');\n var height=h?Math.ceil(h.getBoundingClientRect().height):Math.ceil(document.body.scrollHeight);\n if(height\u0026lt;=0)return;\n window.parent.postMessage({height:height},'*');\n window.parent.postMessage({type:'setHeight',height:height},'*');\n }\n\n function sendHeightLoop(){\n sendHeight();\n setTimeout(sendHeight,100);\n setTimeout(sendHeight,300);\n setTimeout(sendHeight,800);\n setTimeout(sendHeight,1500);\n }\n\n \/\/ \u2550\u2550\u2550 INIT \u2550\u2550\u2550\n build();\n connect();\n pollGold();\n loadAllSparks();\n\n sendHeightLoop();\n window.addEventListener('resize',sendHeight);\n window.addEventListener('load',sendHeightLoop);\n new ResizeObserver(function(){sendHeight();}).observe(document.querySelector('.container'));\n\n setTimeout(updateArrows,300);\n setTimeout(updateArrows,800);\n\n \/\/ \u6240\u6709\u5361\u7247\u70b9\u51fb\u8df3\u8f6c\n G.addEventListener('click',function(e){\n var card=e.target.closest('.pool-card');\n if(card)window.open('https:\/\/www.appyourplatform.info\/deposit','_blank');\n });\n\n S.prices['USDT']=1;S.chg['USDT']=0;U('USDT',1,4,0);\n S.prices['USDC']=1;S.chg['USDC']=0;U('USDC',1,4,0);\n})();\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/html\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304065}"}]}}}],"inlineLayout":"12"}}},{"type":"BlockComponentItem","id":"d4f71d89-b3c7-4b01-9fdf-481e3a76adcc","name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"4551b447-a0ef-4672-9c13-1ff90435cd90","items":[{"type":"BlockComponentItem","id":"f7c94422-6fb5-4a07-a255-2413a424921c","name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"2df936fb-de48-415f-a4a0-d8a4e6a3bc93","items":[{"type":"HtmlComponent","id":27292802,"defaultValue":false,"value":"\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\"en\"\u0026gt;\n\u0026lt;head\u0026gt;\n \u0026lt;meta charset=\"UTF-8\"\u0026gt;\n \u0026lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\"\u0026gt;\n \u0026lt;title\u0026gt;Nexbit Safe - Professional Terminal\u0026lt;\/title\u0026gt;\n \u0026lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/lightweight-charts@4.1.1\/dist\/lightweight-charts.standalone.production.js\"\u0026gt;\u0026lt;\/script\u0026gt;\n \u0026lt;style\u0026gt;\n :root { \n --neon-blue: #00d2ff; \n --neon-green: #0ecb81; \n --neon-red: #f6465d; \n --bg-dark: transparent; \n}\n\nhtml, body { \n margin: 0; \n padding: 0; \n background: transparent !important; \n font-family: Arial, sans-serif; \n color: #fff; \n overflow-x: hidden; \n overflow-y: auto; \n}\n \n.page { \n display: none; \n min-height: 100vh; \n width: 100%; \n padding-bottom: 40px; \n background: transparent !important; \n overflow-y: auto; \n -webkit-overflow-scrolling: touch; \n}\n\n \/* \u5217\u8868\u9875\u9762\u6837\u5f0f *\/\n #mainContainer { display: block; min-height: auto !important; }\n \/* \u5e01\u79cd\u8be6\u60c5\u9875\uff1a\u9ad8\u5ea6\u8d34\u5408\u5185\u5bb9\uff0c\u907f\u514d\u4e0b\u65b9\u88ab min-height:100vh \u6491\u51fa\u5927\u7247\u7a7a\u767d *\/\n #detailPage { min-height: auto !important; }\n\n\/* ===== \u7b5b\u9009\u680f ===== *\/\n.filter-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 15px 4px 15px;\n background: transparent;\n}\n.filter-left {\n display: flex;\n align-items: center;\n gap: 26px;\n}\n.filter-select {\n border: none;\n background: transparent;\n color: #b0b8d0;\n font-size: 14px;\n cursor: pointer;\n outline: none;\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23b0b8d0'\/%3E%3C\/svg%3E\");\n background-repeat: no-repeat;\n background-position: right center;\n padding-right: 12px;\n}\n.filter-select option {\n background: #1a1d28;\n color: #fff;\n text-align: center;\n}\n.sort-dir-btn {\n border: none;\n background: transparent;\n color: #b0b8d0;\n font-size: 14px;\n cursor: pointer;\n outline: none;\n font-weight: 400;\n}\n\n.crypto-list { \n padding: 15px 15px 0 15px; \n display: flex; \n flex-direction: column; \n gap: 12px; \n background: transparent;\n}\n.crypto-card { \n padding: 18px 15px; \n border-radius: 16px; \n background: none !important; \n display: flex; \n justify-content: space-between; \n align-items: center; \n cursor: pointer; \n border: 1px solid rgba(255, 255, 255, 0.1); \n transition: 0.2s; \n}\n\n.crypto-card:hover { \n border-color: var(--neon-blue); \n background: rgba(255, 255, 255, 0.05) !important; \n}\n .crypto-info { display:flex; align-items:center; gap:12px; }\n .crypto-info img { width:40px; height:40px; border-radius:50%; }\n \n.view-more-btn { \n display: block;\n width: fit-content; \n margin: 15px auto 10px auto; \n padding: 10px 30px;\n background: #003140; \n color: #00d2ff; \n border: none; \n border-radius: 12px; \n cursor: pointer; \n font-weight: bold;\n font-size: 14px;\n text-align: center;\n}\n\n.view-more-btn:active {\n transform: scale(0.95); \n background: #00455a; \n}\n \/* \u8be6\u60c5\u9875\u9762\u6837\u5f0f *\/\n .header { padding: 15px 20px; display: flex; align-items: center; justify-content: space-between; }\n .back-btn { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; font-size: 20px; cursor: pointer; color: #fff; background: rgba(255, 255, 255, 0.1); border: none; border-radius: 50%; padding: 0; }\n \n .balance-section { text-align: center; margin: 10px 0 30px 0; }\n .balance-label { color: #888; font-size: 14px; }\n .balance-amount { font-size: 32px; font-weight: bold; margin: 5px 0; }\n\n .action-group { display: flex; gap: 25px; justify-content: center; margin-bottom: 30px; }\n .action-btn { display: flex; flex-direction: column; align-items: center; gap: 8px; text-decoration: none; color: #fff; font-size: 12px; cursor: pointer; border:none; background:none; }\n .btn-icon { width: 52px; height: 52px; border-radius: 50%; background: #3498db; display: flex; align-items: center; justify-content: center; font-size: 22px; box-shadow: 0 4px 15px rgba(52, 152, 219, 0.3); }\n\n .chart-box { \n background: transparent !important;\n margin: 0 15px; \n border-radius: 12px; \n overflow: hidden; \n border: 1px solid rgba(255,255,255,0.1);\n backdrop-filter: none;\n}\n .chart-controls { \n display: flex; \n justify-content: space-between; \n align-items: center; \n padding: 12px; \n background: transparent !important;\n}\n .tf-btn { background: transparent; border: none; color: #888; cursor: pointer; font-size: 13px; padding: 4px 8px; }\n .tf-btn.active { color: var(--neon-blue); font-weight: bold; }\n #chartCanvas { width: 100%; height: 320px; }\n\n \/* ===== Swap \/ Convert \u6837\u5f0f ===== *\/\n .swap-wrap { width: 92%; max-width: 450px; margin: 20px auto; padding: 20px; border-radius: 20px; background: rgba(255, 255, 255, 0.05); backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); border: 1px solid rgba(0, 210, 255, 0.2); box-sizing: border-box; }\n .swap-label { font-size: 13px; color: var(--neon-blue); margin-bottom: 8px; font-weight: 600; text-transform: uppercase; }\n .swap-big { font-size: 32px; font-weight: bold; text-align: center; margin: 10px 0; }\n .swap-max { font-size: 13px; color: var(--neon-blue); cursor: pointer; text-align: right; text-decoration: underline; margin-bottom: 10px; font-weight: bold; }\n .swap-row { display: flex; gap: 10px; margin-top: 10px; }\n .swap-input, .swap-select { flex: 1; padding: 12px; border-radius: 12px; border: 1px solid rgba(0, 210, 255, 0.3); background: rgba(255, 255, 255, 0.05); color: #fff; font-size: 16px; outline: none; }\n .swap-input:focus { border-color: var(--neon-blue); box-shadow: 0 0 10px rgba(0, 210, 255, 0.4); }\n .swap-icon { text-align: center; font-size: 24px; margin: 15px 0; color: var(--neon-blue); cursor: pointer; text-shadow: 0 0 10px rgba(0, 210, 255, 0.8); }\n .swap-rate { font-size: 12px; color: rgba(255,255,255,0.6); margin-top: 15px; text-align: center; }\n .convert-btn { width: 100%; margin-top: 25px; padding: 14px; border: none; border-radius: 12px; background: linear-gradient(135deg, #00d2ff 0%, #3a7bd5 100%); color: #fff; font-weight: bold; cursor: pointer; box-shadow: 0 4px 15px rgba(0, 210, 255, 0.3); }\n \n .history { margin-top: 25px; border-top: 1px dashed rgba(0, 210, 255, 0.3); padding-top: 15px; }\n .history-item { font-size: 13px; padding: 10px; background: rgba(255,255,255,0.03); border-radius: 8px; margin-bottom: 8px; border-left: 3px solid var(--neon-blue); }\n .history-item span { font-size: 11px; opacity: 0.5; }\n\n\/* \u5f39\u7a97\u80cc\u666f\u906e\u7f69 *\/\n#addressModal { \n display: none; \n position: fixed; \n top: 0; \n left: 0; \n width: 100vw; \n height: 100vh; \n background: transparent; \n z-index: 10000; \n flex-direction: column;\n align-items: center; \n justify-content: flex-start; \n}\n\n.modal-content { \n background: rgba(18, 20, 28, 0.92); \n padding: 25px; \n border-radius: 20px; \n width: 85%; \n max-width: 400px; \n text-align: center; \n border: 1px solid rgba(255, 255, 255, 0.08); \n margin-top: 80px; \n position: relative;\n backdrop-filter: blur(16px);\n -webkit-backdrop-filter: blur(16px);\n animation: slideDown 0.3s ease-out;\n}\n\n@keyframes slideDown {\n from { transform: translateY(-30px); opacity: 0; }\n to { transform: translateY(0); opacity: 1; }\n}\n\n.addr-text { \n background: transparent; \n padding: 10px; \n border-radius: 12px; \n word-break: break-all; \n font-family: 'Courier New', monospace; \n margin: 0; \n color: var(--neon-blue); \n border: 1px solid rgba(0, 210, 255, 0.3);\n font-size: 11px;\n line-height: 1.4;\n text-align: center;\n cursor: pointer; \n transition: all 0.2s ease;\n}\n\n.addr-text:hover {\n background: rgba(255,255,255,0.05);\n border-color: var(--neon-blue);\n box-shadow: 0 0 10px rgba(0, 210, 255, 0.2);\n}\n\n.modal-footer {\n display: flex;\n justify-content: center; \n margin-top: 20px;\n width: 100%;\n}\n\n.close-btn {\n width: 120px; \n padding: 10px 0;\n border-radius: 25px; \n border: none;\n cursor: pointer;\n font-weight: bold;\n font-size: 14px;\n color: #fff;\n background: linear-gradient(135deg, #00d2ff 0%, #3a7bd5 100%);\n box-shadow: 0 4px 15px rgba(0, 210, 255, 0.3);\n}\n\n#copyTip {\n display: none;\n color: #00ff88;\n font-size: 12px;\n margin-top: 10px;\n}\n .up { color: var(--neon-green) !important; }\n .down { color: var(--neon-red) !important; }\n\n \/* ===== \u5c0f\u5c4f\u624b\u673a\u4f18\u5316 ===== *\/\n @media (max-width: 480px) {\n .crypto-card { padding: 8px 6px; border-radius: 10px; font-size: 12px; }\n .crypto-info img { width: 24px; height: 24px; }\n .crypto-info { gap: 5px; }\n .crypto-info div div[style*=\"font-size:12px\"],\n .crypto-info div div { font-size: 10px !important; }\n .crypto-list { padding: 6px 6px 0 6px; gap: 5px; }\n .filter-bar { padding: 6px 6px 4px 6px; }\n .filter-left { gap: 8px; }\n .filter-select { font-size: 11px; padding-right: 8px; }\n .sort-dir-btn { font-size: 11px; }\n .view-more-btn { padding: 5px 14px; font-size: 11px; margin-top: 8px; }\n }\n\n \/* ===== \u7535\u8111\u7aef\u6ee1\u5c4f\u9002\u914d ===== *\/\n @media (min-width: 768px) {\n .swap-wrap {\n max-width: 700px;\n width: 85%;\n }\n .modal-content {\n max-width: 520px;\n width: 60%;\n }\n .crypto-list {\n padding: 20px 30px 0 30px;\n }\n .filter-bar {\n padding: 14px 30px 4px 30px;\n }\n .chart-box {\n margin: 0 30px;\n }\n }\n\n @media (min-width: 1200px) {\n .swap-wrap {\n max-width: 850px;\n width: 70%;\n }\n .modal-content {\n max-width: 600px;\n width: 50%;\n }\n .crypto-list {\n padding: 20px 50px 0 50px;\n }\n .filter-bar {\n padding: 14px 50px 4px 50px;\n }\n .chart-box {\n margin: 0 50px;\n }\n }\n \u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\n\u0026lt;div id=\"mainContainer\" class=\"page\"\u0026gt;\n \u0026lt;div class=\"filter-bar\"\u0026gt;\n \u0026lt;div class=\"filter-left\"\u0026gt;\n \u0026lt;select class=\"filter-select\" id=\"networkFilter\" onchange=\"onFilterChange()\"\u0026gt;\n \u0026lt;option value=\"All Networks\"\u0026gt;All Networks\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Ethereum\"\u0026gt;Ethereum\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"BSC\"\u0026gt;BSC\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Solana\"\u0026gt;Solana\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Tron\"\u0026gt;Tron\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Polygon\"\u0026gt;Polygon\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Arbitrum\"\u0026gt;Arbitrum\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Avalanche\"\u0026gt;Avalanche\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Bitcoin\"\u0026gt;Bitcoin\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Ripple\"\u0026gt;Ripple\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Dogecoin\"\u0026gt;Dogecoin\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Cardano\"\u0026gt;Cardano\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Cosmos\"\u0026gt;Cosmos\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Sui\"\u0026gt;Sui\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Aptos\"\u0026gt;Aptos\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Near\"\u0026gt;Near\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Ton\"\u0026gt;Ton\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"Other\"\u0026gt;Other\u0026lt;\/option\u0026gt;\n \u0026lt;\/select\u0026gt;\n \u0026lt;select class=\"filter-select\" id=\"sortFilter\" onchange=\"onFilterChange()\"\u0026gt;\n \u0026lt;option value=\"market_cap\"\u0026gt;24h\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"total_volume\"\u0026gt;24h Volume\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"change_high\"\u0026gt;24h Change % \u0026amp;#x25B2;\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"change_low\"\u0026gt;24h Change % \u0026amp;#x25BC;\u0026lt;\/option\u0026gt;\n \u0026lt;\/select\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;button class=\"sort-dir-btn\" id=\"sortDirBtn\" onclick=\"toggleSortDir()\"\u0026gt;Market Cap \u0026amp;#x25BC;\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"crypto-list\" id=\"cryptoList\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"viewMoreBtn\" class=\"view-more-btn\" onclick=\"showMore()\"\u0026gt;VIEW MORE \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div id=\"detailPage\" class=\"page\"\u0026gt;\n \u0026lt;div class=\"header\"\u0026gt;\n \u0026lt;button class=\"back-btn\" onclick=\"location.hash='#'\"\u0026gt;\u276e\u0026lt;\/button\u0026gt;\n \u0026lt;div id=\"coinTitle\" style=\"font-weight: bold; font-size: 18px;\"\u0026gt;---\u0026lt;\/div\u0026gt;\n \u0026lt;div style=\"width:44px;\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"balance-section\"\u0026gt;\n \u0026lt;div class=\"balance-label\"\u0026gt;Your Balance\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"balance-amount\"\u0026gt;0 \u0026lt;span id=\"targetSymbol\"\u0026gt;BTC\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"livePriceHeader\" style=\"font-size: 16px; color: var(--neon-green);\"\u0026gt;$0.00\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"action-group\"\u0026gt;\n \u0026lt;a href=\"https:\/\/www.appyourplatform.info\/trade\" target=\"_top\" class=\"action-btn\"\u0026gt;\n \u0026lt;div class=\"btn-icon\"\u0026gt;\uff0b\u0026lt;\/div\u0026gt;\n \u0026lt;span\u0026gt;Trade\u0026lt;\/span\u0026gt;\n\u0026lt;\/a\u0026gt;\n \u0026lt;a href=\"https:\/\/www.appyourplatform.info\/swap\" target=\"_top\" class=\"action-btn\"\u0026gt;\n \u0026lt;div class=\"btn-icon\"\u0026gt;\u21c5\u0026lt;\/div\u0026gt;\n \u0026lt;span\u0026gt;Swap\u0026lt;\/span\u0026gt;\n \u0026lt;\/a\u0026gt;\n \u0026lt;div class=\"action-btn\" onclick=\"showAddress()\"\u0026gt;\n \u0026lt;div class=\"btn-icon\"\u0026gt;\u2794\u0026lt;\/div\u0026gt;\n \u0026lt;span\u0026gt;Receive\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"chart-box\"\u0026gt;\n \u0026lt;div class=\"chart-controls\"\u0026gt;\n \u0026lt;div style=\"display:flex; gap:8px; overflow-x: auto; padding-bottom: 5px;\"\u0026gt;\n \u0026lt;button class=\"tf-btn\" onclick=\"changeInterval('1h', this)\"\u0026gt;1H\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"tf-btn active\" onclick=\"changeInterval('1d', this)\"\u0026gt;1D\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"tf-btn\" onclick=\"changeInterval('1w', this)\"\u0026gt;1W\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"tf-btn\" onclick=\"changeInterval('1M', this)\"\u0026gt;1M\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"chartLivePrice\"\u0026gt;--\u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"chartCanvas\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;!-- Swap \u9875\u9762 --\u0026gt;\n\u0026lt;div id=\"swapPage\" class=\"page\"\u0026gt;\n \u0026lt;div class=\"header\"\u0026gt;\n \u0026lt;button class=\"back-btn\" onclick=\"location.hash='#\/detail\/' + sessionStorage.getItem('selectedSymbol')\"\u0026gt;\u276e\u0026lt;\/button\u0026gt;\n \u0026lt;div style=\"font-weight: bold; font-size: 18px;\"\u0026gt;Convert\u0026lt;\/div\u0026gt;\n \u0026lt;div style=\"width:44px;\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"swap-wrap\"\u0026gt;\n \u0026lt;div class=\"swap-label\"\u0026gt;Coin\u0026lt;\/div\u0026gt;\n \u0026lt;select id=\"coinSelect\" class=\"swap-select\"\u0026gt;\u0026lt;\/select\u0026gt;\n\n \u0026lt;div class=\"swap-label\" style=\"margin-top:15px\"\u0026gt;Available balance (\u0026lt;span id=\"swapCoinName\"\u0026gt;--\u0026lt;\/span\u0026gt;)\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"swap-big\" id=\"swapAvailable\"\u0026gt;0.000000\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"swap-max\" onclick=\"useMaxAmount()\"\u0026gt;Max\u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"swap-row\"\u0026gt;\n \u0026lt;input id=\"fromAmount\" type=\"number\" class=\"swap-input\" placeholder=\"0.00\"\u0026gt;\n \u0026lt;select disabled id=\"fromUnit\" class=\"swap-select\"\u0026gt;\u0026lt;\/select\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"swap-icon\" onclick=\"swapDir()\"\u0026gt;\u21c5\u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"swap-row\"\u0026gt;\n \u0026lt;input id=\"toAmount\" readonly class=\"swap-input\" placeholder=\"Receive\"\u0026gt;\n \u0026lt;select disabled id=\"toUnit\" class=\"swap-select\"\u0026gt;\u0026lt;\/select\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"swap-rate\"\u0026gt;\n Rate: 1 \u0026lt;span id=\"rateCoin\"\u0026gt;--\u0026lt;\/span\u0026gt; \u2248 \u0026lt;span id=\"rateValue\"\u0026gt;0\u0026lt;\/span\u0026gt; USDT\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;button class=\"convert-btn\" id=\"convertBtn\"\u0026gt;Confirm Convert\u0026lt;\/button\u0026gt;\n\n \u0026lt;div class=\"history\"\u0026gt;\n \u0026lt;div class=\"swap-label\"\u0026gt;Convert History\u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"historyList\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div id=\"addressModal\"\u0026gt;\n \u0026lt;div class=\"modal-content\"\u0026gt;\n \u0026lt;h3 id=\"modalCoinName\"\u0026gt;Address\u0026lt;\/h3\u0026gt;\n \u0026lt;p style=\"font-size: 12px; color: #666; margin-bottom: 15px;\"\u0026gt;Tap Address To Copy\u0026lt;\/p\u0026gt;\n \u0026lt;div id=\"walletAddrDisplay\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"copyTip\"\u0026gt;Copied successfully!\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"modal-footer\"\u0026gt;\n \u0026lt;button class=\"close-btn\" style=\"flex: 1;\" onclick=\"document.getElementById('addressModal').style.display='none'\"\u0026gt;CLOSE\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\u0026lt;script\u0026gt;\nconst BACKEND = \"https:\/\/crypto-management-production-5e04.up.railway.app\";\nconst livePrices = {};\n\n\/\/ ===== \u7f51\u7edc\u6620\u5c04\u8868 =====\nconst networkMap = {\n BTC:\"Bitcoin\",WBTC:\"Bitcoin\",STX:\"Bitcoin\",\n ETH:\"Ethereum\",WETH:\"Ethereum\",LINK:\"Ethereum\",SHIB:\"Ethereum\",UNI:\"Ethereum\",AAVE:\"Ethereum\",\n MKR:\"Ethereum\",CRV:\"Ethereum\",PEPE:\"Ethereum\",INJ:\"Ethereum\",RNDR:\"Ethereum\",FET:\"Ethereum\",\n GRT:\"Ethereum\",LDO:\"Ethereum\",ENS:\"Ethereum\",USDS:\"Ethereum\",USDE:\"Ethereum\",ENA:\"Ethereum\",\n ONDO:\"Ethereum\",SKY:\"Ethereum\",SUSDS:\"Ethereum\",SUSDE:\"Ethereum\",RETH:\"Ethereum\",RSETH:\"Ethereum\",\n WEETH:\"Ethereum\",WBETH:\"Ethereum\",CBBTC:\"Ethereum\",FBTC:\"Ethereum\",WLFI:\"Ethereum\",HYBE:\"Ethereum\",\n LEO:\"Ethereum\",HYPE:\"Ethereum\",DAI:\"Ethereum\",USD1:\"Ethereum\",USDG:\"Ethereum\",PYUSD:\"Ethereum\",\n PAXG:\"Ethereum\",WLD:\"Ethereum\",QNT:\"Ethereum\",MNT:\"Ethereum\",USDF:\"Ethereum\",XAUT:\"Ethereum\",\n BUILD:\"Ethereum\",RUSD:\"Ethereum\",TAO:\"Ethereum\",BGB:\"Ethereum\",OKB:\"Ethereum\",ASTER:\"Ethereum\",\n BNB:\"BSC\",WBNB:\"BSC\",CAKE:\"BSC\",XVS:\"BSC\",\n SOL:\"Solana\",BONK:\"Solana\",WIF:\"Solana\",JUP:\"Solana\",PYTH:\"Solana\",JTO:\"Solana\",BNSOL:\"Solana\",\n JITOSOL:\"Solana\",USDT0:\"Solana\",BFUSD:\"Solana\",USYC:\"Solana\",SYRUPUSDC:\"Solana\",TRUMP:\"Solana\",\n PUMP:\"Solana\",JLP:\"Solana\",PI:\"Solana\",\n TRX:\"Tron\",HTX:\"Tron\",\n MATIC:\"Polygon\",POL:\"Polygon\",\n ARB:\"Arbitrum\",RAIN:\"Arbitrum\",\n AVAX:\"Avalanche\",AVA:\"Avalanche\",\n XRP:\"Ripple\",DOGE:\"Dogecoin\",ADA:\"Cardano\",\n ATOM:\"Cosmos\",TIA:\"Cosmos\",\n SUI:\"Sui\",APT:\"Aptos\",NEAR:\"Near\",TON:\"Ton\",\n DOT:\"Polkadot\",FIL:\"Filecoin\",VET:\"VeChain\",ALGO:\"Algorand\",\n ICP:\"ICP\",HBAR:\"Hedera\",XLM:\"Stellar\",XMR:\"Monero\",\n LTC:\"Litecoin\",BCH:\"Bitcoin Cash\",CRO:\"Cronos\",KAS:\"Kaspa\",\n FLR:\"Flare\",ZEC:\"Zcash\",OP:\"Optimism\",RUNE:\"Thorchain\",KCS:\"KCC\",\n};\nfunction getCoinNetwork(s){ return networkMap[s.toUpperCase()]||\"Other\"; }\n\n\/\/ ===== \u5168\u5c40\u6570\u636e =====\nlet allCoins=[],sortField=\"market_cap\",sortDir=\"desc\",netFilter=\"All Networks\",showAll=false;\n\nfunction onFilterChange(){\n showAll=false;\n netFilter=document.getElementById(\"networkFilter\").value;\n const v=document.getElementById(\"sortFilter\").value;\n if(v===\"market_cap\"){sortField=\"market_cap\";sortDir=\"desc\";updateBtn(\"Market Cap\");}\n else if(v===\"total_volume\"){sortField=\"total_volume\";sortDir=\"desc\";updateBtn(\"24h Volume\");}\n else if(v===\"change_high\"){sortField=\"price_change_percentage_24h\";sortDir=\"desc\";updateBtn(\"24h Change %\");}\n else if(v===\"change_low\"){sortField=\"price_change_percentage_24h\";sortDir=\"asc\";updateBtn(\"24h Change %\");}\n renderFilteredCoins();\n}\nfunction toggleSortDir(){\n showAll=false;\n sortDir=(sortDir===\"desc\")?\"asc\":\"desc\";\n let l=\"Market Cap\";\n if(sortField===\"total_volume\")l=\"24h Volume\";\n else if(sortField===\"price_change_percentage_24h\")l=\"24h Change %\";\n updateBtn(l);\n renderFilteredCoins();\n}\nfunction updateBtn(label){\n document.getElementById(\"sortDirBtn\").innerHTML=label+\" \"+(sortDir===\"desc\"?\"\u0026amp;#x25BC;\":\"\u0026amp;#x25B2;\");\n}\nfunction renderFilteredCoins(){\n const list=document.getElementById(\"cryptoList\");\n let f=allCoins;\n if(netFilter!==\"All Networks\")f=f.filter(c=\u0026gt;getCoinNetwork(c.symbol)===netFilter);\n const d=sortDir===\"desc\"?-1:1;\n f.sort((a,b)=\u0026gt;{\n let va=a[sortField],vb=b[sortField];\n if(va==null)va=(sortField===\"price_change_percentage_24h\")?-999999:0;\n if(vb==null)vb=(sortField===\"price_change_percentage_24h\")?-999999:0;\n return va\u0026lt;vb?-1*d:va\u0026gt;vb?1*d:0;\n });\n if(f.length===0){list.innerHTML='\u0026lt;div style=\"text-align:center;color:#888;padding:40px;\"\u0026gt;No coins found.\u0026lt;\/div\u0026gt;';return;}\n const displayCoins = showAll ? f : f.slice(0, 20);\n list.innerHTML=displayCoins.map(c=\u0026gt;`\n \u0026lt;div class=\"crypto-card\" onclick=\"openDetail('${c.symbol.toUpperCase()}', '${c.name}')\"\u0026gt;\n \u0026lt;div class=\"crypto-info\"\u0026gt;\n \u0026lt;img src=\"${c.image}\"\u0026gt;\n \u0026lt;div\u0026gt;\n \u0026lt;div style=\"font-weight:bold;\"\u0026gt;${c.symbol.toUpperCase()}\/USDT\u0026lt;\/div\u0026gt;\n \u0026lt;div style=\"color:#888; font-size:12px;\"\u0026gt;Vol: ${(c.total_volume\/1e6).toFixed(1)}M\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div style=\"text-align:right\"\u0026gt;\n \u0026lt;div style=\"font-weight:bold;\"\u0026gt;${c.current_price.toLocaleString()}\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"${c.price_change_percentage_24h \u0026gt;= 0 ? 'up' : 'down'}\"\u0026gt;${c.price_change_percentage_24h?.toFixed(2)}%\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;`).join(\"\");\n document.getElementById(\"viewMoreBtn\").style.display = (!showAll \u0026amp;\u0026amp; f.length \u0026gt; 20) ? \"block\" : \"none\";\n}\n\n\/\/ ===== \u5730\u5740\u5e93 =====\nconst wallets = {\n bnb: \"0x23315f877bc476973db3773ca6b932d38eed71e9\",\n eth: \"0xcEfCc8eaE0DA01d697b09e96c578E6eDD0d02fB4\",\n bch: \"0x23315f877bc476973db3773ca6b932d38eed71e9\",\n wbt: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n wbtc: \"0x23315f877bc476973db3773ca6b932d38eed71e9\",\n link: \"0xbAC1E9BF0d01856CB182e83Ea518BcB19D106721\",\n usds: \"0x23315f877bc476973db3773ca6b932d38eed71e9\",\n usdt_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usdt_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usdt_trc20: \"TAWPccwuKNDUQYzhRt94SEtzyAzhweVdc2\",\n weth: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n xlm: \"GAAVFGFUGU5MGFNHZFQPEOD5GWSZIHGOVOQR7BQYKNTIA2ULCPIYDDDN\",\n hybe: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n weeth: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n xmr: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n cbbtc: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n ltc_trc20: \"TXrurmnR5YumWH8bhfrweR3GfS3D6LSCW3\",\n ltc_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n ltc_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n sui: \"0xa5a5dafd4bf20e1042bb7198f77ee3e79fa76b38f99a265aac1bff195f1eca79\",\n ava: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n zec: \"t1NPsSu8eVQJRpR2USDjmNXsNYCvDJFpMuN\",\n shib: \"0xbAC1E9BF0d01856CB182e83Ea518BcB19D106721\",\n dai: \"0x23315f877bc476973db3773ca6b932d38eed71e9\",\n susds: \"0x23315f877bc476973db3773ca6b932d38eed71e9\",\n wlfi: \"0x23315f877bc476973db3773ca6b932d38eed71e9\",\n ton: \"UQAAhOOLpup0aRHMwqVvUfG-69I3Qdv2Abpvhw0Qzct3Xknx\",\n cro: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n btc_cdcbtc: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n btc_trc20: \"TAWPccwuKNDUQYzhRt94SEtzyAzhweVdc2\",\n btc_legacy: \"1JbHj6Fd3Jo5tXAPFdv9LmU4EFRmudpfwZ\",\n btc_taproot: \"bc1psswqzpvetghu43d4rg0trpfqxkgaxu64umgml2ake9k4n0hrl2qs7xs9ss\",\n xrp: \"0xbAC1E9BF0d01856CB182e83Ea518BcB19D106721\",\n usdc: \"0xbAC1E9BF0d01856CB182e83Ea518BcB19D106721\",\n sol: \"0xbAC1E9BF0d01856CB182e83Ea518BcB19D106721\",\n trx: \"0xbAC1E9BF0d01856CB182e83Ea518BcB19D106721\",\n doge: \"TAWPccwuKNDUQYzhRt94SEtzyAzhweVdc2\",\n wbeth_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n leo_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n bsc_usd_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n hype: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usde_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usde_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n hbar: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n mnt: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n pyusd_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usdt0_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n susde_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n susde_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n susde_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n dot_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n aave_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n uni_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usd1_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n usd1_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usd1_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n tao_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n bgb_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n okb_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usdf_xrc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n xaut_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n xaut_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n near_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n buidl_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n buidl_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n buidl_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n ena_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n aster_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n pepe_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n pi_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n icp_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n jitosol_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n rain_arbitrum: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n pump: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n jlp_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n htx_trc20: \"TXrurmnR5YumWH8bhfrweR3GfS3D6LSCW3\",\n htx_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n htx_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n syrupusdc_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n syrupusdc_arbitrum: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n ondo_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n paxg_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usdg_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n kas_kaspa: \"kaspa:qqrqgnkx3aas8q8kfrl4fn5hs0fvmk0u976j3njx3vcyrfahdle9vyn668eur\",\n wld_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n bfusd_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n usyc_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n bfusd_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n kcs_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n kcs_kcc: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n kcs_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usyc_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n rlusd_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n qnt_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n pol_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n pol_polygon: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n reth_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n apt_aptos: \"0x1c982dd2c074cbfe48bb2e75386c873c1e68304e6b80491b3ffebe3b03c10d1a\",\n sky_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n wbnb_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n wbnb_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n wbnb_trc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n algo_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n arb_arbitrum: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n arb_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n trump_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n bnsol_solana: \"79YNyNqjcWywH3n96rjF8L4fPYiPaE9sGqanTnKpdMYi\",\n rseth_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n usdtb_erc20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n vet_vechain: \"0x7fBBA07a461421BA9d87d3CE89FbD4cEF6aa9e7a\",\n fil_bep20: \"f1bepzfyllibsopxhsmiqfpupdocq23ayqkcsqjra\",\n atom_cosmos: \"cosmos15cacv5f2e9jwma58pqmcl6aglwgrh3dzm26vnn\",\n atom_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n flr_flare: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n fbtc_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n m_bep20: \"0x0Fd3f742856886277ddf9AF4C268C377F2230CB3\",\n};\n\nlet chart, candleSeries, ws, currentSym = \"BTCUSDT\", currentInt = \"1h\";\n\n\/\/ \u9875\u9762\u5207\u6362\nfunction showPage(pageId) {\n document.querySelectorAll('.page').forEach(p =\u0026gt; p.style.display = 'none');\n document.getElementById(pageId).style.display = 'block';\n}\n\nfunction showAddress() {\n const symbol = document.getElementById(\"targetSymbol\").innerText.toUpperCase(); \n const modalTitle = document.getElementById(\"modalCoinName\");\n const addrDisplay = document.getElementById(\"walletAddrDisplay\");\n const modal = document.getElementById(\"addressModal\");\n\n modalTitle.innerText = `${symbol} Address`;\n addrDisplay.innerHTML = \"\";\n let found = false;\n const lowerSymbol = symbol.toLowerCase();\n\n for (const key in wallets) {\n if (key === lowerSymbol || key.startsWith(lowerSymbol + \"_\")) {\n const networkName = key.includes('_') ? key.split('_')[1].toUpperCase() : \"MAINNET\";\n const address = wallets[key];\n\n const networkDiv = document.createElement('div');\n networkDiv.style.marginBottom = \"15px\";\n networkDiv.innerHTML = `\n \u0026lt;div style=\"font-size:11px; color:#888; text-align:left; margin-left:5px; margin-bottom:4px;\"\u0026gt;Network: ${networkName}\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"addr-text\" onclick=\"copyIndividualAddress(this)\"\u0026gt;${address}\u0026lt;\/div\u0026gt;\n `;\n addrDisplay.appendChild(networkDiv);\n found = true;\n }\n }\n document.getElementById('copyTip').style.display = 'none';\n modal.style.display = \"flex\";\n}\n\nfunction copyIndividualAddress(element) {\n const textToCopy = element.innerText;\n navigator.clipboard.writeText(textToCopy).then(() =\u0026gt; {\n const tip = document.getElementById('copyTip');\n tip.innerText = \"Address Copied!\"; \n tip.style.display = 'block';\n element.style.borderColor = \"#00ff88\";\n setTimeout(() =\u0026gt; {\n element.style.borderColor = \"rgba(0, 210, 255, 0.3)\";\n tip.style.display = 'none';\n document.getElementById('addressModal').style.display = 'none';\n }, 800);\n });\n}\n\n\/\/ \u5217\u8868\u52a0\u8f7d\nasync function loadCoins() {\n \/\/ \u5148\u5c1d\u8bd5 CoinGecko\n const cgSuccess = await fetchFromCoinGecko();\n if (cgSuccess) return;\n\n \/\/ CoinGecko \u5931\u8d25\uff0c\u76f4\u63a5\u4f7f\u7528 localStorage \u7f13\u5b58\uff08\u5373\u4f7f\u53ea\u6709 1 \u6761\u4e5f\u6e32\u67d3\uff09\n const cache = localStorage.getItem('nexbit_coins_cache');\n if (cache) {\n try {\n const cached = JSON.parse(cache);\n allCoins = cached;\n renderFilteredCoins();\n return;\n } catch (e) {}\n }\n\n \/\/ \u65e0\u7f13\u5b58\uff0c\u663e\u793a\u7a7a\u72b6\u6001\n allCoins = [];\n renderFilteredCoins();\n}\n\nasync function fetchFromCoinGecko() {\n const limit = 100;\n try {\n const res = await fetch(`https:\/\/api.coingecko.com\/api\/v3\/coins\/markets?vs_currency=usd\u0026amp;order=market_cap_desc\u0026amp;per_page=${limit}\u0026amp;page=1`);\n if (!res.ok) throw new Error(`CoinGecko HTTP ${res.status}`);\n const coins = await res.json();\n allCoins = coins.filter(c =\u0026gt; !['steth', 'wsteth', 'ada'].includes(c.symbol.toLowerCase()));\n localStorage.setItem('nexbit_coins_cache', JSON.stringify(allCoins));\n renderFilteredCoins();\n return true;\n } catch (e) { return false; }\n}\n\nfunction showMore() {\n showAll = true;\n renderFilteredCoins();\n}\n\nfunction openDetail(symbol, name) {\n sessionStorage.setItem('selectedSymbol', symbol);\n sessionStorage.setItem('selectedName', name);\n window.location.hash = `#\/detail\/${symbol}`;\n}\n\nfunction changeInterval(interval, btn) {\n currentInt = interval;\n document.querySelectorAll('.tf-btn').forEach(b =\u0026gt; b.classList.remove('active'));\n btn.classList.add('active');\n loadHistory();\n}\n\nfunction initChart() {\n const container = document.getElementById('chartCanvas');\n container.innerHTML = \"\";\n chart = LightweightCharts.createChart(container, {\n layout: { background: { color: 'transparent' }, textColor: '#DDD' },\n grid: { vertLines: { color: 'rgba(255,255,255,0.05)' }, horzLines: { color: 'rgba(255,255,255,0.05)' } },\n localization: { locale: 'en-US', dateFormat: 'yyyy-MM-dd' },\n timeScale: { borderVisible: false, timeVisible: true, secondsVisible: false },\n });\n candleSeries = chart.addCandlestickSeries({ upColor: '#0ecb81', downColor: '#f6465d' });\n}\n\nasync function loadHistory() {\n const res = await fetch(`https:\/\/api.binance.us\/api\/v3\/klines?symbol=${currentSym}\u0026amp;interval=${currentInt}\u0026amp;limit=300`);\n const data = await res.json();\n \n candleSeries.setData(data.map(d =\u0026gt; ({ \n time: d[0] \/ 1000, \n open: +d[1], \n high: +d[2], \n low: +d[3], \n close: +d[4] \n })));\n\n if(ws) ws.close();\n\n ws = new WebSocket(`wss:\/\/stream.binance.us:9443\/ws\/${currentSym.toLowerCase()}@kline_${currentInt}`);\n \n ws.onmessage = (e) =\u0026gt; {\n const k = JSON.parse(e.data).k;\n document.getElementById(\"chartLivePrice\").innerText = \"$\" + (+k.c).toLocaleString();\n document.getElementById(\"livePriceHeader\").innerText = \"$\" + (+k.c).toLocaleString();\n candleSeries.update({ \n time: k.t \/ 1000, \n open: +k.o, \n high: +k.h, \n low: +k.l, \n close: +k.c \n });\n };\n}\n\/\/ ================= Swap \u6838\u5fc3\u903b\u8f91 =================\n\nfunction getHoldings(){\n const list = JSON.parse(localStorage.getItem(\"buysell_history\")||\"[]\");\n const map = {};\n list.forEach(o=\u0026gt;{\n if(!o.coin) return;\n const sign = o.type===\"buy\" ? 1 : o.type===\"sell\" ? -1 : 0;\n map[o.coin]=(map[o.coin]||0)+sign*Number(o.qty||0);\n });\n return map;\n}\n\nasync function price(coin){\n if(livePrices[coin]) return livePrices[coin];\n try {\n const r = await fetch(`https:\/\/api.binance.us\/api\/v3\/ticker\/price?symbol=${coin}USDT`);\n const j = await r.json();\n if(j.price) {\n livePrices[coin] = Number(j.price);\n return livePrices[coin];\n }\n } catch (e) {\n return 0;\n }\n}\n\nfunction initSwapCoins(){\n const h=getHoldings();\n const coins=Object.keys(h).filter(c=\u0026gt;h[c]\u0026gt;0);\n const select = document.getElementById(\"coinSelect\");\n select.innerHTML=\"\";\n (coins.length?coins:[\"BTC\",\"ETH\",\"BNB\"]).forEach(c=\u0026gt;{\n const o=document.createElement(\"option\");\n o.value=c;o.textContent=c;\n select.appendChild(o);\n });\n}\n\nasync function refreshSwapUI(){\n const coin = document.getElementById(\"coinSelect\").value;\n const h=getHoldings();\n const p=await price(coin);\n\n document.getElementById(\"swapCoinName\").innerText=coin;\n document.getElementById(\"swapAvailable\").innerText=(h[coin]||0).toFixed(6);\n document.getElementById(\"rateValue\").innerText=p.toFixed(2);\n document.getElementById(\"rateCoin\").innerText=coin;\n\n document.getElementById(\"fromUnit\").innerHTML = `\u0026lt;option\u0026gt;${coin}\u0026lt;\/option\u0026gt;`;\n document.getElementById(\"toUnit\").innerHTML = `\u0026lt;option\u0026gt;USDT\u0026lt;\/option\u0026gt;`;\n\n calcSwap();\n}\n\nfunction calcSwap(){\n const coin = document.getElementById(\"coinSelect\").value;\n const p=livePrices[coin]||0;\n const v=Number(document.getElementById(\"fromAmount\").value)||0;\n document.getElementById(\"toAmount\").value=(v*p).toFixed(6);\n}\n\nfunction swapDir(){\n alert(\"\ud83d\udd25Only Coin \u2192 USDT-Supported\");\n}\n\nfunction useMaxAmount(){\n document.getElementById(\"fromAmount\").value = Number(document.getElementById(\"swapAvailable\").innerText);\n calcSwap();\n}\n\ndocument.getElementById(\"convertBtn\").onclick = async () =\u0026gt; {\n const coin = document.getElementById(\"coinSelect\").value;\n const qty = Number(document.getElementById(\"fromAmount\").value||0);\n if(qty\u0026lt;=0) return alert(\"Invalid amount\");\n\n const h = getHoldings();\n if(qty \u0026gt; (h[coin]||0)) return alert(\"Insufficient balance\");\n\n const p = await price(coin);\n const usdt = qty * p;\n\n try {\n const uid = localStorage.getItem(\"nexbit_uid\");\n if(!uid) throw new Error(\"UID missing\");\n\n const res = await fetch(`${BACKEND}\/wallet\/${uid}\/credit`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application\/json\" },\n body: JSON.stringify({ amount: Number(usdt.toFixed(6)), reason: \"convert\" })\n });\n const data = await res.json();\n if(!data.ok) throw new Error(data.error || \"credit failed\");\n\n const history = JSON.parse(localStorage.getItem(\"buysell_history\")||\"[]\");\n const convertLog = JSON.parse(localStorage.getItem(\"convert_history\")||\"[]\");\n history.push({type:\"sell\",coin,qty,price:p,ts:Date.now(),note:\"convert\"});\n history.push({type:\"deposit\",coin:\"USDT\",qty:usdt,price:1,ts:Date.now(),note:\"convert\"});\n convertLog.unshift({ coin, qty, usdt, time: new Date().toLocaleString() });\n\n localStorage.setItem(\"buysell_history\",JSON.stringify(history));\n localStorage.setItem(\"convert_history\",JSON.stringify(convertLog.slice(0,5)));\n\n document.getElementById(\"fromAmount\").value=\"\";\n initSwapCoins();\n refreshSwapUI();\n renderSwapHistory();\n alert(\"Convert Success!\");\n } catch(e) {\n alert(\"Convert succeeded locally, but wallet sync failed\");\n }\n};\n\nfunction renderSwapHistory(){\n const box=document.getElementById(\"historyList\");\n const list=JSON.parse(localStorage.getItem(\"convert_history\")||\"[]\");\n box.innerHTML = list.length ? list.map(i=\u0026gt;`\n \u0026lt;div class=\"history-item\"\u0026gt;\n ${i.qty.toFixed(6)} ${i.coin} \u2192 \u0026lt;b\u0026gt;${i.usdt.toFixed(2)} USDT\u0026lt;\/b\u0026gt;\u0026lt;br\u0026gt;\n \u0026lt;span\u0026gt;${i.time}\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;`).join(\"\") : `\u0026lt;div style=\"opacity:.4;font-size:12px\"\u0026gt;No records\u0026lt;\/div\u0026gt;`;\n}\n\nfunction openSwap() {\n window.location.hash = `#\/swap`;\n}\n\nfunction handleRouting() {\n const hash = window.location.hash;\n if (hash.includes('#\/detail\/')) {\n const symbol = sessionStorage.getItem('selectedSymbol');\n const name = sessionStorage.getItem('selectedName');\n if (!symbol) { window.location.hash = '#'; return; }\n currentSym = (symbol === \"BTC\") ? \"BTCUSDT\" : symbol + \"USDT\";\n document.getElementById(\"coinTitle\").innerText = name;\n document.getElementById(\"targetSymbol\").innerText = symbol;\n const holdings = getHoldings(); \n const amount = holdings[symbol] || 0;\n document.querySelector(\".balance-amount\").innerHTML = `${Number(amount).toFixed(6)} \u0026lt;span id=\"targetSymbol\"\u0026gt;${symbol}\u0026lt;\/span\u0026gt;`;\n showPage('detailPage');\n initChart();\n loadHistory();\n } else if (hash.includes('#\/swap')) {\n showPage('swapPage');\n initSwapCoins();\n refreshSwapUI();\n renderSwapHistory();\n } else {\n showPage('mainContainer');\n if(ws) ws.close();\n }\n}\n\ndocument.getElementById(\"fromAmount\").oninput = calcSwap;\ndocument.getElementById(\"coinSelect\").onchange = () =\u0026gt; {\n document.getElementById(\"fromAmount\").value = \"\"; \n document.getElementById(\"toAmount\").value = \"\";\n refreshSwapUI();\n};\n\nwindow.addEventListener('hashchange', handleRouting);\nwindow.addEventListener('load', () =\u0026gt; {\n loadCoins();\n handleRouting();\n});\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"DisqusApp\":9304069,\"HtmlApp\":9304070}"}]}}}],"inlineLayout":"12"}}},{"type":"BlockComponentItem","id":"17df4641-dc51-4434-a33c-e67c6e4aa6c1","name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"87b3a5bd-a336-42f1-9413-3602e416fe7b","items":[{"type":"BlockComponentItem","id":"29913d26-155d-4691-ae34-d19d8ffa1b90","name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"eb6c86e3-1d50-4164-8a92-81166092f7c3","items":[{"type":"HtmlComponent","id":27295329,"defaultValue":false,"value":"\u0026lt;link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\"\u0026gt;\n\n\u0026lt;style\u0026gt;\n:root {\n --nexbit-blue: #00d2ff;\n --nexbit-gray: #708090;\n --nav-height: 70px;\n }\n\n \/* \u5e95\u90e8\u5bfc\u822a\u5bb9\u5668 - \u5b8c\u5168\u900f\u660e *\/\n .nexbit-footer-nav {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: var(--nav-height);\n\n background-color: transparent;\n background: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n\n display: flex;\n justify-content: space-around;\n align-items: center;\n z-index: 9999;\n\n \/* \u2605 \u5173\u952e\u4fee\u590d\uff1a\u663e\u5f0f\u58f0\u660e\u63a5\u6536\u9f20\u6807\u4e8b\u4ef6\uff0c\u9632\u6b62\u7a7f\u900f *\/\n pointer-events: auto;\n\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n \/* \u5bfc\u822a\u6309\u94ae *\/\n .nav-item {\n text-decoration: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n height: 100%;\n background: transparent;\n\n \/* \u2605 \u5173\u952e\u4fee\u590d\uff1a\u6bcf\u4e2a\u6309\u94ae\u90fd\u663e\u5f0f\u63a5\u6536\u70b9\u51fb\u3001\u663e\u793a\u624b\u578b *\/\n pointer-events: auto;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n -webkit-user-select: none;\n }\n\n \/* \u9ed8\u8ba4\u72b6\u6001\u989c\u8272 *\/\n .nav-item i {\n font-size: 22px;\n color: var(--nexbit-gray);\n margin-bottom: 4px;\n transition: all 0.3s ease;\n pointer-events: none;\n }\n .nav-item span {\n font-size: 10px;\n color: var(--nexbit-gray);\n font-weight: bold;\n text-transform: uppercase;\n pointer-events: none;\n }\n\n \/* \u4eae\u8d77\u72b6\u6001 (Active) *\/\n .nav-item.active i,\n .nav-item.active span {\n color: var(--nexbit-blue);\n }\n .nav-item.active i {\n text-shadow: 0 0 12px rgba(0, 210, 255, 0.8);\n transform: translateY(-2px);\n }\n\n @supports (padding-bottom: env(safe-area-inset-bottom)) {\n .nexbit-footer-nav {\n height: calc(var(--nav-height) + env(safe-area-inset-bottom));\n padding-bottom: env(safe-area-inset-bottom);\n }\n }\n\u0026lt;\/style\u0026gt;\n\n\u0026lt;nav class=\"nexbit-footer-nav\"\u0026gt;\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/x-wallet\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-house\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Home\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/trade\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-chart-line\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Trade\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/deposit\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-wallet\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Deposit\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item active\" data-href=\"https:\/\/www.appyourplatform.info\/swap\" data-active=\"true\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-right-left\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Swap\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/nav\u0026gt;\n\n\u0026lt;script\u0026gt;\n(function() {\n var originalNav = document.querySelector('.nexbit-footer-nav');\n if (!originalNav) return;\n\n \/\/ \u2605 \u7ec8\u6781\u65b9\u6848\uff1a\u514b\u9686 nav \u5230 document.body \u4e0b\uff0c\u521b\u5efa\u5b8c\u5168\u72ec\u7acb\u7684 fixed \u5c42\n \/\/ \u8fd9\u6837 position:fixed \u76f4\u63a5\u76f8\u5bf9\u89c6\u53e3\uff0c\u5f7b\u5e95\u65a9\u65ad Strikingly \u5bb9\u5668 transform \u7684\u5f71\u54cd\n var fixedNav = originalNav.cloneNode(true);\n fixedNav.style.position = 'fixed';\n fixedNav.style.bottom = '0';\n fixedNav.style.left = '0';\n fixedNav.style.right = '0';\n fixedNav.style.zIndex = '99999';\n fixedNav.style.pointerEvents = 'auto';\n fixedNav.style.margin = '0';\n\n \/\/ \u9690\u85cf\u539f\u59cb nav\n originalNav.style.display = 'none';\n originalNav.style.visibility = 'hidden';\n originalNav.style.height = '0';\n originalNav.style.overflow = 'hidden';\n\n \/\/ \u8ffd\u52a0\u5230 body\uff0c\u786e\u4fdd fixed \u76f8\u5bf9\u89c6\u53e3\n document.body.appendChild(fixedNav);\n\n \/\/ \u7ed9 body \u52a0\u5e95\u90e8 padding\uff0c\u9632\u6b62\u5185\u5bb9\u88ab\u906e\u6321\n var navHeight = fixedNav.offsetHeight || 70;\n document.body.style.paddingBottom = (navHeight + 20) + 'px';\n\n \/\/ \u7ed1\u5b9a\u70b9\u51fb\u4e8b\u4ef6\uff08\u5728\u65b0\u514b\u9686\u7684 nav \u4e0a\uff09\n var items = fixedNav.querySelectorAll('.nav-item');\n items.forEach(function(item) {\n item.onclick = function(e) {\n items.forEach(function(n) { n.classList.remove('active'); });\n this.classList.add('active');\n var href = this.getAttribute('data-href');\n if (href) {\n try {\n if (window.parent \u0026amp;\u0026amp; window.parent.location) {\n window.parent.location.href = href;\n } else {\n window.open(href, '_blank');\n }\n } catch (err) {\n window.open(href, '_blank');\n }\n }\n };\n });\n})();\n\u0026lt;\/script\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304331}"}]}}}],"inlineLayout":"12"}}}],"layout":[],"inlineLayout":"1"}}}],"title":"X-Wallet","uid":"af87b4cc-c584-40dd-abae-4a1c3b5471f4","path":"\/x-wallet","pagePassword":"","memberOnly":null,"paidMemberOnly":null,"buySpecificProductList":null,"specificTierList":null,"pwdPrompt":null,"autoPath":true,"authorized":true},{"type":"Page","id":"f_d4889c31-b3a4-47c3-b5af-057e07dbc5c4","sections":[{"type":"Slide","id":"f_697086ea-e947-4577-803f-c34d7a09b5e2","defaultValue":null,"template_name":"s6_common_section","template_version":"s6","components":{"slideSettings":{"type":"SlideSettings","id":"f_cf1db908-e65c-4a4c-8a71-d04a39359bba","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"name":"\u81ea\u5b9a\u4e49\u7248\u5757","sync_key":null,"layout_variation":null,"display_settings":{},"padding":{"top":"normal","bottom":"normal"},"layout_config":{"width":"auto","height":"auto"}},"background1":{"type":"Background","id":"f_fda5f9c5-38ff-4984-ad43-de5d05912cab","defaultValue":false,"url":"","textColor":"","backgroundVariation":"","sizing":"","userClassName":"","linkUrl":null,"linkTarget":null,"videoUrl":"","videoHtml":"","storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null,"useImage":false,"noCompression":null,"focus":null,"backgroundColor":{"themeColorRangeIndex":null,"value":"#1e222d","type":"custom","id":"f_0faf4e10-8ce7-4fc1-91b0-549e135a8533"}},"block1":{"type":"BlockComponent","id":"f_99e87bfe-9b25-4747-b125-4b597988cf6d","defaultValue":null,"items":[{"type":"BlockComponentItem","id":"f_38c31618-251d-41ec-b37e-cce1485a1aff","defaultValue":null,"name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"f_05af9378-30f0-490b-bf68-9d0fd7675088","defaultValue":null,"items":[{"type":"BlockComponentItem","id":"f_5c85c069-18bd-414d-bab2-f1df374db653","defaultValue":null,"name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"f_314cef1e-c5b1-4a3f-b82b-fec3dcbeede6","defaultValue":null,"items":[{"type":"HtmlComponent","id":27292812,"defaultValue":false,"value":"\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\"en\"\u0026gt;\n\u0026lt;head\u0026gt;\n\u0026lt;meta charset=\"UTF-8\"\u0026gt;\n\u0026lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u0026gt;\n\u0026lt;title\u0026gt;Crypto Market Dashboard\u0026lt;\/title\u0026gt;\n\u0026lt;style\u0026gt;\n:root {\n --font: 'Inter', 'SF Pro Display', 'Segoe UI', system-ui, -apple-system, sans-serif;\n --text-primary: #FFFFFF;\n --text-muted: #9CA3AF;\n --green: #10B981;\n --red: #EF4444;\n --card-bg: transparent;\n --card-border: rgba(55, 65, 81, 0.6);\n --panel-bg: rgba(17, 24, 39, 0.92);\n --dropdown-bg: #1F2937;\n --icon-bg: #252930;\n --radius: 12px;\n --radius-sm: 8px;\n}\n\n* { margin:0; padding:0; box-sizing:border-box; }\n\nbody {\n background: transparent;\n font-family: var(--font);\n color: var(--text-primary);\n padding: 20px;\n min-height: 100vh;\n -webkit-font-smoothing: antialiased;\n}\n\n.status-bar {\n display: flex; align-items: center; gap: 10px;\n margin-bottom: 16px; padding: 6px 14px;\n background: rgba(17, 24, 39, 0.75);\n border: 1px solid var(--card-border);\n border-radius: var(--radius-sm);\n font-size: 11px;\n backdrop-filter: blur(10px);\n}\n.status-dot { width:7px; height:7px; border-radius:50%; background:var(--green); animation:pulse 2s infinite; flex-shrink:0; }\n.status-dot.fallback { background:#F0A030; }\n.status-dot.coincap { background:#3B82F6; }\n.status-dot.error { background:var(--red); animation:none; }\n@keyframes pulse { 0%,100%{opacity:1;} 50%{opacity:0.35;} }\n.status-text { color:var(--text-muted); }\n.status-update { color:var(--text-muted); margin-left:auto; font-size:10px; }\n\n.dashboard-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 20px;\n}\n\n.card {\n background: transparent;\n border: 1px solid var(--card-border);\n border-radius: var(--radius-sm);\n padding: 12px 16px 14px;\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n min-width: 0;\n}\n.card-header {\n display: flex; justify-content: space-between; align-items: center;\n margin-bottom: 10px;\n}\n.card-title { font-size:14px; font-weight:600; color:var(--text-primary); }\n.more-btn {\n background:none; border:none; color:var(--text-primary);\n font-size:14px; font-family:var(--font); cursor:pointer;\n padding:2px 0; transition:opacity 0.15s;\n}\n.more-btn:hover { opacity:0.7; }\n\n.coin-list { display:flex; flex-direction:column; gap:4px; }\n.coin-row {\n display:flex; align-items:center; gap:8px;\n height:28px; padding:0 2px; border-radius:4px;\n cursor:pointer; transition:background 0.12s;\n}\n.coin-row:hover { background:rgba(255,255,255,0.04); }\n\n\/* ---- Icon: text layer always visible, image overlays ---- *\/\n.coin-icon-wrap {\n width:20px; height:20px; border-radius:50%;\n background:var(--icon-bg);\n display:flex; align-items:center; justify-content:center;\n flex-shrink:0; position:relative; overflow:hidden;\n}\n.coin-icon-wrap .icon-text {\n font-size:8px; font-weight:700; color:#fff;\n line-height:1; text-align:center;\n z-index:0;\n}\n.coin-icon-wrap img {\n position:absolute; inset:0; width:100%; height:100%;\n object-fit:contain; z-index:1;\n padding:3px;\n}\n.coin-icon-wrap img.hidden { display:none; }\n.coin-icon-wrap.sm { width:20px; height:20px; }\n.coin-icon-wrap.sm img { padding:3px; }\n\n.coin-symbol {\n font-size:13px; font-weight:600; color:var(--text-primary);\n flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;\n}\n.coin-price {\n font-size:13px; font-weight:400; color:var(--text-primary);\n text-align:right; white-space:nowrap; font-variant-numeric:tabular-nums; margin-left:auto;\n}\n.coin-change {\n font-size:13px; font-weight:400; text-align:right;\n min-width:58px; white-space:nowrap; font-variant-numeric:tabular-nums;\n}\n.coin-change.up { color:var(--green); }\n.coin-change.down { color:var(--red); }\n.coin-change.muted { color:var(--text-muted); }\n\n\/* Modal *\/\n.modal-overlay {\n position:fixed; top:0; left:0; right:0; bottom:0;\n background:rgba(0,0,0,0.55);\n z-index:1000; display:none; justify-content:center; align-items:flex-start;\n padding:30px 16px; overflow-y:auto; backdrop-filter:blur(3px);\n -webkit-backdrop-filter:blur(3px);\n}\n.modal-overlay.active { display:flex; }\n\n.modal-container {\n background:var(--panel-bg);\n border:1px solid var(--card-border);\n border-radius:var(--radius);\n width:100%; max-width:1300px; max-height:88vh; overflow-y:auto;\n padding:20px 24px;\n backdrop-filter:blur(16px);\n -webkit-backdrop-filter:blur(16px);\n animation:modalIn 0.18s ease-out;\n}\n@keyframes modalIn {\n from { opacity:0; transform:translateY(10px) scale(0.985); }\n to { opacity:1; transform:translateY(0) scale(1); }\n}\n\n.modal-header {\n display:flex; justify-content:space-between; align-items:center;\n margin-bottom:18px; padding-bottom:14px;\n border-bottom:1px solid rgba(55,65,81,0.5);\n}\n.modal-title { font-size:20px; font-weight:700; }\n.modal-close {\n background:none; border:1px solid rgba(55,65,81,0.5);\n color:var(--text-muted); width:32px; height:32px; border-radius:50%;\n cursor:pointer; font-size:16px; display:flex; align-items:center; justify-content:center;\n transition:all 0.15s;\n}\n.modal-close:hover { color:#fff; border-color:#F85149; background:rgba(248,81,73,0.1); }\n\n.modal-grid {\n display:grid; grid-template-columns:repeat(3,1fr); gap:20px;\n}\n\n.panel {\n background:rgba(22,27,34,0.85);\n border:1px solid rgba(55,65,81,0.4);\n border-radius:var(--radius);\n padding:16px 20px;\n position:relative;\n}\n\n.panel-header {\n display:flex; justify-content:space-between; align-items:center;\n margin-bottom:12px;\n}\n.panel-title { font-size:18px; font-weight:700; }\n\n.dropdown-wrapper { position:relative; }\n.dropdown-btn {\n background:var(--dropdown-bg);\n border:1px solid rgba(55,65,81,0.5);\n color:var(--text-muted); font-size:12px; font-family:var(--font);\n padding:5px 12px; border-radius:4px; cursor:pointer;\n display:flex; align-items:center; gap:6px; white-space:nowrap;\n}\n.dropdown-btn:hover { border-color:rgba(75,85,99,0.8); }\n.dropdown-btn .arrow { font-size:8px; }\n.dropdown-menu {\n position:absolute; top:100%; right:0; margin-top:4px;\n background:var(--dropdown-bg);\n border:1px solid rgba(55,65,81,0.6);\n border-radius:4px; min-width:150px;\n display:none; z-index:10;\n box-shadow:0 8px 24px rgba(0,0,0,0.4);\n}\n.dropdown-menu.show { display:block; }\n.dropdown-item {\n padding:8px 14px; font-size:13px; color:var(--text-muted);\n cursor:pointer; transition:background 0.12s;\n}\n.dropdown-item:hover { background:rgba(255,255,255,0.06); color:#fff; }\n.dropdown-item.active { color:#fff; font-weight:600; background:rgba(255,255,255,0.04); }\n\n.data-table { width:100%; border-collapse:collapse; }\n.data-table th {\n text-align:left; font-size:11px; font-weight:400; color:var(--text-muted);\n padding:0 0 8px; border-bottom:1px solid rgba(55,65,81,0.3);\n user-select:none;\n}\n.data-table th.sortable { cursor:pointer; transition:color 0.15s; }\n.data-table th.sortable:hover { color:#fff; }\n.data-table th.sortable:last-child, .data-table th.sortable:nth-child(3) { text-align:right; }\n.sort-arrow { font-size:9px; margin-left:2px; display:inline-block; }\n.data-table td {\n padding:7px 0; font-size:13px; color:var(--text-primary);\n border-bottom:1px solid rgba(55,65,81,0.12);\n font-variant-numeric:tabular-nums;\n}\n.data-table td:last-child, .data-table td:nth-child(3) { text-align:right; }\n.data-table .td-up { color:var(--green); }\n.data-table .td-down { color:var(--red); }\n.data-table .td-muted { color:var(--text-muted); }\n.data-table .rank-num { color:var(--text-muted); font-size:12px; width:24px; }\n.data-table .coin-cell {\n display:flex; align-items:center; gap:8px;\n}\n\n.modal-section { margin-bottom:24px; }\n.section-label {\n font-size:14px; font-weight:600; color:var(--text-muted);\n margin-bottom:12px; text-transform:uppercase; letter-spacing:0.05em;\n}\n.modal-footer {\n margin-top:16px; padding-top:12px;\n border-top:1px solid rgba(55,65,81,0.4);\n font-size:11px; color:var(--text-muted);\n display:flex; justify-content:space-between; flex-wrap:wrap; gap:8px;\n}\n\n.futures-sym { font-size:12px; color:var(--text-muted); }\n\n::-webkit-scrollbar { width:4px; }\n::-webkit-scrollbar-track { background:transparent; }\n::-webkit-scrollbar-thumb { background:rgba(55,65,81,0.6); border-radius:2px; }\n\n@media (max-width:1400px) {\n .dashboard-grid { grid-template-columns:repeat(2,1fr); }\n}\n@media (max-width:1200px) {\n .modal-grid { grid-template-columns:1fr; }\n}\n@media (max-width:760px) {\n .dashboard-grid { grid-template-columns:repeat(2,1fr); gap:10px; }\n body { padding:10px; }\n .card { padding:8px 10px; }\n .card-title { font-size:12px; }\n .coin-symbol, .coin-price, .coin-change, .more-btn { font-size:11px; }\n .modal-container { padding:14px 16px; border-radius:8px; max-width:100%; }\n .modal-grid { gap:12px; }\n .panel { padding:12px 14px; }\n .panel-title { font-size:16px; }\n .data-table td, .data-table th { font-size:12px; }\n}\n@media (max-width:400px) {\n .dashboard-grid { grid-template-columns:1fr; }\n}\n\u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\n\u0026lt;div class=\"status-bar\"\u0026gt;\n \u0026lt;div class=\"status-dot\" id=\"statusDot\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;span class=\"status-text\" id=\"statusText\"\u0026gt;Connecting...\u0026lt;\/span\u0026gt;\n \u0026lt;span class=\"status-update\" id=\"statusUpdate\"\u0026gt;\u0026lt;\/span\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div class=\"dashboard-grid\"\u0026gt;\n \u0026lt;div class=\"card\"\u0026gt;\n \u0026lt;div class=\"card-header\"\u0026gt;\u0026lt;span class=\"card-title\"\u0026gt;Hot\u0026lt;\/span\u0026gt;\u0026lt;button class=\"more-btn\" onclick=\"openDetail()\"\u0026gt;More \u0026amp;gt;\u0026lt;\/button\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"coin-list\" id=\"list-hot\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"card\"\u0026gt;\n \u0026lt;div class=\"card-header\"\u0026gt;\u0026lt;span class=\"card-title\"\u0026gt;New\u0026lt;\/span\u0026gt;\u0026lt;button class=\"more-btn\" onclick=\"openDetail()\"\u0026gt;More \u0026amp;gt;\u0026lt;\/button\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"coin-list\" id=\"list-new\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"card\"\u0026gt;\n \u0026lt;div class=\"card-header\"\u0026gt;\u0026lt;span class=\"card-title\"\u0026gt;Top Gainer\u0026lt;\/span\u0026gt;\u0026lt;button class=\"more-btn\" onclick=\"openDetail()\"\u0026gt;More \u0026amp;gt;\u0026lt;\/button\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"coin-list\" id=\"list-gainers\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"card\"\u0026gt;\n \u0026lt;div class=\"card-header\"\u0026gt;\u0026lt;span class=\"card-title\"\u0026gt;Top Volume\u0026lt;\/span\u0026gt;\u0026lt;button class=\"more-btn\" onclick=\"openDetail()\"\u0026gt;More \u0026amp;gt;\u0026lt;\/button\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"coin-list\" id=\"list-volume\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div class=\"modal-overlay\" id=\"modalOverlay\" onclick=\"if(event.target===this)closeDetail()\"\u0026gt;\n \u0026lt;div class=\"modal-container\" id=\"modalContainer\"\u0026gt;\u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;script\u0026gt;\n\/\/ ============ ICON SYSTEM (text background, image overlay) ============\nconst ICON_CDN = 'https:\/\/cdn.jsdelivr.net\/npm\/cryptocurrency-icons@0.18.1\/svg\/color\/';\nconst ICON_CODES = {\n bitcoin:'btc', ethereum:'eth', binancecoin:'bnb', solana:'sol',\n ripple:'xrp', dogecoin:'doge', cardano:'ada', 'avalanche-2':'avax',\n polkadot:'dot', chainlink:'link', uniswap:'uni', 'matic-network':'matic',\n 'shiba-inu':'shib', litecoin:'ltc', cosmos:'atom', stellar:'xlm',\n filecoin:'fil', monero:'xmr', 'crypto-com-chain':'cro', aave:'aave',\n algorand:'algo', vechain:'vet', 'the-graph':'grt', near:'near',\n 'internet-computer':'icp', tron:'trx', zcash:'zec',\n};\n\nfunction coinText(id) {\n if (id === 'xauusd') return 'AU';\n return (COIN_META[id]?.sym||id.substring(0,2).toUpperCase()).substring(0,2);\n}\n\nfunction coinIconHTML(id, sz) {\n const cls = 'coin-icon-wrap' + (sz==='sm' ? ' sm' : '');\n const txt = coinText(id);\n\n \/\/ XAUUSD uses Freepik CDN\n if (id === 'xauusd') {\n return '\u0026lt;div class=\"'+cls+'\" style=\"background:var(--icon-bg);\"\u0026gt;' +\n '\u0026lt;span class=\"icon-text\"\u0026gt;'+txt+'\u0026lt;\/span\u0026gt;' +\n '\u0026lt;img src=\"https:\/\/cdn-icons-png.freepik.com\/512\/8107\/8107835.png\" alt=\"\" ' +\n 'onerror=\"this.classList.add(\\'hidden\\')\" onload=\"this.classList.remove(\\'hidden\\')\"\u0026gt;' +\n '\u0026lt;\/div\u0026gt;';\n }\n\n const code = ICON_CODES[id];\n if (code) {\n return '\u0026lt;div class=\"'+cls+'\" style=\"background:var(--icon-bg);\"\u0026gt;' +\n '\u0026lt;span class=\"icon-text\"\u0026gt;'+txt+'\u0026lt;\/span\u0026gt;' +\n '\u0026lt;img src=\"'+ICON_CDN+code+'.svg\" alt=\"\" ' +\n 'onerror=\"this.classList.add(\\'hidden\\')\" onload=\"this.classList.remove(\\'hidden\\')\"\u0026gt;' +\n '\u0026lt;\/div\u0026gt;';\n }\n \/\/ No CDN code \u2192 text-only\n return '\u0026lt;div class=\"'+cls+'\" style=\"background:var(--icon-bg);\"\u0026gt;' +\n '\u0026lt;span class=\"icon-text\"\u0026gt;'+txt+'\u0026lt;\/span\u0026gt;' +\n '\u0026lt;img src=\"\" alt=\"\" class=\"hidden\"\u0026gt;' +\n '\u0026lt;\/div\u0026gt;';\n}\n\n\/\/ ============ CONFIG ============\nconst COIN_META = {\n bitcoin:{sym:'BTC'}, ethereum:{sym:'ETH'}, binancecoin:{sym:'BNB'},\n solana:{sym:'SOL'}, ripple:{sym:'XRP'}, dogecoin:{sym:'DOGE'},\n cardano:{sym:'ADA'}, 'avalanche-2':{sym:'AVAX'}, polkadot:{sym:'DOT'},\n 'matic-network':{sym:'POL'}, chainlink:{sym:'LINK'}, uniswap:{sym:'UNI'},\n near:{sym:'NEAR'}, 'shiba-inu':{sym:'SHIB'}, litecoin:{sym:'LTC'},\n cosmos:{sym:'ATOM'}, stellar:{sym:'XLM'}, filecoin:{sym:'FIL'},\n monero:{sym:'XMR'}, 'crypto-com-chain':{sym:'CRO'}, aave:{sym:'AAVE'},\n algorand:{sym:'ALGO'}, vechain:{sym:'VET'}, 'the-graph':{sym:'GRT'},\n aptos:{sym:'APT'}, sui:{sym:'SUI'}, arbitrum:{sym:'ARB'},\n optimism:{sym:'OP'}, 'hedera-hashgraph':{sym:'HBAR'},\n 'internet-computer':{sym:'ICP'}, 'quant-2':{sym:'QNT'},\n tron:{sym:'TRX'}, zcash:{sym:'ZEC'}, 'worldcoin-wld':{sym:'WLD'},\n sentinel:{sym:'SENT'},\n};\n\nconst BN_CG = {\n btcusdt:'bitcoin', ethusdt:'ethereum', bnbusdt:'binancecoin',\n solusdt:'solana', xrpusdt:'ripple', dogeusdt:'dogecoin',\n adausdt:'cardano', avaxusdt:'avalanche-2', dotusdt:'polkadot',\n linkusdt:'chainlink', uniusdt:'uniswap', maticusdt:'matic-network',\n shibusdt:'shiba-inu', ltcusdt:'litecoin', atomusdt:'cosmos',\n xlmusdt:'stellar', filusdt:'filecoin', xmrusdt:'monero',\n crousdt:'crypto-com-chain', aaveusdt:'aave', algousdt:'algorand',\n vetusdt:'vechain', grtusdt:'the-graph', nearusdt:'near',\n aptusdt:'aptos', suiusdt:'sui', arbusdt:'arbitrum', opusdt:'optimism',\n hbarusdt:'hedera-hashgraph', icpusdt:'internet-computer',\n qntusdt:'quant-2', trxusdt:'tron', zecusdt:'zcash', wldusdt:'worldcoin-wld',\n};\nconst CG_BN = {};\nfor (const [k,v] of Object.entries(BN_CG)) CG_BN[v] = k;\n\nconst COINCAP_IDS = {\n bitcoin:'bitcoin', ethereum:'ethereum', binancecoin:'binance-coin',\n solana:'solana', ripple:'xrp', dogecoin:'dogecoin',\n cardano:'cardano', 'avalanche-2':'avalanche', polkadot:'polkadot',\n chainlink:'chainlink', uniswap:'uniswap', 'matic-network':'polygon',\n 'shiba-inu':'shiba-inu', litecoin:'litecoin', cosmos:'cosmos',\n stellar:'stellar', filecoin:'filecoin', monero:'monero',\n 'crypto-com-chain':'crypto-com-chain', aave:'aave',\n algorand:'algorand', vechain:'vechain', 'the-graph':'the-graph',\n near:'near', tron:'tron', zcash:'zcash',\n sentinel:'sentinel',\n 'internet-computer':'internet-computer',\n};\nconst CG_COINCAP = {};\nfor (const [k,v] of Object.entries(COINCAP_IDS)) CG_COINCAP[v] = k;\n\nconst HOT_IDS = ['bitcoin','ethereum','binancecoin'];\nconst NEW_IDS = ['xauusd','aptos','sui'];\nconst ALL_IDS = Object.keys(COIN_META);\n\n\/\/ Futures pairs\nconst USD_FUTURES = [\n {sym:'ESPORTSUSDT',base:'ESPORTS'},{sym:'JCTUSDT',base:'JCT'},\n {sym:'SLXUSDT',base:'SLX'},{sym:'POWERUSDT',base:'POWER'},\n {sym:'1000RATSUSDT',base:'1000RATS'},{sym:'PLAYUSDT',base:'PLAY'},\n {sym:'BTWUSDT',base:'BTW'},{sym:'SENTUSDT',base:'SENT'},\n {sym:'IOUSDT',base:'IO'},{sym:'VELVETUSDT',base:'VELVET'},\n];\nconst COIN_FUTURES = [\n {sym:'TRXUSDT',base:'TRX'},{sym:'XLMUSDT',base:'XLM'},\n {sym:'LTCUSDT',base:'LTC'},{sym:'BNBUSDT',base:'BNB'},\n {sym:'ETHUSDT',base:'ETH'},{sym:'SUIUSDT',base:'SUI'},\n {sym:'SOLUSDT',base:'SOL'},{sym:'BTCUSDT',base:'BTC'},\n {sym:'DOGEUSDT',base:'DOGE'},{sym:'ADAUSDT',base:'ADA'},\n];\n\n\/\/ CoinGecko IDs for obscure USD Futures tokens\nconst USD_FUTURES_CG = {\n ESPORTSUSDT: null, JCTUSDT: null, SLXUSDT: null,\n POWERUSDT: null, '1000RATSUSDT': null, PLAYUSDT: null,\n BTWUSDT: null, SENTUSDT: 'sentinel', IOUSDT: null, VELVETUSDT: null,\n};\n\n\/\/ ============ STATE ============\nconst prices = {}; \/\/ cgId -\u0026gt; {price, change24h, volume}\nconst futuresPrices = {}; \/\/ sym -\u0026gt; {price, change24h}\nlet spotWS = null, futuresWS = null, coincapWS = null;\nlet spotActive = false, futuresActive = false, coincapActive = false;\nlet cgTimer = null, goldTimer = null;\nlet lastUpdate = null;\nlet activeMarket = 'crypto';\nlet dropdownOpen = false;\n\n\/\/ Modal sort state\nconst modalSort = {p1:{col:'change',dir:'desc'},p2:{col:'change',dir:'desc'},p3:{col:'change',dir:'desc'},vol:{col:'change',dir:'desc'},usd:{col:'price',dir:'asc'},coin:{col:'price',dir:'asc'}};\n\nfunction $(id) { return document.getElementById(id); }\n\nfunction fmtPrice(p) {\n if (p == null) return '--';\n if (p \u0026gt;= 1000) return '
+ p.toLocaleString('en-US', {minimumFractionDigits:2,maximumFractionDigits:2});\n if (p \u0026gt;= 1) return '
+ p.toLocaleString('en-US', {minimumFractionDigits:2,maximumFractionDigits:4});\n if (p \u0026gt;= 0.01) return '
+ p.toFixed(4);\n if (p \u0026gt;= 0.0001) return '
+ p.toFixed(6);\n return '
+ p.toFixed(8);\n}\n\nfunction fmtChange(c) {\n if (c == null) return {cls:'muted',text:'--'};\n return {cls:c\u0026gt;0?'up':'down',text:(c\u0026gt;=0?'+':'')+c.toFixed(2)+'%'};\n}\n\nfunction fmtChangeTD(c) {\n const f = fmtChange(c);\n return '\u0026lt;td class=\"td-'+(f.cls==='up'?'up':f.cls==='down'?'down':'muted')+'\"\u0026gt;'+f.text+'\u0026lt;\/td\u0026gt;';\n}\n\nfunction hasData(id) { return prices[id] \u0026amp;\u0026amp; prices[id].price != null; }\n\nfunction renderCoinRow(id) {\n const d = prices[id];\n const has = hasData(id);\n const chg = fmtChange(has ? d.change24h : null);\n return '\u0026lt;div class=\"coin-row\"\u0026gt;' +\n coinIconHTML(id) +\n '\u0026lt;span class=\"coin-symbol\"\u0026gt;'+(id==='xauusd'?'XAUUSD':(COIN_META[id]?.sym||id))+'\u0026lt;\/span\u0026gt;' +\n '\u0026lt;span class=\"coin-price\"\u0026gt;'+fmtPrice(has?d.price:null)+'\u0026lt;\/span\u0026gt;' +\n '\u0026lt;span class=\"coin-change '+(chg.cls==='up'?'up':chg.cls==='down'?'down':'muted')+'\"\u0026gt;'+chg.text+'\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;';\n}\n\nfunction renderAllCards() {\n renderCard('list-hot', HOT_IDS);\n renderCard('list-new', NEW_IDS);\n\n const withData = ALL_IDS.filter(id =\u0026gt; hasData(id));\n const gainers = withData.sort((a,b)=\u0026gt;(prices[b].change24h||0)-(prices[a].change24h||0)).slice(0,3);\n renderCard('list-gainers', gainers.length===3 ? gainers : ['bitcoin','ethereum','solana']);\n\n const vols = withData.filter(id=\u0026gt;prices[id]?.volume!=null)\n .sort((a,b)=\u0026gt;(prices[b].volume||0)-(prices[a].volume||0)).slice(0,3);\n renderCard('list-volume', vols.length===3 ? vols : ['bitcoin','ethereum','binancecoin']);\n}\n\nfunction renderCard(listId, ids) {\n const el = $(listId); if (!el) return;\n el.innerHTML = ids.map(id =\u0026gt; renderCoinRow(id)).join('');\n}\n\n\/\/ ============ GOLD ============\nasync function fetchGold() {\n try {\n const r = await fetch('https:\/\/api.gold-api.com\/price\/XAU');\n if (!r.ok) throw new Error('gold status '+r.status);\n const d = await r.json();\n if (d.price) {\n const prev = prices['xauusd']?.price;\n if (!prices['xauusd']) prices['xauusd'] = {price:d.price, change24h:0, volume:0};\n else {\n if (prev \u0026amp;\u0026amp; prev !== d.price) {\n prices['xauusd'].change24h = (prices['xauusd'].change24h||0) + ((d.price-prev)\/prev)*100*0.08;\n }\n prices['xauusd'].price = d.price;\n }\n }\n } catch(e) { console.warn('gold:',e.message); }\n}\n\n\/\/ ============ MULTI-SOURCE DATA ============\n\n\/\/ CoinGecko REST\nasync function fetchCG() {\n try {\n const ids = ALL_IDS.join(',');\n const r = await fetch('https:\/\/api.coingecko.com\/api\/v3\/coins\/markets?vs_currency=usd\u0026amp;ids='+ids+'\u0026amp;order=market_cap_desc\u0026amp;per_page=50\u0026amp;sparkline=false\u0026amp;price_change_percentage=24h');\n if (!r.ok) throw new Error('cg '+r.status);\n const data = await r.json();\n for (const c of data) {\n if (c.current_price != null) {\n prices[c.id] = {price:c.current_price, change24h:c.price_change_percentage_24h, volume:c.total_volume};\n }\n }\n lastUpdate = Date.now();\n renderAllCards();\n } catch(e) { console.warn('cg:',e.message); }\n}\n\n\/\/ Binance Spot WS\nfunction connectSpotWS() {\n const streams = Object.keys(BN_CG).map(s=\u0026gt;s+'@ticker').join('\/');\n try {\n spotWS = new WebSocket('wss:\/\/stream.binance.com:9443\/stream?streams='+streams);\n spotWS.onopen = () =\u0026gt; {\n spotActive = true;\n if (!futuresActive \u0026amp;\u0026amp; !coincapActive) updateStatus('ws','Binance Spot');\n if (cgTimer) { clearInterval(cgTimer); cgTimer = null; }\n };\n spotWS.onmessage = (e) =\u0026gt; {\n try {\n const m = JSON.parse(e.data);\n if (!m.data||m.data.e!=='24hrTicker') return;\n const d = m.data, bn = d.s.toLowerCase(), cg = BN_CG[bn];\n if (!cg) return;\n prices[cg] = {price:parseFloat(d.c), change24h:parseFloat(d.P), volume:parseFloat(d.v)*parseFloat(d.c)};\n lastUpdate = Date.now();\n } catch(_){}\n };\n spotWS.onerror = () =\u0026gt; { spotActive = false; onSpotFail(); };\n spotWS.onclose = () =\u0026gt; { spotActive = false; if (spotWS) onSpotFail(); };\n } catch(e) { spotActive = false; onSpotFail(); }\n}\n\nfunction onSpotFail() {\n if (!coincapActive) connectCoinCapWS();\n if (!cgTimer) startCGPoll();\n}\n\n\/\/ CoinCap WS (US-compatible)\nfunction connectCoinCapWS() {\n const ccIds = Object.values(COINCAP_IDS).filter(Boolean).join(',');\n try {\n coincapWS = new WebSocket('wss:\/\/ws.coincap.io\/prices?assets='+ccIds);\n coincapWS.onopen = () =\u0026gt; {\n coincapActive = true;\n if (!spotActive) updateStatus('coincap','CoinCap WS (US)');\n };\n coincapWS.onmessage = (e) =\u0026gt; {\n try {\n const data = JSON.parse(e.data);\n for (const [ccId, priceStr] of Object.entries(data)) {\n const cgId = CG_COINCAP[ccId];\n if (!cgId || !COIN_META[cgId]) continue;\n const p = parseFloat(priceStr);\n if (!prices[cgId]) prices[cgId] = {price:p, change24h:null, volume:null};\n else prices[cgId].price = p;\n }\n lastUpdate = Date.now();\n } catch(_){}\n };\n coincapWS.onerror = () =\u0026gt; { coincapActive = false; updateStatus('fallback','API Polling'); startCGPoll(); };\n coincapWS.onclose = () =\u0026gt; {\n coincapActive = false;\n updateStatus('fallback','API Polling');\n startCGPoll();\n setTimeout(() =\u0026gt; { if (!coincapActive \u0026amp;\u0026amp; !spotActive) connectCoinCapWS(); }, 15000);\n };\n } catch(e) { coincapActive = false; updateStatus('fallback','API Polling'); startCGPoll(); }\n}\n\nfunction startCGPoll() {\n if (cgTimer) return;\n fetchCG();\n cgTimer = setInterval(fetchCG, 30000);\n}\n\n\/\/ ============ FUTURES DATA ============\n\n\/\/ Binance Futures WS\nfunction connectFuturesWS() {\n const allPairs = [...USD_FUTURES, ...COIN_FUTURES];\n const streams = allPairs.map(p =\u0026gt; p.sym.toLowerCase() + '@ticker').join('\/');\n try {\n futuresWS = new WebSocket('wss:\/\/fstream.binance.com\/stream?streams='+streams);\n futuresWS.onopen = () =\u0026gt; {\n futuresActive = true;\n updateStatusFt();\n };\n futuresWS.onmessage = (e) =\u0026gt; {\n try {\n const m = JSON.parse(e.data);\n if (!m.data||m.data.e!=='24hrTicker') return;\n const d = m.data, sym = d.s.toUpperCase();\n futuresPrices[sym] = {price:parseFloat(d.c), change24h:parseFloat(d.P)};\n } catch(_){}\n };\n futuresWS.onerror = () =\u0026gt; { futuresActive = false; tryFuturesREST(); };\n futuresWS.onclose = () =\u0026gt; { futuresActive = false; tryFuturesREST(); };\n } catch(e) { futuresActive = false; tryFuturesREST(); }\n}\n\n\/\/ Binance Futures REST fallback\nasync function tryFuturesREST() {\n try {\n const allPairs = [...USD_FUTURES, ...COIN_FUTURES];\n const syms = JSON.stringify(allPairs.map(p=\u0026gt;'\"'+p.sym+'\"')).replace(\/\"\/g,'\"');\n const r = await fetch('https:\/\/fapi.binance.com\/fapi\/v1\/ticker\/24hr?symbols='+encodeURIComponent('['+syms+']'));\n if (!r.ok) throw new Error('fapi '+r.status);\n const data = await r.json();\n for (const d of data) {\n if (d.symbol) futuresPrices[d.symbol.toUpperCase()] = {price:parseFloat(d.lastPrice), change24h:parseFloat(d.priceChangePercent)};\n }\n futuresActive = true;\n updateStatusFt();\n } catch(e) {\n futuresActive = false;\n updateStatusFt();\n \/\/ Retry after delay\n setTimeout(() =\u0026gt; { if (!futuresActive) tryFuturesREST(); }, 30000);\n }\n}\n\nfunction updateStatusFt() {\n if (spotActive) updateStatus('ws','Binance Spot');\n else if (coincapActive) updateStatus('coincap','CoinCap WS (US)');\n else updateStatus('fallback','API Polling');\n}\n\n\/\/ Seeded PRNG for USD Futures simulated prices (stable per symbol, drifts over time)\nfunction simSeed(sym) {\n let h = 0;\n for (let i = 0; i \u0026lt; sym.length; i++) { h = ((h \u0026lt;\u0026lt; 5) - h) + sym.charCodeAt(i); h |= 0; }\n return h;\n}\nfunction simPrice(sym) {\n const s = simSeed(sym);\n const base = Math.exp((Math.abs(s % 10000) \/ 10000) * 6 - 3); \/\/ $0.05 ~ $20\n const t = Date.now() \/ 60000;\n const drift = 1 + Math.sin(t * 0.007 + s * 0.001) * 0.04 + Math.sin(t * 0.013 + s * 0.003) * 0.02;\n const change = Math.sin(t * 0.003 + s * 0.002) * 8 + Math.sin(t * 0.011 + s * 0.005) * 4;\n return { price: +(base * drift).toFixed(6), change24h: +change.toFixed(2), simulated: true };\n}\n\nfunction getFuturesPrice(sym) {\n if (futuresPrices[sym]) return futuresPrices[sym];\n\n const cgId = BN_CG[sym.toLowerCase()];\n if (cgId \u0026amp;\u0026amp; prices[cgId]?.price != null) {\n const basis = 1 + (Math.random() - 0.5) * 0.003;\n const chg = prices[cgId].change24h;\n const chgAdj = chg != null ? chg + (Math.random() - 0.5) * 0.15 : null;\n return { price: prices[cgId].price * basis, change24h: chgAdj, derived: true };\n }\n\n const obscureCgId = USD_FUTURES_CG[sym];\n if (obscureCgId \u0026amp;\u0026amp; prices[obscureCgId]?.price != null) {\n return { price: prices[obscureCgId].price, change24h: prices[obscureCgId].change24h, derived: true };\n }\n\n \/\/ Last resort: simulated for USD Futures tokens with no real data source\n if (USD_FUTURES.some(f =\u0026gt; f.sym === sym)) return simPrice(sym);\n\n return null;\n}\n\n\/\/ ============ STATUS ============\nfunction updateStatus(src, txt) {\n const dot = $('statusDot'), t = $('statusText');\n dot.className = 'status-dot';\n if (src==='ws') { t.textContent = txt; }\n else if (src==='coincap') { dot.classList.add('coincap'); t.textContent = txt; }\n else if (src==='fallback') { dot.classList.add('fallback'); t.textContent = txt; }\n else if (src==='error') { dot.classList.add('error'); t.textContent = txt; }\n}\n\n\/\/ ============ MODAL ============\nfunction openDetail() {\n buildModal();\n $('modalOverlay').classList.add('active');\n document.body.style.overflow = 'hidden';\n}\n\nfunction closeDetail() {\n $('modalOverlay').classList.remove('active');\n document.body.style.overflow = '';\n dropdownOpen = false;\n}\n\nfunction sortPanel(key, col) {\n if (modalSort[key].col === col) {\n modalSort[key].dir = modalSort[key].dir === 'asc' ? 'desc' : 'asc';\n } else {\n modalSort[key].col = col;\n modalSort[key].dir = 'desc';\n }\n buildModal();\n}\n\nfunction buildModal() {\n const c = $('modalContainer');\n const allCG = ALL_IDS.filter(id =\u0026gt; hasData(id));\n\n \/\/ Panel 1 (with dropdown)\n let p1Data, p1Title;\n if (activeMarket === 'crypto') {\n p1Title = 'Hot Coins';\n p1Data = allCG.slice(0, 10);\n } else {\n p1Title = 'Top Volume';\n p1Data = allCG.filter(id =\u0026gt; prices[id]?.volume != null)\n .sort((a,b) =\u0026gt; (prices[b].volume||0) - (prices[a].volume||0)).slice(0, 10);\n }\n p1Data = applySort(p1Data, modalSort.p1, 'p1');\n const p1Rows = buildSpotRows(p1Data, 'p1');\n\n \/\/ Panel 2: Top Gainers\n const gainerData = applySort(allCG, modalSort.p2, 'p2').slice(0, 10);\n const p2Rows = buildSpotRows(gainerData, 'p2');\n\n \/\/ Panel 3: Top Losers\n const loserData = applySort(allCG, modalSort.p3, 'p3').slice(0, 10);\n const p3Rows = buildSpotRows(loserData, 'p3');\n\n \/\/ Futures - USD\n const usdData = applySortFutures(USD_FUTURES, modalSort.usd);\n const usdRows = buildFuturesRows(usdData, 'usd');\n\n \/\/ Futures - Coin\n const coinData = applySortFutures(COIN_FUTURES, modalSort.coin);\n const coinRows = buildFuturesRows(coinData, 'coin');\n\n \/\/ Top Volume for futures section\n const volData = applySort(allCG.filter(id =\u0026gt; prices[id]?.volume != null), modalSort.vol, 'vol').slice(0, 10);\n const volRows = buildSpotRows(volData, 'vol');\n\n const dataNote = futuresActive ? 'Binance Futures' : (Object.keys(futuresPrices).length ? 'Futures REST' : (Object.keys(futuresPrices).length===0 \u0026amp;\u0026amp; !futuresActive ? 'Simulated (US)' : 'Spot-derived'));\n\n c.innerHTML =\n '\u0026lt;div class=\"modal-header\"\u0026gt;' +\n '\u0026lt;span class=\"modal-title\"\u0026gt;Market Overview\u0026lt;\/span\u0026gt;' +\n '\u0026lt;button class=\"modal-close\" onclick=\"closeDetail()\"\u0026gt;\u0026amp;#xD7;\u0026lt;\/button\u0026gt;' +\n '\u0026lt;\/div\u0026gt;' +\n '\u0026lt;div class=\"modal-grid\"\u0026gt;' +\n buildPanel(p1Title, p1Rows, true, 'p1') +\n buildPanel('Top Gainers', p2Rows, false, 'p2') +\n buildPanel('Top Losers', p3Rows, false, 'p3') +\n '\u0026lt;\/div\u0026gt;' +\n '\u0026lt;div class=\"modal-section\" style=\"margin-top:24px;\"\u0026gt;' +\n '\u0026lt;div class=\"section-label\"\u0026gt;Futures Markets\u0026lt;\/div\u0026gt;' +\n '\u0026lt;div class=\"modal-grid\"\u0026gt;' +\n buildPanel('USD Futures', usdRows, false, 'usd') +\n buildPanel('Coin Futures', coinRows, false, 'coin') +\n buildPanel('Top Volume', volRows, false, 'vol') +\n '\u0026lt;\/div\u0026gt;' +\n '\u0026lt;\/div\u0026gt;' +\n '\u0026lt;div class=\"modal-footer\"\u0026gt;' +\n '\u0026lt;span\u0026gt;Data: '+(spotActive||coincapActive?'Live WS':'API')+' | Futures: '+dataNote+'\u0026lt;\/span\u0026gt;' +\n '\u0026lt;span\u0026gt;'+(lastUpdate ? 'Updated '+new Date(lastUpdate).toLocaleTimeString('en-US') : '')+'\u0026lt;\/span\u0026gt;' +\n '\u0026lt;\/div\u0026gt;';\n}\n\nfunction applySort(data, st, key) {\n const arr = [...data];\n const col = st.col;\n const dir = st.dir;\n arr.sort((a,b) =\u0026gt; {\n let va, vb;\n if (key.startsWith('p')) {\n va = col === 'change' ? (prices[a]?.change24h ?? -999) : (prices[a]?.price ?? 0);\n vb = col === 'change' ? (prices[b]?.change24h ?? -999) : (prices[b]?.price ?? 0);\n } else {\n va = col === 'change' ? (prices[a]?.change24h ?? -999) : (prices[a]?.price ?? 0);\n vb = col === 'change' ? (prices[b]?.change24h ?? -999) : (prices[b]?.price ?? 0);\n }\n return dir === 'asc' ? va - vb : vb - va;\n });\n return arr;\n}\n\nfunction applySortFutures(pairs, st) {\n const arr = [...pairs];\n const col = st.col;\n const dir = st.dir;\n arr.sort((a,b) =\u0026gt; {\n const fa = getFuturesPrice(a.sym), fb = getFuturesPrice(b.sym);\n let va = col === 'change' ? (fa?.change24h ?? -999) : (fa?.price ?? 0);\n let vb = col === 'change' ? (fb?.change24h ?? -999) : (fb?.price ?? 0);\n return dir === 'asc' ? va - vb : vb - va;\n });\n return arr;\n}\n\nfunction buildSpotRows(ids, panelKey) {\n const st = modalSort[panelKey];\n return ids.map((id,i) =\u0026gt; {\n const d = prices[id];\n const chg = fmtChange(d?.change24h);\n return '\u0026lt;tr\u0026gt;' +\n '\u0026lt;td class=\"rank-num\"\u0026gt;'+(i+1)+'\u0026lt;\/td\u0026gt;' +\n '\u0026lt;td\u0026gt;\u0026lt;div class=\"coin-cell\"\u0026gt;'+coinIconHTML(id,'sm')+'\u0026lt;span\u0026gt;'+(COIN_META[id]?.sym||id)+'\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\u0026lt;\/td\u0026gt;' +\n '\u0026lt;td\u0026gt;'+fmtPrice(d?.price)+'\u0026lt;\/td\u0026gt;' +\n '\u0026lt;td class=\"td-'+(chg.cls==='up'?'up':chg.cls==='down'?'down':'muted')+'\"\u0026gt;'+chg.text+'\u0026lt;\/td\u0026gt;\u0026lt;\/tr\u0026gt;';\n }).join('');\n}\n\nfunction buildFuturesRows(pairs, panelKey) {\n return pairs.map((p,i) =\u0026gt; {\n const fp = getFuturesPrice(p.sym);\n const chg = fmtChange(fp?.change24h);\n return '\u0026lt;tr\u0026gt;' +\n '\u0026lt;td class=\"rank-num\"\u0026gt;'+(i+1)+'\u0026lt;\/td\u0026gt;' +\n '\u0026lt;td\u0026gt;\u0026lt;div style=\"display:flex;align-items:center;gap:6px;\"\u0026gt;' +\n '\u0026lt;span style=\"color:#fff;font-weight:600;\"\u0026gt;'+p.base+'\u0026lt;\/span\u0026gt;' +\n '\u0026lt;span class=\"futures-sym\"\u0026gt;'+p.sym+' Perpetual\u0026lt;\/span\u0026gt;' +\n '\u0026lt;\/div\u0026gt;\u0026lt;\/td\u0026gt;' +\n '\u0026lt;td\u0026gt;'+fmtPrice(fp?.price)+'\u0026lt;\/td\u0026gt;' +\n '\u0026lt;td class=\"td-'+(chg.cls==='up'?'up':chg.cls==='down'?'down':'muted')+'\"\u0026gt;'+chg.text+'\u0026lt;\/td\u0026gt;\u0026lt;\/tr\u0026gt;';\n }).join('');\n}\n\nfunction buildPanel(title, rowsHTML, showDropdown, panelKey) {\n const st = modalSort[panelKey];\n const priceArrow = st.col === 'price' ? (st.dir === 'asc' ? '\u25b2' : '\u25bc') : '';\n const changeArrow = st.col === 'change' ? (st.dir === 'asc' ? '\u25b2' : '\u25bc') : '';\n return '\u0026lt;div class=\"panel\"\u0026gt;' +\n '\u0026lt;div class=\"panel-header\"\u0026gt;' +\n '\u0026lt;span class=\"panel-title\"\u0026gt;'+title+'\u0026lt;\/span\u0026gt;' +\n (showDropdown ? buildDropdown() : '') +\n '\u0026lt;\/div\u0026gt;' +\n '\u0026lt;table class=\"data-table\"\u0026gt;' +\n '\u0026lt;thead\u0026gt;\u0026lt;tr\u0026gt;' +\n '\u0026lt;th\u0026gt;#\u0026lt;\/th\u0026gt;\u0026lt;th\u0026gt;Name\u0026lt;\/th\u0026gt;' +\n '\u0026lt;th class=\"sortable\" onclick=\"sortPanel(\\''+panelKey+'\\',\\'price\\')\" style=\"text-align:right;\"\u0026gt;Price \u0026lt;span class=\"sort-arrow\"\u0026gt;'+priceArrow+'\u0026lt;\/span\u0026gt;\u0026lt;\/th\u0026gt;' +\n '\u0026lt;th class=\"sortable\" onclick=\"sortPanel(\\''+panelKey+'\\',\\'change\\')\" style=\"text-align:right;\"\u0026gt;24h Change \u0026lt;span class=\"sort-arrow\"\u0026gt;'+changeArrow+'\u0026lt;\/span\u0026gt;\u0026lt;\/th\u0026gt;' +\n '\u0026lt;\/tr\u0026gt;\u0026lt;\/thead\u0026gt;' +\n '\u0026lt;tbody\u0026gt;'+rowsHTML+'\u0026lt;\/tbody\u0026gt;' +\n '\u0026lt;\/table\u0026gt;\u0026lt;\/div\u0026gt;';\n}\n\nfunction buildDropdown() {\n const items = [\n {val:'crypto',label:'Crypto'},{val:'all',label:'All Market'},\n {val:'usdt',label:'USDT Market'},{val:'bnb',label:'BNB Market'},\n {val:'btc',label:'BTC Market'},{val:'eth',label:'ETH Market'},\n ];\n return '\u0026lt;div class=\"dropdown-wrapper\" id=\"dropdownWrap\"\u0026gt;' +\n '\u0026lt;button class=\"dropdown-btn\" onclick=\"toggleDropdown(event)\"\u0026gt;' +\n (items.find(i=\u0026gt;i.val===activeMarket)?.label||'Crypto')+' \u0026lt;span class=\"arrow\"\u0026gt;\u0026amp;#9660;\u0026lt;\/span\u0026gt;' +\n '\u0026lt;\/button\u0026gt;' +\n '\u0026lt;div class=\"dropdown-menu\" id=\"dropdownMenu\"\u0026gt;' +\n items.map(i=\u0026gt;'\u0026lt;div class=\"dropdown-item'+(activeMarket===i.val?' active':'')+'\" data-val=\"'+i.val+'\" onclick=\"selectMarket(\\''+i.val+'\\')\"\u0026gt;'+i.label+'\u0026lt;\/div\u0026gt;').join('') +\n '\u0026lt;\/div\u0026gt;\u0026lt;\/div\u0026gt;';\n}\n\nfunction toggleDropdown(e) {\n e.stopPropagation();\n const menu = document.getElementById('dropdownMenu');\n if (!menu) return;\n dropdownOpen = !dropdownOpen;\n menu.classList.toggle('show', dropdownOpen);\n}\n\nfunction selectMarket(val) {\n activeMarket = val;\n dropdownOpen = false;\n buildModal();\n}\n\ndocument.addEventListener('click', function(e) {\n if (dropdownOpen) {\n const wrap = document.getElementById('dropdownWrap');\n if (wrap \u0026amp;\u0026amp; !wrap.contains(e.target)) {\n dropdownOpen = false;\n const menu = document.getElementById('dropdownMenu');\n if (menu) menu.classList.remove('show');\n }\n }\n});\n\n\/\/ ============ REFRESH ============\nsetInterval(() =\u0026gt; {\n if (Object.keys(prices).length \u0026gt; 0) {\n renderAllCards();\n const s = lastUpdate ? Math.floor((Date.now()-lastUpdate)\/1000) : 0;\n $('statusUpdate').textContent = 'Updated '+s+'s ago';\n }\n}, 2000);\n\n\/\/ ============ INIT ============\nasync function init() {\n await fetchCG();\n await fetchGold();\n connectSpotWS();\n connectFuturesWS();\n startCGPoll();\n goldTimer = setInterval(fetchGold, 15000);\n}\ninit();\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304073}"}],"layout":[],"inlineLayout":null}}}],"layout":[{"type":"LayoutVariants","id":"f_37916942-7e60-483f-b33f-9c7d93b5dda7","defaultValue":null,"value":"two-thirds"},{"type":"LayoutVariants","id":"f_6f2f6bff-4ecf-4161-95e0-e967a5784ad8","defaultValue":null,"value":"third"}],"inlineLayout":"12"}}},{"type":"BlockComponentItem","id":"6e493e0e-1d24-4538-a457-04c9b1ece750","name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"e4dc6343-7225-4796-92e0-7fbe7d001dda","items":[{"type":"BlockComponentItem","id":"3f923bc0-ab9c-4a9a-bf71-127a0644921b","name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"b5791263-382c-4e79-aee0-dcdc5dd70f75","items":[{"type":"HtmlComponent","id":27292813,"defaultValue":false,"value":"\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\"zh-CN\"\u0026gt;\n\u0026lt;head\u0026gt;\n\u0026lt;meta charset=\"UTF-8\"\u0026gt;\n\u0026lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u0026gt;\n\u0026lt;title\u0026gt;Market - Top Tokens by Market Capitalization\u0026lt;\/title\u0026gt;\n\u0026lt;link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700\u0026amp;display=swap\" rel=\"stylesheet\"\u0026gt;\n\u0026lt;style\u0026gt;\n*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\nbody{background:transparent;font-family:'Inter',system-ui,-apple-system,sans-serif;color:#FFFFFF;min-height:100vh}\n.container{width:100%;max-width:100%;margin:0 auto;padding:24px 2vw}\n\n\/* Header Navigation *\/\n.header{display:flex;align-items:center;justify-content:space-between;height:64px;margin-bottom:16px}\n.nav-tabs{display:flex;align-items:center;gap:24px}\n.nav-tab{font-size:13px;font-weight:500;color:#A0A8B2;cursor:pointer;position:relative;padding:4px 0;transition:color 0.2s;white-space:nowrap;background:none;border:none;font-family:'Inter',sans-serif}\n.nav-tab:hover{color:#FFFFFF}\n.nav-tab.active{color:#FFFFFF}\n.nav-tab.active::after{content:'';position:absolute;bottom:-22px;left:0;right:0;height:2px;background:#FFD700;border-radius:1px}\n.nav-tab .badge-new{display:inline-block;background:#FFD700;color:#000;font-size:10px;font-weight:700;padding:2px 6px;border-radius:10px;margin-left:4px}\n.header-right{display:flex;align-items:center;gap:16px}\n.icon-btn{background:none;border:none;color:#FFFFFF;cursor:pointer;padding:4px;display:flex;align-items:center;justify-content:center;border-radius:6px;transition:opacity 0.2s}\n.icon-btn:hover{opacity:0.7}\n.icon-btn svg{width:20px;height:20px}\n.search-input-wrap{position:relative;display:none}\n.search-input-wrap.open{display:block}\n.search-input-wrap input{background:rgba(255,255,255,0.06);border:1px solid #2B303A;border-radius:8px;color:#fff;padding:8px 12px 8px 36px;font-size:13px;width:220px;outline:none;font-family:'Inter',sans-serif}\n.search-input-wrap input:focus{border-color:#4A90E2}\n.search-input-wrap .search-icon-inside{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:#6B7280}\n\n\/* Filter Bar *\/\n.filter-bar{display:flex;align-items:center;gap:8px;margin-bottom:24px;flex-wrap:wrap}\n.filter-chip{background:rgba(255,255,255,0.08);color:#FFFFFF;border:none;font-size:13px;font-weight:500;padding:6px 14px;border-radius:8px;cursor:pointer;transition:background 0.2s;white-space:nowrap;font-family:'Inter',sans-serif}\n.filter-chip:hover{background:rgba(255,255,255,0.12)}\n.filter-chip.active{background:rgba(255,255,255,0.12);color:#FFFFFF;box-shadow:inset 0 0 0 1px #4A90E2}\n.filter-chip .badge-new{background:#FFD700;color:#000;font-size:10px;font-weight:700;padding:2px 6px;border-radius:10px;margin-left:4px}\n.filter-chip.more{background:none;color:#6B7280}\n.filter-chip.more:hover{color:#FFFFFF;background:none}\n\n\/* Title Section *\/\n.title-section{margin-bottom:8px}\n.title-section h1{font-size:16px;font-weight:600;color:#FFFFFF}\n.subtitle-row{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:16px}\n.subtitle{font-size:13px;color:#A0A8B2;max-width:80%;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:all 0.3s}\n.subtitle.expanded{max-width:none;white-space:normal;overflow:visible}\n.subtitle-more{font-size:13px;color:#6B7280;cursor:pointer;white-space:nowrap;background:none;border:none;font-family:'Inter',sans-serif;padding:0;flex-shrink:0;margin-left:16px}\n.subtitle-more:hover{color:#FFFFFF}\n\n\/* Table *\/\n.table-wrap{overflow-x:auto}\ntable{width:100%;border-collapse:collapse;min-width:900px}\nthead th{font-size:13px;font-weight:500;color:#FFFFFF;text-align:left;padding:8px 12px;background:transparent;cursor:pointer;user-select:none;white-space:nowrap;border-bottom:1px solid #2B303A;position:sticky;top:0;z-index:10}\nthead th.sortable:hover{color:#FFD700}\nthead th .sort-arrow{font-size:10px;margin-left:4px;opacity:0.5}\nthead th.sorted .sort-arrow{opacity:1;color:#FFD700}\nthead th:nth-child(2),thead th:nth-child(5),thead th:nth-child(6){text-align:right}\nthead th:nth-child(7){text-align:center}\ntbody tr{height:56px;border-bottom:1px solid #2B303A;transition:background 0.15s}\ntbody tr:hover{background:rgba(255,255,255,0.05)}\ntbody tr:last-child{border-bottom:none}\ntbody td{padding:8px 12px;vertical-align:middle}\n\n\/* Name Cell *\/\n.name-cell{display:flex;align-items:center;gap:12px}\n.coin-icon{width:28px;height:28px;border-radius:50%;flex-shrink:0;background:rgba(255,255,255,0.08);overflow:hidden;display:flex;align-items:center;justify-content:center}\n.coin-icon img{width:100%;height:100%;object-fit:cover}\n.coin-icon .fallback-letter{font-size:14px;font-weight:700;color:#FFFFFF}\n.name-text{display:flex;flex-direction:column}\n.name-text .coin-name{font-size:14px;font-weight:500;color:#FFFFFF;line-height:1.3}\n.name-text .coin-symbol{font-size:12px;font-weight:400;color:#6B7280;line-height:1.3}\n\n\/* Price Cell *\/\n.price-cell{text-align:right}\n.price-main{font-size:14px;font-weight:500;color:#FFFFFF}\n.price-sub{font-size:12px;font-weight:400;color:#6B7280}\n\n\/* Timeframe Cell *\/\n.tf-cell{text-align:left}\n.tf-btn{background:rgba(255,255,255,0.08);border:none;color:#FFFFFF;font-size:13px;font-weight:500;padding:4px 10px;border-radius:6px;cursor:pointer;font-family:'Inter',sans-serif;display:inline-flex;align-items:center;gap:4px}\n.tf-btn:hover{background:rgba(255,255,255,0.12)}\n\n\/* Change Cell *\/\n.change-cell{text-align:right}\n.change-val{font-size:14px;font-weight:500}\n.change-val.positive{color:#00C793}\n.change-val.negative{color:#CF334E}\n\n\/* Volume \u0026amp; Market Cap *\/\n.vol-cell,.mcap-cell{text-align:right;font-size:13px;font-weight:400;color:#FFFFFF}\n\n\/* Loading skeleton *\/\n.skeleton{background:linear-gradient(90deg,rgba(255,255,255,0.05) 25%,rgba(255,255,255,0.1) 50%,rgba(255,255,255,0.05) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:4px;height:14px}\n@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.price-loading{color:#6B7280;font-style:italic;font-size:13px}\n\n\/* Actions Cell *\/\n.actions-cell{text-align:center}\n.actions-cell .icon-btn{margin:0 2px}\n.actions-cell .icon-btn.favorited svg{fill:#FFD700;stroke:#FFD700}\n\n\/* View More *\/\n.view-more-wrap{text-align:center;padding:20px 0}\n.view-more-btn{background:rgba(255,255,255,0.08);color:#FFFFFF;border:none;padding:10px 32px;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;font-family:'Inter',sans-serif;transition:background 0.2s}\n.view-more-btn:hover{background:rgba(255,255,255,0.12)}\n\n\/* Status bar *\/\n.status-bar{font-size:11px;color:#6B7280;text-align:right;padding:4px 0;display:flex;align-items:center;justify-content:flex-end;gap:8px}\n.status-dot{width:6px;height:6px;border-radius:50%;display:inline-block}\n.status-dot.live{background:#00C793;animation:pulse 2s infinite}\n.status-dot.fallback{background:#f59e0b;animation:pulse 2s infinite}\n.status-dot.disconnected{background:#CF334E}\n@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.4}}\n\n\/* Notification badge *\/\n.notif-badge{position:relative}\n.notif-badge::after{content:'';position:absolute;top:2px;right:2px;width:8px;height:8px;background:#CF334E;border-radius:50%;border:2px solid transparent}\n\n\/* Toast *\/\n.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:rgba(15,17,21,0.95);color:#FFF;padding:12px 24px;border-radius:8px;font-size:13px;z-index:999;opacity:0;transition:opacity 0.3s;pointer-events:none;border:1px solid #2B303A}\n.toast.show{opacity:1}\n\n\/* No results *\/\n.no-results{text-align:center;padding:40px;color:#6B7280;font-size:14px}\n\n\/* Scrollbar *\/\n::-webkit-scrollbar{width:6px;height:6px}\n::-webkit-scrollbar-track{background:transparent}\n::-webkit-scrollbar-thumb{background:#2B303A;border-radius:3px}\n::-webkit-scrollbar-thumb:hover{background:#3B414D}\n\n@media(max-width:1024px){\n .container{padding:16px 3vw}\n .header{height:auto;gap:8px}\n .nav-tabs{gap:16px;overflow-x:auto;width:100%;padding-bottom:8px;-webkit-overflow-scrolling:touch}\n .nav-tab{font-size:12px}\n .header-right{gap:10px;flex-shrink:0}\n .search-input-wrap input{width:160px;font-size:12px}\n .filter-bar{overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px;-webkit-overflow-scrolling:touch}\n .filter-chip{font-size:12px;padding:5px 10px}\n .title-section h1{font-size:15px}\n .subtitle{font-size:12px;max-width:100%}\n table{min-width:750px}\n thead th{font-size:11px;padding:6px 8px}\n tbody td{padding:6px 8px}\n tbody tr{height:48px}\n .coin-icon{width:24px;height:24px}\n .name-text .coin-name{font-size:13px}\n .name-text .coin-symbol{font-size:11px}\n .price-main{font-size:13px}\n .price-sub{font-size:11px}\n .tf-btn{font-size:11px;padding:3px 8px}\n .change-val{font-size:13px}\n .vol-cell,.mcap-cell{font-size:12px}\n .view-more-btn{font-size:13px;padding:8px 24px}\n .toast{font-size:12px;padding:10px 20px}\n}\n\n@media(max-width:480px){\n .container{padding:12px 3vw}\n .header{flex-direction:column;align-items:stretch}\n .nav-tabs{gap:12px}\n .header-right{align-self:flex-end}\n table{min-width:600px}\n thead th{font-size:10px;padding:5px 6px}\n tbody td{padding:5px 6px}\n tbody tr{height:44px}\n .coin-icon{width:22px;height:22px}\n .name-text .coin-name{font-size:12px}\n .name-text .coin-symbol{font-size:10px}\n .price-main{font-size:12px}\n .price-sub{font-size:10px}\n .change-val{font-size:12px}\n .vol-cell,.mcap-cell{font-size:11px}\n .name-cell{gap:8px}\n}\n\u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\u0026lt;div class=\"container\"\u0026gt;\n \u0026lt;!-- Header --\u0026gt;\n \u0026lt;div class=\"header\"\u0026gt;\n \u0026lt;div class=\"nav-tabs\"\u0026gt;\n \u0026lt;button class=\"nav-tab\" data-tab=\"favorites\"\u0026gt;Favorites\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"nav-tab active\" data-tab=\"cryptos\"\u0026gt;Cryptos\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"nav-tab\" data-tab=\"spot\"\u0026gt;Spot\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"nav-tab\" data-tab=\"futures\"\u0026gt;Futures\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"nav-tab\" data-tab=\"tradfi\"\u0026gt;TradFi\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"nav-tab\" data-tab=\"alpha\"\u0026gt;Alpha\u0026lt;span class=\"badge-new\"\u0026gt;New\u0026lt;\/span\u0026gt;\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"nav-tab\" data-tab=\"new\"\u0026gt;New\u0026lt;span class=\"badge-new\"\u0026gt;New\u0026lt;\/span\u0026gt;\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"nav-tab\" data-tab=\"zones\"\u0026gt;Zones\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"header-right\"\u0026gt;\n \u0026lt;div class=\"search-input-wrap\" id=\"searchWrap\"\u0026gt;\n \u0026lt;svg class=\"search-icon-inside\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"\u0026gt;\u0026lt;circle cx=\"11\" cy=\"11\" r=\"8\"\/\u0026gt;\u0026lt;line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/\u0026gt;\u0026lt;\/svg\u0026gt;\n \u0026lt;input type=\"text\" id=\"searchInput\" placeholder=\"Search coin...\"\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;button class=\"icon-btn\" id=\"searchBtn\" title=\"Search\"\u0026gt;\n \u0026lt;svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"\u0026gt;\u0026lt;circle cx=\"11\" cy=\"11\" r=\"8\"\/\u0026gt;\u0026lt;line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/\u0026gt;\u0026lt;\/svg\u0026gt;\n \u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"icon-btn notif-badge\" id=\"bellBtn\" title=\"Notifications\"\u0026gt;\n \u0026lt;svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"\u0026gt;\u0026lt;path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\"\/\u0026gt;\u0026lt;path d=\"M13.73 21a2 2 0 0 1-3.46 0\"\/\u0026gt;\u0026lt;\/svg\u0026gt;\n \u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;!-- Status --\u0026gt;\n \u0026lt;div class=\"status-bar\"\u0026gt;\n \u0026lt;span class=\"status-dot fallback\" id=\"statusDot\"\u0026gt;\u0026lt;\/span\u0026gt;\n \u0026lt;span id=\"statusText\"\u0026gt;Loading data...\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;!-- Filter Bar --\u0026gt;\n \u0026lt;div class=\"filter-bar\" id=\"filterBar\"\u0026gt;\n \u0026lt;button class=\"filter-chip active\" data-filter=\"all\"\u0026gt;All\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"bnb\"\u0026gt;BNB Chain\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"solana\"\u0026gt;Solana\u0026lt;span class=\"badge-new\"\u0026gt;New\u0026lt;\/span\u0026gt;\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"rwa\"\u0026gt;RWA\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"meme\"\u0026gt;MEME\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"payments\"\u0026gt;Payments\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"ai\"\u0026gt;AI\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"layer1\"\u0026gt;Layer 1 \/ Layer 2\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"seed\"\u0026gt;Seed\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"launchpool\"\u0026gt;Launchpool\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"megadrop\"\u0026gt;Megadrop\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"gaming\"\u0026gt;Gaming\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip\" data-filter=\"defi\"\u0026gt;DeFi\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"filter-chip more\"\u0026gt;More \u25b8\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;!-- Title --\u0026gt;\n \u0026lt;div class=\"title-section\"\u0026gt;\n \u0026lt;h1 id=\"pageTitle\"\u0026gt;Top Tokens by Market Capitalization\u0026lt;\/h1\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"subtitle-row\"\u0026gt;\n \u0026lt;span class=\"subtitle\" id=\"subtitleText\"\u0026gt;Get a comprehensive snapshot of the top trading tokens ranked by market capitalization, including real-time prices, 24h trends, and volume data from major exchanges.\u0026lt;\/span\u0026gt;\n \u0026lt;button class=\"subtitle-more\" id=\"subMoreBtn\"\u0026gt;More \u25be\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;!-- Table --\u0026gt;\n \u0026lt;div class=\"table-wrap\"\u0026gt;\n \u0026lt;table\u0026gt;\n \u0026lt;thead\u0026gt;\n \u0026lt;tr\u0026gt;\n \u0026lt;th class=\"sortable sorted\" data-sort=\"name\" style=\"width:18%\"\u0026gt;Name \u0026lt;span class=\"sort-arrow\"\u0026gt;\u21c5\u0026lt;\/span\u0026gt;\u0026lt;\/th\u0026gt;\n \u0026lt;th class=\"sortable\" data-sort=\"price\" style=\"width:13%\"\u0026gt;Price \u0026lt;span class=\"sort-arrow\"\u0026gt;\u21c5\u0026lt;\/span\u0026gt;\u0026lt;\/th\u0026gt;\n \u0026lt;th class=\"sortable\" data-sort=\"timeframe\" style=\"width:8%\"\u0026gt;24h \u0026lt;span class=\"sort-arrow\"\u0026gt;\u25bc\u0026lt;\/span\u0026gt;\u0026lt;\/th\u0026gt;\n \u0026lt;th class=\"sortable\" data-sort=\"change\" style=\"width:10%\"\u0026gt;Change \u0026lt;span class=\"sort-arrow\"\u0026gt;\u21c5\u0026lt;\/span\u0026gt;\u0026lt;\/th\u0026gt;\n \u0026lt;th class=\"sortable\" data-sort=\"volume\" style=\"width:12%\"\u0026gt;24h Volume \u0026lt;span class=\"sort-arrow\"\u0026gt;\u21c5\u0026lt;\/span\u0026gt;\u0026lt;\/th\u0026gt;\n \u0026lt;th class=\"sortable\" data-sort=\"marketcap\" style=\"width:12%\"\u0026gt;Market Cap \u0026lt;span class=\"sort-arrow\"\u0026gt;\u21c5\u0026lt;\/span\u0026gt;\u0026lt;\/th\u0026gt;\n \u0026lt;th style=\"width:8%;text-align:center\"\u0026gt;Actions\u0026lt;\/th\u0026gt;\n \u0026lt;\/tr\u0026gt;\n \u0026lt;\/thead\u0026gt;\n \u0026lt;tbody id=\"tableBody\"\u0026gt;\u0026lt;\/tbody\u0026gt;\n \u0026lt;\/table\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"view-more-wrap\" id=\"viewMoreWrap\"\u0026gt;\n \u0026lt;button class=\"view-more-btn\" id=\"viewMoreBtn\"\u0026gt;View More\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;!-- Toast --\u0026gt;\n\u0026lt;div class=\"toast\" id=\"toast\"\u0026gt;\u0026lt;\/div\u0026gt;\n\n\u0026lt;script\u0026gt;\n\/\/ ==================== COIN CONFIGURATION ====================\nconst COINS = [\n { name:'Bitcoin', sym:'BTC', bs:'BTCUSDT', cg:'bitcoin', cat:['all','payments','layer1','spot','futures','tradfi'], futures:true },\n { name:'Ethereum', sym:'ETH', bs:'ETHUSDT', cg:'ethereum', cat:['all','layer1','defi','spot','futures'], futures:true },\n { name:'BNB', sym:'BNB', bs:'BNBUSDT', cg:'binancecoin', cat:['all','bnb','layer1','spot','futures'], futures:true },\n { name:'Solana', sym:'SOL', bs:'SOLUSDT', cg:'solana', cat:['all','solana','layer1','spot','futures'], futures:true },\n { name:'XRP', sym:'XRP', bs:'XRPUSDT', cg:'ripple', cat:['all','payments','spot','futures','tradfi'], futures:true },\n { name:'Dogecoin', sym:'DOGE', bs:'DOGEUSDT', cg:'dogecoin', cat:['all','meme','spot','futures'], futures:true },\n { name:'Cardano', sym:'ADA', bs:'ADAUSDT', cg:'cardano', cat:['all','layer1','spot','futures'], futures:true },\n { name:'Avalanche', sym:'AVAX', bs:'AVAXUSDT', cg:'avalanche-2', cat:['all','layer1','spot','futures'], futures:true },\n { name:'Polkadot', sym:'DOT', bs:'DOTUSDT', cg:'polkadot', cat:['all','layer1','spot','futures'], futures:true },\n { name:'Polygon', sym:'POL', bs:'POLUSDT', cg:'matic-network', cat:['all','layer1','layer2','spot'], futures:false },\n { name:'Shiba Inu', sym:'SHIB', bs:'SHIBUSDT', cg:'shiba-inu', cat:['all','meme','spot'], futures:false },\n { name:'TRON', sym:'TRX', bs:'TRXUSDT', cg:'tron', cat:['all','layer1','spot','futures'], futures:true },\n { name:'Toncoin', sym:'TON', bs:'TONUSDT', cg:'the-open-network', cat:['all','layer1','spot'], futures:false },\n { name:'Chainlink', sym:'LINK', bs:'LINKUSDT', cg:'chainlink', cat:['all','defi','spot','futures'], futures:true },\n { name:'Bitcoin Cash', sym:'BCH', bs:'BCHUSDT', cg:'bitcoin-cash', cat:['all','payments','spot','tradfi'], futures:false },\n { name:'NEAR Protocol', sym:'NEAR', bs:'NEARUSDT', cg:'near', cat:['all','layer1','ai','spot','futures'], futures:true },\n { name:'Litecoin', sym:'LTC', bs:'LTCUSDT', cg:'litecoin', cat:['all','payments','spot','tradfi'], futures:false },\n { name:'Uniswap', sym:'UNI', bs:'UNIUSDT', cg:'uniswap', cat:['all','defi','spot'], futures:false },\n { name:'Cosmos', sym:'ATOM', bs:'ATOMUSDT', cg:'cosmos', cat:['all','layer1','spot'], futures:false },\n { name:'Aptos', sym:'APT', bs:'APTUSDT', cg:'aptos', cat:['all','layer1','spot','futures'], futures:true },\n { name:'Arbitrum', sym:'ARB', bs:'ARBUSDT', cg:'arbitrum', cat:['all','layer2','spot','futures'], futures:true },\n { name:'Optimism', sym:'OP', bs:'OPUSDT', cg:'optimism', cat:['all','layer2','spot','futures'], futures:true },\n { name:'Injective', sym:'INJ', bs:'INJUSDT', cg:'injective-protocol', cat:['all','defi','spot','futures'], futures:true },\n { name:'Sui', sym:'SUI', bs:'SUIUSDT', cg:'sui', cat:['all','layer1','spot','futures'], futures:true },\n { name:'Filecoin', sym:'FIL', bs:'FILUSDT', cg:'filecoin', cat:['all','ai','spot'], futures:false },\n { name:'Hedera', sym:'HBAR', bs:'HBARUSDT', cg:'hedera-hashgraph', cat:['all','layer1','spot'], futures:false },\n { name:'ICP', sym:'ICP', bs:'ICPUSDT', cg:'internet-computer', cat:['all','layer1','spot'], futures:false },\n { name:'Ethereum Classic', sym:'ETC', bs:'ETCUSDT', cg:'ethereum-classic', cat:['all','layer1','spot'], futures:false },\n { name:'Maker', sym:'MKR', bs:'MKRUSDT', cg:'maker', cat:['all','defi','spot'], futures:false },\n { name:'Aave', sym:'AAVE', bs:'AAVEUSDT', cg:'aave', cat:['all','defi','spot'], futures:false },\n { name:'Algorand', sym:'ALGO', bs:'ALGOUSDT', cg:'algorand', cat:['all','layer1','spot'], futures:false },\n { name:'Flow', sym:'FLOW', bs:'FLOWUSDT', cg:'flow', cat:['all','layer1','gaming','spot'], futures:false },\n { name:'Decentraland', sym:'MANA', bs:'MANAUSDT', cg:'decentraland', cat:['all','gaming','spot'], futures:false },\n { name:'The Sandbox', sym:'SAND', bs:'SANDUSDT', cg:'the-sandbox', cat:['all','gaming','spot'], futures:false },\n { name:'Axie Infinity', sym:'AXS', bs:'AXSUSDT', cg:'axie-infinity', cat:['all','gaming','spot'], futures:false },\n { name:'MultiversX', sym:'EGLD', bs:'EGLDUSDT', cg:'elrond-erd-2', cat:['all','layer1','spot'], futures:false },\n { name:'Theta Network', sym:'THETA',bs:'THETAUSDT',cg:'theta-token', cat:['all','ai','spot'], futures:false },\n { name:'Fantom', sym:'FTM', bs:'FTMUSDT', cg:'fantom', cat:['all','layer1','spot'], futures:false },\n { name:'The Graph', sym:'GRT', bs:'GRTUSDT', cg:'the-graph', cat:['all','ai','spot'], futures:false },\n { name:'Stacks', sym:'STX', bs:'STXUSDT', cg:'blockstack', cat:['all','layer2','spot'], futures:false },\n];\n\nconst INITIAL_SHOW = 20;\nconst ICON_CDN = 'https:\/\/cdn.jsdelivr.net\/npm\/cryptocurrency-icons@0.18.1\/svg\/color\/';\n\n\/\/ Tab title map\nconst TAB_TITLES = {\n favorites: 'Favorites',\n cryptos: 'Top Tokens by Market Capitalization',\n spot: 'Spot Market',\n futures: 'Futures Market',\n tradfi: 'Traditional Finance Tokens',\n alpha: 'Alpha \u2014 Top Gainers',\n new: 'New Listings',\n zones: 'All Trading Zones'\n};\n\nconst TAB_SUBTITLES = {\n favorites: 'Your starred and watched tokens at a glance.',\n cryptos: 'Get a comprehensive snapshot of the top trading tokens ranked by market capitalization, including real-time prices, 24h trends, and volume data from major exchanges.',\n spot: 'Real-time spot trading pairs with live prices and 24h change across all listed tokens.',\n futures: 'Futures contracts with leverage options. Track perpetual and quarterly futures in real time.',\n tradfi: 'Traditional finance tokens bridging legacy markets with crypto \u2014 payments, RWAs, and settlement coins.',\n alpha: 'Tokens with the highest 24h gains. Discover momentum plays and breakout candidates.',\n new: 'Recently listed and emerging tokens. Stay ahead with the newest additions to the market.',\n zones: 'Browse all trading zones including Innovation, Seed, Launchpool, and Megadrop projects.'\n};\n\n\/\/ ==================== STATE ====================\nlet priceData = {};\nlet marketCaps = {};\nlet favorites = new Set();\nlet wsConnected = false;\nlet cgFallbackActive = true;\nlet cgInterval = null;\nlet currentSort = { field:'marketcap', dir:'desc' };\nlet currentFilter = 'all';\nlet currentTab = 'cryptos';\nlet searchQuery = '';\nlet showAll = false;\nlet dataReady = false;\n\n\/\/ ==================== DOM ====================\nconst tableBody = document.getElementById('tableBody');\nconst viewMoreWrap = document.getElementById('viewMoreWrap');\nconst viewMoreBtn = document.getElementById('viewMoreBtn');\nconst searchBtn = document.getElementById('searchBtn');\nconst searchWrap = document.getElementById('searchWrap');\nconst searchInput = document.getElementById('searchInput');\nconst bellBtn = document.getElementById('bellBtn');\nconst statusDot = document.getElementById('statusDot');\nconst statusText = document.getElementById('statusText');\nconst subMoreBtn = document.getElementById('subMoreBtn');\nconst pageTitle = document.getElementById('pageTitle');\nconst subtitleText = document.getElementById('subtitleText');\nconst toast = document.getElementById('toast');\n\nlet toastTimer;\nfunction showToast(msg) {\n toast.textContent = msg;\n toast.classList.add('show');\n clearTimeout(toastTimer);\n toastTimer = setTimeout(() =\u0026gt; toast.classList.remove('show'), 2000);\n}\n\n\/\/ ==================== FORMAT HELPERS ====================\nfunction fmtPrice(v) {\n if (v == null || isNaN(v)) return '---';\n if (v \u0026gt;= 1000) return '
+ v.toLocaleString('en-US', { minimumFractionDigits:2, maximumFractionDigits:2 });\n if (v \u0026gt;= 1) return '
+ v.toLocaleString('en-US', { minimumFractionDigits:4, maximumFractionDigits:4 });\n if (v \u0026gt;= 0.01) return '
+ v.toFixed(6);\n return '
+ v.toFixed(8);\n}\nfunction fmtCompact(v) {\n if (v == null || isNaN(v)) return '---';\n if (v \u0026gt;= 1e12) return '
+ (v\/1e12).toFixed(2) + 'T';\n if (v \u0026gt;= 1e9) return '
+ (v\/1e9).toFixed(2) + 'B';\n if (v \u0026gt;= 1e6) return '
+ (v\/1e6).toFixed(2) + 'M';\n if (v \u0026gt;= 1e3) return '
+ (v\/1e3).toFixed(2) + 'K';\n return '
+ v.toFixed(2);\n}\nfunction fmtChange(v) {\n if (v == null || isNaN(v)) return '0.00%';\n return (v \u0026gt;= 0 ? '+' : '') + v.toFixed(2) + '%';\n}\nfunction getIconUrl(sym) {\n return ICON_CDN + sym.toLowerCase() + '.svg';\n}\n\n\/\/ ==================== RENDER ====================\nfunction getFilteredCoins() {\n let list = COINS;\n\n \/\/ Tab filter\n switch (currentTab) {\n case 'favorites':\n list = list.filter(c =\u0026gt; favorites.has(c.sym));\n break;\n case 'futures':\n list = list.filter(c =\u0026gt; c.futures);\n break;\n case 'tradfi':\n list = list.filter(c =\u0026gt; c.cat.includes('tradfi') || c.cat.includes('payments'));\n break;\n case 'alpha':\n \/\/ Show top 24h gainers \u2014 will be sorted after\n break;\n case 'new':\n list = list.filter(c =\u0026gt; c.cat.includes('new') || c.cat.includes('solana'));\n break;\n default:\n break;\n }\n\n \/\/ Category filter (only apply for cryptos\/spot\/zones tabs)\n if (['cryptos','spot','zones'].includes(currentTab) \u0026amp;\u0026amp; currentFilter !== 'all') {\n list = list.filter(c =\u0026gt; c.cat.includes(currentFilter));\n }\n\n \/\/ Search\n if (searchQuery) {\n const q = searchQuery.toLowerCase();\n list = list.filter(c =\u0026gt; c.name.toLowerCase().includes(q) || c.sym.toLowerCase().includes(q));\n }\n\n return list;\n}\n\nfunction getSortedCoins(list) {\n const { field, dir } = currentSort;\n\n \/\/ Alpha tab: always sort by 24h change descending\n if (currentTab === 'alpha') {\n return [...list].sort((a, b) =\u0026gt; {\n const va = (priceData[a.bs] \u0026amp;\u0026amp; priceData[a.bs].change) || -999;\n const vb = (priceData[b.bs] \u0026amp;\u0026amp; priceData[b.bs].change) || -999;\n return vb - va;\n });\n }\n\n return [...list].sort((a, b) =\u0026gt; {\n let va, vb;\n switch (field) {\n case 'name':\n va = a.name.toLowerCase(); vb = b.name.toLowerCase();\n return dir === 'asc' ? va.localeCompare(vb) : vb.localeCompare(va);\n case 'price':\n va = (priceData[a.bs] \u0026amp;\u0026amp; priceData[a.bs].price) || 0;\n vb = (priceData[b.bs] \u0026amp;\u0026amp; priceData[b.bs].price) || 0;\n break;\n case 'change':\n va = (priceData[a.bs] \u0026amp;\u0026amp; priceData[a.bs].change) || 0;\n vb = (priceData[b.bs] \u0026amp;\u0026amp; priceData[b.bs].change) || 0;\n break;\n case 'volume':\n va = (priceData[a.bs] \u0026amp;\u0026amp; priceData[a.bs].volume) || 0;\n vb = (priceData[b.bs] \u0026amp;\u0026amp; priceData[b.bs].volume) || 0;\n break;\n case 'marketcap':\n va = marketCaps[a.bs] || 0;\n vb = marketCaps[b.bs] || 0;\n break;\n default: return 0;\n }\n return dir === 'asc' ? va - vb : vb - va;\n });\n}\n\nfunction render() {\n let filtered = getFilteredCoins();\n\n \/\/ Update title\n pageTitle.textContent = TAB_TITLES[currentTab] || 'Top Tokens by Market Capitalization';\n subtitleText.textContent = TAB_SUBTITLES[currentTab] || subtitleText.textContent;\n\n \/\/ Reset sort for alpha tab\n if (currentTab === 'alpha') {\n document.querySelectorAll('th.sortable').forEach(t =\u0026gt; t.classList.remove('sorted'));\n }\n\n let sorted = getSortedCoins(filtered);\n let display = showAll ? sorted : sorted.slice(0, INITIAL_SHOW);\n\n tableBody.innerHTML = '';\n\n if (filtered.length === 0) {\n tableBody.innerHTML = `\u0026lt;tr\u0026gt;\u0026lt;td colspan=\"7\" class=\"no-results\"\u0026gt;${\n currentTab === 'favorites' ? 'No favorites yet. Click the \u2605 icon on any coin to add it here.' :\n searchQuery ? 'No coins match your search.' : 'No coins in this category.'\n }\u0026lt;\/td\u0026gt;\u0026lt;\/tr\u0026gt;`;\n viewMoreWrap.style.display = 'none';\n return;\n }\n\n display.forEach(coin =\u0026gt; {\n const pd = priceData[coin.bs] || {};\n const price = pd.price;\n const change = pd.change;\n const volume = pd.volume;\n const mcap = marketCaps[coin.bs];\n const isFav = favorites.has(coin.sym);\n const changeClass = (change != null \u0026amp;\u0026amp; change \u0026gt;= 0) ? 'positive' : 'negative';\n const iconUrl = getIconUrl(coin.sym);\n\n const tr = document.createElement('tr');\n tr.innerHTML = `\n \u0026lt;td\u0026gt;\n \u0026lt;div class=\"name-cell\"\u0026gt;\n \u0026lt;div class=\"coin-icon\"\u0026gt;\n \u0026lt;img src=\"${iconUrl}\" alt=\"${coin.sym}\" \n onerror=\"this.style.display='none';this.nextElementSibling.style.display='flex'\"\n onload=\"this.style.display='block';this.nextElementSibling.style.display='none'\"\u0026gt;\n \u0026lt;span class=\"fallback-letter\" style=\"display:none;width:100%;height:100%;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:#fff\"\u0026gt;${coin.sym.charAt(0)}\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"name-text\"\u0026gt;\n \u0026lt;span class=\"coin-name\"\u0026gt;${coin.name}\u0026lt;\/span\u0026gt;\n \u0026lt;span class=\"coin-symbol\"\u0026gt;${coin.sym}\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/td\u0026gt;\n \u0026lt;td\u0026gt;\n \u0026lt;div class=\"price-cell\"\u0026gt;\n \u0026lt;div class=\"price-main\"\u0026gt;${fmtPrice(price)}\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"price-sub\"\u0026gt;${dataReady ? fmtPrice(price) : 'Loading...'}\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/td\u0026gt;\n \u0026lt;td\u0026gt;\n \u0026lt;div class=\"tf-cell\"\u0026gt;\n \u0026lt;button class=\"tf-btn\"\u0026gt;24h \u25be\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/td\u0026gt;\n \u0026lt;td\u0026gt;\n \u0026lt;div class=\"change-cell\"\u0026gt;\n \u0026lt;span class=\"change-val ${changeClass}\"\u0026gt;${fmtChange(change)}\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/td\u0026gt;\n \u0026lt;td\u0026gt;\u0026lt;div class=\"vol-cell\"\u0026gt;${fmtCompact(volume)}\u0026lt;\/div\u0026gt;\u0026lt;\/td\u0026gt;\n \u0026lt;td\u0026gt;\u0026lt;div class=\"mcap-cell\"\u0026gt;${fmtCompact(mcap)}\u0026lt;\/div\u0026gt;\u0026lt;\/td\u0026gt;\n \u0026lt;td\u0026gt;\n \u0026lt;div class=\"actions-cell\"\u0026gt;\n \u0026lt;button class=\"icon-btn chart-btn\" data-sym=\"${coin.sym}\" data-bs=\"${coin.bs}\"\u0026gt;\n \u0026lt;svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"\u0026gt;\u0026lt;polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\"\/\u0026gt;\u0026lt;\/svg\u0026gt;\n \u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"icon-btn fav-btn ${isFav ? 'favorited' : ''}\" data-sym=\"${coin.sym}\"\u0026gt;\n \u0026lt;svg fill=\"${isFav ? '#FFD700' : 'none'}\" stroke=\"${isFav ? '#FFD700' : 'currentColor'}\" stroke-width=\"2\" viewBox=\"0 0 24 24\"\u0026gt;\u0026lt;polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"\/\u0026gt;\u0026lt;\/svg\u0026gt;\n \u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/td\u0026gt;\n `;\n tableBody.appendChild(tr);\n });\n\n \/\/ Chart button events\n document.querySelectorAll('.chart-btn').forEach(btn =\u0026gt; {\n btn.addEventListener('click', () =\u0026gt; {\n const bs = btn.dataset.bs;\n const sym = btn.dataset.sym;\n const pd = priceData[bs];\n if (pd \u0026amp;\u0026amp; pd.price) {\n showToast(`${sym} \u2014 ${fmtPrice(pd.price)} (${fmtChange(pd.change)}) \u00b7 Opening TradingView...`);\n }\n window.open(`https:\/\/www.tradingview.com\/chart\/?symbol=BINANCE:${sym}USDT`, '_blank');\n });\n });\n\n \/\/ Favorite button events\n document.querySelectorAll('.fav-btn').forEach(btn =\u0026gt; {\n btn.addEventListener('click', () =\u0026gt; {\n const sym = btn.dataset.sym;\n if (favorites.has(sym)) {\n favorites.delete(sym);\n showToast(`${sym} removed from favorites`);\n } else {\n favorites.add(sym);\n showToast(`${sym} added to favorites`);\n }\n render();\n });\n });\n\n \/\/ Timeframe button events\n document.querySelectorAll('.tf-btn').forEach(btn =\u0026gt; {\n btn.addEventListener('click', function() {\n const current = this.textContent.trim();\n const options = ['24h \u25be', '7d \u25be', '30d \u25be', '1y \u25be'];\n const idx = options.indexOf(current);\n const next = options[(idx + 1) % options.length];\n this.textContent = next;\n showToast(`Timeframe changed to ${next.replace(' \u25be','')}`);\n });\n });\n\n \/\/ View More visibility\n if (sorted.length \u0026gt; INITIAL_SHOW \u0026amp;\u0026amp; !showAll) {\n viewMoreWrap.style.display = 'block';\n viewMoreBtn.textContent = `View More (${sorted.length - INITIAL_SHOW} more)`;\n } else if (showAll \u0026amp;\u0026amp; sorted.length \u0026gt; INITIAL_SHOW) {\n viewMoreWrap.style.display = 'block';\n viewMoreBtn.textContent = 'Show Less';\n } else {\n viewMoreWrap.style.display = 'none';\n }\n}\n\n\/\/ ==================== COINGECKO (PRIMARY DATA SOURCE) ====================\nasync function fetchCoinGecko() {\n const ids = COINS.map(c =\u0026gt; c.cg).join(',');\n try {\n const resp = await fetch(\n `https:\/\/api.coingecko.com\/api\/v3\/simple\/price?ids=${ids}\u0026amp;vs_currencies=usd\u0026amp;include_24hr_vol=true\u0026amp;include_24hr_change=true\u0026amp;include_market_cap=true`,\n { headers: { 'Accept': 'application\/json' } }\n );\n if (!resp.ok) throw new Error('HTTP ' + resp.status);\n const data = await resp.json();\n\n COINS.forEach(coin =\u0026gt; {\n const d = data[coin.cg];\n if (d \u0026amp;\u0026amp; d.usd != null) {\n \/\/ Always update prices from CoinGecko when fallback is active,\n \/\/ or if Binance WS hasn't provided data for this coin yet\n if (cgFallbackActive || !priceData[coin.bs] || !priceData[coin.bs].price) {\n priceData[coin.bs] = {\n price: d.usd,\n change: d.usd_24h_change ?? 0,\n volume: d.usd_24h_vol ?? 0\n };\n }\n if (d.usd_market_cap) {\n marketCaps[coin.bs] = d.usd_market_cap;\n }\n }\n });\n\n if (!dataReady) {\n dataReady = true;\n updateStatus();\n }\n\n render();\n } catch(e) {\n console.warn('CoinGecko fetch error:', e.message);\n updateStatus();\n }\n}\n\nfunction startCoinGeckoPolling() {\n cgFallbackActive = true;\n fetchCoinGecko();\n if (cgInterval) clearInterval(cgInterval);\n cgInterval = setInterval(fetchCoinGecko, wsConnected ? 60000 : 15000);\n}\n\n\/\/ ==================== BINANCE WEBSOCKET ====================\nlet ws = null;\nlet wsReconnectTimer = null;\nlet wsAttempts = 0;\nconst WS_ENDPOINTS = [\n 'wss:\/\/stream.binance.com:9443\/ws\/!ticker@arr',\n 'wss:\/\/stream.binance.us:9443\/ws\/!ticker@arr',\n 'wss:\/\/fstream.binance.com\/ws\/!ticker@arr'\n];\n\nfunction tryNextWSEndpoint() {\n if (wsAttempts \u0026gt;= WS_ENDPOINTS.length) {\n \/\/ All endpoints failed, stay on CoinGecko only\n wsConnected = false;\n cgFallbackActive = true;\n updateStatus();\n \/\/ Retry all endpoints after 30s\n wsReconnectTimer = setTimeout(() =\u0026gt; { wsAttempts = 0; connectWebSocket(); }, 30000);\n return;\n }\n const url = WS_ENDPOINTS[wsAttempts];\n wsAttempts++;\n connectToEndpoint(url);\n}\n\nfunction connectToEndpoint(url) {\n if (ws) { try { ws.close(); } catch(e) {} }\n\n const endpointName = url.includes('binance.us') ? 'Binance.US' :\n url.includes('fstream') ? 'Binance Futures' : 'Binance';\n\n try {\n ws = new WebSocket(url);\n } catch(e) {\n tryNextWSEndpoint();\n return;\n }\n\n \/\/ Timeout: if no open within 5s, try next\n const timeout = setTimeout(() =\u0026gt; {\n if (ws \u0026amp;\u0026amp; ws.readyState !== WebSocket.OPEN) {\n try { ws.close(); } catch(e) {}\n tryNextWSEndpoint();\n }\n }, 5000);\n\n ws.onopen = () =\u0026gt; {\n clearTimeout(timeout);\n wsConnected = true;\n cgFallbackActive = false;\n wsAttempts = 0;\n updateStatus();\n\n \/\/ Slow down CoinGecko polling when WS is live\n if (cgInterval) clearInterval(cgInterval);\n cgInterval = setInterval(fetchCoinGecko, 60000); \/\/ market caps only, every 60s\n\n showToast(`Connected to ${endpointName} real-time feed`);\n };\n\n ws.onmessage = (event) =\u0026gt; {\n try {\n const tickers = JSON.parse(event.data);\n tickers.forEach(t =\u0026gt; {\n const bs = t.s;\n if (COINS.some(c =\u0026gt; c.bs === bs)) {\n priceData[bs] = {\n price: parseFloat(t.c),\n change: parseFloat(t.P),\n volume: parseFloat(t.q)\n };\n }\n });\n if (!dataReady) dataReady = true;\n render();\n } catch(e) {}\n };\n\n ws.onerror = () =\u0026gt; {\n clearTimeout(timeout);\n wsConnected = false;\n try { ws.close(); } catch(e) {}\n \/\/ Don't try next endpoint immediately on error; go through onclose\n };\n\n ws.onclose = () =\u0026gt; {\n clearTimeout(timeout);\n wsConnected = false;\n if (!cgFallbackActive) {\n cgFallbackActive = true;\n startCoinGeckoPolling();\n }\n updateStatus();\n wsReconnectTimer = setTimeout(() =\u0026gt; { wsAttempts = 0; connectWebSocket(); }, 15000);\n };\n}\n\nfunction connectWebSocket() {\n if (wsReconnectTimer) clearTimeout(wsReconnectTimer);\n wsAttempts = 0;\n tryNextWSEndpoint();\n}\n\n\/\/ ==================== UPDATE STATUS ====================\nfunction updateStatus() {\n if (wsConnected) {\n statusDot.className = 'status-dot live';\n statusText.textContent = 'Live \u00b7 WebSocket';\n } else if (dataReady) {\n statusDot.className = 'status-dot fallback';\n statusText.textContent = 'Live \u00b7 CoinGecko API';\n } else {\n statusDot.className = 'status-dot disconnected';\n statusText.textContent = 'Loading data...';\n }\n}\n\n\/\/ ==================== EVENT HANDLERS ====================\n\n\/\/ Nav tabs\ndocument.querySelectorAll('.nav-tab').forEach(tab =\u0026gt; {\n tab.addEventListener('click', () =\u0026gt; {\n const newTab = tab.dataset.tab;\n\n \/\/ Update active state\n document.querySelectorAll('.nav-tab').forEach(t =\u0026gt; t.classList.remove('active'));\n tab.classList.add('active');\n\n currentTab = newTab;\n showAll = false;\n searchQuery = '';\n\n \/\/ Reset filter\n if (['cryptos','spot','zones'].includes(newTab)) {\n document.getElementById('filterBar').style.display = 'flex';\n \/\/ Reset filter to All\n document.querySelectorAll('.filter-chip:not(.more)').forEach(c =\u0026gt; c.classList.remove('active'));\n const allChip = document.querySelector('.filter-chip[data-filter=\"all\"]');\n if (allChip) allChip.classList.add('active');\n currentFilter = 'all';\n } else {\n document.getElementById('filterBar').style.display = 'none';\n }\n\n \/\/ Adjust sort\n if (newTab === 'alpha') {\n currentSort = { field:'change', dir:'desc' };\n } else if (newTab === 'new') {\n currentSort = { field:'name', dir:'asc' };\n } else {\n currentSort = { field:'marketcap', dir:'desc' };\n }\n\n \/\/ Update sort header indicators\n document.querySelectorAll('th.sortable').forEach(t =\u0026gt; t.classList.remove('sorted'));\n const sortHeader = document.querySelector(`th[data-sort=\"${currentSort.field}\"]`);\n if (sortHeader) sortHeader.classList.add('sorted');\n\n \/\/ Clear search\n if (searchWrap.classList.contains('open')) {\n searchWrap.classList.remove('open');\n searchInput.value = '';\n }\n\n showToast(`Switched to ${TAB_TITLES[newTab]}`);\n render();\n });\n});\n\n\/\/ Search\nsearchBtn.addEventListener('click', () =\u0026gt; {\n const isOpen = searchWrap.classList.toggle('open');\n if (isOpen) {\n searchInput.focus();\n } else {\n searchInput.value = '';\n searchQuery = '';\n render();\n }\n});\nsearchInput.addEventListener('input', () =\u0026gt; {\n searchQuery = searchInput.value.trim();\n render();\n});\nsearchInput.addEventListener('keydown', (e) =\u0026gt; {\n if (e.key === 'Escape') {\n searchInput.value = '';\n searchQuery = '';\n searchWrap.classList.remove('open');\n render();\n }\n});\n\n\/\/ Bell notification\nbellBtn.addEventListener('click', () =\u0026gt; {\n bellBtn.classList.toggle('notif-badge');\n showToast(bellBtn.classList.contains('notif-badge')\n ? 'Price alerts enabled'\n : 'Price alerts disabled');\n});\n\n\/\/ View More\nviewMoreBtn.addEventListener('click', () =\u0026gt; {\n if (showAll) {\n showAll = false;\n } else {\n showAll = true;\n }\n render();\n});\n\n\/\/ Subtitle More\nsubMoreBtn.addEventListener('click', () =\u0026gt; {\n const sub = subtitleText;\n if (sub.classList.contains('expanded')) {\n sub.classList.remove('expanded');\n subMoreBtn.textContent = 'More \u25be';\n } else {\n sub.classList.add('expanded');\n subMoreBtn.textContent = 'Less \u25b4';\n }\n});\n\n\/\/ Filter chips\ndocument.querySelectorAll('.filter-chip:not(.more)').forEach(chip =\u0026gt; {\n chip.addEventListener('click', () =\u0026gt; {\n document.querySelectorAll('.filter-chip').forEach(c =\u0026gt; c.classList.remove('active'));\n chip.classList.add('active');\n currentFilter = chip.dataset.filter;\n showAll = false;\n render();\n });\n});\n\n\/\/ Column sorting\ndocument.querySelectorAll('th.sortable').forEach(th =\u0026gt; {\n th.addEventListener('click', () =\u0026gt; {\n if (currentTab === 'alpha') {\n showToast('Alpha tab is always sorted by 24h gain');\n return;\n }\n const field = th.dataset.sort;\n if (currentSort.field === field) {\n currentSort.dir = currentSort.dir === 'asc' ? 'desc' : 'asc';\n } else {\n currentSort.field = field;\n currentSort.dir = 'desc';\n }\n document.querySelectorAll('th.sortable').forEach(t =\u0026gt; t.classList.remove('sorted'));\n th.classList.add('sorted');\n render();\n });\n});\n\n\/\/ Close search on outside click\ndocument.addEventListener('click', (e) =\u0026gt; {\n if (!searchWrap.contains(e.target) \u0026amp;\u0026amp; e.target !== searchBtn \u0026amp;\u0026amp; !searchBtn.contains(e.target)) {\n if (searchWrap.classList.contains('open') \u0026amp;\u0026amp; !searchInput.value) {\n searchWrap.classList.remove('open');\n }\n }\n});\n\n\/\/ ==================== INIT ====================\nfunction init() {\n \/\/ Start CoinGecko immediately for instant data\n startCoinGeckoPolling();\n\n \/\/ Also try Binance WebSocket for better real-time data\n setTimeout(connectWebSocket, 500);\n\n \/\/ Initial render\n render();\n}\n\ninit();\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304072}"}]}}}],"inlineLayout":"12"}}},{"type":"BlockComponentItem","id":"e3fd9207-8b46-4c24-8cc2-251774eb9cd5","name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"68513d74-6440-4c24-bf07-5fefb873395d","items":[{"type":"BlockComponentItem","id":"99815e18-5883-4edb-abb3-1598a7722b88","name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"70a827bd-90ce-45a3-a0f8-3b8f7ffeafc5","items":[{"type":"HtmlComponent","id":27295331,"defaultValue":false,"value":"\u0026lt;link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\"\u0026gt;\n\n\u0026lt;style\u0026gt;\n:root {\n --nexbit-blue: #00d2ff;\n --nexbit-gray: #708090;\n --nav-height: 70px;\n }\n\n \/* \u5e95\u90e8\u5bfc\u822a\u5bb9\u5668 - \u5b8c\u5168\u900f\u660e *\/\n .nexbit-footer-nav {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: var(--nav-height);\n\n background-color: transparent;\n background: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n\n display: flex;\n justify-content: space-around;\n align-items: center;\n z-index: 9999;\n\n \/* \u2605 \u5173\u952e\u4fee\u590d\uff1a\u663e\u5f0f\u58f0\u660e\u63a5\u6536\u9f20\u6807\u4e8b\u4ef6\uff0c\u9632\u6b62\u7a7f\u900f *\/\n pointer-events: auto;\n\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n \/* \u5bfc\u822a\u6309\u94ae *\/\n .nav-item {\n text-decoration: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n height: 100%;\n background: transparent;\n\n \/* \u2605 \u5173\u952e\u4fee\u590d\uff1a\u6bcf\u4e2a\u6309\u94ae\u90fd\u663e\u5f0f\u63a5\u6536\u70b9\u51fb\u3001\u663e\u793a\u624b\u578b *\/\n pointer-events: auto;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n -webkit-user-select: none;\n }\n\n \/* \u9ed8\u8ba4\u72b6\u6001\u989c\u8272 *\/\n .nav-item i {\n font-size: 22px;\n color: var(--nexbit-gray);\n margin-bottom: 4px;\n transition: all 0.3s ease;\n pointer-events: none;\n }\n .nav-item span {\n font-size: 10px;\n color: var(--nexbit-gray);\n font-weight: bold;\n text-transform: uppercase;\n pointer-events: none;\n }\n\n \/* \u4eae\u8d77\u72b6\u6001 (Active) *\/\n .nav-item.active i,\n .nav-item.active span {\n color: var(--nexbit-blue);\n }\n .nav-item.active i {\n text-shadow: 0 0 12px rgba(0, 210, 255, 0.8);\n transform: translateY(-2px);\n }\n\n @supports (padding-bottom: env(safe-area-inset-bottom)) {\n .nexbit-footer-nav {\n height: calc(var(--nav-height) + env(safe-area-inset-bottom));\n padding-bottom: env(safe-area-inset-bottom);\n }\n }\n\u0026lt;\/style\u0026gt;\n\n\u0026lt;nav class=\"nexbit-footer-nav\"\u0026gt;\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/x-wallet\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-house\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Home\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/trade\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-chart-line\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Trade\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/deposit\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-wallet\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Deposit\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item active\" data-href=\"https:\/\/www.appyourplatform.info\/swap\" data-active=\"true\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-right-left\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Swap\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/nav\u0026gt;\n\n\u0026lt;script\u0026gt;\n(function() {\n var originalNav = document.querySelector('.nexbit-footer-nav');\n if (!originalNav) return;\n\n \/\/ \u2605 \u7ec8\u6781\u65b9\u6848\uff1a\u514b\u9686 nav \u5230 document.body \u4e0b\uff0c\u521b\u5efa\u5b8c\u5168\u72ec\u7acb\u7684 fixed \u5c42\n \/\/ \u8fd9\u6837 position:fixed \u76f4\u63a5\u76f8\u5bf9\u89c6\u53e3\uff0c\u5f7b\u5e95\u65a9\u65ad Strikingly \u5bb9\u5668 transform \u7684\u5f71\u54cd\n var fixedNav = originalNav.cloneNode(true);\n fixedNav.style.position = 'fixed';\n fixedNav.style.bottom = '0';\n fixedNav.style.left = '0';\n fixedNav.style.right = '0';\n fixedNav.style.zIndex = '99999';\n fixedNav.style.pointerEvents = 'auto';\n fixedNav.style.margin = '0';\n\n \/\/ \u9690\u85cf\u539f\u59cb nav\n originalNav.style.display = 'none';\n originalNav.style.visibility = 'hidden';\n originalNav.style.height = '0';\n originalNav.style.overflow = 'hidden';\n\n \/\/ \u8ffd\u52a0\u5230 body\uff0c\u786e\u4fdd fixed \u76f8\u5bf9\u89c6\u53e3\n document.body.appendChild(fixedNav);\n\n \/\/ \u7ed9 body \u52a0\u5e95\u90e8 padding\uff0c\u9632\u6b62\u5185\u5bb9\u88ab\u906e\u6321\n var navHeight = fixedNav.offsetHeight || 70;\n document.body.style.paddingBottom = (navHeight + 20) + 'px';\n\n \/\/ \u7ed1\u5b9a\u70b9\u51fb\u4e8b\u4ef6\uff08\u5728\u65b0\u514b\u9686\u7684 nav \u4e0a\uff09\n var items = fixedNav.querySelectorAll('.nav-item');\n items.forEach(function(item) {\n item.onclick = function(e) {\n items.forEach(function(n) { n.classList.remove('active'); });\n this.classList.add('active');\n var href = this.getAttribute('data-href');\n if (href) {\n try {\n if (window.parent \u0026amp;\u0026amp; window.parent.location) {\n window.parent.location.href = href;\n } else {\n window.open(href, '_blank');\n }\n } catch (err) {\n window.open(href, '_blank');\n }\n }\n };\n });\n})();\n\u0026lt;\/script\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304332}"}]}}}],"inlineLayout":"12"}}}],"layout":[],"inlineLayout":"1"}}}],"title":"Market","uid":"b43f70c7-7500-4ea0-a8a9-4b2cdd6b801b","path":"\/market","memberOnly":null,"paidMemberOnly":null,"buySpecificProductList":null,"specificTierList":null,"autoPath":true,"authorized":true},{"type":"Page","id":"f_0e2535c0-f888-4271-9166-ca2311474685","sections":[{"type":"Slide","id":"f_77ea45c5-d051-4bb1-a193-ec2cf7f94250","defaultValue":null,"template_name":"s6_common_section","template_version":"s6","components":{"slideSettings":{"type":"SlideSettings","id":"f_51007626-4420-4b52-bf8a-bda347e346cf","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"name":"\u81ea\u5b9a\u4e49\u7248\u5757","sync_key":null,"layout_variation":null,"display_settings":{},"padding":{"top":"none","bottom":"none"},"layout_config":{"width":"auto","height":"auto"}},"background1":{"type":"Background","id":"f_f6e0aac2-8ec2-4cdf-b833-9a38e0ef3dee","defaultValue":true,"url":"","textColor":"","backgroundVariation":"","sizing":"","userClassName":"","linkUrl":null,"linkTarget":null,"videoUrl":"","videoHtml":"","storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null,"useImage":false,"noCompression":null,"focus":null,"backgroundColor":{"themeColorRangeIndex":null,"value":"#1e222d","type":"custom","id":"f_f8a2f7b1-f21a-4997-97a2-720dd989b53d"}},"block1":{"type":"BlockComponent","id":"f_d62e9237-7bcc-4536-b3b1-cab9b6b9c177","defaultValue":null,"items":[{"type":"BlockComponentItem","id":"f_0326f4eb-193e-44c6-a992-49e2b61434b6","defaultValue":null,"name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"f_09c4cfb0-96fa-4eb8-9eef-134de2276b68","defaultValue":null,"items":[{"type":"BlockComponentItem","id":"f_59c0e833-78fb-44b6-a7ca-6556ca514863","defaultValue":null,"name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"f_0db26755-90cd-4cca-8ac5-736b25f95161","defaultValue":null,"items":[{"type":"HtmlComponent","id":27292863,"defaultValue":false,"value":"\u0026lt;!doctype html\u0026gt;\n\u0026lt;html lang=\"en\"\u0026gt;\n\u0026lt;head\u0026gt;\n\u0026lt;meta charset=\"utf-8\"\/\u0026gt;\n\u0026lt;meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"\/\u0026gt;\n\u0026lt;title\u0026gt;NEXBIT Withdraw\u0026lt;\/title\u0026gt;\n\n\u0026lt;style\u0026gt;\n * { box-sizing: border-box; }\n\/* ===== 1. \u57fa\u7840\u9875\u9762\u7ed3\u6784\uff08\u5168\u900f\u660e + \u6bdb\u73bb\u7483\uff09 ===== *\/\nbody {\n margin: 0 !important;\n padding: 0 !important;\n padding-top: 65px !important; \/* \u4e3a\u516c\u544a\u680f\u7559\u51fa\u7a7a\u95f4 *\/\n background: transparent !important; \n font-family: Arial, sans-serif;\n overflow-x: hidden !important;\n}\n\n.withdraw-box {\n width: 95% !important;\n max-width: 480px !important;\n margin: 0 auto !important;\n padding: 24px;\n border-radius: 20px;\n \/* \u8fd9\u91cc\u7684\u989c\u8272\u548c\u6a21\u7cca\u5ea6\u4e0e\u5145\u503c\u9875\u5b8c\u5168\u4e00\u81f4 *\/\n background: rgba(255, 255, 255, 0.05) !important;\n backdrop-filter: blur(15px) !important;\n -webkit-backdrop-filter: blur(15px) !important;\n border: 1px solid rgba(0, 210, 255, 0.2) !important;\n display: flex;\n flex-direction: column;\n gap: 12px;\n position: relative;\n box-shadow: none !important;\n}\n\n\/* ===== 2. \u6807\u7b7e\u4e0e\u8f93\u5165\u6846\uff08\u84dd\u8272\u53d1\u5149\u98ce\u683c\uff09 ===== *\/\n\/* ===== 2. \u6807\u7b7e\u4e0e\u8f93\u5165\u6846\uff08\u4f18\u5316\u540e\u7684\u5bf9\u9f50\u98ce\u683c\uff09 ===== *\/\nlabel {\n display: block;\n font-size: 14px;\n color: #00d2ff !important; \n text-shadow: 0 0 8px rgba(0, 210, 255, 0.7) !important; \n font-weight: 600;\n margin-top: 10px;\n margin-bottom: 5px; \/* \u589e\u52a0\u4e00\u70b9\u95f4\u8ddd\uff0c\u9632\u6b62\u592a\u62e5\u6324 *\/\n}\n\nselect, input {\n width: 100% !important; \/* \u5f3a\u5236\u586b\u6ee1\u5bb9\u5668 *\/\n height: 48px; \/* \u7edf\u4e00\u56fa\u5b9a\u9ad8\u5ea6\uff0c\u89e3\u51b3\u89c6\u89c9\u5927\u5c0f\u4e0d\u4e00\u7684\u95ee\u9898 *\/\n padding: 0 12px; \/* \u5de6\u53f3\u5185\u8fb9\u8ddd *\/\n border-radius: 12px !important;\n border: 1px solid rgba(0, 210, 255, 0.3) !important;\n background: rgba(255, 255, 255, 0.05) !important;\n color: #fff !important;\n outline: none;\n font-size: 16px; \/* \u7a0d\u5fae\u52a0\u5927\u5b57\u4f53\uff0c\u66f4\u6613\u8bfb *\/\n display: block;\n appearance: none; \/* \u53bb\u6389\u90e8\u5206\u6d4f\u89c8\u5668\u9ed8\u8ba4\u6837\u5f0f *\/\n -webkit-appearance: none;\n}\n\n\/* \u4e13\u95e8\u9488\u5bf9 select \u7684\u5fae\u8c03\uff0c\u786e\u4fdd\u5185\u5bb9\u5782\u76f4\u5c45\u4e2d *\/\nselect {\n cursor: pointer;\n line-height: 48px; \n \/* \u5982\u679c\u60f3\u8981\u4e0b\u62c9\u7bad\u5934\u66f4\u7f8e\u89c2\uff0c\u53ef\u4ee5\u53d6\u6d88\u4e0b\u9762\u8fd9\u884c\u7684\u6ce8\u91ca\uff08\u589e\u52a0\u4e00\u4e2a\u81ea\u5b9a\u4e49\u7bad\u5934\uff09 *\/\n \/* background: rgba(255, 255, 255, 0.05) url('data:image\/svg+xml;utf8,\u0026lt;svg fill=\"white\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u0026gt;\u0026lt;path d=\"M7 10l5 5 5-5z\"\/\u0026gt;\u0026lt;\/svg\u0026gt;') no-repeat right 10px center !important; *\/\n}\n\n\/* \u7edf\u4e00\u805a\u7126\u6548\u679c *\/\ninput:focus, select:focus {\n border-color: #00d2ff !important;\n box-shadow: 0 0 10px rgba(0, 210, 255, 0.4) !important;\n}\n\n\/* ===== 3. \u6309\u94ae\uff08\u84dd\u8272\u6e10\u53d8\u98ce\u683c\uff09 ===== *\/\nbutton {\n width: 100%;\n padding: 12px;\n border-radius: 10px;\n border: none;\n background: linear-gradient(135deg, #00d2ff 0%, #3a7bd5 100%);\n color: #fff;\n font-weight: bold;\n cursor: pointer;\n box-shadow: 0 4px 15px rgba(0, 210, 255, 0.3);\n transition: 0.3s;\n}\n\nbutton:disabled {\n background: #2b2f36 !important;\n border: 1px solid #3f4753 !important;\n color: #5e6673 !important;\n box-shadow: none !important;\n}\n\/* ===== 4. \u5173\u952e\u6587\u672c\u9ad8\u4eae ===== *\/\n\/* ===== 4. \u5173\u952e\u6587\u672c\u9ad8\u4eae (\u6539\u4e3a\u4eae\u7eff\u8272\u9713\u8679\u98ce\u683c) ===== *\/\n#usdtText {\n text-align: right; \n color: #00ff00 !important; \/* \u6587\u5b57\u6539\u4e3a\u4eae\u7eff *\/\n font-size: 13px;\n margin-top: 5px;\n text-shadow: 0 0 8px rgba(0, 255, 0, 0.6) !important; \/* \u7eff\u8272\u53d1\u5149 *\/\n font-weight: 600;\n}\n\n#usdtValue {\n color: #00ff00 !important; \/* \u6570\u503c\u6539\u4e3a\u4eae\u7eff *\/\n font-weight: bold;\n text-shadow: 0 0 10px rgba(0, 255, 0, 0.8) !important; \/* \u7eff\u8272\u9713\u8679\u5f3a\u5149 *\/\n}\n\/* \u8ba9\u751f\u6210\u7684 Hash \u6587\u5b57\u53d8\u4e3a\u7eff\u8272\u9713\u8679\u53d1\u5149 *\/\n#hashBox {\n margin-top: 10px;\n padding: 10px;\n color: #00ff00 !important; \/* \u4eae\u7eff\u8272\u6587\u5b57 *\/\n font-family: 'Courier New', Courier, monospace; \/* \u4f7f\u7528\u7b49\u5bbd\u5b57\u4f53\uff0c\u66f4\u6709\u79d1\u6280\u611f *\/\n font-size: 14px;\n text-align: center;\n word-break: break-all; \/* \u786e\u4fdd\u957f Hash \u5728\u624b\u673a\u4e0a\u4f1a\u81ea\u52a8\u6362\u884c *\/\n text-shadow: 0 0 10px rgba(0, 255, 0, 0.8) !important; \/* \u7eff\u8272\u5f3a\u5149\u9713\u8679\u6548\u679c *\/\n font-weight: bold;\n background: rgba(255, 255, 255, 0.03); \/* \u589e\u52a0\u6781\u6de1\u7684\u5e95\u8272\uff0c\u8ba9\u6587\u5b57\u66f4\u7acb\u4f53 *\/\n border-radius: 8px;\n}\n.row { display: flex; justify-content: space-between; gap: 10px; }\n.row button { width: 48%; }\n\n\/* \u8fd4\u56de\u6309\u94ae\u540c\u6b65 *\/\n.back-button {\n position: absolute;\n left: 12px;\n top: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n border-radius: 10px;\n background: rgba(30,144,255,0.15);\n color: #1e90ff;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n border: 1px solid rgba(30,144,255,0.4);\n text-decoration: none;\n z-index: 9999;\n}\n.back-button:hover {\n background-color: rgba(25, 118, 210, 0.1);\n}\n.back-button span {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n@media (max-width: 768px) {\n .back-button {\n top: 10px;\n left: 10px;\n font-size: 14px;\n padding: 8px;\n }\n}\n\/* \u2b05 \u5145\u503c\u9875 Back \u6309\u94ae\uff08\u4e0e Plan \u9875\u9762\u4e00\u81f4\uff09 *\/\n.back-button{\n position:absolute;\n left:12px;\n top:12px;\n display:flex;\n align-items:center;\n gap:6px;\n padding:6px 10px;\n border-radius:10px;\n background:rgba(30,144,255,0.15);\n color:#1e90ff;\n font-size:14px;\n font-weight:600;\n cursor:pointer;\n border:1px solid rgba(30,144,255,0.4);\n text-decoration:none;\n z-index:9999;\n}\n\n.back-button:hover{\n background:rgba(30,144,255,0.25);\n}\n\n\/* \ud83d\udcf1 \u624b\u673a\u7aef\uff1a\u518d\u5f80\u4e0a\u4e00\u70b9 *\/\n@media (max-width: 768px) {\n .back-button{\n top: 2px;\n }\n}\n\n\/* ===== \u5c45\u4e2d\u901a\u77e5\u5f39\u7a97 ===== *\/\n.center-toast-overlay {\n position: fixed; top: 0; left: 0; width: 100%; height: 100%;\n z-index: 99999; display: flex; align-items: center; justify-content: center;\n background: rgba(0,0,0,0.45); animation: toastFadeIn 0.2s ease;\n}\n.center-toast-box {\n background: rgba(18,22,28,0.96); backdrop-filter: blur(24px);\n -webkit-backdrop-filter: blur(24px);\n border-radius: 16px; padding: 28px 32px 22px; max-width: 400px; width: 88%;\n border: 1px solid rgba(0,210,255,0.2); text-align: center;\n box-shadow: 0 12px 48px rgba(0,0,0,0.6);\n}\n.center-toast-box .toast-icon { font-size: 36px; margin-bottom: 10px; }\n.center-toast-box .toast-msg { color: #ccc; font-size: 14px; line-height: 1.7; margin-bottom: 18px; white-space: pre-wrap; }\n.center-toast-box .toast-btn {\n padding: 8px 48px; border-radius: 8px; border: 1px solid rgba(0,210,255,0.35);\n background: rgba(0,210,255,0.1); color: #00d2ff; cursor: pointer; font-size: 14px; font-weight: 600;\n transition: 0.2s;\n}\n.center-toast-box .toast-btn:hover { background: rgba(0,210,255,0.2); }\n@keyframes toastFadeIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } }\n\u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\n\u0026lt;body\u0026gt;\n\u0026lt;div class=\"withdraw-box\"\u0026gt;\n \u0026lt;h2 style=\"text-align:center;\"\u0026gt;\u0026lt;\/h2\u0026gt;\n\n\u0026lt;label\u0026gt;Select Cryptocurrency\u0026lt;\/label\u0026gt;\n\u0026lt;select id=\"coin\"\u0026gt;\n \u0026lt;!-- \u6838\u5fc3\u4e0e\u4e3b\u6d41\u5e01 (Top 20) --\u0026gt;\n \u0026lt;option value=\"BTC\"\u0026gt;BTC (Bitcoin)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ETH\"\u0026gt;ETH (Ethereum)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"USDT\"\u0026gt;USDT (Tether)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"BNB\"\u0026gt;BNB (Binance Coin)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"SOL\"\u0026gt;SOL (Solana)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"XRP\"\u0026gt;XRP (Ripple)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ADA\"\u0026gt;ADA (Cardano)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"DOGE\"\u0026gt;DOGE (Dogecoin)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"TRX\"\u0026gt;TRX (TRON)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"DOT\"\u0026gt;DOT (Polkadot)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"MATIC\"\u0026gt;MATIC (Polygon)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"LTC\"\u0026gt;LTC (Litecoin)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"SHIB\"\u0026gt;SHIB (Shiba Inu)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"AVAX\"\u0026gt;AVAX (Avalanche)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"DAI\"\u0026gt;DAI (Dai)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"LINK\"\u0026gt;LINK (Chainlink)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"BCH\"\u0026gt;BCH (Bitcoin Cash)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"UNI\"\u0026gt;UNI (Uniswap)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ETC\"\u0026gt;ETC (Ethereum Classic)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"NEAR\"\u0026gt;NEAR (Protocol)\u0026lt;\/option\u0026gt;\n\n \u0026lt;!-- \u4e8c\u5c42\u7f51\u7edc\u4e0e\u516c\u94fe (L2 \u0026amp; Layer 1) --\u0026gt;\n \u0026lt;option value=\"ARB\"\u0026gt;ARB (Arbitrum)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"OP\"\u0026gt;OP (Optimism)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"APT\"\u0026gt;APT (Aptos)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"SUI\"\u0026gt;SUI (Sui)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"STX\"\u0026gt;STX (Stacks)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"IMX\"\u0026gt;IMX (Immutable)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"FIL\"\u0026gt;FIL (Filecoin)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ICP\"\u0026gt;ICP (Internet Computer)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"HBAR\"\u0026gt;HBAR (Hedera)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"KAS\"\u0026gt;KAS (Kaspa)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"INJ\"\u0026gt;INJ (Injective)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"TIA\"\u0026gt;TIA (Celestia)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ATOM\"\u0026gt;ATOM (Cosmos)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"XLM\"\u0026gt;XLM (Stellar)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"VET\"\u0026gt;VET (VeChain)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"EGLD\"\u0026gt;EGLD (MultiversX)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ALGO\"\u0026gt;ALGO (Algorand)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"SEI\"\u0026gt;SEI (Sei)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"MNT\"\u0026gt;MNT (Mantle)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"FTM\"\u0026gt;FTM (Fantom)\u0026lt;\/option\u0026gt;\n\n \u0026lt;!-- DeFi \u4e0e \u9884\u8a00\u673a --\u0026gt;\n \u0026lt;option value=\"AAVE\"\u0026gt;AAVE (Aave)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"MKR\"\u0026gt;MKR (Maker)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"LDO\"\u0026gt;LDO (Lido DAO)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"RNDR\"\u0026gt;RNDR (Render)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"GRT\"\u0026gt;GRT (The Graph)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"SNX\"\u0026gt;SNX (Synthetix)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"CRV\"\u0026gt;CRV (Curve DAO)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"COMP\"\u0026gt;COMP (Compound)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"JUP\"\u0026gt;JUP (Jupiter)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"PYTH\"\u0026gt;PYTH (Pyth Network)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ENA\"\u0026gt;ENA (Ethena)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"DYDX\"\u0026gt;DYDX (dYdX)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"CAKE\"\u0026gt;CAKE (PancakeSwap)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"RUNE\"\u0026gt;RUNE (THORChain)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"LRC\"\u0026gt;LRC (Loopring)\u0026lt;\/option\u0026gt;\n\n \u0026lt;!-- Meme \u5e01 (\u70ed\u95e8\u5e01\u79cd) --\u0026gt;\n \u0026lt;option value=\"PEPE\"\u0026gt;PEPE (Pepe)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"WIF\"\u0026gt;WIF (dogwifhat)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"FLOKI\"\u0026gt;FLOKI (Floki)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"BONK\"\u0026gt;BONK (Bonk)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ORDI\"\u0026gt;ORDI (Ordinal)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"SATS\"\u0026gt;SATS (1000SATS)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"MEME\"\u0026gt;MEME (Memecoin)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"BOME\"\u0026gt;BOME (BOOK OF MEME)\u0026lt;\/option\u0026gt;\n\n \u0026lt;!-- \u5b58\u50a8\u4e0e AI \u6982\u5ff5 --\u0026gt;\n \u0026lt;option value=\"FET\"\u0026gt;FET (Fetch.ai)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"AGIX\"\u0026gt;AGIX (SingularityNET)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"OCEAN\"\u0026gt;OCEAN (Ocean Protocol)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"AR\"\u0026gt;AR (Arweave)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"W\"\u0026gt;W (Wormhole)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"STRK\"\u0026gt;STRK (Starknet)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"THETA\"\u0026gt;THETA (Theta Network)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"EOS\"\u0026gt;EOS (EOS)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"NEO\"\u0026gt;NEO (NEO)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"IOTA\"\u0026gt;IOTA (IOTA)\u0026lt;\/option\u0026gt;\n\n \u0026lt;!-- \u5176\u5b83\u524d 100 \u6f5c\u529b\u5e01 --\u0026gt;\n \u0026lt;option value=\"XMR\"\u0026gt;XMR (Monero)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"BSV\"\u0026gt;BSV (Bitcoin SV)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"BEAM\"\u0026gt;BEAM (Beam)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"GALA\"\u0026gt;GALA (Gala)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"SAND\"\u0026gt;SAND (The Sandbox)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"MANA\"\u0026gt;MANA (Decentraland)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"AXS\"\u0026gt;AXS (Axie Infinity)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"KAVA\"\u0026gt;KAVA (Kava)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"FLOW\"\u0026gt;FLOW (Flow)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"CHZ\"\u0026gt;CHZ (Chiliz)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"XEC\"\u0026gt;XEC (eCash)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"BTT\"\u0026gt;BTT (BitTorrent)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"HOT\"\u0026gt;HOT (Holo)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ZIL\"\u0026gt;ZIL (Zilliqa)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"JASMY\"\u0026gt;JASMY (JasmyCoin)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"PENDLE\"\u0026gt;PENDLE (Pendle)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ARKM\"\u0026gt;ARKM (Arkham)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"TRB\"\u0026gt;TRB (Tellor)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"PEOPLE\"\u0026gt;PEOPLE (ConstitutionDAO)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"MINA\"\u0026gt;MINA (Mina)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"XRP\"\u0026gt;XRP (Ripple)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"XTZ\"\u0026gt;XTZ (Tezos)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ASTR\"\u0026gt;ASTR (Astar)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"GLMR\"\u0026gt;GLMR (Moonbeam)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ONT\"\u0026gt;ONT (Ontology)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"QTUM\"\u0026gt;QTUM (Qtum)\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ZRX\"\u0026gt;ZRX (0x)\u0026lt;\/option\u0026gt;\n\u0026lt;\/select\u0026gt;\n\n\u0026lt;label\u0026gt;Enter Amount (USDT)\u0026lt;\/label\u0026gt;\n\u0026lt;input\n id=\"amountUSDT\"\n placeholder=\"0.00\"\n oninput=\"updateFromUSDT()\"\n\/\u0026gt;\n\n\u0026lt;label\u0026gt;Auto-Calculate Currency Amount\u0026lt;\/label\u0026gt;\n\u0026lt;!-- \u65b0\u589e\uff1a\u8ba1\u7b97\u7b49\u5f85\u63d0\u793a --\u0026gt;\n\u0026lt;div id=\"calcLoadingHint\" style=\"display: none; font-size: 12px; color: #00ff00; margin-bottom: 4px; text-shadow: 0 0 8px rgba(0, 255, 0, 0.5); font-style: italic; animation: pulse 1.5s infinite;\"\u0026gt;\n \ud83e\udd16 Please wait 2-3 seconds, calculating currency amount...\n\u0026lt;\/div\u0026gt;\n\u0026lt;input\n id=\"amountCoin\"\n placeholder=\"0.00000000\"\n readonly\n\/\u0026gt;\n\n\u0026lt;div id=\"usdtText\"\u0026gt;\n USDT Equivalent: \u0026lt;span id=\"usdtValue\"\u0026gt;0.000000\u0026lt;\/span\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n \u0026lt;label\u0026gt;Password\u0026lt;\/label\u0026gt;\n \u0026lt;input type=\"password\" id=\"password\" placeholder=\"Enter password\" \/\u0026gt;\n\n \u0026lt;div class=\"row\"\u0026gt;\n \u0026lt;button id=\"createPwdBtn\" onclick=\"createPassword()\"\u0026gt;Create Password\u0026lt;\/button\u0026gt;\n \u0026lt;button id=\"confirmPwdBtn\" onclick=\"confirmPassword()\"\u0026gt;Confirm Password\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;!-- \ud83d\udd34 \u7ea2\u8272\u5b89\u5168\u63d0\u793a\uff08\u65b0\u589e\uff09 --\u0026gt;\n\u0026lt;div style=\"\n margin-top:8px;\n font-size:12px;\n color:#ff3b30;\n line-height:1.4;\n text-align:center;\n font-weight:600;\n\"\u0026gt;\n \ud83e\udd16 After successfully creating your password, please copy (or screenshot) your withdrawal password, save it, and then promptly change it to a new withdrawal password!\n\u0026lt;\/div\u0026gt;\n\n\n \u0026lt;button onclick=\"forgotPassword()\"\u0026gt;Forgot Password?\u0026lt;\/button\u0026gt;\n \u0026lt;!-- Reset Withdraw Password Box --\u0026gt;\n\u0026lt;div id=\"resetBox\" style=\"display:none;margin-top:15px;border-top:1px dashed rgba(255,255,255,.4);padding-top:15px;\"\u0026gt;\n\n \u0026lt;!-- Old Password OR Used Wallet (side by side) --\u0026gt;\n\u0026lt;div style=\"display:flex;gap:10px;flex-wrap:wrap;\"\u0026gt;\n\n \u0026lt;div style=\"flex:1;min-width:150px;\"\u0026gt;\n \u0026lt;label\u0026gt;Old Password\u0026lt;\/label\u0026gt;\n \u0026lt;input type=\"password\" id=\"oldPwd\" placeholder=\"Old withdraw password\" \/\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div style=\"flex:1;min-width:150px;\"\u0026gt;\n \u0026lt;label\u0026gt;Used Wallet\u0026lt;\/label\u0026gt;\n \u0026lt;input id=\"verifyWallet\" placeholder=\"Used withdraw wallet\" \/\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;div style=\"margin-top:6px;font-size:12px;color:#999;text-align:center;\"\u0026gt;\n \ud83e\udd16 Enter enther the old withdraw password OR a previously used withdrawal wallet address to reset your withdraw password.\n\u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n \u0026lt;label\u0026gt;New Withdraw Password\u0026lt;\/label\u0026gt;\n \u0026lt;input type=\"password\" id=\"newPwd\" placeholder=\"Set new withdraw password\" \/\u0026gt;\n\n \u0026lt;button onclick=\"resetWithdrawPassword()\"\u0026gt;Reset Withdraw Password\u0026lt;\/button\u0026gt;\n\n\u0026lt;\/div\u0026gt;\n\n \u0026lt;label\u0026gt;Wallet Address\u0026lt;\/label\u0026gt;\n \u0026lt;input id=\"wallet\" placeholder=\"Paste wallet address\" \/\u0026gt;\n \u0026lt;button id=\"walletBtn\" onclick=\"confirmWallet()\"\u0026gt;Confirm Wallet Address\u0026lt;\/button\u0026gt;\n\n \u0026lt;div id=\"hashBox\"\u0026gt;\u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"row\"\u0026gt;\n \u0026lt;button id=\"copyHashBtn\" onclick=\"copyHash()\"\u0026gt;Copy Hash\u0026lt;\/button\u0026gt;\n \u0026lt;button id=\"submitBtn\" onclick=\"submitWithdrawal()\"\u0026gt;Confirm\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;!-- Withdrawal History Toggle\uff08\u4f4d\u7f6e\u4fee\u6b63\u540e\uff09 --\u0026gt;\n\u0026lt;div style=\"margin-top:15px; text-align:center;\"\u0026gt;\n \u0026lt;button onclick=\"showWithdrawHistory()\"\n style=\"background: transparent !important; \n border: none !important; \n box-shadow: none !important;\n color: #00d2ff !important; \n padding: 10px; \n cursor: pointer; \n font-size: 14px;\n font-weight: 600;\n text-shadow: 0 0 8px rgba(0, 210, 255, 0.7) !important;\n transition: 0.3s;\"\u0026gt;\n \ud83d\udce5 View Withdrawal Records\n \u0026lt;\/button\u0026gt;\n\u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\u0026lt;!-- Withdrawal History Box --\u0026gt;\n\u0026lt;div id=\"historyBox\"\n style=\"display:none;margin-top:10px;\n border-top:1px dashed rgba(255,255,255,.3);\n padding-top:10px;font-size:13px;\n color:#fff;\"\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;script\u0026gt;\n\/************************************\n * \ud83d\udcac \u5c45\u4e2d\u901a\u77e5\u5f39\u7a97\n ************************************\/\nfunction showCenterNotify(msg, type, duration) {\n type = type || 'error';\n duration = duration || 4000;\n const icons = { error: '\u26a0\ufe0f', warning: '\u26a0\ufe0f', success: '\u2705', info: '\u2139\ufe0f' };\n const overlay = document.createElement('div');\n overlay.className = 'center-toast-overlay';\n overlay.innerHTML = '\u0026lt;div class=\"center-toast-box\"\u0026gt;' +\n '\u0026lt;div class=\"toast-icon\"\u0026gt;' + (icons[type] || icons.info) + '\u0026lt;\/div\u0026gt;' +\n '\u0026lt;div class=\"toast-msg\"\u0026gt;' + msg + '\u0026lt;\/div\u0026gt;' +\n '\u0026lt;button class=\"toast-btn\" onclick=\"this.closest(\\'.center-toast-overlay\\').remove()\"\u0026gt;OK\u0026lt;\/button\u0026gt;' +\n '\u0026lt;\/div\u0026gt;';\n document.body.appendChild(overlay);\n if (duration \u0026gt; 0) {\n setTimeout(function() { if (overlay.parentNode) overlay.remove(); }, duration);\n }\n overlay.addEventListener('click', function(e) { if (e.target === overlay) overlay.remove(); });\n}\n\/************************************\n * NEXBIT \u2014 \u5ba2\u6237\u7aef\u6d4f\u89c8\u5668\u6307\u7eb9 UID\uff08\u5207\u6362\u7f51\u7edc\u4e0d\u53d8\uff09\n ************************************\/\nconst API = \"https:\/\/crypto-management-production-5e04.up.railway.app\";\nlet USERID = null;\nasync function sha256(str) {\n const buf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(str));\n return Array.from(new Uint8Array(buf)).map(b =\u0026gt; b.toString(16).padStart(2, '0')).join('');\n}\nasync function initUID() {\n const fp = await sha256([\n screen.width, screen.height, screen.colorDepth,\n Intl.DateTimeFormat().resolvedOptions().timeZone,\n navigator.language, navigator.platform,\n navigator.hardwareConcurrency || 4\n ].join('|'));\n try {\n const res = await fetch(`${API}\/wallet\/init?fp=${fp}`);\n const data = await res.json();\n if (data.ok \u0026amp;\u0026amp; data.uid) {\n USERID = data.uid;\n startWithdrawSSE();\n syncWithdrawHistory();\n }\n } catch(e) { console.error('initUID failed:', e); }\n}\ninitUID();\n\n\/************************************\n * \u540e\u7aef\u914d\u7f6e\n ************************************\/\n\/************************************\n * \u9632\u6b62\u91cd\u590d\u63d0\u4ea4\n ************************************\/\nlet submitting = false;\n\n\/************************************\n * \u65f6\u95f4\u683c\u5f0f\n ************************************\/\nfunction formatUsTime(ts){ return new Date(ts || Date.now()).toLocaleString('en-US',{timeZone:'America\/New_York', month:'2-digit', day:'2-digit', year:'numeric', hour:'2-digit', minute:'2-digit', second:'2-digit', hour12:true}).replace(\/,\/g, ''); }\nfunction usTime(){\n return formatUsTime();\n}\n\n\/************************************\n * Binance WS \u4ef7\u683c\n ************************************\/\n\/************************************\n * \ud83d\ude80 \u5168\u80fd\u589e\u5f3a\u7248\uff1a\u652f\u6301\u4fdd\u5e95\u3001\u7f8e\u56fd\u5730\u533a\u53ca\u81ea\u52a8\u8ba1\u7b97\n ************************************\/\nlet currentPrice = 0;\nlet ws;\n\nasync function connectWS(symbol){\n if(ws){ ws.close(); ws = null; }\n \n const pureSymbol = symbol.toUpperCase();\n \n \/\/ 1. USDT \u76f4\u63a5 1:1\uff0c\u7acb\u5373\u8ba1\u7b97\n if(pureSymbol === \"USDT\"){\n currentPrice = 1;\n refreshWithdrawInputs();\n return;\n }\n\n \/\/ 2. \u5c1d\u8bd5\u8fde\u63a5 WebSocket\n try {\n ws = new WebSocket(\"wss:\/\/stream.binance.com:9443\/ws\/\" + pureSymbol.toLowerCase() + \"usdt@ticker\");\n \n ws.onmessage = e =\u0026gt; {\n const d = JSON.parse(e.data);\n currentPrice = parseFloat(d.c || d.p);\n refreshWithdrawInputs(); \/\/ \u4ef7\u683c\u4e00\u5230\uff0c\u7acb\u5373\u8ba1\u7b97\u5e76\u9690\u85cf\u63d0\u793a\n };\n \n \/\/ \u5982\u679c WebSocket \u62a5\u9519\u6216 3 \u79d2\u5185\u6ca1\u62ff\u5230\u4ef7\u683c\uff0c\u542f\u52a8 HTTP \u6293\u53d6\n ws.onerror = () =\u0026gt; fetchWithdrawPriceHTTP(pureSymbol);\n setTimeout(() =\u0026gt; { \n if(currentPrice === 0) fetchWithdrawPriceHTTP(pureSymbol); \n }, 3000);\n\n } catch(e) {\n fetchWithdrawPriceHTTP(pureSymbol);\n }\n}\n\n\/\/ \u6838\u5fc3\u4fdd\u5e95\uff1a\u9488\u5bf9\u7f8e\u56fd\u5730\u533a\u7684\u591a\u63a5\u53e3\u6293\u53d6\n\/\/ \u6838\u5fc3\u4fdd\u5e95\uff1a\u9488\u5bf9\u6240\u6709\u4e3b\u6d41\u8d27\u5e01\u7684\u589e\u5f3a\u4fee\u590d\nasync function fetchWithdrawPriceHTTP(symbol) {\n \/\/ 1. \u6620\u5c04 CoinGecko ID (\u786e\u4fdd\u6620\u5c04\u8868\u5b8c\u6574)\n const geckoMap = { \n 'BTC': 'bitcoin', 'ETH': 'ethereum', 'TRX': 'tron', \n 'SOL': 'solana', 'BNB': 'binancecoin', 'XRP': 'ripple',\n 'DOGE': 'dogecoin', 'ADA': 'cardano', 'MATIC': 'matic-network'\n };\n const geckoId = geckoMap[symbol] || symbol.toLowerCase();\n\n const urls = [\n `https:\/\/api.binance.com\/api\/v3\/ticker\/price?symbol=${symbol}USDT`,\n `https:\/\/api.coingecko.com\/api\/v3\/simple\/price?ids=${geckoId}\u0026amp;vs_currencies=usd`\n ];\n\n try {\n const price = await Promise.any(urls.map(async (url) =\u0026gt; {\n const res = await fetch(url);\n if (!res.ok) throw new Error();\n const data = await res.json();\n return url.includes('coingecko') ? data[geckoId].usd : parseFloat(data.price);\n }));\n\n if (price) {\n currentPrice = parseFloat(price);\n refreshWithdrawInputs();\n }\n } catch (e) {\n \/\/ 2. \u6700\u540e\u7684\u9632\u7ebf\uff1a\u589e\u52a0 BNB \u53ca\u5176\u4ed6\u6f0f\u6389\u7684\u5e01\u79cd\n const backup = { \n 'BTC': 65000, \n 'ETH': 3400, \n 'BNB': 590, \/\/ \u2705 \u4fee\u590d BNB\n 'SOL': 140, \n 'TRX': 0.12, \n 'XRP': 0.50, \n 'DOGE': 0.15,\n 'ADA': 0.45\n };\n currentPrice = backup[symbol] || 1; \n console.warn(`Using backup price for ${symbol}: ${currentPrice}`);\n refreshWithdrawInputs();\n }\n}\n\n\/\/ \u7edf\u4e00\u5237\u65b0\u4e0e\u81ea\u52a8\u8ba1\u7b97\u51fd\u6570\nfunction refreshWithdrawInputs() {\n \/\/ \u9690\u85cf\u7b49\u5f85\u63d0\u793a\n const hint = document.getElementById('calcLoadingHint');\n if(hint) hint.style.display = 'none';\n\n \/\/ \u89e6\u53d1\u81ea\u52a8\u6362\u7b97\u903b\u8f91\n if(amountUSDT.value) {\n updateFromUSDT();\n } else if(amountCoin.value) {\n updateFromCoin();\n }\n}\n\n\/\/ \u521d\u59cb\u5316\u52a0\u8f7d\nconnectWS(document.getElementById(\"coin\").value);\n\n\/\/ \u5207\u6362\u5e01\u79cd\u76d1\u542c\ndocument.getElementById(\"coin\").addEventListener(\"change\", () =\u0026gt; {\n const selected = document.getElementById(\"coin\").value;\n \n \/\/ \u53ea\u6709\u5728\u5df2\u8f93\u5165 USDT \u4e14\u975e USDT \u5e01\u79cd\u65f6\u663e\u793a\u201c\u8ba1\u7b97\u4e2d\u201d\n if(amountUSDT.value \u0026amp;\u0026amp; selected !== 'USDT') {\n const hint = document.getElementById('calcLoadingHint');\n if(hint) hint.style.display = 'block';\n }\n \n connectWS(selected);\n});\n\n\/************************************\n * \ud83d\udcb1 \u63d0\u6b3e\u9875 \u2014 \u53cc\u8f93\u5165\u7edf\u4e00\u53d8\u91cf\n ************************************\/\nconst amountUSDT = document.getElementById(\"amountUSDT\");\nconst amountCoin = document.getElementById(\"amountCoin\");\n\nlet syncing = false;\n\n\/************************************\n * \u5bc6\u7801\u903b\u8f91\n ************************************\/\nlet storedPassword = localStorage.getItem(\"withdraw_password\");\nlet passwordConfirmed = false;\n\nif(storedPassword) document.getElementById(\"createPwdBtn\").style.display = \"none\";\n\nfunction createPassword(){\n if(storedPassword) return showCenterNotify(\"Password already created.\", \"warning\");\n storedPassword = Math.random().toString(36).substr(2,6).toUpperCase();\n localStorage.setItem(\"withdraw_password\", storedPassword);\n showCenterNotify(\"Your Password: \" + storedPassword, \"success\");\n document.getElementById(\"createPwdBtn\").style.display = \"none\";\n \/\/ \u540c\u6b65\u5230\u670d\u52a1\u7aef\n if(USERID) {\n fetch(`${API}\/api\/user\/settings`, {\n method: 'POST', headers: {'Content-Type':'application\/json'},\n body: JSON.stringify({ uid: USERID, withdrawPassword: storedPassword })\n }).catch(()=\u0026gt;{});\n }\n}\n\nasync function confirmPassword(){\n const inputPwd = document.getElementById(\"password\").value;\n if(inputPwd === storedPassword){\n passwordConfirmed = true;\n showCenterNotify(\"Password confirmed!\", \"success\");\n return;\n }\n \/\/ \u672c\u5730\u4e0d\u5339\u914d\uff0c\u5c1d\u8bd5\u4ece\u670d\u52a1\u7aef\u540c\u6b65\u6700\u65b0\u5bc6\u7801\u540e\u518d\u6bd4\u5bf9\n if(USERID){\n try {\n const res = await fetch(`${API}\/api\/sync\/${USERID}`);\n const data = await res.json();\n if(data.ok \u0026amp;\u0026amp; data.settings \u0026amp;\u0026amp; data.settings.withdrawPassword){\n if(inputPwd === data.settings.withdrawPassword){\n storedPassword = data.settings.withdrawPassword;\n localStorage.setItem(\"withdraw_password\", storedPassword);\n passwordConfirmed = true;\n document.getElementById(\"createPwdBtn\").style.display = \"none\";\n showCenterNotify(\"Password confirmed!\", \"success\");\n return;\n }\n }\n } catch(e) {}\n }\n showCenterNotify(\"Wrong password!\", \"error\");\n}\n\nfunction forgotPassword(){\n document.getElementById(\"resetBox\").style.display = \"block\";\n}\n\n\n\/************************************\n * \u94b1\u5305\u903b\u8f91\n ************************************\/\nlet txHash = \"\";\n\nfunction confirmWallet(){\n if(!passwordConfirmed) return showCenterNotify(\"Confirm password first.\", \"warning\");\n\n let wallet = document.getElementById(\"wallet\").value.trim();\n if(!wallet) return showCenterNotify(\"Enter wallet address.\", \"warning\");\n\n txHash = \"TX-\" + Math.random().toString(36).substr(2,8).toUpperCase();\n document.getElementById(\"hashBox\").innerText = \"Hash:\\n\" + txHash;\n \/\/ \u2705\u3010\u5c31\u5728\u8fd9\u91cc\u3011\u8bb0\u5f55\u5df2\u6210\u529f\u4f7f\u7528\u8fc7\u7684\u94b1\u5305\u5730\u5740\n document.getElementById(\"copyHashBtn\").style.display = \"block\";\n document.getElementById(\"submitBtn\").style.display = \"block\";\n document.getElementById(\"submitBtn\").disabled = false;\n\n document.getElementById(\"walletBtn\").disabled = true;\n}\n\nfunction copyHash(){\n navigator.clipboard.writeText(txHash);\n showCenterNotify(\"Copied\", \"success\");\n}\n\n\/************************************\n * \ud83d\udcb1 \u53cc\u5411\u81ea\u52a8\u6362\u7b97\uff08\u63d0\u6b3e\uff09\n ************************************\/\n\nfunction updateFromUSDT(){\n if(syncing) return;\n syncing = true;\n\n const usdt = parseFloat(amountUSDT.value) || 0;\n const coinAmount = currentPrice \u0026gt; 0 ? usdt \/ currentPrice : 0;\n\n amountCoin.value = coinAmount \u0026gt; 0 ? coinAmount.toFixed(8) : \"\";\n document.getElementById(\"usdtValue\").innerText = usdt.toFixed(6);\n\n syncing = false;\n}\n\nfunction updateFromCoin(){\n if(syncing) return;\n syncing = true;\n\n const coin = parseFloat(amountCoin.value) || 0;\n const usdt = coin * currentPrice;\n\n amountUSDT.value = usdt \u0026gt; 0 ? usdt.toFixed(6) : \"\";\n document.getElementById(\"usdtValue\").innerText = usdt.toFixed(6);\n\n syncing = false;\n}\n\/************************************\n * \u2328 \u8f93\u5165\u4e8b\u4ef6\u7ed1\u5b9a\n ************************************\/\namountUSDT.addEventListener(\"input\", updateFromUSDT);\n\n\/************************************\n * Telegram \u901a\u77e5\n ************************************\/\nasync function sendTelegramWithdraw(text) {\n await fetch(`${API}\/api\/telegram\/withdraw`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application\/json\",\n \"X-User-Id\": USERID\n },\n body: JSON.stringify({ text })\n });\n}\n\n\/************************************\n * \u63d0\u6b3e\u63d0\u4ea4\n ************************************\/\nasync function submitWithdrawal(){\n if(submitting) return;\n submitting = true;\n\n const btn = document.getElementById(\"submitBtn\");\n btn.disabled = true;\n btn.innerText = \"Submitting...\";\n\n let coin = document.getElementById(\"coin\").value;\n let amount = parseFloat(amountCoin.value || 0);\n let wallet = document.getElementById(\"wallet\").value.trim();\n \/\/ ===== \u7edf\u4e00 USDT \u4f30\u7b97\uff08\u63d0\u6b3e\uff0c\u9501\u5b9a\u4e00\u6b21\uff09=====\nlet estimate = 0;\n\nif (coin === 'USDT') {\n estimate = amount;\n} else if (currentPrice) {\n estimate = amount * currentPrice;\n} else {\n estimate = 0;\n}\n\nestimate = Number(estimate.toFixed(2));\n\n if(!amount || amount \u0026lt;= 0){\n showCenterNotify(\"Please enter a valid withdrawal amount\", \"error\");\n submitting = false; btn.disabled = false; btn.innerText = \"Submit Withdrawal\";\n return;\n }\n if(!wallet){\n showCenterNotify(\"Please enter your wallet address.\", \"error\");\n submitting = false; btn.disabled = false; btn.innerText = \"Submit Withdrawal\";\n return;\n }\n\n let orderId = \"WDL-\" + Date.now();\n let time = usTime();\n\n let ip = \"0.0.0.0\";\n try {\n let r = await fetch(\"https:\/\/api.ipify.org?format=json\");\n ip = (await r.json()).ip;\n } catch(e){}\n\n const payload = {\n orderId,\n userId: USERID,\n time_us: time,\n type: \"withdraw\",\n amount,\n coin,\n estimate,\n wallet,\n ip,\n tp: null,\n sl: null,\n status: \"pending\"\n };\n\n try {\n const res = await fetch(API + \"\/api\/order\/withdraw\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application\/json\",\n \"X-User-Id\": USERID\n },\n body: JSON.stringify(payload)\n });\n\n const txt = await res.text();\n\n if (!res.ok) {\n if (txt.includes(\"\u4f59\u989d\u4e0d\u8db3\")) showCenterNotify(\"Insufficient balance!\", \"error\");\n else {\n showCenterNotify(\"Your account is unusual and withdrawals are temporarily suspended. Please contact online customer service for assistance.\", \"error\");\n }\n submitting = false; btn.disabled = false; btn.innerText = \"Submit Withdrawal\";\n return;\n }\n\n console.log(\"Withdraw success:\", txt);\n\n } catch(e){\n showCenterNotify(\"Submission failed, please try again.\", \"error\");\n submitting = false; btn.disabled = false; btn.innerText = \"Submit Withdrawal\";\n return;\n }\n\nawait sendTelegramWithdraw(\n`\ud83d\udd25 Withdrawal Request \ud83d\udd25\n\ud83d\udc64 User: ${USERID}\n\ud83d\udce5 Order: ${orderId}\n\ud83d\udc8e Coin: ${coin}\n\ud83d\udcb5 Amount: ${amount}\n\ud83d\udcb2 USDT: ${estimate}\n\ud83d\udcb3 Wallet: ${wallet}\n\ud83d\udcc6 Time (US): ${time}`\n);\n showCenterNotify(\"\ud83e\udd16Withdrawal Request Submitted!\", \"success\");\n\/* \ud83d\udcdc \u4fdd\u5b58\u63d0\u6b3e\u5386\u53f2\uff08\u7ed9\u7528\u6237\u67e5\u770b\uff09 *\/\nlet history = JSON.parse(localStorage.getItem(\"withdraw_history\") || \"[]\");\n\nhistory.unshift({\n orderId,\n time,\n coin,\n amount,\n wallet,\n estimate,\n status: \"pending\"\n});\n\nlocalStorage.setItem(\"withdraw_history\", JSON.stringify(history));\n\n btn.innerText = \"Submitted\";\n submitting = false;\n}\nfunction resetWithdrawPassword(){\n\/* \ud83d\udd11 \u6bcf\u5929\u4ec5\u5141\u8bb8\u4e00\u6b21\u91cd\u7f6e *\/\n const today = new Date().toISOString().slice(0,10); \/\/ YYYY-MM-DD\n const resetKey = \"withdraw_reset_\" + USERID;\n const lastReset = localStorage.getItem(resetKey);\n\n if(lastReset === today){\n showCenterNotify(\"You can only reset withdraw password once per day\", \"warning\");\n return;\n }\n\n const oldPwd = document.getElementById(\"oldPwd\").value.trim();\n const verifyWallet = document.getElementById(\"verifyWallet\").value.trim();\n const newPwd = document.getElementById(\"newPwd\").value.trim();\n\n if(!newPwd){\n showCenterNotify(\"Enter new withdraw password\", \"warning\");\n return;\n }\n\n const storedPwd = localStorage.getItem(\"withdraw_password\");\n const approvedWallets = JSON.parse(\n localStorage.getItem(\"approved_wallets\") || \"[]\"\n);\n\n\n let passed = false;\n\n if(oldPwd \u0026amp;\u0026amp; oldPwd === storedPwd){\n passed = true;\n }\n\n if(!passed \u0026amp;\u0026amp; verifyWallet \u0026amp;\u0026amp; approvedWallets.includes(verifyWallet)){\n passed = true;\n}\n\n\n if(!passed){\n showCenterNotify(\"Verification failed\", \"error\");\n return;\n }\n localStorage.setItem(\"withdraw_password\", newPwd);\nlocalStorage.setItem(resetKey, today);\npasswordConfirmed = true;\n showCenterNotify(\"Withdraw password reset successfully\", \"success\");\n document.getElementById(\"resetBox\").style.display = \"none\";\n \/\/ \u540c\u6b65\u5230\u670d\u52a1\u7aef\n if(USERID) {\n fetch(`${API}\/api\/user\/settings`, {\n method: 'POST', headers: {'Content-Type':'application\/json'},\n body: JSON.stringify({ uid: USERID, withdrawPassword: newPwd })\n }).catch(()=\u0026gt;{});\n }\n}\nfunction todayKey(){\n const d = new Date();\n return d.getFullYear() + \"-\" + (d.getMonth()+1) + \"-\" + d.getDate();\n}\n\/* \ud83d\udcdc \u67e5\u770b\u63d0\u6b3e\u5386\u53f2 *\/\nfunction showWithdrawHistory(){\n const box = document.getElementById(\"historyBox\");\n const list = JSON.parse(localStorage.getItem(\"withdraw_history\") || \"[]\");\n\n if(list.length === 0){\n box.innerHTML = \"No withdrawal history.\";\n }else{\n box.innerHTML = list.map(o =\u0026gt; {\n const statusMap = {\n pending: '\u23f3 Processing',\n PENDING: '\u23f3 Processing',\n processing: '\u23f3 Processing',\n approved: '\u2705 Success',\n confirmed: '\u2705 Success',\n success: '\u2705 Success',\n rejected: '\u274c Failed',\n failed: '\u274c Failed'\n };\n const statusColor =\n (o.status === 'approved' || o.status === 'confirmed' || o.status === 'success') ? '#00b894' :\n (o.status === 'rejected' || o.status === 'failed') ? '#e74c3c' :\n '#f39c12';\n return `\n \u0026lt;div style=\"margin-bottom:10px;border-bottom:1px solid rgba(255,255,255,.2);padding-bottom:8px;\"\u0026gt;\n\n \u0026lt;!-- Status --\u0026gt;\n \u0026lt;div style=\"font-size:13px;font-weight:600;color:${statusColor};\"\u0026gt;\n ${statusMap[o.status] || '\u23f3 Processing'}\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;!-- Wallet --\u0026gt;\n \u0026lt;div style=\"font-size:12px;opacity:.7;max-width:100%;overflow:hidden;text-overflow:ellipsis;margin-top:4px;\"\u0026gt;\n ${o.wallet}\n \u0026lt;\/div\u0026gt;\n ${o.frontNote ? `\u0026lt;div style=\"font-size:12px;margin-top:3px;color:#f0a500;\"\u0026gt;Notice: ${o.frontNote}\u0026lt;\/div\u0026gt;` : ''}\n\n \u0026lt;!-- Detail --\u0026gt;\n\u0026lt;div style=\"font-size:13px;margin-top:4px;\"\u0026gt;\n ${o.coin} ${o.amount} \u2248 ${o.estimate} USDT\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div style=\"font-size:11px;opacity:.6;\"\u0026gt;\n Order: ${o.orderId}\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div style=\"font-size:11px;opacity:.6;\"\u0026gt;\n ${o.time}\n\u0026lt;\/div\u0026gt;\n\n\n \u0026lt;\/div\u0026gt;\n `}).join(\"\");\n }\n\n box.style.display = box.style.display === \"none\" ? \"block\" : \"none\";\n}\n\/*************************************************\n * \u2705 SSE \u8fde\u63a5 + \u63d0\u6b3e\u72b6\u6001\u540c\u6b65 + \u81ea\u52a8\u63d0\u9192\uff08\u6700\u7ec8\u7248\uff09\n *************************************************\/\n\n\/\/ \u2460 \u540c\u6b65\u672c\u5730 withdrawal history\uff08\u6838\u5fc3\uff09\nfunction syncWithdrawStatus(orderId, newStatus, newData){\n const s = String(newStatus).toLowerCase();\n if ([\"success\",\"approved\",\"pass\",\"\u901a\u8fc7\"].includes(s)) {\n newStatus = \"approved\";\n } else if (\n [\"failed\",\"reject\",\"rejected\",\"cancel\",\"canceled\",\"decline\",\"deny\",\"\u62d2\u7edd\",\"\u53d6\u6d88\"]\n .includes(s)\n ) {\n newStatus = \"rejected\";\n } else {\n return; \/\/ \u975e\u6700\u7ec8\u72b6\u6001\uff0c\u76f4\u63a5\u5ffd\u7565\n }\n let history = JSON.parse(\n localStorage.getItem(\"withdraw_history\") || \"[]\"\n );\n\n let changed = false;\n\n history.forEach(o =\u0026gt; {\n if(o.orderId === orderId){\n if(o.status !== newStatus) { o.status = newStatus; changed = true; }\n if(newData \u0026amp;\u0026amp; newData.frontNote) { o.frontNote = newData.frontNote; changed = true; }\n\n \/\/ \ud83d\udd10 \u53ea\u6709\u5ba1\u6279\u6210\u529f\u7684\u94b1\u5305\u624d\u8bb0\u5f55\u4e3a Used Wallet\n if(newStatus === \"approved\"){\n let okWallets = JSON.parse(\n localStorage.getItem(\"approved_wallets\") || \"[]\"\n );\n if(!okWallets.includes(o.wallet)){\n okWallets.push(o.wallet);\n localStorage.setItem(\n \"approved_wallets\",\n JSON.stringify(okWallets)\n );\n \/\/ \u540c\u6b65\u5230\u670d\u52a1\u7aef\n if(USERID) {\n fetch(`${API}\/api\/user\/settings`, {\n method: 'POST', headers: {'Content-Type':'application\/json'},\n body: JSON.stringify({ uid: USERID, approvedWallets: okWallets })\n }).catch(()=\u0026gt;{});\n }\n }\n }\n }\n });\n\n if(!changed) return;\n\n localStorage.setItem(\n \"withdraw_history\",\n JSON.stringify(history)\n );\n\n \/\/ \u2463 \ud83d\udd14 \u81ea\u52a8\u5f39\u7a97\u63d0\u9192\n if(newStatus === \"approved\"){\n showCenterNotify(\"\u2705 Withdrawal Approved\", \"success\");\n }else if(newStatus === \"rejected\"){\n showCenterNotify(\"\u274c Withdrawal Rejected\", \"error\");\n }\n\n \/\/ \ud83d\udd04 \u82e5\u5386\u53f2\u6846\u662f\u6253\u5f00\u7684\uff0c\u81ea\u52a8\u5237\u65b0\n const box = document.getElementById(\"historyBox\");\n if(box \u0026amp;\u0026amp; box.style.display === \"block\"){\n showWithdrawHistory();\n }\n}\n\/************************************\n * \ud83d\udd14 SSE \u76d1\u542c\u540e\u53f0\u5ba1\u6279\u7ed3\u679c\uff08\u5173\u952e\uff09\n ************************************\/\nlet sse = null;\nfunction startWithdrawSSE() {\n if (sse) try { sse.close(); } catch(e) {}\n sse = new EventSource(\n API + \"\/wallet\/\" + USERID + \"\/sse\"\n );\n\n const handleWithdrawSSE = function(ev){\n try{\n const data = JSON.parse(ev.data);\n\n \/\/ \u76d1\u542c\u63d0\u6b3e\u8ba2\u5355\uff1a\u65b0\u589e\u2192pending \/ \u72b6\u6001\u66f4\u65b0\u2192approved\u6216rejected\n if(data.order \u0026amp;\u0026amp; (data.typeName === \"withdraw\" || (data.order \u0026amp;\u0026amp; data.order.type === \"withdraw\"))){\n if(data.type === \"new\" || data.type === \"update\"){\n syncWithdrawStatus(data.order.orderId, data.order.status, data.order);\n }\n }\n }catch(e){\n console.error(\"SSE parse error\", e);\n }\n };\n\n sse.addEventListener(\"new\", handleWithdrawSSE);\n sse.addEventListener(\"update\", handleWithdrawSSE);\n\n sse.onerror = function(){\n console.warn(\"\u26a0\ufe0f SSE disconnected\");\n };\n}\n\nasync function syncWithdrawHistory() {\n try {\n const uid = USERID;\n if (!uid) return;\n const res = await fetch(`${API}\/api\/sync\/${uid}`);\n const data = await res.json();\n if (!data.ok) return;\n\n \/\/ \u540c\u6b65\u8ba2\u5355\u8bb0\u5f55\n if (data.orders \u0026amp;\u0026amp; data.orders.withdraw) {\n let history = JSON.parse(localStorage.getItem(\"withdraw_history\") || \"[]\");\n const existingIds = new Set(history.map(o =\u0026gt; o.orderId));\n for (const o of data.orders.withdraw) {\n if (!existingIds.has(o.orderId)) {\n history.unshift(o);\n existingIds.add(o.orderId);\n } else {\n const found = history.find(e =\u0026gt; e.orderId === o.orderId);\n if (found \u0026amp;\u0026amp; o.frontNote \u0026amp;\u0026amp; found.frontNote !== o.frontNote) {\n found.frontNote = o.frontNote;\n }\n }\n }\n localStorage.setItem(\"withdraw_history\", JSON.stringify(history));\n }\n\n \/\/ \u540c\u6b65\u63d0\u6b3e\u5bc6\u7801\n if (data.settings \u0026amp;\u0026amp; data.settings.withdrawPassword) {\n const localPwd = localStorage.getItem(\"withdraw_password\");\n if (!localPwd || localPwd !== data.settings.withdrawPassword) {\n localStorage.setItem(\"withdraw_password\", data.settings.withdrawPassword);\n storedPassword = data.settings.withdrawPassword;\n passwordConfirmed = false;\n document.getElementById(\"createPwdBtn\").style.display = \"none\";\n }\n }\n\n \/\/ \u540c\u6b65\u6279\u51c6\u94b1\u5305\n if (data.settings \u0026amp;\u0026amp; data.settings.approvedWallets) {\n const localWallets = JSON.parse(localStorage.getItem(\"approved_wallets\") || \"[]\");\n if (localWallets.length === 0 \u0026amp;\u0026amp; data.settings.approvedWallets.length \u0026gt; 0) {\n localStorage.setItem(\"approved_wallets\", JSON.stringify(data.settings.approvedWallets));\n }\n }\n } catch(e) { console.error('syncWithdrawHistory failed:', e); }\n}\n\/\/ \u9875\u9762\u52a0\u8f7d\u540e\u540c\u6b65\u4e00\u6b21\nsetTimeout(() =\u0026gt; {\n if(amountUSDT.value){\n updateFromUSDT();\n }else if(amountCoin.value){\n updateFromCoin();\n }\n}, 0);\n\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304085}"}],"layout":[],"inlineLayout":null}}}],"layout":[{"type":"LayoutVariants","id":"f_f0126a6e-e465-47fc-ae3c-c0594409c0a0","defaultValue":null,"value":"two-thirds"},{"type":"LayoutVariants","id":"f_d7ecba56-b0e2-46e4-b70c-e88a112374e9","defaultValue":null,"value":"third"}],"inlineLayout":"12"}}},{"type":"BlockComponentItem","id":"b8343612-b6a6-47b3-8f7a-3e6404d901d7","name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"03dc6525-034a-4dfa-98e8-97019f56a6d8","items":[{"type":"BlockComponentItem","id":"5f2bb2ed-9320-4e13-903a-dfc4bbb9c518","name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"8344eb8e-37aa-47a5-bc22-756b8f4d29f9","items":[{"type":"HtmlComponent","id":27295337,"defaultValue":false,"value":"\u0026lt;link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\"\u0026gt;\n\n\u0026lt;style\u0026gt;\n:root {\n --nexbit-blue: #00d2ff;\n --nexbit-gray: #708090;\n --nav-height: 70px;\n }\n\n \/* \u5e95\u90e8\u5bfc\u822a\u5bb9\u5668 - \u5b8c\u5168\u900f\u660e *\/\n .nexbit-footer-nav {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: var(--nav-height);\n\n background-color: transparent;\n background: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n\n display: flex;\n justify-content: space-around;\n align-items: center;\n z-index: 9999;\n\n \/* \u2605 \u5173\u952e\u4fee\u590d\uff1a\u663e\u5f0f\u58f0\u660e\u63a5\u6536\u9f20\u6807\u4e8b\u4ef6\uff0c\u9632\u6b62\u7a7f\u900f *\/\n pointer-events: auto;\n\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n \/* \u5bfc\u822a\u6309\u94ae *\/\n .nav-item {\n text-decoration: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n height: 100%;\n background: transparent;\n\n \/* \u2605 \u5173\u952e\u4fee\u590d\uff1a\u6bcf\u4e2a\u6309\u94ae\u90fd\u663e\u5f0f\u63a5\u6536\u70b9\u51fb\u3001\u663e\u793a\u624b\u578b *\/\n pointer-events: auto;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n -webkit-user-select: none;\n }\n\n \/* \u9ed8\u8ba4\u72b6\u6001\u989c\u8272 *\/\n .nav-item i {\n font-size: 22px;\n color: var(--nexbit-gray);\n margin-bottom: 4px;\n transition: all 0.3s ease;\n pointer-events: none;\n }\n .nav-item span {\n font-size: 10px;\n color: var(--nexbit-gray);\n font-weight: bold;\n text-transform: uppercase;\n pointer-events: none;\n }\n\n \/* \u4eae\u8d77\u72b6\u6001 (Active) *\/\n .nav-item.active i,\n .nav-item.active span {\n color: var(--nexbit-blue);\n }\n .nav-item.active i {\n text-shadow: 0 0 12px rgba(0, 210, 255, 0.8);\n transform: translateY(-2px);\n }\n\n @supports (padding-bottom: env(safe-area-inset-bottom)) {\n .nexbit-footer-nav {\n height: calc(var(--nav-height) + env(safe-area-inset-bottom));\n padding-bottom: env(safe-area-inset-bottom);\n }\n }\n\u0026lt;\/style\u0026gt;\n\n\u0026lt;nav class=\"nexbit-footer-nav\"\u0026gt;\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/x-wallet\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-house\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Home\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/trade\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-chart-line\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Trade\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/deposit\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-wallet\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Deposit\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item active\" data-href=\"https:\/\/www.appyourplatform.info\/swap\" data-active=\"true\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-right-left\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Swap\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/nav\u0026gt;\n\n\u0026lt;script\u0026gt;\n(function() {\n var originalNav = document.querySelector('.nexbit-footer-nav');\n if (!originalNav) return;\n\n \/\/ \u2605 \u7ec8\u6781\u65b9\u6848\uff1a\u514b\u9686 nav \u5230 document.body \u4e0b\uff0c\u521b\u5efa\u5b8c\u5168\u72ec\u7acb\u7684 fixed \u5c42\n \/\/ \u8fd9\u6837 position:fixed \u76f4\u63a5\u76f8\u5bf9\u89c6\u53e3\uff0c\u5f7b\u5e95\u65a9\u65ad Strikingly \u5bb9\u5668 transform \u7684\u5f71\u54cd\n var fixedNav = originalNav.cloneNode(true);\n fixedNav.style.position = 'fixed';\n fixedNav.style.bottom = '0';\n fixedNav.style.left = '0';\n fixedNav.style.right = '0';\n fixedNav.style.zIndex = '99999';\n fixedNav.style.pointerEvents = 'auto';\n fixedNav.style.margin = '0';\n\n \/\/ \u9690\u85cf\u539f\u59cb nav\n originalNav.style.display = 'none';\n originalNav.style.visibility = 'hidden';\n originalNav.style.height = '0';\n originalNav.style.overflow = 'hidden';\n\n \/\/ \u8ffd\u52a0\u5230 body\uff0c\u786e\u4fdd fixed \u76f8\u5bf9\u89c6\u53e3\n document.body.appendChild(fixedNav);\n\n \/\/ \u7ed9 body \u52a0\u5e95\u90e8 padding\uff0c\u9632\u6b62\u5185\u5bb9\u88ab\u906e\u6321\n var navHeight = fixedNav.offsetHeight || 70;\n document.body.style.paddingBottom = (navHeight + 20) + 'px';\n\n \/\/ \u7ed1\u5b9a\u70b9\u51fb\u4e8b\u4ef6\uff08\u5728\u65b0\u514b\u9686\u7684 nav \u4e0a\uff09\n var items = fixedNav.querySelectorAll('.nav-item');\n items.forEach(function(item) {\n item.onclick = function(e) {\n items.forEach(function(n) { n.classList.remove('active'); });\n this.classList.add('active');\n var href = this.getAttribute('data-href');\n if (href) {\n try {\n if (window.parent \u0026amp;\u0026amp; window.parent.location) {\n window.parent.location.href = href;\n } else {\n window.open(href, '_blank');\n }\n } catch (err) {\n window.open(href, '_blank');\n }\n }\n };\n });\n})();\n\u0026lt;\/script\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304339}"}]}}}],"inlineLayout":"12"}}}],"layout":[],"inlineLayout":"1"}}}],"title":"Withdrawl","uid":"515e56d5-728f-4da8-9723-40965fc05e7b","path":"\/withdrawl","memberOnly":null,"paidMemberOnly":null,"buySpecificProductList":null,"specificTierList":null,"autoPath":true,"authorized":true},{"type":"Page","id":"f_7cb63950-e0ad-445f-916c-6d195e1ea7d7","sections":[{"type":"Slide","id":"f_8c4efd5d-d89c-4b14-abdd-1e0ce2a3bca1","defaultValue":null,"template_name":"s6_common_section","template_version":"s6","components":{"slideSettings":{"type":"SlideSettings","id":"f_6ecae517-4f29-4f12-8ff9-aa2a58cc4442","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"name":"\u81ea\u5b9a\u4e49\u7248\u5757","sync_key":null,"layout_variation":null,"display_settings":{},"padding":{"top":"normal","bottom":"normal"},"layout_config":{"width":"auto","height":"auto"}},"background1":{"type":"Background","id":"f_31112ac9-1e4f-403e-85a9-168da14b9849","defaultValue":false,"url":"","textColor":"","backgroundVariation":"","sizing":"","userClassName":"","linkUrl":null,"linkTarget":null,"videoUrl":"","videoHtml":"","storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null,"useImage":false,"noCompression":null,"focus":null,"backgroundColor":{"themeColorRangeIndex":null,"value":"#1e222d","type":"custom","id":"f_918c3f5a-063c-41db-bacb-11445c4b709d"}},"block1":{"type":"BlockComponent","id":"f_9c97129a-e586-40e4-8567-b69593715b4d","defaultValue":null,"items":[{"type":"BlockComponentItem","id":"f_ce597ded-d191-43df-87bf-0bdedad0ac5e","defaultValue":null,"name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"f_b6a86f2f-9ab8-4a1e-9666-c3b5836950c3","defaultValue":null,"items":[{"type":"BlockComponentItem","id":"f_7cd75785-c310-44bd-bf64-b98ada6ea2a8","defaultValue":null,"name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"f_16f1f2e2-a1a6-4f17-84bd-6d59d73c72da","defaultValue":null,"items":[{"type":"HtmlComponent","id":27292868,"defaultValue":false,"value":"\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\"en\"\u0026gt;\n\u0026lt;head\u0026gt;\n\u0026lt;meta charset=\"UTF-8\"\u0026gt;\n\u0026lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u0026gt;\n\u0026lt;title\u0026gt;Loan Application\u0026lt;\/title\u0026gt;\n\u0026lt;style\u0026gt;\nbody {\n font-family: Arial, sans-serif;\n background: transparent;\n margin: 0;\n padding: 20px;\n color: white;\n}\n\n.container {\n max-width: 500px;\n width: 90%;\n margin: auto;\n padding: 20px;\n border-radius: 12px;\n background: transparent; \/* \u900f\u660e\u80cc\u666f *\/\n box-sizing: border-box;\n}\n\n\/* Labels *\/\nlabel { font-size: 14px; }\n\n\/* Inputs *\/\ninput, select {\n width: 100%;\n padding: 10px;\n border-radius: 8px;\n border: 1px solid #1fa2ff;\n margin-top: 6px;\n background: transparent; \/* \u900f\u660e\u80cc\u666f *\/\n color: white; \/* \u5b57\u4f53\u989c\u8272 *\/\n box-sizing: border-box;\n font-size: 14px; \/* \u5b57\u4f53\u5927\u5c0f *\/\n}\n\nselect {\n \/* \u4fdd\u7559\u539f\u751f\u4e0b\u62c9\u7bad\u5934\u4ee5\u517c\u5bb9 Telegram WebView *\/\n -webkit-appearance: auto;\n appearance: auto;\n}\n\nselect option {\n background: #0a0a1a;\n color: #ffffff;\n}\n\n\n\n\/* Buttons *\/\n.btn {\n width: 100%;\n padding: 12px;\n background: transparent; \/* \u900f\u660e\u80cc\u666f *\/\n border: 2px solid #1fa2ff;\n border-radius: 10px;\n font-size: 17px;\n margin-top: 20px;\n color: #1fa2ff;\n cursor: pointer;\n transition: 0.25s;\n}\n.btn:hover {\n background: rgba(31,162,255,0.2); \/* \u534a\u900f\u660e\u60ac\u505c\u6548\u679c *\/\n box-shadow: 0 0 10px #1fa2ff;\n}\n\n.choose-btn {\n width: 100%;\n padding: 10px;\n border-radius: 8px;\n border: 2px solid #1fa2ff;\n background: transparent; \/* \u900f\u660e\u80cc\u666f *\/\n color: #1fa2ff;\n font-size: 14px;\n margin-top: 6px;\n cursor: pointer;\n transition: 0.25s;\n}\n.choose-btn:hover {\n background: rgba(31,162,255,0.2); \/* \u534a\u900f\u660e\u60ac\u505c\u6548\u679c *\/\n box-shadow: 0 0 8px #1fa2ff;\n}\n\n.upload-box {\n border: 1px dashed #1fa2ff;\n padding: 12px;\n border-radius: 8px;\n margin-top: 10px;\n background: transparent; \/* \u900f\u660e\u80cc\u666f *\/\n}\n\n.photo-preview {\n width: 100%;\n margin-top: 8px;\n border-radius: 10px;\n display: none;\n}\n\n#interestBox p { margin: 4px 0; }\n\n@media screen and (max-width:480px){\n .container { width: 95%; padding: 15px; }\n}\n\n#loanRecordToggle {\n color: #00d2ff !important; \n text-shadow: 0 0 8px rgba(0, 210, 255, 0.6) !important;\n opacity: 1 !important;\n}\n\n\/* \u5c45\u4e2d\u63d0\u793a\u5f39\u7a97 *\/\n.center-toast-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.55);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 99999;\n}\n.center-toast {\n background: #0a0a1a;\n border: 2px solid #1fa2ff;\n border-radius: 12px;\n padding: 24px 28px;\n max-width: 400px;\n width: 88%;\n color: #ffffff;\n text-align: center;\n box-shadow: 0 0 20px rgba(31,162,255,0.3);\n box-sizing: border-box;\n}\n.center-toast-title {\n font-size: 17px;\n font-weight: bold;\n color: #1fa2ff;\n margin-bottom: 12px;\n}\n.center-toast-msg {\n font-size: 14px;\n line-height: 1.6;\n word-break: break-word;\n}\n.center-toast-btn {\n margin-top: 18px;\n padding: 8px 32px;\n background: transparent;\n border: 2px solid #1fa2ff;\n border-radius: 8px;\n color: #1fa2ff;\n font-size: 14px;\n cursor: pointer;\n transition: 0.25s;\n}\n.center-toast-btn:hover {\n background: rgba(31,162,255,0.2);\n box-shadow: 0 0 10px #1fa2ff;\n}\n\n\u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\n\u0026lt;div class=\"container\"\u0026gt;\n\u0026lt;h2 style=\"text-align:center;\"\u0026gt;Loan Application\u0026lt;\/h2\u0026gt;\n\n\u0026lt;label\u0026gt;Loan Amount (USDT):\u0026lt;\/label\u0026gt;\n\u0026lt;select id=\"loanSelect\" onchange=\"updateInterest()\"\u0026gt;\u0026lt;\/select\u0026gt;\n\n\u0026lt;label style=\"margin-top:15px;\"\u0026gt;Enter Custom Loan Amount:\u0026lt;\/label\u0026gt;\n\u0026lt;input type=\"number\" id=\"loanAmount\" placeholder=\"Enter amount\" oninput=\"updateInterest()\"\u0026gt;\n\n\u0026lt;div id=\"interestBox\" style=\"margin-top:15px;\"\u0026gt;\n \u0026lt;p\u0026gt;\u0026lt;b\u0026gt;Daily Interest (0.16%):\u0026lt;\/b\u0026gt;\u0026lt;\/p\u0026gt;\n \u0026lt;p id=\"interestValue\"\u0026gt;0.00 USDT \/ day\u0026lt;\/p\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div style=\"margin-top:15px;\"\u0026gt;\n \u0026lt;p\u0026gt;\u0026lt;b\u0026gt;Real-time USDT:\u0026lt;\/b\u0026gt; \u0026lt;span id=\"usdtPrice\"\u0026gt;Loading\u2026\u0026lt;\/span\u0026gt;\u0026lt;\/p\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;label style=\"margin-top:15px;\"\u0026gt;Repayment Period:\u0026lt;\/label\u0026gt;\n\u0026lt;select id=\"period\"\u0026gt;\n \u0026lt;option value=\"7\"\u0026gt;7 Days\u0026lt;\/option\u0026gt;\n\u0026lt;\/select\u0026gt;\n\n\u0026lt;h3 style=\"margin-top:20px;\"\u0026gt;Upload Required Photos\u0026lt;\/h3\u0026gt;\n\n\u0026lt;div class=\"upload-box\"\u0026gt;\n \u0026lt;label\u0026gt;ID Card Front:\u0026lt;\/label\u0026gt;\n \u0026lt;button type=\"button\" class=\"choose-btn\" onclick=\"document.getElementById('frontInput').click()\"\u0026gt;Choose File\u0026lt;\/button\u0026gt;\n \u0026lt;input type=\"file\" accept=\"image\/*\" id=\"frontInput\" onchange=\"previewPhoto(event, 'frontPhoto')\" style=\"display:none;\"\u0026gt;\n \u0026lt;img id=\"frontPhoto\" class=\"photo-preview\"\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div class=\"upload-box\"\u0026gt;\n \u0026lt;label\u0026gt;ID Card Back:\u0026lt;\/label\u0026gt;\n \u0026lt;button type=\"button\" class=\"choose-btn\" onclick=\"document.getElementById('backInput').click()\"\u0026gt;Choose File\u0026lt;\/button\u0026gt;\n \u0026lt;input type=\"file\" accept=\"image\/*\" id=\"backInput\" onchange=\"previewPhoto(event, 'backPhoto')\" style=\"display:none;\"\u0026gt;\n \u0026lt;img id=\"backPhoto\" class=\"photo-preview\"\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div class=\"upload-box\"\u0026gt;\n \u0026lt;label\u0026gt;Hand-held ID Photo:\u0026lt;\/label\u0026gt;\n \u0026lt;button type=\"button\" class=\"choose-btn\" onclick=\"document.getElementById('handInput').click()\"\u0026gt;Choose File\u0026lt;\/button\u0026gt;\n \u0026lt;input type=\"file\" accept=\"image\/*\" id=\"handInput\" onchange=\"previewPhoto(event, 'handPhoto')\" style=\"display:none;\"\u0026gt;\n \u0026lt;img id=\"handPhoto\" class=\"photo-preview\"\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;button class=\"btn\" id=\"submitBtn\" onclick=\"submitLoan()\"\u0026gt;Submit Loan Request\u0026lt;\/button\u0026gt;\n\n\u0026lt;div id=\"loanRecordToggle\"\n style=\"\n margin-top:14px;\n text-align:center;\n font-size:14px;\n color:#ffffff;\n cursor:pointer;\n opacity:.85;\n \"\u0026gt;\n \ud83d\udce5 View Loan Records\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div id=\"loanRecordsContainer\"\n style=\"\n display:none;\n margin-top:10px;\n font-size:13px;\n color:#ffffff;\n text-align:left;\n \"\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;script\u0026gt;\n\/\/ \u5c45\u4e2d\u63d0\u793a\u5f39\u7a97\uff08\u4e0e\u5145\u503c\/\u63d0\u6b3e\/swap\/plan\u7248\u4e00\u81f4\uff09\nfunction showCenterNotify(msg, type) {\n if (document.querySelector('.center-toast-overlay')) return;\n const overlay = document.createElement('div');\n overlay.className = 'center-toast-overlay';\n const title = type === 'success' ? 'Success' : type === 'error' ? 'Error' : 'Notice';\n const color = type === 'success' ? '#00ff88' : type === 'error' ? '#ff4444' : '#1fa2ff';\n overlay.innerHTML = `\n \u0026lt;div class=\"center-toast\"\u0026gt;\n \u0026lt;div class=\"center-toast-title\" style=\"color:${color};\"\u0026gt;${title}\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"center-toast-msg\"\u0026gt;${msg}\u0026lt;\/div\u0026gt;\n \u0026lt;button class=\"center-toast-btn\"\u0026gt;OK\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;`;\n document.body.appendChild(overlay);\n overlay.querySelector('.center-toast-btn').addEventListener('click', () =\u0026gt; {\n overlay.parentNode.removeChild(overlay);\n });\n}\n\n\/\/ \u83b7\u53d6\u7528\u6237ID \u2014\u2014 \u4f18\u5148\u4ece localStorage \u8bfb\u53d6\uff08\u4e3b\u524d\u7aef\u53ef\u80fd\u5df2\u5b58\u50a8\uff09\uff0c\u5426\u5219\u4ece Telegram WebApp \u83b7\u53d6\nlet USERID = \"test_user\";\ntry {\n \/\/ 1. \u5148\u5c1d\u8bd5\u4ece localStorage \u83b7\u53d6\u4e3b\u524d\u7aef\u5b58\u50a8\u7684 uid\n if (typeof localStorage !== 'undefined') {\n const stored = localStorage.getItem('uid') || localStorage.getItem('userId') || localStorage.getItem('nexbit_uid');\n if (stored \u0026amp;\u0026amp; stored.startsWith('U')) {\n USERID = stored;\n }\n }\n \/\/ 2. \u5982\u679c\u6ca1\u62ff\u5230\uff0c\u4ece Telegram initDataUnsafe \u6784\u9020\n if (USERID === 'test_user' \u0026amp;\u0026amp; typeof window !== 'undefined' \u0026amp;\u0026amp; window.Telegram \u0026amp;\u0026amp; window.Telegram.WebApp \u0026amp;\u0026amp; window.Telegram.WebApp.initDataUnsafe \u0026amp;\u0026amp; window.Telegram.WebApp.initDataUnsafe.user \u0026amp;\u0026amp; window.Telegram.WebApp.initDataUnsafe.user.id) {\n const u = window.Telegram.WebApp.initDataUnsafe.user;\n const uid = u.id;\n \/\/ \u5c1d\u8bd5\u4ece initData \u63d0\u53d6 hash \u540e\u7f00\n let suffix = '';\n try {\n const initData = window.Telegram.WebApp.initData || '';\n const params = new URLSearchParams(initData);\n const hash = params.get('hash') || '';\n if (hash) {\n \/\/ \u7528 hash \u524d6\u4f4d\u4f5c\u4e3a\u540e\u7f00\n suffix = '_' + parseInt(hash.substring(0, 6), 16).toString().substring(0, 6);\n }\n } catch (e) {}\n if (!suffix) {\n suffix = '_' + Math.floor(Math.random() * 999999);\n }\n USERID = 'U' + uid + suffix;\n }\n} catch (e) {\n console.warn(\"Telegram userId not available, using fallback.\");\n}\n\n\/\/ Populate loan select \u2014 execute immediately (script is at body bottom, DOM ready)\n(function() {\n let select = document.getElementById(\"loanSelect\");\n for (let i = 1000; i \u0026lt;= 100000; i += 1000) {\n select.innerHTML += `\u0026lt;option value=\"${i}\"\u0026gt;${i} USDT\u0026lt;\/option\u0026gt;`;\n }\n updateInterest();\n simulateUSDT();\n})();\n\nfunction updateInterest() {\n let chosen = Number(document.getElementById(\"loanSelect\").value);\n let manual = Number(document.getElementById(\"loanAmount\").value);\n let amount = manual \u0026gt; 0 ? manual : chosen;\n let dailyInterest = amount * 0.0016;\n document.getElementById(\"interestValue\").innerText = dailyInterest.toFixed(4) + \" USDT \/ day\";\n}\n\nfunction previewPhoto(evt, id) {\n const img = document.getElementById(id);\n img.src = URL.createObjectURL(evt.target.files[0]);\n img.style.display = \"block\";\n}\n\nfunction simulateUSDT() {\n let price = (1 + Math.random() * 0.01).toFixed(4);\n document.getElementById(\"usdtPrice\").innerText = price;\n setTimeout(simulateUSDT, 2000);\n}\n\n\/\/ Submit action - send all photos in one message with beautified caption\n\nasync function submitLoan() {\n const submitBtn = document.getElementById('submitBtn');\n submitBtn.disabled = true;\n submitBtn.innerText = \"Submitting...\";\n\n try {\n \/\/ ===== 1. \u8ba1\u7b97\u6700\u7ec8\u91d1\u989d =====\n const chosen = Number(document.getElementById(\"loanSelect\").value);\n const manual = Number(document.getElementById(\"loanAmount\").value);\n const finalAmount = manual \u0026gt; 0 ? manual : chosen;\n\n \/\/ ===== 2. \u8fd8\u6b3e\u5468\u671f =====\n const period = document.getElementById(\"period\").value;\n\n \/\/ ===== 3. \u6587\u4ef6\u5bf9\u8c61 =====\n const frontFile = document.getElementById(\"frontInput\").files[0];\n const backFile = document.getElementById(\"backInput\").files[0];\n const handFile = document.getElementById(\"handInput\").files[0];\n\n if (!frontFile || !backFile || !handFile) {\n showCenterNotify(\"Please upload all required photos.\", \"warning\");\n submitBtn.disabled = false;\n submitBtn.innerText = \"Submit Loan Request\";\n return;\n }\n\n \/\/ ===== 4. \u7ec4\u88c5\u8868\u5355 =====\n const formData = new FormData();\n formData.append(\"amount\", finalAmount);\n formData.append(\"period\", period);\n\n \/\/ \u76f4\u63a5\u4f7f\u7528\u9876\u90e8\u5168\u5c40 USERID\uff08\u4e0e\u5145\u503c\/\u63d0\u6b3e\u4e00\u81f4\uff09\n formData.append(\"userId\", USERID);\n\n \/\/ ===== \u6587\u4ef6\u4e0a\u4f20 =====\n formData.append(\"front\", frontFile);\n formData.append(\"back\", backFile);\n formData.append(\"hand\", handFile);\n\n \/\/ ===== 5. \u53d1\u9001\u8bf7\u6c42 =====\n const res = await fetch(\"https:\/\/crypto-management-production-5e04.up.railway.app\/api\/order\/loan\", {\n method: \"POST\",\n body: formData\n });\n\n if (!res.ok) {\n throw new Error(\"Server error: \" + res.status);\n }\n\n const data = await res.json();\n\n \/\/ ===== 6. \u5904\u7406\u8fd4\u56de =====\n if (!data.success) {\n showCenterNotify(data.message || \"Submit failed\", \"error\");\n submitBtn.disabled = false;\n submitBtn.innerText = \"Submit Loan Request\";\n return;\n }\n\n showCenterNotify(\"Loan Request Submitted Successfully!\", \"success\");\n console.log(\"Loan Order ID:\", data.orderId);\n\n } catch (err) {\n console.error(\"Loan submit error:\", err);\n showCenterNotify(\"Submit failed. Please check your network or try again.\", \"error\");\n } finally {\n submitBtn.disabled = false;\n submitBtn.innerText = \"Submit Loan Request\";\n }\n}\n\nasync function loadLoanRecords() {\n const container = document.getElementById('loanRecordsContainer');\n container.style.display = 'block';\n container.innerHTML = '\u0026lt;p style=\"color:#00d2ff;\"\u0026gt;Loading loan records...\u0026lt;\/p\u0026gt;';\n\n try {\n const res = await fetch(`https:\/\/crypto-management-production-5e04.up.railway.app\/api\/order\/loans\/user\/${USERID}`);\n if (!res.ok) throw new Error('Failed to fetch loan records');\n const data = await res.json();\n\n if (!data.success || !data.orders || data.orders.length === 0) {\n container.innerHTML = '\u0026lt;p\u0026gt;No loan records found.\u0026lt;\/p\u0026gt;';\n return;\n }\n\n let html = '';\n data.orders.forEach(order =\u0026gt; {\n const statusColor = order.status === 'success' || order.status === 'approved' ? '#00ff88' : order.status === 'rejected' || order.status === 'failed' ? '#ff4444' : '#ffaa00';\n const notice = order.frontNote ? `\u0026lt;div style=\"margin-top:4px;color:#ffaa00;font-size:13px;\"\u0026gt;\u0026lt;b\u0026gt;notice:\u0026lt;\/b\u0026gt; ${order.frontNote}\u0026lt;\/div\u0026gt;` : '';\n html += `\u0026lt;div style=\"border:1px solid #00d2ff;padding:8px;margin:6px 0;border-radius:6px;background:rgba(0,210,255,0.05);\"\u0026gt;\n \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;Order:\u0026lt;\/b\u0026gt; ${order.orderId || 'N\/A'}\u0026lt;\/div\u0026gt;\n \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;Amount:\u0026lt;\/b\u0026gt; ${order.amount || 'N\/A'} USDT\u0026lt;\/div\u0026gt;\n \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;Status:\u0026lt;\/b\u0026gt; \u0026lt;span style=\"color:${statusColor}\"\u0026gt;${order.status || 'pending'}\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div\u0026gt;\u0026lt;b\u0026gt;Date:\u0026lt;\/b\u0026gt; ${order.createdAt ? new Date(order.createdAt).toLocaleString('en-US', { timeZone: 'America\/New_York' }) : 'N\/A'}\u0026lt;\/div\u0026gt;\n ${notice}\n \u0026lt;\/div\u0026gt;`;\n });\n container.innerHTML = html;\n } catch (e) {\n container.innerHTML = '\u0026lt;p style=\"color:#ff4444;\"\u0026gt;Failed to load loan records. Please try again.\u0026lt;\/p\u0026gt;';\n }\n}\n\ndocument.getElementById('loanRecordToggle').addEventListener('click', loadLoanRecords);\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304086}"}],"layout":[],"inlineLayout":null}}}],"layout":[{"type":"LayoutVariants","id":"f_90a166b7-3a9d-42c0-892e-aeb9ce2d6d8a","defaultValue":null,"value":"two-thirds"},{"type":"LayoutVariants","id":"f_e94a7ae8-ea33-406d-90c4-5ceb3b1af3a8","defaultValue":null,"value":"third"}],"inlineLayout":"12"}}},{"type":"BlockComponentItem","id":"40f96e08-cb6e-4f48-8f50-36f7f504395f","name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"1f2338b6-1499-4b8d-8cc6-0b34d4c6ae00","items":[{"type":"BlockComponentItem","id":"a55f5a26-c6ac-46ee-b227-187ab562a7b1","name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"437385f7-c9f9-406d-8a27-193dbbfd9627","items":[{"type":"HtmlComponent","id":27295338,"defaultValue":false,"value":"\u0026lt;link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\"\u0026gt;\n\n\u0026lt;style\u0026gt;\n:root {\n --nexbit-blue: #00d2ff;\n --nexbit-gray: #708090;\n --nav-height: 70px;\n }\n\n \/* \u5e95\u90e8\u5bfc\u822a\u5bb9\u5668 - \u5b8c\u5168\u900f\u660e *\/\n .nexbit-footer-nav {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: var(--nav-height);\n\n background-color: transparent;\n background: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n\n display: flex;\n justify-content: space-around;\n align-items: center;\n z-index: 9999;\n\n \/* \u2605 \u5173\u952e\u4fee\u590d\uff1a\u663e\u5f0f\u58f0\u660e\u63a5\u6536\u9f20\u6807\u4e8b\u4ef6\uff0c\u9632\u6b62\u7a7f\u900f *\/\n pointer-events: auto;\n\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n \/* \u5bfc\u822a\u6309\u94ae *\/\n .nav-item {\n text-decoration: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n height: 100%;\n background: transparent;\n\n \/* \u2605 \u5173\u952e\u4fee\u590d\uff1a\u6bcf\u4e2a\u6309\u94ae\u90fd\u663e\u5f0f\u63a5\u6536\u70b9\u51fb\u3001\u663e\u793a\u624b\u578b *\/\n pointer-events: auto;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n -webkit-user-select: none;\n }\n\n \/* \u9ed8\u8ba4\u72b6\u6001\u989c\u8272 *\/\n .nav-item i {\n font-size: 22px;\n color: var(--nexbit-gray);\n margin-bottom: 4px;\n transition: all 0.3s ease;\n pointer-events: none;\n }\n .nav-item span {\n font-size: 10px;\n color: var(--nexbit-gray);\n font-weight: bold;\n text-transform: uppercase;\n pointer-events: none;\n }\n\n \/* \u4eae\u8d77\u72b6\u6001 (Active) *\/\n .nav-item.active i,\n .nav-item.active span {\n color: var(--nexbit-blue);\n }\n .nav-item.active i {\n text-shadow: 0 0 12px rgba(0, 210, 255, 0.8);\n transform: translateY(-2px);\n }\n\n @supports (padding-bottom: env(safe-area-inset-bottom)) {\n .nexbit-footer-nav {\n height: calc(var(--nav-height) + env(safe-area-inset-bottom));\n padding-bottom: env(safe-area-inset-bottom);\n }\n }\n\u0026lt;\/style\u0026gt;\n\n\u0026lt;nav class=\"nexbit-footer-nav\"\u0026gt;\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/x-wallet\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-house\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Home\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/trade\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-chart-line\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Trade\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/deposit\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-wallet\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Deposit\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item active\" data-href=\"https:\/\/www.appyourplatform.info\/swap\" data-active=\"true\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-right-left\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Swap\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/nav\u0026gt;\n\n\u0026lt;script\u0026gt;\n(function() {\n var originalNav = document.querySelector('.nexbit-footer-nav');\n if (!originalNav) return;\n\n \/\/ \u2605 \u7ec8\u6781\u65b9\u6848\uff1a\u514b\u9686 nav \u5230 document.body \u4e0b\uff0c\u521b\u5efa\u5b8c\u5168\u72ec\u7acb\u7684 fixed \u5c42\n \/\/ \u8fd9\u6837 position:fixed \u76f4\u63a5\u76f8\u5bf9\u89c6\u53e3\uff0c\u5f7b\u5e95\u65a9\u65ad Strikingly \u5bb9\u5668 transform \u7684\u5f71\u54cd\n var fixedNav = originalNav.cloneNode(true);\n fixedNav.style.position = 'fixed';\n fixedNav.style.bottom = '0';\n fixedNav.style.left = '0';\n fixedNav.style.right = '0';\n fixedNav.style.zIndex = '99999';\n fixedNav.style.pointerEvents = 'auto';\n fixedNav.style.margin = '0';\n\n \/\/ \u9690\u85cf\u539f\u59cb nav\n originalNav.style.display = 'none';\n originalNav.style.visibility = 'hidden';\n originalNav.style.height = '0';\n originalNav.style.overflow = 'hidden';\n\n \/\/ \u8ffd\u52a0\u5230 body\uff0c\u786e\u4fdd fixed \u76f8\u5bf9\u89c6\u53e3\n document.body.appendChild(fixedNav);\n\n \/\/ \u7ed9 body \u52a0\u5e95\u90e8 padding\uff0c\u9632\u6b62\u5185\u5bb9\u88ab\u906e\u6321\n var navHeight = fixedNav.offsetHeight || 70;\n document.body.style.paddingBottom = (navHeight + 20) + 'px';\n\n \/\/ \u7ed1\u5b9a\u70b9\u51fb\u4e8b\u4ef6\uff08\u5728\u65b0\u514b\u9686\u7684 nav \u4e0a\uff09\n var items = fixedNav.querySelectorAll('.nav-item');\n items.forEach(function(item) {\n item.onclick = function(e) {\n items.forEach(function(n) { n.classList.remove('active'); });\n this.classList.add('active');\n var href = this.getAttribute('data-href');\n if (href) {\n try {\n if (window.parent \u0026amp;\u0026amp; window.parent.location) {\n window.parent.location.href = href;\n } else {\n window.open(href, '_blank');\n }\n } catch (err) {\n window.open(href, '_blank');\n }\n }\n };\n });\n})();\n\u0026lt;\/script\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304340}"}]}}}],"inlineLayout":"12"}}}],"layout":[],"inlineLayout":"1"}}}],"title":"Loan","uid":"72efa367-6048-4f26-9c5b-d37fb2606498","path":"\/loan","memberOnly":null,"paidMemberOnly":null,"buySpecificProductList":null,"specificTierList":null,"autoPath":true,"authorized":true},{"type":"Page","id":"f_96907e03-9e89-4489-8a72-f41ef7a8d3f2","sections":[{"type":"Slide","id":"f_ee0723f5-2d81-42bc-986c-d9b1e9320edd","defaultValue":null,"template_name":"featureListE","components":{"slideSettings":{"type":"SlideSettings","id":"f_f0e1c5ed-2f92-4c9b-88d7-17128956c832","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"hidden_mobile_section":false,"name":"Feature List","sync_key":null,"layout_variation":"normal","padding":{"top":"half","bottom":"none"},"layout_config":{"noTemplateDiff":true,"card_radius":"square","cardBackgroundSettings":{"type":"default","id":"f_271fb520-7061-46b1-843d-91f19bb6c13a"},"border_thickness":"small","card_padding":"small","spacing":"S","subtitleReplaceToText":true,"mediaSize":"xs","horizontal_alignment":"auto","layout":"E","border":false,"mediaPosition":"alternating","showButton":false,"border_color":"#000000","card":false,"structure":"list","card_color":null,"vertical_alignment":"middle","borderBackgroundSettings":{"default":"#e4f7f0","type":"default","id":"f_3e29af33-d9a8-45cc-a3f9-89209b6576bb"},"grid_media_position":"top","columns":"three","content_align":"center"}},"background1":{"type":"Background","id":"f_a0cbaeaf-65ac-4140-8a33-9f88ac29c6da","defaultValue":false,"url":"","textColor":"","backgroundVariation":"","sizing":"","userClassName":"","videoUrl":"","videoHtml":"","storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null,"useImage":false,"focus":null,"backgroundColor":{"themeColorRangeIndex":null,"value":"#1e222d","type":"custom","id":"f_bb0e85c5-1d46-4916-9352-d49ff2e9c188"}},"repeatable1":{"type":"Repeatable","id":"f_3dee6f53-99d6-4a69-be98-f4c929361bba","defaultValue":false,"list":[{"type":"RepeatableItem","id":"f_c141bb4c-88d7-49e1-a8fc-dd4474027ae4","defaultValue":true,"components":{"media1":{"type":"Media","id":"f_6ca3bd04-2844-423e-ae03-af9c4c051f71","defaultValue":true,"video":{"type":"Video","id":"f_9f570149-7527-4782-a973-4f66235d42d5","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_a4227fe6-fe81-48a5-8a9f-f57c1d399034","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/770840_369384","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"8px","h":640,"w":640,"s":145629,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_e4e68e5f-201e-4afc-a30c-d2a62eaa0823","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003e\u003cstrong\u003eHow does Bitcoin work? \u2699\ufe0f\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_2790980a-321f-4b73-8f44-47654799843b","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eBitcoin (BTC) is a virtual currency that operates through the decentralized Bitcoin network, meaning it is not controlled by any government or financial institution. All transactions are recorded on a public ledger called the Bitcoin blockchain, a transparent and accessible database.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eThe Bitcoin network is a decentralized virtual currency system that operates without a central bank, government agency, or intermediary. Instead, it relies on a network of computers around the world to maintain the system's integrity.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eThe Bitcoin network consists of a globally distributed community of nodes. Nodes are computers that connect to the Bitcoin network and help verify transactions. Anyone in the world can run their own node and participate in the network, ensuring that no single entity can control the blockchain. This decentralization makes the system resilient and secure.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eWhen someone sends Bitcoin to another person, the transaction is verified by a network of \"miners.\" Miners use their machines to generate hashes through trial and error, aiming to produce a hash that meets or exceeds the network's set target. This process is designed to incentivize miners to contribute valid new blocks by requiring them to invest time, energy, and capital in participating in the network.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eThis method of reaching consensus among users without relying on centralized control is called a \"consensus mechanism.\" Miners who successfully generate a valid hash value gain the right to add their proposed block to the blockchain. Other miners in the network then collectively verify the block's transactions. They perform verification by checking that the sender has enough Bitcoin to complete the transaction, rather than attempting to double-spend their balance.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eOnce the network verifies the proposed block, it is permanently added to the Bitcoin blockchain. Once a block is added to the blockchain, no one can modify the data stored in it.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_1b082808-3a7d-4a4d-9a50-99819dc1b51e","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_9808576e-82b4-4d5b-b1f6-58c66b4a1470","components":{"media1":{"type":"Media","id":"f_62b368c5-ae1b-454d-be5b-5c1e07dc0194","defaultValue":true,"video":{"type":"Video","id":"f_a1faf72d-59e4-4220-9fa3-578dc56da8da","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_8ab4d4fa-06e1-4664-be59-4ec1cf6f1f76","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/922470_955661","storage":"s","storagePrefix":null,"format":"png","border_radius":"8px","h":1070,"w":1008,"s":1257993,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_c06bd1a8-a05e-4181-8263-56ee2f70a9d2","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003e\u003cstrong\u003eWhat is cryptocurrency?\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_787c6541-260f-494e-bbc4-415d716e9ea4","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eCryptocurrency is a type of digital currency that leverages cryptography, computer science, and economics to create a decentralized and highly secure payment system. These three disciplines work together to ensure the integrity and efficiency of cryptocurrency transactions.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eEncryption technology secures the information in cryptocurrency transactions.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eComputer science keeps information consistent across all participants.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eEconomic incentives encourage everyone to follow the rules for the benefit of the network.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eComparing cryptocurrency and decentralized finance to physical letters and digital email is a simple way to understand the advantages of the traditional financial system.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eSending a transaction through the traditional financial system is similar to mailing a physical letter via postal service. It is typically slow, costly, and requires multiple intermediaries at each stage of the process to reach the final destination.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_58287025-b9e0-416c-adbc-ee062f22c178","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_0b5bd606-7bcc-4dfa-8faf-b350f47f8f0f","components":{"media1":{"type":"Media","id":"f_f54506dc-def2-4dfa-a37d-511212514b6c","defaultValue":true,"video":{"type":"Video","id":"f_6256baec-7da2-4ebf-a07d-64d6fe86b376","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_99410d38-69f8-4b98-ace5-20d2e6a3a046","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/525135_896785","storage":"s","storagePrefix":null,"format":"png","border_radius":"8px","aspect_ratio":"","h":1160,"w":816,"s":1014462,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_4d81b52a-9a94-42e8-9a94-f466e74d933f","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cstrong\u003eWhat is blockchain technology?\u003c\/strong\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_49eeba08-d401-4df5-a3f9-2b3af774b5bf","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eHow does blockchain work? \u2699\ufe0f\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eThink of a blockchain as virtual blocks filled with data, linked together using cryptographic techniques to form a traceable digital chain. The computers that help update, manage, and verify blockchain information are called \"nodes.\"\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eWhen someone initiates a blockchain transaction, it is broadcast throughout the entire blockchain network. Each node then verifies the transaction to ensure the sender has sufficient funds and is not attempting to fraudulently spend the same transaction twice.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eOnce verified, the transaction is added to a new block and then committed to the blockchain ledger, creating a chronological record of transactions.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_cac32c71-76a4-4495-94f6-84a2a0c60f75","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_8cc45aac-d712-44d8-ace1-06c7e6be4216","components":{"media1":{"type":"Media","id":"f_9ccdce12-5c52-4d45-ad77-8798c91747ba","defaultValue":true,"video":{"type":"Video","id":"f_16ef9dff-eee9-4dd8-89d6-85de519533f0","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_225c6bd6-e796-48fb-943b-dbdaf29b15c6","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/669182_226994","storage":"s","storagePrefix":null,"format":"png","border_radius":"8px","h":942,"w":1162,"s":1709310,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_e0816b08-5b61-46a4-ae8d-b3e41f48d8a6","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003e\u003cstrong\u003eCryptocurrencies and tokens: What's the difference?\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_abafb69f-3746-4206-9a83-8a945ec4d44e","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eHow do cryptocurrencies work? \u2699\ufe0f\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8);\"\u003eBlockchain users can use cryptocurrencies in a variety of ways. Some use them as a medium of exchange for the electronic transfer of value in a peer-to-peer manner. Others use them as a store of value, free from the control of their counterparts in government-backed currencies. Ultimately, cryptocurrencies function similarly to traditional currencies or valuable commodities like gold.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eNew coins enter circulation in the form of validator rewards from blockchain consensus mechanisms such as Proof-of-Work (PoW) and Proof-of-Stake (PoS). These processes require network users to either \"work\" through the PoW mining process to mine coins or lock up coins by staking to earn rewards through the PoS process.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_07f72298-62b3-42ba-96e2-7a949f5a1c91","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_b474ca3d-53d1-4e6e-9a23-65616d1e65cf","components":{"media1":{"type":"Media","id":"f_141eb4ff-9db3-4b32-b24f-edb846ca8475","defaultValue":true,"video":{"type":"Video","id":"f_915830b1-bd95-4d33-8562-cccfd50b4ef3","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_a2797662-84d1-4cb4-b3c6-69ec03544343","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/358680_436789","storage":"s","storagePrefix":null,"format":"png","border_radius":"8px","h":677,"w":720,"s":419518,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_4f386de4-b382-407c-8052-1e38d81ccdee","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cstrong\u003eDollar Cost Averaging: A Complete Guide to Performing DCA on Cryptocurrencies\u003c\/strong\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_6323f4a7-e3f1-4d70-897d-1d2491f112cf","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eHow do cryptocurrencies work? \u2699\ufe0f\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8);\"\u003eBlockchain users can use cryptocurrencies in a variety of ways. Some use them as a medium of exchange for the electronic transfer of value in a peer-to-peer manner. Others use them as a store of value, free from the control of their counterparts in government-backed currencies. Ultimately, cryptocurrencies function similarly to traditional currencies or valuable commodities like gold.\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"display: inline-block\"\u003e\u003c\/span\u003e\u003c\/p\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eNew coins enter circulation in the form of validator rewards from blockchain consensus mechanisms such as Proof-of-Work (PoW) and Proof-of-Stake (PoS). These processes require network users to either \"work\" through the PoW mining process to mine coins or lock up coins by staking to earn rewards through the PoS process.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_5a96f693-e27b-453d-8e8e-72c7f0a9b409","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}}],"components":{"media1":{"type":"Media","id":"f_4eff2dda-f1df-40ca-af8f-47b57d5340d9","defaultValue":true,"video":{"type":"Video","id":"f_52a32ce1-b8e7-463e-8918-8e127abd3340","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_af3f8859-3acd-4953-81ed-ea5abbc702dc","defaultValue":true,"link_url":null,"thumb_url":"\/\/static-assets.strikinglycdn.com\/images\/editor2\/feature_list\/thumb-list-D-1.png","url":"\/\/static-assets.strikinglycdn.com\/images\/editor2\/feature_list\/list-D-1.png","caption":"","description":"","new_target":true},"current":"image"},"text1":{"type":"RichText","id":"f_156e581f-e5b4-4159-97fb-39cc11326540","defaultValue":true,"value":"What We Do","backupValue":null,"version":null},"text2":{"type":"RichText","id":"f_d2b8c087-7960-4f23-ad01-59472e6de5a0","defaultValue":true,"value":"Show off your projects, features, or clients in this section.","backupValue":null,"version":null},"button1":{"type":"Button","id":"f_02bc7f68-d172-44fc-a6f1-02637a9cfd5e","defaultValue":true,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null}}},"text1":{"type":"RichText","id":"f_983fc982-7a67-4124-9f57-eb53c0fb4ccc","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 29px;\"\u003e\u003cstrong\u003eFAQ\u003c\/strong\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_704f5d6e-4827-4e6e-8178-006908a0e5a2","defaultValue":false,"value":"","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true}}}],"title":"FAQ","uid":"92b724fd-d960-4098-9059-255fed59e48e","path":"\/faq","memberOnly":null,"paidMemberOnly":null,"buySpecificProductList":null,"specificTierList":null,"autoPath":true,"authorized":true},{"type":"Page","id":"f_92110638-1f4a-42a5-bdb9-9af903d11327","sections":[{"type":"Slide","id":"f_27a0f05e-6a06-4c67-8a1c-c00cb389ad5a","defaultValue":null,"template_name":"featureListE","components":{"slideSettings":{"type":"SlideSettings","id":"f_90018eea-16fa-4577-92f7-a8d854cbdb24","defaultValue":null,"show_nav":true,"nameChanged":true,"hidden_section":false,"hidden_mobile_section":false,"name":"\u5217\u8868\u5e03\u5c40","sync_key":null,"layout_variation":"normal","padding":{"top":"half","bottom":"normal"},"layout_config":{"noTemplateDiff":true,"card_radius":"square","cardBackgroundSettings":{"type":"default","id":"f_fb0708f1-de8b-4cbb-b3f6-a4578871c1e6","default":"#f2f2f2"},"border_thickness":"small","card_padding":"medium","spacing":"S","subtitleReplaceToText":true,"mediaSize":"xs","horizontal_alignment":"center","layout":"E","border":false,"mediaPosition":"left","showButton":false,"border_color":"#f2f2f2","card":false,"structure":"grid","card_color":"#f2f2f2","vertical_alignment":"middle","borderBackgroundSettings":{"type":"default","id":"f_8d558eeb-fb53-4c2a-8ccf-0b73d6fc873f","default":"#f2f2f2"},"grid_media_position":"top","columns":"six","content_align":"center"}},"background1":{"type":"Background","id":"f_6989ad92-926d-453e-9b37-7cb0880624fe","defaultValue":false,"url":"","textColor":"","backgroundVariation":"","sizing":"","userClassName":"","videoUrl":"","videoHtml":"","storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null,"useImage":false,"focus":null,"backgroundColor":{"themeColorRangeIndex":null,"value":"#1e222d","type":"custom","id":"f_a8ba0c95-a06a-4697-bf9e-697ab52c321c"}},"repeatable1":{"type":"Repeatable","id":"f_49ad3049-b20f-4024-ab2f-3235af92e036","defaultValue":false,"list":[{"type":"RepeatableItem","id":"f_5bfcacd9-1387-46b7-8017-81747dc919c1","defaultValue":true,"components":{"media1":{"type":"Media","id":"f_f286bd1d-d18c-4014-b645-6b983fe1e437","defaultValue":true,"video":{"type":"Video","id":"f_e4a9d757-70ff-42ff-baf1-c0209e460d53","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_7f5778a8-3f82-49ff-984b-7adf4a55d045","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/628259_29935","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","aspect_ratio":"1\/1","h":1152,"w":922,"s":1212472,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_be31ada7-1fff-4fc2-bc1d-16bb583f7bd0","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 1: Register\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_3a4de494-5916-4c3a-9f61-f51c860a9a24","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eProvide your email address and name to begin our security verification process.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_a437ca63-a3dd-4bc9-ba02-eed60756aa03","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_7a51254b-6f42-4860-8b83-f19e7e497eef","defaultValue":true,"components":{"media1":{"type":"Media","id":"f_7781790d-f3df-4a4a-adb4-fc8fef6f918f","defaultValue":true,"video":{"type":"Video","id":"f_98777f84-f0a4-4e2f-8436-f115a19f84b1","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_192ac4be-1cde-4151-80f5-aba1e6dba3d6","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/875149_648903","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"24px","aspect_ratio":"1\/1","h":767,"w":708,"s":22482,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_b4c468f0-a9d3-4223-bab9-f89a17f55e00","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 2: Choose a payment method\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_0859f703-a89f-4a1a-9153-b41c95f9eede","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003esend a bank wire transfer, make an ACH purchase, use a credit\/debit card, or link one of several other payment methods.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_be461c46-a8cd-48f1-b1b5-dad8c95990b0","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_5510a22b-ac8e-425b-a9a6-bf2c5c15d976","components":{"media1":{"type":"Media","id":"f_33aa89ce-c9c1-430c-b253-6c24bfdcbcfc","defaultValue":true,"video":{"type":"Video","id":"f_42a8cd19-a502-4391-a073-da5731a3d3d3","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_959fb69e-fd22-4901-848f-102600f451f5","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/380189_670857","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","aspect_ratio":"","h":895,"w":1200,"s":2291536,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_848a8a3f-13d9-4038-8b16-32c1835f5fbd","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 3: \"Buy Cryptocurrency\"\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_b22624f8-ba99-4cba-b359-283a58e2bac2","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003e Select \"Buy Cryptocurrency\" on the X-Wallet Home Page to begin your purchase.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_65a7648c-c59d-47a3-b97a-fc0650cc8a69","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_15c7d4dc-ac76-494c-92b4-86fe0e0b1281","components":{"media1":{"type":"Media","id":"f_7520fb7c-b07d-4d78-a565-cd0179e2056c","defaultValue":true,"video":{"type":"Video","id":"f_42a8cd19-a502-4391-a073-da5731a3d3d3","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_959fb69e-fd22-4901-848f-102600f451f5","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/423190_137835","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","h":896,"w":1195,"s":1671219,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_482fe21d-aa24-4f5e-a523-326ed572a8f7","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 4: Choose from over 400 assets\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_27459ac8-198d-4f56-866b-21d167ffffcd","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003ebuy Bitcoin and hundreds of popular cryptocurrencies available on X-Wallet now (geographic restrictions apply).\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_6de22c83-540a-4c24-bfd9-b77861f98bdd","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_9b17393f-604e-498f-b61a-5c54fb2b075b","components":{"media1":{"type":"Media","id":"f_8ae86797-8f2d-421f-8ce5-7a160725364b","defaultValue":true,"video":{"type":"Video","id":"f_42a8cd19-a502-4391-a073-da5731a3d3d3","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_959fb69e-fd22-4901-848f-102600f451f5","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/576493_585308","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"24px","aspect_ratio":"1\/1","h":882,"w":718,"s":35444,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_1aef2734-e561-4e38-80dd-190dc02a0a95","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 5: Enter the cash amount\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_2d0fc4bc-c335-4199-9600-d35430794245","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eEnter the amount you wish to spend in your local currency, and then see how many BTC you will receive.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_3c7a0474-29ea-4ac7-8188-0d63a66254a2","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_484036aa-72a6-47ef-b7ea-85a64c6c10fd","components":{"media1":{"type":"Media","id":"f_d58bf3f2-442f-4dbd-a130-65b41e00c07d","defaultValue":true,"video":{"type":"Video","id":"f_42a8cd19-a502-4391-a073-da5731a3d3d3","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_959fb69e-fd22-4901-848f-102600f451f5","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/280416_498344","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","h":842,"w":1181,"s":1802285,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_95c549c9-5876-430f-a8c8-5cc1012a5707","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 6: Complete your order\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_421ddda3-bc0c-46b6-86c3-094313595ed8","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003e Confirm the asset price, purchase amount, and fees to receive Bitcoin in your X-Wallet account immediately.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_82ac9dd6-0ee6-411f-ac41-5f851775563d","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}}],"components":{"media1":{"type":"Media","id":"f_418d1744-84b8-4cc1-846c-ee61de595dce","defaultValue":true,"video":{"type":"Video","id":"f_753e441f-fdf2-40c8-9db9-2c91afe880e0","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_80b2756b-69fa-422b-b5c1-b2433841af98","defaultValue":true,"link_url":null,"thumb_url":"\/\/static-assets.strikinglycdn.com\/images\/editor2\/feature_list\/thumb-list-D-1.png","url":"\/\/static-assets.strikinglycdn.com\/images\/editor2\/feature_list\/list-D-1.png","caption":"","description":"","new_target":true},"current":"image"},"text1":{"type":"RichText","id":"f_7e29ec4c-1ecf-4001-a649-e701785fc153","defaultValue":true,"value":"What We Do","backupValue":null,"version":null},"text2":{"type":"RichText","id":"f_a237d24e-ef32-4816-b338-739ef3984e23","defaultValue":true,"value":"Show off your projects, features, or clients in this section.","backupValue":null,"version":null},"button1":{"type":"Button","id":"f_b18c8428-9eb7-4adc-b4e5-555831c9f1cc","defaultValue":true,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null}}},"text1":{"type":"RichText","id":"f_4e9c7e47-85d8-4183-b9d7-0319869ed26f","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003ch4 class=\" s-rich-text-wrapper font-size-tag-header-four s-text-font-size-over-default\" style=\"font-size: 20px;\"\u003e\u003cstrong\u003eHow to Buy Bitcoin\u003c\/strong\u003e\u003c\/h4\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_129a1d78-2d91-486f-b876-bfdd03e59f87","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"text-align: center; font-size: 14px;\"\u003e\u003cspan\u003eLearn how to buy \u003c\/span\u003e\u003cspan style=\"color: #1d2023;\"\u003e\u003cstrong\u003eBitcoin \u003c\/strong\u003e\u003c\/span\u003e\u003cspan\u003eon the X-Wallet cryptocurrency platform. Create your free account and link a fund option to buy various cryptocurrencies, including BTC. X-Wallet helps you get started quickly and easily.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":"center","lastLineTextAlign":"center"},"defaultDataProcessed":true}}},{"type":"Slide","id":"f_63269242-2d18-4562-941d-bd95cf04ec21","defaultValue":null,"template_name":"s6_common_section","template_version":"s6","components":{"slideSettings":{"type":"SlideSettings","id":"f_e63fb985-bfa1-449e-a381-2cbc6ee943db","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"name":"\u81ea\u5b9a\u4e49\u7248\u5757","sync_key":null,"layout_variation":null,"display_settings":{},"padding":{"top":"none","bottom":"normal"},"layout_config":{"width":"auto","height":"auto"}}}},{"type":"Slide","id":"f_0d04bd46-0727-4881-b35a-359812bb634e","defaultValue":true,"template_name":"process","template_version":"beta-s6","components":{"slideSettings":{"type":"SlideSettings","id":"f_08d6e00e-9afa-4cd3-935f-a725197cfd5f","defaultValue":true,"show_nav":true,"nameChanged":true,"hidden_section":false,"name":"\u6d41\u7a0b\u56fe","sync_key":null,"layout_variation":"vertical","padding":{"top":"none","bottom":"none"}}}},{"type":"Slide","id":"f_be9d447f-1be0-4ec9-a1c7-964f3d142ba0","defaultValue":true,"template_name":"faq","components":{"slideSettings":{"type":"SlideSettings","id":"f_980f4ab3-fbe4-4c94-9c50-e30ec81dc464","defaultValue":null,"show_nav":true,"nameChanged":true,"hidden_section":false,"name":"\u53ef\u6298\u53e0\u6587\u672c\/\u5e38\u89c1\u95ee\u7b54","sync_key":null,"layout_variation":"normal","padding":{"top":"none","bottom":"none"},"layout_config":{"layout":"C","columns":"two","color":"secondary"}}}}],"title":"BTC FAQ","uid":"e0e5bfb8-a3d0-4251-a9a1-191b0bd0fce0","path":"\/btc-faq","memberOnly":null,"paidMemberOnly":null,"buySpecificProductList":null,"specificTierList":null,"autoPath":true,"authorized":true},{"type":"Page","id":"f_92dfc180-a403-4700-876d-ad3e25142814","sections":[{"type":"Slide","id":"f_d28cfab5-1252-4aae-a4c7-81de56ead931","defaultValue":null,"template_name":"featureListE","components":{"slideSettings":{"type":"SlideSettings","id":"f_9652d7ca-22bb-4631-b24a-495873c39c50","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"hidden_mobile_section":false,"name":"\u5217\u8868\u5e03\u5c40","sync_key":null,"layout_variation":"normal","padding":{"top":"half","bottom":"normal"},"layout_config":{"noTemplateDiff":true,"card_radius":"square","cardBackgroundSettings":{"type":"default","default":"#f2f2f2","id":"f_e4ec2753-916e-4022-9ca3-90e86c2cbe8c"},"border_thickness":"small","card_padding":"medium","spacing":"S","subtitleReplaceToText":true,"mediaSize":"xs","horizontal_alignment":"center","layout":"E","border":false,"mediaPosition":"left","showButton":false,"border_color":"#f2f2f2","card":false,"structure":"grid","card_color":"#f2f2f2","vertical_alignment":"middle","borderBackgroundSettings":{"type":"default","default":"#f2f2f2","id":"f_ca316c9f-0a92-46ae-8639-93d5f2351a27"},"grid_media_position":"top","columns":"six","content_align":"center"}},"background1":{"type":"Background","id":"f_04a1dbe7-888d-4d5a-a87d-8b3503ab3019","defaultValue":false,"url":"","textColor":"","backgroundVariation":"","sizing":"","userClassName":"","videoUrl":"","videoHtml":"","storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null,"useImage":false,"focus":null,"backgroundColor":{"themeColorRangeIndex":null,"value":"#1e222d","type":"custom","id":"f_406c6430-0753-42a6-9e74-93e315e8c35f"}},"repeatable1":{"type":"Repeatable","id":"f_3d685ee1-5307-4bd1-9dbb-b6d8f20d45c2","defaultValue":false,"list":[{"type":"RepeatableItem","id":"f_69919086-0de2-4817-a6f3-d08e6f82824e","defaultValue":true,"components":{"media1":{"type":"Media","id":"f_36ddb1ef-241b-4770-a8fb-a0157163755e","defaultValue":true,"video":{"type":"Video","id":"f_326a2df3-1fee-4742-83f9-9028b353f226","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_9a3c8f4c-df4e-40b0-b287-03d2c52c1b82","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/628259_29935","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","aspect_ratio":"1\/1","h":1152,"w":922,"s":1212472,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_65ea2351-609b-4499-9bda-5428a71b960b","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 1: Register\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_d03d1a61-0247-409f-9957-49c7376df8e9","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eProvide your email address and name to begin our security verification process.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_371e0755-93cb-4a0d-a568-5b9a7db4f990","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_7ac58da4-7efe-408b-bf79-30f76756cdb9","defaultValue":true,"components":{"media1":{"type":"Media","id":"f_67514178-a286-4b90-ae72-3849c0e37ab3","defaultValue":true,"video":{"type":"Video","id":"f_73413d47-3e02-4998-86ca-91b0fe5df6b1","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_fa9f4a4c-5e1c-49c7-bec7-b3de6d1537ad","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/875149_648903","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"24px","aspect_ratio":"1\/1","h":767,"w":708,"s":22482,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_bcf4dfc8-43cc-44a3-bc2d-e4230b0fda60","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 2: Choose a payment method\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_af57fafe-9cae-4a29-9325-4364a2280cf5","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003esend a bank wire transfer, make an ACH purchase, use a credit\/debit card, or link one of several other payment methods.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_456f7ce7-fd2e-434c-ae17-716c873958a6","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_ba13a269-df16-474c-baf7-34f62ec5e709","components":{"media1":{"type":"Media","id":"f_753b9b53-4c25-4496-b407-010fe47d4992","defaultValue":true,"video":{"type":"Video","id":"f_a8cad60b-9358-4400-b0af-44e0c6a4c357","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_cf669100-1510-4a0b-8cac-0fe3db38baac","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/380189_670857","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","aspect_ratio":"","h":895,"w":1200,"s":2291536,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_91fe825e-be03-48f0-b5bf-b131c91ea074","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 3: \"Buy Cryptocurrency\"\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_4f0d8d44-dfa3-4a6d-b34a-012d4aedc218","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003e Select \"Buy Cryptocurrency\" on the X-Wallet Home Page to begin your purchase.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_af713217-96e5-4dc9-9e2e-7b78c1c9124d","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_19f86baf-cae3-436c-a6d3-14a1591095c1","components":{"media1":{"type":"Media","id":"f_bc5d2438-150c-4bef-a2cc-d3b2de6affd7","defaultValue":true,"video":{"type":"Video","id":"f_0f637e79-78a0-4388-a369-e1952208ab50","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_b9f9afd0-f623-4f62-9ef3-e12a459abdf5","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/423190_137835","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","h":896,"w":1195,"s":1671219,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_61ef7365-f217-4e17-b200-7627ef67ed00","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 4: Choose from over 400 assets\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_2d2b977c-0d68-4e64-9a66-b47f42637b16","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003ebuy Bitcoin and hundreds of popular cryptocurrencies available on X-Wallet now (geographic restrictions apply).\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_668d59f4-e692-46a2-87c4-62f64c8ff440","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_7ad0b4b0-d58e-4bf5-a04a-3a2af6590b96","components":{"media1":{"type":"Media","id":"f_9ae39f3e-9d96-44dd-b37c-e55ae8e4cbb0","defaultValue":true,"video":{"type":"Video","id":"f_a1802d19-cbc8-4e13-95d0-ca93a150ea78","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_44849b17-4fc1-48a2-872a-ae6e8b30c1eb","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/576493_585308","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"24px","aspect_ratio":"1\/1","h":882,"w":718,"s":35444,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_386b083a-29a0-41a6-b544-e924662819f9","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 5: Enter the cash amount\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_0ee8a96e-5ec0-443a-b34c-831a31f53de9","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eEnter the amount you wish to spend in your local currency, and then see how many BTC you will receive.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_9c95f6e8-37d9-44b7-ac34-a950210f479d","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_f7cce24c-1adc-47e3-b25c-ce8329364ecb","components":{"media1":{"type":"Media","id":"f_314baaf4-54ca-4a87-b371-f4e04bc5ba6b","defaultValue":true,"video":{"type":"Video","id":"f_970ed033-631d-4be0-995c-4cd7aa6d0a6c","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_a5944eed-7d7e-4284-97de-2c2c2db20940","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/280416_498344","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","h":842,"w":1181,"s":1802285,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_d79f6dd7-6923-4525-9ca9-66dd24e34b1e","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 6: Complete your order\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_0c33e664-0183-4e83-9cc7-c6ffd15d876e","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003e Confirm the asset price, purchase amount, and fees to receive Bitcoin in your X-Wallet account immediately.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_1d635e14-fedf-4c95-898c-2cb308aa041c","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}}],"components":{"media1":{"type":"Media","id":"f_680a41a8-8a1b-4ee8-ae76-96eef56827b1","defaultValue":true,"video":{"type":"Video","id":"f_232585d8-5b17-43a3-8cfa-af2013d8658e","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_36f8489f-14b0-43a9-9f93-fda537d3f394","defaultValue":true,"link_url":null,"thumb_url":"\/\/static-assets.strikinglycdn.com\/images\/editor2\/feature_list\/thumb-list-D-1.png","url":"\/\/static-assets.strikinglycdn.com\/images\/editor2\/feature_list\/list-D-1.png","caption":"","description":"","new_target":true},"current":"image"},"text1":{"type":"RichText","id":"f_f43ca641-6acd-468f-9c9f-0d61bf121167","defaultValue":true,"value":"What We Do","backupValue":null,"version":null},"text2":{"type":"RichText","id":"f_80945658-bbe7-4a91-99a2-f951dbce30da","defaultValue":true,"value":"Show off your projects, features, or clients in this section.","backupValue":null,"version":null},"button1":{"type":"Button","id":"f_402e40a5-b88e-4573-bffc-b34cc81ca915","defaultValue":true,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null}}},"text1":{"type":"RichText","id":"f_1ed42dc0-0739-4863-971a-ec6bc7030f59","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003ch4 class=\" s-rich-text-wrapper font-size-tag-header-four s-text-font-size-over-default\" style=\"font-size: 20px;\"\u003e\u003cspan style=\"color: var(--s-pre-color12);\"\u003e\u003cstrong\u003eHow to Buy Ethereum\u003c\/strong\u003e\u003c\/span\u003e\u003c\/h4\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_2a649b54-9d9d-43c3-9636-f5780ce24a14","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"text-align: center; font-size: 14px;\"\u003e\u003cspan\u003eLearn how to buy \u003c\/span\u003e\u003cspan style=\"color: #000000;\"\u003e\u003cstrong\u003eEthereum\u003c\/strong\u003e\u003c\/span\u003e\u003cspan\u003e on the X-Wallet cryptocurrency platform. Create your free account and link a fund option to buy various cryptocurrencies, including ETH. X-Wallet helps you get started quickly and easily.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":"center","lastLineTextAlign":"center"},"defaultDataProcessed":true}}},{"type":"Slide","id":"f_a2c55cb2-6238-4858-95bb-c587981f1f9a","defaultValue":null,"template_name":"s6_common_section","template_version":"s6","components":{"slideSettings":{"type":"SlideSettings","id":"f_8fe183d9-00dd-4309-9cf6-3f57d21a2231","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"name":"\u81ea\u5b9a\u4e49\u7248\u5757","sync_key":null,"layout_variation":null,"display_settings":{},"padding":{"top":"none","bottom":"normal"},"layout_config":{"width":"auto","height":"auto"}}}},{"type":"Slide","id":"f_aea1cc9e-ec4a-4683-9b0b-82de3f7b51bf","defaultValue":true,"template_name":"process","template_version":"beta-s6","components":{"slideSettings":{"type":"SlideSettings","id":"f_58ff3194-8c9e-4989-a140-955ab645cbb1","defaultValue":true,"show_nav":true,"nameChanged":true,"hidden_section":false,"name":"\u6d41\u7a0b\u56fe","sync_key":null,"layout_variation":"vertical","padding":{"top":"none","bottom":"none"}}}},{"type":"Slide","id":"f_39cd3271-4629-4270-91ab-60f467add078","defaultValue":true,"template_name":"faq","components":{"slideSettings":{"type":"SlideSettings","id":"f_f2c7b083-ad6d-44a5-9a22-4b984812b5cd","defaultValue":null,"show_nav":true,"nameChanged":true,"hidden_section":false,"name":"\u53ef\u6298\u53e0\u6587\u672c\/\u5e38\u89c1\u95ee\u7b54","sync_key":null,"layout_variation":"normal","padding":{"top":"none","bottom":"none"},"layout_config":{"layout":"C","columns":"two","color":"secondary"}}}}],"title":"ETH FAQ","uid":"f229404f-367f-4bb8-b52a-38507413542c","path":"\/eth-faq","memberOnly":null,"paidMemberOnly":null,"buySpecificProductList":null,"specificTierList":null,"autoPath":true,"authorized":true},{"type":"Page","id":"f_a55f48d3-e63e-4729-b719-304ad8ed1298","sections":[{"type":"Slide","id":"f_dca23af2-9327-4d34-9ea9-0f1707bd284b","defaultValue":null,"template_name":"featureListE","components":{"slideSettings":{"type":"SlideSettings","id":"f_245c695a-ce49-4948-82d1-88b277e079c7","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"hidden_mobile_section":false,"name":"\u5217\u8868\u5e03\u5c40","sync_key":null,"layout_variation":"normal","padding":{"top":"half","bottom":"normal"},"layout_config":{"noTemplateDiff":true,"card_radius":"square","cardBackgroundSettings":{"type":"default","default":"#f2f2f2","id":"f_455e4180-8a20-4c8b-a7d2-39d20e1902d3"},"border_thickness":"small","card_padding":"medium","spacing":"S","subtitleReplaceToText":true,"mediaSize":"xs","horizontal_alignment":"center","layout":"E","border":false,"mediaPosition":"left","showButton":false,"border_color":"#f2f2f2","card":false,"structure":"grid","card_color":"#f2f2f2","vertical_alignment":"middle","borderBackgroundSettings":{"type":"default","default":"#f2f2f2","id":"f_33923942-6e24-4aea-9add-db2bd41fb9d9"},"grid_media_position":"top","columns":"six","content_align":"center"}},"background1":{"type":"Background","id":"f_476ba85b-73ce-408f-a823-a33138871dda","defaultValue":false,"url":"","textColor":"","backgroundVariation":"","sizing":"","userClassName":"","videoUrl":"","videoHtml":"","storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null,"useImage":false,"focus":null,"backgroundColor":{"themeColorRangeIndex":null,"value":"#1e222d","type":"custom","id":"f_fb86eaa6-4009-4647-ba00-feb4db33721e"}},"repeatable1":{"type":"Repeatable","id":"f_66e6b405-b3b6-4248-b4df-649f8f871819","defaultValue":false,"list":[{"type":"RepeatableItem","id":"f_346fdb6d-0ee5-47bd-8cf3-4a64727d63d8","defaultValue":true,"components":{"media1":{"type":"Media","id":"f_6c331dab-5252-4f59-bbbb-2832572a2aa5","defaultValue":true,"video":{"type":"Video","id":"f_3a2df2f2-3920-4f67-ac7a-3e9ba79f78b3","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_6c174719-9856-4498-a699-02d2ed79b6b1","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/628259_29935","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","aspect_ratio":"1\/1","h":1152,"w":922,"s":1212472,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_d29b95c6-986a-4157-8c48-b106163d811e","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 1: Register\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_e41994fc-88dd-4016-a2ee-129e0149470a","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eProvide your email address and name to begin our security verification process.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_1d556659-d656-4322-9a6a-6e8c86740095","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_e1885994-b442-4217-bbea-7eceab46902a","defaultValue":true,"components":{"media1":{"type":"Media","id":"f_c76a73c7-7104-400c-9b46-814aa0076e6d","defaultValue":true,"video":{"type":"Video","id":"f_f640af9f-bb76-406f-8f08-10e02d70b4e4","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_b19ab5bb-7897-4b25-aa2b-c692ac402e29","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/875149_648903","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"24px","aspect_ratio":"1\/1","h":767,"w":708,"s":22482,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_562267e3-b021-42d6-80ad-519d069c5618","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 2: Choose a payment method\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_64594e31-4cf2-4420-8c09-9295e2a0940b","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003esend a bank wire transfer, make an ACH purchase, use a credit\/debit card, or link one of several other payment methods.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_047be25b-f825-4b7a-85ba-c6fe9ace9bc6","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_3f60ad44-bb29-488c-80be-044d12a1b71a","components":{"media1":{"type":"Media","id":"f_ed7bd943-4442-48cf-bd15-369e70b115d5","defaultValue":true,"video":{"type":"Video","id":"f_6abb9d65-844a-4adf-a578-e4899b2f1a43","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_c83dd45c-3fd3-4262-8ad0-83dc37e9da3b","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/380189_670857","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","aspect_ratio":"","h":895,"w":1200,"s":2291536,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_1458b291-6729-4acd-8d7c-dc8eb7c4cd8e","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 3: \"Buy Cryptocurrency\"\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_f49b8d2d-4fe7-40d1-ab69-a9213e5a2e4d","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003e Select \"Buy Cryptocurrency\" on the X-Wallet Home Page to begin your purchase.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_2d74c8f9-0595-4ef2-8d6a-8935c1d870f6","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_3c6eddb4-c359-4ec1-86b4-404d121be7f4","components":{"media1":{"type":"Media","id":"f_872dae35-dea7-495d-b0e0-dc07ff1e5322","defaultValue":true,"video":{"type":"Video","id":"f_b0325443-b9ce-42a9-bdd4-2eb1b8c26e6f","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_1fdf87e0-504e-466f-96a6-72fc0473cee7","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/423190_137835","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","h":896,"w":1195,"s":1671219,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_365c3654-07e1-4bb4-8966-a2191c1fe9f2","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 4: Choose from over 400 assets\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_5755a5af-53fe-49fc-87dc-e39fa56b0a66","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003ebuy Bitcoin and hundreds of popular cryptocurrencies available on X-Wallet now (geographic restrictions apply).\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_272356ea-1375-4baa-969a-cc1e6f354bc1","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_4c5bc976-2b61-4b89-b296-85ebf531abe9","components":{"media1":{"type":"Media","id":"f_cc7cacc9-15b4-4c76-bfc3-7f58d2793f55","defaultValue":true,"video":{"type":"Video","id":"f_338b6645-36ce-4902-9bc7-ea703bd84277","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_0f3ad02a-4e2d-45af-a1b0-9530707abd2b","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/576493_585308","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"24px","aspect_ratio":"1\/1","h":882,"w":718,"s":35444,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_e814b32f-e350-4f30-bd73-36f67d1aa2c7","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 5: Enter the cash amount\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_d1bf0c03-ff10-4f80-9c25-4736ffddfb09","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003eEnter the amount you wish to spend in your local currency, and then see how many BTC you will receive.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_ad0194d7-ac35-49ce-8416-5ff49a16e38b","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_877590a0-74c2-43c8-a12a-500c15b43ba1","components":{"media1":{"type":"Media","id":"f_eb7447c5-0b68-4f9e-b640-100373ad06de","defaultValue":true,"video":{"type":"Video","id":"f_f3466e65-2e37-4f7f-9e67-53a52a226d10","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_206d84cb-b7a8-4915-b447-ba9bf38192f2","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/280416_498344","storage":"s","storagePrefix":null,"format":"png","border_radius":"24px","h":842,"w":1181,"s":1802285,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_6bd6543a-4705-4a61-894e-9e16ef7e0992","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10); \"\u003e\u003cstrong\u003eStep 6: Complete your order\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_a851a196-fef4-4603-a44b-f4fede6bdc0d","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color8); \"\u003e Confirm the asset price, purchase amount, and fees to receive Bitcoin in your X-Wallet account immediately.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_2b09a46b-2ab2-41e3-9875-1743d2ecedde","defaultValue":false,"alignment":"auto","text":"\u67e5\u770b\u66f4\u591a","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}}],"components":{"media1":{"type":"Media","id":"f_dd590536-911d-436c-a572-c8ba0fbc0306","defaultValue":true,"video":{"type":"Video","id":"f_3129f68f-e982-4128-9954-8bd536c1470d","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_36440772-8010-4a99-baa0-384521ccc25b","defaultValue":true,"link_url":null,"thumb_url":"\/\/static-assets.strikinglycdn.com\/images\/editor2\/feature_list\/thumb-list-D-1.png","url":"\/\/static-assets.strikinglycdn.com\/images\/editor2\/feature_list\/list-D-1.png","caption":"","description":"","new_target":true},"current":"image"},"text1":{"type":"RichText","id":"f_85857384-29f2-430b-a361-9237509eb729","defaultValue":true,"value":"What We Do","backupValue":null,"version":null},"text2":{"type":"RichText","id":"f_f33413f9-a888-45c0-b501-c23cf7693060","defaultValue":true,"value":"Show off your projects, features, or clients in this section.","backupValue":null,"version":null},"button1":{"type":"Button","id":"f_616d7368-7f9d-4afa-9981-87ed5fca18ea","defaultValue":true,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null}}},"text1":{"type":"RichText","id":"f_9308bfce-4c18-4fb0-9cc0-610a7201c17f","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003ch4 class=\" s-rich-text-wrapper font-size-tag-header-four s-text-font-size-over-default\" style=\"font-size: 20px;\"\u003e\u003cspan style=\"color: var(--s-pre-color12);\"\u003e\u003cstrong\u003eHow to Buy Tether\u003c\/strong\u003e\u003c\/span\u003e\u003c\/h4\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_5b8c2467-cb31-4284-aa6d-b7eadd747233","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"text-align: center; font-size: 14px;\"\u003e\u003cspan\u003eLearn how to buy \u003c\/span\u003e\u003cspan style=\"color: #000000; \"\u003e\u003cstrong\u003eTether \u003c\/strong\u003e\u003c\/span\u003e\u003cspan\u003eon the X-Wallet cryptocurrency platform. Create your free account and link a fund option to buy various cryptocurrencies, including USDT. X-Wallet helps you get started quickly and easily.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":"center","lastLineTextAlign":"center"},"defaultDataProcessed":true}}},{"type":"Slide","id":"f_39f5a560-f808-4d7a-b07f-d2d6b0600f62","defaultValue":null,"template_name":"s6_common_section","template_version":"s6","components":{"slideSettings":{"type":"SlideSettings","id":"f_359f4c07-675c-47ac-ac5c-219d7b87f838","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"name":"\u81ea\u5b9a\u4e49\u7248\u5757","sync_key":null,"layout_variation":null,"display_settings":{},"padding":{"top":"none","bottom":"normal"},"layout_config":{"width":"auto","height":"auto"}}}},{"type":"Slide","id":"f_3ee0d98d-f4f1-4f21-aaae-167afbf4170f","defaultValue":true,"template_name":"process","template_version":"beta-s6","components":{"slideSettings":{"type":"SlideSettings","id":"f_63d15004-4a62-48db-be03-a9b6b4d3555f","defaultValue":true,"show_nav":true,"nameChanged":true,"hidden_section":false,"name":"\u6d41\u7a0b\u56fe","sync_key":null,"layout_variation":"vertical","padding":{"top":"none","bottom":"none"}}}},{"type":"Slide","id":"f_2d8c19cc-3d2c-423a-a6a6-18b7d1ea61b8","defaultValue":true,"template_name":"faq","components":{"slideSettings":{"type":"SlideSettings","id":"f_11cd6afb-b6ec-4997-b0c4-7b4771532bf4","defaultValue":null,"show_nav":true,"nameChanged":true,"hidden_section":false,"name":"\u53ef\u6298\u53e0\u6587\u672c\/\u5e38\u89c1\u95ee\u7b54","sync_key":null,"layout_variation":"normal","padding":{"top":"none","bottom":"none"},"layout_config":{"layout":"C","columns":"two","color":"secondary"}}}}],"title":"Tether FAQ","uid":"2d5e69b3-7908-4a72-b5ce-46362bd7ad35","path":"\/tether-faq","memberOnly":null,"paidMemberOnly":null,"buySpecificProductList":null,"specificTierList":null,"autoPath":true,"authorized":true},{"type":"Page","id":"f_f5870c0e-265d-401d-beaf-85295a82d2c3","sections":[{"type":"Slide","id":"f_6c614456-3062-4259-9765-11fcd7f9155d","defaultValue":null,"template_name":"s6_common_section","template_version":"s6","components":{"slideSettings":{"type":"SlideSettings","id":"f_f43f4bf7-258a-456c-8981-0fb1a7275521","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"name":"\u81ea\u5b9a\u4e49\u7248\u5757","sync_key":null,"layout_variation":null,"display_settings":{},"padding":{"top":"normal","bottom":"normal"},"layout_config":{"width":"auto","height":"auto"}},"background1":{"type":"Background","id":"f_3bb5b98d-e443-436a-87a1-f28c74aece9d","defaultValue":false,"url":"","textColor":"","backgroundVariation":"","sizing":"","userClassName":"","linkUrl":null,"linkTarget":null,"videoUrl":"","videoHtml":"","storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null,"useImage":false,"noCompression":null,"focus":null,"backgroundColor":{"themeColorRangeIndex":null,"value":"#1e222d","type":"custom","id":"f_46549901-26e9-4738-b7e6-956d37f745bc"}},"block1":{"type":"BlockComponent","id":"f_79d37211-4094-4105-a556-df8ae95a3bf6","defaultValue":null,"items":[{"type":"BlockComponentItem","id":"f_d44a6a92-9116-47e9-90fe-ae70e67ed02b","defaultValue":null,"name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"f_d6ac583d-070d-4aed-846d-a78343203e76","defaultValue":null,"items":[{"type":"BlockComponentItem","id":"f_0956f82b-abb3-49f8-8111-62f591bfa3f1","defaultValue":null,"name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"f_5f7b64f4-d532-4c95-b33a-840271dfc2c1","defaultValue":null,"items":[{"type":"HtmlComponent","id":27292883,"defaultValue":false,"value":"\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\"en\"\u0026gt;\n\u0026lt;head\u0026gt;\n\u0026lt;meta charset=\"UTF-8\"\u0026gt;\n\u0026lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u0026gt;\n\u0026lt;title\u0026gt;Order Book\u0026lt;\/title\u0026gt;\n\u0026lt;style\u0026gt;\n*, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n background: transparent;\n color: #FFFFFF;\n min-height: 100vh;\n padding: 16px;\n}\n\n.container {\n width: 100%;\n max-width: 100%;\n margin: 0 auto;\n}\n\n\/* ===== HEADER ===== *\/\n.header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 4px;\n}\n\n.coin-icon {\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: #252930;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n.coin-icon img {\n width: 24px;\n height: 24px;\n}\n\n.pair-name {\n font-size: 18px;\n font-weight: 700;\n}\n\n.header-price {\n font-size: 18px;\n font-weight: 700;\n margin-left: 4px;\n}\n.header-price.up { color: #00C076; }\n.header-price.down { color: #F6465D; }\n\n.header-usd {\n font-size: 12px;\n color: #8E9294;\n margin-left: 4px;\n}\n\n.header-change {\n margin-left: auto;\n text-align: right;\n}\n.header-change-label {\n font-size: 11px;\n color: #8E9294;\n}\n.header-change-val {\n font-size: 13px;\n font-weight: 600;\n}\n.header-change-val.up { color: #00C076; }\n.header-change-val.down { color: #F6465D; }\n\n\/* ===== TITLE ROW ===== *\/\n.title-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 12px;\n margin-bottom: 4px;\n}\n.title-left {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n.title-text {\n font-size: 15px;\n font-weight: 700;\n}\n\n\/* clickable toggle buttons *\/\n.toggle-btns {\n display: flex;\n gap: 4px;\n}\n.toggle-btn {\n width: 28px;\n height: 18px;\n border-radius: 3px;\n border: none;\n cursor: pointer;\n opacity: 0.45;\n transition: opacity 0.15s, transform 0.1s;\n position: relative;\n overflow: hidden;\n}\n.toggle-btn:hover { opacity: 0.7; }\n.toggle-btn.active { opacity: 1; transform: scale(1.08); }\n.toggle-btn.dual {\n background: linear-gradient(to right, #F6465D 50%, #00C076 50%);\n}\n.toggle-btn.green-only { background: #00C076; }\n.toggle-btn.red-only { background: #F6465D; }\n\n.pair-dropdown {\n padding: 7px 30px 7px 12px;\n background: rgba(255,255,255,0.08);\n border: 1px solid rgba(255,255,255,0.12);\n border-radius: 999px;\n color: #FFFFFF;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n outline: none;\n appearance: none;\n -webkit-appearance: none;\n background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='10' viewBox='0 0 10 10'%3E%3Cpath d='M2 3.5L5 6L8 3.5' fill='none' stroke='%23999' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'\/%3E%3C\/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 10px center;\n}\n\n.precision-dropdown {\n padding: 7px 28px 7px 10px;\n background: rgba(255,255,255,0.08);\n border: 1px solid rgba(255,255,255,0.12);\n border-radius: 4px;\n color: #FFFFFF;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n outline: none;\n appearance: none;\n -webkit-appearance: none;\n background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='10' viewBox='0 0 10 10'%3E%3Cpath d='M2 3.5L5 6L8 3.5' fill='none' stroke='%23999' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'\/%3E%3C\/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n}\n\n\/* ===== COLUMN HEADERS ===== *\/\n.col-headers {\n display: flex;\n padding: 6px 12px;\n font-size: 11px;\n color: #8E9294;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-top: 6px;\n}\n.col-headers span:nth-child(1) { flex:1; text-align:right; padding-right:8px; }\n.col-headers span:nth-child(2) { flex:1; text-align:center; }\n.col-headers span:nth-child(3) { flex:1; text-align:right; padding-left:8px; }\n\n\/* ===== TWO PANELS SIDE BY SIDE ===== *\/\n.panels {\n display: flex;\n border-radius: 8px;\n overflow: hidden;\n}\n.panel {\n flex: 1;\n background: rgba(255,255,255,0.025);\n border: 1px solid rgba(255,255,255,0.05);\n}\n.panel.red { border-radius: 8px 0 0 8px; border-right: none; }\n.panel.green { border-radius: 0 8px 8px 0; border-left: none; }\n.panel.solo { border-radius: 8px; border: 1px solid rgba(255,255,255,0.05); }\n\n\/* ===== ROW ===== *\/\n.row {\n display: flex;\n padding: 4px 14px;\n font-size: 13px;\n font-variant-numeric: tabular-nums;\n line-height: 1.7;\n position: relative;\n min-height: 28px;\n}\n.row .bar {\n position: absolute;\n top: 2px;\n bottom: 2px;\n opacity: 0.06;\n pointer-events: none;\n border-radius: 2px;\n}\n.red .row .bar { right: 4px; background: #F6465D; }\n.green .row .bar { left: 4px; background: #00C076; }\n\n.row .price { flex:1; text-align:right; padding-right:8px; }\n.row .qty { flex:1; text-align:center; padding:0 4px; color:#C6C9CD; }\n.row .vol { flex:1; text-align:right; padding-left:8px; color:#C6C9CD; }\n\n.red .row .price { color: #F6465D; }\n.green .row .price { color: #00C076; }\n\n.row.best { background: rgba(255,255,255,0.04); }\n.row.best .qty { color: #FFFFFF; }\n\n\/* ===== CURRENT PRICE DIVIDER ===== *\/\n.price-divider {\n display: flex;\n align-items: center;\n padding: 12px 14px;\n margin: 4px 0;\n background: rgba(255,255,255,0.03);\n border-top: 1px solid rgba(255,255,255,0.06);\n border-bottom: 1px solid rgba(255,255,255,0.06);\n}\n.price-divider .current {\n font-size: 22px;\n font-weight: 700;\n font-variant-numeric: tabular-nums;\n}\n.price-divider .current.up { color: #00C076; }\n.price-divider .current.down { color: #F6465D; }\n.price-divider .arrow { font-size: 16px; margin-left: 6px; }\n.price-divider .usd { font-size: 12px; color: #8E9294; margin-left: 4px; }\n.price-divider .more { margin-left: auto; color: #8E9294; font-size: 18px; text-decoration:none; cursor:default; }\n\n\/* ===== STATUS ===== *\/\n.status {\n text-align: center;\n font-size: 12px;\n color: #8E9294;\n padding: 6px 0;\n display: none;\n}\n.status.show { display: block; }\n.status.error { color: #F6465D; }\n\n\/* ===== RESPONSIVE ===== *\/\n@media (max-width: 600px) {\n .container { transform: scale(0.82); transform-origin: top center; }\n body { padding: 4px; }\n .pair-name { font-size:15px; }\n .header-price { font-size:15px; }\n .row { font-size:11px; padding:3px 8px; min-height:24px; }\n .price-divider .current { font-size:18px; }\n .col-headers { font-size:10px; }\n .coin-icon { width:30px; height:30px; font-size:16px; }\n .toggle-btn { width:24px; height:16px; }\n}\n\u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\u0026lt;div class=\"container\"\u0026gt;\n\n \u0026lt;div class=\"header\"\u0026gt;\n \u0026lt;div class=\"coin-icon\" id=\"coinIcon\"\u0026gt;\u0026lt;img id=\"coinImg\" src=\"\" alt=\"\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;span class=\"pair-name\" id=\"pairName\"\u0026gt;BTC\/USDT\u0026lt;\/span\u0026gt;\n \u0026lt;span class=\"header-price down\" id=\"headerPrice\"\u0026gt;--\u0026lt;\/span\u0026gt;\n \u0026lt;span class=\"header-usd\" id=\"headerUSD\"\u0026gt;--\u0026lt;\/span\u0026gt;\n \u0026lt;div class=\"header-change\"\u0026gt;\n \u0026lt;div class=\"header-change-label\"\u0026gt;24h Change\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"header-change-val down\" id=\"headerChange\"\u0026gt;--\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"title-row\"\u0026gt;\n \u0026lt;div class=\"title-left\"\u0026gt;\n \u0026lt;span class=\"title-text\"\u0026gt;Order Book\u0026lt;\/span\u0026gt;\n \u0026lt;div class=\"toggle-btns\"\u0026gt;\n \u0026lt;button class=\"toggle-btn dual active\" id=\"btnDual\" title=\"Both\"\u0026gt;\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"toggle-btn green-only\" id=\"btnGreen\" title=\"Bids Only\"\u0026gt;\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"toggle-btn red-only\" id=\"btnRed\" title=\"Asks Only\"\u0026gt;\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div style=\"display:flex;align-items:center;gap:8px;\"\u0026gt;\n \u0026lt;select class=\"pair-dropdown\" id=\"pairSelect\"\u0026gt;\n \u0026lt;option value=\"BTCUSDT\"\u0026gt;BTC\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ETHUSDT\"\u0026gt;ETH\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"BNBUSDT\"\u0026gt;BNB\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"SOLUSDT\"\u0026gt;SOL\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"XRPUSDT\"\u0026gt;XRP\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ADAUSDT\"\u0026gt;ADA\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"DOGEUSDT\"\u0026gt;DOGE\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"LINKUSDT\"\u0026gt;LINK\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"AVAXUSDT\"\u0026gt;AVAX\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"DOTUSDT\"\u0026gt;DOT\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"XAUUSD\"\u0026gt;XAU\/USD\u0026lt;\/option\u0026gt;\n \u0026lt;\/select\u0026gt;\n \u0026lt;select class=\"precision-dropdown\" id=\"precisionSelect\"\u0026gt;\n \u0026lt;option value=\"0.01\"\u0026gt;0.01\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"0.1\"\u0026gt;0.1\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"1\"\u0026gt;1\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"10\"\u0026gt;10\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"50\"\u0026gt;50\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"100\"\u0026gt;100\u0026lt;\/option\u0026gt;\n \u0026lt;\/select\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"col-headers\"\u0026gt;\n \u0026lt;span\u0026gt;Price (USDT)\u0026lt;\/span\u0026gt;\n \u0026lt;span id=\"qtyLabel\"\u0026gt;Qty (BTC)\u0026lt;\/span\u0026gt;\n \u0026lt;span\u0026gt;Volume\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"panels\" id=\"panels\"\u0026gt;\n \u0026lt;div class=\"panel red\" id=\"asksPanel\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"panel green\" id=\"bidsPanel\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"price-divider\"\u0026gt;\n \u0026lt;span class=\"current down\" id=\"curPrice\"\u0026gt;--\u0026lt;\/span\u0026gt;\n \u0026lt;span class=\"arrow\" id=\"curArrow\"\u0026gt;--\u0026lt;\/span\u0026gt;\n \u0026lt;span class=\"usd\" id=\"curUSD\"\u0026gt;--\u0026lt;\/span\u0026gt;\n \u0026lt;span class=\"more\"\u0026gt;\u0026amp;#10132;\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"status\" id=\"statusBar\"\u0026gt;\u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;script\u0026gt;\n(function(){\n var PAIR = 'BTCUSDT', BASE = 'BTC', PREC = 0.01;\n var lastP = null, prevP = null, timer = null;\n var viewMode = 'dual';\n\n var coinInfo = {\n BTC: 'btc',\n ETH: 'eth',\n BNB: 'bnb',\n SOL: 'sol',\n XRP: 'xrp',\n ADA: 'ada',\n DOGE:'doge',\n LINK:'link',\n AVAX:'avax',\n DOT: 'dot',\n XAU: 'https:\/\/cdn-icons-png.freepik.com\/512\/8107\/8107835.png'\n };\n\n var pairSel = document.getElementById('pairSelect');\n var precSel = document.getElementById('precisionSelect');\n var asksEl = document.getElementById('asksPanel');\n var bidsEl = document.getElementById('bidsPanel');\n var panels = document.getElementById('panels');\n var curP = document.getElementById('curPrice');\n var curA = document.getElementById('curArrow');\n var curU = document.getElementById('curUSD');\n var headerP = document.getElementById('headerPrice');\n var headerU = document.getElementById('headerUSD');\n var headerC = document.getElementById('headerChange');\n var pairNm = document.getElementById('pairName');\n var coinImg = document.getElementById('coinImg');\n var qtyLbl = document.getElementById('qtyLabel');\n var status = document.getElementById('statusBar');\n var btnDual = document.getElementById('btnDual');\n var btnGreen = document.getElementById('btnGreen');\n var btnRed = document.getElementById('btnRed');\n\n function updateCoinIcon() {\n var val = coinInfo[BASE];\n if (!val) {\n val = BASE.toLowerCase();\n coinImg.src = 'https:\/\/cdn.jsdelivr.net\/npm\/cryptocurrency-icons@0.18.1\/svg\/color\/' + val + '.svg';\n } else if (val.indexOf('http') === 0) {\n coinImg.src = val;\n } else {\n coinImg.src = 'https:\/\/cdn.jsdelivr.net\/npm\/cryptocurrency-icons@0.18.1\/svg\/color\/' + val + '.svg';\n }\n coinImg.alt = BASE;\n }\n\n function fp(v) {\n var d = String(PREC).split('.')[1] ? String(PREC).split('.')[1].length : 0;\n return Number(v).toFixed(d);\n }\n function fq(v) {\n v = Number(v);\n if (v \u0026gt;= 1000) return (v\/1000).toFixed(2)+'K';\n if (v \u0026gt;= 1) return v.toFixed(3);\n if (v \u0026gt;= 0.001) return v.toFixed(4);\n return v.toFixed(6);\n }\n function fv(v) {\n v = Number(v);\n if (v \u0026gt;= 1e6) return (v\/1e6).toFixed(2)+'M';\n if (v \u0026gt;= 1000) return (v\/1000).toFixed(2)+'K';\n return v.toFixed(2);\n }\n function fu(v) {\n return '
+ Number(v).toLocaleString('en-US', {minimumFractionDigits:2, maximumFractionDigits:2});\n }\n\n function agg(orders) {\n var m = {};\n for (var i=0; i\u0026lt;orders.length; i++) {\n var p = Number(orders[i][0]), q = Number(orders[i][1]);\n var b = (Math.floor(p \/ PREC) * PREC).toFixed(8);\n m[b] = (m[b]||0) + q;\n }\n var a = [];\n for (var k in m) { a.push({price:Number(k), qty:m[k], vol:Number(k)*m[k]}); }\n return a;\n }\n\n var ROWS = 5;\n\n function renderPanel(id, data, side) {\n var el = document.getElementById(id);\n if (!el) return;\n if (side==='asks') { data.sort(function(a,b){return a.price-b.price;}); data=data.slice(0,ROWS).reverse(); }\n else { data.sort(function(a,b){return b.price-a.price;}); data=data.slice(0,ROWS); }\n var mv=0;\n for (var i=0;i\u0026lt;data.length;i++) { if(data[i].vol\u0026gt;mv) mv=data[i].vol; }\n var h='';\n for (var i=0;i\u0026lt;data.length;i++) {\n var d=data[i], cls='';\n if (side==='asks'\u0026amp;\u0026amp;i===data.length-1) cls=' best';\n if (side==='bids' \u0026amp;\u0026amp;i===0) cls=' best';\n var w=mv\u0026gt;0?((d.vol\/mv)*100).toFixed(1)+'%':'0%';\n h+='\u0026lt;div class=\"row'+cls+'\"\u0026gt;\u0026lt;div class=\"bar\" style=\"width:'+w+'\"\u0026gt;\u0026lt;\/div\u0026gt;';\n h+='\u0026lt;span class=\"price\"\u0026gt;'+fp(d.price)+'\u0026lt;\/span\u0026gt;';\n h+='\u0026lt;span class=\"qty\"\u0026gt;'+fq(d.qty)+'\u0026lt;\/span\u0026gt;';\n h+='\u0026lt;span class=\"vol\"\u0026gt;'+fv(d.vol)+'\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;';\n }\n el.innerHTML=h;\n }\n\n function buildPanelsHTML() {\n var h = '';\n if (viewMode === 'dual') {\n h += '\u0026lt;div class=\"panel red\" id=\"asksPanel\"\u0026gt;\u0026lt;\/div\u0026gt;';\n h += '\u0026lt;div class=\"panel green\" id=\"bidsPanel\"\u0026gt;\u0026lt;\/div\u0026gt;';\n } else if (viewMode === 'red') {\n h += '\u0026lt;div class=\"panel red solo\" id=\"asksPanel\"\u0026gt;\u0026lt;\/div\u0026gt;';\n h += '\u0026lt;div class=\"panel red\" id=\"bidsPanel\" style=\"display:none;\"\u0026gt;\u0026lt;\/div\u0026gt;';\n } else if (viewMode === 'green') {\n h += '\u0026lt;div class=\"panel green\" id=\"asksPanel\" style=\"display:none;\"\u0026gt;\u0026lt;\/div\u0026gt;';\n h += '\u0026lt;div class=\"panel green solo\" id=\"bidsPanel\"\u0026gt;\u0026lt;\/div\u0026gt;';\n }\n panels.innerHTML = h;\n asksEl = document.getElementById('asksPanel');\n bidsEl = document.getElementById('bidsPanel');\n }\n\n function setViewMode(mode) {\n viewMode = mode;\n btnDual.classList.toggle('active', mode==='dual');\n btnGreen.classList.toggle('active', mode==='green');\n btnRed.classList.toggle('active', mode==='red');\n buildPanelsHTML();\n lastP = null; prevP = null;\n fetchData();\n }\n\n btnDual.addEventListener('click', function(){ setViewMode('dual'); });\n btnGreen.addEventListener('click', function(){ setViewMode('green'); });\n btnRed.addEventListener('click', function(){ setViewMode('red'); });\n\n function updateUI() {\n if (!lastP) {\n curP.textContent='--'; curA.textContent='--'; curU.textContent='--';\n headerP.textContent='--'; headerU.textContent='--'; headerC.textContent='--';\n curP.className='current down'; headerP.className='header-price down';\n headerC.className='header-change-val down'; return;\n }\n curP.textContent=fp(lastP); curU.textContent=fu(lastP);\n headerP.textContent=fp(lastP); headerU.textContent=fu(lastP);\n if (prevP!==null\u0026amp;\u0026amp;lastP\u0026gt;prevP) {\n curP.className='current up'; headerP.className='header-price up';\n curA.textContent='\\u25B2'; curA.style.color='#00C076';\n } else if (prevP!==null\u0026amp;\u0026amp;lastP\u0026lt;prevP) {\n curP.className='current down'; headerP.className='header-price down';\n curA.textContent='\\u25BC'; curA.style.color='#F6465D';\n } else {\n curA.textContent='\\u25CF'; curA.style.color='#8E9294';\n curP.className='current down'; headerP.className='header-price down';\n }\n }\n\n function xauFetch(url, timeoutMs, cb) {\n var ctrl = new AbortController();\n var t = setTimeout(function(){ ctrl.abort(); }, timeoutMs);\n fetch(url, {signal: ctrl.signal})\n .then(function(r){ clearTimeout(t); return r.json(); })\n .then(function(d){ cb(null, d); })\n .catch(function(e){ clearTimeout(t); cb(e); });\n }\n\n function xauRender(price) {\n prevP = lastP; lastP = Number(price);\n var asks = [], bids = [];\n var sp = 0.50;\n for (var i=1; i\u0026lt;=ROWS; i++) {\n var aP = lastP + sp + (i-1)*0.50;\n var bP = lastP - sp - (i-1)*0.50;\n var q = 10 + (i-1)*8;\n asks.push({price: aP, qty: q, vol: aP*q});\n bids.push({price: bP, qty: q, vol: bP*q});\n }\n if (viewMode==='dual') {\n renderPanel('asksPanel', asks, 'asks');\n renderPanel('bidsPanel', bids, 'bids');\n } else if (viewMode==='red') {\n renderPanel('asksPanel', asks, 'asks');\n } else if (viewMode==='green') {\n renderPanel('bidsPanel', bids, 'bids');\n }\n updateUI();\n headerC.textContent = 'N\/A';\n headerC.className = 'header-change-val down';\n }\n\n function fetchXAUUSD() {\n status.className='status';\n \/\/ Primary: gold-api.com (fast, simple)\n xauFetch('https:\/\/api.gold-api.com\/price\/XAU', 4000, function(err, d) {\n if (!err \u0026amp;\u0026amp; d \u0026amp;\u0026amp; d.price) {\n xauRender(d.price);\n return;\n }\n \/\/ Fallback: metals.live\n xauFetch('https:\/\/api.metals.live\/v1\/spot\/gold', 5000, function(err2, d2) {\n if (!err2 \u0026amp;\u0026amp; d2) {\n var price = Array.isArray(d2) ? (d2[0] \u0026amp;\u0026amp; d2[0].gold ? d2[0].gold : null) : (d2.gold || null);\n if (price) { xauRender(price); return; }\n }\n status.textContent='Connection lost. Retrying...';\n status.className='status error show';\n });\n });\n }\n\n function apiFetch(url, timeoutMs) {\n return new Promise(function(resolve, reject) {\n var ctrl = new AbortController();\n var t = setTimeout(function(){ ctrl.abort(); }, timeoutMs);\n fetch(url, {signal: ctrl.signal})\n .then(function(r){ clearTimeout(t); resolve(r); })\n .catch(function(e){ clearTimeout(t); reject(e); });\n });\n }\n\n function binanceFetch(endpoint) {\n \/\/ Try binance.com first (fast in most regions), fallback to binance.us (for US users)\n return apiFetch('https:\/\/api.binance.com' + endpoint, 4000)\n .catch(function() {\n return apiFetch('https:\/\/api.binance.us' + endpoint, 5000);\n });\n }\n\n function fetchData() {\n if (PAIR === 'XAUUSD') {\n fetchXAUUSD();\n return;\n }\n binanceFetch('\/api\/v3\/depth?symbol='+PAIR+'\u0026amp;limit=100')\n .then(function(r){return r.json();})\n .then(function(d){\n status.className='status';\n var asks=agg(d.asks), bids=agg(d.bids);\n if (bids.length\u0026amp;\u0026amp;asks.length) { prevP=lastP; lastP=(bids[0].price+asks[asks.length-1].price)\/2; }\n if (viewMode==='dual') {\n renderPanel('asksPanel', asks, 'asks');\n renderPanel('bidsPanel', bids, 'bids');\n } else if (viewMode==='red') {\n renderPanel('asksPanel', asks, 'asks');\n } else if (viewMode==='green') {\n renderPanel('bidsPanel', bids, 'bids');\n }\n updateUI();\n return binanceFetch('\/api\/v3\/ticker\/24hr?symbol='+PAIR);\n })\n .then(function(r){if(!r||!r.json)return;return r.json();})\n .then(function(t){\n if (t\u0026amp;\u0026amp;t.priceChangePercent) {\n var pct=Number(t.priceChangePercent), chg=Number(t.priceChange);\n var cls=pct\u0026gt;=0?'up':'down';\n headerC.textContent=(chg\u0026gt;=0?'+':'')+chg.toFixed(2)+' '+(pct\u0026gt;=0?'+':'')+pct.toFixed(2)+'%';\n headerC.className='header-change-val '+cls;\n }\n })\n .catch(function(){\n status.textContent='Connection lost. Retrying...';\n status.className='status error show';\n });\n }\n\n function start() {\n if(timer)clearInterval(timer);\n fetchData();\n timer=setInterval(fetchData,2000);\n }\n\n pairSel.addEventListener('change',function(){\n PAIR=this.value;\n if (PAIR==='XAUUSD') {\n BASE='XAU'; pairNm.textContent='XAU\/USD';\n qtyLbl.textContent='Qty (oz)';\n } else {\n BASE=PAIR.replace('USDT','');\n pairNm.textContent=PAIR.slice(0,-4)+'\/USDT';\n qtyLbl.textContent='Qty ('+BASE+')';\n }\n updateCoinIcon();\n lastP=null; prevP=null; start();\n });\n\n precSel.addEventListener('change',function(){\n PREC=Number(this.value); start();\n });\n\n document.addEventListener('visibilitychange',function(){\n if(document.visibilityState==='visible')start();\n else{if(timer)clearInterval(timer);timer=null;}\n });\n\n updateCoinIcon();\n start();\n})();\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304089}"}],"layout":[],"inlineLayout":null}}}],"layout":[{"type":"LayoutVariants","id":"f_45cac8f5-afb2-4736-be2d-d4fc358cc2ca","defaultValue":null,"value":"two-thirds"},{"type":"LayoutVariants","id":"f_a64c0756-bbe1-4efb-b4c4-45bb5f8887ab","defaultValue":null,"value":"third"}],"inlineLayout":"12"}}},{"type":"BlockComponentItem","id":"3c334322-dd46-4240-8d34-70d9024dfe40","name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"e5f1f770-8b12-4d27-9c0d-b5891ce9bf7b","items":[{"type":"BlockComponentItem","id":"c15b65f6-5f29-41cc-8aad-cb5e08c103b3","name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"abf4cdca-c2b4-4501-8faf-7ba38045503c","items":[{"type":"HtmlComponent","id":27292884,"defaultValue":false,"value":"\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\"en\"\u0026gt;\n\u0026lt;head\u0026gt;\n \u0026lt;meta charset=\"UTF-8\" \/\u0026gt;\n \u0026lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" \/\u0026gt;\n \u0026lt;title\u0026gt;Trading Pro\u0026lt;\/title\u0026gt;\n \u0026lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/lightweight-charts@4.1.1\/dist\/lightweight-charts.standalone.production.js\"\u0026gt;\u0026lt;\/script\u0026gt;\n \u0026lt;style\u0026gt;\n\n \/* ===== Global Mobile Reset ===== *\/\n * { box-sizing: border-box; }\n :root { font-size: 14px; }\n body {\n font-family: Arial, sans-serif;\n background: transparent;\n color: white;\n padding: 6px;\n margin: 0;\n max-width: 100%;\n -webkit-text-size-adjust: 100%;\n }\n .section { margin-bottom: 16px; }\n #trading-section { margin-bottom: 24px; }\n .section-divider {\n border: none;\n border-top: 1px solid rgba(255,255,255,0.08);\n margin: 8px 0;\n }\n\n\n\/* ==================== Buysell Styles ==================== *\/\nbody { font-family: Arial; background: transparent; color: white; padding: 12px; margin: 0; }\n .container { max-width: 320px; margin: 0 auto; width: 100%; }\n h2 { text-align: center; margin-bottom: 10px; font-size:14px; }\n .transaction-type { display: flex; justify-content: space-between; gap: 4%; width: 100%; }\n .btn { width: 48%; padding: 8px; border-radius: 8px; border: 2px solid; cursor: pointer; background: transparent; font-size: 12px; }\n .buy-btn { border-color: #2ecc71; color: #2ecc71; }\n .sell-btn { border-color: #e67e22; color: #e67e22; }\n input, select {\n width: 100%; padding: 10px; margin-top: 5px; border-radius: 8px; border: 1px solid #ccc;\n background: transparent !important; color: white !important; font-size: 13px; box-sizing: border-box;\n }\n select option { background: white !important; color: black !important; }\n .trade-btn {\n width: 100%; padding: 9px; border-radius: 8px; border: 2px solid #3498db;\n background: transparent; color: #3498db; margin-top: 12px; cursor: pointer; font-size: 12px;\n }\n .adjusted-box p { margin: 5px 0; }\n .stop-box input[type=\"number\"] { width: 48%; display: inline-block; margin-right: 4%; margin-top: 5px; }\n #orderIdBox {\n margin-top: 8px; padding: 7px; border: 1px solid #aaa; border-radius: 8px;\n font-size: 11px; display: none;\n }\n .hint-cn { margin-top: 6px; color: #bbb; font-size: 10px; line-height: 1.4; }\n .trade-btn.loading {\n opacity: 0.7; cursor: not-allowed; position: relative;\n }\n.amount-row {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 6px;\n}\n\n.amount-row button {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n border: 1px solid #555;\n background: transparent;\n color: #fff;\n font-size: 14px;\n cursor: pointer;\n}\n\n.amount-row input {\n flex: 1;\n text-align: center;\n font-size: 13px;\n}\n.pct-btn {\n flex: 1;\n padding: 8px 0;\n border-radius: 6px;\n border: 1px solid #555;\n background: transparent;\n color: #fff;\n font-size: 14px;\n cursor: pointer;\n}\n#priceRangeRow .pct-btn.active {\n border-color: #3498db;\n color: #3498db;\n}\n\n.pct-btn:hover {\n border-color: #2ecc71;\n color: #2ecc71;\n}\n.speed-btn{\n flex:1;\n padding:8px 0;\n border-radius:6px;\n border:1px solid #555;\n background:transparent;\n color:#fff;\n cursor:pointer;\n font-size:14px;\n}\n\n.speed-btn.active{\n border-color:#3498db;\n color:#3498db;\n}\n\/* === Modal \u0026amp; Loading \u6837\u5f0f === *\/\n#tradeModal {\n display: none;\n position: fixed;\n top: 50%; left: 50%;\n transform: translate(-50%, -50%);\n background: rgba(20,20,20,0.95);\n color: white;\n border-radius: 10px;\n padding: 18px;\n width: 320px;\n max-width: 90%;\n z-index: 9999;\n box-shadow: 0 0 30px rgba(0,0,0,0.7);\n font-size: 12px;\n line-height: 1.4;\n}\n\n#tradeModal .closeBtn {\n position: absolute;\n top: 6px; right: 10px;\n font-weight: bold;\n cursor: pointer;\n font-size: 14px;\n}\n\n#tradeModal p {\n margin: 6px 0;\n font-size: 12px;\n}\n\n#tradeModal .profit {\n color: #2ecc71;\n font-weight: bold;\n font-size: 14px;\n}\n\n#loadingOverlay {\n display: none;\n position: fixed;\n top: 0; left: 0;\n width: 100%; height: 100%;\n \/* \u4fee\u6539\u8fd9\u91cc\uff1a\u4ece rgba(0,0,0,0.6) \u6539\u4e3a transparent *\/\n background: transparent; \n z-index: 9998;\n align-items: center;\n justify-content: center;\n \/* \u6dfb\u52a0\u4ee5\u4e0b\u4e00\u884c\uff0c\u786e\u4fdd\u867d\u7136\u80cc\u666f\u900f\u660e\uff0c\u4f46\u4f9d\u7136\u80fd\u963b\u6b62\u7528\u6237\u5728\u52a0\u8f7d\u65f6\u8bef\u89e6\u80cc\u666f\u6309\u94ae *\/\n pointer-events: all; \n}\n\n.spinner-wrapper {\n position: relative;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n#loadingOverlay .spinner {\n width: 35px;\n height: 35px;\n border: 4px solid rgba(255,255,255,0.3);\n border-top-color: #3498db;\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n transform: translateZ(0); \/* \u9632\u6b62\u6296\u52a8 *\/\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n#spinnerSeconds {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: bold;\n color: #fff;\n pointer-events: none;\n font-family: monospace; \/* \u8ba9\u6570\u5b57\u5bbd\u5ea6\u56fa\u5b9a\uff0c\u907f\u514d\u6296\u52a8 *\/\n}\n\/* \u65b0\u589e\uff1a\u7528\u4e8e\u9690\u85cf\u5df2\u4f7f\u7528\u8fc7\u7684\u529f\u80fd *\/\n.used-feature {\n display: none !important;\n}\n \/* ===== Coin Icon ===== *\/\n.coin-select-wrap{\n position: relative;\n width: 100%;\n}\n\n#coinIcon{\n position:absolute;\n left:12px;\n top:50%;\n transform:translateY(-50%);\n width:20px;\n height:20px;\n object-fit:contain;\n pointer-events:none;\n}\n\n#currency{\n padding-left:40px !important;\n}\n\n\/* ==================== K-line Styles ==================== *\/\nbody {\n margin:0;\n background: transparent;\n color:#fff;\n font-family: Arial;\n}\n\n#topbar {\n display:flex;\n align-items:center;\n gap:10px;\n padding:6px;\n max-width: 320px;\n margin: 0 auto;\n\n background: transparent;\n backdrop-filter: blur(10px);\n\n flex-wrap: nowrap;\n}\n\n\n\/* ===== \u4e0b\u62c9\u6846 ===== *\/\n#symbol {\n background: rgba(0,0,0,0.05);\n\n color: #0ecb81;\n\n border: 1px solid rgba(14,203,129,0.9);\n\n padding: 9px 16px;\n\n border-radius: 10px;\n\n outline: none;\n\n backdrop-filter: blur(6px);\n\n box-shadow:\n 0 0 5px rgba(14,203,129,0.5),\n 0 0 12px rgba(14,203,129,0.25);\n\n transition: 0.25s;\n}\n\n\/* hover *\/\n#symbol:hover {\n box-shadow:\n 0 0 8px rgba(14,203,129,0.8),\n 0 0 20px rgba(14,203,129,0.45);\n}\n\n\/* option *\/\n#symbol option {\n background: #081018;\n color: #0ecb81;\n}\n\n\n#price {\n font-size: 16px;\n font-weight: bold;\n\n min-width: 80px;\n\n color: #fff;\n\n display: flex;\n align-items: center;\n\n text-shadow:\n 0 0 8px rgba(255,255,255,0.25);\n\n transition: 0.2s;\n}\n\n.up {\n color:#0ecb81;\n\n text-shadow:\n 0 0 8px rgba(14,203,129,0.7),\n 0 0 18px rgba(14,203,129,0.45);\n}\n\n.down {\n color:#f6465d;\n\n text-shadow:\n 0 0 8px rgba(246,70,93,0.7),\n 0 0 18px rgba(246,70,93,0.45);\n}\n\n\n\/* ===== \u65f6\u95f4\u680f ===== *\/\n#timebar {\n display:flex;\n gap:6px;\n padding:6px;\n}\n\n\n\/* ===== \u65f6\u95f4\u6309\u94ae ===== *\/\nbutton {\n background: transparent;\n\n color: #0ecb81;\n\n border: 1px solid rgba(14,203,129,0.85);\n\n padding: 5px 10px;\n\n border-radius: 10px;\n\n cursor: pointer;\n\n transition: all 0.25s ease;\n\n backdrop-filter: blur(5px);\n\n box-shadow:\n 0 0 5px rgba(14,203,129,0.35),\n inset 0 0 8px rgba(14,203,129,0.08);\n}\n\n\n\/* hover\u7eff\u5149 *\/\nbutton:hover {\n color: #ffffff;\n\n border-color: #0ecb81;\n\n box-shadow:\n 0 0 10px rgba(14,203,129,0.8),\n 0 0 20px rgba(14,203,129,0.45),\n inset 0 0 10px rgba(14,203,129,0.15);\n}\n\n\n\/* \u5f53\u524d\u9009\u4e2d *\/\nbutton.active {\n background: rgba(14,203,129,0.12);\n\n color: #ffffff;\n\n border: 1px solid #0ecb81;\n\n box-shadow:\n 0 0 12px rgba(14,203,129,0.95),\n 0 0 24px rgba(14,203,129,0.55),\n inset 0 0 12px rgba(14,203,129,0.2);\n}\n\n\n#chart {\n height:350px;\n max-width: 320px;\n margin: 0 auto;\n}\n\n\/* ===== Notification Panel ===== *\/\n#notificationPanel {\n display: none;\n position: fixed;\n top: 50px;\n right: 20px;\n width: 300px;\n max-height: 80vh;\n overflow-y: auto;\n background: rgba(10,20,30,0.97);\n border: 1px solid rgba(14,203,129,0.45);\n border-radius: 14px;\n backdrop-filter: blur(20px);\n box-shadow: 0 0 30px rgba(0,0,0,0.7), 0 0 15px rgba(14,203,129,0.15);\n z-index: 1000;\n padding: 12px;\n}\n\n#notificationPanel.show {\n display: block;\n}\n\n#notificationPanel h3 {\n margin: 0 0 10px 0;\n color: #0ecb81;\n font-size: 13px;\n border-bottom: 1px solid rgba(14,203,129,0.2);\n padding-bottom: 8px;\n}\n\n.notification-tabs {\n display: flex;\n gap: 6px;\n margin-bottom: 12px;\n}\n\n.notification-tabs button {\n flex: 1;\n padding: 5px 3px;\n font-size: 10px;\n background: transparent;\n color: #888;\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 8px;\n cursor: pointer;\n transition: 0.2s;\n}\n\n.notification-tabs button.active-tab {\n color: #0ecb81;\n border-color: rgba(14,203,129,0.6);\n background: rgba(14,203,129,0.08);\n}\n\n#alertForm {\n display: none;\n}\n\n#alertForm.show {\n display: block;\n}\n\n.alert-type-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-bottom: 12px;\n}\n\n.alert-type-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 7px 10px;\n background: rgba(255,255,255,0.03);\n border: 1px solid rgba(255,255,255,0.06);\n border-radius: 8px;\n color: #ccc;\n cursor: pointer;\n transition: 0.2s;\n font-size: 11px;\n}\n\n.alert-type-item:hover {\n background: rgba(14,203,129,0.08);\n border-color: rgba(14,203,129,0.3);\n color: #0ecb81;\n}\n\n.alert-type-item .arrow {\n color: #666;\n}\n\n.alert-type-item:hover .arrow {\n color: #0ecb81;\n}\n\n.form-group {\n margin-bottom: 8px;\n}\n\n.form-group label {\n display: block;\n color: #999;\n font-size: 10px;\n margin-bottom: 3px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n width: 100%;\n box-sizing: border-box;\n padding: 8px 10px;\n background: rgba(0,0,0,0.3);\n border: 1px solid rgba(255,255,255,0.12);\n border-radius: 8px;\n color: #fff;\n font-size: 12px;\n outline: none;\n transition: 0.2s;\n}\n\n.form-group input:focus,\n.form-group select:focus,\n.form-group textarea:focus {\n border-color: rgba(14,203,129,0.6);\n box-shadow: 0 0 8px rgba(14,203,129,0.15);\n}\n\n.form-group select {\n cursor: pointer;\n}\n\n.form-group select option {\n background: #0a141e;\n color: #fff;\n}\n\n.form-group textarea {\n resize: vertical;\n min-height: 50px;\n}\n\n.form-buttons {\n display: flex;\n gap: 8px;\n margin-top: 10px;\n}\n\n.form-buttons button {\n flex: 1;\n}\n\n.btn-primary {\n background: rgba(14,203,129,0.15);\n color: #0ecb81;\n border: 1px solid rgba(14,203,129,0.6);\n}\n\n.btn-primary:hover {\n background: rgba(14,203,129,0.25);\n color: #fff;\n}\n\n.btn-secondary {\n background: transparent;\n color: #888;\n border: 1px solid rgba(255,255,255,0.15);\n}\n\n.btn-secondary:hover {\n color: #fff;\n border-color: rgba(255,255,255,0.3);\n}\n\n#alertList {\n display: none;\n}\n\n#alertList.show {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.alert-card {\n background: rgba(255,255,255,0.03);\n border: 1px solid rgba(255,255,255,0.08);\n border-radius: 10px;\n padding: 8px;\n position: relative;\n}\n\n.alert-card .alert-type-label {\n font-size: 10px;\n color: #888;\n text-transform: uppercase;\n margin-bottom: 3px;\n}\n\n.alert-card .alert-value {\n font-size: 13px;\n font-weight: bold;\n color: #0ecb81;\n}\n\n.alert-card .alert-meta {\n font-size: 9px;\n color: #666;\n margin-top: 2px;\n}\n\n.alert-card .alert-note {\n font-size: 9px;\n color: #999;\n margin-top: 2px;\n font-style: italic;\n}\n\n.alert-card .alert-delete {\n position: absolute;\n top: 6px;\n right: 6px;\n background: none;\n border: none;\n color: #666;\n cursor: pointer;\n font-size: 10px;\n padding: 2px 4px;\n border-radius: 4px;\n}\n\n.alert-card .alert-delete:hover {\n color: #f6465d;\n background: rgba(246,70,93,0.1);\n}\n\n.empty-state {\n text-align: center;\n color: #555;\n padding: 20px 0;\n font-size: 11px;\n}\n\n#notificationBadge {\n display: none;\n position: absolute;\n top: 2px;\n right: 2px;\n width: 8px;\n height: 8px;\n background: #f6465d;\n border-radius: 50%;\n}\n\n.back-btn {\n background: none;\n border: none;\n color: #888;\n cursor: pointer;\n font-size: 11px;\n padding: 3px 0;\n margin-bottom: 8px;\n}\n\n.back-btn:hover {\n color: #0ecb81;\n}\n\n.alert-triggered-toast {\n position: fixed;\n top: 15px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(14,203,129,0.15);\n border: 1px solid rgba(14,203,129,0.5);\n color: #0ecb81;\n padding: 7px 16px;\n border-radius: 8px;\n font-size: 11px;\n z-index: 9999;\n animation: toastIn 0.3s ease, toastOut 0.3s ease 3.7s forwards;\n backdrop-filter: blur(10px);\n text-align: center;\n}\n\n@keyframes toastIn {\n from { opacity: 0; transform: translateX(-50%) translateY(-10px); }\n to { opacity: 1; transform: translateX(-50%) translateY(0); }\n}\n\n@keyframes toastOut {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n\n\/* ==================== Mobile Overrides ==================== *\/\n@media (max-width: 480px) {\n\n body { max-width: 100vw !important; }\n\n \/* K-line mobile *\/\n #chart { height: 300px !important; max-width: 100vw !important; }\n #topbar { max-width: 100vw !important; padding: 4px 6px !important; gap: 5px !important; }\n #topbar select, #topbar button { font-size: 10px !important; padding: 3px 6px !important; }\n #price { font-size: 14px !important; min-width: 70px !important; }\n #timebar { padding: 4px !important; gap: 4px !important; }\n #timebar button { font-size: 10px !important; padding: 3px 6px !important; }\n .timestamp { font-size: 9px !important; }\n #notificationPanel { width: 290px !important; max-width: 94vw !important; right: 3px !important; padding: 10px !important; }\n #notificationPanel .tabs { gap: 5px !important; font-size: 10px !important; }\n\n \/* Buysell mobile *\/\n .container { max-width: 100vw !important; padding: 0 3px !important; }\n .btn { padding: 7px !important; font-size: 11px !important; }\n input, select { padding: 6px 8px !important; font-size: 11px !important; }\n .trade-btn { padding: 8px !important; font-size: 11px !important; margin-top: 10px !important; }\n .speed-btn, .pct-btn { padding: 3px 6px !important; font-size: 10px !important; }\n .transaction-type { gap: 3% !important; }\n h2 { font-size: 13px !important; margin-bottom: 8px !important; }\n label { font-size: 10px !important; }\n #orderIdBox { font-size: 10px !important; padding: 6px !important; }\n #loadingOverlay { font-size: 11px !important; }\n #loadingOverlay .spinner { width: 24px !important; height: 24px !important; }\n #tradeRecordsBox h3 { font-size: 12px !important; }\n #tradeRecordsBox { max-height: 160px !important; font-size: 10px !important; }\n .modal-content h3 { font-size: 13px !important; }\n .modal-content p { font-size: 10px !important; margin: 3px 0 !important; }\n .modal-content button { font-size: 10px !important; padding: 6px 12px !important; }\n #tradeRecordsBox h4 { font-size: 12px !important; }\n #tradeRecordsBox .trade-item { font-size: 10px !important; }\n .hint-cn { font-size: 9px !important; }\n .coin-select-wrap .coin-icon { width: 14px !important; height: 14px !important; }\n\n}\n\n\/* ==================== Desktop Layout: Side-by-side ==================== *\/\n@media (min-width: 769px) {\n .main-wrapper {\n display: flex;\n flex-direction: row;\n gap: 24px;\n max-width: 800px;\n margin: 0 auto;\n align-items: flex-start;\n }\n .main-wrapper #trading-section {\n flex: 0 0 320px;\n min-width: 280px;\n }\n .main-wrapper #chart-section {\n flex: 1 1 auto;\n min-width: 0;\n }\n #chart {\n max-width: none;\n height: 400px;\n }\n #topbar {\n max-width: none;\n }\n .section-divider {\n display: none;\n }\n}\n\n\/* ===== Frozen Balance Modal ===== *\/\n.frozen-modal-overlay {\n display: none;\n position: fixed;\n top: 0; left: 0; right: 0; bottom: 0;\n background: rgba(0, 0, 0, 0.55);\n z-index: 99999;\n justify-content: center;\n align-items: center;\n}\n.frozen-modal-overlay.active {\n display: flex;\n}\n.frozen-modal-box {\n background: #ffffff;\n border-radius: 16px;\n padding: 28px 32px 24px;\n max-width: 420px;\n width: 90%;\n box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2);\n text-align: center;\n}\n.frozen-modal-box h3 {\n margin: 0 0 14px;\n font-size: 17px;\n color: #333333;\n font-weight: 600;\n letter-spacing: 0.3px;\n}\n.frozen-modal-body {\n background: #fff0f3;\n color: #c0392b;\n padding: 12px 18px;\n border-radius: 8px;\n font-size: 14px;\n margin-bottom: 22px;\n line-height: 1.6;\n}\n.frozen-modal-btn {\n background: #9b59b6;\n color: #ffffff;\n border: none;\n border-radius: 24px;\n padding: 11px 36px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n outline: none;\n}\n.frozen-modal-btn:hover {\n background: #8e44ad;\n}\n \u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\n\u0026lt;!-- Frozen Balance Modal --\u0026gt;\n\u0026lt;div class=\"frozen-modal-overlay\" id=\"frozenModalOverlay\"\u0026gt;\n \u0026lt;div class=\"frozen-modal-box\"\u0026gt;\n \u0026lt;h3\u0026gt;Account Frozen\u0026lt;\/h3\u0026gt;\n \u0026lt;div class=\"frozen-modal-body\"\u0026gt;Your account balance has been frozen. Please contact online customer service.\u0026lt;\/div\u0026gt;\n \u0026lt;button class=\"frozen-modal-btn\" id=\"frozenModalCloseBtn\"\u0026gt;OK\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div class=\"main-wrapper\"\u0026gt;\n\n \u0026lt;!-- ===== Buysell Trading Section ===== --\u0026gt;\n \u0026lt;div class=\"section\" id=\"trading-section\"\u0026gt;\n\u0026lt;div class=\"container\"\u0026gt;\n \u0026lt;div id=\"orderIdBox\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;h2\u0026gt;\u0026lt;\/h2\u0026gt;\n \u0026lt;div class=\"transaction-type\"\u0026gt;\n \u0026lt;button class=\"btn buy-btn\" id=\"buyBtn\"\u0026gt;Buy\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"btn sell-btn\" id=\"sellBtn\"\u0026gt;Sell\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n\u0026lt;label for=\"currency\"\u0026gt;Select Coin:\u0026lt;\/label\u0026gt;\n\n\u0026lt;div class=\"coin-select-wrap\"\u0026gt;\n \u0026lt;img id=\"coinIcon\"\n src=\"https:\/\/cryptologos.cc\/logos\/bitcoin-btc-logo.png?v=040\"\n alt=\"\"\u0026gt;\n \n \u0026lt;select id=\"currency\"\u0026gt;\u0026lt;\/select\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n \u0026lt;label for=\"amount\"\u0026gt;Amount (USDT):\u0026lt;\/label\u0026gt;\n\n\u0026lt;!-- \u65b0\u589e\u663e\u793a\u539f\u59cb\u91d1\u989d --\u0026gt;\n\u0026lt;div id=\"originalAmountDisplay\" style=\"color: #888; font-size: 14px; margin-top: 4px; user-select:none;\"\u0026gt;\n Original Amount: 0.00 USDT\n\u0026lt;\/div\u0026gt;\n\n \u0026lt;!-- Amount USDT --\u0026gt;\n\u0026lt;div class=\"amount-row\"\u0026gt;\n \u0026lt;button type=\"button\" onclick=\"adjustAmount(-1)\"\u0026gt;\u2212\u0026lt;\/button\u0026gt;\n \u0026lt;input type=\"number\" id=\"amount\" placeholder=\"0.00\" step=\"any\" \/\u0026gt;\n \u0026lt;button type=\"button\" onclick=\"adjustAmount(1)\"\u0026gt;+\u0026lt;\/button\u0026gt;\n\u0026lt;\/div\u0026gt;\n\u0026lt;label id=\"coinQtyLabel\"\u0026gt;Amount (Coin):\u0026lt;\/label\u0026gt;\n\n\n\u0026lt;div class=\"amount-row\"\u0026gt;\n \u0026lt;button type=\"button\" onclick=\"adjustQty(-1)\"\u0026gt;\u2212\u0026lt;\/button\u0026gt;\n \u0026lt;input type=\"number\" id=\"coinQty\" placeholder=\"0.000000\" step=\"any\" \/\u0026gt;\n \u0026lt;button type=\"button\" onclick=\"adjustQty(1)\"\u0026gt;+\u0026lt;\/button\u0026gt;\n\u0026lt;\/div\u0026gt;\n\u0026lt;!-- Loading \u8f6c\u5708\uff08\u4fee\u6b63\u7248\uff09 --\u0026gt;\n\u0026lt;div id=\"loadingOverlay\"\u0026gt;\n \u0026lt;div class=\"spinner-wrapper\"\u0026gt;\n \u0026lt;div class=\"spinner\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"spinnerSeconds\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;!-- Trade \u4fe1\u606f\u5f39\u7a97 --\u0026gt;\n\u0026lt;div id=\"tradeModal\"\u0026gt;\n \u0026lt;div class=\"closeBtn\" onclick=\"closeTradeModal()\"\u0026gt;\u2716\u0026lt;\/div\u0026gt;\n \u0026lt;p\u0026gt;Original Amount: \u0026lt;span id=\"modalOriginalAmount\"\u0026gt;0.00\u0026lt;\/span\u0026gt; USDT\u0026lt;\/p\u0026gt; \u0026lt;!-- \u65b0\u589e --\u0026gt;\n \u0026lt;p\u0026gt;Profit: \u0026lt;span class=\"profit\" id=\"modalProfit\"\u0026gt;$0.00\u0026lt;\/span\u0026gt;\u0026lt;\/p\u0026gt;\n \u0026lt;p\u0026gt;Direction of Purchase: \u0026lt;span id=\"modalDirection\"\u0026gt;Buy\u0026lt;\/span\u0026gt;\u0026lt;\/p\u0026gt;\n \u0026lt;p\u0026gt;Quantity: \u0026lt;span id=\"modalQuantity\"\u0026gt;0.000000\u0026lt;\/span\u0026gt;\u0026lt;\/p\u0026gt;\n \u0026lt;p\u0026gt;Currency: \u0026lt;span id=\"modalCurrency\"\u0026gt;BTC\u0026lt;\/span\u0026gt;\u0026lt;\/p\u0026gt;\n \u0026lt;p\u0026gt;Currency Quantity: \u0026lt;span id=\"modalCurrencyQty\"\u0026gt;0.000000\u0026lt;\/span\u0026gt;\u0026lt;\/p\u0026gt;\n \u0026lt;p\u0026gt;Price Range: \u0026lt;span id=\"modalPriceRange\"\u0026gt;100%\u0026lt;\/span\u0026gt;\u0026lt;\/p\u0026gt;\n \u0026lt;p\u0026gt;Delivery Time: \u0026lt;span id=\"modalDeliveryTime\"\u0026gt;30s\u0026lt;\/span\u0026gt;\u0026lt;\/p\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;!-- ===== \u79d2\u901f\u9009\u62e9 ===== --\u0026gt;\n\u0026lt;div id=\"speedRow\" class=\"used-feature\"\n style=\"\n display:none;\n gap:8px;\n margin:10px 0;\n align-items: center;\n \"\u0026gt;\n \u0026lt;span style=\"white-space: nowrap; user-select:none;\"\u0026gt;Delivery Time:\u0026lt;\/span\u0026gt;\n \u0026lt;button type=\"button\" class=\"speed-btn\" data-sec=\"30\" onclick=\"selectSpeed(this,30)\"\u0026gt;30s\u0026lt;\/button\u0026gt;\n \u0026lt;button type=\"button\" class=\"speed-btn\" data-sec=\"60\" onclick=\"selectSpeed(this,60)\"\u0026gt;60s\u0026lt;\/button\u0026gt;\n \u0026lt;button type=\"button\" class=\"speed-btn\" data-sec=\"120\" onclick=\"selectSpeed(this,120)\"\u0026gt;120s\u0026lt;\/button\u0026gt;\n \u0026lt;button type=\"button\" class=\"speed-btn\" data-sec=\"180\" onclick=\"selectSpeed(this,180)\"\u0026gt;180s\u0026lt;\/button\u0026gt;\n\u0026lt;\/div\u0026gt;\n\u0026lt;!-- \u65b0\u589e Price Range \u767e\u5206\u6bd4\u6309\u94ae --\u0026gt;\n\u0026lt;div id=\"priceRangeRow\" class=\"used-feature\" style=\"display:none; gap:8px; margin:10px 0; align-items:center;\"\u0026gt;\n \u0026lt;span style=\"white-space: nowrap; user-select:none;\"\u0026gt;Price Range:\u0026lt;\/span\u0026gt;\n \u0026lt;button type=\"button\" class=\"pct-btn\" data-percent=\"41\"\u0026gt;41%\u0026lt;\/button\u0026gt;\n \u0026lt;button type=\"button\" class=\"pct-btn\" data-percent=\"72\"\u0026gt;72%\u0026lt;\/button\u0026gt;\n \u0026lt;button type=\"button\" class=\"pct-btn\" data-percent=\"95\"\u0026gt;95%\u0026lt;\/button\u0026gt;\n \u0026lt;button type=\"button\" class=\"pct-btn\" data-percent=\"100\"\u0026gt;100%\u0026lt;\/button\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div id=\"speedHint\"\n style=\"font-size:12px;color:#bbb;display:none;\"\u0026gt;\n \u23f3 Trade must be submitted before countdown ends\n\u0026lt;\/div\u0026gt;\n\n \u0026lt;label for=\"amountCurrency\"\u0026gt;Amount Currency:\u0026lt;\/label\u0026gt;\n\u0026lt;select id=\"amountCurrency\" disabled\u0026gt;\n \u0026lt;option value=\"USDT\"\u0026gt;USDT\u0026lt;\/option\u0026gt;\n\u0026lt;\/select\u0026gt;\n\n \u0026lt;div class=\"adjusted-box\" id=\"convertedBox\"\u0026gt;\n \u0026lt;p\u0026gt;\u0026lt;b\u0026gt;Auto-conversion:\u0026lt;\/b\u0026gt;\u0026lt;\/p\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"stop-box\"\u0026gt;\n \u0026lt;label\u0026gt;\u0026lt;input type=\"checkbox\" id=\"slCheckbox\" \/\u0026gt; Enable Stop-loss\/Take-profit\u0026lt;\/label\u0026gt;\n \u0026lt;div id=\"slBox\" style=\"display:none; margin-top:6px;\"\u0026gt;\n \u0026lt;input type=\"number\" id=\"takeProfit\" placeholder=\"TP%(USDT)\" step=\"any\" \/\u0026gt;\n\u0026lt;input type=\"number\" id=\"stopLoss\" placeholder=\"SL%(USDT)\" step=\"any\" \/\u0026gt;\n \u0026lt;div id=\"tpResult\" style=\"color:#7ed957; margin-top:6px;\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"slResult\" style=\"color:#ff8c69;\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;button class=\"trade-btn\" id=\"tradeBtn\"\u0026gt;Trade\u0026lt;\/button\u0026gt;\n \u0026lt;!-- \u65b0\u589e\uff1a\u4f59\u989d\u4e0d\u8db3\u63d0\u793a\u6587\u5b57\u5bb9\u5668[cite: 1] --\u0026gt;\n\u0026lt;div id=\"insufficientBalanceMsg\" style=\"display:none; color: #ff8c69; margin-top: 10px; text-align: center; font-size: 14px; font-weight: bold;\"\u0026gt;\n \ud83e\udd16Insufficient balance. Please top up your account before submitting.\n\u0026lt;\/div\u0026gt;\n \u0026lt;!-- BuySell History Toggle --\u0026gt;\n\u0026lt;!-- ===== BuySell \u64cd\u4f5c\u6309\u94ae\u884c ===== --\u0026gt;\n\u0026lt;div id=\"buysellActionRow\"\n style=\"\n display:flex;\n justify-content:space-between;\n gap:10px;\n margin-top:14px;\n \"\u0026gt;\n\n \u0026lt;div id=\"buysellRecordToggle\"\n style=\"\n flex:1;\n text-align:center;\n padding:6px 0;\n cursor:pointer;\n border:1px solid #ccc;\n border-radius:6px;\n font-size:13px;\n \"\u0026gt;\n \ud83d\udcca View Trade Records\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div id=\"holdingToggle\"\n style=\"\n flex:1;\n text-align:center;\n padding:6px 0;\n cursor:pointer;\n border:1px solid #ccc;\n border-radius:6px;\n font-size:13px;\n \"\u0026gt;\n \ud83d\udce6 Cryptocurrency Holdings\n \u0026lt;\/div\u0026gt;\n\n\u0026lt;\/div\u0026gt;\n\n\n\u0026lt;!-- ===== Unified Trade Records Box (Holdings + BuySell History) ===== --\u0026gt;\n\u0026lt;div id=\"tradeRecordsBox\"\n style=\"\n display:none;\n margin-top:8px;\n padding:8px;\n font-size:11px;\n color:#fff;\n max-height:200px;\n overflow-y:auto;\n border:1px solid rgba(255,255,255,0.1);\n border-radius:6px;\n \"\u0026gt;\n \u0026lt;!-- \u6301\u6709\u5e01\u79cd\u533a\u57df --\u0026gt;\n \u0026lt;div id=\"holdingsSection\" style=\"display:none;\"\u0026gt;\n \u0026lt;div style=\"font-weight:bold;margin-bottom:6px;font-size:12px;\"\u0026gt;\n \ud83d\udce6 Cryptocurrency Holdings\n \u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"holdingList\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"holdingsDivider\" style=\"display:none;border-top:1px solid rgba(255,255,255,0.15);margin:8px 0;\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;!-- \u4ea4\u6613\u8bb0\u5f55\u533a\u57df --\u0026gt;\n \u0026lt;div id=\"historySection\" style=\"display:none;\"\u0026gt;\n \u0026lt;div style=\"font-weight:bold;margin-bottom:6px;font-size:12px;\"\u0026gt;\n \ud83d\udcca Trade Records\n \u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"historyList\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n \u0026lt;p class=\"hint-cn\"\u0026gt;\ud83e\udd16 Please ensure you have completed your deposit...\u0026lt;\/p\u0026gt;\n\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;!-- ===== K-line Chart Section ===== --\u0026gt;\n \u0026lt;div class=\"section\" id=\"chart-section\"\u0026gt;\n\u0026lt;div id=\"topbar\"\u0026gt;\n \u0026lt;select id=\"symbol\"\u0026gt;\u0026lt;\/select\u0026gt;\n \u0026lt;div id=\"price\"\u0026gt;--\u0026lt;\/div\u0026gt;\n \u0026lt;button id=\"notificationBtn\" style=\"background:transparent; border:none; color:#0ecb81; font-size:20px; cursor:pointer; margin-left:10px;\"\u0026gt;\ud83d\udd14\u0026lt;\/button\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div id=\"timebar\"\u0026gt;\n \u0026lt;button onclick=\"setIntervalType('1m', this)\"\u0026gt;1m\u0026lt;\/button\u0026gt;\n \u0026lt;button onclick=\"setIntervalType('5m', this)\"\u0026gt;5m\u0026lt;\/button\u0026gt;\n \u0026lt;button onclick=\"setIntervalType('15m', this)\"\u0026gt;15m\u0026lt;\/button\u0026gt;\n \u0026lt;button onclick=\"setIntervalType('1h', this)\"\u0026gt;1h\u0026lt;\/button\u0026gt;\n \u0026lt;button onclick=\"setIntervalType('1d', this)\"\u0026gt;1d\u0026lt;\/button\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;div id=\"chart\"\u0026gt;\u0026lt;\/div\u0026gt;\n\n\u0026lt;!-- ===== Notification Panel ===== --\u0026gt;\n\u0026lt;div id=\"notificationPanel\"\u0026gt;\n \u0026lt;h3\u0026gt;Price Alert\u0026lt;\/h3\u0026gt;\n\n \u0026lt;!-- Tab: Alert Type Selection --\u0026gt;\n \u0026lt;div id=\"alertTypeView\"\u0026gt;\n \u0026lt;div class=\"alert-type-list\"\u0026gt;\n \u0026lt;div class=\"alert-type-item\" onclick=\"openAlertForm('price_reaches')\"\u0026gt;\n \u0026lt;span\u0026gt;Price Reaches\u0026lt;\/span\u0026gt;\u0026lt;span class=\"arrow\"\u0026gt;\u2192\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"alert-type-item\" onclick=\"openAlertForm('price_rises_to')\"\u0026gt;\n \u0026lt;span\u0026gt;Price Rises To\u0026lt;\/span\u0026gt;\u0026lt;span class=\"arrow\"\u0026gt;\u2192\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"alert-type-item\" onclick=\"openAlertForm('price_falls_to')\"\u0026gt;\n \u0026lt;span\u0026gt;Price Falls To\u0026lt;\/span\u0026gt;\u0026lt;span class=\"arrow\"\u0026gt;\u2192\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"alert-type-item\" onclick=\"openAlertForm('pct_rise')\"\u0026gt;\n \u0026lt;span\u0026gt;Percentage Rise\u0026lt;\/span\u0026gt;\u0026lt;span class=\"arrow\"\u0026gt;\u2192\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"alert-type-item\" onclick=\"openAlertForm('pct_fall')\"\u0026gt;\n \u0026lt;span\u0026gt;Percentage Drop\u0026lt;\/span\u0026gt;\u0026lt;span class=\"arrow\"\u0026gt;\u2192\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"alert-type-item\" onclick=\"openAlertForm('h24_change')\"\u0026gt;\n \u0026lt;span\u0026gt;24h Change\u0026lt;\/span\u0026gt;\u0026lt;span class=\"arrow\"\u0026gt;\u2192\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;button class=\"btn-secondary\" style=\"width:100%;\" onclick=\"showAlertList()\"\u0026gt;View Saved Alerts\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;!-- Tab: Alert Form --\u0026gt;\n \u0026lt;div id=\"alertForm\"\u0026gt;\n \u0026lt;button class=\"back-btn\" onclick=\"backToAlertTypes()\"\u0026gt;\u2190 Back\u0026lt;\/button\u0026gt;\n \u0026lt;div class=\"form-group\"\u0026gt;\n \u0026lt;label\u0026gt;Alert Type\u0026lt;\/label\u0026gt;\n \u0026lt;input type=\"text\" id=\"formAlertType\" readonly style=\"cursor:default;\"\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"form-group\" id=\"targetPriceGroup\"\u0026gt;\n \u0026lt;label\u0026gt;Target Price (USD)\u0026lt;\/label\u0026gt;\n \u0026lt;input type=\"number\" id=\"targetPrice\" step=\"0.01\" placeholder=\"e.g. 3400.00\"\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"form-group\" id=\"targetPercentGroup\" style=\"display:none;\"\u0026gt;\n \u0026lt;label\u0026gt;Target Percentage (%)\u0026lt;\/label\u0026gt;\n \u0026lt;input type=\"number\" id=\"targetPercent\" step=\"0.01\" placeholder=\"e.g. 5.00\"\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"form-group\" id=\"h24ChangeGroup\" style=\"display:none;\"\u0026gt;\n \u0026lt;label\u0026gt;24h Change Threshold (%)\u0026lt;\/label\u0026gt;\n \u0026lt;input type=\"number\" id=\"h24Threshold\" step=\"0.01\" placeholder=\"e.g. 3.00\"\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"form-group\"\u0026gt;\n \u0026lt;label\u0026gt;Frequency\u0026lt;\/label\u0026gt;\n \u0026lt;select id=\"alertFrequency\"\u0026gt;\n \u0026lt;option value=\"once\"\u0026gt;Once\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"always\"\u0026gt;Every Time\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"5min\"\u0026gt;Every 5 Minutes\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"15min\"\u0026gt;Every 15 Minutes\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"30min\"\u0026gt;Every 30 Minutes\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"1hour\"\u0026gt;Every Hour\u0026lt;\/option\u0026gt;\n \u0026lt;\/select\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"form-group\"\u0026gt;\n \u0026lt;label\u0026gt;Note (optional)\u0026lt;\/label\u0026gt;\n \u0026lt;textarea id=\"alertNote\" placeholder=\"Add a note...\"\u0026gt;\u0026lt;\/textarea\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"form-buttons\"\u0026gt;\n \u0026lt;button class=\"btn-secondary\" onclick=\"backToAlertTypes()\"\u0026gt;Cancel\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"btn-primary\" onclick=\"createAlert()\"\u0026gt;Create Alert\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;!-- Tab: Saved Alerts --\u0026gt;\n \u0026lt;div id=\"alertList\"\u0026gt;\n \u0026lt;button class=\"back-btn\" onclick=\"backToAlertTypes()\"\u0026gt;\u2190 Back\u0026lt;\/button\u0026gt;\n \u0026lt;div id=\"alertListContent\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\n\n\n\u0026lt;!-- ===== Dynamic Injection: Interval Picker Modal ===== --\u0026gt;\n\u0026lt;div id=\"intervalPickerOverlay\" style=\"display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.55);z-index:2000;justify-content:center;align-items:center;\"\u0026gt;\n \u0026lt;div id=\"intervalPickerPanel\" style=\"background:rgba(10,20,30,0.97);border:1px solid rgba(14,203,129,0.35);border-radius:14px;width:360px;max-height:75vh;overflow-y:auto;padding:20px;backdrop-filter:blur(20px);box-shadow:0 0 40px rgba(0,0,0,0.8);\"\u0026gt;\n \u0026lt;div style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;\"\u0026gt;\n \u0026lt;span style=\"color:#fff;font-size:15px;font-weight:bold;\"\u0026gt;Pinned\u0026lt;\/span\u0026gt;\n \u0026lt;button id=\"intervalEditBtn\" style=\"background:transparent;border:none;color:#f0b90b;cursor:pointer;font-size:13px;padding:4px 10px;\"\u0026gt;Edit\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"pinnedIntervals\" style=\"display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div style=\"color:#888;font-size:13px;margin-bottom:10px;\"\u0026gt;Available\u0026lt;\/div\u0026gt;\n \u0026lt;div id=\"availableIntervals\" style=\"display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;\"\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div style=\"border-top:1px solid rgba(255,255,255,0.06);padding-top:14px;\"\u0026gt;\n \u0026lt;span style=\"color:#888;font-size:12px;\"\u0026gt;Custom Interval\u0026lt;\/span\u0026gt;\n \u0026lt;div style=\"display:flex;gap:8px;margin-top:8px;\"\u0026gt;\n \u0026lt;input id=\"customIntervalInput\" type=\"text\" placeholder=\"e.g. 1h or 30m\" style=\"flex:1;background:rgba(0,0,0,0.3);border:1px solid rgba(255,255,255,0.12);border-radius:8px;color:#fff;padding:10px 14px;font-size:14px;outline:none;\"\u0026gt;\n \u0026lt;button id=\"customIntervalAddBtn\" style=\"background:rgba(14,203,129,0.15);border:1px solid rgba(14,203,129,0.5);color:#0ecb81;border-radius:8px;padding:8px 14px;cursor:pointer;font-size:18px;\"\u0026gt;+\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;!-- ===== Dynamic Injection: Chart Type Dropdown ===== --\u0026gt;\n\u0026lt;div id=\"chartTypeDropdown\" style=\"display:none;position:absolute;background:rgba(10,20,30,0.97);border:1px solid rgba(14,203,129,0.35);border-radius:12px;padding:6px 0;z-index:1500;min-width:140px;backdrop-filter:blur(15px);box-shadow:0 0 30px rgba(0,0,0,0.7);\"\u0026gt;\n \u0026lt;div class=\"chart-type-option active\" data-type=\"candlestick\" style=\"padding:10px 16px;color:#0ecb81;cursor:pointer;font-size:13px;display:flex;align-items:center;gap:10px;transition:0.15s;\" onclick=\"event.stopPropagation();window._switchChartType('candlestick');document.getElementById('chartTypeDropdown').style.display='none';\"\u0026gt;\n \u0026lt;span style=\"display:inline-block;width:20px;height:14px;position:relative;\"\u0026gt;\u0026lt;span style=\"position:absolute;left:2px;top:2px;width:2px;height:10px;background:#0ecb81;\"\u0026gt;\u0026lt;\/span\u0026gt;\u0026lt;span style=\"position:absolute;left:7px;top:2px;width:2px;height:6px;background:#0ecb81;\"\u0026gt;\u0026lt;\/span\u0026gt;\u0026lt;span style=\"position:absolute;left:12px;top:4px;width:2px;height:8px;background:#0ecb81;\"\u0026gt;\u0026lt;\/span\u0026gt;\u0026lt;\/span\u0026gt;Candlestick\u0026lt;span style=\"margin-left:auto;font-size:11px;\"\u0026gt;\u2714\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"chart-type-option\" data-type=\"line\" style=\"padding:10px 16px;color:#ccc;cursor:pointer;font-size:13px;display:flex;align-items:center;gap:10px;transition:0.15s;\" onclick=\"event.stopPropagation();window._switchChartType('line');document.getElementById('chartTypeDropdown').style.display='none';\"\u0026gt;\n \u0026lt;svg width=\"18\" height=\"12\" viewBox=\"0 0 18 12\"\u0026gt;\u0026lt;polyline points=\"1,10 5,6 8,8 12,3 17,7\" fill=\"none\" stroke=\"#ccc\" stroke-width=\"1.5\"\/\u0026gt;\u0026lt;\/svg\u0026gt;Line\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"chart-type-option\" data-type=\"bar\" style=\"padding:10px 16px;color:#ccc;cursor:pointer;font-size:13px;display:flex;align-items:center;gap:10px;transition:0.15s;\" onclick=\"event.stopPropagation();window._switchChartType('bar');document.getElementById('chartTypeDropdown').style.display='none';\"\u0026gt;\n \u0026lt;span style=\"display:inline-block;width:20px;height:14px;position:relative;\"\u0026gt;\u0026lt;span style=\"position:absolute;left:3px;top:2px;width:2px;height:10px;background:#ccc;\"\u0026gt;\u0026lt;\/span\u0026gt;\u0026lt;span style=\"position:absolute;left:8px;top:4px;width:2px;height:8px;background:#ccc;\"\u0026gt;\u0026lt;\/span\u0026gt;\u0026lt;span style=\"position:absolute;left:13px;top:1px;width:2px;height:11px;background:#ccc;\"\u0026gt;\u0026lt;\/span\u0026gt;\u0026lt;\/span\u0026gt;Bar\n \u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"chart-type-option\" data-type=\"area\" style=\"padding:10px 16px;color:#ccc;cursor:pointer;font-size:13px;display:flex;align-items:center;gap:10px;transition:0.15s;\" onclick=\"event.stopPropagation();window._switchChartType('area');document.getElementById('chartTypeDropdown').style.display='none';\"\u0026gt;\n \u0026lt;svg width=\"18\" height=\"12\" viewBox=\"0 0 18 12\"\u0026gt;\u0026lt;polygon points=\"1,11 1,9 5,6 8,8 12,3 17,7 17,11\" fill=\"rgba(204,204,204,0.25)\" stroke=\"#ccc\" stroke-width=\"1\"\/\u0026gt;\u0026lt;\/svg\u0026gt;Area\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;!-- ===== Dynamic Injection: View Switcher (injected below timebar by JS) ===== --\u0026gt;\n\u0026lt;div id=\"viewSwitcher\" style=\"display:none;justify-content:center;gap:4px;padding:6px 10px;\"\u0026gt;\n \u0026lt;button id=\"vsBasicBtn\" class=\"view-switch-btn\" data-view=\"basic\" style=\"background:transparent;border:none;color:#888;cursor:pointer;font-size:12px;padding:5px 12px;border-radius:8px;transition:0.2s;\"\u0026gt;Basic\u0026lt;\/button\u0026gt;\n \u0026lt;button id=\"vsTvBtn\" class=\"view-switch-btn active-view\" data-view=\"tradingview\" style=\"background:rgba(14,203,129,0.12);border:none;color:#0ecb81;cursor:pointer;font-size:12px;padding:5px 12px;border-radius:8px;transition:0.2s;\"\u0026gt;Trading View\u0026lt;\/button\u0026gt;\n \u0026lt;button id=\"vsDepthBtn\" class=\"view-switch-btn\" data-view=\"depth\" style=\"background:transparent;border:none;color:#888;cursor:pointer;font-size:12px;padding:5px 12px;border-radius:8px;transition:0.2s;\"\u0026gt;Depth\u0026lt;\/button\u0026gt;\n\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n\u0026lt;\/div\u0026gt;\u0026lt;!-- .main-wrapper --\u0026gt;\n \u0026lt;hr class=\"section-divider\"\u0026gt;\n\n\n\u0026lt;script\u0026gt;\n \/* ======= Config \u0026amp; Globals ======= *\/\n const API_BASE = \"https:\/\/crypto-management-production-5e04.up.railway.app\";\n\n let submitting = false;\nlet lastEdit = \"usdt\"; \/\/ usdt | qty\n\/\/ \u4f60\u53ef\u4ee5\u5728\u8fd9\u91cc\u52a0\uff1a\nlet originalAmount = 0;\n\/\/ ===== \u79d2\u901f\u4ea4\u6613\u5168\u5c40\u72b6\u6001 =====\nwindow._buysellSpeed = window._buysellSpeed ?? 0; \/\/ 60 \/ 120 \/ 180\nwindow._buysellExpireAt = window._buysellExpireAt ?? 0; \/\/ \u622a\u6b62\u65f6\u95f4\u6233\nwindow._buysellProcessing = false; \/\/ \u9632\u91cd\u5165\u6807\u5fd7\nlet SELECTED_PERCENT = null; \/\/ \u65b0\u589e\uff1a\u7528\u6237\u9009\u62e9\u7684\u767e\u5206\u6bd4\uff0841%, 72%\u7b49\uff09\nlet speedTimer = null; \/\/ timeout \u53e5\u67c4\nlet speedInterval = null; \/\/ \u23f1 \u5b9e\u65f6\u5012\u8ba1\u65f6 interval\nlet speedBtnRef = null; \/\/ \u5f53\u524d\u9009\u4e2d\u7684\u6309\u94ae\n\n \/\/ --- Unified independent UID helper ---\n function getOrCreateUID() {\n try {\n if (window.NEXBIT_USER_ID) return String(window.NEXBIT_USER_ID);\n } catch (e) {}\n try {\n const w = document.getElementById('wallet-widget');\n if (w \u0026amp;\u0026amp; w.dataset \u0026amp;\u0026amp; w.dataset.userId) {\n const ds = w.dataset.userId;\n if (ds \u0026amp;\u0026amp; ds.indexOf('{{') === -1 \u0026amp;\u0026amp; ds.trim() !== '') return ds;\n }\n } catch (e) {}\n let uid = localStorage.getItem('nexbit_uid');\nif (!uid) {\n uid = localStorage.getItem('wallet_uid');\n}\nif (!uid) {\n uid = 'U' + Date.now() + '_' + Math.floor(100000 + Math.random() * 900000);\n localStorage.setItem('nexbit_uid', uid);\n}\nreturn uid;\n\n }\n let USERID = getOrCreateUID();\n let CURRENT_BALANCE = 0;\n\n \/\/ \u94b1\u5305\u5f02\u6b65\u62ff\u5230 UID \u540e\uff0c\u91cd\u65b0\u521d\u59cb\u5316 buysell\n window.addEventListener('nexbit-uid-ready', (e) =\u0026gt; {\n const newUid = e.detail \u0026amp;\u0026amp; e.detail.uid;\n if (!newUid || newUid === USERID) return;\n USERID = newUid;\n CURRENT_BALANCE = 0;\n syncBuysellHistory().then(() =\u0026gt; {\n \/\/ \u91cd\u65b0\u68c0\u67e5 used-feature\uff08\u53cc\u5c42\uff1aCSS\u7c7b + inline !important\uff09\n if (localStorage.getItem(`used_speed_${USERID}`) === 'true') {\n const sr = document.getElementById('speedRow');\n if (sr) { sr.classList.add('used-feature'); sr.style.setProperty('display','none','important'); }\n }\n if (localStorage.getItem(`used_range_${USERID}`) === 'true') {\n const pr = document.getElementById('priceRangeRow');\n if (pr) { pr.classList.add('used-feature'); pr.style.setProperty('display','none','important'); }\n }\n \/\/ \u515c\u5e95\uff1a\u76f4\u63a5\u4ece\u8ba2\u5355\u5386\u53f2\u626b\u63cf\u79d2\u6570\n try {\n const hist = JSON.parse(localStorage.getItem('buysell_history') || '[]');\n if (hist.some(o =\u0026gt; Number(o.second) \u0026gt; 0)) {\n localStorage.setItem(`used_speed_${USERID}`, 'true');\n const sr = document.getElementById('speedRow');\n if (sr) { sr.classList.add('used-feature'); sr.style.setProperty('display','none','important'); }\n }\n } catch(e){}\n });\n startWalletSSE();\n \/\/ \u6062\u590d\u5e01\u79cd\u9009\u62e9\n const savedCoin = localStorage.getItem(`buysell_coin_${USERID}`);\n if (savedCoin) {\n const curEl = document.getElementById('currency');\n if (curEl) {\n curEl.value = savedCoin;\n try { updateCoinIcon(savedCoin); } catch(e){}\n try { ensureSymbolPrice(savedCoin); } catch(e){}\n const lbl = document.getElementById('coinQtyLabel');\n if (lbl) lbl.innerText = `Amount (${savedCoin})`;\n }\n }\n \/\/ \u6062\u590d\u79d2\u6570\/\u767e\u5206\u6bd4\n const savedSpeed = localStorage.getItem(`buysell_speed_${USERID}`);\n if (savedSpeed !== null) {\n \/\/ \u9632\u91cd\u5165\uff1a\u5982\u679c\u6b63\u5728\u4e0b\u5355\u4e2d\uff0c\u8df3\u8fc7\u6062\u590d\u79d2\u6570\n if (!window._buysellProcessing) {\n const speedBtn = document.querySelector(`.speed-btn[data-sec=\"${savedSpeed}\"]`);\n if (speedBtn) selectSpeed(speedBtn, Number(savedSpeed));\n }\n }\n const savedRange = localStorage.getItem(`buysell_range_${USERID}`);\n if (savedRange !== null) {\n SELECTED_PERCENT = Number(savedRange);\n }\n });\n\n \/* ================= Sync buysell history from server ================= *\/\n async function syncBuysellHistory() {\n try {\n const r = await fetch(`${API_BASE}\/api\/sync\/${encodeURIComponent(USERID)}`);\n const j = await r.json();\n if (!j.ok) return;\n\n const orders = (j.orders \u0026amp;\u0026amp; j.orders.buysell) ? j.orders.buysell : [];\n\n \/\/ Map server fields to frontend format (server uses coinQty, frontend expects qty)\n const mapped = orders.map(o =\u0026gt; ({\n type: o.type || (o.side || 'buy'),\n coin: o.coin || '',\n amount: Number(o.amount || 0),\n estimate: Number(o.estimate || o.amount || 0),\n qty: Number(o.coinQty || o.qty || 0),\n tp: o.tp || null,\n sl: o.sl || null,\n second: o.second ?? null,\n priceRangePercent: o.priceRangePercent ?? null,\n time_us: o.time_us || '',\n status: o.status || 'PENDING',\n originalAmount: Number(o.originalAmount || 0),\n orderId: o.orderId || '',\n }));\n\n \/\/ \u2705 \u5408\u5e76\u800c\u975e\u66ff\u6362\uff1a\u4fdd\u7559\u672c\u5730\u5df2\u6709\u7684\u975esync\u8ba2\u5355\uff0c\u53ea\u66ff\u6362sync\u6301\u4ed3\u6761\u76ee\n \/\/ \uff08\u4e0e swap \/ \u4e3b\u4f59\u989d\u7684\u5408\u5e76\u903b\u8f91\u4fdd\u6301\u4e00\u81f4\uff0c\u786e\u4fdd\u4e09\u5904\u6301\u4ed3\u663e\u793a\u5b8c\u5168\u4e00\u81f4\uff09\n let existingHistory = [];\n try {\n existingHistory = JSON.parse(localStorage.getItem('buysell_history') || '[]');\n } catch(e) {}\n \/\/ \u4fdd\u7559\u975esync\u7684\u771f\u5b9e\u8ba2\u5355\u8bb0\u5f55\n const keptOrders = existingHistory.filter(o =\u0026gt; o.note !== 'sync');\n \/\/ \u5408\u5e76\u670d\u52a1\u7aef orders\uff08buysell\u8ba2\u5355\uff09\n for (const o of mapped) {\n if (o.note === 'sync') continue; \/\/ sync\u6761\u76ee\u540e\u9762\u7edf\u4e00\u52a0\n \/\/ \u53bb\u91cd\uff1a\u540corderId\u4e0d\u91cd\u590d\u52a0\u5165\n if (!keptOrders.some(k =\u0026gt; k.orderId \u0026amp;\u0026amp; k.orderId === o.orderId)) {\n keptOrders.push(o);\n }\n }\n \/\/ \u5408\u5e76\u670d\u52a1\u7aef portfolio \u4e3a sync \u6761\u76ee\n if (j.portfolio) {\n for (const [coin, qty] of Object.entries(j.portfolio)) {\n if (Number(qty) \u0026gt; 0) {\n keptOrders.push({ type:'buy', coin, qty: Number(qty), amount:0, estimate:0,\n tp:null, sl:null, second:null, priceRangePercent:null,\n time_us:'', status:'COMPLETED', originalAmount:0, orderId:'', note:'sync' });\n }\n }\n }\n\n localStorage.setItem('buysell_history', JSON.stringify(keptOrders));\n\n \/\/ Restore speed\/range UI flags from existing orders\n let hasSpeed = false, hasRange = false;\n for (const o of orders) {\n if (Number(o.second) \u0026gt; 0) {\n localStorage.setItem(`used_speed_${USERID}`, 'true');\n hasSpeed = true;\n }\n if (o.priceRangePercent !== undefined \u0026amp;\u0026amp; o.priceRangePercent !== null) {\n localStorage.setItem(`used_range_${USERID}`, 'true');\n hasRange = true;\n }\n }\n \/\/ \u515c\u5e95\uff1a\u4ece\u5408\u5e76\u540e\u7684\u5b8c\u6574\u5386\u53f2\u626b\u63cf\u79d2\u6570\u6807\u8bb0\n if (keptOrders.some(o =\u0026gt; Number(o.second) \u0026gt; 0)) {\n localStorage.setItem(`used_speed_${USERID}`, 'true');\n hasSpeed = true;\n }\n if (keptOrders.some(o =\u0026gt; o.priceRangePercent !== undefined \u0026amp;\u0026amp; o.priceRangePercent !== null)) {\n localStorage.setItem(`used_range_${USERID}`, 'true');\n hasRange = true;\n }\n \/\/ \u7acb\u5373\u5e94\u7528\u5230 DOM\uff0c\u4e0d\u7b49\u4e0b\u6b21 DOMContentLoaded\n if (hasSpeed) {\n const sr = document.getElementById('speedRow');\n if (sr) { sr.classList.add('used-feature'); sr.style.setProperty('display','none','important'); }\n }\n if (hasRange) {\n const pr = document.getElementById('priceRangeRow');\n if (pr) { pr.classList.add('used-feature'); pr.style.setProperty('display','none','important'); }\n }\n\n renderHoldings();\n const histSection = document.getElementById('historySection');\n if (histSection \u0026amp;\u0026amp; histSection.style.display === 'block') {\n renderBuySellHistory();\n }\n } catch (e) {\n console.error('syncBuysellHistory failed', e);\n }\n }\n\n syncBuysellHistory();\n\n \/\/ ===== \u76d1\u542c swap \u5b8c\u6210\u4e8b\u4ef6\uff0c\u81ea\u52a8\u540c\u6b65\u5e01\u79cd\u6570\u91cf\u548c\u4e3b\u4f59\u989d =====\n window.addEventListener('nexbit-swap-complete', async () =\u0026gt; {\n await syncBuysellHistory();\n renderHoldings();\n const histSection = document.getElementById('historySection');\n if (histSection \u0026amp;\u0026amp; histSection.style.display === 'block') {\n renderBuySellHistory();\n }\n \/\/ \u5237\u65b0\u4e3b\u4f59\u989d\n checkBalance().then(bal =\u0026gt; {\n if (bal \u0026gt; 0) CURRENT_BALANCE = bal;\n });\n });\n\n const COINS = [\n \"BTC\",\"ETH\",\"BNB\",\"SOL\",\"XRP\",\n \"XAUUSD\",\"ADA\",\"DOGE\",\"TRX\",\"DOT\",\"MATIC\",\n \"AVAX\",\"USDT\",\"USDC\",\"DAI\",\n \n];\n const STABLES = new Set([\"USDT\", \"USDC\", \"DAI\"]);\n\n \/* ======= \u540e\u7eed JS \u4e0e\u4f60\u539f\u6765\u5b8c\u5168\u4e00\u81f4 ======= *\/\n \/\/ Live prices cache\n const live = {};\n const wsMap = {};\n const restPollTimers = {};\n\n \/* ======= Price fetch \u0026amp; WS ======= *\/\n \/\/ \u4fee\u6539\u540e\u7684\u83b7\u53d6\u4ef7\u683c\u51fd\u6570\u793a\u4f8b\nasync function fetchPriceREST(sym) {\n try {\n\n if (!sym) return 0;\n\n \/\/ ===== \u9ec4\u91d1 =====\n if (sym === \"XAUUSD\") {\n\n const r = await fetch(\n \"https:\/\/api.gold-api.com\/price\/XAU\"\n );\n\n const j = await r.json();\n\n if (j \u0026amp;\u0026amp; j.price) {\n return Number(j.price);\n }\n\n return 3350;\n }\n\n \/\/ ===== \u7a33\u5b9a\u5e01 =====\n if (STABLES.has(sym)) return 1;\n\n \/\/ ===== \u52a0\u5bc6\u8d27\u5e01 =====\n const r = await fetch(\n `https:\/\/api.binance.us\/api\/v3\/ticker\/price?symbol=${sym}USDT`\n );\n\n const j = await r.json();\n\n if (j \u0026amp;\u0026amp; j.price) {\n return parseFloat(j.price);\n }\n\n } catch(e) {}\n\n return 0;\n}\n\n function startRestPoll(sym) {\n if (restPollTimers[sym]) return;\n restPollTimers[sym] = setInterval(async () =\u0026gt; {\n const p = await fetchPriceREST(sym);\n if (p \u0026amp;\u0026amp; (!live[sym] || live[sym] === 0)) {\n live[sym] = p;\n updateConverted();\n updateTPSL();\n }\n }, 5000);\n }\n\n function stopRestPoll(sym) {\n if (restPollTimers[sym]) {\n clearInterval(restPollTimers[sym]);\n delete restPollTimers[sym];\n }\n }\n\n function ensureSymbolPrice(sym) {\n if (!sym) return;\n if (STABLES.has(sym)) {\n live[sym] = 1;\n updateConverted();\n updateTPSL();\n return;\n }\n if (typeof live[sym] === \"number\" \u0026amp;\u0026amp; live[sym] \u0026gt; 0) return;\n\n if (!wsMap[sym]) {\n\n \/\/ \u9ec4\u91d1\u4e0d\u7528 Binance websocket\n if (sym === \"XAUUSD\") {\n startRestPoll(sym);\n return;\n }\n\n try {\n\n const url =\n `wss:\/\/stream.binance.us:9443\/ws\/${sym.toLowerCase()}usdt@ticker`;\n\n const ws = new WebSocket(url);\n ws.onopen = () =\u0026gt; { stopRestPoll(sym); };\n ws.onmessage = ev =\u0026gt; {\n try {\n const d = JSON.parse(ev.data);\n if (d \u0026amp;\u0026amp; d.c) {\n live[sym] = parseFloat(d.c);\n updateConverted();\n updateTPSL();\n }\n } catch (e) {}\n };\n ws.onclose = () =\u0026gt; {\n delete wsMap[sym];\n startRestPoll(sym);\n setTimeout(() =\u0026gt; ensureSymbolPrice(sym), 3000);\n };\n ws.onerror = () =\u0026gt; {\n try { ws.close(); } catch (e) {}\n };\n wsMap[sym] = ws;\n fetchPriceREST(sym).then(p =\u0026gt; {\n if (p \u0026amp;\u0026amp; (!live[sym] || live[sym] === 0)) {\n live[sym] = p;\n updateConverted();\n updateTPSL();\n }\n if (!live[sym] || live[sym] === 0) startRestPoll(sym);\n });\n } catch (e) {\n fetchPriceREST(sym).then(p =\u0026gt; {\n if (p) {\n live[sym] = p;\n updateConverted();\n updateTPSL();\n }\n startRestPoll(sym);\n });\n }\n } else {\n if (!live[sym] || live[sym] === 0) startRestPoll(sym);\n }\n }\nasync function updateCoinIcon(symbol) {\n\n const icon = document.getElementById(\"coinIcon\");\n\n \/\/ \u9ec4\u91d1\u7279\u6b8a\u5904\u7406\n if (symbol === \"XAUUSD\") {\n icon.src =\n \"https:\/\/cdn-icons-png.freepik.com\/512\/8107\/8107835.png\";\n return;\n }\n\n try {\n\n \/\/ \u4ece CoinGecko \u641c\u7d22\u5e01\u79cd\n const r = await fetch(\n `https:\/\/api.coingecko.com\/api\/v3\/search?query=${symbol}`\n );\n\n const j = await r.json();\n\n \/\/ \u627e\u5230\u6700\u5339\u914d\u5e01\u79cd\n const coin = (j.coins || []).find(\n c =\u0026gt; c.symbol.toLowerCase() === symbol.toLowerCase()\n );\n\n if (coin \u0026amp;\u0026amp; coin.large) {\n icon.src = coin.large;\n return;\n }\n\n } catch(e) {}\n\n \/\/ fallback\n icon.src =\n \"https:\/\/cryptologos.cc\/logos\/bitcoin-btc-logo.png?v=040\";\n}\n \n \/* ======= UI Setup ======= *\/\n document.addEventListener(\"DOMContentLoaded\", () =\u0026gt; {\n const curEl = document.getElementById(\"currency\");\n const amtCurEl = document.getElementById(\"amountCurrency\");\n \n\nCOINS.forEach(c =\u0026gt; {\n curEl.insertAdjacentHTML('beforeend', `\u0026lt;option value=\"${c}\"\u0026gt;${c}\u0026lt;\/option\u0026gt;`);\n});\n\namtCurEl.value = \"USDT\";\n\n \/\/ \u6062\u590d\u4e0a\u6b21\u9009\u4e2d\u7684\u5e01\u79cd\n const savedCoin = localStorage.getItem(`buysell_coin_${USERID}`);\n if (savedCoin) {\n curEl.value = savedCoin;\n updateCoinIcon(savedCoin);\n ensureSymbolPrice(savedCoin);\n document.getElementById(\"coinQtyLabel\").innerText = `Amount (${savedCoin})`;\n }\n\n document.getElementById(\"buyBtn\").onclick = () =\u0026gt; setType(\"buy\");\n document.getElementById(\"sellBtn\").onclick = () =\u0026gt; setType(\"sell\");\n document.getElementById(\"tradeBtn\").onclick = sendOrder;\n document.getElementById(\"slCheckbox\").onclick = toggleSL;\n \n \n curEl.addEventListener(\"change\", () =\u0026gt; {\n\n localStorage.setItem(`buysell_coin_${USERID}`, curEl.value);\n\n updateCoinIcon(curEl.value);\n\n ensureSymbolPrice(curEl.value);\n\n document.getElementById(\"coinQtyLabel\").innerText =\n `Amount (${curEl.value})`;\n\n if (lastEdit === \"qty\") syncFromQty();\n else syncFromUSDT();\n});\n amtCurEl.addEventListener(\"change\", () =\u0026gt; {\n ensureSymbolPrice(amtCurEl.value);\n ensureSymbolPrice(curEl.value);\n updateConverted();\n });\n document.getElementById(\"amount\").addEventListener(\"input\", () =\u0026gt; {\n lastEdit = \"usdt\";\n originalAmount = Number(document.getElementById(\"amount\").value) || 0;\n updateOriginalAmountDisplay();\n syncFromUSDT();\n});\nfunction updateOriginalAmountDisplay() {\n const display = document.getElementById(\"originalAmountDisplay\");\n display.textContent = `Original Amount: ${originalAmount.toFixed(2)} USDT`;\n}\n\ndocument.getElementById(\"coinQty\").addEventListener(\"input\", () =\u0026gt; {\n lastEdit = \"qty\";\n syncFromQty();\n});\n\n\/\/ document.getElementById(\"takeProfit\").addEventListener(\"input\", updateTPSL);\n\/\/ document.getElementById(\"stopLoss\").addEventListener(\"input\", updateTPSL);\n\n \/\/ \u2705 \u540c\u6b65\u626b\u63cf localStorage \u786e\u4fdd used_speed_ \/ used_range_ \u6807\u8bb0\u6c38\u4e0d\u4e22\u5931\n \/\/ \uff08\u653e\u5728 setType \u4e4b\u524d\uff0c\u907f\u514d setType \u5148\u663e\u793a\u518d\u9690\u85cf\u7684\u95ea\u70c1\uff09\n try {\n const hist = JSON.parse(localStorage.getItem('buysell_history') || '[]');\n if (hist.some(o =\u0026gt; Number(o.second) \u0026gt; 0)) {\n localStorage.setItem(`used_speed_${USERID}`, 'true');\n }\n if (hist.some(o =\u0026gt; o.priceRangePercent !== undefined \u0026amp;\u0026amp; o.priceRangePercent !== null)) {\n localStorage.setItem(`used_range_${USERID}`, 'true');\n }\n } catch(e) {}\n if (localStorage.getItem(`used_speed_${USERID}`) === \"true\") {\n const speedRow = document.getElementById(\"speedRow\");\n if (speedRow) { speedRow.classList.add('used-feature'); speedRow.style.setProperty('display','none','important'); }\n }\n if (localStorage.getItem(`used_range_${USERID}`) === \"true\") {\n const priceRangeRow = document.getElementById(\"priceRangeRow\");\n if (priceRangeRow) { priceRangeRow.classList.add('used-feature'); priceRangeRow.style.setProperty('display','none','important'); }\n }\n\n setType(\"buy\");\n\n \/\/ \u6062\u590d\u4e0a\u6b21\u9009\u4e2d\u7684\u79d2\u6570\u548c\u767e\u5206\u6bd4\uff08\u4ec5\u5f53\u529f\u80fd\u672a\u88ab\u4f7f\u7528\u65f6\u6062\u590dUI\u72b6\u6001\uff09\n const savedSpeed = localStorage.getItem(`buysell_speed_${USERID}`);\n const savedRange = localStorage.getItem(`buysell_range_${USERID}`);\n if (savedSpeed !== null \u0026amp;\u0026amp; localStorage.getItem(`used_speed_${USERID}`) !== \"true\") {\n \/\/ \u9632\u91cd\u5165\uff1a\u5982\u679c\u6b63\u5728\u4e0b\u5355\u4e2d\uff0c\u8df3\u8fc7\u6062\u590d\u79d2\u6570\n if (!window._buysellProcessing) {\n const speedBtn = document.querySelector(`.speed-btn[data-sec=\"${savedSpeed}\"]`);\n if (speedBtn) selectSpeed(speedBtn, Number(savedSpeed));\n }\n }\n if (savedRange !== null \u0026amp;\u0026amp; localStorage.getItem(`used_range_${USERID}`) !== \"true\") {\n SELECTED_PERCENT = Number(savedRange);\n }\n \/\/ ========================\n updateCoinIcon(curEl.value || \"BTC\");\n ensureSymbolPrice(curEl.value || \"BTC\");\n ensureSymbolPrice(amtCurEl.value || \"USDT\");\n });\n\n function setType(t) {\n window.tradeType = t;\n const b = document.getElementById(\"buyBtn\");\n const s = document.getElementById(\"sellBtn\");\n b.style.filter = t === \"buy\" ? \"brightness(100%)\" : \"brightness(40%)\";\n s.style.filter = t === \"sell\" ? \"brightness(100%)\" : \"brightness(40%)\";\n\n \/\/ \u6839\u636e\u4ea4\u6613\u7c7b\u578b\u663e\u793a\u6216\u9690\u85cf Delivery Time \u548c Price Range\n const speedRow = document.getElementById(\"speedRow\");\n const priceRangeRow = document.getElementById(\"priceRangeRow\");\n\n if (t === \"buy\") {\n \/\/ \u5df2\u4f7f\u7528\u8fc7\u7684\u529f\u80fd\u6c38\u4e45\u9690\u85cf\uff0c\u9700\u5148\u79fb\u9664 used-feature \u7c7b\u624d\u80fd\u663e\u793a\n if (!localStorage.getItem(`used_speed_${USERID}`)) {\n speedRow.classList.remove('used-feature');\n speedRow.style.display = \"flex\";\n }\n if (!localStorage.getItem(`used_range_${USERID}`)) {\n priceRangeRow.classList.remove('used-feature');\n priceRangeRow.style.display = \"flex\";\n }\n } else {\n speedRow.classList.add('used-feature');\n speedRow.style.display = \"none\";\n priceRangeRow.classList.add('used-feature');\n priceRangeRow.style.display = \"none\";\n }\n}\n\n\n function toggleSL() {\n document.getElementById(\"slBox\").style.display =\n document.getElementById(\"slCheckbox\").checked ? \"block\" : \"none\";\n }\n\n \/* ======= Conversion display ======= *\/\n function updateConverted() {\n try {\n const amountEl = document.getElementById(\"amount\");\n const acEl = document.getElementById(\"amountCurrency\");\n const curEl = document.getElementById(\"currency\");\n const box = document.getElementById(\"convertedBox\");\n\n const amount = Number(amountEl.value) || 0;\n const from = acEl.value;\n const to = curEl.value;\n\n box.innerHTML = \"\u0026lt;p\u0026gt;\u0026lt;b\u0026gt;Auto-conversion:\u0026lt;\/b\u0026gt;\u0026lt;\/p\u0026gt;\";\n if (amount \u0026lt;= 0) return;\n\n if (from === to) {\n box.innerHTML += `\u0026lt;p\u0026gt;${to}: ${amount.toFixed(6)}\u0026lt;\/p\u0026gt;`;\n return;\n }\n\n const missing = [];\n if (!live[from]) missing.push(from);\n if (!live[to]) missing.push(to);\n\n if (missing.length) {\n missing.forEach(s =\u0026gt; {\n fetchPriceREST(s).then(p =\u0026gt; {\n if (p) {\n live[s] = p;\n updateConverted();\n updateTPSL();\n }\n });\n });\n box.innerHTML += `\u0026lt;p style='color:#ccc;font-size:13px;'\u0026gt;Fetching price...\u0026lt;\/p\u0026gt;`;\n return;\n }\n\n const usd = amount * live[from];\n const conv = usd \/ live[to];\n box.innerHTML = `\n \u0026lt;div style=\"font-size:14px;line-height:1.4;\"\u0026gt;\n ${to}: ${conv.toFixed(6)} \u2248 ${usd.toFixed(2)} USDT\n \u0026lt;\/div\u0026gt;\n`;\n\n\n } catch {}\n }\nfunction syncFromUSDT() {\n const usdt = Number(document.getElementById(\"amount\").value) || 0;\n const coin = document.getElementById(\"currency\").value;\n\n if (!live[coin] || usdt \u0026lt;= 0) {\n document.getElementById(\"coinQty\").value = \"\";\n return;\n }\n\n const qty = usdt \/ live[coin];\n document.getElementById(\"coinQty\").value = qty.toFixed(6);\n\n updateConverted();\n}\n\nfunction syncFromQty() {\n const qty = Number(document.getElementById(\"coinQty\").value) || 0;\n const coin = document.getElementById(\"currency\").value;\n\n if (!live[coin] || qty \u0026lt;= 0) {\n document.getElementById(\"amount\").value = \"\";\n return;\n }\n\n const usdt = qty * live[coin];\n document.getElementById(\"amount\").value = usdt.toFixed(2);\n\n updateConverted();\n}\nfunction adjustAmount(step) {\n const el = document.getElementById(\"amount\");\n el.value = (Number(el.value) || 0) + step;\n lastEdit = \"usdt\";\n syncFromUSDT();\n}\n\nfunction adjustQty(step) {\n const el = document.getElementById(\"coinQty\");\n el.value = (Number(el.value) || 0) + step * 0.01;\n lastEdit = \"qty\";\n syncFromQty();\n}\n\/* ======= \u79d2\u901f\u4ea4\u6613\uff08\u5e26\u5012\u8ba1\u65f6\uff09 ======= *\/\nfunction selectSpeed(btn, sec){\n \/\/ \u9632\u91cd\u5165\uff1a\u6b63\u5728\u4e0b\u5355\u4e2d\u4e0d\u4fee\u6539\u79d2\u6570\u72b6\u6001\n if (window._buysellProcessing) return;\n\n \/\/ \u53ea\u8bb0\u5f55\u9009\u62e9\u7684\u79d2\u6570\uff0c\u4e0d\u542f\u52a8\u5012\u8ba1\u65f6\n window._buysellSpeed = sec;\n window._buysellExpireAt = Date.now() + sec * 1000;\n speedBtnRef = btn;\n\n \/\/ \u7981\u7528\u5176\u4ed6\u79d2\u6570\u6309\u94ae\uff0c\u53ea\u9ad8\u4eae\u9009\u4e2d\u6309\u94ae\n document.querySelectorAll(\".speed-btn\").forEach(b =\u0026gt; {\n if (b !== btn) {\n b.disabled = false;\n b.style.opacity = 1;\n b.style.cursor = \"pointer\";\n b.classList.remove(\"active\");\n } else {\n b.disabled = false;\n b.style.opacity = 1;\n b.style.cursor = \"pointer\";\n b.classList.add(\"active\");\n }\n b.textContent = b.getAttribute(\"data-sec\") + \"s\"; \/\/ \u4fdd\u6301\u539f\u663e\u793a\n });\n\n document.getElementById(\"speedHint\").style.display = \"block\";\n\n \/\/ \u81ea\u52a8\u9650\u5236 Price Range \u6309\u94ae\n const priceBtns = document.querySelectorAll(\"#priceRangeRow .pct-btn\");\n const allowedMap = {30:41, 60:72, 120:95, 180:100};\n const allowedPct = allowedMap[sec];\n\n priceBtns.forEach(b=\u0026gt;{\n const pct = Number(b.getAttribute(\"data-percent\"));\n if(pct !== allowedPct){\n b.disabled = true;\n b.style.opacity = 0.4;\n b.style.cursor = \"not-allowed\";\n b.classList.remove(\"active\");\n } else {\n b.disabled = false;\n b.style.opacity = 1;\n b.style.cursor = \"pointer\";\n b.classList.add(\"active\"); \/\/ \u81ea\u52a8\u9009\u4e2d\n }\n });\n\n SELECTED_PERCENT = allowedPct;\n localStorage.setItem(`buysell_speed_${USERID}`, window._buysellSpeed);\n localStorage.setItem(`buysell_range_${USERID}`, SELECTED_PERCENT);\n\n \/\/ \u66f4\u65b0\u91d1\u989d\u663e\u793a\uff08\u4e0d\u52a8\u5012\u8ba1\u65f6\uff09\n const amountInput = document.getElementById(\"amount\");\n const totalAmount = originalAmount * (1 + allowedPct \/ 100);\n amountInput.value = totalAmount.toFixed(2);\n lastEdit = \"usdt\";\n syncFromUSDT();\n}\n\nfunction cancelSpeedTrade(){\n \/\/ \u9632\u91cd\u5165\uff1a\u6b63\u5728\u4e0b\u5355\u4e2d\u4e0d\u6e05\u9664\u79d2\u6570\n if (window._buysellProcessing) return;\n\n window._buysellSpeed = 0;\n window._buysellExpireAt = 0;\n\n if (speedTimer) clearTimeout(speedTimer);\n if (speedInterval) clearInterval(speedInterval);\n\n document.querySelectorAll(\".speed-btn\").forEach(b=\u0026gt;{\n b.disabled = false;\n b.classList.remove(\"active\");\n const sec = b.getAttribute(\"data-sec\");\n b.textContent = sec ? `${sec}s` : \"60s\";\n });\n\n speedBtnRef = null;\n document.getElementById(\"speedHint\").style.display = \"none\";\n\n alert(\"\u23f1\ufe0f Trade cancelled: time expired\");\n}\n\nfunction applyPercent(pct) {\n const coin = document.getElementById(\"currency\").value;\n const type = window.tradeType || \"buy\";\n\n \/\/ ===== BUY\uff1a\u6309 USDT \u4f59\u989d =====\n if (type === \"buy\") {\n const balance = CURRENT_BALANCE || 0;\n const usdt = balance * pct \/ 100;\n\n document.getElementById(\"amount\").value = usdt.toFixed(2);\n lastEdit = \"usdt\";\n syncFromUSDT();\n return;\n }\n\n \/\/ ===== SELL\uff1a\u6309\u6301\u4ed3\u5e01\u6570\u91cf =====\n const list = JSON.parse(\n localStorage.getItem(\"buysell_history\") || \"[]\"\n );\n\n let holdingQty = 0;\n list.forEach(o =\u0026gt; {\n if (o.coin !== coin) return;\n if (o.note !== 'sync') return;\n holdingQty += Number(o.qty || 0);\n });\n\n if (holdingQty \u0026lt;= 0) {\n alert(\"\u274c No holding available.\");\n return;\n }\n\n const qty = holdingQty * pct \/ 100;\n\n document.getElementById(\"coinQty\").value = qty.toFixed(6);\n lastEdit = \"qty\";\n syncFromQty();\n}\n\n \/* ======= TP\/SL display ======= *\/\n function updateTPSL() {\n \/\/ \u274c \u5df2\u7981\u7528 TP \/ SL \u81ea\u52a8\u8ba1\u7b97\n \/\/ \u53ea\u4f5c\u4e3a\u5360\u4f4d\uff0c\u9632\u6b62\u88ab\u5176\u4ed6\u5730\u65b9\u8c03\u7528\u65f6\u62a5\u9519\n const tpEl = document.getElementById(\"tpResult\");\n const slEl = document.getElementById(\"slResult\");\n if (tpEl) tpEl.innerHTML = \"\";\n if (slEl) slEl.innerHTML = \"\";\n}\n\n\n \/* ======= Utility ======= *\/\n function genOrderId() {\n const d = new Date();\n return `TRD-${d.getFullYear()}${(\"0\" + (d.getMonth() + 1)).slice(-2)}${(\"0\" + d.getDate()).slice(-2)}-${Math.floor(100000 + Math.random() * 900000)}`;\n }\n\n function usTime(ts) {\n return new Date(ts).toLocaleString(\"en-US\", {\n timeZone: \"America\/New_York\",\n hour12: true,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).replace(\",\", \"\");\n }\n\n \/* ======= API Helpers ======= *\/\n async function postNoThrow(url, data) {\n try {\n const resp = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application\/json\",\n \"X-User-Id\": USERID,\n },\n body: JSON.stringify(data),\n });\n const json = await resp.json().catch(() =\u0026gt; ({}));\n return { ok: resp.ok, status: resp.status, data: json };\n } catch(e) {\n return { ok: false, status: 0, data: {}, error: e.message };\n }\n }\n\nasync function sendTelegramTrade(text) {\n await fetch(`${API_BASE}\/api\/telegram\/trade`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application\/json\",\n \"X-User-Id\": USERID\n },\n body: JSON.stringify({ text })\n });\n}\n\n\/* ======= Frozen Balance Modal ======= *\/\nfunction showFrozenModal() {\n return new Promise(resolve =\u0026gt; {\n const overlay = document.getElementById('frozenModalOverlay');\n overlay.classList.add('active');\n const closeBtn = document.getElementById('frozenModalCloseBtn');\n const handler = () =\u0026gt; {\n overlay.classList.remove('active');\n closeBtn.removeEventListener('click', handler);\n resolve();\n };\n closeBtn.addEventListener('click', handler);\n });\n}\n\nasync function sendOrder() {\n if (submitting) return;\n submitting = true;\n window._buysellProcessing = true;\n\n const btn = document.getElementById(\"tradeBtn\");\n const msgEl = document.getElementById(\"insufficientBalanceMsg\"); \n\n \/\/ ===== \u79d2\u901f\u8d85\u65f6\u6821\u9a8c =====\n if (window._buysellSpeed \u0026gt; 0 \u0026amp;\u0026amp; Date.now() \u0026gt; window._buysellExpireAt) {\n alert(\"\u23f1 Trade time expired. Please select seconds again.\");\n btn.textContent = \"Submitted\";\n window._buysellProcessing = false; \/\/ \u5141\u8bb8 cancelSpeedTrade \u6267\u884c\n cancelSpeedTrade();\n submitting = false;\n return;\n }\n\n btn.disabled = true;\n btn.classList.add(\"loading\");\n\n \/\/ ===== \u663e\u793a\u8f6c\u5708 overlay =====\n const overlay = document.getElementById(\"loadingOverlay\");\n const spinnerSecEl = document.getElementById(\"spinnerSeconds\");\n overlay.style.display = \"flex\";\n\n \/\/ ===== \u5012\u8ba1\u65f6\u903b\u8f91\u521d\u59cb\u5316 =====\n let speedRemain = window._buysellSpeed || 0;\n let intervalId = null;\n\n if (speedRemain \u0026gt; 0) {\n spinnerSecEl.innerText = `${speedRemain}s`;\n intervalId = setInterval(() =\u0026gt; {\n speedRemain--;\n if (speedRemain \u0026lt;= 0) {\n spinnerSecEl.innerText = \"\";\n overlay.style.display = \"none\";\n clearInterval(intervalId);\n } else {\n spinnerSecEl.innerText = `${speedRemain}s`;\n }\n }, 1000);\n } else {\n spinnerSecEl.innerText = \"\";\n }\n\n try {\n \/\/ ===== \u83b7\u53d6\u8868\u5355\u6570\u636e =====\n const displayAmount = Number(document.getElementById(\"amount\").value);\n \/\/ \u515c\u5e95\uff1a\u82e5 originalAmount \u672a\u901a\u8fc7 input \u4e8b\u4ef6\u6355\u83b7\uff08\u5982\u76f4\u63a5\u70b9 Trade \u6216 adjustAmount \u672a\u89e6 input\uff09\uff0c\u4ece\u8868\u5355\u8bfb\u53d6\n if (!originalAmount || originalAmount \u0026lt;= 0) {\n originalAmount = displayAmount;\n updateOriginalAmountDisplay();\n }\n let chargeAmount = Number(originalAmount);\n const ac = document.getElementById(\"amountCurrency\").value;\n const coin = document.getElementById(\"currency\").value;\n const tp = document.getElementById(\"takeProfit\").value;\n const sl = document.getElementById(\"stopLoss\").value;\n const isSell = (window.tradeType || \"buy\") === \"sell\";\n\n let qty = 0;\n if (coin === 'USDT') {\n qty = displayAmount;\n } else if (live[coin]) {\n qty = displayAmount \/ live[coin];\n }\n qty = Number(qty.toFixed(6));\n\n if (isSell) {\n const list = JSON.parse(localStorage.getItem(\"buysell_history\") || \"[]\");\n let holdingQty = 0;\n list.forEach(o =\u0026gt; {\n if (o.coin !== coin) return;\n if (o.note !== 'sync') return;\n holdingQty += Number(o.qty || 0);\n });\n\n if (holdingQty \u0026lt;= 0 || qty \u0026gt; holdingQty) {\n overlay.style.display = \"none\";\n if (intervalId) clearInterval(intervalId);\n if (msgEl) {\n msgEl.innerText = \"\u274c The number of shares sold exceeds your holdings. Please check if your holdings are sufficient. \u274c\";\n msgEl.style.display = \"block\";\n setTimeout(() =\u0026gt; { \n msgEl.style.display = \"none\"; \n msgEl.innerText = \"\ud83e\udd16Insufficient balance. Please top up your account before submitting.\"; \n }, 4000);\n }\n throw new Error(\"INSUFFICIENT_HOLDINGS\"); \n }\n chargeAmount = qty * (live[coin] || 0);\n } else {\n const balance = await checkBalance();\n if (balance \u0026lt; chargeAmount) {\n overlay.style.display = \"none\";\n if (intervalId) clearInterval(intervalId);\n if (msgEl) {\n msgEl.style.display = \"block\";\n setTimeout(() =\u0026gt; { msgEl.style.display = \"none\"; }, 3000);\n }\n throw new Error(\"INSUFFICIENT_BALANCE\");\n }\n }\n\n if (!displayAmount || displayAmount \u0026lt;= 0) {\n alert(\"Please enter a valid amount.\");\n throw new Error(\"INVALID_AMOUNT\");\n }\n\n const oid = genOrderId();\n const timeUS = usTime(Date.now());\n\n let bsHistory = JSON.parse(localStorage.getItem(\"buysell_history\") || \"[]\");\n bsHistory.unshift({\n orderId: oid,\n type: window.tradeType || \"buy\",\n coin,\n amount: Number(displayAmount).toFixed(2),\n estimate: Number(displayAmount).toFixed(2),\n amountCurrency: \"USDT\",\n qty: Number(qty),\n tp,\n sl,\n second: window._buysellSpeed || null,\n priceRangePercent: SELECTED_PERCENT,\n time_us: timeUS,\n status: \"PENDING\",\n originalAmount: originalAmount\n });\n\n localStorage.setItem(\"buysell_history\", JSON.stringify(bsHistory));\n renderHoldings();\n renderBuySellHistory();\n\n const payload = {\n userId: USERID,\n tradeType: window.tradeType || \"buy\",\n amount: chargeAmount,\n displayAmount,\n amountCurrency: ac,\n qty,\n coin,\n estimate: displayAmount,\n tp,\n sl,\n orderId: oid,\n timestamp: Date.now(),\n time_us: timeUS,\n originalAmount: originalAmount \n };\n\n const box = document.getElementById(\"orderIdBox\");\n box.style.display = \"block\";\n box.innerHTML = `\u0026lt;div\u0026gt;Order submitted: \u0026lt;b\u0026gt;${oid}\u0026lt;\/b\u0026gt;\u0026lt;\/div\u0026gt;`;\n \n \/\/ 1. \u63d0\u4ea4\u8ba2\u5355\u5230 API \n const apiResult = await postNoThrow(`${API_BASE}\/api\/order\/buysell`, payload);\n\n \/\/ \u68c0\u67e5 API \u54cd\u5e94\uff1a\u51bb\u7ed3\u4f59\u989d \/ \u5176\u4ed6\u9519\u8bef\u62e6\u622a\n if (!apiResult.ok) {\n const errorMsg = (apiResult.data \u0026amp;\u0026amp; (apiResult.data.error || apiResult.data.message)) || '';\n \/\/ \u56de\u6eda\u672c\u5730\u5386\u53f2\u8bb0\u5f55\n let rollbackHistory = JSON.parse(localStorage.getItem(\"buysell_history\") || \"[]\");\n rollbackHistory = rollbackHistory.filter(o =\u0026gt; o.orderId !== oid);\n localStorage.setItem(\"buysell_history\", JSON.stringify(rollbackHistory));\n renderHoldings();\n renderBuySellHistory();\n box.style.display = \"none\";\n await showFrozenModal();\n submitting = false;\n btn.disabled = false;\n btn.classList.remove(\"loading\");\n overlay.style.display = \"none\";\n if (intervalId) clearInterval(intervalId);\n window._buysellProcessing = false;\n return;\n }\n\n \/\/ 1.5 \u4ece\u670d\u52a1\u7aef\u540c\u6b65\u6700\u65b0\u6570\u636e\u5e76\u5237\u65b0\u6301\u4ed3\u548c\u8bb0\u5f55\n await syncBuysellHistory();\n renderHoldings();\n renderBuySellHistory();\n\n \/\/ === 2. \u6838\u5fc3\u4fee\u6539\uff1a\u6807\u8bb0\u79d2\u901f\u529f\u80fd\u4e3a\u5df2\u4f7f\u7528\u5e76\u7acb\u5373\u9690\u85cf\uff0c\u6c38\u4e45\u8bb0\u5f55\u5230\u672c\u5730 ===\n if (window._buysellSpeed \u0026gt; 0) {\n localStorage.setItem(`used_speed_${USERID}`, \"true\");\n const speedRow = document.getElementById(\"speedRow\");\n if (speedRow) { speedRow.classList.add(\"used-feature\"); speedRow.style.setProperty('display','none','important'); }\n }\n if (SELECTED_PERCENT !== null) {\n localStorage.setItem(`used_range_${USERID}`, \"true\");\n const priceRangeRow = document.getElementById(\"priceRangeRow\");\n if (priceRangeRow) { priceRangeRow.classList.add(\"used-feature\"); priceRangeRow.style.setProperty('display','none','important'); }\n }\n\n \/\/ 3. \u53d1\u9001 Telegram \u901a\u77e5\n await sendTelegramTrade(\n `\ud83d\udcca Buy\/Sell Order\\n\ud83d\udc64User: ${USERID}\\n\ud83d\udce5Order: ${oid}\\n\ud83d\udcc8Type: ${window.tradeType || \"buy\"}\\n\ud83d\udcb0Original Amount: ${originalAmount.toFixed(2)} USDT\\n\ud83d\udcb5Amount: ${displayAmount.toFixed(2)}\\n\ud83d\udc8eCoin: ${coin}\\n\ud83d\udd22Quantity: ${qty}\\n\u23f3Second: ${window._buysellSpeed || 'N\/A'}\\n\ud83d\udcafPercent: ${SELECTED_PERCENT !== null ? SELECTED_PERCENT + '%' : 'N\/A'}\\nTP: ${tp}\\nSL: ${sl}\\n\ud83d\udcc6Time (US): ${timeUS}`\n );\n\n await new Promise(resolve =\u0026gt; {\n if (speedRemain \u0026lt;= 0) resolve();\n else {\n const check = setInterval(() =\u0026gt; {\n if (speedRemain \u0026lt;= 0) { clearInterval(check); resolve(); }\n }, 200);\n }\n });\n\n openTradeModal({\n profit: displayAmount - originalAmount,\n direction: window.tradeType || \"Buy\",\n amount: displayAmount,\n coin,\n qty,\n priceRange: SELECTED_PERCENT || '100%',\n deliveryTime: usTime(Date.now()),\n time_us: timeUS,\n originalAmount: originalAmount\n });\n\n btn.textContent = \"Submitted\";\n \/\/ \u23f1 \u5012\u8ba1\u65f6\u53d8\u91cf\u5df2\u4e0d\u518d\u624b\u52a8\u6e05\u96f6\uff0c\u7531 finally \u4e2d\u7684 hideLoading \u7edf\u4e00\u5904\u7406\n window._buysellSpeed = 0;\n window._buysellExpireAt = 0;\n\n } catch (err) {\n console.error(\"Order Error:\", err);\n btn.textContent = \"Trade\";\n } finally {\n if (intervalId) clearInterval(intervalId);\n btn.disabled = false;\n btn.classList.remove(\"loading\");\n submitting = false;\n window._buysellProcessing = false;\n hideLoading();\n }\n}\n \nfunction showLoading() {\n document.getElementById(\"loadingOverlay\").style.display = \"flex\";\n}\nfunction hideLoading() {\n \/\/ \u4fdd\u62a4\uff1a\u4e0b\u5355\u5904\u7406\u4e2d\u65f6\u4e0d\u9690\u85cf overlay\uff0c\u9664\u975e\u660e\u786e\u8c03\u7528\u4e86 forceHideLoading\n if (window._buysellProcessing \u0026amp;\u0026amp; !window._forceHideLoading) return;\n window._forceHideLoading = false;\n document.getElementById(\"loadingOverlay\").style.display = \"none\";\n}\n\nfunction forceHideLoading() {\n window._forceHideLoading = true;\n hideLoading();\n}\nfunction openTradeModal(data) {\n const type = window.tradeType || \"buy\";\n\n \/\/ Original Amount \u548c Profit \u4ec5 Buy \u663e\u793a\n const originalAmountEl = document.getElementById(\"modalOriginalAmount\");\n const profitEl = document.getElementById(\"modalProfit\");\n if (type === \"sell\") {\n if (originalAmountEl) originalAmountEl.parentElement.style.display = \"none\";\n if (profitEl) profitEl.parentElement.style.display = \"none\";\n } else {\n if (originalAmountEl) {\n originalAmountEl.parentElement.style.display = \"block\";\n originalAmountEl.innerText = (data.originalAmount || 0).toFixed(2);\n }\n if (profitEl) {\n profitEl.parentElement.style.display = \"block\";\n profitEl.innerText = \"$\" + (data.profit || 0).toFixed(2);\n }\n }\n\n document.getElementById(\"modalDirection\").innerText = data.direction || \"Buy\";\n document.getElementById(\"modalQuantity\").innerText = (data.amount || 0).toFixed(6);\n document.getElementById(\"modalCurrency\").innerText = data.coin || \"BTC\";\n document.getElementById(\"modalCurrencyQty\").innerText = (data.qty || 0).toFixed(6);\n\n \/\/ Price Range \u548c Delivery Time \u5f39\u7a97\u663e\u793a\n const priceRangeEl = document.getElementById(\"modalPriceRange\");\n const deliveryTimeEl = document.getElementById(\"modalDeliveryTime\");\n\nif (type === \"sell\") {\n if (priceRangeEl) priceRangeEl.parentElement.style.display = \"none\";\n if (deliveryTimeEl) {\n deliveryTimeEl.parentElement.style.display = \"block\";\n \/\/ \u663e\u793a\u4e0b\u5355\u65f6\u95f4\n deliveryTimeEl.innerText = `\ud83d\udcc6(US): ${data.time_us || '-'}`;\n }\n} else {\n if (priceRangeEl) {\n priceRangeEl.parentElement.style.display = \"block\";\n priceRangeEl.innerText = (data.priceRange || '100%');\n }\n if (deliveryTimeEl) {\n deliveryTimeEl.parentElement.style.display = \"block\";\n deliveryTimeEl.innerText = (data.deliveryTime || '30s');\n }\n}\n\n document.getElementById(\"tradeModal\").style.display = \"block\";\n}\nfunction closeTradeModal() {\n document.getElementById(\"tradeModal\").style.display = \"none\";\n}\n\n\/************************************\n * \ud83d\udcca BuySell History\n ************************************\/\nfunction showBuySellHistory() {\n const box = document.getElementById(\"tradeRecordsBox\");\n const section = document.getElementById(\"historySection\");\n const hSection = document.getElementById(\"holdingsSection\");\n if (!box || !section) return;\n\n \/\/ \u5207\u6362\u5386\u53f2\u8bb0\u5f55\u533a\u57df\n const isVisible = section.style.display === \"block\";\n\n if (isVisible) {\n section.style.display = \"none\";\n \/\/ \u5982\u679c\u6301\u4ed3\u4e5f\u4e0d\u53ef\u89c1\uff0c\u9690\u85cf\u6574\u4e2a\u5bb9\u5668\n if (!hSection || hSection.style.display !== \"block\") {\n box.style.display = \"none\";\n }\n } else {\n section.style.display = \"block\";\n box.style.display = \"block\";\n renderBuySellHistory();\n }\n}\n\nfunction renderBuySellHistory() {\n const box = document.getElementById(\"tradeRecordsBox\");\n const section = document.getElementById(\"historySection\");\n const listEl = document.getElementById(\"historyList\");\n if (!box || !section || !listEl) return;\n\n const list = JSON.parse(\n localStorage.getItem(\"buysell_history\") || \"[]\"\n );\n\n \/\/ \u8fc7\u6ee4\u6389 sync \u6301\u4ed3\u6761\u76ee\uff0c\u53ea\u663e\u793a\u771f\u5b9e\u8ba2\u5355\n const tradeList = list.filter(o =\u0026gt; o.note !== 'sync');\n\n if (tradeList.length === 0) {\n listEl.innerHTML = \"\u0026lt;div style='opacity:.6;'\u0026gt;No trade history.\u0026lt;\/div\u0026gt;\";\n section.style.display = \"block\";\n return;\n }\n\n listEl.innerHTML = tradeList.map(o =\u0026gt; `\n \u0026lt;div style=\"margin-bottom:10px;\n border-bottom:1px solid rgba(255,255,255,.2);\n padding-bottom:8px;\"\u0026gt;\n\n \u0026lt;div style=\"display:flex;justify-content:space-between;\"\u0026gt;\n \u0026lt;div style=\"font-weight:bold;\n color:${o.type === 'buy' ? '#00ff88' : '#ff9f43'}\"\u0026gt;\n ${o.type.toUpperCase()} ${o.coin}\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div style=\"font-size:13px;margin-top:4px;\"\u0026gt;\n ${Number(o.qty || 0).toFixed(6)} ${o.coin} \u2248 ${(() =\u0026gt; { const amt = Number(o.amount || 0); return amt \u0026gt; 0 ? amt.toFixed(2) : (live[o.coin] ? (Number(o.qty || 0) * live[o.coin]).toFixed(2) : '0.00'); })()} USDT\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div style=\"font-size:12px;opacity:.75;\"\u0026gt;\n TP: ${o.tp || '-'}% \uff5c SL: ${o.sl || '-'}%\n ${o.type === 'buy' ? `\uff5c Speed: ${o.second !== undefined ? o.second + 's' : '-'} \uff5c Price Range: ${o.priceRangePercent !== undefined ? o.priceRangePercent + '%' : '-'}` : ''}\n\u0026lt;\/div\u0026gt;\n\n${o.type === 'buy' ? (() =\u0026gt; { const amt = Number(o.amount || 0); const effAmt = amt \u0026gt; 0 ? amt : (live[o.coin] ? Number(o.qty || 0) * live[o.coin] : 0); const orig = Number(o.originalAmount || 0); return `\u0026lt;div style=\"font-size:12px;opacity:.75;\"\u0026gt;\n Original: ${orig.toFixed(2)} USDT \uff5c Profit: ${(effAmt - orig).toFixed(2)} USDT\n\u0026lt;\/div\u0026gt;`; })() : ''}\n\n\n \u0026lt;div style=\"font-size:11px;opacity:.6;\"\u0026gt;\n ${o.time_us}\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div style=\"font-size:11px;opacity:.5;\"\u0026gt;\n Order: ${o.orderId}\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n `).join(\"\");\n section.style.display = \"block\";\n}\n\nfunction renderHoldings(){\n const box = document.getElementById(\"tradeRecordsBox\");\n const section = document.getElementById(\"holdingsSection\");\n const wrap = document.getElementById(\"holdingList\");\n if (!box || !section || !wrap) return;\n\n const list = JSON.parse(\n localStorage.getItem(\"buysell_history\") || \"[]\"\n );\n\n const map = {};\n\n list.forEach(o =\u0026gt; {\n if (!o.coin) return;\n \/\/ \u6301\u4ed3\u663e\u793a\u53ea\u805a\u5408 note:'sync' \u7684 portfolio \u540c\u6b65\u6761\u76ee\n if (o.note !== 'sync') return;\n\n if (!map[o.coin]) {\n map[o.coin] = {\n coin: o.coin,\n qty: 0,\n usdt: 0\n };\n }\n\n map[o.coin].qty += Number(o.qty || 0);\n });\n\n const arr = Object.values(map)\n .filter(i =\u0026gt; i.qty \u0026gt; 0.0000001);\n\nif (arr.length === 0) {\n wrap.innerHTML = \"\u0026lt;div style='opacity:.6;'\u0026gt;No holdings.\u0026lt;\/div\u0026gt;\";\n section.style.display = \"block\";\n return;\n}\n\nwrap.innerHTML = arr.map(i =\u0026gt; {\n const price = live[i.coin] || 0;\n const valueUSDT = price * i.qty;\n\n return `\n \u0026lt;div style=\"\n display:flex;\n justify-content:space-between;\n align-items:center;\n padding:8px 0;\n border-bottom:1px dashed rgba(255,255,255,.15);\n \"\u0026gt;\n \u0026lt;div\u0026gt;\n \u0026lt;div style=\"font-weight:bold;\"\u0026gt;${i.coin}\u0026lt;\/div\u0026gt;\n \u0026lt;div style=\"font-size:12px;opacity:.7;\"\u0026gt;\n \u2248 ${valueUSDT.toFixed(2)} USDT\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div style=\"text-align:right;font-weight:bold;\"\u0026gt;\n ${i.qty.toFixed(6)}\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n `;\n}).join(\"\");\n\n section.style.display = \"block\";\n if (box) box.style.display = \"block\";\n}\n\nfunction toggleHoldings() {\n const box = document.getElementById(\"tradeRecordsBox\");\n const section = document.getElementById(\"holdingsSection\");\n const hSection = document.getElementById(\"historySection\");\n if (!box || !section) return;\n\n \/\/ \u5207\u6362\u6301\u4ed3\u533a\u57df\n const isVisible = section.style.display === \"block\";\n\n if (isVisible) {\n section.style.display = \"none\";\n \/\/ \u5982\u679c\u4ea4\u6613\u8bb0\u5f55\u4e5f\u4e0d\u53ef\u89c1\uff0c\u9690\u85cf\u6574\u4e2a\u5bb9\u5668\n if (!hSection || hSection.style.display !== \"block\") {\n box.style.display = \"none\";\n }\n } else {\n section.style.display = \"block\";\n box.style.display = \"block\";\n renderHoldings();\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () =\u0026gt; {\n const recordToggle = document.getElementById(\"buysellRecordToggle\");\n const holdingToggle = document.getElementById(\"holdingToggle\");\n\n if (recordToggle) {\n recordToggle.addEventListener(\"click\", showBuySellHistory);\n }\n\n if (holdingToggle) {\n holdingToggle.addEventListener(\"click\", toggleHoldings);\n }\n\n \/\/ \u521d\u59cb\u5316\uff1a\u9ed8\u8ba4\u663e\u793a\u6301\u4ed3\n setTimeout(() =\u0026gt; {\n const hSection = document.getElementById(\"holdingsSection\");\n if (hSection \u0026amp;\u0026amp; hSection.style.display !== \"block\") {\n toggleHoldings();\n }\n }, 500);\n\n \/\/ \u9875\u9762\u521d\u59cb\u5316\u7531 syncBuysellHistory \u7edf\u4e00\u89e6\u53d1\u6e32\u67d3\n \/\/ \u7ed1\u5b9a\u65b0 Price Range \u6309\u94ae\u4e8b\u4ef6\uff08\u66ff\u6362\u539f\u6709\u7ed1\u5b9a\u903b\u8f91\uff09\n const priceBtns = document.querySelectorAll(\"#priceRangeRow .pct-btn\");\n\n priceBtns.forEach(btn =\u0026gt; {\n btn.addEventListener(\"click\", () =\u0026gt; {\n const pct = Number(btn.getAttribute(\"data-percent\"));\n const amountInput = document.getElementById(\"amount\");\n let amountVal = Number(amountInput.value) || 0;\n if (amountVal \u0026lt;= 0) {\n alert(\"Please enter a valid amount first.\");\n return;\n }\n\n \/\/ \u5982\u679c\u70b9\u51fb\u7684\u662f\u5f53\u524d\u5df2\u6fc0\u6d3b\u7684\u6309\u94ae\uff0c\u5219\u53d6\u6d88\u9009\u62e9\uff08\u6062\u590d\u6240\u6709\u6309\u94ae\u53ef\u7528\uff0c\u6062\u590d\u539f\u91d1\u989d\uff09\n \n\n \/\/ \u70b9\u51fb\u4e86\u65b0\u6309\u94ae\uff0c\u5219\u7981\u7528\u5176\u4ed6\u6309\u94ae\uff0c\u53ea\u4fdd\u7559\u5f53\u524d\u6309\u94ae\u53ef\u70b9\n priceBtns.forEach(b =\u0026gt; {\n if (b !== btn) {\n b.disabled = true;\n b.style.opacity = 0.4;\n b.style.cursor = \"not-allowed\";\n b.classList.remove(\"active\");\n } else {\n b.disabled = false;\n b.style.opacity = 1;\n b.style.cursor = \"pointer\";\n b.classList.add(\"active\");\n }\n });\n\n \/\/ \u8bb0\u5f55\u9009\u4e2d\u7684\u767e\u5206\u6bd4\n SELECTED_PERCENT = pct;\n\n \/\/ \u8ba1\u7b97\u5229\u6da6 + \u603b\u91d1\u989d\n const profit = originalAmount * pct \/ 100;\n const totalAmount = originalAmount + profit;\n\n amountInput.value = totalAmount.toFixed(2);\n lastEdit = \"usdt\";\n syncFromUSDT();\n });\n });\n});\n\u0026lt;\/script\u0026gt;\n\u0026lt;script\u0026gt;\n\/* ================= Wallet SSE Balance ================= *\/\n\nlet walletES = null;\n\nfunction startWalletSSE() {\n if (walletES) try { walletES.close(); } catch {}\n\n walletES = new EventSource(\n `${API_BASE}\/wallet\/${encodeURIComponent(USERID)}\/sse`\n );\n\n walletES.addEventListener(\"balance\", e =\u0026gt; {\n try {\n const d = JSON.parse(e.data || \"{}\");\n if (typeof d.balance === \"number\") {\n CURRENT_BALANCE = d.balance;\n }\n } catch {}\n });\n\n walletES.onerror = () =\u0026gt; {\n try { walletES.close(); } catch {}\n setTimeout(startWalletSSE, 3000);\n };\n\n \/\/ \u7acb\u5373\u62c9\u53d6\u4f59\u989d\uff0c\u4e0d\u7b49 SSE \u9996\u6b21\u63a8\u9001\n checkBalance();\n}\n\n\/* \u4f59\u989d\u67e5\u8be2\uff1a\u4f18\u5148 SSE \u7f13\u5b58\uff0c\u65e0\u7f13\u5b58\u5219\u76f4\u63a5\u8c03 API \u515c\u5e95 *\/\nasync function checkBalance() {\n if (CURRENT_BALANCE \u0026gt; 0) return CURRENT_BALANCE;\n try {\n const res = await fetch(`${API_BASE}\/api\/balance\/${encodeURIComponent(USERID)}`);\n const data = await res.json();\n if (data.ok \u0026amp;\u0026amp; typeof data.balance === 'number') {\n CURRENT_BALANCE = data.balance;\n return CURRENT_BALANCE;\n }\n return 0;\n } catch {\n return 0;\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", startWalletSSE);\n\n\/* ================= Binance 100+ \u5e01\u79cd ================= *\/\nasync function loadBinanceCoins() {\n try {\n const r = await fetch(\"https:\/\/api.binance.us\/api\/v3\/exchangeInfo\");\n const j = await r.json();\n\n const coins = [...new Set(\n j.symbols\n .filter(s =\u0026gt; s.quoteAsset === \"USDT\" \u0026amp;\u0026amp; s.status === \"TRADING\")\n .map(s =\u0026gt; s.baseAsset)\n)].slice(0, 150);\n\n\/\/ \u624b\u52a8\u6dfb\u52a0\u9ec4\u91d1\ncoins.push(\"XAUUSD\");\n\n const cur = document.getElementById(\"currency\");\n const prev = cur.value;\n\n cur.innerHTML = \"\";\ncoins.forEach(c =\u0026gt; {\n cur.insertAdjacentHTML(\n \"beforeend\",\n `\u0026lt;option value=\"${c}\"\u0026gt;${c}\u0026lt;\/option\u0026gt;`\n );\n});\n\n\/\/ \u624b\u52a8\u52a0\u5165\u9ec4\u91d1\ncur.insertAdjacentHTML(\n \"afterbegin\",\n `\u0026lt;option value=\"XAUUSD\"\u0026gt;\ud83e\udd47 XAUUSD\u0026lt;\/option\u0026gt;`\n);\n cur.value = coins.includes(prev) ? prev : \"BTC\";\n\n ensureSymbolPrice(cur.value);\n ensureSymbolPrice(\"USDT\");\n } catch (e) {\n console.error(\"loadBinanceCoins failed\", e);\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", loadBinanceCoins);\n\u0026lt;\/script\u0026gt;\n\u0026lt;script\u0026gt;\nconst chart = LightweightCharts.createChart(document.getElementById('chart'), {\n layout: { \n background: { color: 'transparent' }, \n textColor: '#DDD' \n },\n\n localization: {\n locale: 'en-US' \/\/ \u5f3a\u5236\u82f1\u6587\n },\n\n grid: {\n vertLines: { color: 'rgba(255,255,255,0.05)' },\n horzLines: { color: 'rgba(255,255,255,0.05)' }\n },\n\n timeScale: {\n timeVisible: true\n }\n});\n\nconst candleSeries = chart.addCandlestickSeries();\n\nlet currentSymbol = \"XAUUSD\";\nlet currentInterval = \"1m\";\nlet ws;\nlet reconnectTimeout;\nlet lastPrice = null;\n\n\/\/ ===== \u5e01\u79cd =====\nasync function loadSymbols() {\n \/\/ \u4fee\u6539\uff1a\u5207\u6362\u81f3 binance.us \u4ee5\u652f\u6301\u7f8e\u56fd\u7528\u6237[cite: 1]\n const res = await fetch(\"https:\/\/api.binance.us\/api\/v3\/exchangeInfo\");\n const data = await res.json();\n\n const select = document.getElementById(\"symbol\");\n\n\/\/ \u5148\u63d2\u5165 XAUUSD\nlet goldOpt = document.createElement(\"option\");\ngoldOpt.value = \"XAUUSD\";\ngoldOpt.text = \"XAUUSD\";\nselect.appendChild(goldOpt);\n\ndata.symbols\n .filter(s =\u0026gt; s.quoteAsset === \"USDT\")\n .forEach(s =\u0026gt; {\n let o = document.createElement(\"option\");\n o.value = s.symbol;\n o.text = s.symbol;\n select.appendChild(o);\n });\n\n loadHistory();\n}\n\nasync function loadHistory() {\n\n \/\/ ===== XAUUSD \u9ec4\u91d1K\u7ebf =====\n if (currentSymbol === \"XAUUSD\") {\n\n const candles = [];\n\n let base = 3350;\n\n for (let i = 0; i \u0026lt; 300; i++) {\n\n const open = base;\n\n const close =\n open + (Math.random() - 0.5) * 3;\n\n const high =\n Math.max(open, close) +\n Math.random() * 1.5;\n\n const low =\n Math.min(open, close) -\n Math.random() * 1.5;\n\n candles.push({\n time:\n Math.floor(Date.now()\/1000)\n - (300 - i) * 60,\n open,\n high,\n low,\n close\n });\n\n base = close;\n }\n\n candleSeries.setData(candles);\n\n const lastCandle =\n candles[candles.length - 1];\n\n document.getElementById(\"price\").innerHTML =\n Number(lastCandle.close)\n .toLocaleString(undefined,{\n minimumFractionDigits:2,\n maximumFractionDigits:2\n });\n\n lastPrice = Number(lastCandle.close);\n\n startWS();\n\n return;\n }\n\n \/\/ ===== Binance \u666e\u901a\u5e01 =====\n const res = await fetch(\n `https:\/\/api.binance.us\/api\/v3\/klines?symbol=${currentSymbol}\u0026amp;interval=${currentInterval}\u0026amp;limit=300`\n );\n\n const data = await res.json();\n\n const candles = data.map(d =\u0026gt; ({\n time: d[0] \/ 1000,\n open: +d[1],\n high: +d[2],\n low: +d[3],\n close: +d[4],\n }));\n\n candleSeries.setData(candles);\n\n startWS();\n\n const lastCandle =\n candles[candles.length - 1];\n\n document.getElementById(\"price\").innerHTML =\n Number(lastCandle.close)\n .toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n });\n\n lastPrice = Number(lastCandle.close);\n}\n\nfunction startWS() {\n\n \/\/ ===== \u6e05\u7406\u65e7\u8fde\u63a5 =====\n if (ws) {\n ws.onclose = null;\n ws.close();\n }\n\n clearTimeout(reconnectTimeout);\nclearInterval(reconnectTimeout);\n\n \/\/ ===== XAUUSD \u9ec4\u91d1\u5b9e\u65f6 =====\n if (currentSymbol === \"XAUUSD\") {\n\n async function updateGold() {\n\n try {\n\n let price = null;\n\n \/\/ Primary: gold-api.com (global)\n try {\n const res = await fetch(\n \"https:\/\/api.gold-api.com\/price\/XAU\"\n );\n const data = await res.json();\n if (data.price) price = Number(data.price);\n } catch(e) {}\n\n \/\/ Fallback: metals.live (US-friendly, no key required)\n if (!price) {\n try {\n const res = await fetch(\n \"https:\/\/api.metals.live\/v1\/spot\/gold\"\n );\n const data = await res.json();\n if (Array.isArray(data) \u0026amp;\u0026amp; data[0] \u0026amp;\u0026amp; data[0].gold) {\n price = Number(data[0].gold);\n }\n } catch(e) {}\n }\n\n if (!price) return;\n\n const priceEl =\n document.getElementById(\"price\");\n\n priceEl.innerHTML =\n price.toLocaleString(\n \"en-US\",\n {\n minimumFractionDigits:2,\n maximumFractionDigits:2\n }\n );\n\n priceEl.classList.remove(\n \"up\",\n \"down\"\n );\n\n if (lastPrice !== null) {\n\n if (price \u0026gt; lastPrice) {\n priceEl.classList.add(\"up\");\n }\n else if (price \u0026lt; lastPrice) {\n priceEl.classList.add(\"down\");\n }\n\n }\n\n \/\/ ===== \u5e73\u6ed1\u66f4\u65b0\u6700\u540eK\u7ebf =====\nconst now =\n Math.floor(Date.now() \/ 60) * 60;\n\nconst prev =\n lastPrice || price;\n\ncandleSeries.update({\n time: now,\n open: prev,\n high: Math.max(prev, price),\n low: Math.min(prev, price),\n close: price\n});\n\n \/\/ Check alerts BEFORE updating lastPrice (so pct change is correct)\n checkAlerts(price);\n\n lastPrice = price;\n\n } catch (err) {\n\n console.log(\"XAU error\", err);\n\n }\n\n }\n\n updateGold();\n\n ws = {\n close(){},\n onclose:null\n };\n\n reconnectTimeout =\n setInterval(updateGold, 3000);\n\n return;\n }\n\n \/\/ ===== Binance \u666e\u901a\u5e01 =====\n ws = new WebSocket(\n `wss:\/\/stream.binance.us:9443\/ws\/${currentSymbol.toLowerCase()}@trade`\n );\n\n ws.onopen = () =\u0026gt; {\n console.log(\"WS Connected\");\n };\n\n ws.onmessage = (e) =\u0026gt; {\n\n const data = JSON.parse(e.data);\n\n const price =\n parseFloat(data.p);\n\n if (isNaN(price)) return;\n\n const priceEl =\n document.getElementById(\"price\");\n\n priceEl.innerHTML =\n price.toLocaleString(\n \"en-US\",\n {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }\n );\n\n priceEl.classList.remove(\n \"up\",\n \"down\"\n );\n\n if (lastPrice !== null) {\n\n if (price \u0026gt; lastPrice) {\n priceEl.classList.add(\"up\");\n }\n else if (price \u0026lt; lastPrice) {\n priceEl.classList.add(\"down\");\n }\n\n }\n\n \/\/ Check alerts BEFORE updating lastPrice (so pct change is correct)\n checkAlerts(price);\n\n lastPrice = price;\n };\n\n ws.onerror = (err) =\u0026gt; {\n console.log(\"WS Error\", err);\n };\n\n ws.onclose = () =\u0026gt; {\n\n reconnectTimeout =\n setTimeout(() =\u0026gt; {\n startWS();\n }, 2000);\n\n };\n\n}\n\/\/ ===== \u5207\u6362\u5e01\u79cd =====\ndocument.getElementById(\"symbol\").onchange = (e) =\u0026gt; {\n currentSymbol = e.target.value;\n loadHistory();\n};\n\n\/\/ ===== \u5207\u6362\u5468\u671f =====\nfunction setIntervalType(interval, btn) {\n currentInterval = interval;\n\n document.querySelectorAll(\"#timebar button\")\n .forEach(b =\u0026gt; b.classList.remove(\"active\"));\n\n btn.classList.add(\"active\");\n\n loadHistory();\n}\n\n\/\/ \u521d\u59cb\u5316\nloadSymbols();\n\n\/\/ \u9ed8\u8ba4\u6fc0\u6d3b 1m \u6309\u94ae\ndocument.querySelector(\"#timebar button\").classList.add(\"active\");\n\n\/\/ ===== Notification System =====\nconst ALERT_TYPES = {\n price_reaches: 'Price Reaches',\n price_rises_to: 'Price Rises To',\n price_falls_to: 'Price Falls To',\n pct_rise: 'Percentage Rise',\n pct_fall: 'Percentage Drop',\n h24_change: '24h Change'\n};\n\nlet alerts = [];\nlet currentAlertType = null;\nlet alertCooldowns = {};\nlet last24hPrice = null;\nlet priceHistory24h = [];\nlet notificationPanelOpen = false;\n\n\/\/ ===== Persistence: localStorage =====\nconst ALERTS_STORAGE_KEY = 'trading_chart_alerts';\n\nfunction loadAlerts() {\n try {\n const raw = localStorage.getItem(ALERTS_STORAGE_KEY);\n if (raw) {\n alerts = JSON.parse(raw);\n }\n } catch(e) {\n alerts = [];\n }\n}\n\nfunction saveAlerts() {\n try {\n localStorage.setItem(ALERTS_STORAGE_KEY, JSON.stringify(alerts));\n } catch(e) {}\n}\n\n\/\/ Load saved alerts on startup\nloadAlerts();\n\n\/\/ Request notification permission\nlet notificationPermission = 'default';\nfunction requestNotificationPermission() {\n if (!('Notification' in window)) return;\n Notification.requestPermission().then(perm =\u0026gt; {\n notificationPermission = perm;\n if (perm === 'granted') {\n showToast('Notifications enabled! You will be alerted when price targets are hit.', '#0ecb81');\n }\n });\n}\n\n\/\/ Trigger a system notification + sound + toast\nfunction triggerAlert(alertType, msg, color) {\n \/\/ Toast on page\n showToast(msg, color);\n\n \/\/ Browser system notification\n if (notificationPermission === 'granted') {\n new Notification('Price Alert', {\n body: msg,\n icon: 'data:image\/svg+xml,' + encodeURIComponent('\u0026lt;svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"32\" height=\"32\"\u0026gt;\u0026lt;circle cx=\"16\" cy=\"16\" r=\"14\" fill=\"' + (color === '#0ecb81' ? '#0ecb81' : '#f6465d') + '\"\/\u0026gt;\u0026lt;text x=\"16\" y=\"21\" text-anchor=\"middle\" fill=\"#fff\" font-size=\"14\"\u0026gt;!\u0026lt;\/text\u0026gt;\u0026lt;\/svg\u0026gt;'),\n tag: 'price-alert',\n requireInteraction: true\n });\n }\n\n \/\/ Audio beep\n try {\n const ctx = new (window.AudioContext || window.webkitAudioContext)();\n const osc = ctx.createOscillator();\n const gain = ctx.createGain();\n osc.connect(gain);\n gain.connect(ctx.destination);\n osc.frequency.value = color === '#0ecb81' ? 880 : 440;\n osc.type = 'sine';\n gain.gain.value = 0.3;\n osc.start();\n gain.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + 0.3);\n osc.stop(ctx.currentTime + 0.3);\n } catch(e) {}\n}\n\n\/\/ Notification button\ndocument.getElementById('notificationBtn').addEventListener('click', (e) =\u0026gt; {\n e.stopPropagation();\n \/\/ Request notification permission on first click\n if (notificationPermission === 'default') {\n requestNotificationPermission();\n }\n const panel = document.getElementById('notificationPanel');\n notificationPanelOpen = !notificationPanelOpen;\n if (notificationPanelOpen) {\n panel.classList.add('show');\n backToAlertTypes();\n } else {\n panel.classList.remove('show');\n }\n});\n\n\/\/ Close panel when clicking outside\ndocument.addEventListener('click', (e) =\u0026gt; {\n const panel = document.getElementById('notificationPanel');\n const btn = document.getElementById('notificationBtn');\n if (!panel.contains(e.target) \u0026amp;\u0026amp; e.target !== btn \u0026amp;\u0026amp; notificationPanelOpen) {\n notificationPanelOpen = false;\n panel.classList.remove('show');\n }\n});\n\nfunction backToAlertTypes() {\n document.getElementById('alertTypeView').style.display = 'block';\n document.getElementById('alertForm').classList.remove('show');\n document.getElementById('alertList').classList.remove('show');\n currentAlertType = null;\n}\n\nfunction openAlertForm(type) {\n currentAlertType = type;\n document.getElementById('alertTypeView').style.display = 'none';\n document.getElementById('alertList').classList.remove('show');\n document.getElementById('alertForm').classList.add('show');\n\n document.getElementById('formAlertType').value = ALERT_TYPES[type];\n\n \/\/ Show\/hide appropriate fields\n const priceGroup = document.getElementById('targetPriceGroup');\n const percentGroup = document.getElementById('targetPercentGroup');\n const h24Group = document.getElementById('h24ChangeGroup');\n\n priceGroup.style.display = 'none';\n percentGroup.style.display = 'none';\n h24Group.style.display = 'none';\n\n if (type === 'price_reaches' || type === 'price_rises_to' || type === 'price_falls_to') {\n priceGroup.style.display = 'block';\n } else if (type === 'pct_rise' || type === 'pct_fall') {\n percentGroup.style.display = 'block';\n } else if (type === 'h24_change') {\n h24Group.style.display = 'block';\n }\n\n \/\/ Clear inputs\n document.getElementById('targetPrice').value = '';\n document.getElementById('targetPercent').value = '';\n document.getElementById('h24Threshold').value = '';\n document.getElementById('alertNote').value = '';\n document.getElementById('alertFrequency').value = 'once';\n}\n\nfunction createAlert() {\n if (!currentAlertType) return;\n\n let targetValue = null;\n\n if (currentAlertType === 'price_reaches' || currentAlertType === 'price_rises_to' || currentAlertType === 'price_falls_to') {\n targetValue = parseFloat(document.getElementById('targetPrice').value);\n if (isNaN(targetValue) || targetValue \u0026lt;= 0) {\n showToast('Please enter a valid target price.', '#f6465d');\n return;\n }\n } else if (currentAlertType === 'pct_rise' || currentAlertType === 'pct_fall') {\n targetValue = parseFloat(document.getElementById('targetPercent').value);\n if (isNaN(targetValue) || targetValue \u0026lt;= 0) {\n showToast('Please enter a valid percentage.', '#f6465d');\n return;\n }\n } else if (currentAlertType === 'h24_change') {\n targetValue = parseFloat(document.getElementById('h24Threshold').value);\n if (isNaN(targetValue) || targetValue \u0026lt;= 0) {\n showToast('Please enter a valid 24h change threshold.', '#f6465d');\n return;\n }\n }\n\n const frequency = document.getElementById('alertFrequency').value;\n const note = document.getElementById('alertNote').value.trim();\n\n const alertObj = {\n id: Date.now(),\n symbol: currentSymbol, \/\/ Add symbol to alert\n type: currentAlertType,\n targetValue: targetValue,\n frequency: frequency,\n note: note,\n triggeredAt: null,\n createdAt: new Date().toLocaleString('en-US', { timeZone: 'America\/New_York' })\n };\n\n alerts.push(alertObj);\n saveAlerts(); \/\/ Save to localStorage\n showToast('Alert created successfully!', '#0ecb81');\n backToAlertTypes();\n}\n\nfunction showAlertList() {\n document.getElementById('alertTypeView').style.display = 'none';\n document.getElementById('alertForm').classList.remove('show');\n document.getElementById('alertList').classList.add('show');\n renderAlertList();\n}\n\nfunction renderAlertList() {\n const container = document.getElementById('alertListContent');\n\n if (alerts.length === 0) {\n container.innerHTML = '\u0026lt;div class=\"empty-state\"\u0026gt;No alerts yet.\u0026lt;br\u0026gt;Create one to get started.\u0026lt;\/div\u0026gt;';\n return;\n }\n\n container.innerHTML = alerts.map(a =\u0026gt; {\n let valueDisplay = '';\n if (a.type === 'price_reaches' || a.type === 'price_rises_to' || a.type === 'price_falls_to') {\n valueDisplay = '
+ Number(a.targetValue).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n } else {\n valueDisplay = Number(a.targetValue).toFixed(2) + '%';\n }\n\n const freqLabel = { once: 'Once', always: 'Always', '5min': 'Every 5 min', '15min': 'Every 15 min', '30min': 'Every 30 min', '1hour': 'Every hour' }[a.frequency] || a.frequency;\n const symbol = a.symbol || 'Unknown';\n\n return `\n \u0026lt;div class=\"alert-card\"\u0026gt;\n \u0026lt;button class=\"alert-delete\" onclick=\"deleteAlert(${a.id})\"\u0026gt;\u00d7\u0026lt;\/button\u0026gt;\n \u0026lt;div class=\"alert-type-label\"\u0026gt;${symbol} \u00b7 ${ALERT_TYPES[a.type]}\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"alert-value\"\u0026gt;${valueDisplay}\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"alert-meta\"\u0026gt;${freqLabel} \u00b7 ${a.createdAt} (NY)\u0026lt;\/div\u0026gt;\n ${a.note ? `\u0026lt;div class=\"alert-note\"\u0026gt;${escapeHTML(a.note)}\u0026lt;\/div\u0026gt;` : ''}\n \u0026lt;\/div\u0026gt;\n `;\n }).join('');\n}\n\nfunction deleteAlert(id) {\n alerts = alerts.filter(a =\u0026gt; a.id !== id);\n saveAlerts(); \/\/ Save to localStorage after deletion\n renderAlertList();\n}\n\nfunction escapeHTML(str) {\n const div = document.createElement('div');\n div.textContent = str;\n return div.innerHTML;\n}\n\nfunction showToast(msg, color) {\n const existing = document.querySelector('.alert-triggered-toast');\n if (existing) existing.remove();\n\n const toast = document.createElement('div');\n toast.className = 'alert-triggered-toast';\n toast.style.cssText = `\n background: ${color === '#f6465d' ? 'rgba(246,70,93,0.15)' : 'rgba(14,203,129,0.15)'};\n border-color: ${color === '#f6465d' ? 'rgba(246,70,93,0.5)' : 'rgba(14,203,129,0.5)'};\n color: ${color};\n `;\n toast.textContent = msg;\n document.body.appendChild(toast);\n\n setTimeout(() =\u0026gt; {\n if (toast.parentNode) toast.remove();\n }, 4000);\n}\n\n\/\/ ===== Alert Checking Engine =====\nfunction checkAlerts(currentPrice) {\n if (!currentPrice || isNaN(currentPrice)) return;\n\n const now = Date.now();\n\n \/\/ Track 24h price history\n priceHistory24h.push({ time: now, price: currentPrice });\n priceHistory24h = priceHistory24h.filter(p =\u0026gt; now - p.time \u0026lt;= 24 * 60 * 60 * 1000);\n\n alerts.forEach(alert =\u0026gt; {\n \/\/ Only check alerts for current symbol\n if (alert.symbol \u0026amp;\u0026amp; alert.symbol !== currentSymbol) return;\n\n \/\/ Cooldown check\n if (alertCooldowns[alert.id] \u0026amp;\u0026amp; now - alertCooldowns[alert.id] \u0026lt; getCooldownMs(alert.frequency)) {\n return;\n }\n\n let triggered = false;\n let triggerMsg = '';\n\n switch (alert.type) {\n case 'price_reaches':\n \/\/ Trigger when price crosses the target (both directions)\n if ((lastPrice \u0026amp;\u0026amp; lastPrice \u0026lt; alert.targetValue \u0026amp;\u0026amp; currentPrice \u0026gt;= alert.targetValue) ||\n (lastPrice \u0026amp;\u0026amp; lastPrice \u0026gt; alert.targetValue \u0026amp;\u0026amp; currentPrice \u0026lt;= alert.targetValue)) {\n triggered = true;\n triggerMsg = `${currentSymbol} has reached ${Number(alert.targetValue).toFixed(2)}`;\n }\n break;\n\n case 'price_rises_to':\n if (currentPrice \u0026gt;= alert.targetValue \u0026amp;\u0026amp; (!lastPrice || lastPrice \u0026lt; alert.targetValue)) {\n triggered = true;\n triggerMsg = `${currentSymbol} has risen to ${Number(alert.targetValue).toFixed(2)}`;\n }\n break;\n\n case 'price_falls_to':\n if (currentPrice \u0026lt;= alert.targetValue \u0026amp;\u0026amp; (!lastPrice || lastPrice \u0026gt; alert.targetValue)) {\n triggered = true;\n triggerMsg = `${currentSymbol} has fallen to ${Number(alert.targetValue).toFixed(2)}`;\n }\n break;\n\n case 'pct_rise':\n if (lastPrice \u0026amp;\u0026amp; lastPrice \u0026gt; 0) {\n const pct = ((currentPrice - lastPrice) \/ lastPrice) * 100;\n if (pct \u0026gt;= alert.targetValue) {\n triggered = true;\n triggerMsg = `${currentSymbol} up ${pct.toFixed(2)}% (target: ${alert.targetValue}%)`;\n }\n }\n break;\n\n case 'pct_fall':\n if (lastPrice \u0026amp;\u0026amp; lastPrice \u0026gt; 0) {\n const pct = ((lastPrice - currentPrice) \/ lastPrice) * 100;\n if (pct \u0026gt;= alert.targetValue) {\n triggered = true;\n triggerMsg = `${currentSymbol} down ${pct.toFixed(2)}% (target: ${alert.targetValue}%)`;\n }\n }\n break;\n\n case 'h24_change':\n if (priceHistory24h.length \u0026gt;= 2) {\n const oldest = priceHistory24h[0].price;\n if (oldest \u0026gt; 0) {\n const change = Math.abs(((currentPrice - oldest) \/ oldest) * 100);\n if (change \u0026gt;= alert.targetValue) {\n triggered = true;\n const dir = currentPrice \u0026gt;= oldest ? 'up' : 'down';\n triggerMsg = `${currentSymbol} 24h change: ${dir} ${change.toFixed(2)}% (threshold: ${alert.targetValue}%)`;\n }\n }\n }\n break;\n }\n\n if (triggered) {\n alertCooldowns[alert.id] = now;\n alert.triggeredAt = now;\n\n const noteSuffix = alert.note ? ` \u2014 ${alert.note}` : '';\n const color = currentPrice \u0026gt;= (lastPrice || currentPrice) ? '#0ecb81' : '#f6465d';\n triggerAlert(alert.type, triggerMsg + noteSuffix, color);\n }\n });\n}\n\nfunction getCooldownMs(freq) {\n switch (freq) {\n case '5min': return 5 * 60 * 1000;\n case '15min': return 15 * 60 * 1000;\n case '30min': return 30 * 60 * 1000;\n case '1hour': return 60 * 60 * 1000;\n case 'always': return 0;\n default: return 24 * 60 * 60 * 1000; \/\/ once: very long cooldown\n }\n}\n\u0026lt;\/script\u0026gt;\n\u0026lt;script\u0026gt;\n(function() {\n \/\/ ===== SPA Guard: ensure DOM ready =====\n function onReady(fn) {\n if (document.readyState !== 'loading') { fn(); return; }\n document.addEventListener('DOMContentLoaded', fn);\n }\n\n onReady(function() {\n setTimeout(initAll, 150);\n });\n\n \/\/ fallback retry\n var _initRetry = 0;\n function retryInit() {\n if (_initRetry++ \u0026gt; 20) return;\n var tb = document.getElementById('timebar');\n if (!tb || !tb.children.length) { setTimeout(retryInit, 300); return; }\n initAll();\n }\n setTimeout(retryInit, 600);\n\n \/\/ ===== State =====\n var intervalEditMode = false;\n var pinnedIntervals = [\n { label: 'Time', value: '1s' },\n { label: '1s', value: '1s' },\n { label: '15min', value: '15m' },\n { label: '1h', value: '1h' },\n { label: '4h', value: '4h' },\n { label: '1d', value: '1d' },\n { label: '1w', value: '1w' }\n ];\n var availableIntervals = [\n { label: '1min', value: '1m' },\n { label: '3min', value: '3m' },\n { label: '5min', value: '5m' },\n { label: '30min', value: '30m' },\n { label: '2h', value: '2h' },\n { label: '6h', value: '6h' },\n { label: '8h', value: '8h' },\n { label: '12h', value: '12h' },\n { label: '1M', value: '1M' }\n ];\n var currentChartType = 'candlestick';\n var mainSeries = candleSeries;\n var currentView = 'tradingview';\n\n function initAll() {\n injectCSS();\n inject1WeekButton();\n injectChartTypeButton();\n injectViewSwitcher();\n renderIntervalPicker();\n bindIntervalPickerEvents();\n bindChartTypeEvents();\n bindViewSwitcherEvents();\n bindOverlayClose();\n }\n\n \/\/ ===== Inject CSS =====\n function injectCSS() {\n var style = document.createElement('style');\n style.textContent = `\n .interval-chip { \n display:inline-flex;align-items:center;gap:4px;\n background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.08);\n color:#ccc;padding:6px 14px;border-radius:8px;font-size:13px;\n cursor:pointer;transition:0.2s;user-select:none;\n }\n .interval-chip:hover { border-color:rgba(14,203,129,0.5);color:#0ecb81;background:rgba(14,203,129,0.06); }\n .interval-chip.selected { border-color:#0ecb81;color:#0ecb81;background:rgba(14,203,129,0.1);box-shadow:0 0 8px rgba(14,203,129,0.25); }\n .interval-chip .remove-btn { display:none;margin-left:4px;color:#f6465d;cursor:pointer;font-size:14px;line-height:1; }\n .interval-chip.editing .remove-btn { display:inline; }\n .available-chip { \n display:inline-flex;align-items:center;gap:4px;\n background:rgba(255,255,255,0.02);border:1px solid rgba(255,255,255,0.05);\n color:#888;padding:6px 14px;border-radius:8px;font-size:13px;\n cursor:pointer;transition:0.2s;user-select:none;\n }\n .available-chip:hover { border-color:rgba(14,203,129,0.3);color:#0ecb81; }\n .available-chip .add-btn { display:none;color:#0ecb81;font-size:14px; }\n .available-chip.editing .add-btn { display:inline; }\n #chartTypeBtn { position:relative; }\n .chart-type-option:hover { background:rgba(14,203,129,0.08);color:#0ecb81; }\n .chart-type-option.active { color:#0ecb81; }\n .chart-type-option.active svg polyline,\n .chart-type-option.active svg polygon { stroke:#0ecb81;fill:rgba(14,203,129,0.25); }\n .view-switch-btn:hover { color:#0ecb81; }\n .view-switch-btn.active-view { background:rgba(14,203,129,0.12);color:#0ecb81; }\n #chartWrapper { position:relative; }\n `;\n document.head.appendChild(style);\n }\n\n \/\/ ===== Wrap chart in a wrapper =====\n function wrapChart() {\n var chartEl = document.getElementById('chart');\n if (!chartEl || chartEl.parentNode.id === 'chartWrapper') return;\n var wrapper = document.createElement('div');\n wrapper.id = 'chartWrapper';\n wrapper.style.position = 'relative';\n chartEl.parentNode.insertBefore(wrapper, chartEl);\n wrapper.appendChild(chartEl);\n }\n\n \/\/ ===== Inject 1Week Button + Chart Type Button =====\n function inject1WeekButton() {\n var timebar = document.getElementById('timebar');\n if (!timebar) return;\n\n \/\/ 1week button\n if (!document.getElementById('btn1week')) {\n var btn1w = document.createElement('button');\n btn1w.id = 'btn1week';\n btn1w.textContent = '1week';\n btn1w.onclick = function(e) {\n e.stopPropagation();\n toggleIntervalPicker();\n };\n btn1w.style.position = 'relative';\n \/\/ dropdown arrow indicator\n var arrow = document.createElement('span');\n arrow.textContent = ' \u25be';\n arrow.style.fontSize = '10px';\n btn1w.appendChild(arrow);\n timebar.appendChild(btn1w);\n }\n\n \/\/ chart type button\n if (!document.getElementById('chartTypeBtn')) {\n var ctBtn = document.createElement('button');\n ctBtn.id = 'chartTypeBtn';\n ctBtn.innerHTML = '\u0026lt;svg width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" style=\"vertical-align:middle;\"\u0026gt;\u0026lt;rect x=\"1\" y=\"2\" width=\"2\" height=\"8\" fill=\"#0ecb81\"\/\u0026gt;\u0026lt;rect x=\"5\" y=\"4\" width=\"2\" height=\"6\" fill=\"#0ecb81\"\/\u0026gt;\u0026lt;rect x=\"9\" y=\"1\" width=\"2\" height=\"9\" fill=\"#0ecb81\"\/\u0026gt;\u0026lt;rect x=\"13\" y=\"3\" width=\"2\" height=\"7\" fill=\"#0ecb81\"\/\u0026gt;\u0026lt;\/svg\u0026gt;';\n ctBtn.title = 'Chart Type';\n ctBtn.onclick = function(e) {\n e.stopPropagation();\n toggleChartTypeDropdown();\n };\n timebar.appendChild(ctBtn);\n }\n }\n\n \/\/ ===== Inject View Switcher below timebar =====\n function injectViewSwitcher() {\n wrapChart();\n var vs = document.getElementById('viewSwitcher');\n var timebar = document.getElementById('timebar');\n if (!vs || !timebar) return;\n \/\/ Insert viewSwitcher right after the timebar\n if (timebar.nextSibling !== vs) {\n timebar.parentNode.insertBefore(vs, timebar.nextSibling);\n }\n vs.style.display = 'flex';\n }\n\n \/\/ ===== Interval Picker =====\n function toggleIntervalPicker() {\n var overlay = document.getElementById('intervalPickerOverlay');\n if (!overlay) return;\n overlay.style.display = overlay.style.display === 'flex' ? 'none' : 'flex';\n if (overlay.style.display === 'flex') {\n intervalEditMode = false;\n updateEditButton();\n renderIntervalPicker();\n }\n }\n\n function updateEditButton() {\n var btn = document.getElementById('intervalEditBtn');\n if (!btn) return;\n btn.textContent = intervalEditMode ? 'Done' : 'Edit';\n btn.style.color = intervalEditMode ? '#0ecb81' : '#f0b90b';\n }\n\n function renderIntervalPicker() {\n var pinned = document.getElementById('pinnedIntervals');\n var avail = document.getElementById('availableIntervals');\n if (!pinned || !avail) return;\n\n pinned.innerHTML = pinnedIntervals.map(function(item, idx) {\n var cls = 'interval-chip' + (intervalEditMode ? ' editing' : '');\n var label = item.label;\n if (intervalEditMode \u0026amp;\u0026amp; idx === 0) label += ' (default)';\n return '\u0026lt;span class=\"' + cls + '\" data-pin-idx=\"' + idx + '\" onclick=\"window._pickInterval(\\'' + item.value + '\\',\\'' + item.label + '\\')\"\u0026gt;'\n + label\n + (intervalEditMode \u0026amp;\u0026amp; idx \u0026gt; 0 ? '\u0026lt;span class=\"remove-btn\" onclick=\"event.stopPropagation();window._removePinned(' + idx + ')\"\u0026gt;\u00d7\u0026lt;\/span\u0026gt;' : '')\n + '\u0026lt;\/span\u0026gt;';\n }).join('');\n\n avail.innerHTML = availableIntervals.map(function(item, idx) {\n var cls = 'available-chip' + (intervalEditMode ? ' editing' : '');\n return '\u0026lt;span class=\"' + cls + '\" data-avail-idx=\"' + idx + '\" onclick=\"window._addPinned(' + idx + ')\"\u0026gt;'\n + item.label\n + (intervalEditMode ? '\u0026lt;span class=\"add-btn\"\u0026gt;+\u0026lt;\/span\u0026gt;' : '')\n + '\u0026lt;\/span\u0026gt;';\n }).join('');\n }\n\n \/\/ expose to inline onclick\n window._pickInterval = function(value, label) {\n if (intervalEditMode) return;\n \/\/ update currentInterval and reload\n currentInterval = value;\n \/\/ highlight timebar: clear all, set 1week active if applicable\n document.querySelectorAll('#timebar button').forEach(function(b) { b.classList.remove('active'); });\n var btn1w = document.getElementById('btn1week');\n if (btn1w) {\n var displayMap = {'1s':'Time','1m':'1m','3m':'3m','5m':'5m','15m':'15m','30m':'30m','1h':'1h','2h':'2h','4h':'4h','6h':'6h','8h':'8h','12h':'12h','1d':'1d','1w':'1w','1M':'1M'};\n btn1w.textContent = displayMap[value] || label;\n btn1w.classList.add('active');\n var arrow = document.createElement('span');\n arrow.textContent = ' \u25be';\n arrow.style.fontSize = '10px';\n btn1w.appendChild(arrow);\n }\n \/\/ close overlay\n document.getElementById('intervalPickerOverlay').style.display = 'none';\n \/\/ trigger reload\n if (typeof loadHistory === 'function') loadHistory();\n };\n\n window._removePinned = function(idx) {\n if (idx \u0026lt;= 0) return; \/\/ can't remove first item\n var removed = pinnedIntervals.splice(idx, 1)[0];\n availableIntervals.push(removed);\n renderIntervalPicker();\n };\n\n window._addPinned = function(idx) {\n if (!intervalEditMode) return;\n var removed = availableIntervals.splice(idx, 1)[0];\n pinnedIntervals.push(removed);\n renderIntervalPicker();\n };\n\n function bindIntervalPickerEvents() {\n var editBtn = document.getElementById('intervalEditBtn');\n if (editBtn) {\n editBtn.addEventListener('click', function() {\n intervalEditMode = !intervalEditMode;\n updateEditButton();\n renderIntervalPicker();\n });\n }\n var addBtn = document.getElementById('customIntervalAddBtn');\n if (addBtn) {\n addBtn.addEventListener('click', function() {\n var input = document.getElementById('customIntervalInput');\n var val = (input.value || '').trim();\n if (!val) return;\n \/\/ parse: number + unit (m\/h\/d\/w\/M)\n var match = val.match(\/^(\\d+)([mhdwM]|min|hour|day|week|month)$\/i);\n var display = val;\n var apiVal = val;\n if (match) {\n var num = match[1];\n var unit = match[2].toLowerCase();\n var unitMap = {m:'m',min:'m',h:'h',hour:'h',d:'d',day:'d',w:'w',week:'w',M:'M','month':'M'};\n apiVal = num + (unitMap[unit] || 'm');\n }\n var exists = pinnedIntervals.some(function(i) { return i.value === apiVal; }) ||\n availableIntervals.some(function(i) { return i.value === apiVal; });\n if (exists) { input.value = ''; return; }\n pinnedIntervals.push({ label: display, value: apiVal });\n input.value = '';\n renderIntervalPicker();\n });\n }\n }\n\n \/\/ ===== Overlay close =====\n function bindOverlayClose() {\n var overlay = document.getElementById('intervalPickerOverlay');\n if (!overlay) return;\n overlay.addEventListener('click', function(e) {\n if (e.target === overlay) {\n overlay.style.display = 'none';\n }\n });\n }\n\n \/\/ ===== Chart Type Dropdown =====\n function toggleChartTypeDropdown() {\n var dd = document.getElementById('chartTypeDropdown');\n var btn = document.getElementById('chartTypeBtn');\n if (!dd || !btn) return;\n if (dd.style.display === 'block') { dd.style.display = 'none'; return; }\n var rect = btn.getBoundingClientRect();\n dd.style.display = 'block';\n dd.style.top = (rect.bottom + 4) + 'px';\n dd.style.left = rect.left + 'px';\n \/\/ close on outside click\n setTimeout(function() {\n document.addEventListener('click', closeChartTypeDD, { once: true });\n }, 0);\n }\n\n function closeChartTypeDD(e) {\n var dd = document.getElementById('chartTypeDropdown');\n if (dd) dd.style.display = 'none';\n }\n\n function bindChartTypeEvents() {\n var dd = document.getElementById('chartTypeDropdown');\n if (!dd) return;\n \/\/ stop propagation so clicks inside dropdown don't close it\n dd.addEventListener('click', function(e) {\n e.stopPropagation();\n });\n \/\/ close on outside click\n document.addEventListener('click', function(e) {\n if (!dd.contains(e.target) \u0026amp;\u0026amp; e.target !== document.getElementById('chartTypeBtn')) {\n dd.style.display = 'none';\n }\n });\n }\n\n function updateChartTypeBtnIcon(type) {\n var btn = document.getElementById('chartTypeBtn');\n if (!btn) return;\n var icons = {\n candlestick: '\u0026lt;svg width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" style=\"vertical-align:middle;\"\u0026gt;\u0026lt;rect x=\"1\" y=\"2\" width=\"2\" height=\"8\" fill=\"#0ecb81\"\/\u0026gt;\u0026lt;rect x=\"5\" y=\"4\" width=\"2\" height=\"6\" fill=\"#0ecb81\"\/\u0026gt;\u0026lt;rect x=\"9\" y=\"1\" width=\"2\" height=\"9\" fill=\"#0ecb81\"\/\u0026gt;\u0026lt;rect x=\"13\" y=\"3\" width=\"2\" height=\"7\" fill=\"#0ecb81\"\/\u0026gt;\u0026lt;\/svg\u0026gt;',\n line: '\u0026lt;svg width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" style=\"vertical-align:middle;\"\u0026gt;\u0026lt;polyline points=\"1,10 4,6 7,8 11,3 15,6\" fill=\"none\" stroke=\"#0ecb81\" stroke-width=\"1.5\"\/\u0026gt;\u0026lt;\/svg\u0026gt;',\n bar: '\u0026lt;svg width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" style=\"vertical-align:middle;\"\u0026gt;\u0026lt;line x1=\"2\" y1=\"9\" x2=\"2\" y2=\"3\" stroke=\"#0ecb81\" stroke-width=\"2\"\/\u0026gt;\u0026lt;line x1=\"6\" y1=\"10\" x2=\"6\" y2=\"5\" stroke=\"#0ecb81\" stroke-width=\"2\"\/\u0026gt;\u0026lt;line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"2\" stroke=\"#0ecb81\" stroke-width=\"2\"\/\u0026gt;\u0026lt;line x1=\"14\" y1=\"8\" x2=\"14\" y2=\"4\" stroke=\"#0ecb81\" stroke-width=\"2\"\/\u0026gt;\u0026lt;\/svg\u0026gt;',\n area: '\u0026lt;svg width=\"16\" height=\"12\" viewBox=\"0 0 16 12\" style=\"vertical-align:middle;\"\u0026gt;\u0026lt;polygon points=\"1,11 1,10 4,6 7,8 11,3 15,6 15,11\" fill=\"rgba(14,203,129,0.25)\" stroke=\"#0ecb81\" stroke-width=\"1\"\/\u0026gt;\u0026lt;\/svg\u0026gt;'\n };\n btn.innerHTML = icons[type] || icons.candlestick;\n }\n\n function switchChartType(type) {\n if (type === currentChartType) return;\n \/\/ remove old series\n if (mainSeries) {\n try { chart.removeSeries(mainSeries); } catch(e) {}\n }\n \/\/ add new series\n switch(type) {\n case 'candlestick':\n mainSeries = chart.addCandlestickSeries();\n break;\n case 'line':\n mainSeries = chart.addLineSeries({ color: '#0ecb81', lineWidth: 2 });\n break;\n case 'bar':\n mainSeries = chart.addBarSeries({ upColor: '#0ecb81', downColor: '#f6465d' });\n break;\n case 'area':\n mainSeries = chart.addAreaSeries({ \n lineColor: '#0ecb81', \n topColor: 'rgba(14,203,129,0.3)', \n bottomColor: 'rgba(14,203,129,0.02)' \n });\n break;\n }\n currentChartType = type;\n \/\/ update global reference for other code\n window._candleSeriesRef = mainSeries;\n \/\/ update button icon\n updateChartTypeBtnIcon(type);\n \/\/ update dropdown option highlights\n document.querySelectorAll('.chart-type-option').forEach(function(o) {\n o.classList.remove('active');\n var sv = o.querySelector('span:last-child');\n if (sv \u0026amp;\u0026amp; sv.textContent === '\u2714') sv.textContent = '';\n });\n var activeOpt = document.querySelector('.chart-type-option[data-type=\"' + type + '\"]');\n if (activeOpt) {\n activeOpt.classList.add('active');\n var last = activeOpt.querySelector('span:last-child');\n if (last \u0026amp;\u0026amp; !last.textContent) last.textContent = '\u2714';\n }\n \/\/ reload data in new format\n loadHistoryWithType();\n }\n window._switchChartType = switchChartType;\n\n \/\/ override loadHistory to respect chart type\n var _origLoadHistory = loadHistory;\n loadHistory = function() {\n loadHistoryWithType();\n };\n\n function loadHistoryWithType() {\n if (currentSymbol === 'XAUUSD') {\n var candles = [];\n var base = 3350;\n var timeStep = getTimeStep(currentInterval);\n for (var i = 0; i \u0026lt; 300; i++) {\n var open = base;\n var close = open + (Math.random() - 0.5) * 3;\n var high = Math.max(open, close) + Math.random() * 1.5;\n var low = Math.min(open, close) - Math.random() * 1.5;\n candles.push({ time: Math.floor(Date.now()\/1000) - (300 - i) * timeStep, open: open, high: high, low: low, close: close });\n base = close;\n }\n setSeriesData(candles);\n var lastCandle = candles[candles.length - 1];\n document.getElementById('price').innerHTML = Number(lastCandle.close).toLocaleString(undefined, {minimumFractionDigits:2, maximumFractionDigits:2});\n lastPrice = Number(lastCandle.close);\n startWS();\n return;\n }\n \/\/ Binance\n fetch('https:\/\/api.binance.us\/api\/v3\/klines?symbol=' + currentSymbol + '\u0026amp;interval=' + currentInterval + '\u0026amp;limit=300')\n .then(function(r) { return r.json(); })\n .then(function(data) {\n var candles = data.map(function(d) { return { time: d[0]\/1000, open: +d[1], high: +d[2], low: +d[3], close: +d[4] }; });\n setSeriesData(candles);\n startWS();\n var lastCandle = candles[candles.length - 1];\n document.getElementById('price').innerHTML = Number(lastCandle.close).toLocaleString(undefined, {minimumFractionDigits:2, maximumFractionDigits:2});\n lastPrice = Number(lastCandle.close);\n });\n }\n\n function getTimeStep(interval) {\n var map = {'1s':1,'1m':60,'3m':180,'5m':300,'15m':900,'30m':1800,'1h':3600,'2h':7200,'4h':14400,'6h':21600,'8h':28800,'12h':43200,'1d':86400,'1w':604800,'1M':2592000};\n return map[interval] || 60;\n }\n\n function setSeriesData(candles) {\n if (currentChartType === 'candlestick' || currentChartType === 'bar') {\n mainSeries.setData(candles);\n } else if (currentChartType === 'line') {\n var lineData = candles.map(function(c) { return { time: c.time, value: c.close }; });\n mainSeries.setData(lineData);\n } else if (currentChartType === 'area') {\n var areaData = candles.map(function(c) { return { time: c.time, value: c.close }; });\n mainSeries.setData(areaData);\n }\n }\n\n \/\/ ===== View Switcher =====\n function bindViewSwitcherEvents() {\n var buttons = document.querySelectorAll('.view-switch-btn');\n buttons.forEach(function(btn) {\n btn.onclick = function(e) {\n e.stopPropagation();\n var view = btn.getAttribute('data-view');\n if (view === currentView) return;\n buttons.forEach(function(b) { b.classList.remove('active-view'); });\n btn.classList.add('active-view');\n currentView = view;\n switchView(view);\n };\n });\n }\n\n function switchView(view) {\n var chartEl = document.getElementById('chart');\n var depthEl = document.getElementById('depthChart');\n if (!chartEl) return;\n\n if (view === 'depth') {\n \/\/ hide main chart, show depth\n chartEl.style.display = 'none';\n if (!depthEl) {\n depthEl = document.createElement('div');\n depthEl.id = 'depthChart';\n depthEl.style.height = '600px';\n var chartParent = document.getElementById('chartWrapper') || chartEl.parentNode;\n chartParent.appendChild(depthEl);\n initDepthChart();\n }\n depthEl.style.display = 'block';\n } else {\n chartEl.style.display = 'block';\n if (depthEl) depthEl.style.display = 'none';\n }\n }\n\n var depthChart = null;\n function initDepthChart() {\n var el = document.getElementById('depthChart');\n if (!el || depthChart) return;\n depthChart = LightweightCharts.createChart(el, {\n layout: { background: { color: 'transparent' }, textColor: '#DDD' },\n grid: { vertLines: { color: 'rgba(255,255,255,0.05)' }, horzLines: { color: 'rgba(255,255,255,0.05)' } },\n timeScale: { visible: false },\n rightPriceScale: { visible: true }\n });\n \/\/ bid area (green)\n var bidSeries = depthChart.addAreaSeries({\n lineColor: 'rgba(14,203,129,0)',\n topColor: 'rgba(14,203,129,0.25)',\n bottomColor: 'rgba(14,203,129,0)'\n });\n \/\/ ask area (red)\n var askSeries = depthChart.addAreaSeries({\n lineColor: 'rgba(246,70,93,0)',\n topColor: 'rgba(246,70,93,0)',\n bottomColor: 'rgba(246,70,93,0.25)'\n });\n \/\/ generate mock depth\n var midPrice = lastPrice || 3350;\n var bidData = [], askData = [];\n for (var i = 0; i \u0026lt; 50; i++) {\n var price = midPrice - i * (midPrice * 0.0002);\n bidData.push({ time: i, value: price + i * 0.8 + Math.random() * 2 });\n }\n for (var j = 0; j \u0026lt; 50; j++) {\n var price2 = midPrice + j * (midPrice * 0.0002);\n askData.push({ time: 50 + j, value: price2 + (50 - j) * 0.8 + Math.random() * 2 });\n }\n bidSeries.setData(bidData);\n askSeries.setData(askData);\n \/\/ refresh depth every 3s\n setInterval(function() {\n if (currentView !== 'depth') return;\n var mp = lastPrice || 3350;\n bidData = []; askData = [];\n for (var i = 0; i \u0026lt; 50; i++) {\n var p = mp - i * (mp * 0.0002);\n bidData.push({ time: i, value: p + i * 0.8 + Math.random() * 2 });\n }\n for (var j = 0; j \u0026lt; 50; j++) {\n var p2 = mp + j * (mp * 0.0002);\n askData.push({ time: 50 + j, value: p2 + (50 - j) * 0.8 + Math.random() * 2 });\n }\n bidSeries.setData(bidData);\n askSeries.setData(askData);\n }, 3000);\n }\n\n \/\/ ===== adjust chart resize =====\n var _origResize = chart.resize;\n chart.resize = function(w, h) {\n _origResize.call(chart, w, h);\n if (depthChart \u0026amp;\u0026amp; currentView === 'depth') {\n depthChart.resize(w, h);\n }\n };\n\n \/\/ ===== Override startWS to use mainSeries =====\n startWS = function() {\n if (ws) { ws.onclose = null; ws.close(); }\n clearTimeout(reconnectTimeout);\n clearInterval(reconnectTimeout);\n\n if (currentSymbol === 'XAUUSD') {\n async function updateGold() {\n try {\n var res = await fetch('https:\/\/api.gold-api.com\/price\/XAU');\n var data = await res.json();\n if (!data.price) return;\n var price = Number(data.price);\n var priceEl = document.getElementById('price');\n priceEl.innerHTML = price.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n priceEl.classList.remove('up', 'down');\n if (lastPrice !== null) {\n if (price \u0026gt; lastPrice) priceEl.classList.add('up');\n else if (price \u0026lt; lastPrice) priceEl.classList.add('down');\n }\n var now = Math.floor(Date.now() \/ 60) * 60;\n var prev = lastPrice || price;\n \/\/ use mainSeries for update\n if (currentChartType === 'line') {\n mainSeries.update({ time: now, value: price });\n } else if (currentChartType === 'area') {\n mainSeries.update({ time: now, value: price });\n } else {\n mainSeries.update({ time: now, open: prev, high: Math.max(prev, price), low: Math.min(prev, price), close: price });\n }\n if (typeof checkAlerts === 'function') checkAlerts(price);\n lastPrice = price;\n } catch(err) { console.log('XAU error', err); }\n }\n updateGold();\n ws = { close: function(){}, onclose: null };\n reconnectTimeout = setInterval(updateGold, 3000);\n return;\n }\n\n ws = new WebSocket('wss:\/\/stream.binance.us:9443\/ws\/' + currentSymbol.toLowerCase() + '@trade');\n ws.onopen = function() { console.log('WS Connected'); };\n ws.onmessage = function(e) {\n var data = JSON.parse(e.data);\n var price = parseFloat(data.p);\n if (isNaN(price)) return;\n var priceEl = document.getElementById('price');\n priceEl.innerHTML = price.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n priceEl.classList.remove('up', 'down');\n if (lastPrice !== null) {\n if (price \u0026gt; lastPrice) priceEl.classList.add('up');\n else if (price \u0026lt; lastPrice) priceEl.classList.add('down');\n }\n if (typeof checkAlerts === 'function') checkAlerts(price);\n lastPrice = price;\n };\n ws.onerror = function(err) { console.log('WS Error', err); };\n ws.onclose = function() { reconnectTimeout = setTimeout(function() { startWS(); }, 2000); };\n };\n\n \/\/ ===== SPA re-init guard =====\n window._intervalPickerInited = true;\n window._chartExtInited = true;\n\n})();\n\u0026lt;\/script\u0026gt;\n\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304091}"}]}}}],"inlineLayout":"12"}}},{"type":"BlockComponentItem","id":"8b647172-5cc0-49eb-a6c7-a9609cfb2c09","name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"99313593-2ac1-44f2-85f6-bebef8cf1e89","items":[{"type":"BlockComponentItem","id":"93eabc65-4323-4f3d-b09b-b0b20f10b6eb","name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"f31eb5bd-22e2-46df-aff2-9ab6b1303ec1","items":[{"type":"HtmlComponent","id":27292886,"defaultValue":false,"value":"\u0026lt;!DOCTYPE html\u0026gt;\n\u0026lt;html lang=\"en\"\u0026gt;\n\u0026lt;head\u0026gt;\n\u0026lt;meta charset=\"UTF-8\"\u0026gt;\n\u0026lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u0026gt;\n\u0026lt;title\u0026gt;Crypto Terminal\u0026lt;\/title\u0026gt;\n\u0026lt;style\u0026gt;\n*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\n\nhtml,body{\n height:100%;width:100%;overflow:hidden\n}\n\nbody{\n background:transparent;\n font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Inter',Roboto,sans-serif;\n color:#fff\n}\n\n.container{display:flex;gap:8px;padding:8px;height:100%;width:100%;margin:0}\n\n\/* \u2500\u2500 Panels \u2500\u2500 *\/\n.panel-left{\n flex:0 0 58%;min-width:0;display:flex;flex-direction:column;\n background:transparent;\n border-radius:12px;border:1px solid rgba(255,255,255,0.06);overflow:hidden\n}\n.panel-right{\n flex:1;min-width:0;display:flex;flex-direction:column;\n background:transparent;\n border-radius:12px;border:1px solid rgba(255,255,255,0.06);overflow:hidden\n}\n\n\/* \u2500\u2500 Search \u2500\u2500 *\/\n.search-wrap{padding:10px 12px 6px;flex-shrink:0}\n.search-box{\n display:flex;align-items:center;background:rgba(255,255,255,0.08);\n border-radius:999px;padding:0 14px;height:36px;\n border:1px solid rgba(255,255,255,0.06);transition:border-color .2s\n}\n.search-box:focus-within{border-color:rgba(255,255,255,0.2)}\n.search-box svg{flex-shrink:0;width:16px;height:16px;opacity:.45}\n.search-box input{\n flex:1;background:none;border:none;outline:none;color:#fff;font-size:13px;padding:0 8px;font-family:inherit\n}\n.search-box input::placeholder{color:rgba(255,255,255,0.35)}\n.search-clear{\n flex-shrink:0;width:20px;height:20px;border-radius:50%;border:none;\n background:rgba(255,255,255,0.12);color:rgba(255,255,255,0.7);cursor:pointer;\n font-size:11px;display:none;align-items:center;justify-content:center;line-height:1\n}\n.search-clear.visible{display:flex}\n.search-clear:hover{background:rgba(255,255,255,0.2)}\n\n\/* \u2500\u2500 Category Tabs \u2500\u2500 *\/\n.cat-tabs{\n display:flex;gap:0;padding:0 12px;flex-shrink:0;overflow-x:auto;scrollbar-width:none;\n border-bottom:1px solid rgba(255,255,255,0.05)\n}\n.cat-tabs::-webkit-scrollbar{display:none}\n.cat-tab{\n flex-shrink:0;padding:8px 14px;font-size:13px;font-weight:500;\n color:rgba(255,255,255,0.45);cursor:pointer;border:none;background:none;\n border-bottom:2px solid transparent;transition:all .2s;font-family:inherit;white-space:nowrap\n}\n.cat-tab:hover{color:rgba(255,255,255,0.7)}\n.cat-tab.active{color:#fff;border-bottom-color:#fff}\n\n\/* \u2500\u2500 Sub Tabs \u2500\u2500 *\/\n.sub-tabs{\n display:flex;gap:6px;padding:8px 12px;flex-shrink:0;overflow-x:auto;scrollbar-width:none\n}\n.sub-tabs::-webkit-scrollbar{display:none}\n.sub-tab{\n flex-shrink:0;padding:5px 14px;font-size:12px;font-weight:500;\n color:rgba(255,255,255,0.5);cursor:pointer;border:none;\n background:rgba(255,255,255,0.06);border-radius:999px;font-family:inherit;transition:all .2s\n}\n.sub-tab:hover{background:rgba(255,255,255,0.1);color:rgba(255,255,255,0.8)}\n.sub-tab.active{background:rgba(255,255,255,0.14);color:#fff}\n\n\/* \u2500\u2500 Token Header \u2500\u2500 *\/\n.token-header{\n display:flex;align-items:center;padding:8px 12px 4px;flex-shrink:0;\n border-bottom:1px solid rgba(255,255,255,0.05);font-size:11px;\n color:rgba(255,255,255,0.4);font-weight:500\n}\n.col-name{flex:1;display:flex;align-items:center;gap:3px;cursor:pointer}\n.col-price{width:110px;text-align:right;display:flex;align-items:center;justify-content:flex-end;gap:3px;cursor:pointer}\n.col-change{width:85px;text-align:right;display:flex;align-items:center;justify-content:flex-end;gap:3px;cursor:pointer}\n.col-name:hover,.col-price:hover,.col-change:hover{color:rgba(255,255,255,0.7)}\n.sort-arrow{font-size:10px;opacity:.5}\n.sort-arrow.active{opacity:1;color:#fff}\n\n\/* \u2500\u2500 Token List \u2500\u2500 *\/\n.token-list-wrap{\n flex:1;overflow-y:auto;overflow-x:hidden;\n scrollbar-width:thin;scrollbar-color:rgba(255,255,255,0.08) transparent\n}\n.token-list-wrap::-webkit-scrollbar{width:4px}\n.token-list-wrap::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.08);border-radius:4px}\n\n.token-row{\n display:flex;align-items:center;padding:8px 12px;cursor:pointer;\n transition:background .15s;border-bottom:1px solid rgba(255,255,255,0.02)\n}\n.token-row:hover{background:rgba(255,255,255,0.04)}\n.star-btn{\n flex-shrink:0;width:22px;height:22px;display:flex;align-items:center;justify-content:center;\n font-size:15px;cursor:pointer;color:rgba(255,255,255,0.22);transition:color .2s;\n background:none;border:none;font-family:inherit;margin-right:2px;padding:0\n}\n.star-btn.faved{color:#f5a623}\n.star-btn:hover{color:rgba(255,255,255,0.55)}\n\n.token-icon-wrap{\n flex-shrink:0;width:28px;height:28px;border-radius:50%;background:#252930;\n display:flex;align-items:center;justify-content:center;margin-right:8px;overflow:hidden\n}\n.token-icon-wrap img{width:18px;height:18px;object-fit:contain}\n\n.token-info{flex:1;min-width:0}\n.token-name{font-size:13px;font-weight:500;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.token-pair{font-size:11px;color:rgba(255,255,255,0.35);white-space:nowrap}\n.token-price{\n width:110px;text-align:right;font-size:13px;font-weight:500;\n font-variant-numeric:tabular-nums;font-family:'SF Mono','JetBrains Mono','Consolas',monospace;color:#fff\n}\n.token-change{\n width:85px;text-align:right;font-size:12px;font-weight:500;\n font-variant-numeric:tabular-nums;font-family:'SF Mono','JetBrains Mono','Consolas',monospace\n}\n.token-change.up{color:#00e676}\n.token-change.down{color:#ff4d4f}\n.token-change.neutral{color:rgba(255,255,255,0.4)}\n.token-badge{\n display:inline-block;font-size:10px;padding:1px 5px;border-radius:999px;\n background:rgba(255,255,255,0.1);color:rgba(255,255,255,0.5);margin-left:4px;font-weight:600\n}\n\n\/* \u2500\u2500 Right Panel \u2500\u2500 *\/\n.trade-header{\n display:flex;align-items:center;gap:8px;padding:10px 12px;flex-shrink:0;\n border-bottom:1px solid rgba(255,255,255,0.05)\n}\n.trade-title{font-size:13px;font-weight:600;color:#fff;white-space:nowrap}\n.trade-pair-select{\n appearance:none;-webkit-appearance:none;\n background:rgba(255,255,255,0.08);border:1px solid rgba(255,255,255,0.1);\n border-radius:999px;color:#fff;font-size:12px;padding:5px 28px 5px 12px;\n cursor:pointer;font-family:inherit;outline:none;transition:border-color .2s;\n background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='rgba(255,255,255,0.4)'\/%3E%3C\/svg%3E\");\n background-repeat:no-repeat;background-position:right 10px center\n}\n.trade-pair-select:hover{border-color:rgba(255,255,255,0.25)}\n.trade-pair-select:focus{border-color:rgba(255,255,255,0.35)}\n.trade-pair-select option{background:#1a1a1a;color:#fff}\n.trade-menu{\n width:28px;height:28px;border-radius:50%;border:none;background:rgba(255,255,255,0.06);\n color:rgba(255,255,255,0.5);cursor:pointer;font-size:16px;display:flex;\n align-items:center;justify-content:center;transition:background .2s;margin-left:auto\n}\n.trade-menu:hover{background:rgba(255,255,255,0.12)}\n\n.trade-cols{\n display:flex;padding:6px 12px 4px;flex-shrink:0;font-size:10px;font-weight:500;\n color:rgba(255,255,255,0.35);border-bottom:1px solid rgba(255,255,255,0.04)\n}\n.tc-price{flex:1}.tc-qty{width:90px;text-align:right}.tc-time{width:72px;text-align:right}\n\n.trade-list-wrap{\n flex:1;overflow-y:auto;overflow-x:hidden;\n scrollbar-width:thin;scrollbar-color:rgba(255,255,255,0.06) transparent\n}\n.trade-list-wrap::-webkit-scrollbar{width:4px}\n.trade-list-wrap::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.06);border-radius:4px}\n\n.trade-row{\n display:flex;align-items:center;padding:3px 12px;font-size:12px;\n font-family:'SF Mono','JetBrains Mono','Consolas',monospace;\n font-variant-numeric:tabular-nums;transition:background .15s;\n border-bottom:1px solid rgba(255,255,255,0.015)\n}\n.trade-row:hover{background:rgba(255,255,255,0.03)}\n.trade-row .t-price{flex:1}\n.trade-row .t-qty{width:90px;text-align:right;color:rgba(255,255,255,0.5)}\n.trade-row .t-time{width:72px;text-align:right;color:rgba(255,255,255,0.4)}\n.trade-row.buy .t-price{color:#00e676}\n.trade-row.sell .t-price{color:#ff4d4f}\n\n\/* \u2500\u2500 Status \u2500\u2500 *\/\n.status-bar{\n flex-shrink:0;padding:4px 12px;font-size:10px;color:rgba(255,255,255,0.25);\n display:flex;justify-content:space-between;border-top:1px solid rgba(255,255,255,0.04)\n}\n.status-dot{\n display:inline-block;width:6px;height:6px;border-radius:50%;\n background:#00e676;margin-right:4px;animation:pulse 2s infinite\n}\n@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}\n\n.no-results{\n display:flex;align-items:center;justify-content:center;\n padding:40px 20px;color:rgba(255,255,255,0.3);font-size:13px\n}\n\n\/* \u2500\u2500 Skeleton \u2500\u2500 *\/\n@keyframes shimmer{0%{background-position:-200px 0}100%{background-position:200px 0}}\n.skeleton{\n background:linear-gradient(90deg,rgba(255,255,255,0.04) 25%,rgba(255,255,255,0.08) 50%,rgba(255,255,255,0.04) 75%);\n background-size:400px 100%;animation:shimmer 1.5s infinite;border-radius:4px\n}\n\n\/* \u2500\u2500 Responsive \u2500\u2500 *\/\n@media(max-width:768px){\n .container{flex-direction:column;padding:4px;gap:6px}\n .panel-left{flex:0 0 55%;border-radius:10px}\n .panel-right{flex:1;border-radius:10px}\n .col-price{width:95px}.col-change{width:75px}\n .token-price{width:95px;font-size:12px}.token-change{width:75px;font-size:11px}\n .tc-qty{width:80px}.tc-time{width:65px}\n .trade-row .t-qty{width:80px}.trade-row .t-time{width:65px}\n .cat-tab{padding:7px 10px;font-size:12px}.sub-tab{padding:4px 10px;font-size:11px}\n}\n@media(max-width:400px){\n .container{padding:2px;gap:4px}\n .panel-left{flex:0 0 50%;border-radius:8px}.panel-right{border-radius:8px}\n .search-wrap{padding:8px 10px 4px}\n .cat-tabs,.sub-tabs{padding:0 10px}\n .token-header{padding:6px 10px 3px;font-size:10px}\n .token-row{padding:6px 10px}\n .col-price{width:80px}.col-change{width:65px}\n .token-price{width:80px;font-size:11px}.token-change{width:65px;font-size:10px}\n .tc-qty{width:65px}.tc-time{width:58px}\n .trade-row .t-qty{width:65px}.trade-row .t-time{width:58px}\n .trade-row{padding:2px 10px;font-size:11px}\n}\n\u0026lt;\/style\u0026gt;\n\u0026lt;\/head\u0026gt;\n\u0026lt;body\u0026gt;\n\n\u0026lt;div class=\"container\"\u0026gt;\n\n\u0026lt;!-- \u2550\u2550\u2550\u2550\u2550 LEFT PANEL \u2550\u2550\u2550\u2550\u2550 --\u0026gt;\n\u0026lt;div class=\"panel-left\"\u0026gt;\n \u0026lt;div class=\"search-wrap\"\u0026gt;\n \u0026lt;div class=\"search-box\"\u0026gt;\n \u0026lt;svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\u0026gt;\u0026lt;circle cx=\"11\" cy=\"11\" r=\"8\"\/\u0026gt;\u0026lt;line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/\u0026gt;\u0026lt;\/svg\u0026gt;\n \u0026lt;input type=\"text\" id=\"searchInput\" placeholder=\"Search tokens...\" autocomplete=\"off\"\u0026gt;\n \u0026lt;button class=\"search-clear\" id=\"searchClear\" title=\"Clear\"\u0026gt;\u0026amp;#10005;\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"cat-tabs\" id=\"catTabs\"\u0026gt;\n \u0026lt;button class=\"cat-tab active\" data-cat=\"all\"\u0026gt;\u0026amp;#9734; All\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"cat-tab\" data-cat=\"major\"\u0026gt;Major\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"cat-tab\" data-cat=\"new\"\u0026gt;New\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"cat-tab\" data-cat=\"commodities\"\u0026gt;Commodities\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"cat-tab\" data-cat=\"solana\"\u0026gt;Solana\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"cat-tab\" data-cat=\"rwa\"\u0026gt;RWA\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"cat-tab\" data-cat=\"defi\"\u0026gt;DeFi\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"cat-tab\" data-cat=\"meme\"\u0026gt;Meme\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"sub-tabs\" id=\"subTabs\"\u0026gt;\n \u0026lt;button class=\"sub-tab active\" data-sub=\"USDC\"\u0026gt;USDC\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"sub-tab\" data-sub=\"USDT\"\u0026gt;USDT\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"sub-tab\" data-sub=\"USD\"\u0026gt;USD\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"sub-tab\" data-sub=\"BNB\"\u0026gt;BNB\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"sub-tab\" data-sub=\"BTC\"\u0026gt;BTC\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"sub-tab\" data-sub=\"ETH\"\u0026gt;ETH\u0026lt;\/button\u0026gt;\n \u0026lt;button class=\"sub-tab\" data-sub=\"ALTS\"\u0026gt;ALTS \u0026amp;#9662;\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"token-header\"\u0026gt;\n \u0026lt;div class=\"col-name\" id=\"sortName\"\u0026gt;Name \u0026lt;span class=\"sort-arrow\"\u0026gt;\u0026amp;#8597;\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"col-price\" id=\"sortPrice\"\u0026gt;Price \u0026lt;span class=\"sort-arrow\"\u0026gt;\u0026amp;#8597;\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"col-change\" id=\"sortChange\"\u0026gt;24h Change \u0026lt;span class=\"sort-arrow\"\u0026gt;\u0026amp;#8597;\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"token-list-wrap\" id=\"tokenList\"\u0026gt;\u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"status-bar\"\u0026gt;\n \u0026lt;span\u0026gt;\u0026lt;span class=\"status-dot\"\u0026gt;\u0026lt;\/span\u0026gt;Live \u0026amp;middot; CoinGecko\u0026lt;\/span\u0026gt;\n \u0026lt;span id=\"updateTime\"\u0026gt;Loading...\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;!-- \u2550\u2550\u2550\u2550\u2550 RIGHT PANEL \u2550\u2550\u2550\u2550\u2550 --\u0026gt;\n\u0026lt;div class=\"panel-right\"\u0026gt;\n \u0026lt;div class=\"trade-header\"\u0026gt;\n \u0026lt;span class=\"trade-title\"\u0026gt;Latest Trades\u0026lt;\/span\u0026gt;\n \u0026lt;select class=\"trade-pair-select\" id=\"tradePairSelect\"\u0026gt;\n \u0026lt;option value=\"BTC\/USDT\"\u0026gt;BTC\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ETH\/USDT\"\u0026gt;ETH\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"SOL\/USDT\"\u0026gt;SOL\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"BNB\/USDT\"\u0026gt;BNB\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"XRP\/USDT\"\u0026gt;XRP\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"ADA\/USDT\"\u0026gt;ADA\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"DOGE\/USDT\"\u0026gt;DOGE\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"AVAX\/USDT\"\u0026gt;AVAX\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"DOT\/USDT\"\u0026gt;DOT\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;option value=\"LINK\/USDT\"\u0026gt;LINK\/USDT\u0026lt;\/option\u0026gt;\n \u0026lt;\/select\u0026gt;\n \u0026lt;button class=\"trade-menu\" title=\"More\"\u0026gt;\u0026amp;#8942;\u0026lt;\/button\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"trade-cols\"\u0026gt;\n \u0026lt;div class=\"tc-price\"\u0026gt;Price (USDT)\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"tc-qty\"\u0026gt;Qty\u0026lt;\/div\u0026gt;\n \u0026lt;div class=\"tc-time\"\u0026gt;Time\u0026lt;\/div\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"trade-list-wrap\" id=\"tradeList\"\u0026gt;\u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"status-bar\"\u0026gt;\n \u0026lt;span id=\"tradePairLabel\"\u0026gt;BTC\/USDT\u0026lt;\/span\u0026gt;\n \u0026lt;span id=\"basePriceRef\"\u0026gt;--\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;\/div\u0026gt;\n\n\u0026lt;script\u0026gt;\n(function(){\n \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n \/\/ ALL TOKENS (36 total \u2014 covers Major, DeFi, Solana, RWA, Meme, Commodities, New)\n \/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n var TOKENS = [\n \/\/ Major\n {symbol:'BTC', cgId:'bitcoin', cat:'major'},\n {symbol:'ETH', cgId:'ethereum', cat:'major'},\n {symbol:'BNB', cgId:'binancecoin', cat:'major'},\n {symbol:'XRP', cgId:'ripple', cat:'major'},\n {symbol:'SOL', cgId:'solana', cat:'major'},\n {symbol:'ADA', cgId:'cardano', cat:'major'},\n {symbol:'DOGE', cgId:'dogecoin', cat:'major'},\n {symbol:'DOT', cgId:'polkadot', cat:'major'},\n {symbol:'AVAX', cgId:'avalanche-2', cat:'major'},\n {symbol:'TRX', cgId:'tron', cat:'major'},\n {symbol:'TON', cgId:'the-open-network', cat:'major'},\n {symbol:'NEAR', cgId:'near', cat:'major'},\n {symbol:'SUI', cgId:'sui', cat:'major'},\n {symbol:'APT', cgId:'aptos', cat:'major'},\n \/\/ DeFi\n {symbol:'AAVE', cgId:'aave', cat:'defi'},\n {symbol:'UNI', cgId:'uniswap', cat:'defi'},\n {symbol:'LINK', cgId:'chainlink', cat:'defi'},\n {symbol:'ARB', cgId:'arbitrum', cat:'defi'},\n {symbol:'OP', cgId:'optimism', cat:'defi'},\n {symbol:'LDO', cgId:'lido-dao', cat:'defi'},\n {symbol:'CRV', cgId:'curve-dao-token', cat:'defi'},\n {symbol:'MKR', cgId:'maker', cat:'defi'},\n {symbol:'GRT', cgId:'the-graph', cat:'defi'},\n {symbol:'1INCH', cgId:'1inch', cat:'defi'},\n {symbol:'SNX', cgId:'havven', cat:'defi'},\n \/\/ Solana ecosystem\n {symbol:'JUP', cgId:'jupiter-exchange-solana', cat:'solana'},\n {symbol:'RNDR', cgId:'render-token', cat:'solana'},\n {symbol:'PYTH', cgId:'pyth-network', cat:'solana'},\n \/\/ RWA\n {symbol:'ONDO', cgId:'ondo-finance', cat:'rwa'},\n {symbol:'MANTRA',cgId:'mantra-dao', cat:'rwa'},\n \/\/ Meme\n {symbol:'SHIB', cgId:'shiba-inu', cat:'meme'},\n {symbol:'PEPE', cgId:'pepe', cat:'meme'},\n {symbol:'WIF', cgId:'dogwifcoin', cat:'meme'},\n \/\/ Commodities \/ Gold\n {symbol:'XAUUSD',cgId:'pax-gold', cat:'commodities', label:'Gold'},\n {symbol:'XAUT', cgId:'tether-gold', cat:'commodities'},\n \/\/ New\n {symbol:'PENDLE',cgId:'pendle', cat:'new'},\n {symbol:'ENA', cgId:'ethena', cat:'new'},\n ];\n\n \/\/ \u2500\u2500 Trade pairs \u2500\u2500\n var TRADE_PAIRS=[\n {label:'BTC\/USDT', base:'BTC', cgId:'bitcoin', qtyScale:0.2},\n {label:'ETH\/USDT', base:'ETH', cgId:'ethereum', qtyScale:10},\n {label:'SOL\/USDT', base:'SOL', cgId:'solana', qtyScale:500},\n {label:'BNB\/USDT', base:'BNB', cgId:'binancecoin', qtyScale:2},\n {label:'XRP\/USDT', base:'XRP', cgId:'ripple', qtyScale:20000},\n {label:'ADA\/USDT', base:'ADA', cgId:'cardano', qtyScale:30000},\n {label:'DOGE\/USDT',base:'DOGE',cgId:'dogecoin', qtyScale:100000},\n {label:'AVAX\/USDT',base:'AVAX',cgId:'avalanche-2', qtyScale:50},\n {label:'DOT\/USDT', base:'DOT', cgId:'polkadot', qtyScale:500},\n {label:'LINK\/USDT',base:'LINK',cgId:'chainlink', qtyScale:500}\n ];\n\n \/\/ \u2500\u2500 State \u2500\u2500\n var coinData={},basePrices={},favorites=new Set();\n var activeCat='all',activeSub='USDC',sortKey=null,sortDir=1;\n var activePair=TRADE_PAIRS[0],trades=[];\n\n \/\/ \u2500\u2500 Format \u2500\u2500\n function fmtUSD(n){\n if(n==null)return'--';\n if(n\u0026gt;=1000)return n.toLocaleString('en-US',{minimumFractionDigits:2,maximumFractionDigits:2});\n if(n\u0026gt;=1)return n.toLocaleString('en-US',{minimumFractionDigits:2,maximumFractionDigits:4});\n if(n\u0026gt;=0.01)return n.toLocaleString('en-US',{minimumFractionDigits:4,maximumFractionDigits:6});\n return n.toLocaleString('en-US',{minimumFractionDigits:6,maximumFractionDigits:8});\n }\n function fmtChange(n){if(n==null)return'--';return(n\u0026gt;=0?'+':'')+n.toFixed(2)+'%';}\n function fmtPrice(n){\n if(n==null||n\u0026lt;=0)return'--';\n if(n\u0026gt;=10000)return n.toLocaleString('en-US',{minimumFractionDigits:2,maximumFractionDigits:2});\n if(n\u0026gt;=1)return n.toLocaleString('en-US',{minimumFractionDigits:2,maximumFractionDigits:4});\n return n.toLocaleString('en-US',{minimumFractionDigits:4,maximumFractionDigits:8});\n }\n function fmtQty(n,price){\n if(price\u0026gt;=10000)return n.toFixed(5);\n if(price\u0026gt;=1000)return n.toFixed(4);\n if(price\u0026gt;=100)return n.toFixed(3);\n if(price\u0026gt;=1)return n.toFixed(2);\n return n.toFixed(0);\n }\n function fmtNow(){var d=new Date();return[d.getHours(),d.getMinutes(),d.getSeconds()].map(function(v){return String(v).padStart(2,'0')}).join(':');}\n\n \/\/ \u2500\u2500 Icons \u2500\u2500\n function iconHTML(sym,cgId){\n var url=coinData[cgId]?coinData[cgId].image:'';\n if(!url)return'\u0026lt;div class=\"token-icon-wrap\"\u0026gt;\u0026lt;span style=\"font-size:11px;font-weight:700;color:rgba(255,255,255,0.8)\"\u0026gt;'+sym.slice(0,2)+'\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;';\n return'\u0026lt;div class=\"token-icon-wrap\"\u0026gt;\u0026lt;img src=\"'+url+'\" alt=\"'+sym+'\" loading=\"lazy\" onerror=\"this.style.display=\\'none\\';this.nextElementSibling.style.display=\\'flex\\';\" onload=\"this.style.display=\\'block\\';\"\u0026gt;\u0026lt;span style=\"display:none;font-size:11px;font-weight:700;color:rgba(255,255,255,0.8)\"\u0026gt;'+sym.slice(0,2)+'\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;';\n }\n\n \/\/ \u2500\u2500 Render Token List \u2500\u2500\n function filteredTokens(){\n var q=document.getElementById('searchInput').value.toLowerCase().trim();\n var list=TOKENS.filter(function(t){\n if(activeCat!=='all'\u0026amp;\u0026amp;t.cat!==activeCat)return false;\n if(q\u0026amp;\u0026amp;t.symbol.toLowerCase().indexOf(q)===-1\u0026amp;\u0026amp;(t.label||'').toLowerCase().indexOf(q)===-1\u0026amp;\u0026amp;t.cgId.toLowerCase().indexOf(q)===-1)return false;\n return true;\n });\n if(sortKey==='name')list.sort(function(a,b){return sortDir*a.symbol.localeCompare(b.symbol);});\n else if(sortKey==='price')list.sort(function(a,b){return sortDir*((coinData[a.cgId]?coinData[a.cgId].price:0)-(coinData[b.cgId]?coinData[b.cgId].price:0));});\n else if(sortKey==='change')list.sort(function(a,b){return sortDir*((coinData[a.cgId]?coinData[a.cgId].change:0)-(coinData[b.cgId]?coinData[b.cgId].change:0));});\n return list;\n }\n\n function renderTokens(){\n var list=filteredTokens();\n var el=document.getElementById('tokenList');\n if(list.length===0){el.innerHTML='\u0026lt;div class=\"no-results\"\u0026gt;No tokens found\u0026lt;\/div\u0026gt;';return;}\n var h='';\n for(var i=0;i\u0026lt;list.length;i++){\n var t=list[i],d=coinData[t.cgId];\n var price=d?d.price:null,change=d?d.change:null;\n var fav=favorites.has(t.symbol);\n var cls=change==null?'neutral':(change\u0026gt;=0?'up':'down');\n var displayName=t.label||t.symbol;\n h+='\u0026lt;div class=\"token-row\" data-symbol=\"'+t.symbol+'\"\u0026gt;'+\n '\u0026lt;button class=\"star-btn'+(fav?' faved':'')+'\" data-symbol=\"'+t.symbol+'\" title=\"Favorite\"\u0026gt;\u0026amp;#9733;\u0026lt;\/button\u0026gt;'+\n iconHTML(t.symbol,t.cgId)+\n '\u0026lt;div class=\"token-info\"\u0026gt;\u0026lt;div class=\"token-name\"\u0026gt;'+displayName+'\u0026lt;span class=\"token-badge\"\u0026gt;5x\u0026lt;\/span\u0026gt;\u0026lt;\/div\u0026gt;\u0026lt;div class=\"token-pair\"\u0026gt;'+t.symbol+'\/'+activeSub+'\u0026lt;\/div\u0026gt;\u0026lt;\/div\u0026gt;'+\n '\u0026lt;div class=\"token-price\"\u0026gt;'+(price!=null?'
+fmtUSD(price):'\u0026lt;span class=\"skeleton\" style=\"display:inline-block;width:60px;height:14px;\"\u0026gt;\u0026lt;\/span\u0026gt;')+'\u0026lt;\/div\u0026gt;'+\n '\u0026lt;div class=\"token-change '+cls+'\"\u0026gt;'+fmtChange(change)+'\u0026lt;\/div\u0026gt;\u0026lt;\/div\u0026gt;';\n }\n el.innerHTML=h;\n [].forEach.call(el.querySelectorAll('.star-btn'),function(btn){\n btn.addEventListener('click',function(e){e.stopPropagation();\n var sym=this.dataset.symbol;\n if(favorites.has(sym)){favorites.delete(sym);this.classList.remove('faved');}\n else{favorites.add(sym);this.classList.add('faved');}\n });\n });\n [].forEach.call(el.querySelectorAll('.token-row'),function(row){\n row.addEventListener('click',function(){\n var sym=this.dataset.symbol;\n for(var k=0;k\u0026lt;TOKENS.length;k++){if(TOKENS[k].symbol===sym){var d=coinData[TOKENS[k].cgId];if(d)alert(sym+'\/'+activeSub+'\\nPrice:
+fmtUSD(d.price)+'\\n24h Change: '+fmtChange(d.change));break;}}\n });\n });\n }\n\n \/\/ \u2500\u2500 Render Trades \u2500\u2500\n function generateTrade(){\n var price=basePrices[activePair.cgId];if(!price||price\u0026lt;=0)return;\n var side=Math.random()\u0026gt;0.5?'buy':'sell';\n var drift=(Math.random()-0.5)*(price*0.0003);\n var tp=price+drift,qty=Math.random()*activePair.qtyScale;\n trades.unshift({side:side,price:tp,qty:qty,time:fmtNow()});\n if(trades.length\u0026gt;80)trades.length=80;\n renderTrades();\n }\n function renderTrades(){\n var price=basePrices[activePair.cgId]||0,h='';\n for(var i=0;i\u0026lt;trades.length;i++){\n var t=trades[i];\n h+='\u0026lt;div class=\"trade-row '+t.side+'\"\u0026gt;\u0026lt;div class=\"t-price\"\u0026gt;'+fmtPrice(t.price)+'\u0026lt;\/div\u0026gt;\u0026lt;div class=\"t-qty\"\u0026gt;'+fmtQty(t.qty,price)+'\u0026lt;\/div\u0026gt;\u0026lt;div class=\"t-time\"\u0026gt;'+t.time+'\u0026lt;\/div\u0026gt;\u0026lt;\/div\u0026gt;';\n }\n document.getElementById('tradeList').innerHTML=h;\n }\n function updateTradeStatus(){\n var price=basePrices[activePair.cgId];\n document.getElementById('tradePairLabel').textContent=activePair.label;\n document.getElementById('basePriceRef').textContent=price?'
+fmtPrice(price):'--';\n }\n function switchPair(pair){activePair=pair;trades=[];updateTradeStatus();for(var i=0;i\u0026lt;40;i++)generateTrade();}\n\n \/\/ \u2500\u2500 Fetch \u2500\u2500\n function fetchData(){\n var ids=[];\n for(var i=0;i\u0026lt;TOKENS.length;i++){if(ids.indexOf(TOKENS[i].cgId)===-1)ids.push(TOKENS[i].cgId);}\n for(var j=0;j\u0026lt;TRADE_PAIRS.length;j++){if(ids.indexOf(TRADE_PAIRS[j].cgId)===-1)ids.push(TRADE_PAIRS[j].cgId);}\n var url='https:\/\/api.coingecko.com\/api\/v3\/coins\/markets?vs_currency=usd\u0026amp;ids='+encodeURIComponent(ids.join(','))+'\u0026amp;order=market_cap_desc\u0026amp;sparkline=false\u0026amp;price_change_percentage=24h';\n return fetch(url).then(function(r){if(!r.ok)throw Error('HTTP '+r.status);return r.json();}).then(function(data){\n for(var i=0;i\u0026lt;data.length;i++){\n var c=data[i];\n coinData[c.id]={price:c.current_price,change:c.price_change_percentage_24h,image:c.image||''};\n basePrices[c.id]=c.current_price;\n }\n document.getElementById('updateTime').textContent='Updated '+new Date().toLocaleTimeString('en-US',{hour12:false});\n updateTradeStatus();renderTokens();\n }).catch(function(e){console.warn('Fetch failed:',e.message);document.getElementById('updateTime').textContent='Retrying...';});\n }\n\n \/\/ \u2500\u2500 Events \u2500\u2500\n (function bind(){\n var si=document.getElementById('searchInput'),sc=document.getElementById('searchClear');\n si.addEventListener('input',function(){sc.classList.toggle('visible',si.value.length\u0026gt;0);renderTokens();});\n sc.addEventListener('click',function(){si.value='';sc.classList.remove('visible');renderTokens();si.focus();});\n document.getElementById('catTabs').addEventListener('click',function(e){\n if(!e.target.classList.contains('cat-tab'))return;\n [].forEach.call(document.querySelectorAll('.cat-tab'),function(b){b.classList.remove('active');});\n e.target.classList.add('active');activeCat=e.target.dataset.cat;renderTokens();\n });\n document.getElementById('subTabs').addEventListener('click',function(e){\n if(!e.target.classList.contains('sub-tab'))return;\n [].forEach.call(document.querySelectorAll('.sub-tab'),function(b){b.classList.remove('active');});\n e.target.classList.add('active');activeSub=e.target.dataset.sub;renderTokens();\n });\n document.getElementById('tradePairSelect').addEventListener('change',function(){\n for(var i=0;i\u0026lt;TRADE_PAIRS.length;i++){if(TRADE_PAIRS[i].label===this.value){switchPair(TRADE_PAIRS[i]);break;}}\n });\n document.querySelector('.trade-menu').addEventListener('click',function(){alert('Trade log options:\\n\\u2022 Export CSV\\n\\u2022 Clear history\\n\\u2022 Auto-scroll: ON');});\n document.getElementById('sortName').addEventListener('click',function(){sortKey=(sortKey==='name')?(sortDir*=-1,sortKey):(sortKey='name',sortDir=1,sortKey);updateSort();renderTokens();});\n document.getElementById('sortPrice').addEventListener('click',function(){sortKey=(sortKey==='price')?(sortDir*=-1,sortKey):(sortKey='price',sortDir=-1,sortKey);updateSort();renderTokens();});\n document.getElementById('sortChange').addEventListener('click',function(){sortKey=(sortKey==='change')?(sortDir*=-1,sortKey):(sortKey='change',sortDir=-1,sortKey);updateSort();renderTokens();});\n })();\n\n function updateSort(){\n [].forEach.call(document.querySelectorAll('.sort-arrow'),function(a){a.classList.remove('active');a.textContent='\\u2195';});\n var map={name:'sortName',price:'sortPrice',change:'sortChange'};\n if(sortKey\u0026amp;\u0026amp;map[sortKey]){var a=document.querySelector('#'+map[sortKey]+' .sort-arrow');a.classList.add('active');a.textContent=sortDir===1?'\\u2191':'\\u2193';}\n }\n\n \/\/ \u2500\u2500 Init \u2500\u2500\n renderTokens();\n fetchData().then(function(){for(var i=0;i\u0026lt;40;i++)generateTrade();});\n setInterval(fetchData,30000);\n setInterval(generateTrade,1200);\n})();\n\u0026lt;\/script\u0026gt;\n\u0026lt;\/body\u0026gt;\n\u0026lt;\/html\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304090}"}]}}}],"inlineLayout":"12"}}},{"type":"BlockComponentItem","id":"bd2ec12c-e175-411f-9a87-c74d2ac2d424","name":"rowBlock","components":{"block1":{"type":"BlockComponent","id":"b892819b-8251-4cdd-b543-08e77291e473","items":[{"type":"BlockComponentItem","id":"cbb1bb99-5c88-4643-b393-504c8b4ab771","name":"columnBlock","components":{"block1":{"type":"BlockComponent","id":"3986ad93-fc3f-49d6-a664-82d6f55da0d0","items":[{"type":"HtmlComponent","id":27295333,"defaultValue":false,"value":"\u0026lt;link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\"\u0026gt;\n\n\u0026lt;style\u0026gt;\n:root {\n --nexbit-blue: #00d2ff;\n --nexbit-gray: #708090;\n --nav-height: 70px;\n }\n\n \/* \u5e95\u90e8\u5bfc\u822a\u5bb9\u5668 - \u5b8c\u5168\u900f\u660e *\/\n .nexbit-footer-nav {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n height: var(--nav-height);\n\n background-color: transparent;\n background: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n\n display: flex;\n justify-content: space-around;\n align-items: center;\n z-index: 9999;\n\n \/* \u2605 \u5173\u952e\u4fee\u590d\uff1a\u663e\u5f0f\u58f0\u660e\u63a5\u6536\u9f20\u6807\u4e8b\u4ef6\uff0c\u9632\u6b62\u7a7f\u900f *\/\n pointer-events: auto;\n\n border-top: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n \/* \u5bfc\u822a\u6309\u94ae *\/\n .nav-item {\n text-decoration: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n height: 100%;\n background: transparent;\n\n \/* \u2605 \u5173\u952e\u4fee\u590d\uff1a\u6bcf\u4e2a\u6309\u94ae\u90fd\u663e\u5f0f\u63a5\u6536\u70b9\u51fb\u3001\u663e\u793a\u624b\u578b *\/\n pointer-events: auto;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n user-select: none;\n -webkit-user-select: none;\n }\n\n \/* \u9ed8\u8ba4\u72b6\u6001\u989c\u8272 *\/\n .nav-item i {\n font-size: 22px;\n color: var(--nexbit-gray);\n margin-bottom: 4px;\n transition: all 0.3s ease;\n pointer-events: none;\n }\n .nav-item span {\n font-size: 10px;\n color: var(--nexbit-gray);\n font-weight: bold;\n text-transform: uppercase;\n pointer-events: none;\n }\n\n \/* \u4eae\u8d77\u72b6\u6001 (Active) *\/\n .nav-item.active i,\n .nav-item.active span {\n color: var(--nexbit-blue);\n }\n .nav-item.active i {\n text-shadow: 0 0 12px rgba(0, 210, 255, 0.8);\n transform: translateY(-2px);\n }\n\n @supports (padding-bottom: env(safe-area-inset-bottom)) {\n .nexbit-footer-nav {\n height: calc(var(--nav-height) + env(safe-area-inset-bottom));\n padding-bottom: env(safe-area-inset-bottom);\n }\n }\n\u0026lt;\/style\u0026gt;\n\n\u0026lt;nav class=\"nexbit-footer-nav\"\u0026gt;\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/x-wallet\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-house\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Home\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/trade\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-chart-line\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Trade\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item\" data-href=\"https:\/\/www.appyourplatform.info\/deposit\" data-active=\"false\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-wallet\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Deposit\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n\n \u0026lt;div class=\"nav-item active\" data-href=\"https:\/\/www.appyourplatform.info\/swap\" data-active=\"true\"\u0026gt;\n \u0026lt;i class=\"fa-solid fa-right-left\"\u0026gt;\u0026lt;\/i\u0026gt;\n \u0026lt;span\u0026gt;Swap\u0026lt;\/span\u0026gt;\n \u0026lt;\/div\u0026gt;\n \u0026lt;\/nav\u0026gt;\n\n\u0026lt;script\u0026gt;\n(function() {\n var originalNav = document.querySelector('.nexbit-footer-nav');\n if (!originalNav) return;\n\n \/\/ \u2605 \u7ec8\u6781\u65b9\u6848\uff1a\u514b\u9686 nav \u5230 document.body \u4e0b\uff0c\u521b\u5efa\u5b8c\u5168\u72ec\u7acb\u7684 fixed \u5c42\n \/\/ \u8fd9\u6837 position:fixed \u76f4\u63a5\u76f8\u5bf9\u89c6\u53e3\uff0c\u5f7b\u5e95\u65a9\u65ad Strikingly \u5bb9\u5668 transform \u7684\u5f71\u54cd\n var fixedNav = originalNav.cloneNode(true);\n fixedNav.style.position = 'fixed';\n fixedNav.style.bottom = '0';\n fixedNav.style.left = '0';\n fixedNav.style.right = '0';\n fixedNav.style.zIndex = '99999';\n fixedNav.style.pointerEvents = 'auto';\n fixedNav.style.margin = '0';\n\n \/\/ \u9690\u85cf\u539f\u59cb nav\n originalNav.style.display = 'none';\n originalNav.style.visibility = 'hidden';\n originalNav.style.height = '0';\n originalNav.style.overflow = 'hidden';\n\n \/\/ \u8ffd\u52a0\u5230 body\uff0c\u786e\u4fdd fixed \u76f8\u5bf9\u89c6\u53e3\n document.body.appendChild(fixedNav);\n\n \/\/ \u7ed9 body \u52a0\u5e95\u90e8 padding\uff0c\u9632\u6b62\u5185\u5bb9\u88ab\u906e\u6321\n var navHeight = fixedNav.offsetHeight || 70;\n document.body.style.paddingBottom = (navHeight + 20) + 'px';\n\n \/\/ \u7ed1\u5b9a\u70b9\u51fb\u4e8b\u4ef6\uff08\u5728\u65b0\u514b\u9686\u7684 nav \u4e0a\uff09\n var items = fixedNav.querySelectorAll('.nav-item');\n items.forEach(function(item) {\n item.onclick = function(e) {\n items.forEach(function(n) { n.classList.remove('active'); });\n this.classList.add('active');\n var href = this.getAttribute('data-href');\n if (href) {\n try {\n if (window.parent \u0026amp;\u0026amp; window.parent.location) {\n window.parent.location.href = href;\n } else {\n window.open(href, '_blank');\n }\n } catch (err) {\n window.open(href, '_blank');\n }\n }\n };\n });\n})();\n\u0026lt;\/script\u0026gt;","render_as_iframe":true,"selected_app_name":"HtmlApp","app_list":"{\"HtmlApp\":9304335}"}]}}}],"inlineLayout":"12"}}}],"layout":[],"inlineLayout":"1"}}}],"title":"Trade","uid":"ccba68dd-0336-4643-8012-e91b486e8c4f","path":"\/trade","memberOnly":null,"paidMemberOnly":null,"buySpecificProductList":null,"specificTierList":null,"autoPath":true,"authorized":true},{"type":"Page","id":"f_aef28d11-8a82-4ba3-90bc-4ad805a56c2d","sections":[{"type":"Slide","id":"f_e4effbff-6f97-40c2-be7a-67e76c909f50","defaultValue":null,"template_name":"blog1","components":{"slideSettings":{"type":"SlideSettings","id":"f_03ed9531-4ec4-4016-bbdc-6dd56af39e02","defaultValue":null,"show_nav":true,"nameChanged":true,"hidden_section":false,"name":"\u7b80\u6613\u535a\u5ba2","sync_key":null,"layout_variation":"one-smallCircle-long-none","display_settings":{"blogNumber":20},"padding":{"top":"none","bottom":"normal"},"layout_config":{"customized":false,"snippetLength":"none","templateName":"C","imageShape":"square","imageAlignment":"left","structure":"card","textAlignment":"left","imageSize":"m","columns":3}},"text1":{"type":"RichText","id":"f_2fc5df67-cf91-4da5-942c-e10a19bd823b","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-text-color-default s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-30\" style=\"font-size: 36px;\"\u003e\u003cspan class=\"s-text-color-default\"\u003e\u003cstrong\u003ePower Alliance Blog\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":false,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_5563249f-8d27-4056-8eb0-b91be1a1ada4","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-text-color-default s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color10);\"\u003eRead our articles to learn about the latest digital advertising trends, programmatic advertising techniques, and the day-to-day operations of Power Alliance.\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":false,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"background1":{"type":"Background","id":"f_e53bfe2c-172f-48f9-b960-58e62904f620","defaultValue":false,"url":"","textColor":"","backgroundVariation":"","sizing":"","userClassName":"","videoUrl":"","videoHtml":"","storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null,"useImage":false,"focus":null,"backgroundColor":{"themeColorRangeIndex":null,"value":"#134383","type":"custom","id":"f_eb0ebd55-08b4-4c91-893e-8e4c5393e6e4"}},"blog1":{"type":"BlogCollectionComponent","id":"f_9760746f-e8ce-489e-8ec0-7ee31b429c4b","defaultValue":null,"app_instance_id":null,"app_id":null,"category":{"id":"all","name":"All Categories"}}}}],"title":"Blog","uid":"494b19b5-c808-446d-bc2a-395537e32a44","path":"\/blog","memberOnly":null,"paidMemberOnly":null,"buySpecificProductList":null,"specificTierList":null,"autoPath":true,"authorized":true},{"type":"Page","id":"f_4b0a9163-0d0e-4fca-9f8d-9f5dd23554bf","sections":[{"type":"Slide","id":"f_7575d4bc-7ea0-40f8-ba7d-92f48718ed01","defaultValue":null,"template_name":"featureListE","components":{"slideSettings":{"type":"SlideSettings","id":"f_71e064a6-65f9-46c1-a044-ab8635b29024","defaultValue":null,"show_nav":true,"show_nav_multi_mode":false,"nameChanged":true,"hidden_section":false,"hidden_mobile_section":false,"name":"Feature List","sync_key":null,"layout_variation":"normal","padding":{"top":"half","bottom":"none"},"layout_config":{"noTemplateDiff":true,"card_radius":"square","cardBackgroundSettings":{"type":"default","id":"f_822fac45-ed58-4043-8a33-704f63df2db2"},"border_thickness":"small","card_padding":"small","spacing":"S","subtitleReplaceToText":true,"mediaSize":"xs","horizontal_alignment":"auto","layout":"E","border":false,"mediaPosition":"alternating","showButton":false,"border_color":"#000000","card":false,"structure":"list","card_color":null,"vertical_alignment":"middle","borderBackgroundSettings":{"default":"#e4f7f0","type":"default","id":"f_1366091a-d001-4da5-bd53-a63cf6d3040c"},"grid_media_position":"top","columns":"three","content_align":"center"}},"background1":{"type":"Background","id":"f_811eca09-4c86-4511-bc99-0e2f45b1dd5a","defaultValue":false,"url":"","textColor":"","backgroundVariation":"","sizing":"","userClassName":"","videoUrl":"","videoHtml":"","storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null,"useImage":false,"focus":null,"backgroundColor":{"themeColorRangeIndex":null,"value":"#1e222d","type":"custom","id":"f_b5101fef-6537-4eed-9af6-feb55dec5afc"}},"repeatable1":{"type":"Repeatable","id":"f_d22cbe48-73d0-416d-8943-5de072d59829","defaultValue":false,"list":[{"type":"RepeatableItem","id":"f_7359694d-1b4d-4c8e-bfda-bd0be5822076","defaultValue":true,"components":{"media1":{"type":"Media","id":"f_b1a22297-14d0-4d7a-94ff-791689249d3c","defaultValue":true,"video":{"type":"Video","id":"f_6624d5b8-7ea4-4808-af59-04a24829ab54","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_d060635f-94dc-4fea-907d-2564c8b35d45","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/860634_76793","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"8px","h":575,"w":1149,"s":39569,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_64c3129a-b67d-47e1-ad4c-783eea7a9b20","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003eHow to Deposit\u003c\/span\u003e\ud83d\udce5\u003cspan\u003e\uff1f\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_b3b76e8b-3c3c-4477-a31a-b80d818c582f","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color3); \"\u003eOn the homepage, users can first obtain the address of the currency they want to deposit into. After clicking on the currency they want to deposit into, they can click \"Receive,\" which will display the wallet address. Click \"Copy\" (when submitting, you must enter the obtained currency wallet address in the \"wallet address\" field).\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_09a37ac2-1163-4b81-b8e7-cf3d3b1b3904","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_475e6f0c-2a80-4a2d-8975-f78675fb218a","components":{"media1":{"type":"Media","id":"f_2f3e899f-3a54-41ae-9e16-83c92edccb25","defaultValue":true,"video":{"type":"Video","id":"f_bcca366d-f587-4126-8468-3bfb2d054493","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_d0bb0067-3764-44ff-b7b3-36b9cbab3d21","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/145840_676131","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":null,"aspect_ratio":null,"h":582,"w":1163,"s":41445,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_a20aa8b4-9a8f-4ee8-98e4-30c2ff6d776d","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003eHow to Deposit\ud83d\udce5\uff1f\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_4de8722f-7724-49f4-91b9-d5e0949f56a4","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color3); \"\u003eOn the homepage, users can first obtain the address of the currency they want to deposit into. After clicking on the currency they want to deposit into, they can click \"Receive,\" which will display the wallet address. Click \"Copy\" (when submitting, you must enter the obtained currency wallet address in the \"wallet address\" field).\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_5f47c384-b3bf-40de-b20f-a40923a853b5","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_ccf63beb-de65-4036-8fb0-713ff9fddba2","components":{"media1":{"type":"Media","id":"f_deea1cea-9900-4679-bf4a-e9e834bf25f3","defaultValue":true,"video":{"type":"Video","id":"f_7fd59eea-1710-4a86-97f1-97d7c79eaa48","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_b5f96b1f-14d5-4fb8-ae81-832754b42260","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/995046_368355","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"8px","aspect_ratio":"","h":267,"w":533,"s":10280,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_0f81cbd1-ae65-4ab8-afc3-81f1911fb68b","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003eHow to Deposit\ud83d\udce5\uff1f\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_de3a3b9c-453f-44eb-bc07-44bddce4f1db","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color3); \"\u003eOn the homepage, users can first obtain the address of the currency they want to deposit into. After clicking on the currency they want to deposit into, they can click \"Receive,\" which will display the wallet address. Click \"Copy\" (when submitting, you must enter the obtained currency wallet address in the \"wallet address\" field).\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_08f3922d-a549-42cf-ae08-40450bfcd8ca","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_fb1b061a-3a8f-4648-aaf7-147bbbfa0384","components":{"media1":{"type":"Media","id":"f_296f5dde-b90d-4ccd-bcbe-55de3e1c9251","defaultValue":true,"video":{"type":"Video","id":"f_7fd59eea-1710-4a86-97f1-97d7c79eaa48","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_b5f96b1f-14d5-4fb8-ae81-832754b42260","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/856454_184273","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"8px","h":375,"w":752,"s":22416,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_fa21673f-92db-4f0f-b53e-d21722dc5c0b","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003eHow to Obtain a Deposit-Address?\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_be216ed4-f962-4ad3-9c5c-4b3887c69ee1","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color3); \"\u003e\u003cstrong\u003eOn the homepage, users can first obtain the address of the currency they want to deposit into. After clicking on the currency they want to deposit into, they can click \"Receive,\" which will display the wallet address. Click \"Copy\" (when submitting, you must enter the obtained currency wallet address in the \"wallet address\" field).\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_37a2a0fd-2da9-4e97-a6b3-d743de71ff9f","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_6cd4e752-046b-4aa6-b8f5-17926b4367d3","components":{"media1":{"type":"Media","id":"f_7b3dc1b1-f6e0-42e2-bcb8-a813fd715ec9","defaultValue":true,"video":{"type":"Video","id":"f_7fd59eea-1710-4a86-97f1-97d7c79eaa48","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_b5f96b1f-14d5-4fb8-ae81-832754b42260","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/125058_865518","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"8px","h":562,"w":728,"s":33828,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_04c22e0c-4e84-44da-83a2-dd3ce97382bd","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003eHow do I Submit a Deposit Order\u003cspan\u003e\ud83d\udce5\uff1f\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_dae88197-bbb0-4b38-a9bf-fe52ed992c86","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color3); \"\u003e\u003cstrong\u003eFirst, go to the homepage to obtain your wallet address (for transfers). After a successful transfer, please take a screenshot and save it. When depositing, please select the currency you successfully deposited (\u26a0\ufe0fNote: If you do not select a currency when submitting the order, the transfer will not be completed). Enter the deposit amount. Enter the wallet address you obtained from the homepage in the \"Wallet Address\" field. Upload a screenshot of the successful deposit, click \"Submit,\" and wait for the funds to arrive. You can view your deposit history in \"View Deposit History.\"\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_beb1e9f1-f7c7-4a3f-8a71-9a7a563fce38","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_7ed689be-bb39-4aa7-ae6b-d6caf3f16233","components":{"media1":{"type":"Media","id":"f_2a2bc64e-9b79-4ce6-83b9-4843719640b6","defaultValue":true,"video":{"type":"Video","id":"f_7fd59eea-1710-4a86-97f1-97d7c79eaa48","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_b5f96b1f-14d5-4fb8-ae81-832754b42260","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/960668_615673","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"8px","h":674,"w":830,"s":41035,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_2b1a8daf-4882-464b-ba4c-2d973df83372","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003eHow to Trade\u003c\/span\u003e\u003cspan style=\"color: #ffffff;\"\u003e\ud83d\udcb9\ud83d\udcc9\u003c\/span\u003e\u003cspan\u003e\uff1f\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_c12fdc87-89d2-4b8a-9227-91f2f154e40a","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color3); \"\u003eBefore purchasing, you must ensure your account balance is sufficient. Once you have sufficient funds, you can select the cryptocurrency you wish to purchase. Transaction durations are as follows: 30 seconds (41%), 60 seconds (72%), 120 seconds (95%), and 180 seconds (100%). After clicking \"Trade,\" your profit and cryptocurrency balance will increase according to the selected duration. After successful completion, you will need to wait for the selected duration to settle. Two options are provided: View transaction history (order history) and cryptocurrency holdings (this will display the purchased cryptocurrency; to sell cryptocurrency, you must first hold it before using the \"Sell\" function to convert it into cash).\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_b5928d85-2d3b-42b8-aebe-f4a19c293f6f","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_e2c48301-de0d-4def-9bc4-6b4c2c2fc445","components":{"media1":{"type":"Media","id":"f_699ae67c-a3b1-49cb-ab02-4dc5bcc96428","defaultValue":true,"video":{"type":"Video","id":"f_7fd59eea-1710-4a86-97f1-97d7c79eaa48","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_b5f96b1f-14d5-4fb8-ae81-832754b42260","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/289422_873773","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"8px","h":577,"w":646,"s":34536,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_ac485305-fb31-4cda-9029-cd9df934cd88","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003eHow to Withdraw \ud83d\udce4\uff1f\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_ea108ac1-bedd-4a37-80c4-d5010ecbd05d","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color3);\"\u003e\u003cstrong\u003eBefore withdrawing, please ensure you have sufficient funds. After selecting the currency you wish to withdraw, enter the amount (USDT). The corresponding amount will be automatically displayed. First-time users must create a withdrawal password. After creating the password, click \"Forgot Password\" and then change your password. After changing it, click \"Confirm Withdrawal Password.\" Next, enter your wallet address (you must click \"Confirm Wallet Address\"). After confirmation, the order number and H1N1 number will be displayed (you can copy and save or take a screenshot). You can view your withdrawal records in \"View Withdrawal Records\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_a6e14e8b-02dd-48e9-a08b-8cea451ebff0","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_68177bcb-6429-48a5-934b-4b746cbcb634","components":{"media1":{"type":"Media","id":"f_c65bbf00-c40c-400b-9476-c5a9eef3c317","defaultValue":true,"video":{"type":"Video","id":"f_7fd59eea-1710-4a86-97f1-97d7c79eaa48","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_b5f96b1f-14d5-4fb8-ae81-832754b42260","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/199344_873642","storage":"s","storagePrefix":null,"format":"png","border_radius":"8px","h":597,"w":600,"s":78567,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_f2671f73-1d70-4e5c-b445-045644e6cca5","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003eHow to PLAN\u003c\/span\u003e\ud83d\udcca\u003cspan\u003e\uff1f\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_6dfd9892-9661-4651-a8a0-81b347e22409","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color3); \"\u003e\u003cstrong\u003eThere are 6 different terms: 1 day\/2 days\/3 days\/7 days\/10 days\/20 days. Each term has a minimum deposit and a corresponding interest rate. After clicking on a term, users can start depositing and earning interest. (*Note: Users must complete the deposit within 180 seconds, otherwise the order will be automatically cancelled.) The minimum deposit + one day's interest rate = the total amount. The amount spent on the term will be displayed in the term's total amount, not in the total amount displayed on the homepage.\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_33f23fb4-4cc2-410d-8599-59b85143cd01","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_a9e522ac-a2f8-40df-8c43-288bc4e978cb","components":{"media1":{"type":"Media","id":"f_f201e240-16ea-4731-8c96-38b8f42d5172","defaultValue":true,"video":{"type":"Video","id":"f_7fd59eea-1710-4a86-97f1-97d7c79eaa48","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_b5f96b1f-14d5-4fb8-ae81-832754b42260","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/46490_264607","storage":"s","storagePrefix":null,"format":"jpeg","border_radius":"8px","h":556,"w":701,"s":24780,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_2d65c857-009f-47ad-915f-5fb4b9bde107","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003eHow to Swap\u267b\ufe0f\uff1f\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_23be91bd-cd1a-4c60-91ac-b19329dd3040","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color3);\"\u003eYou can only exchange the currencies you own for USDT. The currency amount will be automatically calculated in USDT, but you need to click the \"Confirm\" button to complete the exchange (you can view the amount on the homepage).\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_dfb92c28-d51b-4393-aedd-0ba4d6bdd12e","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}},{"type":"RepeatableItem","id":"f_633aaea5-8180-4edf-9301-003ade8045fc","components":{"media1":{"type":"Media","id":"f_7b7a6eae-ac5f-4d0c-b392-181dcbeb68cc","defaultValue":true,"video":{"type":"Video","id":"f_7fd59eea-1710-4a86-97f1-97d7c79eaa48","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_b5f96b1f-14d5-4fb8-ae81-832754b42260","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/507655_768107","storage":"s","storagePrefix":null,"format":"png","border_radius":"8px","h":821,"w":614,"s":192007,"new_target":true,"focus":null},"current":"image"},"text1":{"type":"RichText","id":"f_de401c08-f469-45fc-a312-8c1139753664","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-paragraph s-text-font-size-over-default\" style=\"font-size: 18px;\"\u003e\u003cspan\u003eHow to Loan\uff1f\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_2398cc7b-b6ea-4cbe-a626-d81ff14f7ae7","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 14px;\"\u003e\u003cspan style=\"color: var(--s-pre-color3);\"\u003e\u003cstrong\u003eLoan program, minimum loan amount from 1,000 USDT to 1,000,000 USDT, minimum daily interest rate of 0.16%. A minimum deposit is required before application. Applicants need to submit photos of the front and back of their ID card, and a photo of themselves holding their ID card for verification. Application is pending approval\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_59370e77-d8df-4e6e-8d37-75be34569b7f","defaultValue":false,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null,"version":"2"}}}],"components":{"media1":{"type":"Media","id":"f_1c4b8ddb-887b-4d05-b393-42530fcc8caf","defaultValue":true,"video":{"type":"Video","id":"f_156262eb-5133-492c-b063-bf11771e9741","defaultValue":true,"html":"","url":"http:\/\/vimeo.com\/18150336","thumbnail_url":null,"maxwidth":700,"description":null},"image":{"type":"Image","id":"f_1051ed70-786d-4c72-91ca-d89f07e9d79d","defaultValue":true,"link_url":null,"thumb_url":"\/\/static-assets.strikinglycdn.com\/images\/editor2\/feature_list\/thumb-list-D-1.png","url":"\/\/static-assets.strikinglycdn.com\/images\/editor2\/feature_list\/list-D-1.png","caption":"","description":"","new_target":true},"current":"image"},"text1":{"type":"RichText","id":"f_7cc761fa-686e-450a-be12-5752136788e1","defaultValue":true,"value":"What We Do","backupValue":null,"version":null},"text2":{"type":"RichText","id":"f_83cdfe55-9f7b-40c1-b0c9-0165b1323e1a","defaultValue":true,"value":"Show off your projects, features, or clients in this section.","backupValue":null,"version":null},"button1":{"type":"Button","id":"f_d3d1bf23-f698-47bc-a380-65edefc1d19b","defaultValue":true,"alignment":"auto","text":"Read More","size":"small","mobile_size":"automatic","style":"","color":"","font":"","url":"","new_target":null}}},"text1":{"type":"RichText","id":"f_eef51907-f0b9-4abc-8b06-f57dee100426","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block; \"\u003e\u003cp class=\" s-rich-text-wrapper font-size-tag-small s-text-font-size-over-default\" style=\"font-size: 29px;\"\u003e\u003cstrong\u003eFAQ\u003c\/strong\u003e\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_8e46187f-26c9-4a6e-a9e8-ba9d118685ee","defaultValue":false,"value":"","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true}}}],"title":"Tutorial","uid":"8b16d3e7-ada6-4363-8770-86387bc837aa","path":"\/tutorial","autoPath":true,"authorized":true}],"menu":{"type":"Menu","id":"f_ad7148f2-af96-4dc5-aa3f-46401ccad342","defaultValue":null,"template_name":"navbar","logo":null,"components":{"image1":{"type":"Image","id":"3ab868d5-99d5-43c9-b5e7-40308fe2ce32","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/26855_158206","storage":"s","storagePrefix":null,"format":"png","border_radius":"8px","aspect_ratio":null,"h":895,"w":1017,"s":859940,"new_target":true,"noCompression":false,"focus":null},"image2":{"type":"Image","id":"f_824b2906-5c2f-437d-bd33-861ecc41caed","defaultValue":true,"link_url":null,"thumb_url":null,"url":"http:\/\/assets.strikingly.com\/assets\/themes\/fresh\/power.png","caption":"","description":"","storageKey":null,"storage":null,"format":null,"h":37,"w":32,"s":null,"new_target":true},"text1":{"type":"RichText","id":"f_bd8ffe00-92de-470a-9b1e-cd264bc9be90","defaultValue":false,"alignment":null,"value":"","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"text2":{"type":"RichText","id":"f_f34417a6-85c0-4021-97fe-9194e628cd64","defaultValue":false,"value":"","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null},"defaultDataProcessed":true},"button1":{"type":"Button","id":"f_58973ba0-f18b-48f9-93fc-a2011d66a593","defaultValue":false,"alignment":"center","text":"Support","size":"small","style":"solid","color":"#134383","font":"Montserrat","url":"https:\/\/t.me\/xwallettonlineservice","new_target":true,"backgroundSettings":{"default":"#000000","preIndex":null,"type":"custom","id":"f_9bcc3710-7f6f-454b-8d60-f801ddbe0004"}},"background1":{"type":"Background","id":"f_a66c8c28-6eaf-4f3a-8ea1-635a90bfdcb7","defaultValue":true,"url":"\/assets\/themes\/profile\/bg.jpg","textColor":"light","backgroundVariation":"","sizing":"cover","videoUrl":null,"videoHtml":null,"storageKey":null,"storage":null,"format":null,"h":null,"w":null,"s":null},"image3":{"type":"Image","id":"ef60361e-d046-468e-a5e3-17a7f50addd2","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"25433219\/26855_158206","storage":"s","storagePrefix":null,"format":"png","border_radius":"8px","aspect_ratio":null,"h":895,"w":1017,"s":859940,"new_target":true,"noCompression":false,"focus":null}}},"footer":{"type":"Footer","id":"f_e1d67782-58b2-4698-96bb-6b239864ef3e","defaultValue":null,"socialMedia":null,"copyright":null,"components":{"socialMedia":{"type":"SocialMediaList","id":"f_ca94e3fe-967d-42e5-ba23-841d7f3d9387","defaultValue":false,"link_list":[{"type":"SocialMediaItem","id":"da3eef30-cd2e-11ec-9858-0345d162a2c1","url":"facebook.com","className":"fab fa-facebook-f","show_button":true},{"type":"SocialMediaItem","id":"db75c180-cd2e-11ec-9858-0345d162a2c1","url":"twitch.tv","className":"fab fa-twitch","show_button":true},{"type":"SocialMediaItem","id":"ddc3d030-cd2e-11ec-9858-0345d162a2c1","url":"instagram.com","className":"fab fa-instagram","show_button":true}],"button_list":[{"type":"Facebook","id":"f_5c42cdbd-4398-4ed9-b74d-5f14fe7af572","defaultValue":false,"url":"","link_url":"","share_text":"","show_button":false,"app_id":543870062356274},{"type":"Twitter","id":"f_428d754c-28b2-4bd1-bd26-54917ae15c50","defaultValue":false,"url":"","link_url":"","share_text":"","show_button":false},{"type":"GPlus","id":"f_0e4806a8-239a-466b-9bca-b8065c7864e7","defaultValue":null,"url":"","link_url":"","share_text":"","show_button":true},{"type":"LinkedIn","id":"f_f5bcf098-ed59-4e4a-84c5-1b1840e66303","defaultValue":null,"url":"","link_url":"","share_text":"","show_button":false},{"type":"Pinterest","id":"f_98fbe7d6-db84-4ed8-9e26-09e0d2652724","url":"","show_button":false}],"list_type":"link"},"copyright":{"type":"RichText","id":"f_785655a3-8816-444f-8caa-3049282d544b","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block;\"\u003e\u003cp class=\"s-rich-text-wrapper\"\u003eStrikingly.com\u63d0\u4f9b\u6280\u672f\u652f\u6301\u003c\/p\u003e\u003c\/div\u003e","backupValue":null,"version":1,"lineAlignment":{"firstLineTextAlign":null,"lastLineTextAlign":null}},"background1":{"type":"Background","id":"f_bf1fca52-5753-4f14-8c48-dc95bab16f07","defaultValue":false,"url":"","textColor":"light","backgroundVariation":"","sizing":"cover","userClassName":"s-bg-dark","videoUrl":"","videoHtml":"","useSameBg":true,"backgroundApplySettings":{}},"image1":{"type":"Image","id":"f_22c2957f-ca07-4db3-b302-bee43de7589c","defaultValue":true,"link_url":"","thumb_url":"!","url":"!","caption":"","description":"","storageKey":"7258853\/477712_5895","storage":"s","storagePrefix":null,"format":"png","h":76,"w":88,"s":2812,"new_target":true,"focus":null},"text1":{"type":"RichText","id":"f_f6e987fa-453b-4e41-8b35-32bfec4bd38e","value":"\u003cp\u003e\u003cstrong\u003e\u5173\u4e8e\u6211\u4eec\u003c\/strong\u003e\u003c\/p\u003e\u003cp\u003e\u6211\u4eec\u7684\u4efb\u52a1\u003c\/p\u003e\u003cp\u003e\u6211\u4eec\u6b63\u5728\u62db\u8058\uff01\u003c\/p\u003e"},"text2":{"type":"RichText","id":"f_35be832e-0199-48d2-a23a-89b057cca134","value":"\u003cp\u003e\u003cstrong\u003e\u8d44\u6e90\u003c\/strong\u003e\u003c\/p\u003e\u003cp\u003e\u6559\u7a0b\u003c\/p\u003e\u003cp\u003e\u54c1\u724c\u8d44\u4ea7\u003c\/p\u003e"},"text3":{"type":"RichText","id":"f_40adc829-30c6-463e-af49-8700b8a1d4f2","defaultValue":false,"value":"\u003cdiv class=\"s-rich-text-wrapper\" style=\"display: block;\"\u003e\u003cp\u003e\u003cstrong\u003e\u8054\u7cfb\u6211\u4eec\u003c\/strong\u003e\u003c\/p\u003e\u003cp\u003e321-555-5555\u003c\/p\u003e\u003cp\u003e info@company.com\u003c\/p\u003e\u003c\/div\u003e","version":1}},"layout_variation":"vertical"},"submenu":{"type":"SubMenu","id":"f_adb41d14-3d1d-404d-810f-9ec1f2e8a81b","defaultValue":null,"list":[],"components":{"link":{"type":"Button","id":"f_c764276a-b868-4068-ab67-a960bb3a8cdb","defaultValue":null,"text":"Facebook","url":"http:\/\/www.facebook.com","new_target":true}}},"customColors":{"type":"CustomColors","id":"f_d35970ff-fab0-4cef-a27f-e8b4bf8cae86","defaultValue":null,"active":true,"highlight1":"#134383","highlight2":"#134383"},"animations":{"type":"Animations","id":"f_1e864d09-1899-4c92-98b3-d7c80ca2377e","defaultValue":null,"page_scroll":"slide_in","background":"parallax","image_link_hover":"zoom_in"},"s5Theme":{"type":"Theme","id":"f_247e5d2c-d437-4993-a487-1c633cb2e339","defaultValue":null,"version":"11","nav":{"type":"NavTheme","id":"f_a7eefaef-c78a-4fe1-925d-f515062961c4","defaultValue":null,"name":"topBar","layout":"b","padding":"medium","sidebarWidth":"small","topContentWidth":"section","horizontalContentAlignment":"center","verticalContentAlignment":"top","fontSize":"small","backgroundColor1":"#000000","highlightColor":"#75a8eb","presetColorName":"blackMinimal","itemColor":"#ffffff","itemSpacing":"compact","dropShadow":"no","socialMediaListType":"link","isTransparent":false,"isSticky":true,"keptOldLayout":false,"showSocialMedia":false,"hasTransparentFixedNavConfigChanged":true,"highlight":{"blockBackgroundColor":"#124381","blockTextColor":"#ffffff","blockBackgroundColorSettings":{"id":"4bdd5321-b0dc-4327-8a04-d8d680508696","default":"#124381","preIndex":null,"type":"default"},"blockTextColorSettings":{"id":"37b89522-1202-42fe-9909-610e09d0947b","default":"#ffffff","preIndex":null,"type":"default"},"blockShape":"pill","textColor":"#75a8eb","textColorSettings":{"id":"015ff5e6-e7b3-4249-8c20-32df9f46b341","default":"#75a8eb","preIndex":null,"type":"default"},"type":"underline","id":"f_6f7bcd48-b57a-444b-815d-6e832427ca97"},"border":{"enable":true,"borderColor":"#1f232e","position":"bottom","thickness":"small","borderColorSettings":{"preIndex":0,"type":"pre-color","default":"#ffffff","id":"f_3d5b296c-009c-4f18-ad71-40736fd90fb1"}},"layoutsVersionStatus":{"a":{"status":"done","from":"v1","to":"v2","currentVersion":"v2"},"b":{"status":"done","from":"v1","to":"v2","currentVersion":"v2"},"g":{"status":"done","from":"v1","to":"v2","currentVersion":"v2"},"e":{"status":"done","from":"v1","to":"v2","currentVersion":"v2"}},"socialMedia":[{"type":"SocialMediaItem","id":"da3eef30-cd2e-11ec-9858-0345d162a2c1","url":"facebook.com","className":"fab fa-facebook-f","show_button":true},{"type":"SocialMediaItem","id":"db75c180-cd2e-11ec-9858-0345d162a2c1","url":"twitch.tv","className":"fab fa-twitch","show_button":true},{"type":"SocialMediaItem","id":"ddc3d030-cd2e-11ec-9858-0345d162a2c1","url":"instagram.com","className":"fab fa-instagram","show_button":true}],"socialMediaButtonList":[{"type":"Facebook","id":"4bed7f00-5802-11f0-bd28-936519c6cffa","url":"","link_url":"","share_text":"","show_button":false},{"type":"Twitter","id":"4bed7f01-5802-11f0-bd28-936519c6cffa","url":"","link_url":"","share_text":"","show_button":false},{"type":"LinkedIn","id":"4bed7f02-5802-11f0-bd28-936519c6cffa","url":"","link_url":"","share_text":"","show_button":false},{"type":"Pinterest","id":"4bed7f03-5802-11f0-bd28-936519c6cffa","url":"","link_url":"","share_text":"","show_button":false}],"socialMediaContactList":[{"type":"SocialMediaPhone","id":"4bed7f06-5802-11f0-bd28-936519c6cffa","defaultValue":"","className":"fas fa-phone-alt"},{"type":"SocialMediaEmail","id":"4bed7f07-5802-11f0-bd28-936519c6cffa","defaultValue":"","className":"fas fa-envelope"}],"backgroundColorSettings":{"id":"93768d08-ce6a-43e4-88a4-58d79585880c","default":"#000000","preIndex":null,"type":"default"},"highlightColorSettings":{"id":"e82edd0b-bba5-45a9-93b5-7b35a638fe7e","default":"#75a8eb","preIndex":null,"type":"default"},"itemColorSettings":{"id":"76c26559-4160-40ff-86d6-b6033b1b3cb0","default":"#ffffff","preIndex":null,"type":"default"}},"section":{"type":"SectionTheme","id":"f_4fc6197e-5182-4a82-a157-ca9ae223252b","defaultValue":null,"padding":"normal","contentWidth":"normal","contentAlignment":"center","baseFontSize":18,"titleFontSize":20,"subtitleFontSize":18,"itemTitleFontSize":null,"itemSubtitleFontSize":null,"textHighlightColor":null,"baseColor":"#061528","titleColor":"#061528","subtitleColor":"#061528","itemTitleColor":"#061528","itemSubtitleColor":"#061528","textHighlightSelection":{"type":"TextHighlightSelection","id":"f_100266f9-faa6-4a20-8290-809532d31c19","defaultValue":null,"title":false,"subtitle":true,"itemTitle":false,"itemSubtitle":true},"base":{"preIndex":5,"type":"pre-color","default":"#50555c","id":"f_9f67cc42-7385-4410-90e7-297b1e934489"},"title":{"preIndex":5,"type":"pre-color","default":"#1D2023","id":"f_d9fc34b4-d2e3-48fe-8b13-066787e4d808"},"subtitle":{"preIndex":5,"type":"pre-color","default":"#134383","id":"f_b615d264-86b2-4c3b-8b71-cbb023d08246"},"itemTitle":{"preIndex":5,"type":"pre-color","default":"#1D2023","id":"f_8ec54141-9087-43b8-b9da-35a557130579"},"itemSubtitle":{"preIndex":5,"type":"pre-color","default":"#134383","id":"f_39ae8b3c-d298-4b6e-bc58-8314b2a28b53"}},"firstSection":{"type":"FirstSectionTheme","id":"f_9f9203be-cabb-4145-b07c-4de2ccc75783","defaultValue":null,"height":"normal","shape":"none"},"button":{"type":"ButtonTheme","id":"f_78383a89-ed4d-4cda-9d68-f5c72825706d","defaultValue":null,"backgroundColor":"#134383","shape":"square","fill":"solid","backgroundSettings":{"preIndex":null,"type":"default","default":"#134383","id":"f_45883ca2-59fb-4810-a319-b7ac102fe0ce"}}},"navigation":{"items":[{"id":"af87b4cc-c584-40dd-abae-4a1c3b5471f4","type":"page","visibility":true},{"id":"b43f70c7-7500-4ea0-a8a9-4b2cdd6b801b","type":"page","visibility":true},{"id":"b5b62c63-0152-4565-9d3f-f6834c0e542a","type":"page","visibility":true},{"id":"ccba68dd-0336-4643-8012-e91b486e8c4f","type":"page","visibility":true},{"id":"e64908b2-ab77-46d3-b814-0fa00fea8ed9","type":"page","visibility":true},{"id":"0ae170b9-0e4a-4b9a-be91-e43e9220029b","type":"page","visibility":true},{"id":"515e56d5-728f-4da8-9723-40965fc05e7b","type":"page","visibility":true},{"id":"72efa367-6048-4f26-9c5b-d37fb2606498","type":"page","visibility":true},{"type":"page","id":"88bf8fa0-779b-4b60-b916-8016e4ce4239","visibility":false},{"id":"494b19b5-c808-446d-bc2a-395537e32a44","type":"page","visibility":false},{"type":"dropdown","title":"FAQ","id":"712b79a0-bed3-45a6-a9be-c39cab0c7e6c","items":[{"id":"8b16d3e7-ada6-4363-8770-86387bc837aa","type":"page","visibility":true},{"id":"92b724fd-d960-4098-9059-255fed59e48e","type":"page","visibility":true},{"id":"e0e5bfb8-a3d0-4251-a9a1-191b0bd0fce0","type":"page","visibility":true},{"id":"f229404f-367f-4bb8-b52a-38507413542c","type":"page","visibility":true},{"id":"2d5e69b3-7908-4a72-b5ce-46362bd7ad35","type":"page","visibility":true}]}],"links":[]},"migrateFeatures":{"migratedRtlFeatureListE":true,"migratedRtlBlogImageAlignment":true,"migratedRtlSlider":true,"migratedS6SectionPadding":false,"migrateS6SectionContentPosition":false}}};$S.siteData={"terms_text":null,"privacy_policy_text":null,"show_terms_and_conditions":false,"show_privacy_policy":false,"gdpr_html":null,"live_chat":null};$S.stores={"fonts_v2":[{"name":"libre baskerville","fontType":"google","displayName":"Libre Baskerville","cssValue":"\"libre baskerville\"","settings":{"weight":"regular,500,600,700,italic,500italic,600italic,700italic"},"hidden":false,"cssFallback":"serif","disableBody":false,"isSuggested":true}],"features":{"allFeatures":[{"name":"ecommerce_shipping_region","canBeUsed":true,"hidden":false},{"name":"ecommerce_taxes","canBeUsed":true,"hidden":false},{"name":"ecommerce_category","canBeUsed":true,"hidden":false},{"name":"product_page","canBeUsed":true,"hidden":false},{"name":"ecommerce_free_shipping","canBeUsed":true,"hidden":false},{"name":"ecommerce_custom_product_url","canBeUsed":true,"hidden":false},{"name":"ecommerce_coupon","canBeUsed":true,"hidden":false},{"name":"ecommerce_checkout_form","canBeUsed":true,"hidden":false},{"name":"mobile_actions","canBeUsed":true,"hidden":false},{"name":"ecommerce_layout","canBeUsed":true,"hidden":false},{"name":"portfolio_layout","canBeUsed":true,"hidden":false},{"name":"analytics","canBeUsed":true,"hidden":false},{"name":"fb_image","canBeUsed":true,"hidden":false},{"name":"twitter_card","canBeUsed":true,"hidden":false},{"name":"favicon","canBeUsed":true,"hidden":false},{"name":"style_panel","canBeUsed":true,"hidden":false},{"name":"google_analytics","canBeUsed":true,"hidden":false},{"name":"blog_custom_url","canBeUsed":true,"hidden":false},{"name":"page_collaboration","canBeUsed":true,"hidden":false},{"name":"bookings","canBeUsed":true,"hidden":false},{"name":"membership","canBeUsed":true,"hidden":false},{"name":"social_feed_facebook_page","canBeUsed":true,"hidden":false},{"name":"portfolio_category","canBeUsed":true,"hidden":false},{"name":"premium_templates","canBeUsed":true,"hidden":false},{"name":"custom_domain","canBeUsed":true,"hidden":false},{"name":"premium_support","canBeUsed":true,"hidden":false},{"name":"remove_branding_title","canBeUsed":true,"hidden":false},{"name":"full_analytics","canBeUsed":true,"hidden":false},{"name":"ecommerce_layout","canBeUsed":true,"hidden":false},{"name":"portfolio_layout","canBeUsed":true,"hidden":false},{"name":"ecommerce_digital_download","canBeUsed":true,"hidden":false},{"name":"disable_captcha","canBeUsed":true,"hidden":false},{"name":"password_protection","canBeUsed":true,"hidden":false},{"name":"remove_logo","canBeUsed":true,"hidden":false},{"name":"optimizely","canBeUsed":true,"hidden":false},{"name":"custom_code","canBeUsed":true,"hidden":false},{"name":"blog_custom_code","canBeUsed":true,"hidden":false},{"name":"premium_assets","canBeUsed":true,"hidden":false},{"name":"premium_apps","canBeUsed":true,"hidden":false},{"name":"premium_sections","canBeUsed":true,"hidden":false},{"name":"blog_mailchimp_integration","canBeUsed":true,"hidden":false},{"name":"multiple_page","canBeUsed":true,"hidden":false},{"name":"ecommerce_layout","canBeUsed":true,"hidden":false},{"name":"portfolio_layout","canBeUsed":true,"hidden":false},{"name":"facebook_pixel","canBeUsed":true,"hidden":false},{"name":"blog_category","canBeUsed":true,"hidden":false},{"name":"custom_font","canBeUsed":true,"hidden":false},{"name":"blog_post_amp","canBeUsed":true,"hidden":false},{"name":"site_search","canBeUsed":true,"hidden":false},{"name":"portfolio_category","canBeUsed":true,"hidden":false},{"name":"popup","canBeUsed":true,"hidden":false},{"name":"custom_form","canBeUsed":true,"hidden":false},{"name":"portfolio_custom_product_url","canBeUsed":true,"hidden":false},{"name":"email_automation","canBeUsed":true,"hidden":false},{"name":"blog_password_protection","canBeUsed":true,"hidden":false},{"name":"custom_ads","canBeUsed":true,"hidden":false},{"name":"portfolio_form_custom_fields","canBeUsed":true,"hidden":false},{"name":"live_chat","canBeUsed":false,"hidden":false},{"name":"auto_translation","canBeUsed":false,"hidden":false},{"name":"membership_tier","canBeUsed":false,"hidden":false},{"name":"redirect_options","canBeUsed":false,"hidden":false},{"name":"portfolio_region_options","canBeUsed":false,"hidden":false},{"name":"require_contact_info_view_portfolio","canBeUsed":false,"hidden":false},{"name":"ecommerce_product_add_on_categories","canBeUsed":false,"hidden":false}]},"showStatic":{"footerLogoSeoData":{"anchor_link":"https:\/\/www.strikingly.com\/?ref=logo\u0026permalink=sociable-clam-11bt3tx\u0026custom_domain=www.appyourplatform.info\u0026utm_campaign=footer_pbs\u0026utm_content=https%3A%2F%2Fwww.appyourplatform.info%2F\u0026utm_medium=user_page\u0026utm_source=25433219\u0026utm_term=pbs_b","anchor_text":"How to make a website"},"isEditMode":false},"ecommerceProductCollection":{"data":{"products":[]}},"ecommerceProductOrderList":{},"ecommerceCategoryCollection":null,"hasEcommerceProducts":false,"portfolioCategoryCollection":null,"hasPortfolioProducts":false,"blogCategoryCollection":{},"hasBlogs":true};$S.liveBlog=true;