{"id":68632,"date":"2025-09-01T19:13:33","date_gmt":"2025-09-01T23:13:33","guid":{"rendered":"https:\/\/bitcoincounterflow.com\/?page_id=68632"},"modified":"2026-01-07T14:33:08","modified_gmt":"2026-01-07T19:33:08","slug":"liquidation-map","status":"publish","type":"page","link":"https:\/\/bitcoincounterflow.com\/liquidation-map\/","title":{"rendered":"Liquidation Map"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"68632\" class=\"elementor elementor-68632\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6e37a5d e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"6e37a5d\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3d4ee48 elementor-widget-mobile__width-inherit elementor-widget elementor-widget-wpr-elementor-template\" data-id=\"3d4ee48\" data-element_type=\"widget\" data-widget_type=\"wpr-elementor-template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>.elementor-42610 .elementor-element.elementor-element-b7cabe2{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:center;--align-items:center;--gap:0px 0px;--flex-wrap:nowrap;--background-transition:0.3s;border-style:solid;--border-style:solid;border-width:0px 0px 1px 0px;--border-top-width:0px;--border-right-width:0px;--border-bottom-width:1px;--border-left-width:0px;border-color:#111111;--border-color:#111111;--margin-top:0px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;--padding-top:3px;--padding-bottom:3px;--padding-left:0px;--padding-right:10px;}.elementor-42610 .elementor-element.elementor-element-b7cabe2:not(.elementor-motion-effects-element-type-background), .elementor-42610 .elementor-element.elementor-element-b7cabe2 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#000000;}.elementor-42610 .elementor-element.elementor-element-b7cabe2, .elementor-42610 .elementor-element.elementor-element-b7cabe2::before{--border-transition:0.3s;}.elementor-42610 .elementor-element.elementor-element-b7cabe2.e-con{--align-self:center;}.elementor-42610 .elementor-element.elementor-element-af5e3a8 > .elementor-widget-container{padding:0px 0px 0px 5px;}.elementor-42610 .elementor-element.elementor-element-af5e3a8{width:auto;max-width:auto;}.elementor-42610 .elementor-element.elementor-element-af5e3a8.elementor-element{--align-self:center;--flex-grow:0;--flex-shrink:0;}.elementor-42610 .elementor-element.elementor-element-87a75fb{width:auto;max-width:auto;}.elementor-42610 .elementor-element.elementor-element-87a75fb.elementor-element{--align-self:center;--order:99999 \/* order end hack *\/;--flex-grow:0;--flex-shrink:0;}.elementor-42610 .elementor-element.elementor-element-e368fb3 > .elementor-widget-container{margin:-5px 30px 0px 0px;padding:0px 0px 0px 0px;}.elementor-42610 .elementor-element.elementor-element-e368fb3{width:auto;max-width:auto;}.elementor-42610 .elementor-element.elementor-element-e368fb3.elementor-element{--align-self:center;}@media(max-width:1024px){.elementor-42610 .elementor-element.elementor-element-b7cabe2{--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:flex-start;--align-items:flex-start;--flex-wrap:nowrap;}.elementor-42610 .elementor-element.elementor-element-af5e3a8.elementor-element{--align-self:flex-start;}.elementor-42610 .elementor-element.elementor-element-e368fb3{width:auto;max-width:auto;}}@media(max-width:767px){.elementor-42610 .elementor-element.elementor-element-b7cabe2{--flex-direction:row;--container-widget-width:initial;--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:space-between;--gap:0px 0px;--flex-wrap:wrap;--margin-top:0px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;--padding-top:2px;--padding-bottom:1px;--padding-left:0px;--padding-right:10px;}.elementor-42610 .elementor-element.elementor-element-b7cabe2.e-con{--align-self:center;}.elementor-42610 .elementor-element.elementor-element-af5e3a8 > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 7px 0px 0px;}.elementor-42610 .elementor-element.elementor-element-af5e3a8.elementor-element{--flex-grow:1;--flex-shrink:0;}.elementor-42610 .elementor-element.elementor-element-87a75fb > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;}.elementor-42610 .elementor-element.elementor-element-87a75fb.elementor-element{--align-self:center;}.elementor-42610 .elementor-element.elementor-element-e368fb3 > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 20px 0px 0px;}.elementor-42610 .elementor-element.elementor-element-e368fb3.elementor-element{--order:99999 \/* order end hack *\/;}}<\/style>\t\t<div data-elementor-type=\"container\" data-elementor-id=\"42610\" class=\"elementor elementor-42610\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b7cabe2 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"b7cabe2\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-af5e3a8 elementor-widget__width-auto elementor-hidden-desktop elementor-hidden-tablet elementor-widget elementor-widget-html\" data-id=\"af5e3a8\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\n.initial-container {\n    min-width: 300px !important;\n    height: fit-content !important;\n    width: 300px;\n}\n\n.nav-container {\n    display: flex;\n    align-items: center;\n    background-color: black;\n}\n\n.btc-logo img {\n    width: 31px;\n}\n\n.btc-logo {\n    border-radius: 5px;\n    border: 1px solid #222;\n    display: flex;\n    align-items: center;\n    margin-left: 7px;\n    height: 44px;\n    padding-left: 10px;\n}\n\n.btc-logo span {\n    color: #fff;\n    font-family: 'Ubuntu', 'Bai Jamjuree';\n    font-size: 18px;\n    margin-right: 10px;\n    margin-left: 10px;\n    font-weight: 600;\n}\n\n.btc-icon {\n    background-color: #111;\n    padding: 1.5px 13px 1px 13px;\n    font-size: 13px !important;\n    border-radius: 5px;\n}\n\n\/* SVG Hamburger Menu Styling *\/\n#hamburguer-menu svg {\n    width: 20px;\n    height: 20px;\n    color: #fff;\n    transition: all 0.3s ease;\n}\n\n#hamburguer-menu svg path {\n    transition: all 0.3s ease;\n    fill: currentColor;\n}\n\n#hamburguer-menu {\n    background: linear-gradient(135deg, #000000, #151515);\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    border: 1px solid gray;\n    border-radius: 5px;\n    padding: 8px;\n    height: 38px;\n    position: relative;\n    z-index: 1;\n    cursor: pointer;\n    transition: all 0.3s ease;\n}\n\nbutton#hamburguer-menu:hover {\n    filter: invert(0.1);\n    border-color: #555;\n}\n\n#hamburguer-menu::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    border-radius: 5px;\n    z-index: -1;\n    box-shadow: 0 0 20px rgba(0, 0, 0, 1);\n}\n\n\/* Active state animation *\/\n#hamburguer-menu.active svg {\n    opacity: 0.7;\n    transform: scale(1.1);\n}\n\n.rotate-animation::before {\n    animation: rotate-shadow 5s infinite linear;\n}\n\n.menu-logo {\n    display: flex;\n            align-items: center;\n\n}\n\n.logo-side-button {\n    display: none;\n    margin-left: 10px;\n    margin-right: 10px;\n}\n\n\/* Hamburger button styling *\/\n.hamburger {\n    display: none;\n    background: none;\n    border: none;\n    cursor: pointer;\n    padding: 10px;\n    position: fixed;\n    top: 10px;\n    left: 10px;\n    z-index: 1000;\n}\n\n.hamburger svg {\n    width: 20px;\n    height: 20px;\n}\n\n\/* Sidebar styling *\/\n.sidebar {\n    background-color: #000;\n    height: 100vh;\n    width: 100%;\n    z-index: 900;\n}\n\n.sidebar.open {\n    transform: translateX(0);\n}\n\n.sidebar ul li {\n    background-color: #000;\n    border: 1px solid #090909;\n    padding: 10px 15px;\n    width: 100%;\n    height: 50px;\n    color: #fff;\n    cursor: pointer;\n    transition: background-color 0.3s ease;\n    display: flex;\n    align-items: center;\n}\n\n.sidebar ul li:hover {\n    background-image: linear-gradient(to left, #111, #000);\n}\n\n.selected {\n    background-image: linear-gradient(to left, #111, #000);\n}\n\n.premium-icon {\n    margin-left: 7px;\n    color: #fff;\n    font-size: 13px;\n    line-height: 1;\n    margin-bottom: 1px;\n}\n\nbody.sidebar-open {\n    overflow: hidden;\n}\n\n@keyframes rotate-shadow {\n    0% {\n        transform: rotate(0deg);\n        box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);\n    }\n    50% {\n        transform: rotate(180deg);\n        box-shadow: 0 0 30px rgba(0, 0, 0, 0.7);\n    }\n    100% {\n        transform: rotate(360deg);\n        box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);\n    }\n}\n\n@media (max-width: 768px) {\n    .hamburger {\n        display: block;\n    }\n\n    .sidebar {\n        display: block;\n    }\n}\n\n@media (max-width: 368px) {\n    .btc-icon {\n        display: none;\n    }\n}\n\n@media (max-width: 468px) {\n    .btc-logo {\n        width: 100%!important;\n    }\n\n    .texto-relogio {\n        display: none;\n    }\n}\n\n@media (min-width: 769px) {\n    .sidebar {\n        display: block;\n        width: 250px;\n        transform: translateX(0);\n    }\n\n    .hamburger {\n        display: none;\n    }\n}\n\n@media only screen and (max-width: 900px) {\n    .eael-tabs-nav {\n        display: none;    \n    }\n    \n    .logo-side-button {\n        display: block;\n    }\n\n    .nav-container {\n        padding-left: 0px;\n        flex-wrap: wrap;\n    }\n\n    .menu-logo {\n        display: flex;\n        margin-left: 5px;\n        width: 100%;\n    }\n\n    .btc-logo {\n        padding-right: 0px;\n        height: 43px;\n        width: 100%;\n    }\n\n    .btc-logo img {\n        width: 30px;\n    }\n\n    .nav-container img {\n        min-width: 30px;\n    }\n\n    .coluna-dois {\n        width: 100% !important;\n    }\n}\n<\/style>\n\n<div class=\"nav-container\">\n    <div class=\"menu-logo\">\n       \n        <button id=\"hamburguer-menu\" aria-label=\"Toggle dashboard menu\">\n            <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <path d=\"M11.6663 12.6686L11.801 12.6823C12.1038 12.7445 12.3313 13.0125 12.3313 13.3337C12.3311 13.6547 12.1038 13.9229 11.801 13.985L11.6663 13.9987H3.33325C2.96609 13.9987 2.66839 13.7008 2.66821 13.3337C2.66821 12.9664 2.96598 12.6686 3.33325 12.6686H11.6663ZM16.6663 6.00163L16.801 6.0153C17.1038 6.07747 17.3313 6.34546 17.3313 6.66667C17.3313 6.98788 17.1038 7.25586 16.801 7.31803L16.6663 7.33171H3.33325C2.96598 7.33171 2.66821 7.03394 2.66821 6.66667C2.66821 6.2994 2.96598 6.00163 3.33325 6.00163H16.6663Z\"><\/path>\n            <\/svg>\n        <\/button>\n\n        <div class=\"btc-logo\">\n            <div style=\"width:100%; display:flex;\"> \n                <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2024\/01\/btc.webp\" alt=\"Bitcoin Logo\">\n                <span>Bitcoin<\/span>\n            <\/div>\n            <span class=\"btc-icon\">BTC\/USD<\/span>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function () {\n    const hamburgerBtn = document.getElementById('hamburguer-menu');\n    const tabsNav = document.querySelector('.eael-tabs-nav');\n\n    \/\/ Toggle dropdown visibility\n    if (hamburgerBtn && tabsNav) {\n        hamburgerBtn.addEventListener('click', function () {\n            const currentDisplay = window.getComputedStyle(tabsNav).display;\n            tabsNav.style.display = (currentDisplay === 'none') ? 'block' : 'none';\n            this.classList.toggle('active');\n        });\n\n        \/\/ Remove or comment out this block to prevent outside clicks from closing the menu\n        \/*\n        document.addEventListener('click', function (event) {\n            if (!hamburgerBtn.contains(event.target) && !tabsNav.contains(event.target)) {\n                tabsNav.style.display = 'none';\n                hamburgerBtn.classList.remove('active');\n            }\n        });\n        *\/\n    }\n});\n\n\/\/ Animation on first\/second visit (unchanged)\ndocument.addEventListener('DOMContentLoaded', function() {\n    const visitCount = localStorage.getItem('visitCount') || 0;\n    const button = document.getElementById('hamburguer-menu');\n    \n    if (window.innerWidth <= 900 && visitCount < 2) {\n        button.classList.add('rotate-animation');\n        localStorage.setItem('visitCount', parseInt(visitCount) + 1);\n    }\n});\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-87a75fb elementor-widget__width-auto pa-display-conditions-yes elementor-widget elementor-widget-html\" data-id=\"87a75fb\" data-element_type=\"widget\" data-settings=\"{&quot;pa_display_conditions_switcher&quot;:&quot;yes&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n    .recent-data {\r\n  background: linear-gradient(120deg, #000, #1a1a1a, #151515, #1a1a1a, #000);\r\n  background-size: 400% 400%;\r\n  animation: gradientBackground 8s ease-in-out infinite;\r\n  border: 1px solid #333;\r\n  cursor: pointer;\r\n  padding: 8px 14px 8px 12px;\r\n  color: white;\r\n  font-size: 14px;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  border-radius: 4px;\r\n  transition: all 0.4s ease;\r\n  position: relative;\r\n  overflow: hidden;\r\n  height: 36px;\r\n  z-index: 40;\r\n  font-weight: 400;\r\n}\r\n\r\n@keyframes gradientBackground {\r\n  0% {\r\n    background-position: 0% 50%;\r\n  }\r\n  50% {\r\n    background-position: 100% 50%;\r\n  }\r\n  100% {\r\n    background-position: 0% 50%;\r\n  }\r\n}\r\n\r\n.recent-data::before {\r\n  content: \"\";\r\n  position: absolute;\r\n  top: 0;\r\n  left: -75%;\r\n  width: 50%;\r\n  height: 100%;\r\n  background: linear-gradient(\r\n    120deg,\r\n    transparent,\r\n    rgba(255, 255, 255, 0.25),\r\n    transparent\r\n  );\r\n  transform: skewX(-20deg);\r\n  transition: 0.7s;\r\n}\r\n\r\n.recent-data:hover::before {\r\n  left: 130%;\r\n}\r\n\r\n.recent-data:hover {\r\n  color: #fff;\r\n  box-shadow: 0 0 15px rgba(255, 215, 0, 0.185);\r\n  border-color: #555;\r\n  background: linear-gradient(120deg, #111, #222, #111);\r\n}\r\n\r\n\r\n    \/* SVG color control *\/\r\n    .recent-data svg {\r\n        fill: white!important;\r\n        transition: fill 0.2s;\r\n        width: 20px;\r\n        height: 20px;\r\n        margin-top: 2px;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .recent-data:hover svg {\r\n        fill: black;\r\n    }\r\n\r\n    .recent-data span {\r\n        margin-left: 8px;\r\n    }\r\n\r\n    \/* Tooltip style *\/\r\n    .tooltip {\r\n        display: none;\r\n        position: absolute;\r\n        left: -13.5px;\r\n        bottom: -60px;\r\n        background-color: rgba(0, 0, 0, 0.7);\r\n        color: white;\r\n        padding: 5px 10px;\r\n        border-radius: 5px;\r\n        font-size: 14px;\r\n        white-space: nowrap;\r\n        opacity: 0;\r\n        transition: opacity 0.3s;\r\n        max-width: 250px;\r\n    }\r\n\r\n    .recent-data:hover .tooltip {\r\n        display: block;\r\n        opacity: 1;\r\n    }\r\n\r\n    \/* Mobile adjustment for tooltip *\/\r\n    @media (max-width: 468px) {\r\n        .recent-data {\r\n            padding: 8px 10px;\r\n                    height: 40px;\r\n                    border: 1px solid #555;\r\n        }\r\n\r\n        .tooltip {\r\n            left: auto;\r\n            right: 0;\r\n            bottom: -65px;\r\n            transform: translateX(0%);\r\n        }\r\n    }\r\n<\/style>\r\n\r\n\r\n\r\n<!-- Bot\u00e3o com \u00edcone de rel\u00f3gio e texto \"Recent Data\" -->\r\n<button class=\"recent-data\" onclick=\"redirectToPricing()\">\r\n    <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\">\r\n        <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zm-7-8h-2v4h4v-2h-2v-2z\"\/>\r\n    <\/svg>\r\n    \r\n    <span class=\"texto-relogio\"><\/spanclass> 3 days Trial<\/span>\r\n    <div class=\"tooltip\">Unlock more access! <br>Try our <b>Maxi Plan<\/b><\/div>\r\n\r\n<\/button>\r\n\r\n<script>\r\n    \/\/ Fun\u00e7\u00e3o para redirecionar para a p\u00e1gina de pricing\r\n    function redirectToPricing() {\r\n        window.location.href = 'https:\/\/bitcoincounterflow.com\/pricing\/';\r\n    }\r\n\r\n    \/\/ Verificar se o usu\u00e1rio est\u00e1 logado ou \u00e9 um subscriber\r\n    document.addEventListener(\"DOMContentLoaded\", function() {\r\n        var userInfo = {}; \/\/ Obtenha as informa\u00e7\u00f5es do usu\u00e1rio de onde for necess\u00e1rio, como uma vari\u00e1vel global ou sess\u00e3o\r\n\r\n        \/\/ L\u00f3gica para verificar se o usu\u00e1rio est\u00e1 logado ou \u00e9 um subscriber\r\n        var isLoggedIn = userInfo && userInfo.role; \/\/ Verificar se existe um role no objeto de informa\u00e7\u00f5es do usu\u00e1rio\r\n        var isSubscriber = isLoggedIn && (userInfo.role === 'subscriber' || userInfo.role === 'administrator');\r\n\r\n        \/\/ Condicional para mostrar o bot\u00e3o\r\n        if (!isLoggedIn || isSubscriber) {\r\n            document.querySelector('.recent-data').style.display = 'inline-flex'; \/\/ Exibe o bot\u00e3o\r\n        } else {\r\n            document.querySelector('.recent-data').style.display = 'none'; \/\/ Oculta o bot\u00e3o\r\n        }\r\n    });\r\n<\/script>\r\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e368fb3 elementor-widget-tablet__width-auto tickers-container elementor-widget__width-auto elementor-widget elementor-widget-html\" data-id=\"e368fb3\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Lato:wght@400;500;700&display=swap');\r\n\r\n    .tickers {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      margin-left:-35px;\r\n    }\r\n\r\n    \r\n    .tickers span {\r\n     font-size:12px;\r\n     color: gray;  \r\n     white-space: nowrap;\r\n    }\r\n\r\n    .tickers-block {\r\n      display: grid;\r\n      margin-left: 40px;\r\n    }\r\n    \r\n    \r\n     \r\n    #change1 {\r\n     font-weight: 500 !important;\r\n    color: white; \r\n    font-family: 'Lato';\r\n    }\r\n    \r\n    #change-7d {\r\n    font-weight: 500 !important;\r\n    color: white; \r\n    font-family: 'Lato';\r\n    }\r\n\r\n\r\n   #price, #change1, #price-change-1m-value, #fear-greed, #price-change-7d-value span, #price-change-7d-value, #nupl-value, #bitcoin-dominance2, #bitcoin-ath, #funding-rate2, #long-short-ratio3, #mm-value,#delta-oi,#google-value, #ath-drawdown {\r\n    font-weight: 500 !important;\r\n    color: white; \r\n    font-size: 14.5px;\r\n    font-family: 'Lato';\r\n   } \r\n    \r\n    .tickers-container {\r\n        height: fit-content !important;\r\n       \r\n        border-radius: 5px;\r\n        margin-left: 10px;\r\n        width: 100%;\r\n    }\r\n    \r\n    \r\n    @media only screen and (max-width: 600px) {\r\n         .tickers {\r\n      margin-left:-10px;\r\n    }    \r\n    \r\n   .tickers span {\r\n    font-size: 13px;\r\n    color: gray;\r\n    width: fit-content;\r\n    }\r\n\r\n    .tickers-block {\r\n    display: grid;\r\n    margin-left: 30px !important;\r\n    }\r\n    \r\n    .tickers-block:first-child {\r\n    margin-left: 12px !important;\r\n    }\r\n    \r\n    .tickers-block:last-child {\r\n    margin-right: 25px !important;\r\n    }\r\n    \r\n    .tickers-container {\r\n         overflow: auto;\r\n         margin-left:5px;\r\n    }\r\n    \r\n    .tickers-container::-webkit-scrollbar {\r\n        width: 10px; \r\n        height: 5px; \r\n        background-color: #333; \r\n        top: 50px;\r\n\r\n    }\r\n    \r\n    .tickers-container::-webkit-scrollbar-thumb {\r\n        border-radius: 5px; \r\n    }\r\n\r\n    .tickers-container::-webkit-scrollbar-track {\r\n        border-radius: 5px; \r\n    }\r\n}\r\n <\/style>\r\n\r\n\r\n<div>\r\n  <div class=\"tickers\">\r\n    <div class=\"tickers-block\"><span>Price<\/span><span id=\"price\">-<\/span><\/div>\r\n    <div class=\"tickers-block\"><span>24h %<\/span><span id=\"change1\">-<\/span><\/div>\r\n    <div class=\"tickers-block\"><span>7d %<\/span><span id=\"price-change-7d-value\">-<\/span><\/div>\r\n    <div class=\"tickers-block\"><span>1M %<\/span><span id=\"price-change-1m-value\">-<\/span><\/div>\r\n    <div class=\"tickers-block\"><span>ATH<\/span><span id=\"bitcoin-ath\">-<\/span><\/div>\r\n    <div class=\"tickers-block\"><span>ATH \ud83d\udd3b%<\/span><span id=\"ath-drawdown\">-<\/span><\/div>\r\n    <div class=\"tickers-block\">\r\n        <span><a href=\"https:\/\/bitcoincounterflow.com\/charts\/funding-rate\" target=\"_blank\" style=\"color: inherit; text-decoration: none;\">Funding Rate<\/a><\/span>\r\n        <span id=\"funding-rate2\">-<\/span>\r\n    <\/div>\r\n    <div class=\"tickers-block\">\r\n        <span><a href=\"https:\/\/bitcoincounterflow.com\/charts\/fear-greed-index\" target=\"_blank\" style=\"color: inherit; text-decoration: none;\">Fear &amp; Greed<\/a><\/span>\r\n        <span id=\"fear-greed\">-<\/span>\r\n    <\/div>\r\n    <div class=\"tickers-block hidden-from-subscriber\">\r\n        <span><a href=\"https:\/\/bitcoincounterflow.com\/charts\/google-trends\" target=\"_blank\" style=\"color: inherit; text-decoration: none;\">Google Trends<\/a><\/span>\r\n        <span id=\"google-value\">-<\/span>\r\n    <\/div>\r\n    <div class=\"tickers-block\">\r\n        <span><a href=\"https:\/\/bitcoincounterflow.com\/charts\/bitcoin-dominance\" target=\"_blank\" style=\"color: inherit; text-decoration: none;\">Dominance<\/a><\/span>\r\n        <span id=\"bitcoin-dominance2\">-<\/span>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script defer>\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n  const el = id => document.getElementById(id);\r\n\r\n  const setText = (id, text) => {\r\n    const element = el(id);\r\n    if (element) element.textContent = text;\r\n  };\r\n\r\n  \/\/ Function to fetch ATH from Kraken\r\n  async function getKrakenATH() {\r\n    try {\r\n      const response = await fetch(\"https:\/\/api.kraken.com\/0\/public\/OHLC?pair=XBTUSD&interval=1440&since=0\");\r\n      const data = await response.json();\r\n      if (data.error && data.error.length > 0) {\r\n        throw new Error(data.error.join(\", \"));\r\n      }\r\n      const ohlc = data.result.XXBTZUSD;\r\n      let ath = 0;\r\n      let athTimestamp = null;\r\n      for (const [timestamp, open, high, low, close] of ohlc) {\r\n        const highPrice = parseFloat(high);\r\n        if (highPrice > ath) {\r\n          ath = highPrice;\r\n          athTimestamp = new Date(parseInt(timestamp) * 1000);\r\n        }\r\n      }\r\n      if (ath <= 0 || !athTimestamp) {\r\n        throw new Error(\"Invalid ATH data from Kraken\");\r\n      }\r\n      return { ath, athDate: athTimestamp };\r\n    } catch (error) {\r\n      console.error(\"Error fetching Kraken ATH:\", error.message);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  \/\/ Function to fetch ATH from Binance\r\n  async function getBinanceATH() {\r\n    try {\r\n      const response = await fetch(\"https:\/\/api.binance.com\/api\/v3\/klines?symbol=BTCUSDT&interval=1d&limit=1000\");\r\n      const data = await response.json();\r\n      if (!Array.isArray(data)) {\r\n        throw new Error(\"Invalid response from Binance\");\r\n      }\r\n      let ath = 0;\r\n      let athTimestamp = null;\r\n      for (const kline of data) {\r\n        const highPrice = parseFloat(kline[2]);\r\n        const timestamp = parseInt(kline[0]);\r\n        if (highPrice > ath) {\r\n          ath = highPrice;\r\n          athTimestamp = new Date(timestamp);\r\n        }\r\n      }\r\n      if (ath <= 0 || !athTimestamp) {\r\n        throw new Error(\"Invalid ATH data from Binance\");\r\n      }\r\n      return { ath, athDate: athTimestamp };\r\n    } catch (error) {\r\n      console.error(\"Error fetching Binance ATH:\", error.message);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  \/\/ Function to fetch ATH from CoinGecko\r\n  async function getCoinGeckoATH() {\r\n    try {\r\n      const response = await fetch(\"https:\/\/api.coingecko.com\/api\/v3\/coins\/bitcoin\");\r\n      const data = await response.json();\r\n      if (!data.market_data) {\r\n        throw new Error(\"Invalid response from CoinGecko\");\r\n      }\r\n      const ath = parseFloat(data.market_data.ath.usd);\r\n      const athDate = new Date(data.market_data.ath_date.usd);\r\n      if (isNaN(ath) || ath <= 0 || isNaN(athDate.getTime())) {\r\n        throw new Error(\"Invalid ATH data from CoinGecko\");\r\n      }\r\n      return { ath, athDate };\r\n    } catch (error) {\r\n      console.error(\"Error fetching CoinGecko ATH:\", error.message);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  \/\/ Function to fetch ATH with fallback mechanism\r\n  async function getBitcoinATH() {\r\n    let result = await getKrakenATH();\r\n    if (result) return result;\r\n    console.warn(\"Kraken ATH fetch failed, falling back to Binance\");\r\n    \r\n    result = await getBinanceATH();\r\n    if (result) return result;\r\n    console.warn(\"Binance ATH fetch failed, falling back to CoinGecko\");\r\n    \r\n    result = await getCoinGeckoATH();\r\n    if (result) return result;\r\n    \r\n    console.warn(\"All external ATH sources failed\");\r\n    return null;\r\n  }\r\n\r\n  async function fetchData(url, label = 'API') {\r\n    try {\r\n      const res = await fetch(url);\r\n      if (!res.ok) throw new Error(`[${label}] Status ${res.status}`);\r\n      return await res.json();\r\n    } catch (err) {\r\n      console.error(`[${label}] Erro:`, err);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  function setupBinanceWebSocket(athData) {\r\n    const priceEl = el('price');\r\n    const athDrawdownEl = el('ath-drawdown');\r\n\r\n    \/\/ Helper to update price and ATH drawdown\r\n    const applyPrice = (price) => {\r\n      if (!isNaN(price)) {\r\n        priceEl.textContent = `$ ${price.toFixed(0)}`;\r\n        if (athData && athData.ath) {\r\n          const drawdown = ((athData.ath - price) \/ athData.ath) * 100;\r\n          athDrawdownEl.textContent = isNaN(drawdown) ? '-' : `${drawdown.toFixed(2)}%`;\r\n        }\r\n        \/\/ Invalidate cache if current price exceeds cached ATH\r\n        const cached = localStorage.getItem('btc_tickers_cache');\r\n        if (cached) {\r\n          try {\r\n            const { data: cachedData } = JSON.parse(cached);\r\n            const cachedATH = cachedData.athData?.ath || 0;\r\n            if (price > cachedATH) {\r\n              console.log('Current price exceeds cached ATH, invalidating cache...');\r\n              localStorage.removeItem('btc_tickers_cache');\r\n              fetchTickers();\r\n            }\r\n          } catch (e) {\r\n            console.warn('Erro ao verificar cache para ATH:', e);\r\n          }\r\n        }\r\n      }\r\n    };\r\n\r\n    \/\/ Try kline_1m first (useful for candles). If no kline messages arrive within timeoutMs, fallback to trade stream.\r\n    const timeoutMs = 12000;\r\n    let fallbackTimer = null;\r\n    let gotKline = false;\r\n    let wsPrimary = null;\r\n\r\n    function openStream(url, onMessage, name) {\r\n      try {\r\n        const ws = new WebSocket(url);\r\n        ws.onopen = () => console.log('[tickers] WS open', name, url);\r\n        ws.onmessage = onMessage;\r\n        ws.onerror = (e) => console.error('[tickers] WS error', name, e);\r\n        ws.onclose = (ev) => console.warn('[tickers] WS close', name, ev && ev.code);\r\n        return ws;\r\n      } catch (e) {\r\n        console.error('[tickers] failed to open ws', name, e);\r\n        return null;\r\n      }\r\n    }\r\n\r\n    \/\/ Primary: futures kline_1m (use \/market base URL per Binance migration)\r\n    const klineUrl = 'wss:\/\/fstream.binance.com\/market\/ws\/btcusdt@kline_1m';\r\n    wsPrimary = openStream(klineUrl, (event) => {\r\n      try {\r\n        const msg = JSON.parse(event.data);\r\n        \/\/ kline event structure: { e: 'kline', E, s, k: { t, T, o, h, l, c, v, x } }\r\n        const k = msg.k || msg;\r\n        if (k && typeof k.c !== 'undefined') {\r\n          const price = parseFloat(k.c);\r\n          applyPrice(price);\r\n          gotKline = true;\r\n          if (fallbackTimer) { clearTimeout(fallbackTimer); fallbackTimer = null; }\r\n        }\r\n      } catch (e) {\r\n        console.warn('[tickers] parse kline failed', e);\r\n      }\r\n    }, 'fstream:kline_1m');\r\n\r\n    \/\/ Set fallback: if no kline received within timeout, switch to trade stream\r\n    fallbackTimer = setTimeout(() => {\r\n        if (!gotKline) {\r\n        console.warn('[tickers] no kline_1m received in time, falling back to aggTrade stream');\r\n        try {\r\n          if (wsPrimary && wsPrimary.close) wsPrimary.close();\r\n        } catch (e) {}\r\n        \/\/ open aggTrade stream (faster tick updates; futures aggTrade proved reliable)\r\n        const aggTradeUrl = 'wss:\/\/fstream.binance.com\/market\/ws\/btcusdt@aggTrade';\r\n        wsPrimary = openStream(aggTradeUrl, (event) => {\r\n          try {\r\n            const t = JSON.parse(event.data);\r\n            const price = parseFloat(t.p || t.price || (t.k && t.k.c));\r\n            applyPrice(price);\r\n          } catch (e) { console.warn('[tickers] parse aggTrade failed', e); }\r\n        }, 'fstream:aggTrade');\r\n      }\r\n    }, timeoutMs);\r\n\r\n    \/\/ Additionally, keep a markPrice socket to display mark price if desired\r\n    try {\r\n      const markUrl = 'wss:\/\/fstream.binance.com\/market\/ws\/btcusdt@markPrice@1s';\r\n      const wsMark = openStream(markUrl, (event) => {\r\n        try {\r\n          const data = JSON.parse(event.data);\r\n          const price = parseFloat(data.p);\r\n          \/\/ only apply if we don't have a fresher price from kline\/trade\r\n          if (!isNaN(price)) applyPrice(price);\r\n        } catch (e) {}\r\n      }, 'fstream:markPrice');\r\n      \/\/ keep mark socket open but do not block primary\r\n    } catch (e) {}\r\n  }\r\n\r\n  function applyTickerData({ googleTrendsData, fearGreedData, dominanceData, fundingRateData, bitcoinPerformance, athData }) {\r\n    if (Array.isArray(googleTrendsData) && googleTrendsData.length) {\r\n      const latest = googleTrendsData.sort((a, b) => new Date(b.date) - new Date(a.date))[0]?.interest;\r\n      setText('google-value', typeof latest === 'number' ? latest.toString() : '-');\r\n    }\r\n\r\n    const fngValue = fearGreedData?.data?.[0]?.value;\r\n    setText('fear-greed', fngValue ? `${fngValue}\/100` : '-');\r\n\r\n    if (Array.isArray(dominanceData) && dominanceData.length) {\r\n      const latest = dominanceData.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp))[0];\r\n      const dominance = parseFloat(latest?.dominance);\r\n      setText('bitcoin-dominance2', isNaN(dominance) ? '-' : `${dominance.toFixed(2)}%`);\r\n    }\r\n\r\n    const rate = parseFloat(fundingRateData);\r\n    setText('funding-rate2', isNaN(rate) ? '-' : `${rate.toFixed(4)}%`);\r\n\r\n    \/\/ Apply data from bitcoin-performance API\r\n    if (bitcoinPerformance) {\r\n      setText('change1', bitcoinPerformance.change24h ? `${bitcoinPerformance.change24h > 0 ? '+' : ''}${bitcoinPerformance.change24h.toFixed(2)}%` : '-');\r\n      setText('price-change-7d-value', bitcoinPerformance.change7d ? `${bitcoinPerformance.change7d > 0 ? '+' : ''}${bitcoinPerformance.change7d.toFixed(2)}%` : '-');\r\n      setText('price-change-1m-value', bitcoinPerformance.change1m ? `${bitcoinPerformance.change1m > 0 ? '+' : ''}${bitcoinPerformance.change1m.toFixed(2)}%` : '-');\r\n    } else {\r\n      setText('change1', '-');\r\n      setText('price-change-7d-value', '-');\r\n      setText('price-change-1m-value', '-');\r\n    }\r\n\r\n    \/\/ Apply ATH and drawdown\r\n    const priceText = el('price').textContent.replace(\/[^0-9.]\/g, '');\r\n    const currentPrice = parseFloat(priceText);\r\n    if (athData && athData.ath) {\r\n      setText('bitcoin-ath', `$ ${Math.round(athData.ath)}`);\r\n      if (!isNaN(currentPrice)) {\r\n        const drawdown = ((athData.ath - currentPrice) \/ athData.ath) * 100;\r\n        setText('ath-drawdown', isNaN(drawdown) ? '-' : `${drawdown.toFixed(2)}%`);\r\n      } else {\r\n        setText('ath-drawdown', '-');\r\n      }\r\n    } else {\r\n      setText('bitcoin-ath', '-');\r\n      setText('ath-drawdown', '-');\r\n    }\r\n  }\r\n\r\n  async function fetchTickers() {\r\n    const CACHE_KEY = 'btc_tickers_cache';\r\n    const CACHE_TTL = 60 * 1000; \/\/ 1 minute\r\n    const now = Date.now();\r\n\r\n    \/\/ Check cache\r\n    let cached = localStorage.getItem(CACHE_KEY);\r\n    if (cached) {\r\n      try {\r\n        cached = JSON.parse(cached);\r\n        if (now - cached.timestamp < CACHE_TTL && cached.data && cached.data.bitcoinPerformance && cached.data.athData) {\r\n          console.log('Using cached data');\r\n          applyTickerData(cached.data);\r\n          setupBinanceWebSocket(cached.data.athData);\r\n          return;\r\n        }\r\n      } catch (e) {\r\n        console.warn('Corrupted cache, clearing...');\r\n        localStorage.removeItem(CACHE_KEY);\r\n      }\r\n    }\r\n\r\n    console.log('Fetching fresh data from APIs...');\r\n    const [\r\n      googleTrendsData,\r\n      fearGreedData,\r\n      dominanceData,\r\n      fundingRateData,\r\n      bitcoinPerformance,\r\n      athData\r\n    ] = await Promise.all([\r\n      fetchData('https:\/\/api.bitcoincounterflow.com\/api\/google-trends', 'GoogleTrends'),\r\n      fetchData('https:\/\/api.alternative.me\/fng\/', 'FearGreed'),\r\n      fetchData('https:\/\/api.bitcoincounterflow.com\/api\/bitcoin-dominance?days=2', 'Dominance'),\r\n      fetchData('https:\/\/api.bitcoincounterflow.com\/api\/last-global-funding-rate', 'FundingRate'),\r\n      fetchData('https:\/\/api.bitcoincounterflow.com\/api\/bitcoin-performance', 'BitcoinPerformance'),\r\n      getBitcoinATH()\r\n    ]);\r\n\r\n    const data = { googleTrendsData, fearGreedData, dominanceData, fundingRateData, bitcoinPerformance, athData };\r\n    try {\r\n      localStorage.setItem(CACHE_KEY, JSON.stringify({ timestamp: now, data }));\r\n    } catch (e) {\r\n      console.error('Error saving to localStorage:', e);\r\n    }\r\n    applyTickerData(data);\r\n    setupBinanceWebSocket(athData);\r\n  }\r\n\r\n  fetchTickers();\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<span class=\"wpr-template-edit-btn\" data-permalink=\"https:\/\/bitcoincounterflow.com\/?elementor_library=tickers-charts\">Edit Template<\/span>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8ed603d e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"8ed603d\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-d63e6fb e-con-full eael-tabs-nav e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"d63e6fb\" data-element_type=\"container\" id=\"eael-tabs-nav\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-50e7d4d elementor-widget elementor-widget-wpr-elementor-template\" data-id=\"50e7d4d\" data-element_type=\"widget\" data-widget_type=\"wpr-elementor-template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>.elementor-42735 .elementor-element.elementor-element-5074bb6{--display:flex;--background-transition:0.3s;border-style:none;--border-style:none;--border-radius:0px 0px 0px 0px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-42735 .elementor-element.elementor-element-5074bb6, .elementor-42735 .elementor-element.elementor-element-5074bb6::before{--border-transition:0.3s;}<\/style>\t\t<div data-elementor-type=\"container\" data-elementor-id=\"42735\" class=\"elementor elementor-42735\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5074bb6 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"5074bb6\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c570b7e elementor-widget elementor-widget-html\" data-id=\"c570b7e\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div id=\"toggle-container\">\r\n  <a id=\"charts-title\" href=\"https:\/\/bitcoincounterflow.com\/charts\">Charts<\/a>\r\n  <span class=\"toggle-all-categories\" aria-label=\"Expandir todas as categorias\" tabindex=\"0\">\r\n    <!-- SVG Expand (seta para baixo) -->\r\n     <svg class=\"toggle-icon expand\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n      <path d=\"M18 15l-6-6-6 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n    <\/svg>\r\n    \r\n    <!-- SVG Collapse (seta para cima) -->\r\n   \r\n    <svg class=\"toggle-icon collapse\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n      <path d=\"M6 9l6 6 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n    <\/svg>\r\n  <\/span>\r\n  <div id=\"toggle-btn\" role=\"button\" aria-expanded=\"true\" aria-label=\"Ocultar barra lateral\" tabindex=\"0\">\r\n    <!-- SVG 1 (inicial) -->\r\n    <svg id=\"icon-1\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\">\r\n      <g>\r\n        <path fill-rule=\"evenodd\" d=\"M5.5 2.25a.75.75 0 0 1 .75.75v18a.75.75 0 0 1-1.5 0V3a.75.75 0 0 1 .75-.75Zm8.53 4.22a.75.75 0 0 1 0 1.06l-3.72 3.72H20.5a.75.75 0 0 1 0 1.5H10.31l3.72 3.72a.75.75 0 0 1-1.06 1.06l-5-5a.75.75 0 0 1 0-1.06l5-5a.75.75 0 0 1 1.06 0Z\" class=\"fill-icon-primary\" clip-rule=\"evenodd\"><\/path>\r\n      <\/g>\r\n    <\/svg>\r\n\r\n    <!-- SVG 2 (inicialmente oculto) -->\r\n    <svg id=\"icon-2\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" style=\"display:none;\">\r\n      <g>\r\n        <path fill-rule=\"evenodd\" d=\"M5.5 2.25a.75.75 0 0 1 .75.75v18a.75.75 0 0 1-1.5 0V3a.75.75 0 0 1 .75-.75Zm9.43 4.222a.75.75 0 0 1 1.061-.004l5.037 5a.75.75 0 0 1 0 1.064l-5.037 5a.75.75 0 0 1-1.057-1.064l3.746-3.718H8.5a.75.75 0 0 1 0-1.5h10.18l-3.746-3.718a.75.75 0 0 1-.004-1.06Z\" class=\"fill-icon-primary\" clip-rule=\"evenodd\"><\/path>\r\n      <\/g>\r\n    <\/svg>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n.eicon-expand:before {\r\n    content: \"\\e8f0\";\r\n    display: none;\r\n}\r\n\r\n.eicon-collapse:before {\r\n    content: \"\\e8ef\";\r\n    display: none;\r\n}\r\n\r\n\r\nsvg.toggle-icon {\r\n    border: 1px solid #d2d2d2;\r\n    border-radius: 2.5px;\r\n}\r\n\r\n\r\ndiv#eael-tabs-nav {\r\n    border-right: 1px solid #111;\r\n}\r\n\r\n.fill-icon-primary { fill:#fff; }\r\n\r\n#toggle-btn {\r\n    right:7px; \r\n    position:absolute; \r\n    border-radius:5px; \r\n    transition:background-color .1s; \r\n    z-index:45;\r\n}\r\n\r\n\/* clase para ocultar la barra lateral *\/\r\n#sidebar.is-hidden { display:none !important; }\r\n\r\n#sidebar { transition: transform .2s ease, opacity .2s ease; }\r\n#sidebar.is-hidden { transform: translateX(-12px); opacity:0; pointer-events:none; }\r\n\r\n#sidebar { padding-top: 43px; }\r\n\r\n\/* estilo cuando las pesta\u00f1as se \"compactan\" *\/\r\n#eael-tabs-nav.compact {\r\n    width: 45px !important;\r\n    transition: width .2s ease;\r\n}\r\n\r\n@media (max-width: 768px) {\r\n    #toggle-btn, .toggle-all-categories {\r\n        display: none!important;\r\n    }\r\n    \r\n    #sidebar {\r\n        padding-top: 13px;\r\n    }\r\n    \r\n    #charts-title {\r\n        display: none;\r\n  }\r\n  \r\n  \r\n}\r\n\r\n\/* cuando el t\u00edtulo debe ocultarse *\/\r\n#charts-title.is-hidden {\r\n    display: none;\r\n}\r\n\r\n#toggle-container {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    position: absolute;\r\n    top: 9px;\r\n    right: 0px;\r\n    z-index: 45;\r\n    width: 100%;\r\n    padding-left: 20px;\r\n}\r\n\r\n#charts-title {\r\n    color: #fff;\r\n    font-size: 16px;\r\n    font-weight: 400; \r\n}\r\n\r\n#toggle-btn {\r\n    cursor: pointer;\r\n    width: 24px;\r\n    height: 24px;\r\n    border-radius: 5px;\r\n    transition: background-color .1s;\r\n}\r\n\r\n.toggle-all-categories {\r\n  cursor: pointer;\r\n  font-size: 16px;\r\n  margin-left: 0px;\r\n  color: #eee;\r\n  transition: color 0.2s ease;\r\n  transform: scale(0.85);\r\n  display: flex;\r\n  align-items: center;\r\n  position: relative;\r\n  width: 16px;\r\n  height: 16px;\r\n}\r\n\r\n.toggle-all-categories:hover {\r\n    color: #e0e6f0;\r\n}\r\n\r\n.toggle-all-categories .toggle-icon {\r\n  width: 16px;\r\n  height: 16px;\r\n  stroke: currentColor;\r\n  transition: stroke 0.2s ease, transform 0.2s ease, opacity 0.1s ease;\r\n  position: absolute;\r\n  left: 0;\r\n  top: 0;\r\n}\r\n\r\n.toggle-all-categories .expand {\r\n  opacity: 1;\r\n  transform: rotate(0deg);\r\n}\r\n\r\n.toggle-all-categories .collapse {\r\n  opacity: 0;\r\n  transform: rotate(-180deg);\r\n}\r\n\r\n.toggle-all-categories.collapsed .expand {\r\n  opacity: 0;\r\n  transform: rotate(180deg);\r\n}\r\n\r\n.toggle-all-categories.collapsed .collapse {\r\n  opacity: 1;\r\n  transform: rotate(0deg);\r\n}\r\n\r\n\/* Variables CSS para mantener consistencia *\/\r\n:root {\r\n    --primary-bg: #0a0a0a;\r\n    --secondary-bg: #1a1a1a;\r\n    --text-color: #f0f0f0;\r\n    --accent-color: #e0e6f0;\r\n    --border-color: #2a2a2a;\r\n    --premium-bg: #ffffff;\r\n    --premium-text: #000000;\r\n    --premium-border: #222222;\r\n    --transition: 0.2s ease;\r\n    --font-stack: 'Roboto Mono', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n}\r\n\r\n\/* Estilo de la barra lateral *\/\r\n.sidebar {\r\n    width: 100%;\r\n    padding: 12px;\r\n    box-sizing: border-box;\r\n    font-family: var(--font-stack);\r\n    color: var(--text-color);\r\n    height: 100%;\r\n}\r\n\r\n.sidebar ul {\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n}\r\n\r\n.sidebar ul li {\r\n    display: flex;\r\n    align-items: center;\r\n    padding: 6px 8px;\r\n    border: 1px solid #111;\r\n    margin-bottom: 7px;\r\n    cursor: pointer;\r\n    transition: background-color var(--transition), box-shadow var(--transition);\r\n    font-size: 13px;\r\n    line-height: 1.4;\r\n    border-radius: 4px;\r\n    font-weight: 400;\r\n    height: 45px !important;\r\n    z-index: 35;\r\n}\r\n\r\n.sidebar section {\r\n    padding-inline: 10px;\r\n}\r\n\r\n.sidebar ul li:hover,\r\n.sidebar ul li.selected {\r\n    box-shadow: 0 0 6px rgba(224, 230, 240, 0.3);\r\n}\r\n\r\n.category a svg {\r\n    display: none !important;\r\n}\r\n\r\n.category-header {\r\n    font-weight: 600;\r\n    font-size: 15px;\r\n    padding: 5px 8px;\r\n    background-color: #080808 !important;\r\n    border: 1px solid #191919 !important;\r\n    display: flex;\r\n    align-items: center;\r\n    position: sticky;\r\n    top: 0;\r\n    z-index: 1;\r\n    margin-bottom: 6px;\r\n}\r\n\r\n.category-header::after {\r\n    content: '';\r\n    width: 10px;\r\n    height: 10px;\r\n    background: url('data:image\/svg+xml;utf8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%23e0e6f0\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>') no-repeat center;\r\n    transition: transform var(--transition);\r\n    margin-left: auto;\r\n}\r\n\r\n.category-header.collapsed::after {\r\n    transform: rotate(-90deg);\r\n}\r\n\r\n.category {\r\n    transition: max-height var(--transition), opacity var(--transition);\r\n    opacity: 1;\r\n    max-height: 0;\r\n    overflow: hidden;\r\n}\r\n\r\n.category.expanded {\r\n    max-height: 100%;\r\n    opacity: 1;\r\n    padding-top: 2px;\r\n    margin-bottom: 5px;\r\n}\r\n\r\n.category-icon {\r\n    margin-right: 6px;\r\n    stroke: var(--text-color);\r\n    filter: drop-shadow(0 0 2px rgba(224, 230, 240, 0.2));\r\n}\r\n\r\n.icon {\r\n    margin-right: 6px;\r\n    stroke: var(--text-color);\r\n    transition: transform var(--transition), stroke var(--transition);\r\n}\r\n\r\n.sidebar ul li:hover .icon,\r\n.sidebar ul li.selected .icon {\r\n    stroke: var(--accent-color);\r\n    transform: scale(1.1);\r\n}\r\n\r\n.premium-badge {\r\n    margin-left: 4px;\r\n    padding: 1px 3px;\r\n    font-size: 9px;\r\n    font-weight: 600;\r\n    color: var(--premium-text);\r\n    background-color: var(--premium-bg);\r\n    border: 1px solid var(--premium-border);\r\n    border-radius: 3px;\r\n    line-height: 1.2;\r\n    display: inline-block;\r\n    transition: background-color var(--transition);\r\n}\r\n\r\n.premium-badge:hover {\r\n    background-color: #e8e8e8;\r\n}\r\n\r\n.sidebar-toggle {\r\n    display: none;\r\n    background: var(--secondary-bg);\r\n    color: var(--text-color);\r\n    border: 1px solid var(--border-color);\r\n    padding: 6px;\r\n    font-size: 13px;\r\n    cursor: pointer;\r\n    width: 100%;\r\n    text-align: left;\r\n    margin-bottom: 6px;\r\n    border-radius: 4px;\r\n    position: sticky;\r\n    top: 0;\r\n    z-index: 2;\r\n}\r\n\r\n.toggle-icon {\r\n    stroke: var(--text-color);\r\n}\r\n\r\nsvg#icon-2 {\r\n    margin-top: 15px;\r\n}\r\n\r\n\/* Dise\u00f1o Responsivo *\/\r\n@media (max-width: 900px) {\r\n    .sidebar {\r\n        width: 100%;\r\n        background-color: #000;\r\n        z-index: 1000;\r\n        transition: transform 0.3s ease;\r\n    }\r\n\r\n    .sidebar.visible {\r\n        transform: translateX(0);\r\n    }\r\n\r\n    .coluna-dois {\r\n        transition: margin-left 0.3s ease;\r\n        margin-left: 0;\r\n    }\r\n\r\n    .coluna-dois.shifted {\r\n        margin-left: 280px;\r\n    }\r\n    \r\n    .toggle-all-categories {\r\n      display: none;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n  document.addEventListener('DOMContentLoaded', () => {\r\n  const toggleBtn = document.getElementById('toggle-btn');\r\n  const sidebar = document.getElementById('sidebar');\r\n  const icon1 = document.getElementById('icon-1');\r\n  const icon2 = document.getElementById('icon-2');\r\n  const tabsNav = document.getElementById('eael-tabs-nav');\r\n  const chartsTitle = document.getElementById('charts-title');\r\n  const toggleAllBtn = document.querySelector('.toggle-all-categories');\r\n\r\n  if (!toggleBtn || !sidebar || !icon1 || !icon2 || !tabsNav || !chartsTitle) {\r\n    console.error('Toggle setup: algum elemento n\u00e3o foi encontrado.');\r\n    return;\r\n  }\r\n\r\n  function isSidebarHidden() {\r\n    return sidebar.classList.contains('is-hidden') ||\r\n           window.getComputedStyle(sidebar).display === 'none';\r\n  }\r\n\r\n  function updateIcons(hidden) {\r\n    if (hidden) {\r\n      icon1.style.display = 'none';\r\n      icon2.style.display = 'block';\r\n      toggleBtn.setAttribute('aria-expanded', 'false');\r\n      toggleBtn.setAttribute('aria-label', 'Show sidebar');\r\n      chartsTitle.classList.add('is-hidden');\r\n      if (toggleAllBtn) toggleAllBtn.style.display = 'none'; \/\/ Hide toggle-all-categories\r\n    } else {\r\n      icon1.style.display = 'block';\r\n      icon2.style.display = 'none';\r\n      toggleBtn.setAttribute('aria-expanded', 'true');\r\n      toggleBtn.setAttribute('aria-label', 'Hide sidebar');\r\n      chartsTitle.classList.remove('is-hidden');\r\n      if (toggleAllBtn) toggleAllBtn.style.display = 'flex'; \/\/ Show toggle-all-categories\r\n    }\r\n  }\r\n\r\n  function toggleSidebar() {\r\n    const hidden = isSidebarHidden();\r\n    if (hidden) {\r\n      sidebar.classList.remove('is-hidden');\r\n      tabsNav.classList.remove('compact');\r\n    } else {\r\n      sidebar.classList.add('is-hidden');\r\n      tabsNav.classList.add('compact');\r\n    }\r\n    updateIcons(!hidden);\r\n  }\r\n\r\n  \/\/ Estado inicial\r\n  updateIcons(isSidebarHidden());\r\n\r\n  \/\/ Clique e teclado (Enter\/Espa\u00e7o) para acessibilidade\r\n  toggleBtn.addEventListener('click', toggleSidebar);\r\n  toggleBtn.addEventListener('keydown', (e) => {\r\n    if (e.key === 'Enter' || e.key === ' ') {\r\n      e.preventDefault();\r\n      toggleSidebar();\r\n    }\r\n  });\r\n\r\n  if (toggleAllBtn) {\r\n    \/\/ Fun\u00e7\u00e3o para verificar se todas as categorias est\u00e3o expandidas\r\n    function areAllExpanded() {\r\n      const categories = document.querySelectorAll('.category');\r\n      return Array.from(categories).every(cat => cat.classList.contains('expanded'));\r\n    }\r\n\r\n    \/\/ Atualizar \u00edcone e aria-label com base no estado\r\n    function updateToggleAllIcon() {\r\n      if (areAllExpanded()) {\r\n        toggleAllBtn.classList.remove('collapsed');\r\n        toggleAllBtn.setAttribute('aria-label', 'Colapsar todas as categorias');\r\n      } else {\r\n        toggleAllBtn.classList.add('collapsed');\r\n        toggleAllBtn.setAttribute('aria-label', 'Expandir todas as categorias');\r\n      }\r\n    }\r\n\r\n    \/\/ Estado inicial\r\n    updateToggleAllIcon();\r\n\r\n    \/\/ Evento de clique para alternar todas as categorias\r\n    toggleAllBtn.addEventListener('click', () => {\r\n      const allExpanded = areAllExpanded();\r\n      document.querySelectorAll('.category').forEach(category => {\r\n        if (allExpanded) {\r\n          category.classList.add('collapsed');\r\n          category.classList.remove('expanded');\r\n          document.querySelector(`[data-toggle=\"${category.id}\"]`).classList.add('collapsed');\r\n          localStorage.setItem(`category-${category.id}`, 'collapsed');\r\n        } else {\r\n          category.classList.remove('collapsed');\r\n          category.classList.add('expanded');\r\n          document.querySelector(`[data-toggle=\"${category.id}\"]`).classList.remove('collapsed');\r\n          localStorage.setItem(`category-${category.id}`, 'expanded');\r\n        }\r\n      });\r\n      updateToggleAllIcon();\r\n    });\r\n\r\n    \/\/ Suporte a teclado para acessibilidade\r\n    toggleAllBtn.addEventListener('keydown', (e) => {\r\n      if (e.key === 'Enter' || e.key === ' ') {\r\n        e.preventDefault();\r\n        toggleAllBtn.click();\r\n      }\r\n    });\r\n  }\r\n});\r\n<\/script>\r\n\r\n\r\n \r\n <nav id=\"sidebar\" class=\"sidebar\" aria-label=\"Chart Navigation\">\r\n    <button class=\"sidebar-toggle\" aria-label=\"Toggle Sidebar\" aria-expanded=\"false\">\r\n        <svg class=\"toggle-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\r\n            <path d=\"M3 6h18M3 12h18M3 18h18\"\/>\r\n        <\/svg>\r\n    <\/button>\r\n    <ul>\r\n        <li class=\"category-header\" data-toggle=\"core-models\">\r\n            <svg class=\"category-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\r\n                <path d=\"M12 2v20M2 12h20\"\/>\r\n            <\/svg>\r\n            Core Models\r\n        <\/li>\r\n        <section class=\"category collapsed\" id=\"core-models\">\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/backtest-model-creator\/\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Backtest Model Creator\">\r\n                        <path d=\"M12 2a10 10 0 0 0-10 10a10 10 0 0 0 10 10\"\/>\r\n                    <\/svg>\r\n                    Backtest and Model Creator <span class=\"premium-badge\" aria-label=\"Premium Feature\">PRO<\/span>\r\n                <\/li>\r\n            <\/a>\r\n            \r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/counterflow-model\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"CounterFlow Model Chart\">\r\n                        <path d=\"M12 2a10 10 0 0 0-10 10a10 10 0 0 0 10 10\"\/>\r\n                    <\/svg>\r\n                    CounterFlow Model \r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/omniflow-model\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"OmniFlow Model Chart\">\r\n                        <path d=\"M12 2v20M2 12h20\"\/>\r\n                    <\/svg>\r\n                    OmniFlow Model <span class=\"premium-badge\" aria-label=\"Premium Feature\">PRO<\/span>\r\n                <\/li>\r\n            <\/a>\r\n        <\/section>\r\n\r\n        <li class=\"category-header\" data-toggle=\"macro-liquidity\">\r\n            <svg class=\"category-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\r\n                <path d=\"M3 18l6-6 4 4 8-8\"\/>\r\n            <\/svg>\r\n            Macro & Liquidity\r\n        <\/li>\r\n        <section class=\"category collapsed\" id=\"macro-liquidity\">\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/m2-global\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Global M2 Growth Chart\">\r\n                        <circle cx=\"12\" cy=\"12\" r=\"10\"\/>\r\n                        <circle cx=\"12\" cy=\"12\" r=\"6\"\/>\r\n                    <\/svg>\r\n                    Global M2 Growth \r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/bitcoin-gold-sp500\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Bitcoin vs Gold vs S&P500 Chart\">\r\n                        <path d=\"M4 4h16v16H4zM8 8h8v8H8z\"\/>\r\n                    <\/svg>\r\n                    Bitcoin x Gold x S&P500\r\n                <\/li>\r\n            <\/a>\r\n            \r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/dxy\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"DXY Chart\">\r\n                        <path d=\"M12 2l8 8-8 8-8-8z\"\/>\r\n                    <\/svg>\r\n                    DXY x Bitcoin\r\n                <\/li>\r\n            <\/a>\r\n        <\/section>\r\n\r\n        <li class=\"category-header\" data-toggle=\"liquidations-heatmaps\">\r\n            <svg class=\"category-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\r\n                <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\/>\r\n            <\/svg>\r\n            Heatmaps & SuperChart\r\n        <\/li>\r\n        <section class=\"category collapsed\" id=\"liquidations-heatmaps\">\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/liquidation-heatmap\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Liquidation Heatmap Chart\">\r\n                        <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\/>\r\n                        <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"1\"\/>\r\n                    <\/svg>\r\n                    Liquidation Heatmap \r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/liquidation-map\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Liquidation Map Chart\">\r\n                        <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\/>\r\n                        <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"1\"\/>\r\n                    <\/svg>\r\n                    Liquidation Map \r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/price-visit-frequency-heatmap\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Price Visit Frequency Heatmap\">\r\n                        <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\/>\r\n                        <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"1\"\/>\r\n                    <\/svg>\r\n                    Price Visit Frequency Heatmap\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/coinglass-superchart\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"CounterFlow SuperChart\">\r\n                        <path d=\"M12 2l10 10-10 10-10-10z\"\/>\r\n                    <\/svg>\r\n                    CounterFlow SuperChart <span class=\"premium-badge\" aria-label=\"Premium Feature\">PRO<\/span>\r\n                <\/li>\r\n            <\/a>\r\n        <\/section>\r\n\r\n        <li class=\"category-header\" data-toggle=\"market-cycles\">\r\n            <svg class=\"category-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\r\n                <path d=\"M3 12a9 9 0 0 1 18 0\"\/>\r\n            <\/svg>\r\n            Market Cycles & Comparisons\r\n        <\/li>\r\n        <section class=\"category collapsed\" id=\"market-cycles\">\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/from-low-to-low-comparison\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Low-to-Low Comparison Chart\">\r\n                        <path d=\"M3 18v-6h6v6M15 18v-12h6v12\"\/>\r\n                    <\/svg>\r\n                    From Low-to-Low Comparison\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/after-halving-comparison\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"After Halving Comparison Chart\">\r\n                        <path d=\"M3 18l6-6 6 6 6-6\"\/>\r\n                    <\/svg>\r\n                    After Halving Comparison\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/price-trajectories-around-halving\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Halving Cycles Comparison Chart\">\r\n                        <path d=\"M3 12a9 9 0 0 1 18 0\"\/>\r\n                    <\/svg>\r\n                    Halving Cycles Comparison\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/bear-market-phase-chart\/\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Bull Market Drawdowns Chart\">\r\n                        <path d=\"M3 18l9-12 9 12\"\/>\r\n                    <\/svg>\r\n                    Bear Market Phase \r\n                <\/li>\r\n            <\/a>\r\n            \r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/bull-market-corrections-drawdowns\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Bull Market Drawdowns Chart\">\r\n                        <path d=\"M3 18l9-12 9 12\"\/>\r\n                    <\/svg>\r\n                    Bull Market Drawdowns \r\n                <\/li>\r\n            <\/a>\r\n        <\/section>\r\n\r\n        <li class=\"category-header\" data-toggle=\"sentiment-indicators\">\r\n            <svg class=\"category-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\r\n                <circle cx=\"12\" cy=\"12\" r=\"10\"\/>\r\n            <\/svg>\r\n            Sentiment & Behavioral\r\n        <\/li>\r\n        <section class=\"category collapsed\" id=\"sentiment-indicators\">\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/fear-greed-index\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Fear and Greed Index Chart\">\r\n                        <path d=\"M12 2a10 10 0 0 0-10 10c0 2.76 1.12 5.26 2.93 7.07\"\/>\r\n                    <\/svg>\r\n                    Fear & Greed Index\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/google-trends\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Google Trends Chart\">\r\n                        <circle cx=\"12\" cy=\"12\" r=\"8\"\/>\r\n                        <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/>\r\n                    <\/svg>\r\n                    Google Trends <span class=\"premium-badge\" aria-label=\"Premium Feature\">PRO<\/span>\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/nupl\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"NUPL Chart\">\r\n                        <path d=\"M12 2v20\"\/>\r\n                    <\/svg>\r\n                    NUPL\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/mvrv\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"MVRV Chart\">\r\n                        <path d=\"M12 2v20\"\/>\r\n                    <\/svg>\r\n                    MVRV\r\n                <\/li>\r\n            <\/a>\r\n            \r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/bitcoin-dominance\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Bitcoin Dominance Chart\">\r\n                        <path d=\"M12 2l8 8-8 8-8-8z\"\/>\r\n                    <\/svg>\r\n                    Bitcoin Dominance\r\n                <\/li>\r\n            <\/a>\r\n        <\/section>\r\n\r\n        <li class=\"category-header\" data-toggle=\"volatility-metrics\">\r\n            <svg class=\"category-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\r\n                <path d=\"M3 18l6-12 6 12 6-12\"\/>\r\n            <\/svg>\r\n            Volatility & Risk Metrics\r\n        <\/li>\r\n        <section class=\"category collapsed\" id=\"volatility-metrics\">\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/daily-change-percent\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Daily Change Percentage Chart\">\r\n                        <path d=\"M3 18l9-12 9 12\"\/>\r\n                    <\/svg>\r\n                    Daily Change %\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/drawdown-from-ath\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Drawdown from ATH Chart\">\r\n                        <path d=\"M3 3l18 18\"\/>\r\n                    <\/svg>\r\n                    Drawdown from ATH\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/bitcoin-30d-volatility\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Price Volatility Chart\">\r\n                        <path d=\"M3 18l6-12 6 12 6-12\"\/>\r\n                    <\/svg>\r\n                    Price Volatility\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/mayer-multiple-chart\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Mayer Multiple Chart\">\r\n                        <path d=\"M3 12h18\"\/>\r\n                    <\/svg>\r\n                    Mayer Multiple\r\n                <\/li>\r\n            <\/a>\r\n        <\/section>\r\n\r\n        <li class=\"category-header\" data-toggle=\"trading-metrics\">\r\n            <svg class=\"category-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\r\n                <path d=\"M3 3h18v18H3z\"\/>\r\n            <\/svg>\r\n            Derivative Metrics\r\n        <\/li>\r\n        <section class=\"category collapsed\" id=\"trading-metrics\">\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/funding-rate\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Funding Rate Chart\">\r\n                        <path d=\"M12 2v6m0 8v6\"\/>\r\n                    <\/svg>\r\n                    Funding Rate \r\n                <\/li>\r\n            <\/a>\r\n            \r\n            <a href=\"https:\/\/bitcoincounterflow.com\/funding-rate-all-exchanges\/\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Funding Rate Each Exchange Chart\">\r\n                        <path d=\"M12 2v6m0 8v6\"\/>\r\n                    <\/svg>\r\n                    Funding Rate Each Exchange\r\n                <\/li>\r\n            <\/a>\r\n            \r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/open-interest\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Open Interest Chart\">\r\n                        <path d=\"M3 3h18v18H3z\"\/>\r\n                    <\/svg>\r\n                    Open Interest \r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/net-shorts\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Open Interest Chart\">\r\n                        <path d=\"M3 3h18v18H3z\"\/>\r\n                    <\/svg>\r\n                    Net Shorts <span class=\"premium-badge\" aria-label=\"Premium Feature\">PRO<\/span>\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/net-longs\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Open Interest Chart\">\r\n                        <path d=\"M3 3h18v18H3z\"\/>\r\n                    <\/svg>\r\n                    Net Longs <span class=\"premium-badge\" aria-label=\"Premium Feature\">PRO<\/span>\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/liquidations\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Open Interest Chart\">\r\n                        <path d=\"M3 3h18v18H3z\"\/>\r\n                    <\/svg>\r\n                    Liquidations\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/long-short-ratio\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Open Interest Chart\">\r\n                        <path d=\"M3 3h18v18H3z\"\/>\r\n                    <\/svg>\r\n                    Long\/Short Ratio\r\n                <\/li>\r\n            <\/a>\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/charts\/volume-futures-vs-spot\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Futures vs Spot Volume Chart\">\r\n                        <path d=\"M3 18l6-6 4 4 8-8\"\/>\r\n                    <\/svg>\r\n                    Futures vs Spot Volume\r\n                <\/li>\r\n            <\/a>\r\n        <\/section>\r\n\r\n        <li class=\"category-header\" data-toggle=\"treasuries\">\r\n            <svg class=\"category-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\r\n                <path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9z\"\/>\r\n            <\/svg>\r\n            Treasuries\r\n        <\/li>\r\n        <section class=\"category collapsed\" id=\"treasuries\">\r\n            <a href=\"https:\/\/bitcoincounterflow.com\/etf-tracker\/\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Spot ETFs Overview\">\r\n                        <path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9z\"\/>\r\n                    <\/svg>\r\n                    Spot ETFs Overview\r\n                <\/li>\r\n            <\/a>\r\n            \r\n            <a href=\"https:\/\/bitcoincounterflow.com\/strategy-tracker-and-charts\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Strategy Tracker and MSTR Charts\">\r\n                        <path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9z\"\/>\r\n                    <\/svg>\r\n                    MicroStrategy (MSTR) Charts\r\n                <\/li>\r\n            <\/a>\r\n            \r\n            <a href=\"https:\/\/bitcoincounterflow.com\/meliuz-tracker-and-charts\/\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Meliuz Charts\">\r\n                        <path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9z\"\/>\r\n                    <\/svg>\r\n                    Meliuz Charts\r\n                <\/li>\r\n            <\/a>\r\n            \r\n            <a href=\"https:\/\/bitcoincounterflow.com\/bitcoin-treasuries\/\">\r\n                <li>\r\n                    <svg class=\"icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-label=\"Bitcoin Companies\">\r\n                        <path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9z\"\/>\r\n                    <\/svg>\r\n                    Bitcoin Companies\r\n                <\/li>\r\n            <\/a>\r\n        <\/section>\r\n    <\/ul>\r\n<\/nav>\r\n\r\n<style>\r\n\/* CSS Variables for Maintainability *\/\r\n:root {\r\n    --primary-bg: #0a0a0a;\r\n    --secondary-bg: #1a1a1a;\r\n   \r\n    --text-color: #f0f0f0;\r\n    --accent-color: #e0e6f0; \/* White ice *\/\r\n    --border-color: #2a2a2a;\r\n    --premium-bg: #ffffff; \/* White for PRO badge *\/\r\n    --premium-text: #000000; \/* Black for PRO text *\/\r\n    --premium-border: #222222; \/* Border for PRO badge *\/\r\n    --transition: 0.2s ease;\r\n    --font-stack: 'Roboto Mono', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n}\r\n\r\ndiv#eael-tabs-nav {\r\n    border-right: 1px solid #111;\r\n}\r\n\r\n\/* Sidebar Styling *\/\r\n.sidebar {\r\n    width: 100%;\r\n    padding: 12px;\r\n    box-sizing: border-box;\r\n    font-family: var(--font-stack);\r\n    color: var(--text-color);\r\n    height: 100%;\r\n    }\r\n\r\n.sidebar ul {\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n}\r\n\r\n.sidebar ul li {\r\n    display: flex;\r\n    align-items: center;\r\n    padding: 6px 8px;\r\n    border: 1px solid #111;\r\n    margin-bottom: 7px;\r\n    cursor: pointer;\r\n    transition: background-color var(--transition), box-shadow var(--transition);\r\n    font-size: 13px;\r\n    line-height: 1.4;\r\n    border-radius: 4px;\r\n    font-weight: 400;\r\n    height: 45px !important;\r\n    z-index: 35;\r\n}\r\n\r\n.sidebar section {\r\n    padding-inline: 10px;\r\n}\r\n\r\n\r\n.sidebar ul li:hover,\r\n.sidebar ul li.selected {\r\n    box-shadow: 0 0 6px rgba(224, 230, 240, 0.3); \/* Subtle white ice glow *\/\r\n    background: linear-gradient(to left, #111, #000)!important; \r\n}\r\n\r\n.category a svg{\r\n    display: none!important;\r\n    \r\n}    \r\n\r\n.category-header {\r\n    font-weight: 600; \/* Bolder for distinction *\/\r\n    font-size: 15px;\r\n    padding: 5px 8px;\r\n    background-color: #080808!important;\r\n    border: 1px solid #191919 !important;\r\n    display: flex;\r\n    align-items: center;\r\n    position: sticky;\r\n    top: 0;\r\n    z-index: 1;\r\n    margin-bottom: 6px; \/* Space before links *\/\r\n}\r\n\r\n.category-header::after {\r\n    content: '';\r\n    width: 10px;\r\n    height: 10px;\r\n    background: url('data:image\/svg+xml;utf8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%23e0e6f0\" stroke-width=\"2\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>') no-repeat center;\r\n    transition: transform var(--transition);\r\n    margin-left: auto;\r\n}\r\n\r\n.category-header.collapsed::after {\r\n    transform: rotate(-90deg);\r\n}\r\n\r\n.category {\r\n    transition: max-height var(--transition), opacity var(--transition);\r\n    opacity: 1;\r\n    max-height: 0; \/* Collapsed by default *\/\r\n    overflow: hidden;\r\n}\r\n\r\n.category.expanded {\r\n    max-height: 100%;\r\n    opacity: 1;\r\n    padding-top: 2px;\r\n    margin-bottom: 5px;\r\n}\r\n\r\n.category-icon {\r\n    margin-right: 6px;\r\n    stroke: var(--text-color);\r\n    filter: drop-shadow(0 0 2px rgba(224, 230, 240, 0.2)); \/* Subtle glow *\/\r\n}\r\n\r\n.icon {\r\n    margin-right: 6px;\r\n    stroke: var(--text-color);\r\n    transition: transform var(--transition), stroke var(--transition);\r\n}\r\n\r\n.sidebar ul li:hover .icon,\r\n.sidebar ul li.selected .icon {\r\n    stroke: var(--accent-color);\r\n    transform: scale(1.1);\r\n    background: linear-gradient(to left, #111, #000)!important; \r\n}\r\n\r\n.premium-badge {\r\n    margin-left: 4px;\r\n    padding: 1px 3px;\r\n    font-size: 9px;\r\n    font-weight: 600;\r\n    color: var(--premium-text);\r\n    background-color: var(--premium-bg);\r\n    border: 1px solid var(--premium-border);\r\n    border-radius: 3px;\r\n    line-height: 1.2;\r\n    display: inline-block;\r\n    transition: background-color var(--transition);\r\n}\r\n\r\n.premium-badge:hover {\r\n    background-color: #e8e8e8; \/* Slightly darker white on hover *\/\r\n}\r\n\r\n.sidebar-toggle {\r\n    display: none;\r\n    background: var(--secondary-bg);\r\n    color: var(--text-color);\r\n    border: 1px solid var(--border-color);\r\n    padding: 6px;\r\n    font-size: 13px;\r\n    cursor: pointer;\r\n    width: 100%;\r\n    text-align: left;\r\n    margin-bottom: 6px;\r\n    border-radius: 4px;\r\n    position: sticky;\r\n    top: 0;\r\n    z-index: 2;\r\n}\r\n\r\n.toggle-icon {\r\n    stroke: var(--text-color);\r\n}\r\n\r\n\/* Responsive Design *\/\r\n@media (max-width: 900px) {\r\n    .sidebar {\r\n        width: 100%;\r\n        background-color: #000;\r\n        z-index: 1000;\r\n        transition: transform 0.3s ease;\r\n    }\r\n\r\n    .sidebar.visible {\r\n        transform: translateX(0);\r\n    }\r\n\r\n    .coluna-dois {\r\n        transition: margin-left 0.3s ease;\r\n        margin-left: 0;\r\n    }\r\n\r\n    .coluna-dois.shifted {\r\n        margin-left: 280px;\r\n    }\r\n}\r\n<\/style>\r\n\r\n\r\n<style>\r\n     footer {\r\n        border-top: 2px solid #111;\r\n    }\r\n.sidebar {\r\n    width: 100%;\r\n    top: 0;\r\n    left: 0;\r\n    height: 100%;\r\n}\r\n\r\n.sidebar ul {\r\n    list-style-type: none;\r\n    padding: 0;\r\n    margin: 0;\r\n}\r\n\r\n.sidebar ul li {\r\n    background-color: #000;\r\n    padding: 10px;\r\n    width: 100%;\r\n    height: 50px;\r\n    color: #fff;\r\n    cursor: pointer;\r\n    transition: background-color 0.3s ease;\r\n    padding-left:15px;\r\n}\r\n\r\n.sidebar ul li:hover, .sidebar ul li.selected  {\r\n    background-image: linear-gradient(to left, #111, #000)!important; \r\n}\r\n\r\n.sidebar ul li:hover {\r\n    background: linear-gradient(to left, #111, #000)!important; \r\n}\r\n\r\n<\/style>\r\n\r\n\r\n\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n    const sidebar = document.querySelector('.sidebar');\r\n    const toggleButton = document.querySelector('.sidebar-toggle');\r\n    const currentPath = window.location.pathname;\r\n\r\n    \/\/ Fun\u00e7\u00e3o para encontrar a categoria do link ativo\r\n    const findActiveCategory = () => {\r\n        let activeCategory = null;\r\n        document.querySelectorAll('.sidebar ul a').forEach(anchor => {\r\n            const anchorPath = new URL(anchor.href).pathname;\r\n            if (currentPath === anchorPath || currentPath.includes(anchorPath)) {\r\n                anchor.querySelector('li').classList.add('selected');\r\n                activeCategory = anchor.closest('.category').id;\r\n            }\r\n        });\r\n        return activeCategory;\r\n    };\r\n\r\n    const activeCategoryId = findActiveCategory();\r\n\r\n    \/\/ Configurar categorias com base no estado inicial\r\n    document.querySelectorAll('.category').forEach(category => {\r\n        const categoryId = category.id;\r\n        const isCollapsed = localStorage.getItem(`category-${categoryId}`) === 'collapsed';\r\n        \r\n        \/\/ Calcular altura do conte\u00fado para estado expandido\r\n        const contentHeight = Array.from(category.children).reduce((height, child) => {\r\n            return height + child.getBoundingClientRect().height;\r\n        }, 0);\r\n        \r\n        \/\/ Definir propriedade personalizada para max-height\r\n        category.style.setProperty('--content-height', `${contentHeight + 10}px`);\r\n\r\n        \/\/ L\u00f3gica para estado inicial\r\n        if (localStorage.getItem(`category-${categoryId}`) === null) {\r\n            \/\/ Primeira visita: colapsar todas as categorias, exceto a ativa\r\n            if (categoryId === activeCategoryId) {\r\n                category.classList.add('expanded');\r\n                category.classList.remove('collapsed');\r\n                document.querySelector(`[data-toggle=\"${categoryId}\"]`).classList.remove('collapsed');\r\n            } else {\r\n                category.classList.add('collapsed');\r\n                category.classList.remove('expanded');\r\n                document.querySelector(`[data-toggle=\"${categoryId}\"]`).classList.add('collapsed');\r\n            }\r\n        } else {\r\n            \/\/ Estado salvo no localStorage\r\n            if (isCollapsed) {\r\n                category.classList.add('collapsed');\r\n                category.classList.remove('expanded');\r\n                document.querySelector(`[data-toggle=\"${categoryId}\"]`).classList.add('collapsed');\r\n            } else {\r\n                category.classList.add('expanded');\r\n                category.classList.remove('collapsed');\r\n                document.querySelector(`[data-toggle=\"${categoryId}\"]`).classList.remove('collapsed');\r\n            }\r\n        }\r\n\r\n        \/\/ Atualizar localStorage ao final da transi\u00e7\u00e3o\r\n        category.addEventListener('transitionend', () => {\r\n            localStorage.setItem(`category-${categoryId}`, category.classList.contains('collapsed') ? 'collapsed' : 'expanded');\r\n        });\r\n    });\r\n\r\n    \/\/ Destacar o link ativo\r\n    document.querySelectorAll('.sidebar ul a').forEach(anchor => {\r\n        anchor.addEventListener('click', () => {\r\n            document.querySelectorAll('.sidebar ul li').forEach(li => li.classList.remove('selected'));\r\n            anchor.querySelector('li').classList.add('selected');\r\n        });\r\n    });\r\n\r\n    \/\/ Alternar sidebar no mobile\r\n    toggleButton.addEventListener('click', () => {\r\n        const isVisible = sidebar.classList.toggle('visible');\r\n        toggleButton.setAttribute('aria-expanded', isVisible);\r\n    });\r\n\r\n    \/\/ Alternar se\u00e7\u00f5es de categoria\r\n    document.querySelectorAll('.category-header').forEach(header => {\r\n        header.addEventListener('click', () => {\r\n            const categoryId = header.getAttribute('data-toggle');\r\n            const category = document.getElementById(categoryId);\r\n            category.classList.toggle('collapsed');\r\n            category.classList.toggle('expanded');\r\n            header.classList.toggle('collapsed');\r\n        });\r\n    });\r\n});\r\n<\/script><\/DOCUMENT>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<span class=\"wpr-template-edit-btn\" data-permalink=\"https:\/\/bitcoincounterflow.com\/?elementor_library=sidebar-charts\">Edit Template<\/span>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-96b69af e-con-full coluna-dois e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"96b69af\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1fd933a coluna-dois elementor-widget elementor-widget-html\" data-id=\"1fd933a\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n    #barContainer {\r\n    cursor: url('data:image\/x-icon;base64,AAACAAEAICACABAAEAAwAQAAFgAAACgAAAAgAAAAQAAAAAEAAQAAAAAAgAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAA\/\/\/\/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAA\/\/gAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/j\/\/\/\/4\/\/\/\/+P\/\/\/\/j\/\/\/\/4\/\/\/\/+P\/\/\/gAD\/\/4AA\/\/+AAP\/\/\/j\/\/\/\/4\/\/\/\/+P\/\/\/\/j\/\/\/\/4\/\/\/\/+P\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/8='), auto;\r\n    width: 100%;\r\n    margin-top: 30px;\r\n}\r\n\r\n.custom-select-wrapper {\r\n    position: absolute;\r\n    margin-bottom: 10px;\r\n    margin-right: 20px;\r\n    margin-top: 0px;\r\n    right: 0px;\r\n    display: inline-block;\r\n    font-family: 'Arial', sans-serif;\r\n}\r\n\r\n.custom-select-button {\r\n    background-color: #121212;\r\n    color: white;\r\n    border: 1px solid #555;\r\n    border-radius: 6px;\r\n    font-size: 14px;\r\n    cursor: pointer;\r\n    min-width: 95px;\r\n    display: flex;\r\n    position: relative;\r\n    height: 32px;\r\n    z-index: 30;\r\n    transition: background-color 0.3s;\r\n    padding-left: 10px;\r\n    align-items: center;\r\n}\r\n\r\n.custom-select-button:hover {\r\n    background-color: #181818;\r\n}\r\n\r\n.custom-select-button:after {\r\n    content: '';\r\n    position: absolute;\r\n    top: 50%;\r\n    right: 10px;\r\n    width: 0;\r\n    height: 0;\r\n    border-left: 6px solid transparent;\r\n    border-right: 6px solid transparent;\r\n    border-top: 6px solid #777;\r\n    transform: translateY(-50%);\r\n}\r\n\r\n.custom-select-options {\r\n    display: none;\r\n    position: absolute;\r\n    background-color: #0d0d0d;\r\n    border: 1px solid #555;\r\n    border-radius: 6px;\r\n    margin-top: 4px;\r\n    z-index: 999;\r\n    min-width: 100%;\r\n    max-height: 200px;\r\n    overflow-y: auto;\r\n}\r\n\r\n.custom-select-options div {\r\n    padding: 8px 12px;\r\n    color: white;\r\n    cursor: pointer;\r\n    font-size: 14px;\r\n}\r\n\r\n.custom-select-options div:hover {\r\n    background-color: #333;\r\n}\r\n\r\n.custom-select-wrapper.open .custom-select-options {\r\n    display: block;\r\n}\r\n\r\nlabel {\r\n    color: white;\r\n    font-weight: bold;\r\n    margin-bottom: 4px;\r\n    display: inline-block;\r\n}\r\n\r\n.coluna-dois {\r\n    width: 100%;\r\n}\r\n\r\n.loading {\r\n    position: absolute;\r\n    top: 50%;\r\n    left: 50%;\r\n    transform: translate(-50%, -50%);\r\n    font-family: 'Helvetica Neue', 'Arial', sans-serif;\r\n    font-size: 18px;\r\n    font-weight: 500;\r\n    color: transparent;\r\n    background: linear-gradient(90deg, #d3d3d3, #808080, #d3d3d3);\r\n    background-size: 200% 100%;\r\n    -webkit-background-clip: text;\r\n    background-clip: text;\r\n    animation: gradientShift 1.5s ease-in-out infinite;\r\n    padding: 10px 20px;\r\n    background-color: rgba(0, 0, 0, 0.7);\r\n    border-radius: 8px;\r\n    display: none;\r\n    z-index: 10;\r\n}\r\n\r\n@keyframes gradientShift {\r\n    0% { background-position: 0% 50%; }\r\n    50% { background-position: 100% 50%; }\r\n    100% { background-position: 0% 50%; }\r\n}\r\n\r\n.loading.visible {\r\n    display: block;\r\n}\r\n\r\n.refresh-button-styled {\r\n    background-color: #121212;\r\n    border: 1px solid #555;\r\n    cursor: pointer;\r\n    color: white;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 5px;\r\n    border-radius: 5px;\r\n    transition: background-color 0.3s !important;\r\n    font-size: 14px;\r\n    margin: 10px auto;\r\n    position: relative;\r\n    height: 32px;\r\n    padding-inline: 6px;\r\n    right: 123px;\r\n    top: -5px;\r\n    z-index: 15;\r\n}\r\n\r\n.refresh-button-styled:hover {\r\n    background-color: #cccccc;\r\n}\r\n\r\n.refresh-button-styled:hover .refresh-icon path {\r\n    fill: black;\r\n}\r\n\r\n.refresh-button-styled .refresh-icon {\r\n    width: 20px;\r\n    height: 20px;\r\n}\r\n\r\n\/* Nova classe para o elemento Binance *\/\r\n.binance-label img {\r\n    height: 13px;\r\n    margin-right: 5px;\r\n}\r\n\r\nspan.binance-label {\r\n    position: relative;\r\n    right: 121px;\r\n    display: inline-flex;\r\n    z-index: 15;\r\n    align-items: center;\r\n    top: -5px;\r\n    border: 1px solid #252525;\r\n    height: 32px;\r\n    font-size: 14px;\r\n    padding-inline: 10px;\r\n    border-radius: 5px;\r\n    letter-spacing: 1px;\r\n}\r\n\r\n@media (max-width: 468px) {\r\n    .refresh-button-styled {\r\n        width: auto;\r\n        padding-inline: 5px;\r\n    }\r\n\r\n    .binance-label {\r\n        font-size: 12px;\r\n        right: 10px; \/* Ajustado para telas pequenas *\/\r\n        top: 0;\r\n    }\r\n\r\n    .binance-label img {\r\n        width: 16px;\r\n        height: 16px;\r\n    }\r\n}\r\n\r\n.chart-controls {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    position: absolute;\r\n    right: 0;\r\n    top: 0;\r\n}\r\n<\/style>\r\n\r\n<script src=\"https:\/\/code.highcharts.com\/stock\/highstock.js\"><\/script>\r\n<script src=\"https:\/\/code.highcharts.com\/modules\/heatmap.js\"><\/script>\r\n<script src=\"https:\/\/code.highcharts.com\/modules\/boost.js\"><\/script>\r\n<script src=\"https:\/\/code.jquery.com\/jquery-3.6.0.min.js\"><\/script>\r\n\r\n<div class=\"container-estilo\">\r\n    <div class=\"chart-controls\">\r\n        <span class=\"binance-label\">\r\n            <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\">\r\n            BTCUSDT\r\n        <\/span>\r\n        <div class=\"custom-select-wrapper\" id=\"symbolSelect\">\r\n            <div class=\"custom-select-button\" id=\"selectedSymbol\" data-value=\"BTCUSDT\">BTCUSDT<\/div>\r\n            <div class=\"custom-select-options\" id=\"symbolOptions\">\r\n                <div data-value=\"BTCUSDT\">BTCUSDT<\/div>\r\n                <div data-value=\"ETHUSDT\">ETHUSDT<\/div>\r\n                <div data-value=\"SOLUSDT\">SOLUSDT<\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <button id=\"refresh-charts\" class=\"refresh-button-styled\">\r\n            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"refresh-icon\">\r\n                <path d=\"M17.65 6.35A7.958 7.958 0 0 0 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08A5.99 5.99 0 0 1 12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\" fill=\"white\"\/>\r\n            <\/svg>\r\n        <\/button>\r\n        <div class=\"custom-select-wrapper\" id=\"customSelect\">\r\n            <div class=\"chart-period-select custom-select-button\" id=\"selectedOption\" data-chart-id=\"liquidationHeatmap\" data-value=\"1month\">1 month<\/div>\r\n            <div class=\"custom-select-options\" id=\"optionsList\">\r\n                <div data-value=\"12h\">12 hours<\/div>\r\n                <div data-value=\"24h\">24 hours<\/div>\r\n                <div data-value=\"48h\">48 hours<\/div>\r\n                <div data-value=\"3day\">3 days<\/div>\r\n                <div data-value=\"1week\">1 week<\/div>\r\n                <div data-value=\"2week\">2 weeks<\/div>\r\n                <div data-value=\"1month\">1 month<\/div>\r\n                <div data-value=\"2month\">2 months<\/div>\r\n                <div data-value=\"3month\">3 months<\/div>\r\n                <div data-value=\"6month\">6 months<\/div>\r\n                <div data-value=\"1year\">1 year<\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n    <div id=\"barContainer\" style=\"height: 70vh; width: 100%;\">\r\n        <div id=\"loading\" class=\"loading\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n<script>\r\n    const chartRenderers = window.chartRenderers || {\r\n        longShortRatio: null,\r\n        volatility: null,\r\n        fearGreed: null,\r\n        spotETF: null,\r\n        openInterest: null,\r\n        netShorts: null,\r\n        netLongs: null,\r\n        aggregatedFundingRate: null,\r\n        exchangesFunding: null,\r\n        athDrawdown: null,\r\n        liquidationHeatmap: null\r\n    };\r\n    window.chartRenderers = chartRenderers;\r\n\r\n    async function refreshAllCharts() {\r\n        console.log('Bot\u00e3o de refresh clicado: Iniciando atualiza\u00e7\u00e3o do gr\u00e1fico');\r\n        const loadingElements = document.querySelectorAll('#container-graficos .loading, #container .loading');\r\n        const chartContainers = document.querySelectorAll('#container-graficos .container-estilo, .container-estilo');\r\n\r\n        loadingElements.forEach(el => el.classList.add('visible'));\r\n        const minLoadingTime = new Promise(resolve => setTimeout(resolve, 500));\r\n\r\n        try {\r\n            const renderPromises = Array.from(chartContainers).map(container => {\r\n                const select = container.querySelector('.chart-period-select');\r\n                if (!select) {\r\n                    console.warn('Elemento .chart-period-select n\u00e3o encontrado no cont\u00eainer:', container);\r\n                    return Promise.resolve();\r\n                }\r\n\r\n                const chartId = select.getAttribute('data-chart-id');\r\n                const period = select.getAttribute('data-value') || '1month';\r\n                const rendererKey = Object.keys(chartRenderers).find(key => chartRenderers[key] && chartRenderers[rendererKey].chartId === chartId);\r\n\r\n                if (rendererKey && chartRenderers[rendererKey]) {\r\n                    console.log(`Atualizando gr\u00e1fico ${chartId} com per\u00edodo ${period}`);\r\n                    return chartRenderers[rendererKey](period);\r\n                }\r\n                console.warn(`Nenhum renderizador encontrado para chartId: ${chartId}`);\r\n                return Promise.resolve();\r\n            });\r\n\r\n            await Promise.all([...renderPromises, minLoadingTime]);\r\n            console.log('Atualiza\u00e7\u00e3o do gr\u00e1fico conclu\u00edda');\r\n        } catch (error) {\r\n            console.error('Erro ao atualizar gr\u00e1ficos:', error);\r\n        } finally {\r\n            loadingElements.forEach(el => el.classList.remove('visible'));\r\n        }\r\n    }\r\n<\/script>\r\n\r\n\r\n\r\n<script>\r\n    const periodConfigs = {\r\n        '12h': { interval: '1m', limit: 720, rangeStep: 32 },\r\n        '24h': { interval: '3m', limit: 480, rangeStep: 38 },\r\n        '48h': { interval: '5m', limit: 576, rangeStep: 50 },\r\n        '3day': { interval: '5m', limit: 864, rangeStep: 63 },\r\n        '1week': { interval: '15m', limit: 672, rangeStep: 63 },\r\n        '2week': { interval: '30m', limit: 672, rangeStep: 75 },\r\n        '1month': { interval: '1h', limit: 720, rangeStep: 100 },\r\n        '2month': { interval: '2h', limit: 720, rangeStep: 100 },\r\n        '3month': { interval: '4h', limit: 540, rangeStep: 100 },\r\n        '6month': { interval: '8h', limit: 540, rangeStep: 125 },\r\n        '1year': { interval: '12h', limit: 600, rangeStep: 175 }\r\n    };\r\n\r\n    const HEATMAP_MAX_BINS = 140;\r\n    const RANGE_STEP_BUCKETS = [5,10,15,20,25,30,40,50,60,75,100,125,150,175,200,225,250,275,300,325,350,375,400,450,500,600,700,800,900,1000];\r\n\r\n    function roundUpRangeStep(step) {\r\n        for (const bucket of RANGE_STEP_BUCKETS) {\r\n            if (bucket >= step) return bucket;\r\n        }\r\n        return Math.ceil(step \/ 50) * 50;\r\n    }\r\n\r\n    function getAdaptiveRangeStep(baseStep, minStep, minValue, maxValue) {\r\n        const safeMin = Math.max(minStep || baseStep, 1);\r\n        const rangeSpan = Math.max(maxValue - minValue, baseStep);\r\n        const idealStep = Math.max(Math.ceil(rangeSpan \/ HEATMAP_MAX_BINS), safeMin);\r\n        return roundUpRangeStep(idealStep);\r\n    }\r\n\r\n    function getAdjustedPeriodConfigs() {\r\n        const isMobile = window.innerWidth <= 768;\r\n        if (!isMobile) return periodConfigs;\r\n        return {\r\n            '12h': { interval: '1m', limit: 720, rangeStep: 25 },\r\n            '24h': { interval: '3m', limit: 480, rangeStep: 38 },\r\n            '48h': { interval: '5m', limit: 576, rangeStep: 50 },\r\n            '3day': { interval: '5m', limit: 864, rangeStep: 50 },\r\n            '1week': { interval: '15m', limit: 672, rangeStep: 75 },\r\n            '2week': { interval: '1h', limit: 336, rangeStep: 100 },\r\n            '1month': { interval: '2h', limit: 360, rangeStep: 50 },\r\n            '2month': { interval: '4h', limit: 360, rangeStep: 63 },\r\n            '3month': { interval: '12h', limit: 180, rangeStep: 100 },\r\n            '6month': { interval: '1d', limit: 180, rangeStep: 125 },\r\n            '1year': { interval: '1d', limit: 365, rangeStep: 175 }\r\n        };\r\n    }\r\n\r\n    const BINANCE_URL_BASE = 'https:\/\/fapi.binance.com\/fapi\/v1\/klines';\r\n    async function getUserCountry() {\r\n        const cachedCountry = localStorage.getItem('userCountry');\r\n        if (cachedCountry) return cachedCountry;\r\n        try {\r\n            const response = await fetch('https:\/\/freegeoip.app\/json\/');\r\n            const data = await response.json();\r\n            const country = data.country_code || 'US';\r\n            localStorage.setItem('userCountry', country);\r\n            return country;\r\n        } catch (error) {\r\n            console.error('Erro ao detectar pa\u00eds do usu\u00e1rio:', error);\r\n            localStorage.setItem('userCountry', 'US');\r\n            return 'US';\r\n        }\r\n    }\r\n\r\n    async function getBitcoinData(period, symbol = 'BTCUSDT') {\r\n        const config = getAdjustedPeriodConfigs()[period];\r\n        if (!config) {\r\n            console.error(`Per\u00edodo inv\u00e1lido: ${period}`);\r\n            return [];\r\n        }\r\n\r\n        const query = `symbol=${encodeURIComponent(symbol)}&interval=${config.interval}&limit=${config.limit}`;\r\n        let finalURL = `${BINANCE_URL_BASE}?${query}`;\r\n        const country = await getUserCountry();\r\n        const isBlockedCountry = ['US'];\r\n        if (isBlockedCountry.includes(country)) {\r\n            finalURL = `https:\/\/proxy.bitcoincounterflow.com\/binance-proxy?${query}`;\r\n        }\r\n        try {\r\n            console.log('Fetching data from:', finalURL);\r\n            const response = await fetch(finalURL);\r\n            console.log('Response status:', response.status, response.statusText);\r\n            const contentType = response.headers.get('content-type');\r\n            if (!response.ok || !contentType.includes('application\/json')) {\r\n                const errorText = await response.text();\r\n                throw new Error(`Erro na resposta da API: ${errorText}`);\r\n            }\r\n            return await response.json();\r\n        } catch (error) {\r\n            console.error('Erro ao buscar dados do Bitcoin:', error, 'URL:', finalURL);\r\n            return [];\r\n        }\r\n    }\r\n\r\n    function processData(data, period) {\r\n        const baseRangeStep = periodConfigs[period].rangeStep;\r\n        let priceRanges = new Map();\r\n        let heatmapData = [];\r\n        let candlestickData = [];\r\n        let maxPrice = 0, minPrice = Infinity;\r\n\r\n        data.forEach(candle => {\r\n            const high = parseFloat(candle[2]);\r\n            const low = parseFloat(candle[3]);\r\n            if (high > maxPrice) maxPrice = high;\r\n            if (low < minPrice) minPrice = low;\r\n        });\r\n\r\n        const bufferMin = minPrice * 0.975;\r\n        const bufferMax = maxPrice * 1.025;\r\n        const adaptiveRangeStep = getAdaptiveRangeStep(baseRangeStep, baseRangeStep, bufferMin, bufferMax);\r\n        const rangeStep = adaptiveRangeStep;\r\n\r\n        const minRange = Math.floor(bufferMin \/ rangeStep) * rangeStep;\r\n        const maxRange = Math.ceil(bufferMax \/ rangeStep) * rangeStep;\r\n\r\n        for (let i = minRange; i <= maxRange; i += rangeStep) {\r\n            priceRanges.set(i, 0);\r\n        }\r\n\r\n        const leverageLevels = [{ leverage: 75, weight: 0.05, liquidationThreshold: 0.0133 }, { leverage: 50, weight: 0.1, liquidationThreshold: 0.02 }, { leverage: 40, weight: 0.2, liquidationThreshold: 0.025 }, { leverage: 30, weight: 0.3, liquidationThreshold: 0.033 }, { leverage: 20, weight: 0.4, liquidationThreshold: 0.05 }];\r\n\r\n        function processBatch(startIndex, endIndex, callback) {\r\n            for (let index = startIndex; index < endIndex && index < data.length; index++) {\r\n                const candle = data[index];\r\n                const open = parseFloat(candle[1]);\r\n                const high = parseFloat(candle[2]);\r\n                const low = parseFloat(candle[3]);\r\n                const close = parseFloat(candle[4]);\r\n                const volume = parseFloat(candle[5]);\r\n                const time = candle[0];\r\n                const averagePrice = (open + close) \/ 2;\r\n                const volumeInDollars = volume * averagePrice;\r\n                const leverageProportion = 0.003333;\r\n                const liquidationProportion = 0.075;\r\n                const volumeWeight = 3;\r\n\r\n                priceRanges.forEach((currentVolume, range) => {\r\n                    if (range >= Math.floor(low \/ rangeStep) * rangeStep && range <= Math.floor(high \/ rangeStep) * rangeStep) {\r\n                        priceRanges.set(range, 0);\r\n                    }\r\n                });\r\n\r\n                leverageLevels.forEach(level => {\r\n                    const liquidationValue = volumeInDollars * volumeWeight * leverageProportion * level.leverage * liquidationProportion * level.weight;\r\n                    const longLiquidationPrice = close * (1 - level.liquidationThreshold);\r\n                    const shortLiquidationPrice = close * (1 + level.liquidationThreshold);\r\n                    const longLiquidationRange = Math.round(longLiquidationPrice \/ rangeStep) * rangeStep;\r\n                    const shortLiquidationRange = Math.round(shortLiquidationPrice \/ rangeStep) * rangeStep;\r\n                    if (priceRanges.has(longLiquidationRange)) {\r\n                        priceRanges.set(longLiquidationRange, priceRanges.get(longLiquidationRange) + liquidationValue);\r\n                    }\r\n                    if (priceRanges.has(shortLiquidationRange)) {\r\n                        priceRanges.set(shortLiquidationRange, priceRanges.get(shortLiquidationRange) + liquidationValue);\r\n                    }\r\n                });\r\n\r\n                priceRanges.forEach((currentVolume, range) => {\r\n                    heatmapData.push([time, [...priceRanges.keys()].indexOf(range), currentVolume]);\r\n                });\r\n\r\n                candlestickData.push([time, open, high, low, close]);\r\n            }\r\n            if (endIndex < data.length) {\r\n                setTimeout(() => processBatch(endIndex, endIndex + 50, callback), 0);\r\n            } else {\r\n                callback();\r\n            }\r\n        }\r\n\r\n        return new Promise(resolve => {\r\n            processBatch(0, 20, () => {\r\n                const lastTime = candlestickData[candlestickData.length - 1][0];\r\n                const lastTimeframeData = heatmapData.filter(d => d[0] === lastTime).map(d => ({ y: d[2], priceRange: [...priceRanges.keys()][d[1]] }));\r\n                lastTimeframeData.sort((a, b) => a.priceRange - b.priceRange);\r\n                resolve({ heatmapData, candlestickData, priceLabels: [...priceRanges.keys()].map(p => `$${p}`), lastTimeframeData });\r\n            });\r\n        });\r\n    }\r\n\r\n    function renderCharts(period) {\r\n        const loadingElement = document.getElementById('loading');\r\n        if (loadingElement) {\r\n            loadingElement.classList.add('visible');\r\n        } else {\r\n            console.warn('Elemento #loading n\u00e3o encontrado no DOM.');\r\n        }\r\n\r\n        \/\/ read selected symbol from selector\r\n        const selectedSymbol = document.getElementById('selectedSymbol') ? document.getElementById('selectedSymbol').getAttribute('data-value') : 'BTCUSDT';\r\n        getBitcoinData(period, selectedSymbol).then(response => {\r\n            processData(response, period).then(processedData => {\r\n                const maxTicks = 10;\r\n                const totalTicks = processedData.priceLabels.length;\r\n                const step = Math.max(Math.floor(totalTicks \/ maxTicks), 1);\r\n                const maxPrice = Math.max(...processedData.candlestickData.map(d => d[2]));\r\n                const minPrice = Math.min(...processedData.candlestickData.map(d => d[3]));\r\n                const adjustedMinPrice = minPrice * 0.975;\r\n                const adjustedMaxPrice = maxPrice * 1.025;\r\n                const maxLiquidation = Math.max(...processedData.lastTimeframeData.map(d => d.y));\r\n                const barData = processedData.lastTimeframeData.map(item => ({ y: item.y \/ 1000000, name: `$${item.priceRange}`, colorValue: item.y }));\r\n                const lastCandle = processedData.candlestickData[processedData.candlestickData.length - 1];\r\n                const lastClosePrice = lastCandle[4];\r\n                const priceRangesNums = processedData.priceLabels.map(label => parseFloat(label.replace('$', '')));\r\n                let lastPriceIndex = -1;\r\n                for (let i = 0; i < priceRangesNums.length; i++) {\r\n                    if (lastClosePrice >= priceRangesNums[i] && (i === priceRangesNums.length - 1 || lastClosePrice < priceRangesNums[i + 1])) {\r\n                        lastPriceIndex = i;\r\n                        break;\r\n                    }\r\n                }\r\n                const fullCumulativeBelowData = new Array(barData.length).fill(null);\r\n                let currentSumBelow = 0;\r\n                for (let i = lastPriceIndex; i >= 0; i--) {\r\n                    currentSumBelow += barData[i].y;\r\n                    fullCumulativeBelowData[i] = currentSumBelow;\r\n                }\r\n                const fullCumulativeAboveData = new Array(barData.length).fill(null);\r\n                let currentSumAbove = 0;\r\n                for (let i = lastPriceIndex; i < barData.length; i++) {\r\n                    currentSumAbove += barData[i].y;\r\n                    fullCumulativeAboveData[i] = currentSumAbove;\r\n                }\r\n                const maxCumulativeValue = Math.max(...fullCumulativeBelowData.filter(v => v !== null), ...fullCumulativeAboveData.filter(v => v !== null));\r\n\r\n                Highcharts.chart('barContainer', {\r\n                    chart: {\r\n                        type: 'column',\r\n                        backgroundColor: 'transparent',\r\n                        plotBackgroundColor: 'transparent',\r\n                        borderWidth: 0,\r\n                        marginTop: 20,\r\n                        marginRight: 10,\r\n                        marginBottom: 60\r\n                    },\r\n                    title: {\r\n                        text: ' ',\r\n                        style: {\r\n                            color: '#FFFFFF',\r\n                            fontSize: '12px'\r\n                        }\r\n                    },\r\n                    xAxis: {\r\n                        categories: barData.map(item => item.name),\r\n                        title: {\r\n                            text: '',\r\n                            style: {\r\n                                color: '#FFFFFF',\r\n                                fontSize: '10px'\r\n                            }\r\n                        },\r\n                        labels: {\r\n                            style: {\r\n                                color: '#FFFFFF',\r\n                                fontSize: '12px'\r\n                            },\r\n                            rotation: 0,\r\n                            formatter: function() {\r\n                                return this.value;\r\n                            },\r\n                            step: step\r\n                        },\r\n                        plotLines: [{\r\n                            color: 'white',\r\n                            dashStyle: 'Dot',\r\n                            width: 2,\r\n                            value: lastPriceIndex,\r\n                            zIndex: 5,\r\n                            label: {\r\n                                text: null, \/\/ O texto \u00e9 gerado pelo formatter\r\n                                rotation: 0,\r\n                                align: 'center',\r\n                                y: -10, \/\/ Posi\u00e7\u00e3o vertical acima da linha\r\n                                formatter: function() {\r\n                                    const value = this.axis.categories[lastPriceIndex];\r\n                                    return `Current Price : ${value}`;\r\n                                },\r\n                                style: {\r\n                                    color: 'white',\r\n                                    fontWeight: 'bold',\r\n                                    fontSize: '14px'\r\n                                }\r\n                            }\r\n                        }],\r\n                        opposite: false,\r\n                        reversed: false,\r\n                        crosshair: true\r\n                    },\r\n                    yAxis: [{\r\n                        title: {\r\n                            text: '',\r\n                            style: {\r\n                                color: '#FFFFFF',\r\n                                fontSize: '10px'\r\n                            }\r\n                        },\r\n                        labels: {\r\n                            style: {\r\n                                color: '#FFFFFF',\r\n                                fontSize: '12px'\r\n                            },\r\n                            formatter: function() {\r\n                                return `${this.value}M`\r\n                            }\r\n                        },\r\n                        gridLineWidth: 1,\r\n                        gridLineColor: '#333',\r\n                        gridLineDashStyle: 'Dash',\r\n                        min: 0,\r\n                        max: Math.max(...barData.map(d => d.y)) * 1.1\r\n                    }, {\r\n                        title: {\r\n                            text: 'Cumulative Liquidation Volume (M)',\r\n                            style: {\r\n                                color: '#FFFFFF',\r\n                                fontSize: '12px',\r\n                                fontWeight: 'bold'\r\n                            }\r\n                        },\r\n                        labels: {\r\n                            style: {\r\n                                color: 'white',\r\n                                fontSize: '12px'\r\n                            },\r\n                            formatter: function() {\r\n                                return `${this.value.toFixed(0)}M`\r\n                            }\r\n                        },\r\n                        opposite: true,\r\n                        gridLineWidth: 1,\r\n                        gridLineColor: '#333',\r\n                        gridLineDashStyle: 'Dash',\r\n                        max: maxCumulativeValue * 1.1\r\n                    }],\r\n                    plotOptions: {\r\n                        series: {\r\n                            borderWidth: 2,\r\n                            borderColor: '#1a1a1a',\r\n                            pointPadding: 0.1,\r\n                            groupPadding: 0.05\r\n                        },\r\n                        area: {\r\n                            fillOpacity: 0.5,\r\n                            marker: {\r\n                                enabled: false\r\n                            }\r\n                        }\r\n                    },\r\n                    colorAxis: {\r\n                        min: 0,\r\n                        max: maxLiquidation,\r\n                        stops: [\r\n                            [0.0, '#000000'],\r\n                            [0.25, '#0000ff'],\r\n                            [0.5, '#00ffff'],\r\n                            [0.75, '#ffff00'],\r\n                            [1.0, '#ff0000']\r\n                        ],\r\n                        minColor: '#000000',\r\n                        maxColor: '#ff0000',\r\n                        labels: {\r\n                            style: {\r\n                                color: '#FFFFFF',\r\n                                fontSize: '10px',\r\n                                fontWeight: 'bold'\r\n                            }\r\n                        }\r\n                    },\r\n                    tooltip: {\r\n                        shared: true,\r\n                        backgroundColor: 'rgba(0, 0, 0, 0.8)',\r\n                        borderColor: '#333',\r\n                        style: {\r\n                            color: '#FFFFFF',\r\n                            textAlign: 'left',\r\n                            fontSize: '12px'\r\n                        },\r\n                        followPointer: true,\r\n                        formatter: function() {\r\n                            let tooltipHtml = `<b>Price Range:<\/b> ${this.points[0].point.name}<br>`;\r\n                            this.points.forEach(p => {\r\n                                if (p.series.name === 'Total Liquidations') {\r\n                                    tooltipHtml += `<b>${p.series.name}:<\/b> $${p.y.toFixed(0)}M<br>`;\r\n                                } else {\r\n                                    if (p.y !== null) {\r\n                                        tooltipHtml += `<b>${p.series.name}:<\/b> $${p.y.toFixed(0)}M<br>`;\r\n                                    }\r\n                                }\r\n                            });\r\n                            return tooltipHtml;\r\n                        }\r\n                    },\r\n                    series: [{\r\n                        name: 'Total Liquidations',\r\n                        data: barData,\r\n                        colorByPoint: true,\r\n                        colorKey: 'colorValue'\r\n                    }, {\r\n                        name: 'Cumulative Long Liquidation Leverage',\r\n                        type: 'area',\r\n                        data: fullCumulativeBelowData,\r\n                        color: 'rgba(0, 255, 0, 0.7)',\r\n                        yAxis: 1,\r\n                        zIndex: 1,\r\n                        showInLegend: false\r\n                    }, {\r\n                        name: 'Cumulative Short Liquidation Leverage',\r\n                        type: 'area',\r\n                        data: fullCumulativeAboveData,\r\n                        color: 'rgba(255, 0, 0, 0.7)',\r\n                        yAxis: 1,\r\n                        zIndex: 1,\r\n                        showInLegend: false\r\n                    }],\r\n                    credits: {\r\n                        enabled: false\r\n                    },\r\n                    legend: {\r\n                        enabled: false\r\n                    }\r\n                });\r\n\r\n                if (loadingElement) {\r\n                    loadingElement.classList.remove('visible');\r\n                }\r\n            }).catch(error => {\r\n                console.error('Erro no processamento dos dados:', error);\r\n                if (loadingElement) {\r\n                    loadingElement.classList.remove('visible');\r\n                }\r\n            });\r\n        }).catch(error => {\r\n            console.error('Erro ao buscar dados:', error);\r\n            if (loadingElement) {\r\n                loadingElement.classList.remove('visible');\r\n            }\r\n        });\r\n    }\r\n\r\n    chartRenderers.liquidationHeatmap = Object.assign((period) => renderCharts(period), { chartId: 'liquidationHeatmap' });\r\n\r\n    jQuery(document).ready(function() {\r\n        const wrapper = jQuery('#customSelect');\r\n        const button = jQuery('#selectedOption');\r\n        const optionsList = jQuery('#optionsList');\r\n        const initialPeriod = button.attr('data-value') || '1month';\r\n\r\n        \/\/ Initialize symbol selector\r\n        const symWrapper = jQuery('#symbolSelect');\r\n        const symButton = jQuery('#selectedSymbol');\r\n        const symOptions = jQuery('#symbolOptions');\r\n        const initialSymbol = symButton.attr('data-value') || 'BTCUSDT';\r\n        symButton.text(initialSymbol);\r\n\r\n        \/\/ Symbol select handlers\r\n        symButton.on('click', function(e) {\r\n            e.stopPropagation();\r\n            symWrapper.toggleClass('open');\r\n            symOptions.toggleClass('open');\r\n        });\r\n        symOptions.find('div').on('click', function(e) {\r\n            e.stopPropagation();\r\n            const value = jQuery(this).attr('data-value');\r\n            symButton.text(value);\r\n            symButton.attr('data-value', value);\r\n            symWrapper.removeClass('open');\r\n            symOptions.removeClass('open');\r\n            const period = jQuery('#selectedOption').attr('data-value') || initialPeriod;\r\n            renderCharts(period);\r\n        });\r\n\r\n        renderCharts(initialPeriod);\r\n\r\n        button.on('click', () => {\r\n            wrapper.toggleClass('open');\r\n        });\r\n\r\n        optionsList.find('div').on('click', function() {\r\n            const selectedValue = jQuery(this).attr('data-value');\r\n            button.text(selectedValue === '12h' ? '12 hours' : selectedValue === '24h' ? '24 hours' : selectedValue === '48h' ? '48 hours' : selectedValue === '3day' ? '3 days' : selectedValue === '1week' ? '1 week' : selectedValue === '2week' ? '2 weeks' : selectedValue === '1month' ? '1 month' : selectedValue === '2month' ? '2 months' : selectedValue === '3month' ? '3 months' : selectedValue === '6month' ? '6 months' : '1 year');\r\n            button.attr('data-value', selectedValue);\r\n            wrapper.removeClass('open');\r\n            renderCharts(selectedValue);\r\n        });\r\n\r\n        jQuery(document).on('click', (e) => {\r\n            if (!wrapper.is(e.target) && wrapper.has(e.target).length === 0) {\r\n                wrapper.removeClass('open');\r\n            }\r\n        });\r\n\r\n        const refreshButton = document.getElementById('refresh-charts');\r\n        if (refreshButton) {\r\n            refreshButton.addEventListener('click', refreshAllCharts);\r\n        }\r\n    });\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ef5fc95 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"ef5fc95\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-c257752 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"c257752\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1e8c419 elementor-widget elementor-widget-heading\" data-id=\"1e8c419\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Liquidation Map Explained<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-82e3fab container-explanation elementor-widget elementor-widget-text-editor\" data-id=\"82e3fab\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p data-start=\"51\" data-end=\"224\">This heatmap reveals the key price zones where leveraged traders are likely to be liquidated\u2014areas where long or short positions may be wiped out if the price moves sharply.<\/p><p data-start=\"226\" data-end=\"451\">This is not necessarily a case of price action hunting stops, but rather a natural behavior of market dynamics. Still, some clusters may reflect insider trading or collective positioning, especially in previous market cycles.<\/p><p data-start=\"453\" data-end=\"719\">\u00a0 \u00a0&#8211; <strong data-start=\"463\" data-end=\"477\">Main idea:<\/strong><br data-start=\"477\" data-end=\"480\" \/>Leverage doesn\u2019t always push the price up or down, but it does create pressure. When too many traders are overleveraged in one direction, the price often loses momentum to continue the trend and instead gains strength to move against them.<\/p><p data-start=\"721\" data-end=\"1028\" data-is-last-node=\"\" data-is-only-node=\"\">It\u2019s important to note that trend reversals can occur abruptly, leaving strong liquidation zones behind untouched.<br data-start=\"835\" data-end=\"838\" \/>Indicators such as <strong data-start=\"857\" data-end=\"871\">Volatility<\/strong>, <strong data-start=\"873\" data-end=\"889\">Funding Rate<\/strong>, <strong data-start=\"891\" data-end=\"908\">Open Interest<\/strong>, <strong>Google Trends<\/strong> among others, help identify these turning points, distinguishing a mere pullback from a potential structural reversal.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e5ea9cf e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"e5ea9cf\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d141b36 elementor-widget elementor-widget-wpr-elementor-template\" data-id=\"d141b36\" data-element_type=\"widget\" data-widget_type=\"wpr-elementor-template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>.elementor-48055 .elementor-element.elementor-element-ac046db{--display:flex;--flex-direction:row;--container-widget-width:initial;--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:flex-start;--gap:20px 0px;--background-transition:0.3s;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-48055 .elementor-element.elementor-element-3352b65{--display:flex;--flex-direction:row;--container-widget-width:initial;--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:flex-start;--background-transition:0.3s;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-48055 .elementor-element.elementor-element-69ac3ee .elementor-button-content-wrapper{flex-direction:row;}.elementor-48055 .elementor-element.elementor-element-69ac3ee .elementor-button{font-family:\"Lato\", Sans-serif;fill:#8F8F8F;color:#8F8F8F;background-color:#131313;border-style:solid;border-width:1px 1px 1px 1px;border-color:#292929;border-radius:5px 5px 5px 5px;padding:10px 22px 10px 22px;}.elementor-48055 .elementor-element.elementor-element-69ac3ee > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;}.elementor-48055 .elementor-element.elementor-element-69ac3ee{width:auto;max-width:auto;}.elementor-48055 .elementor-element.elementor-element-69ac3ee.elementor-element{--align-self:flex-start;}.tooltipster-sidetip .tooltipster-box.tooltipster-box-69ac3ee .premium-tooltip-content-wrapper-69ac3ee .premium-tootltip-text{color:#B7B7B7;}.tooltipster-box.tooltipster-box-69ac3ee{background-color:#1C1C1C;border-style:solid;border-width:1px 1px 1px 1px;border-color:#292929;border-radius:5px;}.tooltipster-sidetip .tooltipster-box.tooltipster-box-69ac3ee{box-shadow:2px 2px 9px 6px rgba(0,0,0,0.5);}.tooltipster-sidetip div.tooltipster-box-69ac3ee {padding:1px 1px 1px 1px;}.elementor-48055 .elementor-element.elementor-element-95aafac .elementor-button-content-wrapper{flex-direction:row;}.elementor-48055 .elementor-element.elementor-element-95aafac .elementor-button{font-family:\"Lato\", Sans-serif;fill:#8F8F8F;color:#8F8F8F;background-color:#131313;border-style:solid;border-width:1px 1px 1px 1px;border-color:#292929;border-radius:5px 5px 5px 5px;padding:10px 22px 10px 22px;}.elementor-48055 .elementor-element.elementor-element-95aafac > .elementor-widget-container{padding:0px 0px 0px 0px;}.elementor-48055 .elementor-element.elementor-element-95aafac{width:auto;max-width:auto;}.elementor-48055 .elementor-element.elementor-element-95aafac.elementor-element{--align-self:flex-start;}.tooltipster-sidetip .tooltipster-box.tooltipster-box-95aafac .premium-tooltip-content-wrapper-95aafac .premium-tootltip-text{color:#B7B7B7;}.tooltipster-box.tooltipster-box-95aafac{background-color:#1C1C1C;border-style:solid;border-width:1px 1px 1px 1px;border-color:#292929;border-radius:5px;}.tooltipster-sidetip .tooltipster-box.tooltipster-box-95aafac{box-shadow:2px 2px 9px 6px rgba(0,0,0,0.5);}.tooltipster-sidetip div.tooltipster-box-95aafac {padding:1px 1px 1px 1px;}.elementor-48055 .elementor-element.elementor-element-04fde12 .elementor-button-content-wrapper{flex-direction:row;}.elementor-48055 .elementor-element.elementor-element-04fde12 .elementor-button{font-family:\"Lato\", Sans-serif;fill:#DDDDDD;color:#DDDDDD;background-color:#131313;border-style:solid;border-width:1px 1px 1px 1px;border-color:#444444;border-radius:5px 5px 5px 5px;padding:10px 22px 10px 22px;}.elementor-48055 .elementor-element.elementor-element-04fde12 > .elementor-widget-container{padding:0px 0px 0px 0px;}.elementor-48055 .elementor-element.elementor-element-04fde12{width:auto;max-width:auto;}.elementor-48055 .elementor-element.elementor-element-04fde12.elementor-element{--align-self:flex-start;}.tooltipster-box.tooltipster-box-04fde12{border-style:solid;border-width:1px 1px 1px 1px;border-color:#292929;border-radius:5px;}.tooltipster-sidetip .tooltipster-box.tooltipster-box-04fde12{box-shadow:2px 2px 9px 6px rgba(0,0,0,0.5);}.tooltipster-sidetip div.tooltipster-box-04fde12 {padding:1px 1px 1px 1px;}.elementor-48055 .elementor-element.elementor-element-2635954{--display:flex;--flex-direction:row;--container-widget-width:initial;--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:flex-start;--background-transition:0.3s;--margin-top:0px;--margin-bottom:0px;--margin-left:0px;--margin-right:0px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-48055 .elementor-element.elementor-element-2635954.e-con{--align-self:flex-start;}.elementor-48055 .elementor-element.elementor-element-0e6167e .elementor-button-content-wrapper{flex-direction:row;}.elementor-48055 .elementor-element.elementor-element-0e6167e .elementor-button{font-family:\"Lato\", Sans-serif;fill:#EEEEEE;color:#EEEEEE;background-color:#131313;border-style:solid;border-width:1px 1px 1px 1px;border-color:#292929;border-radius:5px 5px 5px 5px;padding:10px 22px 10px 22px;}.elementor-48055 .elementor-element.elementor-element-0e6167e .elementor-button:hover, .elementor-48055 .elementor-element.elementor-element-0e6167e .elementor-button:focus{border-color:#555555;}.elementor-48055 .elementor-element.elementor-element-0e6167e > .elementor-widget-container{padding:0px 0px 0px 0px;}.elementor-48055 .elementor-element.elementor-element-0e6167e.elementor-element{--align-self:flex-start;}.tooltipster-box.tooltipster-box-0e6167e{border-style:solid;border-width:1px 1px 1px 1px;border-color:#292929;border-radius:5px;}.tooltipster-sidetip .tooltipster-box.tooltipster-box-0e6167e{box-shadow:2px 2px 9px 6px rgba(0,0,0,0.5);}.tooltipster-sidetip div.tooltipster-box-0e6167e {padding:1px 1px 1px 1px;}.elementor-48055 .elementor-element.elementor-element-02f8ae5 .elementor-button-content-wrapper{flex-direction:row;}.elementor-48055 .elementor-element.elementor-element-02f8ae5 .elementor-button{font-family:\"Lato\", Sans-serif;fill:#EEEEEE;color:#EEEEEE;background-color:#131313;border-style:solid;border-width:1px 1px 1px 1px;border-color:#292929;border-radius:5px 5px 5px 5px;padding:10px 22px 10px 22px;}.elementor-48055 .elementor-element.elementor-element-02f8ae5 .elementor-button:hover, .elementor-48055 .elementor-element.elementor-element-02f8ae5 .elementor-button:focus{border-color:#555555;}.elementor-48055 .elementor-element.elementor-element-02f8ae5 > .elementor-widget-container{padding:0px 0px 0px 0px;}.elementor-48055 .elementor-element.elementor-element-02f8ae5.elementor-element{--align-self:flex-start;}.tooltipster-box.tooltipster-box-02f8ae5{border-style:solid;border-width:1px 1px 1px 1px;border-color:#292929;border-radius:5px;}.tooltipster-sidetip .tooltipster-box.tooltipster-box-02f8ae5{box-shadow:2px 2px 9px 6px rgba(0,0,0,0.5);}.tooltipster-sidetip div.tooltipster-box-02f8ae5 {padding:1px 1px 1px 1px;}.elementor-48055 .elementor-element.elementor-element-d75856e{--display:flex;--background-transition:0.3s;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}@media(max-width:767px){.elementor-48055 .elementor-element.elementor-element-69ac3ee .elementor-button{font-size:14px;padding:8px 16px 6px 16px;}.elementor-48055 .elementor-element.elementor-element-95aafac .elementor-button{font-size:14px;padding:8px 16px 6px 16px;}.elementor-48055 .elementor-element.elementor-element-04fde12 .elementor-button{font-size:14px;padding:8px 16px 6px 16px;}.elementor-48055 .elementor-element.elementor-element-0e6167e .elementor-button{font-size:14px;padding:8px 16px 6px 16px;}.elementor-48055 .elementor-element.elementor-element-02f8ae5 .elementor-button{font-size:14px;padding:8px 16px 6px 16px;}}@media(min-width:768px){.elementor-48055 .elementor-element.elementor-element-3352b65{--width:100%;}}<\/style>\t\t<div data-elementor-type=\"container\" data-elementor-id=\"48055\" class=\"elementor elementor-48055\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ac046db e-con-full pa-display-conditions-yes e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"ac046db\" data-element_type=\"container\" data-settings=\"{&quot;pa_display_conditions_switcher&quot;:&quot;yes&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-3352b65 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"3352b65\" data-element_type=\"container\">\n\t\t\t\t<div data-tooltip-id=\"69ac3ee\" data-tooltip_settings=\"{&quot;type&quot;:&quot;text&quot;,&quot;content&quot;:&quot;&quot;,&quot;minWidth&quot;:{&quot;desktop&quot;:0,&quot;mobile&quot;:0,&quot;tablet&quot;:0},&quot;maxWidth&quot;:{&quot;desktop&quot;:350,&quot;mobile&quot;:null,&quot;tablet&quot;:null},&quot;zindex&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;,&quot;anime&quot;:&quot;fade&quot;,&quot;trigger&quot;:&quot;hover&quot;,&quot;side&quot;:&quot;top,bottom&quot;,&quot;arrow&quot;:false,&quot;distance&quot;:20,&quot;duration&quot;:350,&quot;delay&quot;:10,&quot;hideOn&quot;:[],&quot;elemID&quot;:&quot;69ac3ee&quot;,&quot;follow_mouse&quot;:false}\" class=\"elementor-element elementor-element-69ac3ee elementor-align-left premium-global-tooltips-yes elementor-widget__width-auto not-allowed elementor-widget elementor-widget-button\" data-id=\"69ac3ee\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t<div class=\"premium-gtooltips-temp premium-global-tooltips-wrapper-temp-69ac3ee\" style=\"display: none;\">\r\n\t\t\t\t\t<div id=\"tooltip_content-69ac3ee\" class=\"premium-global-tooltip-content premium-tooltip-content-wrapper-69ac3ee\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"premium-tootltip-text\">\r\n\t\t\t\t\t\t\t\t\tPlease upgrade your plan to gain access.\t\t\t\t\t\t\t\t\t<\/span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-external-link-alt\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M432,320H400a16,16,0,0,0-16,16V448H64V128H208a16,16,0,0,0,16-16V80a16,16,0,0,0-16-16H48A48,48,0,0,0,0,112V464a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V336A16,16,0,0,0,432,320ZM488,0h-128c-21.37,0-32.05,25.91-17,41l35.73,35.73L135,320.37a24,24,0,0,0,0,34L157.67,377a24,24,0,0,0,34,0L435.28,133.32,471,169c15,15,41,4.5,41-17V24A24,24,0,0,0,488,0Z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">API Access<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-tooltip-id=\"95aafac\" data-tooltip_settings=\"{&quot;type&quot;:&quot;text&quot;,&quot;content&quot;:&quot;&quot;,&quot;minWidth&quot;:{&quot;desktop&quot;:0,&quot;mobile&quot;:0,&quot;tablet&quot;:0},&quot;maxWidth&quot;:{&quot;desktop&quot;:null,&quot;mobile&quot;:null,&quot;tablet&quot;:null},&quot;zindex&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;,&quot;anime&quot;:&quot;fade&quot;,&quot;trigger&quot;:&quot;hover&quot;,&quot;side&quot;:&quot;top,bottom&quot;,&quot;arrow&quot;:false,&quot;distance&quot;:20,&quot;duration&quot;:350,&quot;delay&quot;:10,&quot;hideOn&quot;:[],&quot;elemID&quot;:&quot;95aafac&quot;,&quot;follow_mouse&quot;:false}\" class=\"elementor-element elementor-element-95aafac elementor-align-left premium-global-tooltips-yes elementor-widget__width-auto not-allowed elementor-widget elementor-widget-button\" data-id=\"95aafac\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t<div class=\"premium-gtooltips-temp premium-global-tooltips-wrapper-temp-95aafac\" style=\"display: none;\">\r\n\t\t\t\t\t<div id=\"tooltip_content-95aafac\" class=\"premium-global-tooltip-content premium-tooltip-content-wrapper-95aafac\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"premium-tootltip-text\">\r\n\t\t\t\t\t\t\t\t\tPlease upgrade your plan  to gain access.\t\t\t\t\t\t\t\t\t<\/span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-file-download\" viewBox=\"0 0 384 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">CSV Download<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-04fde12 elementor-align-left upgrade-plan elementor-widget__width-auto elementor-widget elementor-widget-button\" data-id=\"04fde12\" data-element_type=\"widget\" id=\"upgrade-plan\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/bitcoincounterflow.com\/pricing\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-user-plus\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Upgrade Plan<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d75856e e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"d75856e\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7b17dc5 elementor-widget elementor-widget-html\" data-id=\"7b17dc5\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\r\n    .upgrade-plan, #upgrade-plan {\r\n    cursor: pointer !important;\r\n    border-color: #333!important;\r\n}\r\n\r\n    .not-allowed {\r\n        cursor: not-allowed;\r\n\r\n    }\r\n\r\n.upgrade-plan:hover {\r\n    border-color: #555!important;\r\n}\r\n\r\n.button-conts2 .csv-download, .button-conts2 .api-download {\r\n    cursor: pointer;\r\n}\r\n<\/style>\r\n\r\n<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n    const buttons = document.querySelectorAll(\".csv-download\");\r\n    if (!buttons.length) return;\r\n\r\n    const apiEndpoints = {\r\n        \"m2\": \"https:\/\/api.bitcoincounterflow.com\/api\/m2-global\",\r\n        \"dominance\": \"https:\/\/api.bitcoincounterflow.com\/api\/bitcoin-dominance\",\r\n        \"funding\": \"https:\/\/api.bitcoincounterflow.com\/api\/bitcoin-stats\",\r\n        \"nupl\": \"https:\/\/api.bitcoincounterflow.com\/api\/nupl-history\",\r\n        \"etf-tracker\": \"https:\/\/api.bitcoincounterflow.com\/api\/etf-data\",\r\n        \"google-trends\": \"https:\/\/api.bitcoincounterflow.com\/api\/google-trends\",\r\n        \"open-interest\": \"https:\/\/api.bitcoincounterflow.com\/api\/open-interest\",\r\n        \"dca\": \"https:\/\/api.bitcoincounterflow.com\/api\/dca-calculator\",\r\n        \"daily-change\": \"https:\/\/api.bitcoincounterflow.com\/api\/dca-calculator\",\r\n        \"liquidation-heatmap\": \"https:\/\/api.bitcoincounterflow.com\/api\/liquidation-heatmap?period=1month\",\r\n        \"default\": \"https:\/\/api.bitcoincounterflow.com\/api\/dca-calculator\"\r\n    };\r\n\r\n    function getApiUrl() {\r\n        const url = window.location.pathname.toLowerCase();\r\n\r\n        if (url.includes(\"\/m2\")) return apiEndpoints.m2;\r\n        if (url.includes(\"\/bitcoin-dominance\") || url.includes(\"\/dominancia\")) return apiEndpoints.dominance;\r\n        if (url.includes(\"\/funding\")) return apiEndpoints.funding;\r\n        if (url.includes(\"\/nupl\")) return apiEndpoints.nupl;\r\n        if (url.includes(\"etf-tracker\")) return apiEndpoints[\"etf-tracker\"];\r\n        if (url.includes(\"google-trends\")) return apiEndpoints[\"google-trends\"];\r\n        if (url.includes(\"\/charts\/open-interest\")) return apiEndpoints[\"open-interest\"];\r\n        if (url.includes(\"\/charts\/mayer-multiple-chart\")) return apiEndpoints[\"dca\"];\r\n        if (url.includes(\"\/charts\/bitcoin-30d-volatility\")) return apiEndpoints[\"dca\"];\r\n        if (url.includes(\"\/charts\/fear-greed-index\")) return \"fng\";\r\n        if (url.includes(\"\/charts\/daily-change-percent\")) return apiEndpoints[\"daily-change\"];\r\n        if (url.includes(\"\/liquidation-heatmap\")) return apiEndpoints[\"liquidation-heatmap\"];\r\n\r\n        return apiEndpoints.default;\r\n    }\r\n\r\n    function getFileName() {\r\n        const path = window.location.pathname.toLowerCase();\r\n        const nameMap = {\r\n            \"\/charts\/m2-global\": \"M2 Global\",\r\n            \"\/charts\/bitcoin-dominance\": \"Bitcoin Dominance\",\r\n            \"\/charts\/funding\": \"Bitcoin Funding Rate\",\r\n            \"\/charts\/nupl\": \"NUPL\",\r\n            \"\/etf-tracker\": \"ETF Data\",\r\n            \"\/charts\/google-trends\": \"Google Trends Data\",\r\n            \"\/charts\/open-interest\": \"Open Interest\",\r\n            \"\/charts\/mayer-multiple-chart\": \"Mayer Multiple\",\r\n            \"\/charts\/bitcoin-30d-volatility\": \"Bitcoin 30d Volatility\",\r\n            \"\/charts\/fear-greed-index\": \"Fear and Greed Index\",\r\n            \"\/charts\/daily-change-percent\": \"Bitcoin Daily Change Percent\",\r\n            \"\/charts\/liquidation-heatmap\": \"Liquidation Heatmap\"\r\n        };\r\n\r\n        \/\/ Extract the relevant path segment\r\n        let key = path;\r\n        if (path.includes(\"\/charts\/\")) {\r\n            key = \"\/charts\/\" + path.split(\"\/charts\/\")[1].split(\"\/\")[0];\r\n        } else if (path.includes(\"\/etf-tracker\")) {\r\n            key = \"\/etf-tracker\";\r\n        }\r\n\r\n        \/\/ Remove trailing slash if present\r\n        key = key.replace(\/\\\/$\/, \"\");\r\n\r\n        \/\/ Return the mapped name or a default formatted name\r\n        const fileName = nameMap[key] || key.split(\"\/\").pop()\r\n            .replace(\/-\/g, \" \")\r\n            .replace(\/\\b\\w\/g, char => char.toUpperCase());\r\n        \r\n        return `${fileName}.csv`;\r\n    }\r\n\r\n    function convertToCSV(data, custom = null) {\r\n        if (!Array.isArray(data) || data.length === 0) {\r\n            console.error(\"Invalid or empty data for CSV conversion.\");\r\n            return \"\";\r\n        }\r\n\r\n        if (typeof custom === \"function\") {\r\n            return custom(data);\r\n        }\r\n\r\n        const headers = Object.keys(data[0]);\r\n        const csvRows = [headers.join(\",\")];\r\n\r\n        data.forEach(row => {\r\n            const values = headers.map(header => JSON.stringify(row[header] || \"\"));\r\n            csvRows.push(values.join(\",\"));\r\n        });\r\n\r\n        return csvRows.join(\"\\n\");\r\n    }\r\n\r\n    function calculateMayerMultipleCSV(data) {\r\n        const btcPrices = data.map(d => d.btcPrice);\r\n        const result = [];\r\n\r\n        for (let i = 199; i < data.length; i++) {\r\n            const windowPrices = btcPrices.slice(i - 199, i + 1);\r\n            const movingAvg = windowPrices.reduce((a, b) => a + b, 0) \/ 200;\r\n            const btcPrice = btcPrices[i];\r\n            const mayer = movingAvg > 0 ? btcPrice \/ movingAvg : null;\r\n\r\n            result.push({\r\n                date: data[i].timestamp.split(\"T\")[0],\r\n                btcPrice: btcPrice,\r\n                mayerMultiple: mayer?.toFixed(4)\r\n            });\r\n        }\r\n\r\n        const csvRows = [\"Date,BTC Price,Mayer Multiple\"];\r\n        result.forEach(row => {\r\n            csvRows.push(`${row.date},${row.btcPrice},${row.mayerMultiple}`);\r\n        });\r\n\r\n        return csvRows.join(\"\\n\");\r\n    }\r\n\r\n    function calculateVolatilityCSV(data) {\r\n        const result = [];\r\n\r\n        for (let i = 30; i < data.length; i++) {\r\n            const windowData = data.slice(i - 30, i + 1);\r\n            const prices = windowData.map(d => d.btcPrice);\r\n\r\n            const logReturns = [];\r\n            for (let j = 1; j < prices.length; j++) {\r\n                const ret = Math.log(prices[j] \/ prices[j - 1]);\r\n                logReturns.push(ret);\r\n            }\r\n\r\n            const avg = logReturns.reduce((a, b) => a + b, 0) \/ logReturns.length;\r\n            const variance = logReturns.reduce((sum, r) => sum + Math.pow(r - avg, 2), 0) \/ logReturns.length;\r\n            const stdDev = Math.sqrt(variance);\r\n            const annualizedVol = stdDev * Math.sqrt(365) * 100;\r\n\r\n            result.push({\r\n                date: data[i].timestamp.split(\"T\")[0],\r\n                btcPrice: data[i].btcPrice,\r\n                volatility: annualizedVol.toFixed(2)\r\n            });\r\n        }\r\n\r\n        const csvRows = [\"Date,BTC Price,30d Volatility (%)\"];\r\n        result.forEach(row => {\r\n            csvRows.push(`${row.date},${row.btcPrice},${row.volatility}`);\r\n        });\r\n\r\n        return csvRows.join(\"\\n\");\r\n    }\r\n\r\n    function calculateDailyChangeCSV(data) {\r\n        const result = [];\r\n\r\n        for (let i = 1; i < data.length; i++) {\r\n            const currentPrice = data[i].btcPrice;\r\n            const previousPrice = data[i-1].btcPrice;\r\n            const dailyChange = previousPrice > 0 ? ((currentPrice - previousPrice) \/ previousPrice * 100).toFixed(2) : null;\r\n\r\n            result.push({\r\n                date: data[i].timestamp.split(\"T\")[0],\r\n                btcPrice: currentPrice,\r\n                dailyChange: dailyChange\r\n            });\r\n        }\r\n\r\n        const csvRows = [\"Date,BTC Price (USD),Daily Change (%)\"];\r\n        result.forEach(row => {\r\n            csvRows.push(`${row.date},${row.btcPrice},${row.dailyChange}`);\r\n        });\r\n\r\n        return csvRows.join(\"\\n\");\r\n    }\r\n\r\n    async function generateFearGreedCSV() {\r\n        const [btcRes, fngRes] = await Promise.all([\r\n            fetch(\"https:\/\/api.bitcoincounterflow.com\/api\/dca-calculator\"),\r\n            fetch(\"https:\/\/api.alternative.me\/fng\/?limit=0\")\r\n        ]);\r\n\r\n        if (!btcRes.ok || !fngRes.ok) throw new Error(\"Error fetching BTC or FNG data\");\r\n\r\n        const btcData = await btcRes.json();\r\n        const fngRaw = await fngRes.json();\r\n\r\n        const fngData = fngRaw.data.map(d => {\r\n            const date = new Date(+d.timestamp * 1000).toISOString().split(\"T\")[0];\r\n            return {\r\n                date,\r\n                value: +d.value,\r\n                classification: d.value_classification\r\n            };\r\n        });\r\n\r\n        const btcMap = {};\r\n        btcData.forEach(d => {\r\n            const date = d.timestamp.split(\"T\")[0];\r\n            btcMap[date] = d.btcPrice;\r\n        });\r\n\r\n        const combined = fngData\r\n            .filter(d => btcMap[d.date])\r\n            .map(d => ({\r\n                date: d.date,\r\n                btcPrice: btcMap[d.date],\r\n                fearGreed: d.value,\r\n                classification: d.classification\r\n            }));\r\n\r\n        const csvRows = [\"Date,BTC Price,Fear & Greed Value,Classification\"];\r\n        combined.forEach(row => {\r\n            csvRows.push(`${row.date},${row.btcPrice},${row.fearGreed},${row.classification}`);\r\n        });\r\n\r\n        return csvRows.join(\"\\n\");\r\n    }\r\n\r\n    async function downloadCSV() {\r\n        const apiUrl = getApiUrl();\r\n        const fileName = getFileName();\r\n        const path = window.location.pathname.toLowerCase();\r\n\r\n        const isMayerPage = path.includes(\"\/charts\/mayer-multiple-chart\");\r\n        const isVolatilityPage = path.includes(\"\/charts\/bitcoin-30d-volatility\");\r\n        const isFearGreedPage = path.includes(\"\/charts\/fear-greed-index\");\r\n        const isDailyChangePage = path.includes(\"\/charts\/daily-change-percent\");\r\n\r\n        try {\r\n            let csvData;\r\n\r\n            if (isFearGreedPage) {\r\n                csvData = await generateFearGreedCSV();\r\n            } else {\r\n                const response = await fetch(apiUrl);\r\n                if (!response.ok) throw new Error(`Error fetching data: ${response.statusText}`);\r\n\r\n                const data = await response.json();\r\n                if (!Array.isArray(data) || data.length === 0) throw new Error(\"API returned empty data.\");\r\n\r\n                if (isMayerPage) {\r\n                    csvData = calculateMayerMultipleCSV(data);\r\n                } else if (isVolatilityPage) {\r\n                    csvData = calculateVolatilityCSV(data);\r\n                } else if (isDailyChangePage) {\r\n                    csvData = calculateDailyChangeCSV(data);\r\n                } else {\r\n                    csvData = convertToCSV(data);\r\n                }\r\n            }\r\n\r\n            const blob = new Blob([csvData], { type: \"text\/csv\" });\r\n            const url = URL.createObjectURL(blob);\r\n\r\n            const a = document.createElement(\"a\");\r\n            a.href = url;\r\n            a.download = fileName;\r\n            document.body.appendChild(a);\r\n            a.click();\r\n            document.body.removeChild(a);\r\n            URL.revokeObjectURL(url);\r\n        } catch (error) {\r\n            console.error(\"CSV download error:\", error);\r\n            alert(\"Error generating CSV. Please check the API or try again later.\");\r\n        }\r\n    }\r\n\r\n    buttons.forEach(button => {\r\n        button.addEventListener(\"click\", downloadCSV);\r\n    });\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<span class=\"wpr-template-edit-btn\" data-permalink=\"https:\/\/bitcoincounterflow.com\/?elementor_library=botoes-api-e-csv\">Edit Template<\/span>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Bitcoin BTC\/USD 7 days Trial Unlock more access! Try our Maxi Plan Price- 24h %- 7d %- 1M %- ATH- ATH \ud83d\udd3b%- Funding Rate &#8211; Fear &amp; Greed &#8211; Google Trends &#8211; Dominance &#8211; Edit Template Charts Core Models Backtest and Model Creator PRO CounterFlow Model PRO OmniFlow Model PRO Macro &#038; Liquidity Global M2 Growth PRO Bitcoin x Gold x S&#038;P500 DXY x Bitcoin Heatmaps &#038; SuperChart Liquidation Heatmap PRO Liquidation Map PRO Price Visit Frequency Heatmap CounterFlow SuperChart PRO Market Cycles &#038; Comparisons From Low-to-Low Comparison After Halving Comparison Halving Cycles Comparison Bull Market Drawdowns PRO Sentiment &#038; Behavioral Fear &#038; Greed Index Google Trends PRO NUPL MVRV Bitcoin Dominance Volatility &#038; Risk Metrics Daily Change % Drawdown from ATH Price Volatility Mayer Multiple Derivative Metrics Funding Rate PRO Funding Rate Each Exchange Open Interest PRO Net Shorts PRO Net Longs PRO Liquidations Long\/Short RatioPRO Futures vs Spot Volume Treasuries Spot ETFs Overview MicroStrategy (MSTR) Charts Meliuz Charts Bitcoin Companies Edit Template BTCUSDT BTCUSDT BTCUSDT ETHUSDT SOLUSDT 1 month 12 hours 24 hours 48 hours 3 days 1 week 2 weeks 1 month 2 months 3 months 6 months 1 year Loading&#8230; Liquidation Map Explained This heatmap reveals the key price zones where leveraged traders are likely to be liquidated\u2014areas where long or short positions may be wiped out if the price moves sharply. This is not necessarily a case of price action hunting stops, but rather a natural behavior of market dynamics. Still, some clusters may reflect insider trading or collective positioning, especially in previous market cycles. \u00a0 \u00a0&#8211; Main idea:Leverage doesn\u2019t always push the price up or down, but it does create pressure. When too many traders are overleveraged in one direction, the price often loses momentum to continue the trend and instead gains strength to move against them. It\u2019s important to note that trend reversals can occur abruptly, leaving strong liquidation zones behind untouched.Indicators such as Volatility, Funding Rate, Open Interest, Google Trends among others, help identify these turning points, distinguishing a mere pullback from a potential structural reversal. API Access CSV Download Edit Template<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-68632","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/pages\/68632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/comments?post=68632"}],"version-history":[{"count":7,"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/pages\/68632\/revisions"}],"predecessor-version":[{"id":81032,"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/pages\/68632\/revisions\/81032"}],"wp:attachment":[{"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/media?parent=68632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}