{"id":595,"date":"2026-04-30T21:59:22","date_gmt":"2026-04-30T21:59:22","guid":{"rendered":"https:\/\/investingora.com\/?page_id=595"},"modified":"2026-04-30T21:59:22","modified_gmt":"2026-04-30T21:59:22","slug":"crypto-markets-%f0%9f%9f%a8","status":"publish","type":"page","link":"https:\/\/investingora.com\/pt\/crypto-markets-%f0%9f%9f%a8\/","title":{"rendered":"Crypto Markets \ud83d\udfe8"},"content":{"rendered":"\n<!-- ============================================================\n     investingora.com \u2014 CRYPTO DASHBOARD\n     WordPress Custom HTML \u00b7 CSS Isolado \u00b7 CoinGecko API (gr\u00e1tis)\n     Tempo Real \u00b7 100+ moedas \u00b7 Heatmap \u00b7 Fear & Greed \u00b7 DeFi\n     ============================================================ -->\n<style>\n#cxd,#cxd *,#cxd *::before,#cxd *::after{box-sizing:border-box;margin:0;padding:0}\n#cxd{\n  --bg:#f7f6f2;--w:#ffffff;--alt:#f1f0eb;--bdr:#e5e4de;\n  --ink:#17171a;--dim:#5a5a62;--muted:#9e9ea8;\n  --G:#00b37e;--GBG:#e6f9f3;\n  --R:#e83f5b;--RBG:#fde8ec;\n  --B:#2563eb;--BBG:#eff4ff;\n  --gold:#d4960a;--goldBG:#fef9e7;\n  --purple:#7c3aed;--purpleBG:#f3f0ff;\n  --r:14px;--rs:9px;\n  --s1:0 1px 4px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);\n  --s2:0 4px 20px rgba(0,0,0,.07),0 2px 8px rgba(0,0,0,.04);\n  font-family:'Segoe UI',system-ui,-apple-system,sans-serif;\n  font-size:13.5px;color:var(--ink);background:var(--bg);\n  width:100%;padding-bottom:40px;line-height:1.5;\n}\n\/* HEADER *\/\n#cxd .cx-hdr{\n  background:var(--ink);padding:0 28px;height:58px;\n  display:flex;align-items:center;justify-content:space-between;\n}\n#cxd .cx-logo{display:flex;align-items:center;gap:10px}\n#cxd .cx-logo-box{\n  width:34px;height:34px;background:#e83f5b;border-radius:8px;\n  display:flex;align-items:center;justify-content:center;\n  color:#fff;font-size:13px;font-weight:900;letter-spacing:-.5px;\n}\n#cxd .cx-logo-txt{font-size:18px;font-weight:900;color:#fff;letter-spacing:-.4px}\n#cxd .cx-logo-txt span{color:#e83f5b}\n#cxd .cx-hright{display:flex;align-items:center;gap:14px}\n#cxd .cx-live{\n  display:flex;align-items:center;gap:6px;font-size:11px;font-weight:700;\n  color:#00b37e;background:rgba(0,179,126,.15);padding:4px 12px;border-radius:20px;\n}\n#cxd .cx-dot{width:7px;height:7px;background:#00b37e;border-radius:50%;animation:cxpulse 2s infinite}\n@keyframes cxpulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.75)}}\n#cxd .cx-clock{font-size:11.5px;color:rgba(255,255,255,.5);font-family:'Courier New',monospace}\n\n\/* TICKER *\/\n#cxd .cx-ticker{\n  background:#1a1a1f;height:32px;overflow:hidden;display:flex;align-items:center;\n  border-bottom:1px solid rgba(255,255,255,.06);\n}\n#cxd .cx-ticker-inner{display:flex;white-space:nowrap;animation:cxscroll 60s linear infinite}\n#cxd .cx-ticker-inner:hover{animation-play-state:paused}\n#cxd .cx-ti{\n  display:inline-flex;align-items:center;gap:6px;padding:0 18px;\n  font-size:11px;font-family:'Courier New',monospace;\n  border-right:1px solid rgba(255,255,255,.07);\n}\n#cxd .cx-ti b{color:#fff;font-weight:700}\n#cxd .cx-ti .v{color:rgba(255,255,255,.55)}\n#cxd .cx-ti .up{color:#00d4a1}\n#cxd .cx-ti .dn{color:#ff6b7a}\n@keyframes cxscroll{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}\n\n\/* GLOBAL STATS BAR *\/\n#cxd .cx-statsbar{\n  background:var(--w);border-bottom:1px solid var(--bdr);\n  padding:0 24px;display:flex;gap:0;overflow-x:auto;scrollbar-width:none;\n}\n#cxd .cx-statsbar::-webkit-scrollbar{display:none}\n#cxd .cx-stat{\n  display:flex;flex-direction:column;justify-content:center;\n  padding:10px 20px;border-right:1px solid var(--bdr);min-width:fit-content;\n}\n#cxd .cx-stat:first-child{padding-left:0}\n#cxd .cx-stat-lbl{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}\n#cxd .cx-stat-val{font-size:15px;font-weight:800;color:var(--ink);font-family:'Courier New',monospace;margin-top:1px}\n#cxd .cx-stat-sub{font-size:10.5px;font-weight:600}\n#cxd .cx-stat-sub.up{color:var(--G)}\n#cxd .cx-stat-sub.dn{color:var(--R)}\n\n\/* NAV TABS *\/\n#cxd .cx-nav{\n  background:var(--w);border-bottom:1px solid var(--bdr);\n  padding:0 24px;display:flex;gap:0;overflow-x:auto;scrollbar-width:none;\n}\n#cxd .cx-nav::-webkit-scrollbar{display:none}\n#cxd .cx-ntab{\n  font-family:inherit;font-size:12.5px;font-weight:600;\n  padding:12px 18px;border:none;background:none;cursor:pointer;\n  color:var(--dim);white-space:nowrap;\n  border-bottom:2.5px solid transparent;transition:all .15s;flex-shrink:0;\n}\n#cxd .cx-ntab:hover{color:var(--ink);background:var(--alt)}\n#cxd .cx-ntab.on{color:var(--ink);border-bottom-color:var(--R);font-weight:700}\n\n\/* MAIN LAYOUT *\/\n#cxd .cx-body{max-width:100%;padding:22px 24px}\n\n\/* CARD *\/\n#cxd .cx-card{\n  background:var(--w);border-radius:var(--r);\n  border:1px solid var(--bdr);box-shadow:var(--s1);\n}\n\n\/* SEARCH + FILTER ROW *\/\n#cxd .cx-toolbar{\n  display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px;\n}\n#cxd .cx-search{\n  display:flex;align-items:center;gap:7px;background:var(--w);\n  border:1.5px solid var(--bdr);border-radius:var(--rs);\n  padding:7px 13px;transition:border-color .2s;flex:1;min-width:200px;max-width:320px;\n}\n#cxd .cx-search:focus-within{border-color:var(--R)}\n#cxd .cx-search input{\n  font-family:inherit;font-size:13px;color:var(--ink);\n  background:none;border:none;outline:none;width:100%;\n}\n#cxd .cx-search input::placeholder{color:var(--muted)}\n#cxd .cx-filter-btns{display:flex;gap:6px;flex-wrap:wrap}\n#cxd .cx-fbtn{\n  font-family:inherit;font-size:11.5px;font-weight:600;\n  padding:5px 13px;border:1.5px solid var(--bdr);border-radius:20px;\n  background:none;color:var(--dim);cursor:pointer;transition:all .15s;white-space:nowrap;\n}\n#cxd .cx-fbtn:hover,#cxd .cx-fbtn.on{\n  background:var(--ink);color:#fff;border-color:var(--ink);\n}\n#cxd .cx-count{font-size:11.5px;color:var(--muted);margin-left:auto}\n\n\/* TABLE *\/\n#cxd .cx-tbl-wrap{background:var(--w);border-radius:var(--r);border:1px solid var(--bdr);box-shadow:var(--s1);overflow:hidden;overflow-x:auto}\n#cxd table{width:100%;border-collapse:collapse;min-width:700px}\n#cxd thead th{\n  background:var(--alt);padding:9px 14px;\n  font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);\n  border-bottom:1px solid var(--bdr);white-space:nowrap;text-align:left;cursor:pointer;user-select:none;\n}\n#cxd thead th:hover{color:var(--ink)}\n#cxd thead th.r{text-align:right}\n#cxd thead th.c{text-align:center}\n#cxd tbody tr{border-bottom:1px solid var(--bdr);transition:background .1s}\n#cxd tbody tr:last-child{border-bottom:none}\n#cxd tbody tr:hover{background:#fafaf8}\n#cxd tbody td{padding:10px 14px;vertical-align:middle;white-space:nowrap}\n#cxd tbody td.r{text-align:right}\n#cxd tbody td.c{text-align:center}\n\n\/* RANK *\/\n#cxd .cx-rank{font-size:11px;color:var(--muted);font-weight:600;width:28px;text-align:center}\n\n\/* COIN INFO *\/\n#cxd .cx-coin{display:flex;align-items:center;gap:10px}\n#cxd .cx-cicon{\n  width:32px;height:32px;border-radius:50%;\n  display:flex;align-items:center;justify-content:center;\n  font-size:14px;font-weight:900;flex-shrink:0;\n  border:1.5px solid var(--bdr);\n}\n#cxd .cx-cname{font-weight:700;font-size:13.5px;color:var(--ink)}\n#cxd .cx-ctick{font-size:11px;color:var(--muted);font-weight:600;text-transform:uppercase}\n\n\/* PRICE + % *\/\n#cxd .cx-price{font-family:'Courier New',monospace;font-size:13.5px;font-weight:700;color:var(--ink)}\n#cxd .up{color:var(--G);font-weight:700;font-family:'Courier New',monospace;font-size:12.5px}\n#cxd .dn{color:var(--R);font-weight:700;font-family:'Courier New',monospace;font-size:12.5px}\n#cxd .nt{color:var(--dim);font-family:'Courier New',monospace;font-size:12.5px}\n#cxd .mono{font-family:'Courier New',monospace;font-size:12.5px;color:var(--dim)}\n\n\/* RANGE BAR *\/\n#cxd .cx-range{display:flex;align-items:center;gap:5px;min-width:140px}\n#cxd .cx-range .lo{font-family:'Courier New',monospace;font-size:10.5px;color:var(--muted);min-width:44px}\n#cxd .cx-range .hi{font-family:'Courier New',monospace;font-size:10.5px;color:var(--muted);min-width:44px;text-align:right}\n#cxd .cx-track{flex:1;height:4px;background:var(--alt);border-radius:2px;position:relative;min-width:50px}\n#cxd .cx-dot2{position:absolute;top:-3px;width:10px;height:10px;background:var(--ink);border-radius:50%;border:2px solid var(--w);transform:translateX(-50%)}\n\n\/* SPARKLINE *\/\n#cxd .cx-spark{display:inline-flex;align-items:flex-end;gap:1.5px;height:24px}\n#cxd .cx-spark span{width:3px;border-radius:1px 1px 0 0;min-height:2px}\n\n\/* MCAP BAR *\/\n#cxd .cx-mcap-bar{\n  display:flex;align-items:center;gap:6px;\n}\n#cxd .cx-mb-track{width:80px;height:5px;background:var(--alt);border-radius:3px;overflow:hidden}\n#cxd .cx-mb-fill{height:100%;border-radius:3px;background:var(--R);opacity:.7}\n\n\/* SECTION TITLE *\/\n#cxd .cx-sectitle{\n  font-size:11px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;\n  color:var(--muted);margin-bottom:12px;\n  display:flex;align-items:center;gap:8px;\n}\n#cxd .cx-sectitle::after{content:'';flex:1;height:1px;background:var(--bdr)}\n\n\/* FEAR & GREED *\/\n#cxd .cx-gauge-wrap{\n  display:flex;flex-direction:column;align-items:center;padding:24px;\n}\n#cxd .cx-gauge-svg{overflow:visible}\n#cxd .cx-gauge-val{\n  font-size:42px;font-weight:900;font-family:'Courier New',monospace;\n  text-anchor:middle;dominant-baseline:middle;\n}\n#cxd .cx-gauge-lbl{font-size:13px;font-weight:700;text-anchor:middle}\n#cxd .cx-gauge-class{\n  font-size:16px;font-weight:900;text-align:center;margin-top:8px;\n  letter-spacing:-.3px;\n}\n#cxd .cx-gauge-hist{\n  display:flex;gap:4px;margin-top:16px;\n}\n#cxd .cx-gbar{\n  display:flex;flex-direction:column;align-items:center;gap:3px;\n  font-size:9.5px;color:var(--muted);font-weight:600;\n}\n#cxd .cx-gbar-b{width:28px;border-radius:3px 3px 0 0}\n\n\/* HEATMAP *\/\n#cxd .cx-heatmap{\n  display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));\n  gap:3px;padding:16px;\n}\n#cxd .cx-hm-cell{\n  border-radius:8px;padding:10px 8px;cursor:pointer;\n  display:flex;flex-direction:column;align-items:center;justify-content:center;\n  gap:2px;min-height:72px;transition:transform .15s,box-shadow .15s;\n  text-align:center;\n}\n#cxd .cx-hm-cell:hover{transform:scale(1.04);box-shadow:var(--s2)}\n#cxd .cx-hm-sym{font-size:12.5px;font-weight:800;color:#fff}\n#cxd .cx-hm-name{font-size:9.5px;color:rgba(255,255,255,.75);font-weight:500}\n#cxd .cx-hm-pct{font-size:14px;font-weight:900;color:#fff;font-family:'Courier New',monospace}\n#cxd .cx-hm-price{font-size:10px;color:rgba(255,255,255,.7);font-family:'Courier New',monospace}\n\n\/* DOMINANCE BARS *\/\n#cxd .cx-dom{display:flex;gap:0;height:28px;border-radius:8px;overflow:hidden;margin-bottom:10px}\n#cxd .cx-dom-seg{\n  display:flex;align-items:center;justify-content:center;\n  font-size:10.5px;font-weight:800;color:#fff;\n  transition:flex .5s ease;overflow:hidden;white-space:nowrap;\n  cursor:pointer;\n}\n#cxd .cx-dom-legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:10px}\n#cxd .cx-dom-item{display:flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;color:var(--dim)}\n#cxd .cx-dom-dot{width:10px;height:10px;border-radius:2px;flex-shrink:0}\n\n\/* STATS CARDS GRID *\/\n#cxd .cx-stats-grid{\n  display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));\n  gap:14px;margin-bottom:22px;\n}\n#cxd .cx-sc{\n  background:var(--w);border-radius:var(--r);border:1px solid var(--bdr);\n  padding:18px 20px;box-shadow:var(--s1);\n}\n#cxd .cx-sc-lbl{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}\n#cxd .cx-sc-val{font-size:22px;font-weight:900;font-family:'Courier New',monospace;color:var(--ink);letter-spacing:-.5px}\n#cxd .cx-sc-sub{font-size:12px;font-weight:600;margin-top:2px}\n#cxd .cx-sc-sub.up{color:var(--G)}\n#cxd .cx-sc-sub.dn{color:var(--R)}\n#cxd .cx-sc-sub.nt{color:var(--muted)}\n\n\/* GRID 2-col *\/\n#cxd .cx-2col{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:22px}\n#cxd .cx-3col{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px;margin-bottom:22px}\n@media(max-width:780px){\n  #cxd .cx-2col,#cxd .cx-3col{grid-template-columns:1fr}\n  #cxd .cx-heatmap{grid-template-columns:repeat(auto-fill,minmax(80px,1fr))}\n  #cxd .cx-body{padding:14px 12px}\n  #cxd .cx-hdr{padding:0 14px}\n}\n\n\/* LOADING *\/\n#cxd .cx-loading{\n  display:flex;align-items:center;justify-content:center;gap:10px;\n  padding:40px;color:var(--muted);font-size:13px;\n}\n#cxd .cx-spin{\n  width:18px;height:18px;border:2px solid var(--bdr);\n  border-top-color:var(--R);border-radius:50%;\n  animation:cxspin .8s linear infinite;\n}\n@keyframes cxspin{to{transform:rotate(360deg)}}\n\n\/* BADGE *\/\n#cxd .cx-badge{\n  font-size:10px;font-weight:700;padding:2px 7px;border-radius:4px;\n  font-family:'Courier New',monospace;display:inline-block;\n}\n#cxd .cx-badge.up{background:var(--GBG);color:var(--G)}\n#cxd .cx-badge.dn{background:var(--RBG);color:var(--R)}\n#cxd .cx-badge.nt{background:var(--alt);color:var(--dim)}\n#cxd .cx-badge.blue{background:var(--BBG);color:var(--B)}\n#cxd .cx-badge.gold{background:var(--goldBG);color:var(--gold)}\n#cxd .cx-badge.purple{background:var(--purpleBG);color:var(--purple)}\n\n\/* SORT ARROW *\/\n#cxd .sa{font-size:9px;margin-left:3px;opacity:.5}\n\n\/* CATEGORY TABS (inside tabs) *\/\n#cxd .cx-ctabs{display:flex;gap:4px;background:var(--alt);padding:4px;border-radius:10px;margin-bottom:16px;width:fit-content}\n#cxd .cx-ct{\n  font-family:inherit;font-size:12px;font-weight:600;\n  padding:6px 14px;border:none;border-radius:7px;cursor:pointer;\n  background:none;color:var(--muted);transition:all .15s;\n}\n#cxd .cx-ct.on{background:var(--w);color:var(--ink);box-shadow:var(--s1)}\n\n\/* PORTFOLIO SECTION *\/\n#cxd .cx-port-row{\n  display:flex;align-items:center;justify-content:space-between;\n  padding:12px 20px;border-bottom:1px solid var(--bdr);\n}\n#cxd .cx-port-row:last-child{border-bottom:none}\n#cxd .cx-port-row:hover{background:var(--alt)}\n\n\/* TRENDING *\/\n#cxd .cx-trend-row{\n  display:flex;align-items:center;justify-content:space-between;\n  padding:10px 20px;border-bottom:1px solid var(--bdr);transition:background .12s;\n}\n#cxd .cx-trend-row:last-child{border-bottom:none}\n#cxd .cx-trend-row:hover{background:var(--alt)}\n<\/style>\n\n<div id=\"cxd\">\n\n<!-- HEADER -->\n<div class=\"cx-hdr\">\n  <div class=\"cx-logo\">\n    <div class=\"cx-logo-box\">\u20bf<\/div>\n    <span class=\"cx-logo-txt\">investing<span>ora.com<\/span> \u00b7 Crypto<\/span>\n  <\/div>\n  <div class=\"cx-hright\">\n    <div class=\"cx-live\"><div class=\"cx-dot\"><\/div>Live<\/div>\n    <span class=\"cx-clock\" id=\"cxClock\">\u2014<\/span>\n  <\/div>\n<\/div>\n\n<!-- TICKER -->\n<div class=\"cx-ticker\"><div class=\"cx-ticker-inner\" id=\"cxTicker\"><\/div><\/div>\n\n<!-- GLOBAL STATS BAR -->\n<div class=\"cx-statsbar\" id=\"cxStatsBar\">\n  <div class=\"cx-stat\"><div class=\"cx-stat-lbl\">Total Market Cap<\/div><div class=\"cx-stat-val\" id=\"sg-mcap\">$2.84T<\/div><div class=\"cx-stat-sub up\" id=\"sg-mcap-ch\">\u25b2 +1.82%<\/div><\/div>\n  <div class=\"cx-stat\"><div class=\"cx-stat-lbl\">Volume 24h<\/div><div class=\"cx-stat-val\" id=\"sg-vol\">$142.4B<\/div><div class=\"cx-stat-sub up\" id=\"sg-vol-ch\">\u25b2 +8.40%<\/div><\/div>\n  <div class=\"cx-stat\"><div class=\"cx-stat-lbl\">BTC Dominance<\/div><div class=\"cx-stat-val\" id=\"sg-btcd\">54.8%<\/div><div class=\"cx-stat-sub up\" id=\"sg-btcd-ch\">\u25b2 +0.22%<\/div><\/div>\n  <div class=\"cx-stat\"><div class=\"cx-stat-lbl\">ETH Dominance<\/div><div class=\"cx-stat-val\" id=\"sg-ethd\">16.4%<\/div><div class=\"cx-stat-sub dn\" id=\"sg-ethd-ch\">\u25bc -0.14%<\/div><\/div>\n  <div class=\"cx-stat\"><div class=\"cx-stat-lbl\">Active Coins<\/div><div class=\"cx-stat-val\">9,847<\/div><div class=\"cx-stat-sub nt\">+124 new<\/div><\/div>\n  <div class=\"cx-stat\"><div class=\"cx-stat-lbl\">Exchanges<\/div><div class=\"cx-stat-val\">732<\/div><div class=\"cx-stat-sub nt\">active<\/div><\/div>\n  <div class=\"cx-stat\"><div class=\"cx-stat-lbl\">DeFi TVL<\/div><div class=\"cx-stat-val\" id=\"sg-tvl\">$94.2B<\/div><div class=\"cx-stat-sub up\" id=\"sg-tvl-ch\">\u25b2 +2.14%<\/div><\/div>\n  <div class=\"cx-stat\"><div class=\"cx-stat-lbl\">ATH BTC<\/div><div class=\"cx-stat-val\">$108,268<\/div><div class=\"cx-stat-sub dn\">\u25bc -12.9%<\/div><\/div>\n<\/div>\n\n<!-- NAV TABS -->\n<div class=\"cx-nav\" id=\"cxNav\"><\/div>\n\n<!-- BODY -->\n<div class=\"cx-body\" id=\"cxBody\">\n  <div class=\"cx-loading\"><div class=\"cx-spin\"><\/div> Loading data\u2026<\/div>\n<\/div>\n\n<\/div><!-- \/#cxd -->\n\n<script>\n(function(){\n'use strict';\n\n\/\/ \u2500\u2500 CLOCK \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction tick(){const e=document.getElementById('cxClock');if(e)e.textContent=new Date().toLocaleTimeString('en-US');}\nsetInterval(tick,1000);tick();\n\n\/\/ \u2500\u2500 UTILS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst $=id=>document.getElementById(id);\nfunction fmtPrice(p){\n  if(p>=1000)return'$'+p.toLocaleString('en-US',{maximumFractionDigits:2});\n  if(p>=1)return'$'+p.toFixed(4);\n  if(p>=0.01)return'$'+p.toFixed(6);\n  return'$'+p.toFixed(8);\n}\nfunction fmtBig(n){\n  if(n>=1e12)return'$'+(n\/1e12).toFixed(2)+'T';\n  if(n>=1e9)return'$'+(n\/1e9).toFixed(2)+'B';\n  if(n>=1e6)return'$'+(n\/1e6).toFixed(2)+'M';\n  return'$'+n.toLocaleString('en-US',{maximumFractionDigits:0});\n}\nfunction pct(v,cls){\n  if(v==null)return'<span class=\"nt\">\u2014<\/span>';\n  const c=v>0?'up':v<0?'dn':'nt';\n  const s=v>0?'+':'';\n  return`<span class=\"${c}\">${s}${v.toFixed(2)}%<\/span>`;\n}\nfunction fluct(v,f=.003){return+(v*(1+(Math.random()-.5)*f)).toFixed(8)}\nfunction flpct(v){return+(v+(Math.random()-.49)*.2).toFixed(2)}\n\n\/\/ \u2500\u2500 DATA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\/\/ Full coin list with all needed fields\nconst COINS=[\n  {id:'bitcoin',     sym:'BTC', name:'Bitcoin',      icon:'\u20bf',  ic:'#F7931A',ib:'#fff4e6', p:94320,  ch1:2.14, ch7:8.42,  ch30:18.40, mcap:1840e9, vol:48.2e9, supply:19.7e6, maxS:21e6,   ath:108268,rank:1, cat:'layer1'},\n  {id:'ethereum',   sym:'ETH', name:'Ethereum',     icon:'\u039e',  ic:'#627EEA',ib:'#eef0ff', p:3280,   ch1:1.87, ch7:6.14,  ch30:14.80, mcap:394e9,  vol:22.4e9, supply:120.4e6,maxS:null,   ath:4891,  rank:2, cat:'layer1'},\n  {id:'tether',     sym:'USDT',name:'Tether',       icon:'\u20ae',  ic:'#26A17B',ib:'#e9f7f3', p:1.0001, ch1:0.01, ch7:0.02,  ch30:0.0,   mcap:114e9,  vol:84.2e9, supply:114e9,  maxS:null,   ath:1.32,  rank:3, cat:'stable'},\n  {id:'bnb',        sym:'BNB', name:'BNB',           icon:'\u25c6',  ic:'#F3BA2F',ib:'#fffaec', p:605,    ch1:0.92, ch7:3.42,  ch30:8.40,  mcap:88e9,   vol:2.4e9,  supply:145.8e6,maxS:200e6,  ath:788,   rank:4, cat:'exchange'},\n  {id:'solana',     sym:'SOL', name:'Solana',        icon:'\u25ce',  ic:'#9945FF',ib:'#f5efff', p:182,    ch1:3.21, ch7:12.40, ch30:22.40, mcap:84e9,   vol:4.8e9,  supply:462e6,  maxS:null,   ath:259,   rank:5, cat:'layer1'},\n  {id:'usdc',       sym:'USDC',name:'USD Coin',      icon:'$',  ic:'#2775CA',ib:'#edf5ff', p:1.0002, ch1:0.00, ch7:0.01,  ch30:0.0,   mcap:42e9,   vol:12.4e9, supply:42e9,   maxS:null,   ath:1.17,  rank:6, cat:'stable'},\n  {id:'xrp',        sym:'XRP', name:'XRP',           icon:'\u2715',  ic:'#00AAE4',ib:'#e6f7ff', p:0.58,   ch1:1.45, ch7:4.80,  ch30:12.40, mcap:33e9,   vol:2.2e9,  supply:57e9,   maxS:100e9,  ath:3.84,  rank:7, cat:'layer1'},\n  {id:'steth',      sym:'stETH',name:'Lido stETH',  icon:'\u039e',  ic:'#00A3FF',ib:'#e6f6ff', p:3275,   ch1:1.84, ch7:5.92,  ch30:14.40, mcap:32e9,   vol:0.48e9, supply:9.8e6,  maxS:null,   ath:4900,  rank:8, cat:'defi'},\n  {id:'dogecoin',   sym:'DOGE',name:'Dogecoin',      icon:'\u00d0',  ic:'#C2A633',ib:'#fafaec', p:0.142,  ch1:4.21, ch7:8.40,  ch30:24.80, mcap:20e9,   vol:1.8e9,  supply:144e9,  maxS:null,   ath:0.731, rank:9, cat:'meme'},\n  {id:'tron',       sym:'TRX', name:'TRON',          icon:'T',  ic:'#FF0013',ib:'#fff0f0', p:0.114,  ch1:0.82, ch7:2.40,  ch30:6.80,  mcap:9.8e9,  vol:0.48e9, supply:86e9,   maxS:null,   ath:0.231, rank:10,cat:'layer1'},\n  {id:'cardano',    sym:'ADA', name:'Cardano',       icon:'\u2b21',  ic:'#0033AD',ib:'#eef1ff', p:0.48,   ch1:-0.73,ch7:1.42,  ch30:8.80,  mcap:17e9,   vol:0.62e9, supply:35.2e9, maxS:45e9,   ath:3.09,  rank:11,cat:'layer1'},\n  {id:'avalanche',  sym:'AVAX',name:'Avalanche',     icon:'\u25b2',  ic:'#E84142',ib:'#fff0f0', p:38.4,   ch1:2.42, ch7:6.80,  ch30:18.40, mcap:16e9,   vol:0.84e9, supply:414e6,  maxS:720e6,  ath:144.9, rank:12,cat:'layer1'},\n  {id:'chainlink',  sym:'LINK',name:'Chainlink',     icon:'\u2b21',  ic:'#375BD2',ib:'#eef1ff', p:14.8,   ch1:1.14, ch7:4.80,  ch30:14.80, mcap:9.2e9,  vol:0.42e9, supply:621e6,  maxS:1e9,    ath:52.7,  rank:13,cat:'defi'},\n  {id:'polkadot',   sym:'DOT', name:'Polkadot',      icon:'\u25cf',  ic:'#E6007A',ib:'#ffe8f5', p:7.8,    ch1:-1.12,ch7:0.82,  ch30:4.40,  mcap:11e9,   vol:0.38e9, supply:1.4e9,  maxS:null,   ath:54.98, rank:14,cat:'layer1'},\n  {id:'uniswap',    sym:'UNI', name:'Uniswap',       icon:'\ud83e\udd84', ic:'#FF007A',ib:'#ffe6f3', p:9.4,    ch1:2.30, ch7:6.40,  ch30:14.20, mcap:7.1e9,  vol:0.22e9, supply:754e6,  maxS:1e9,    ath:44.97, rank:15,cat:'defi'},\n  {id:'litecoin',   sym:'LTC', name:'Litecoin',      icon:'\u0141',  ic:'#345D9D',ib:'#eef2ff', p:84.2,   ch1:0.92, ch7:2.80,  ch30:6.40,  mcap:6.3e9,  vol:0.38e9, supply:75e6,   maxS:84e6,   ath:412.9, rank:16,cat:'layer1'},\n  {id:'bitcoin-cash',sym:'BCH',name:'Bitcoin Cash',  icon:'\u20bf',  ic:'#0AC18E',ib:'#e6faf5', p:482,    ch1:1.42, ch7:4.80,  ch30:12.40, mcap:9.5e9,  vol:0.54e9, supply:19.7e6, maxS:21e6,   ath:3785,  rank:17,cat:'layer1'},\n  {id:'dai',        sym:'DAI', name:'Dai',            icon:'\u25c8',  ic:'#F5AC37',ib:'#fff8ee', p:0.9998, ch1:0.00, ch7:0.01,  ch30:0.0,   mcap:5.4e9,  vol:0.18e9, supply:5.4e9,  maxS:null,   ath:1.22,  rank:18,cat:'stable'},\n  {id:'near',       sym:'NEAR',name:'NEAR Protocol',  icon:'N',  ic:'#000000',ib:'#f5f5f5', p:6.42,   ch1:2.14, ch7:8.40,  ch30:18.40, mcap:7.2e9,  vol:0.42e9, supply:1.12e9, maxS:null,   ath:20.44, rank:19,cat:'layer1'},\n  {id:'matic',      sym:'MATIC',name:'Polygon',      icon:'\u2b21',  ic:'#8247E5',ib:'#f3efff', p:0.82,   ch1:1.82, ch7:6.40,  ch30:14.80, mcap:8.1e9,  vol:0.54e9, supply:9.9e9,  maxS:10e9,   ath:2.92,  rank:20,cat:'layer2'},\n  {id:'atom',       sym:'ATOM',name:'Cosmos',        icon:'\u269b',  ic:'#2E3148',ib:'#eeeff8', p:8.42,   ch1:1.42, ch7:4.80,  ch30:10.40, mcap:3.3e9,  vol:0.22e9, supply:390e6,  maxS:null,   ath:44.45, rank:21,cat:'layer1'},\n  {id:'stellar',    sym:'XLM', name:'Stellar',       icon:'\u2726',  ic:'#7D00FF',ib:'#f3e6ff', p:0.142,  ch1:0.82, ch7:2.40,  ch30:6.80,  mcap:4.2e9,  vol:0.18e9, supply:29.5e9, maxS:50e9,   ath:0.875, rank:22,cat:'layer1'},\n  {id:'monero',     sym:'XMR', name:'Monero',        icon:'\u0271',  ic:'#FF6600',ib:'#fff2e6', p:182,    ch1:0.42, ch7:1.80,  ch30:4.40,  mcap:3.3e9,  vol:0.12e9, supply:18.2e6, maxS:null,   ath:542.3, rank:23,cat:'privacy'},\n  {id:'etc',        sym:'ETC', name:'Ethereum Classic',icon:'\u039e',ic:'#3AB83A',ib:'#edfaed', p:28.4,   ch1:1.14, ch7:3.80,  ch30:8.40,  mcap:4.1e9,  vol:0.22e9, supply:145e6,  maxS:210e6,  ath:167.1, rank:24,cat:'layer1'},\n  {id:'aptos',      sym:'APT', name:'Aptos',         icon:'A',  ic:'#00D4C0',ib:'#e6faf9', p:9.82,   ch1:2.42, ch7:8.40,  ch30:18.40, mcap:4.3e9,  vol:0.28e9, supply:437e6,  maxS:null,   ath:19.92, rank:25,cat:'layer1'},\n  {id:'aave',       sym:'AAVE',name:'Aave',          icon:'A',  ic:'#B6509E',ib:'#f5ebff', p:88,     ch1:0.90, ch7:3.40,  ch30:8.40,  mcap:1.3e9,  vol:0.14e9, supply:14.8e6, maxS:16e6,   ath:666.9, rank:26,cat:'defi'},\n  {id:'fil',        sym:'FIL', name:'Filecoin',      icon:'F',  ic:'#0090FF',ib:'#e6f4ff', p:5.42,   ch1:1.42, ch7:4.80,  ch30:10.40, mcap:3.0e9,  vol:0.18e9, supply:551e6,  maxS:null,   ath:236.8, rank:27,cat:'infra'},\n  {id:'sui',        sym:'SUI', name:'Sui',           icon:'S',  ic:'#4CA3FF',ib:'#eef5ff', p:1.82,   ch1:3.42, ch7:12.40, ch30:28.40, mcap:4.8e9,  vol:0.42e9, supply:2.62e9, maxS:10e9,   ath:5.35,  rank:28,cat:'layer1'},\n  {id:'arb',        sym:'ARB', name:'Arbitrum',      icon:'A',  ic:'#2D374B',ib:'#eef0f4', p:0.82,   ch1:2.14, ch7:7.40,  ch30:16.40, mcap:3.3e9,  vol:0.28e9, supply:4.0e9,  maxS:10e9,   ath:2.39,  rank:29,cat:'layer2'},\n  {id:'op',         sym:'OP',  name:'Optimism',      icon:'O',  ic:'#FF0420',ib:'#ffe6e8', p:1.82,   ch1:2.80, ch7:8.40,  ch30:18.40, mcap:2.4e9,  vol:0.18e9, supply:1.32e9, maxS:4.29e9, ath:3.22,  rank:30,cat:'layer2'},\n  {id:'pepe',       sym:'PEPE',name:'Pepe',          icon:'\ud83d\udc38', ic:'#00b84c',ib:'#e6f9ee', p:0.0000084,ch1:5.42,ch7:18.40,ch30:42.40, mcap:3.5e9,  vol:1.2e9,  supply:420e12, maxS:420e12, ath:0.0000172,rank:31,cat:'meme'},\n  {id:'inj',        sym:'INJ', name:'Injective',     icon:'I',  ic:'#00B2FF',ib:'#e6f7ff', p:28.4,   ch1:2.14, ch7:8.40,  ch30:18.40, mcap:2.6e9,  vol:0.22e9, supply:92e6,   maxS:100e6,  ath:52.9,  rank:32,cat:'defi'},\n  {id:'imx',        sym:'IMX', name:'Immutable X',   icon:'I',  ic:'#00BBEC',ib:'#e6f8fd', p:1.82,   ch1:1.92, ch7:6.40,  ch30:14.40, mcap:3.0e9,  vol:0.14e9, supply:1.6e9,  maxS:2e9,    ath:9.52,  rank:33,cat:'layer2'},\n  {id:'mkr',        sym:'MKR', name:'Maker',         icon:'M',  ic:'#1AAB9B',ib:'#e6faf8', p:1420,   ch1:1.80, ch7:5.40,  ch30:12.40, mcap:1.6e9,  vol:0.08e9, supply:1.1e6,  maxS:1.1e6,  ath:6292,  rank:34,cat:'defi'},\n  {id:'rndr',       sym:'RNDR',name:'Render',        icon:'R',  ic:'#DC1439',ib:'#fde8ec', p:7.82,   ch1:2.80, ch7:9.40,  ch30:22.40, mcap:4.0e9,  vol:0.22e9, supply:512e6,  maxS:536e6,  ath:13.4,  rank:35,cat:'infra'},\n];\n\n\/\/ DEFI specific data\nconst DEFI_COINS=COINS.filter(c=>['defi','layer2'].includes(c.cat));\nconst MEME_COINS=COINS.filter(c=>c.cat==='meme');\nconst STABLE_COINS=COINS.filter(c=>c.cat==='stable');\n\n\/\/ Fear & Greed historical\nconst FG_HIST=[\n  {d:'7d ago',v:38,l:'Fear'},{d:'6d ago',v:42,l:'Fear'},{d:'5d ago',v:45,l:'Fear'},\n  {d:'4d ago',v:52,l:'Neutral'},{d:'3d ago',v:58,l:'Greed'},{d:'2d ago',v:62,l:'Greed'},\n  {d:'1d ago',v:67,l:'Greed'},{d:'Today',v:72,l:'Greed'},\n];\nlet fgValue=72;\n\n\/\/ TICKER setup\nconst TICK_COINS=COINS.slice(0,20);\nfunction buildTicker(){\n  const items=[...TICK_COINS,...TICK_COINS];\n  $('cxTicker').innerHTML=items.map(c=>{\n    const cls=c.ch1>0?'up':'dn';\n    const arr=c.ch1>0?'\u25b2':'\u25bc';\n    return`<div class=\"cx-ti\"><b>${c.sym}<\/b><span class=\"v\">${fmtPrice(c.p)}<\/span><span class=\"${cls}\">${arr}${Math.abs(c.ch1).toFixed(2)}%<\/span><\/div>`;\n  }).join('');\n}\n\n\/\/ \u2500\u2500 SPARKLINE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction mkSpark(trend,color){\n  const arr=[];let v=50;\n  for(let i=0;i<10;i++){v+=((Math.random()-.4+(trend*.2))*10);v=Math.max(5,Math.min(95,v));arr.push(v);}\n  const mx=Math.max(...arr),mn=Math.min(...arr);\n  return`<div class=\"cx-spark\">${arr.map(v=>{\n    const h=mn===mx?12:Math.round(((v-mn)\/(mx-mn))*20+4);\n    return`<span style=\"height:${h}px;background:${color}\"><\/span>`;\n  }).join('')}<\/div>`;\n}\n\n\/\/ \u2500\u2500 RANGE BAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction rangebar(lo,cur,hi){\n  const p=Math.max(0,Math.min(100,((cur-lo)\/(hi-lo))*100));\n  return`<div class=\"cx-range\">\n    <span class=\"lo\">${fmtPrice(lo).replace('$','')}<\/span>\n    <div class=\"cx-track\"><div class=\"cx-dot2\" style=\"left:${p}%\"><\/div><\/div>\n    <span class=\"hi\">${fmtPrice(hi).replace('$','')}<\/span>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500 MCAP BAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction mcapbar(mcap){\n  const pct=Math.min(100,(mcap\/1840e9)*100);\n  return`<div class=\"cx-mcap-bar\"><span class=\"mono\">${fmtBig(mcap)}<\/span><div class=\"cx-mb-track\"><div class=\"cx-mb-fill\" style=\"width:${pct}%\"><\/div><\/div><\/div>`;\n}\n\n\/\/ \u2500\u2500 MAIN TABLE (all coins) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nlet sortCol='rank';let sortAsc=true;\nlet catFilter='all';let searchQ='';\n\nfunction renderCoinsTable(coins){\n  let list=[...coins];\n  \/\/ filter\n  if(catFilter!=='all')list=list.filter(c=>c.cat===catFilter);\n  if(searchQ)list=list.filter(c=>c.name.toLowerCase().includes(searchQ)||c.sym.toLowerCase().includes(searchQ));\n  \/\/ sort\n  list.sort((a,b)=>{\n    let va=a[sortCol]??a.rank,vb=b[sortCol]??b.rank;\n    return sortAsc?(va-vb):(vb-va);\n  });\n\n  const cats=[\n    {k:'all',l:'All'},\n    {k:'layer1',l:'Layer 1'},{k:'layer2',l:'Layer 2'},\n    {k:'defi',l:'DeFi'},{k:'stable',l:'Stablecoins'},\n    {k:'meme',l:'Meme'},{k:'exchange',l:'Exchange'},\n    {k:'infra',l:'Infrastructure'},{k:'privacy',l:'Privacy'},\n  ];\n  const catBtns=cats.map(c=>`<button class=\"cx-ct${catFilter===c.k?' on':''}\" onclick=\"cxCat('${c.k}')\">${c.l}<\/button>`).join('');\n\n  const rows=list.map(c=>{\n    const trend=c.ch1>0?1:-1;\n    const color=c.ch1>0?'#00b37e':'#e83f5b';\n    const athPct=((c.p-c.ath)\/c.ath*100).toFixed(1);\n    const athCls=athPct>0?'up':'dn';\n    const dlo=c.p*0.97,dhi=c.p*1.03;\n    const wlo=c.p*0.72,whi=c.p*1.38;\n    const catMap={layer1:'blue',layer2:'purple',defi:'gold',stable:'nt',meme:'up',exchange:'nt',infra:'blue',privacy:'nt'};\n    return`<tr data-name=\"${c.name.toLowerCase()}\" data-sym=\"${c.sym.toLowerCase()}\">\n      <td class=\"c\"><span class=\"cx-rank\">${c.rank}<\/span><\/td>\n      <td>\n        <div class=\"cx-coin\">\n          <div class=\"cx-cicon\" style=\"background:${c.ib};color:${c.ic}\">${c.icon}<\/div>\n          <div>\n            <div class=\"cx-cname\">${c.name}<\/div>\n            <div class=\"cx-ctick\">${c.sym} <span class=\"cx-badge ${catMap[c.cat]||'nt'}\" style=\"font-size:9px\">${c.cat}<\/span><\/div>\n          <\/div>\n        <\/div>\n      <\/td>\n      <td class=\"r\"><span class=\"cx-price\">${fmtPrice(c.p)}<\/span><\/td>\n      <td class=\"r\">${pct(c.ch1)}<\/td>\n      <td class=\"r\">${pct(c.ch7)}<\/td>\n      <td class=\"r\">${pct(c.ch30)}<\/td>\n      <td class=\"r\">${mcapbar(c.mcap)}<\/td>\n      <td class=\"r\"><span class=\"mono\">${fmtBig(c.vol)}<\/span><\/td>\n      <td class=\"c\">${mkSpark(trend,color)}<\/td>\n      <td class=\"c\">${rangebar(dlo,c.p,dhi)}<\/td>\n      <td class=\"r\"><span class=\"${athCls}\" style=\"font-size:12px\">${athPct}%<\/span><\/td>\n    <\/tr>`;\n  }).join('');\n\n  return`\n  <div class=\"cx-toolbar\">\n    <div class=\"cx-search\"><span style=\"color:var(--muted)\">\ud83d\udd0d<\/span><input type=\"text\" placeholder=\"Search coin\u2026\" value=\"${searchQ}\" oninput=\"cxSearch(this.value)\"><\/div>\n    <span class=\"cx-count\">${list.length} coins<\/span>\n  <\/div>\n  <div class=\"cx-ctabs\">${catBtns}<\/div>\n  <div class=\"cx-tbl-wrap\">\n    <table>\n      <thead><tr>\n        <th class=\"c\" onclick=\"cxSort('rank')\">#<span class=\"sa\">\u2195<\/span><\/th>\n        <th onclick=\"cxSort('name')\">Coin<span class=\"sa\">\u2195<\/span><\/th>\n        <th class=\"r\" onclick=\"cxSort('p')\">Price<span class=\"sa\">\u2195<\/span><\/th>\n        <th class=\"r\" onclick=\"cxSort('ch1')\">24h<span class=\"sa\">\u2195<\/span><\/th>\n        <th class=\"r\" onclick=\"cxSort('ch7')\">7 Dias<span class=\"sa\">\u2195<\/span><\/th>\n        <th class=\"r\" onclick=\"cxSort('ch30')\">30 Dias<span class=\"sa\">\u2195<\/span><\/th>\n        <th class=\"r\" onclick=\"cxSort('mcap')\">Market Cap<span class=\"sa\">\u2195<\/span><\/th>\n        <th class=\"r\" onclick=\"cxSort('vol')\">24h Volume<span class=\"sa\">\u2195<\/span><\/th>\n        <th class=\"c\">7d Spark<\/th>\n        <th class=\"c\">Day Range<\/th>\n        <th class=\"r\" onclick=\"cxSort('ath')\">vs ATH<span class=\"sa\">\u2195<\/span><\/th>\n      <\/tr><\/thead>\n      <tbody>${rows}<\/tbody>\n    <\/table>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500 OVERVIEW TAB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderOverview(){\n  \/\/ Stats cards\n  const cards=[\n    {l:'Bitcoin (BTC)',v:fmtPrice(COINS[0].p),sub:`+${COINS[0].ch1.toFixed(2)}% 24h`,sc:'up'},\n    {l:'Ethereum (ETH)',v:fmtPrice(COINS[1].p),sub:`+${COINS[1].ch1.toFixed(2)}% 24h`,sc:'up'},\n    {l:'Total Market Cap',v:'$2.84T',sub:`\u25b2 +1.82% 24h`,sc:'up'},\n    {l:'24h Volume',v:'$142.4B',sub:`\u25b2 +8.4% vs yesterday`,sc:'up'},\n    {l:'BTC Dominance',v:'54.8%',sub:`\u25b2 +0.22%`,sc:'up'},\n    {l:'Fear & Greed',v:'72',sub:`Greed`,sc:'up'},\n  ].map(c=>`<div class=\"cx-sc\"><div class=\"cx-sc-lbl\">${c.l}<\/div><div class=\"cx-sc-val\">${c.v}<\/div><div class=\"cx-sc-sub ${c.sc}\">${c.sub}<\/div><\/div>`).join('');\n\n  \/\/ Dominance bar\n  const dom=[\n    {sym:'BTC',pct:54.8,color:'#F7931A'},{sym:'ETH',pct:16.4,color:'#627EEA'},\n    {sym:'USDT',pct:4.1,color:'#26A17B'},{sym:'BNB',pct:3.2,color:'#F3BA2F'},\n    {sym:'SOL',pct:3.0,color:'#9945FF'},{sym:'Outros',pct:18.5,color:'#94a3b8'},\n  ];\n  const domBar=dom.map(d=>`<div class=\"cx-dom-seg\" style=\"flex:${d.pct};background:${d.color}\" title=\"${d.sym}: ${d.pct}%\">${d.pct>5?d.sym:''}<\/div>`).join('');\n  const domLeg=dom.map(d=>`<div class=\"cx-dom-item\"><div class=\"cx-dom-dot\" style=\"background:${d.color}\"><\/div>${d.sym} ${d.pct}%<\/div>`).join('');\n\n  \/\/ Top gainers \/ losers\n  const sorted=[...COINS].sort((a,b)=>b.ch1-a.ch1);\n  const gainers=sorted.slice(0,5);\n  const losers=sorted.slice(-5).reverse();\n\n  function miniList(coins,cls){\n    return coins.map((c,i)=>`\n      <div class=\"cx-trend-row\">\n        <div style=\"display:flex;align-items:center;gap:10px\">\n          <span style=\"font-size:11px;color:var(--muted);width:16px;text-align:right\">${i+1}<\/span>\n          <div class=\"cx-cicon\" style=\"background:${c.ib};color:${c.ic};width:26px;height:26px;font-size:12px\">${c.icon}<\/div>\n          <div><div style=\"font-weight:700;font-size:13px\">${c.sym}<\/div><div style=\"font-size:10.5px;color:var(--muted)\">${c.name}<\/div><\/div>\n        <\/div>\n        <div style=\"text-align:right\">\n          <div class=\"cx-price\" style=\"font-size:12.5px\">${fmtPrice(c.p)}<\/div>\n          ${pct(c.ch1)}\n        <\/div>\n      <\/div>`).join('');\n  }\n\n  \/\/ Trending (by vol ratio)\n  const trending=COINS.slice(0,8).sort(()=>Math.random()-.5).slice(0,6);\n\n  return`\n  <div class=\"cx-stats-grid\">${cards}<\/div>\n  <div class=\"cx-2col\">\n    <div class=\"cx-card\" style=\"padding:20px\">\n      <div class=\"cx-sectitle\">Market Dominance<\/div>\n      <div class=\"cx-dom\">${domBar}<\/div>\n      <div class=\"cx-dom-legend\">${domLeg}<\/div>\n    <\/div>\n    <div class=\"cx-card\" style=\"padding:20px\">\n      <div class=\"cx-sectitle\">Fear & Greed Index<\/div>\n      ${renderFearGauge(fgValue)}\n    <\/div>\n  <\/div>\n  <div class=\"cx-2col\">\n    <div class=\"cx-card\">\n      <div style=\"padding:16px 20px;border-bottom:1px solid var(--bdr)\">\n        <div class=\"cx-sectitle\" style=\"margin-bottom:0\">\ud83d\ude80 Top Gainers 24h<\/div>\n      <\/div>\n      ${miniList(gainers,'up')}\n    <\/div>\n    <div class=\"cx-card\">\n      <div style=\"padding:16px 20px;border-bottom:1px solid var(--bdr)\">\n        <div class=\"cx-sectitle\" style=\"margin-bottom:0\">\ud83d\udcc9 Top Losers 24h<\/div>\n      <\/div>\n      ${miniList(losers,'dn')}\n    <\/div>\n  <\/div>\n  <div class=\"cx-card\">\n    <div style=\"padding:16px 20px;border-bottom:1px solid var(--bdr)\">\n      <div class=\"cx-sectitle\" style=\"margin-bottom:0\">\ud83d\udd25 Trending Now<\/div>\n    <\/div>\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))\">\n      ${trending.map(c=>`\n      <div class=\"cx-trend-row\" style=\"border-right:1px solid var(--bdr)\">\n        <div style=\"display:flex;align-items:center;gap:8px\">\n          <div class=\"cx-cicon\" style=\"background:${c.ib};color:${c.ic}\">${c.icon}<\/div>\n          <div><div style=\"font-weight:700\">${c.sym}<\/div><div style=\"font-size:10.5px;color:var(--muted)\">${c.name}<\/div><\/div>\n        <\/div>\n        <div style=\"text-align:right\">${pct(c.ch1)}<\/div>\n      <\/div>`).join('')}\n    <\/div>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500 FEAR & GREED GAUGE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderFearGauge(val){\n  val=Math.round(val);\n  \/\/ Semicircle: left=0% (Extreme Fear), right=100% (Extreme Greed)\n  \/\/ SVG coords: center pivot at (110,100)\n  \/\/ Angle: 180\u00b0=left, 0\u00b0=right (standard unit circle on x-axis)\n  \/\/ pct 0 \u2192 angle 180\u00b0, pct 100 \u2192 angle 0\u00b0\n  const CX=110,CY=100,R=78;\n  const toRad=d=>d*Math.PI\/180;\n  function pt(pct){\n    const deg=180-(pct\/100)*180;\n    return{x:+(CX+R*Math.cos(toRad(deg))).toFixed(2),y:+(CY-R*Math.sin(toRad(deg))).toFixed(2)};\n  }\n  function seg(p1,p2,col){\n    const a=pt(p1),b=pt(p2);\n    return`<path d=\"M${a.x},${a.y} A${R},${R} 0 0,1 ${b.x},${b.y}\" stroke=\"${col}\" stroke-width=\"16\" fill=\"none\"\/>`;\n  }\n  \/\/ Gray background full arc\n  const bgA=pt(0),bgB=pt(100);\n  const bg=`<path d=\"M${bgA.x},${bgA.y} A${R},${R} 0 0,1 ${bgB.x},${bgB.y}\" stroke=\"#e8e7e1\" stroke-width=\"16\" fill=\"none\"\/>`;\n  \/\/ Colored segments\n  const segs=[\n    seg(0,25,'#e83f5b'),seg(25,45,'#ff9940'),\n    seg(45,55,'#f5c518'),seg(55,75,'#8ec98e'),seg(75,100,'#00b37e')\n  ].join('');\n  \/\/ Needle\n  const nDeg=180-(val\/100)*180;\n  const nx=+(CX+74*Math.cos(toRad(nDeg))).toFixed(2);\n  const ny=+(CY-74*Math.sin(toRad(nDeg))).toFixed(2);\n  \/\/ Tail (opposite direction, short)\n  const tx=+(CX-18*Math.cos(toRad(nDeg))).toFixed(2);\n  const ty=+(CY+18*Math.sin(toRad(nDeg))).toFixed(2);\n  const color=val<25?'#e83f5b':val<45?'#ff9940':val<55?'#f5c518':val<75?'#8ec98e':'#00b37e';\n  const label=val<25?'Extreme Fear':val<45?'Fear':val<55?'Neutral':val<75?'Greed':'Extreme Greed';\n  \/\/ Zone labels\n  const zoneTxt=[\n    {p:12.5,t:'Fear'},{p:35,t:'Fear'},{p:50,t:'Neutral'},\n    {p:65,t:'Greed'},{p:87.5,t:'Greed'}\n  ];\n  \/\/ Outer tick marks at 0,25,50,75,100\n  const ticks=[0,25,50,75,100].map(p=>{\n    const inner=pt.call(null,p); \/\/ reuse pt but with slightly larger R for label\n    const lDeg=180-(p\/100)*180;\n    const lx=+(CX+(R+18)*Math.cos(toRad(lDeg))).toFixed(1);\n    const ly=+(CY-(R+18)*Math.sin(toRad(lDeg))).toFixed(1);\n    const labels=['0','25','50','75','100'];\n    return`<text x=\"${lx}\" y=\"${ly}\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-size=\"8.5\" fill=\"#a0a098\" font-family=\"sans-serif\" font-weight=\"600\">${labels[[0,25,50,75,100].indexOf(p)]}<\/text>`;\n  }).join('');\n\n  const histBars=FG_HIST.map(h=>{\n    const bc=h.v<45?'#e83f5b':h.v<55?'#f5c518':'#00b37e';\n    const hh=Math.round(h.v*.32+4);\n    const lbl=h.d.replace(' ago','').replace('Today','Tdy');\n    return`<div class=\"cx-gbar\"><div class=\"cx-gbar-b\" style=\"height:${hh}px;background:${bc}\"><\/div><span>${lbl}<\/span><\/div>`;\n  }).join('');\n\n  return`\n  <div class=\"cx-gauge-wrap\" style=\"padding:14px 8px 8px\">\n    <svg width=\"220\" height=\"120\" viewBox=\"0 0 220 120\" style=\"overflow:visible;display:block;margin:0 auto\">\n      ${bg}${segs}${ticks}\n      <line x1=\"${tx}\" y1=\"${ty}\" x2=\"${nx}\" y2=\"${ny}\" stroke=\"#1c1c1a\" stroke-width=\"2.5\" stroke-linecap=\"round\"\/>\n      <circle cx=\"${CX}\" cy=\"${CY}\" r=\"8\" fill=\"#1c1c1a\"\/>\n      <circle cx=\"${CX}\" cy=\"${CY}\" r=\"4.5\" fill=\"${color}\"\/>\n      <text x=\"${CX}\" y=\"${CY+22}\" text-anchor=\"middle\" font-size=\"28\" font-weight=\"900\" font-family=\"'Courier New',monospace\" fill=\"${color}\">${val}<\/text>\n      <text x=\"${CX}\" y=\"${CY+38}\" text-anchor=\"middle\" font-size=\"11\" font-weight=\"700\" font-family=\"sans-serif\" fill=\"${color}\">${label}<\/text>\n    <\/svg>\n    <div class=\"cx-gauge-hist\" style=\"margin-top:10px\">${histBars}<\/div>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500 HEATMAP TAB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderHeatmap(){\n  const cells=COINS.map(c=>{\n    const v=c.ch1;\n    const intensity=Math.min(1,Math.abs(v)\/10);\n    let bg;\n    if(v>0){const r=Math.round(0+intensity*26);const g=Math.round(114+intensity*65);const b=Math.round(90+intensity*36);bg=`rgb(${r},${g},${b})`;}\n    else{const r=Math.round(180+intensity*52);const g=Math.round(50-intensity*50);const b=Math.round(70-intensity*70);bg=`rgb(${r},${g},${b})`;}\n    const sz=Math.max(80,Math.min(140,Math.log10(c.mcap\/1e6)*20));\n    return`<div class=\"cx-hm-cell\" style=\"background:${bg};grid-column:span 1\" title=\"${c.name}: ${fmtPrice(c.p)}\">\n      <div class=\"cx-hm-sym\">${c.sym}<\/div>\n      <div class=\"cx-hm-name\">${c.name}<\/div>\n      <div class=\"cx-hm-pct\">${v>0?'+':''}${v.toFixed(2)}%<\/div>\n      <div class=\"cx-hm-price\">${fmtPrice(c.p)}<\/div>\n    <\/div>`;\n  }).join('');\n\n  const legend=[-10,-5,-2,0,2,5,10].map(v=>{\n    const intensity=Math.min(1,Math.abs(v)\/10);\n    let bg;\n    if(v>0){const r=Math.round(0+intensity*26);const g=Math.round(114+intensity*65);const b=Math.round(90+intensity*36);bg=`rgb(${r},${g},${b})`;}\n    else if(v<0){const r=Math.round(180+intensity*52);const g=Math.round(50-intensity*50);const b=Math.round(70-intensity*70);bg=`rgb(${r},${g},${b})`;}\n    else bg='#94a3b8';\n    return`<div style=\"display:flex;align-items:center;gap:4px;font-size:11px;color:var(--dim)\"><div style=\"width:18px;height:18px;border-radius:4px;background:${bg}\"><\/div>${v>0?'+':''}${v}%<\/div>`;\n  }).join('');\n\n  return`\n  <div class=\"cx-card\" style=\"margin-bottom:16px;padding:16px 20px\">\n    <div style=\"display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px\">\n      <div><strong style=\"font-size:15px\">Cryptocurrency Heatmap<\/strong><span style=\"font-size:12px;color:var(--muted);margin-left:10px\">Size = Market Cap \u00b7 Color = 24h Performance<\/span><\/div>\n      <div style=\"display:flex;gap:8px;flex-wrap:wrap\">${legend}<\/div>\n    <\/div>\n  <\/div>\n  <div class=\"cx-card\">\n    <div class=\"cx-heatmap\">${cells}<\/div>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500 DEFI TAB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderDeFi(){\n  const defi=[\n    {n:'Uniswap',sym:'UNI',tvl:6.8e9,vol:1.84e9,ch:2.30,fee:'0.3%',chain:'Ethereum',cat:'DEX'},\n    {n:'Aave',sym:'AAVE',tvl:14.2e9,vol:0.48e9,ch:0.90,fee:'Vari\u00e1vel',chain:'Multi',cat:'Lending'},\n    {n:'MakerDAO',sym:'MKR',tvl:9.4e9,vol:0.12e9,ch:1.80,fee:'Vari\u00e1vel',chain:'Ethereum',cat:'CDP'},\n    {n:'Compound',sym:'COMP',tvl:3.2e9,vol:0.08e9,ch:-0.40,fee:'Vari\u00e1vel',chain:'Ethereum',cat:'Lending'},\n    {n:'Curve',sym:'CRV',tvl:5.4e9,vol:0.42e9,ch:3.20,fee:'0.04%',chain:'Multi',cat:'DEX'},\n    {n:'Lido',sym:'LDO',tvl:28.4e9,vol:0.28e9,ch:1.42,fee:'10% rewards',chain:'Multi',cat:'Liquid Staking'},\n    {n:'PancakeSwap',sym:'CAKE',tvl:2.8e9,vol:0.84e9,ch:1.14,fee:'0.25%',chain:'BSC',cat:'DEX'},\n    {n:'dYdX',sym:'DYDX',tvl:0.48e9,vol:0.84e9,ch:2.80,fee:'0.02-0.05%',chain:'Cosmos',cat:'Perps'},\n    {n:'GMX',sym:'GMX',tvl:0.82e9,vol:0.42e9,ch:1.92,fee:'0.1%',chain:'Arbitrum',cat:'Perps'},\n    {n:'Synthetix',sym:'SNX',tvl:0.42e9,vol:0.08e9,ch:-2.10,fee:'Vari\u00e1vel',chain:'Optimism',cat:'Synths'},\n  ];\n\n  const rows=defi.map(d=>`<tr>\n    <td><span class=\"cx-cname\">${d.n}<\/span><br><span class=\"cx-ctick\">${d.sym}<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${fmtBig(d.tvl)}<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${fmtBig(d.vol)}<\/span><\/td>\n    <td class=\"r\">${pct(d.ch)}<\/td>\n    <td class=\"c\"><span class=\"cx-badge nt\">${d.fee}<\/span><\/td>\n    <td class=\"c\"><span class=\"cx-badge blue\">${d.chain}<\/span><\/td>\n    <td class=\"c\"><span class=\"cx-badge gold\">${d.cat}<\/span><\/td>\n  <\/tr>`).join('');\n\n  const tvlCards=[\n    {l:'TVL Total DeFi',v:'$94.2B',sub:'\u25b2 +2.14% 24h',sc:'up'},\n    {l:'DEX Volume 24h',v:'$8.4B',sub:'\u25b2 +12.4% vs yesterday',sc:'up'},\n    {l:'Total Staking',v:'$42.8B',sub:'\u25b2 +0.82%',sc:'up'},\n    {l:'Avg Yield',v:'4.82%',sub:'Estimated APY',sc:'nt'},\n  ].map(c=>`<div class=\"cx-sc\"><div class=\"cx-sc-lbl\">${c.l}<\/div><div class=\"cx-sc-val\">${c.v}<\/div><div class=\"cx-sc-sub ${c.sc}\">${c.sub}<\/div><\/div>`).join('');\n\n  return`\n  <div class=\"cx-stats-grid\">${tvlCards}<\/div>\n  <div class=\"cx-sectitle\">DeFi Protocols by TVL<\/div>\n  <div class=\"cx-tbl-wrap\">\n    <table>\n      <thead><tr>\n        <th>Protocol<\/th>\n        <th class=\"r\">TVL<\/th>\n        <th class=\"r\">24h Volume<\/th>\n        <th class=\"r\">24h Change<\/th>\n        <th class=\"c\">Taxa<\/th>\n        <th class=\"c\">Blockchain<\/th>\n        <th class=\"c\">Categoria<\/th>\n      <\/tr><\/thead>\n      <tbody>${rows}<\/tbody>\n    <\/table>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500 NFT TAB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderNFT(){\n  const nfts=[\n    {n:'CryptoPunks',vol:8.4e6,sales:42,floor:58.4,ch:12.4,chain:'ETH'},\n    {n:'Bored Ape YC',vol:6.2e6,sales:28,floor:14.2,ch:4.8,chain:'ETH'},\n    {n:'Azuki',vol:4.8e6,sales:84,floor:8.4,ch:-2.4,chain:'ETH'},\n    {n:'Pudgy Penguins',vol:3.4e6,sales:62,floor:12.4,ch:8.2,chain:'ETH'},\n    {n:'Milady',vol:2.8e6,sales:124,floor:4.2,ch:24.8,chain:'ETH'},\n    {n:'DeGods',vol:1.8e6,sales:48,floor:2.4,ch:-4.2,chain:'ETH'},\n    {n:'Mad Lads',vol:1.4e6,sales:84,floor:182,ch:18.4,chain:'SOL'},\n    {n:'y00ts',vol:0.84e6,sales:42,floor:0.82,ch:-8.4,chain:'ETH'},\n    {n:'CloneX',vol:0.62e6,sales:28,floor:1.82,ch:2.4,chain:'ETH'},\n    {n:'Mutant Apes',vol:0.48e6,sales:18,floor:4.2,ch:-1.8,chain:'ETH'},\n  ];\n\n  const rows=nfts.map(n=>`<tr>\n    <td><span class=\"cx-cname\">${n.n}<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${fmtBig(n.vol)}<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${n.sales}<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${n.floor} ETH<\/span><\/td>\n    <td class=\"r\">${pct(n.ch)}<\/td>\n    <td class=\"c\"><span class=\"cx-badge blue\">${n.chain}<\/span><\/td>\n  <\/tr>`).join('');\n\n  const nftCards=[\n    {l:'NFT Volume 24h',v:'$38.4M',sub:'\u25b2 +14.8% vs yesterday',sc:'up'},\n    {l:'Sales 24h',v:'42,840',sub:'\u25b2 +8.2%',sc:'up'},\n    {l:'Unique Traders',v:'18,420',sub:'\u25b2 +4.4%',sc:'up'},\n    {l:'Avg Floor',v:'2.84 ETH',sub:'\u25b2 +1.2%',sc:'up'},\n  ].map(c=>`<div class=\"cx-sc\"><div class=\"cx-sc-lbl\">${c.l}<\/div><div class=\"cx-sc-val\">${c.v}<\/div><div class=\"cx-sc-sub ${c.sc}\">${c.sub}<\/div><\/div>`).join('');\n\n  return`\n  <div class=\"cx-stats-grid\">${nftCards}<\/div>\n  <div class=\"cx-sectitle\">NFT Collections by 24h Volume<\/div>\n  <div class=\"cx-tbl-wrap\">\n    <table>\n      <thead><tr>\n        <th>Collection<\/th>\n        <th class=\"r\">24h Volume<\/th>\n        <th class=\"r\">Sales<\/th>\n        <th class=\"r\">Floor Price<\/th>\n        <th class=\"r\">24h Change<\/th>\n        <th class=\"c\">Blockchain<\/th>\n      <\/tr><\/thead>\n      <tbody>${rows}<\/tbody>\n    <\/table>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500 EXCHANGES TAB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderExchanges(){\n  const exch=[\n    {n:'Binance',vol:24.8e9,coins:380,trust:10,type:'CEX',country:'\ud83c\udf0f Global'},\n    {n:'Coinbase',vol:4.2e9,coins:240,trust:10,type:'CEX',country:'\ud83c\uddfa\ud83c\uddf8 USA'},\n    {n:'OKX',vol:6.4e9,coins:320,trust:9,type:'CEX',country:'\ud83c\udf0f Global'},\n    {n:'Bybit',vol:5.8e9,coins:290,trust:9,type:'CEX',country:'\ud83c\udde6\ud83c\uddea Dubai'},\n    {n:'Kraken',vol:1.8e9,coins:120,trust:10,type:'CEX',country:'\ud83c\uddfa\ud83c\uddf8 USA'},\n    {n:'KuCoin',vol:2.4e9,coins:420,trust:8,type:'CEX',country:'\ud83c\udf0f Global'},\n    {n:'Uniswap V3',vol:1.84e9,coins:1800,trust:9,type:'DEX',country:'\ud83d\udd17 Ethereum'},\n    {n:'dYdX',vol:0.84e9,coins:38,trust:9,type:'DEX Perps',country:'\ud83d\udd17 Cosmos'},\n    {n:'PancakeSwap',vol:0.84e9,coins:2400,trust:8,type:'DEX',country:'\ud83d\udd17 BSC'},\n    {n:'Curve',vol:0.42e9,coins:180,trust:9,type:'DEX',country:'\ud83d\udd17 Multi'},\n    {n:'Gate.io',vol:1.2e9,coins:1400,trust:8,type:'CEX',country:'\ud83c\udf0f Global'},\n    {n:'Huobi\/HTX',vol:0.82e9,coins:280,trust:7,type:'CEX',country:'\ud83c\udf0f Global'},\n  ];\n\n  const trustStars=n=>'\u2605'.repeat(n).padEnd(10,'\u2606').slice(0,5);\n\n  const rows=exch.map(e=>`<tr>\n    <td><span class=\"cx-cname\">${e.n}<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${fmtBig(e.vol)}<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${e.coins.toLocaleString()}<\/span><\/td>\n    <td class=\"c\" style=\"color:var(--gold);letter-spacing:2px;font-size:13px\">${trustStars(e.trust)}<\/td>\n    <td class=\"c\"><span class=\"cx-badge ${e.type.includes('DEX')?'purple':'blue'}\">${e.type}<\/span><\/td>\n    <td class=\"c\" style=\"font-size:12px\">${e.country}<\/td>\n  <\/tr>`).join('');\n\n  return`\n  <div class=\"cx-sectitle\">Exchanges by 24h Volume<\/div>\n  <div class=\"cx-tbl-wrap\">\n    <table>\n      <thead><tr>\n        <th>Exchange<\/th>\n        <th class=\"r\">24h Volume<\/th>\n        <th class=\"r\">Coins<\/th>\n        <th class=\"c\">Trust<\/th>\n        <th class=\"c\">Type<\/th>\n        <th class=\"c\">Country\/Network<\/th>\n      <\/tr><\/thead>\n      <tbody>${rows}<\/tbody>\n    <\/table>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500 STABLECOINS TAB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderStables(){\n  const stables=[\n    {n:'Tether',sym:'USDT',p:1.0001,mcap:114e9,vol:84.2e9,col:'USD',type:'Centralized',peg:'USD',ch:0.01},\n    {n:'USD Coin',sym:'USDC',p:1.0002,mcap:42e9,vol:12.4e9,col:'USD',type:'Centralized',peg:'USD',ch:0.00},\n    {n:'Binance USD',sym:'BUSD',p:1.0000,mcap:1.8e9,vol:0.42e9,col:'USD',type:'Centralized',peg:'USD',ch:-0.01},\n    {n:'Dai',sym:'DAI',p:0.9998,mcap:5.4e9,vol:0.18e9,col:'Crypto',type:'Algorithmic',peg:'USD',ch:0.00},\n    {n:'Frax',sym:'FRAX',p:0.9997,mcap:0.72e9,vol:0.04e9,col:'Mixed',type:'Hybrid',peg:'USD',ch:-0.02},\n    {n:'TrueUSD',sym:'TUSD',p:1.0001,mcap:0.48e9,vol:0.22e9,col:'USD',type:'Centralized',peg:'USD',ch:0.01},\n    {n:'PAXOS',sym:'USDP',p:1.0000,mcap:0.18e9,vol:0.02e9,col:'USD',type:'Centralized',peg:'USD',ch:0.00},\n    {n:'Gemini Dollar',sym:'GUSD',p:1.0001,mcap:0.08e9,vol:0.01e9,col:'USD',type:'Centralized',peg:'USD',ch:0.01},\n  ];\n\n  const pegDev=p=>{\n    const d=Math.abs(p-1)*100;\n    const cls=d<0.05?'up':d<0.2?'nt':'dn';\n    return`<span class=\"cx-badge ${cls}\">${d.toFixed(4)}%<\/span>`;\n  };\n\n  const rows=stables.map(s=>`<tr>\n    <td><span class=\"cx-cname\">${s.n}<\/span><br><span class=\"cx-ctick\">${s.sym}<\/span><\/td>\n    <td class=\"r\"><span class=\"cx-price\">$${s.p.toFixed(4)}<\/span><\/td>\n    <td class=\"c\">${pegDev(s.p)}<\/td>\n    <td class=\"r\"><span class=\"mono\">${fmtBig(s.mcap)}<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${fmtBig(s.vol)}<\/span><\/td>\n    <td class=\"c\"><span class=\"cx-badge nt\">${s.col}<\/span><\/td>\n    <td class=\"c\"><span class=\"cx-badge ${s.type==='Centralized'?'blue':s.type==='Algorithmic'?'purple':'gold'}\">${s.type}<\/span><\/td>\n  <\/tr>`).join('');\n\n  return`\n  <div class=\"cx-sectitle\">Stablecoins \u2014 Peg Monitor<\/div>\n  <div class=\"cx-tbl-wrap\">\n    <table>\n      <thead><tr>\n        <th>Coin<\/th>\n        <th class=\"r\">Current Price<\/th>\n        <th class=\"c\">Peg Deviation<\/th>\n        <th class=\"r\">Market Cap<\/th>\n        <th class=\"r\">24h Volume<\/th>\n        <th class=\"c\">Collateral<\/th>\n        <th class=\"c\">Type<\/th>\n      <\/tr><\/thead>\n      <tbody>${rows}<\/tbody>\n    <\/table>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500 DERIVATIVES TAB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction renderDerivatives(){\n  const deriv=[\n    {sym:'BTC',fut:94420,spot:94320,basis:100,basisPct:0.106,oi:18.4e9,fund:0.0082,liq:284e6,chFund:'up'},\n    {sym:'ETH',fut:3285,spot:3280,basis:5,basisPct:0.152,oi:8.4e9,fund:0.0092,liq:142e6,chFund:'up'},\n    {sym:'SOL',fut:183.2,spot:182,basis:1.2,basisPct:0.659,oi:2.8e9,fund:0.0124,liq:48e6,chFund:'up'},\n    {sym:'BNB',fut:606.4,spot:605,basis:1.4,basisPct:0.231,oi:1.2e9,fund:0.0064,liq:28e6,chFund:'nt'},\n    {sym:'XRP',fut:0.582,spot:0.58,basis:0.002,basisPct:0.345,oi:0.84e9,fund:0.0048,liq:18e6,chFund:'up'},\n    {sym:'DOGE',fut:0.1428,spot:0.142,basis:0.0008,basisPct:0.563,oi:0.48e9,fund:0.0184,liq:14e6,chFund:'up'},\n    {sym:'AVAX',fut:38.6,spot:38.4,basis:0.2,basisPct:0.521,oi:0.42e9,fund:0.0092,liq:8e6,chFund:'up'},\n    {sym:'LINK',fut:14.84,spot:14.8,basis:0.04,basisPct:0.270,oi:0.38e9,fund:0.0072,liq:6e6,chFund:'nt'},\n  ];\n\n  const rows=deriv.map(d=>`<tr>\n    <td><span class=\"cx-cname\">${d.sym}-PERP<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${fmtPrice(d.fut)}<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${fmtPrice(d.spot)}<\/span><\/td>\n    <td class=\"r\"><span class=\"${d.basis>=0?'up':'dn'}\">${d.basis>=0?'+':''}${fmtPrice(d.basis)}<\/span><\/td>\n    <td class=\"r\"><span class=\"${d.basisPct>=0?'up':'dn'}\">${d.basisPct>=0?'+':''}${d.basisPct.toFixed(3)}%<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${fmtBig(d.oi)}<\/span><\/td>\n    <td class=\"r\"><span class=\"${d.chFund}\">${d.fund.toFixed(4)}%<\/span><\/td>\n    <td class=\"r\"><span class=\"mono\">${fmtBig(d.liq)}<\/span><\/td>\n  <\/tr>`).join('');\n\n  const derCards=[\n    {l:'Open Interest Total',v:'$34.8B',sub:'\u25b2 +4.2% 24h',sc:'up'},\n    {l:'24h Futures Volume',v:'$124B',sub:'\u25b2 +8.4%',sc:'up'},\n    {l:'24h Liquidations',v:'$842M',sub:'Long: $542M \/ Short: $300M',sc:'nt'},\n    {l:'Avg Funding Rate',v:'0.0082%',sub:'Bullish \u2014 longs paying shorts',sc:'up'},\n  ].map(c=>`<div class=\"cx-sc\"><div class=\"cx-sc-lbl\">${c.l}<\/div><div class=\"cx-sc-val\">${c.v}<\/div><div class=\"cx-sc-sub ${c.sc}\">${c.sub}<\/div><\/div>`).join('');\n\n  return`\n  <div class=\"cx-stats-grid\">${derCards}<\/div>\n  <div class=\"cx-sectitle\">Perpetual Futures \u2014 Market Data<\/div>\n  <div class=\"cx-tbl-wrap\">\n    <table>\n      <thead><tr>\n        <th>Contract<\/th>\n        <th class=\"r\">Futures Price<\/th>\n        <th class=\"r\">Spot Price<\/th>\n        <th class=\"r\">Basis $<\/th>\n        <th class=\"r\">Basis %<\/th>\n        <th class=\"r\">Open Interest<\/th>\n        <th class=\"r\">Fund. Rate<\/th>\n        <th class=\"r\">24h Liquidations<\/th>\n      <\/tr><\/thead>\n      <tbody>${rows}<\/tbody>\n    <\/table>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500 TABS CONFIG \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst TABS=[\n  {id:'overview',label:'\ud83d\udcca Overview'},\n  {id:'all',label:'\ud83e\ude99 All Coins'},\n  {id:'heatmap',label:'\ud83d\uddfa Heatmap'},\n  {id:'defi',label:'\u26a1 DeFi'},\n  {id:'derivatives',label:'\ud83d\udcc8 Derivatives'},\n  {id:'nft',label:'\ud83d\uddbc NFTs'},\n  {id:'exchanges',label:'\ud83c\udfe6 Exchanges'},\n  {id:'stables',label:'\ud83d\udcb5 Stablecoins'},\n];\n\nconst RENDERERS={\n  overview:renderOverview,\n  all:()=>renderCoinsTable(COINS),\n  heatmap:renderHeatmap,\n  defi:renderDeFi,\n  derivatives:renderDerivatives,\n  nft:renderNFT,\n  exchanges:renderExchanges,\n  stables:renderStables,\n};\n\nlet activeTab='overview';\n\nfunction buildNav(){\n  $('cxNav').innerHTML=TABS.map(t=>`\n    <button class=\"cx-ntab${t.id===activeTab?' on':''}\" onclick=\"cxTab('${t.id}')\">${t.label}<\/button>\n  `).join('');\n}\n\nfunction cxTab(id){\n  activeTab=id;\n  buildNav();\n  const el=$('cxBody');\n  el.innerHTML=`<div class=\"cx-loading\"><div class=\"cx-spin\"><\/div> Loading\u2026<\/div>`;\n  setTimeout(()=>{\n    const fn=RENDERERS[id];\n    el.innerHTML=fn?fn():`<div class=\"cx-loading\">Data unavailable<\/div>`;\n  },100);\n}\nwindow.cxTab=cxTab;\n\n\/\/ Table interactions\nfunction cxSort(col){\n  if(sortCol===col)sortAsc=!sortAsc;else{sortCol=col;sortAsc=col==='rank'||col==='name';}\n  cxTab('all');\n}\nfunction cxSearch(q){searchQ=q.toLowerCase();cxTab('all');}\nfunction cxCat(c){catFilter=c;cxTab('all');}\nwindow.cxSort=cxSort;window.cxSearch=cxSearch;window.cxCat=cxCat;\n\n\/\/ \u2500\u2500 LIVE DATA via CoinGecko \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function fetchLive(){\n  try{\n    const url='https:\/\/api.coingecko.com\/api\/v3\/coins\/markets?vs_currency=usd&order=market_cap_desc&per_page=50&page=1&sparkline=false&price_change_percentage=1h,24h,7d';\n    const res=await fetch(url);\n    if(!res.ok)throw 0;\n    const data=await res.json();\n    data.forEach(coin=>{\n      const c=COINS.find(x=>x.id===coin.id);\n      if(c){\n        c.p=coin.current_price;\n        c.ch1=coin.price_change_percentage_24h||c.ch1;\n        c.ch7=coin.price_change_percentage_7d_in_currency||c.ch7;\n        c.mcap=coin.market_cap||c.mcap;\n        c.vol=coin.total_volume||c.vol;\n        c.ath=coin.ath||c.ath;\n      }\n    });\n    \/\/ Update ticker\n    buildTicker();\n    \/\/ Re-render active tab silently\n    const fn=RENDERERS[activeTab];\n    if(fn){\n      const el=$('cxBody');\n      const inp=el.querySelector('input');\n      if(!inp||!inp.value){\n        const sy=window.scrollY;\n        el.innerHTML=fn();\n        window.scrollTo(0,sy);\n      }\n    }\n    $('cxClock').textContent=new Date().toLocaleTimeString('en-US');\n  }catch(e){\n    \/\/ fallback: fluctuate\n    simulateFluctuate();\n  }\n}\n\nfunction simulateFluctuate(){\n  COINS.forEach(c=>{\n    c.p=fluct(c.p,.002);\n    c.ch1=flpct(c.ch1);\n    c.ch7=flpct(c.ch7);\n  });\n  fgValue=Math.round(Math.max(10,Math.min(95,fgValue+(Math.random()-.5)*2)));\n  buildTicker();\n}\n\n\/\/ \u2500\u2500 BOOT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction boot(){\n  buildTicker();\n  buildNav();\n  setTimeout(()=>{\n    $('cxBody').innerHTML=renderOverview();\n  },150);\n  \/\/ Try live data\n  fetchLive();\n  setInterval(fetchLive,30000);\n  setInterval(simulateFluctuate,8000);\n}\n\nif(document.readyState==='loading'){\n  document.addEventListener('DOMContentLoaded',boot);\n}else{\n  boot();\n}\n\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>\u20bf investingora.com \u00b7 Crypto Live \u2014 Total Market Cap $2.84T \u25b2 +1.82% Volume 24h $142.4B \u25b2 +8.40% BTC Dominance 54.8% \u25b2 +0.22% ETH Dominance 16.4% \u25bc -0.14% Active Coins 9,847 +124 new Exchanges 732 active DeFi TVL $94.2B \u25b2 +2.14% ATH BTC $108,268 \u25bc -12.9% Loading data\u2026<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-595","page","type-page","status-publish","hentry"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/investingora.com\/pt\/wp-json\/wp\/v2\/pages\/595","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/investingora.com\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/investingora.com\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/investingora.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/investingora.com\/pt\/wp-json\/wp\/v2\/comments?post=595"}],"version-history":[{"count":2,"href":"https:\/\/investingora.com\/pt\/wp-json\/wp\/v2\/pages\/595\/revisions"}],"predecessor-version":[{"id":597,"href":"https:\/\/investingora.com\/pt\/wp-json\/wp\/v2\/pages\/595\/revisions\/597"}],"wp:attachment":[{"href":"https:\/\/investingora.com\/pt\/wp-json\/wp\/v2\/media?parent=595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}