{"id":27552,"date":"2024-07-19T15:35:39","date_gmt":"2024-07-19T19:35:39","guid":{"rendered":"https:\/\/bitcoincounterflow.com\/?page_id=27552"},"modified":"2026-03-16T12:45:26","modified_gmt":"2026-03-16T16:45:26","slug":"charts","status":"publish","type":"page","link":"https:\/\/bitcoincounterflow.com\/charts\/","title":{"rendered":"Charts"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"27552\" class=\"elementor elementor-27552\">\n\t\t\t\t<div class=\"elementor-element elementor-element-06d2d32 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"06d2d32\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6c4138d elementor-widget-mobile__width-inherit elementor-widget elementor-widget-wpr-elementor-template\" data-id=\"6c4138d\" 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-c81a890 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"c81a890\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-fce9ecf 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=\"fce9ecf\" 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-27e574a elementor-widget elementor-widget-wpr-elementor-template\" data-id=\"27e574a\" 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-c850701 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"c850701\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-5d042d9 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"5d042d9\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-11aee6b elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"11aee6b\" 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      #container-heatmap, #open-interest-chart, #long-short-ratio-chart, #funding-rate-chart, #net-shorts-chart, #volatility-chart, #funding-chart, #net-longs-chart, #bitcoin-price-chart, #liquidations-chart, #etf-container, #trends-bitcoin-chart,#btc-dominance-chart, #bitcoin-performance-chart, #m2-global-chart, #chartdiv-container, #gold-chart, #sp500-chart, #mstr-chart {\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    position: relative;\r\n  }\r\n  \r\n  label {\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 .container-title:has(a:hover),\r\n    .container-title:has(select:hover) {\r\n    background-color: #101010!important; \r\n    }\r\n    \r\n \r\n\r\n  .loading {\r\n    position: absolute;\r\n    top: 50%;\r\n    right: 50%;\r\n    transform: translate(50%, -50%);\r\n    font-family: 'Helvetica Neue', 'Arial', sans-serif;\r\n    font-size: 15px !important;\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% {\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  .loading.visible {\r\n    display: block;\r\n  }\r\n  \r\n   .container-title span, .container-title p,  .container-title a {\r\n    font-size: 14px;\r\n    max-height: 30px;\r\n    align-content: center;\r\n    text-wrap-mode: nowrap;\r\n    }\r\n\r\n  .container-title {\r\n    border-bottom: 1px solid #191919;\r\n    background: #11111199;\r\n    width: 100%;\r\n    display: inline-flex;\r\n    padding-inline: 20px;\r\n    height: 32px;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    flex-wrap: nowrap;\r\n    position: relative; \/* allow absolute children (icon\/tooltip) to be positioned relative to title *\/\r\n  }\r\n  \r\n  .container-title a:hover{\r\n      color: #aaa!important;\r\n  }      \r\n\r\n  .container-title img {\r\n    height: 15px;\r\n    margin-left: 20%;\r\n    margin-right: 10px;\r\n  }\r\n\r\n  .container-estilo {\r\n    border: 1px solid #111!important;\r\n    border-radius: 6px !important;\r\n    overflow: visible; \/* allow tooltips to render outside of the container *\/\r\n    margin-top: 10px;\r\n    width: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n    \/* Propor\u00e7\u00e3o 16:9 - altura ajusta automaticamente com largura *\/\r\n    aspect-ratio: 16 \/ 9;\r\n  }\r\n  \r\n  \/* Bitcoin Price: 2x a altura dos outros dashboards + 10px *\/\r\n  #bitcoin-chart-container {\r\n    min-height: calc(var(--dashboard-height) * 2 + 10px);\r\n  }\r\n  \r\n  \/* Chart interno ocupa espa\u00e7o dispon\u00edvel *\/\r\n  .container-estilo > div[style*=\"height:\"] {\r\n    flex: 1;\r\n    width: 100%;\r\n    height: auto !important;\r\n  }\r\n\r\n  .chart-period-select {\r\n    background: linear-gradient(135deg, #000000, #151515);\r\n    border: 0px solid #555;\r\n    color: white;\r\n    border-radius: 5px;\r\n    cursor: pointer;\r\n    font-size: 14px;\r\n    font-weight: 400;\r\n    margin-left: 10px;\r\n    appearance: none;\r\n    -webkit-appearance: none;\r\n    -moz-appearance: none;\r\n    background-image: url('data:image\/svg+xml;utf8,<svg fill=\"%23ffffff\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M7 10l5 5 5-5z\"\/><path d=\"M0 0h24v24H0z\" fill=\"none\"\/><\/svg>');\r\n    background-repeat: no-repeat;\r\n    background-position: right 3px top 60%;\r\n    background-size: 22px;\r\n    transition: all 0.3s;\r\n    height: 36px;\r\n    width: 65px;\r\n  }\r\n\r\n  .chart-period-select:hover {\r\n    color: #aaa;\r\n    border-color: #888;\r\n  }\r\n\r\n  .chart-period-select option {\r\n    background-color: #111;\r\n    color: white;\r\n  }\r\n\r\n  \/* Info icon styles *\/\r\n  .info-icon-container {\r\n    position: absolute;\r\n    width: 20px;\r\n    height: 20px;\r\n    z-index: 33;\r\n    pointer-events: auto;\r\n  }\r\n  \r\n  \r\n\r\n  .info-icon {\r\n    width: 100%;\r\n    position: absolute;\r\n    top: 35px;\r\n    right: 15px;\r\n    height: 100%;\r\n    cursor: help;\r\n    opacity: 0.6;\r\n    transition: opacity 0.3s ease;\r\n    scale: 0.85;\r\n  }\r\n\r\n  .info-icon:hover {\r\n    opacity: 1;\r\n  }\r\n\r\n  .info-icon:hover ~ .tooltip {\r\n    visibility: visible;\r\n    opacity: 1;\r\n    pointer-events: auto;\r\n  }\r\n\r\n  .tooltip {\r\n    visibility: hidden;\r\n    top: 40px;\r\n    width: 280px;\r\n    color: #e0e0e0;\r\n    text-align: left;\r\n    border-radius: 6px;\r\n    position: absolute!important;\r\n    z-index: 9999;\r\n    font-size: 12px;\r\n    font-weight: 400;\r\n    line-height: 1.5;\r\n    opacity: 0;\r\n    transition: opacity 0.3s ease;\r\n    pointer-events: none;\r\n    max-width: 280px;\r\n    word-wrap: break-word;\r\n    white-space: normal;\r\n    overflow-wrap: break-word;\r\n    display: inline-block;\r\n    height: auto;\r\n    min-height: 26px;\r\n    bottom: calc(100% + 8px);\r\n    right: 42px;\r\n    cursor: help;\r\n  }\r\n\r\n  .tooltip-text {\r\n    display: block;\r\n    background-color: #1a1a1a;\r\n    padding: 0;\r\n  }\r\n\r\n  .tooltip::after {\r\n    content: '';\r\n    position: absolute;\r\n    z-index: 55555555555555555555555555555;\r\n    top: 0;\r\n    right: 0px;\r\n    margin-left: 15px;\r\n    border-width: 6px 6px 0 6px;\r\n    border-style: solid;\r\n    border-color: #1a1a1a transparent transparent transparent;\r\n  }\r\n\r\n  .info-icon-container:hover .tooltip {\r\n    visibility: visible;\r\n    opacity: 1;\r\n    pointer-events: auto;\r\n  }\r\n  \r\n  span.tooltip-text {\r\n    max-height: none !important;\r\n    align-content: center;\r\n    position: absolute;\r\n    text-wrap-mode: wrap !important;\r\n    background: #111;\r\n    height: auto;\r\n    right: 270px;\r\n    left: -301px;\r\n    padding: 8px 14px;\r\n    border-radius: 5px;\r\n    border: 1px solid #333;\r\n}\r\n\r\n  @media (max-width: 1024px) {\r\n    .tooltip {\r\n      width: 320px;\r\n      right: 0;\r\n      font-size: 11px;\r\n    }\r\n\r\n    .tooltip::after {\r\n      right: 6px;\r\n    }\r\n    \r\n     .info-icon {\r\n     scale: 0.9;\r\n     }\r\n  }\r\n\r\n  @media (max-width: 768px) {\r\n    .tooltip {\r\n      width: 280px;\r\n      right: 40px;\r\n      bottom: 40px;\r\n      font-size: 11px;\r\n    }\r\n\r\n    .tooltip::after {\r\n      right: 6px;\r\n    }\r\n  }\r\n\r\n  \/* --- Media Queries para Mobile --- *\/\r\n  @media (max-width: 768px) {\r\n    .container-title {\r\n      padding-inline: 10px;\r\n      font-size: 14px;\r\n      height: 36px;\r\n      text-align: center;\r\n      gap: 5px;\r\n    }\r\n\r\n    .container-title span {\r\n      white-space: nowrap;\r\n      text-align: center;\r\n    }\r\n\r\n    .container-title span[style*=\"display:inline-flex\"] {\r\n      display: flex !important;\r\n      justify-content: center;\r\n      align-items: center;\r\n      width: 100%;\r\n    }\r\n\r\n    .container-title img {\r\n      height: 12px;\r\n      margin-right: 5px;\r\n    }\r\n\r\n    .container-title span[style*=\"margin-left:5px\"] {\r\n      margin-left: 0 !important;\r\n    }\r\n\r\n    .loading {\r\n      font-size: 16px;\r\n      padding: 8px 15px;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 480px) {\r\n    .container-title {\r\n      font-size: 12px;\r\n    }\r\n  }\r\n\r\n    \/* Estilos para o bot\u00e3o de sele\u00e7\u00e3o de per\u00edodo do gr\u00e1fico *\/\r\n    .chart-period-select {\r\n        background: linear-gradient(135deg, #000000, #151515);\r\n        border: 0px solid #555;\r\n        color: white;\r\n        border-radius: 5px;\r\n        cursor: pointer;\r\n        font-size: 14px;\r\n        font-weight: 400;\r\n        margin-left: 10px;\r\n        appearance: none;\r\n        -webkit-appearance: none;\r\n        -moz-appearance: none;\r\n        background-image: url('data:image\/svg+xml;utf8,<svg fill=\"%23ffffff\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M7 10l5 5 5-5z\"\/><path d=\"M0 0h24v24H0z\" fill=\"none\"\/><\/svg>');\r\n        background-repeat: no-repeat;\r\n        background-position: right 3px top 60%;\r\n        background-size: 22px;\r\n        transition: all 0.3s;\r\n        height: 36px;\r\n        width: 65px;\r\n    }\r\n\r\n    .chart-period-select:hover {\r\n        color: #aaa;\r\n        border-color: #888;\r\n    }\r\n\r\n    .chart-period-select option {\r\n        background-color: #111;\r\n        color: white;\r\n    }\r\n    \r\n \/* 1. Define o cont\u00eainer como um container de tamanho *\/\r\n#open-interest-chart-container {\r\n  container-type: inline-size;\r\n  container-name: oi-container;\r\n}\r\n\r\n\/* 2. Esconde o nome curto por padr\u00e3o *\/\r\n.title-short {\r\n  display: none;\r\n}\r\n\r\n\/* 3. Esconde o nome longo e mostra o curto quando o cont\u00eainer for estreito *\/\r\n@container oi-container (max-width: 360px) {\r\n  .title-full {\r\n    display: none;\r\n  }\r\n\r\n  .title-short {\r\n    display: inline;\r\n  }\r\n}\r\n\r\n<\/style>\r\n\r\n<!-- C\u00f3digo HTML do gr\u00e1fico de pre\u00e7o do Bitcoin (mantido igual) -->\r\n<div class=\"container-estilo\" id=\"bitcoin-chart-container\">\r\n    <div class=\"container-title\">\r\n        <span>Bitcoin Price<\/span>\r\n        <span style=\"display: inline-flex; align-items: center; letter-spacing: 1px\">\r\n            <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\" style=\"margin-right: 5px;\">\r\n            BTCUSDT\r\n        <\/span>\r\n        <select class=\"chart-period-select\" data-chart-id=\"bitcoin-chart\">\r\n            <option value=\"1d-5m\">1d<\/option>\r\n            <option value=\"3d-15m\" selected>3d<\/option>\r\n            <option value=\"7d-15m\">7d<\/option>\r\n            <option value=\"30d-1h\">1M<\/option>\r\n            <option value=\"90d-4h\">3M<\/option>\r\n            <option value=\"ytd-1d\">YTD<\/option>\r\n            <option value=\"1y-1d\">1Y<\/option>\r\n            <option value=\"5y-1w\">5Y<\/option>\r\n            <option value=\"all\">All<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"container2\" style=\"width: 100%; position: relative; flex: 1;\">\r\n        <div id=\"loading-bitcoin\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n<!-- C\u00f3digo HTML do gr\u00e1fico de pre\u00e7o do Bitcoin (mantido igual) -->\r\n<div class=\"container-estilo\" id=\"liquidation-heatmap-chart-container\">\r\n  <div class=\"container-title\">\r\n    <a href=\"https:\/\/bitcoincounterflow.com\/liquidation-heatmap\/\" style=\"text-decoration: none; color: inherit;\">\r\n      <span>Liquidation Heatmap<\/span>\r\n    <\/a>\r\n    <span style=\"display: inline-flex; align-items: center; letter-spacing: 1px;\">\r\n      <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\" style=\"margin-right: 5px;\">\r\n      BTCUSDT\r\n    <\/span>\r\n    <select class=\"chart-period-select\" data-chart-id=\"container-heatmap\">\r\n      <option value=\"12h\">12h<\/option>\r\n      <option value=\"24h\">24h<\/option>\r\n      <option value=\"48h\">48h<\/option>\r\n      <option value=\"3day\">3d<\/option>\r\n      <option value=\"1week\">1W<\/option>\r\n      <option value=\"2week\">2W<\/option>\r\n      <option value=\"1month\">1M<\/option>\r\n      <option value=\"2month\">2M<\/option>\r\n      <option value=\"3month\" selected>3M<\/option>\r\n      <option value=\"6month\">6M<\/option>\r\n      <option value=\"1year\">1Y<\/option>\r\n    <\/select>\r\n  <\/div>\r\n  <div id=\"container-heatmap\" style=\"width: 100%; position: relative; flex: 1;\">\r\n    <div id=\"loading-heatmap\" class=\"loading visible\">Loading...<\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n\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 \r\n<!-- C\u00f3digo HTML do gr\u00e1fico de pre\u00e7o do Bitcoin (mantido igual) -->\r\n<div class=\"container-estilo\" id=\"aggregated-funding-rate-chart-container\">\r\n  <div class=\"container-title\">\r\n    <a href=\"https:\/\/bitcoincounterflow.com\/charts\/funding-rate\" style=\"text-decoration: none; color: inherit;\">\r\n      <span>Aggregated Funding Rate: <\/span><span id=\"global-funding-rate\">-<\/span>\r\n    <\/a>\r\n    <select class=\"chart-period-select\" data-chart-id=\"funding-rate-chart\">\r\n      <option value=\"1d\">1d<\/option>\r\n      <option value=\"3d\">3d<\/option>\r\n      <option value=\"7d\">7d<\/option>\r\n      <option value=\"21d\" selected>21d<\/option>\r\n      <option value=\"30d\">30d<\/option>\r\n      <option value=\"60d\">60d<\/option>\r\n      <option value=\"90d\">90d<\/option>\r\n    <\/select>\r\n  <\/div>\r\n  <div id=\"funding-rate-chart\" style=\"width: 100%; position: relative; flex: 1;\">\r\n    <div id=\"loading-funding-rate\" class=\"loading visible\">Loading...<\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"container-estilo\" id=\"exchanges-funding-chart-container\">\r\n  <div class=\"container-title\">\r\n    <a href=\"https:\/\/bitcoincounterflow.com\/charts\/funding-rate-all-exchanges\" style=\"text-decoration: none; color: inherit;\">\r\n      <span>Exchanges Funding<\/span>\r\n    <\/a>\r\n    <select class=\"chart-period-select\" data-chart-id=\"funding-chart\">\r\n      <option value=\"1d\">1d<\/option>\r\n      <option value=\"3d\">3d<\/option>\r\n      <option value=\"7d\">7d<\/option>\r\n      <option value=\"21d\" selected>21d<\/option>\r\n      <option value=\"30d\">30d<\/option>\r\n      <option value=\"60d\">60d<\/option>\r\n      <option value=\"90d\">90d<\/option>\r\n    <\/select>\r\n  <\/div>\r\n  <div id=\"funding-chart\" style=\"width: 100%; position: relative; flex: 1;\">\r\n    <div id=\"loading-funding\" class=\"loading visible\">Loading...<\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n\r\n\r\n\r\n<!-- C\u00f3digo HTML do gr\u00e1fico de pre\u00e7o do Bitcoin (mantido igual) -->\r\n<div class=\"container-estilo\" id=\"ath-drawdown-chart-container\">\r\n  <div class=\"container-title\">\r\n    <a href=\"https:\/\/bitcoincounterflow.com\/charts\/drawdown-from-ath\" style=\"text-decoration: none; color: inherit;\">\r\n      <span>ATH Drawdown: <span id=\"price-drawdown\">-<\/span><\/span>\r\n    <\/a>\r\n    <span style=\"display: inline-flex; align-items: center; letter-spacing: 1px\">\r\n      <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\" style=\"margin-right: 5px;\">\r\n      BTCUSDT\r\n    <\/span>\r\n    <select class=\"chart-period-select\" data-chart-id=\"bitcoin-price-chart\">\r\n      <option value=\"1d-15m\">1d<\/option>\r\n      <option value=\"3d-15m\">3d<\/option>\r\n      <option value=\"7d-15m\">7d<\/option>\r\n      <option value=\"21d-1h\" selected>21d<\/option>\r\n      <option value=\"30d-1h\">30d<\/option>\r\n      <option value=\"2M-4h\">2M<\/option>\r\n      <option value=\"3M-4h\">3M<\/option>\r\n      <option value=\"6M-4h\">6M<\/option>\r\n      <option value=\"1Y-4h\">1Y<\/option>\r\n      <option value=\"2Y-1d\">2Y<\/option>\r\n    <\/select>\r\n  <\/div>\r\n  <div id=\"bitcoin-price-chart\" style=\"width: 100%; position: relative; flex: 1;\">\r\n    <div id=\"loading-drawdown\" class=\"loading visible\">Loading...<\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n\r\n\r\n\r\n\r\n<div class=\"container-estilo\" id=\"gold-chart-container\">\r\n    <div class=\"container-title\">\r\n        <a href=\"https:\/\/bitcoincounterflow.com\/charts\/bitcoin-vs-paxgold\/\" style=\"text-decoration: none; color: inherit;\">\r\n            <span>Gold<\/span>\r\n        <\/a>\r\n        <span style=\"display: inline-flex; align-items: center; letter-spacing: 1px\">\r\n            <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\" style=\"margin-right: 5px;\">\r\n            PaxGold P.\r\n        <\/span>\r\n        <select class=\"chart-period-select\" data-chart-id=\"gold-chart\">\r\n            <option value=\"1d-15m\">1d<\/option>\r\n            <option value=\"3d-15m\">3d<\/option>\r\n            <option value=\"7d-15m\">7d<\/option>\r\n            <option value=\"21d-15m\">21d<\/option>\r\n            <option value=\"30d-1h\">30d<\/option>\r\n            <option value=\"60d-1d\">60d<\/option>\r\n            <option value=\"90d-1d\">90d<\/option>\r\n            <option value=\"1y-1d\" selected>1y<\/option>\r\n            <option value=\"2y-1w\">2y<\/option>\r\n            <option value=\"all-1w\">All<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"gold-chart\" style=\"width: 100%; position: relative; flex: 1;\">\r\n        <div id=\"loading-gold\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\n\/**\r\n * Calculate and apply dashboard height to Bitcoin Price container\r\n *\/\r\nfunction syncDashboardHeights() {\r\n  const liquidationHeatmap = document.getElementById('liquidation-heatmap-chart-container');\r\n  const bitcoinChartContainer = document.getElementById('bitcoin-chart-container');\r\n  \r\n  if (liquidationHeatmap && bitcoinChartContainer) {\r\n    const height = liquidationHeatmap.offsetHeight;\r\n    bitcoinChartContainer.style.setProperty('--dashboard-height', height + 'px');\r\n  }\r\n}\r\n\r\n\/\/ Sync on load and on resize\r\nwindow.addEventListener('load', syncDashboardHeights);\r\nwindow.addEventListener('resize', syncDashboardHeights);\r\n\/\/ Also sync after a small delay to ensure charts are rendered\r\nsetTimeout(syncDashboardHeights, 500);\r\nsetTimeout(syncDashboardHeights, 1000);\r\n\r\n\/**\r\n * Initialize info icons with tooltips for all chart period selects\r\n * Follows BitcoinCounterFlow minimalist design philosophy\r\n *\/\r\nfunction initializeInfoIcons() {\r\n  const tooltips = {\r\n    'bitcoin-chart': 'Select time periods to analyze Bitcoin price movements. Use shorter periods (1d-3d) for detailed analysis or longer periods (1Y-All) for trend identification.',\r\n    'funding-rate-chart': 'Funding rates indicate market sentiment. Positive rates suggest bullish sentiment, negative rates suggest bearish sentiment. Monitor changes for trend reversals.',\r\n    'funding-chart': 'Compare funding rates across exchanges to identify arbitrage opportunities and gauge institutional positioning across different trading platforms.',\r\n    'bitcoin-price-chart': 'Track the drawdown from all-time highs to assess market recovery potential and identify key support levels for technical analysis.',\r\n    'gold-chart': 'Analyze Bitcoin\\'s correlation with traditional assets like gold. Useful for portfolio diversification and macro-economic trend analysis.'\r\n  };\r\n\r\n  const selects = document.querySelectorAll('.chart-period-select');\r\n  \r\n  selects.forEach(select => {\r\n    const chartId = select.getAttribute('data-chart-id');\r\n    const tooltip = tooltips[chartId];\r\n    \r\n    if (tooltip && !select.parentElement.querySelector('.info-icon-container')) {\r\n      const iconContainer = document.createElement('div');\r\n      iconContainer.className = 'info-icon-container';\r\n      \r\n      \/\/ SVG Icon - Question mark in circle\r\n      iconContainer.innerHTML = `\r\n        <svg class=\"info-icon\" viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#999\">\r\n          <circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle>\r\n          <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"><\/path>\r\n          <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"><\/line>\r\n        <\/svg>\r\n        <div class=\"tooltip\"><span class=\"tooltip-text\">${tooltip}<\/span><\/div>\r\n      `;\r\n      \r\n      \/\/ Append to the select's direct parent and compute absolute position so icon sits next to the select\r\n      const parentForIcon = select.parentElement || select.closest('.container-title') || document.body;\r\n      \/\/ ensure parent has position: relative so absolute children position correctly\r\n      if (getComputedStyle(parentForIcon).position === 'static') {\r\n        parentForIcon.style.position = 'relative';\r\n      }\r\n      parentForIcon.appendChild(iconContainer);\r\n\r\n      \/\/ Position icon absolutely next to the select\r\n      const positionIcon = () => {\r\n        const iconWidth = 20;\r\n        const right = -7; \/\/ Position from the right edge\r\n        const top = select.offsetTop + Math.round((select.offsetHeight - iconWidth) \/ 2);\r\n        iconContainer.style.right = right + 'px';\r\n        iconContainer.style.top = top + 'px';\r\n        iconContainer.style.left = 'auto'; \/\/ Clear left positioning\r\n      };\r\n      positionIcon();\r\n      \/\/ update position on resize\r\n      window.addEventListener('resize', positionIcon);\r\n    }\r\n  });\r\n}\r\n\r\n\/\/ Initialize when DOM is ready\r\nif (document.readyState === 'loading') {\r\n  document.addEventListener('DOMContentLoaded', initializeInfoIcons);\r\n} else {\r\n  initializeInfoIcons();\r\n}\r\n<\/script>\r\n\r\n \t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-150528b elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"150528b\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\r\n\r\n<div class=\"container-estilo\" id=\"open-interest-chart-container\">\r\n  <div class=\"container-title\">\r\n    <a href=\"https:\/\/bitcoincounterflow.com\/charts\/open-interest\" style=\"text-decoration: none; color: inherit;\">\r\n      <span class=\"title-full\">Open Interest:<\/span>\r\n      <span class=\"title-short\">Open I.:<\/span>\r\n      <span id=\"open-interest\">-<\/span>\r\n    <\/a>\r\n    <span style=\"display: inline-flex; align-items: center; letter-spacing: 1px\">\r\n      <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\" style=\"margin-right: 5px;\">\r\n      BTCUSDT\r\n    <\/span>\r\n    <select class=\"chart-period-select\" data-chart-id=\"open-interest-chart\">\r\n      <option value=\"1d-15m\">1d<\/option>\r\n            <option value=\"3d-15m\">3d<\/option>\r\n            <option value=\"7d-15m\">7d<\/option>\r\n            <option value=\"21d-1h\" selected>21d<\/option>\r\n            <option value=\"30d-1h\">30d<\/option>\r\n            <option value=\"60d-4h\">2M<\/option>\r\n            <option value=\"90d-4h\">3M<\/option>\r\n            <option value=\"180d-4h\">6M<\/option>\r\n            <option value=\"1y-4h\">1Y<\/option>\r\n            <option value=\"2y-1d\">2Y<\/option>\r\n    <\/select>\r\n  <\/div>\r\n  <div id=\"open-interest-chart\" style=\"width: 100%; height: 274px;\">\r\n    <div id=\"loading-open-interest\" class=\"loading visible\">Loading...<\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"container-estilo\" id=\"net-shorts-chart-container\">\r\n    <div class=\"container-title\">\r\n        <a href=\"https:\/\/bitcoincounterflow.com\/charts\/net-shorts\" style=\"text-decoration: none; color: inherit;\">\r\n            <span>Net Shorts<\/span>\r\n        <\/a>\r\n        <span style=\"display: inline-flex; align-items: center; letter-spacing: 1px\">\r\n            <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\" style=\"margin-right: 5px;\">\r\n            BTCUSDT\r\n        <\/span>\r\n        <select class=\"chart-period-select\" data-chart-id=\"net-shorts-chart\">\r\n            <option value=\"1d-15m\">1d<\/option>\r\n            <option value=\"3d-15m\">3d<\/option>\r\n            <option value=\"7d-15m\">7d<\/option>\r\n            <option value=\"21d-1h\" selected>21d<\/option>\r\n            <option value=\"30d-1h\">30d<\/option>\r\n            <option value=\"60d-4h\">2M<\/option>\r\n            <option value=\"90d-4h\">3M<\/option>\r\n            <option value=\"180d-4h\">6M<\/option>\r\n            <option value=\"1y-4h\">1Y<\/option>\r\n            <option value=\"2y-1d\">2Y<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"net-shorts-chart\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-net-shorts\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n\r\n\r\n<div class=\"container-estilo\" id=\"net-longs-chart-container\">\r\n    <div class=\"container-title\">\r\n        <a href=\"https:\/\/bitcoincounterflow.com\/charts\/net-longs\/\" style=\"text-decoration: none; color: inherit;\">\r\n            <span>Net Longs<\/span>\r\n        <\/a>\r\n        <span style=\"display: inline-flex; align-items: center; letter-spacing: 1px\">\r\n            <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\" style=\"margin-right: 5px;\">\r\n            BTCUSDT\r\n        <\/span>\r\n        <select class=\"chart-period-select\" data-chart-id=\"net-longs-chart\">\r\n            <option value=\"1d-15m\">1d<\/option>\r\n            <option value=\"3d-15m\">3d<\/option>\r\n            <option value=\"7d-15m\">7d<\/option>\r\n            <option value=\"21d-1h\" selected>21d<\/option>\r\n            <option value=\"30d-1h\">30d<\/option>\r\n            <option value=\"60d-4h\">2M<\/option>\r\n            <option value=\"90d-4h\">3M<\/option>\r\n            <option value=\"180d-4h\">6M<\/option>\r\n            <option value=\"1y-4h\">1Y<\/option>\r\n            <option value=\"2y-1d\">2Y<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"net-longs-chart\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-net-longs\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n\r\n\r\n<div class=\"container-estilo\" id=\"liquidations-chart-container\">\r\n    <div class=\"container-title\">\r\n        <a href=\"https:\/\/bitcoincounterflow.com\/charts\/liquidations\" style=\"text-decoration: none; color: inherit;\">\r\n            <span>Liquidations<\/span>\r\n        <\/a>\r\n        <span style=\"display: inline-flex; align-items: center; letter-spacing: 1px\">\r\n            <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\" style=\"margin-right: 5px;\">\r\n            BTCUSDT\r\n        <\/span>\r\n        <select class=\"chart-period-select\" data-chart-id=\"liquidations-chart\">\r\n            <option value=\"1d-15m\">1d<\/option>\r\n            <option value=\"3d-15m\">3d<\/option>\r\n            <option value=\"7d-15m\">7d<\/option>\r\n            <option value=\"21d-1h\" selected>21d<\/option>\r\n            <option value=\"30d-1h\">30d<\/option>\r\n            <option value=\"60d-1d\">60d<\/option>\r\n            <option value=\"90d-1d\">90d<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"liquidations-chart\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-liquidations\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n\r\n\r\n<div class=\"container-estilo\" >\r\n    <div class=\"container-title\">\r\n        <span><a href=\".\/google-trends\" style=\"color: inherit; text-decoration: none;\">Google Trends<\/a>: <span id=\"google-trends-value\">-<\/span><\/span>\r\n        <img decoding=\"async\" class=\"google-img\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2024\/10\/Google-Trends-logo.png\" style=\"width: 90px; height: 60px; margin-right: 5px; margin-top:3px; margin-left:5px;\">\r\n        <select class=\"chart-period-select\" data-chart-id=\"trends-bitcoin-chart\">\r\n            <option value=\"1d\">1d<\/option>\r\n            <option value=\"3d\">3d<\/option>\r\n            <option value=\"7d\">7d<\/option>\r\n            <option value=\"21d\">21d<\/option>\r\n            <option value=\"30d\">30d<\/option>\r\n            <option value=\"60d\">60d<\/option>\r\n            <option value=\"90d\">90d<\/option>\r\n            <option value=\"180d\">180d<\/option>\r\n            <option value=\"1y\" selected>1y<\/option>\r\n            <option value=\"2y\">2y<\/option>\r\n            <option value=\"all\">All<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"trends-bitcoin-chart\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n\r\n\r\n<div class=\"container-estilo\" id=\"btc-dominance-chart-container\">\r\n    <div class=\"container-title\">\r\n        <span><a href=\"https:\/\/bitcoincounterflow.com\/charts\/bitcoin-dominance\">Dominance<\/a><\/span>\r\n        <select class=\"chart-period-select\" data-chart-id=\"btc-dominance-chart\">\r\n            <option value=\"1d-15m\">1d<\/option>\r\n            <option value=\"3d-15m\">3d<\/option>\r\n            <option value=\"7d-15m\">7d<\/option>\r\n            <option value=\"21d-15m\">21d<\/option>\r\n            <option value=\"30d-1h\">30d<\/option>\r\n            <option value=\"60d-1d\">60d<\/option>\r\n            <option value=\"90d-1d\">90d<\/option>\r\n            <option value=\"1y-1d\" selected>1y<\/option>\r\n            <option value=\"3y-1w\">2y<\/option>\r\n            <option value=\"5y-1w\">All<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"btc-dominance-chart\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-dominance\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n<div class=\"container-estilo\" id=\"sp500-chart-container\">\r\n    <div class=\"container-title\">\r\n        <a href=\"https:\/\/bitcoincounterflow.com\/charts\/bitcoin-vs-sp500\" style=\"text-decoration: none; color: inherit;\">\r\n            <span>S&P500<\/span>\r\n        <\/a>\r\n        <select class=\"chart-period-select\" data-chart-id=\"sp500-chart\">\r\n            <option value=\"1d\">1d<\/option>\r\n            <option value=\"3d\">3d<\/option>\r\n            <option value=\"7d\">7d<\/option>\r\n            <option value=\"21d\" selected>21d<\/option>\r\n            <option value=\"30d\">30d<\/option>\r\n            <option value=\"60d\">60d<\/option>\r\n            <option value=\"90d\">90d<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"sp500-chart\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-sp500\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div> \r\n\r\n<script>\r\nfunction initializeInfoIcons() {\r\n  const tooltips = {\r\n    'open-interest-chart': 'Open Interest represents the total number of open contracts for Bitcoin futures. Higher values indicate more market participation. Rising interest signals market heating, while sharp declines may precede reversals.',\r\n    'net-shorts-chart': 'Net Shorts represents the total short positions in Bitcoin. Higher values indicate more traders are betting on price decreases. Track this to understand bearish market sentiment and potential reversal signals.',\r\n    'net-longs-chart': 'Net Longs shows the total long positions in Bitcoin. Rising values indicate more traders expect price increases. Use this to gauge bullish sentiment and identify potential market tops when sentiment gets too extreme.',\r\n    'liquidations-chart': 'Liquidations measure forced position closures when traders\\' margin falls below maintenance levels. Spikes indicate high leverage and panic selling. Monitor for volatile price movements and potential reversal opportunities.',\r\n    'trends-bitcoin-chart': 'Google Trends reflects public search interest in Bitcoin. Increasing trends suggest growing retail participation and mainstream attention. Use as a contrarian indicator\u2014extreme interest can signal market tops.',\r\n    'btc-dominance-chart': 'Bitcoin Dominance measures Bitcoin\\'s market cap as a percentage of total crypto market cap. Rising dominance indicates investors favor Bitcoin. Falling dominance suggests altcoin season and risk-on sentiment.',\r\n    'sp500-chart': 'Bitcoin vs S&P500 compares Bitcoin\\'s performance with the U.S. stock market. This relationship reveals market correlation and Bitcoin\\'s status as a risk asset or hedge. Divergence indicates unique Bitcoin dynamics.'\r\n  };\r\n\r\n  const selects = document.querySelectorAll('.chart-period-select');\r\n  \r\n  selects.forEach(select => {\r\n    const chartId = select.getAttribute('data-chart-id');\r\n    const tooltip = tooltips[chartId];\r\n    \r\n    if (tooltip && !select.parentElement.querySelector('.info-icon-container')) {\r\n      const iconContainer = document.createElement('div');\r\n      iconContainer.className = 'info-icon-container';\r\n      \r\n      \/\/ SVG Icon - Question mark in circle\r\n      iconContainer.innerHTML = `\r\n       <svg class=\"info-icon\" viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#999\">\r\n          <circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle>\r\n          <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"><\/path>\r\n          <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"><\/line>\r\n        <\/svg>\r\n        <div class=\"tooltip\"><span class=\"tooltip-text\">${tooltip}<\/span><\/div>\r\n      `;\r\n      \r\n      \/\/ Append to the select's direct parent and compute absolute position so icon sits next to the select\r\n      const parentForIcon = select.parentElement || select.closest('.container-title') || document.body;\r\n      \/\/ ensure parent has position: relative so absolute children position correctly\r\n      if (getComputedStyle(parentForIcon).position === 'static') {\r\n        parentForIcon.style.position = 'relative';\r\n      }\r\n      parentForIcon.appendChild(iconContainer);\r\n\r\n      \/\/ Position icon absolutely next to the select\r\n      const positionIcon = () => {\r\n        const iconWidth = 20;\r\n        const right = -7; \/\/ Position from the right edge\r\n        const top = select.offsetTop + Math.round((select.offsetHeight - iconWidth) \/ 2);\r\n        iconContainer.style.right = right + 'px';\r\n        iconContainer.style.top = top + 'px';\r\n        iconContainer.style.left = 'auto'; \/\/ Clear left positioning\r\n      };\r\n      positionIcon();\r\n      \/\/ update position on resize\r\n      window.addEventListener('resize', positionIcon);\r\n    }\r\n  });\r\n}\r\n\r\n\/\/ Initialize when DOM is ready\r\nif (document.readyState === 'loading') {\r\n  document.addEventListener('DOMContentLoaded', initializeInfoIcons);\r\n} else {\r\n  initializeInfoIcons();\r\n}\r\n<\/script>\r\n \r\n\r\n \t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b625961 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"b625961\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"container-estilo\" id=\"long-short-ratio-chart-container\">\r\n    <div class=\"container-title\">\r\n        <a href=\"https:\/\/bitcoincounterflow.com\/charts\/long-short-ratio\" style=\"text-decoration: none; color: inherit;\">\r\n            <span>Long\/Short: <span id=\"global-long-short-ratio\">-<\/span><\/span>\r\n        <\/a>\r\n        <span style=\"display: inline-flex; align-items: center;letter-spacing: 1px\">\r\n            <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\" style=\"margin-right: 5px;\">\r\n            BTCUSDT\r\n        <\/span>\r\n        <select class=\"chart-period-select\" data-chart-id=\"long-short-ratio-chart\">\r\n            <option value=\"1d-15m\">1d<\/option>\r\n<option value=\"3d-15m\">3d<\/option>\r\n<option value=\"7d-15m\">7d<\/option>\r\n<option value=\"21d-1h\" selected>21d<\/option>\r\n<option value=\"30d-1h\">30d<\/option>\r\n<option value=\"60d-4h\">2M<\/option>\r\n<option value=\"90d-4h\">3M<\/option>\r\n<option value=\"180d-4h\">6M<\/option>\r\n<option value=\"1y-4h\">1Y<\/option>\r\n<option value=\"2y-1d\">2Y<\/option>\r\n            \r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"long-short-ratio-chart\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-long-short-ratio\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n<div class=\"container-estilo\" id=\"volatility-chart-container\">\r\n    <div class=\"container-title\">\r\n        <a href=\"https:\/\/bitcoincounterflow.com\/charts\/bitcoin-volatility\/\" style=\"text-decoration: none; color: inherit;\">\r\n            <span>Volatility<\/span>\r\n        <\/a>\r\n        <span style=\"display: inline-flex; align-items: center; letter-spacing: 1px\">\r\n            <img decoding=\"async\" src=\"https:\/\/bitcoincounterflow.com\/wp-content\/uploads\/2025\/07\/Binance-Square-Logo.png\" alt=\"Binance Logo\" style=\"margin-right: 5px;\">\r\n            BTCUSDT\r\n        <\/span>\r\n        <select class=\"chart-period-select\" data-chart-id=\"volatility-chart\">\r\n            <option value=\"1d-15m\">1d<\/option>\r\n            <option value=\"3d-15m\">3d<\/option>\r\n            <option value=\"7d-15m\">7d<\/option>\r\n            <option value=\"21d-15m\">21d<\/option>\r\n            <option value=\"30d-1h\">30d<\/option>\r\n            <option value=\"60d-1d\">60d<\/option>\r\n            <option value=\"90d-1d\">90d<\/option>\r\n            <option value=\"1y-1d\" selected>1y<\/option>\r\n            <option value=\"2y-1w\">2y<\/option>\r\n            <option value=\"all-1w\">All<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"volatility-chart\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-volatility\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<div class=\"container-estilo\" id=\"chartdiv-container\">\r\n    <div class=\"container-title\">\r\n        <a href=\"https:\/\/bitcoincounterflow.com\/charts\/fear-greed-index\" style=\"text-decoration: none; color: inherit;\">\r\n            <span>Fear & Greed Index<\/span>\r\n        <\/a>\r\n        <select class=\"chart-period-select\" data-chart-id=\"chartdiv\">\r\n            <option value=\"1d\">1d<\/option>\r\n            <option value=\"3d\">3d<\/option>\r\n            <option value=\"7d\">7d<\/option>\r\n            <option value=\"21d\" selected>21d<\/option>\r\n            <option value=\"30d\">30d<\/option>\r\n            <option value=\"60d\">60d<\/option>\r\n            <option value=\"90d\">90d<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"chartdiv\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-fgi\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n<div class=\"container-estilo\" id=\"etf-container-container\">\r\n    <div class=\"container-title\">\r\n        <a href=\"https:\/\/bitcoincounterflow.com\/etf-tracker\" style=\"text-decoration: none; color: inherit;\">\r\n            <span>Spot ETF Net Inflow<\/span>\r\n        <\/a>\r\n        <select class=\"chart-period-select\" data-chart-id=\"etf-container\">\r\n            <option value=\"1d\">1d<\/option>\r\n            <option value=\"3d\">3d<\/option>\r\n            <option value=\"7d\">7d<\/option>\r\n            <option value=\"21d\" selected>21d<\/option>\r\n            <option value=\"30d\">30d<\/option>\r\n            <option value=\"60d\">60d<\/option>\r\n            <option value=\"90d\">90d<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"etf-container\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-etf\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<div class=\"container-estilo\">\r\n  <div class=\"container-title\" >\r\n    <span><a href=\"https:\/\/bitcoincounterflow.com\/charts\/from-low-to-low-comparison\">Cycles Compare<\/a><\/span>\r\n    <span style=\"display: inline-flex; align-items: center; letter-spacing: 1px\">\r\n      \r\n    <\/span>\r\n    <span style=\"margin-left: 5px;\">2015-Now<\/span>\r\n  <\/div>\r\n  <div id=\"bitcoin-performance-chart\" style=\"width: 100%; height: 274px;\">\r\n    <div id=\"loading-performance\" class=\"loading visible\">Loading...<\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n\r\n<div class=\"container-estilo\" id=\"m2-global-chart-container\">\r\n    <div class=\"container-title\" >\r\n        <span><a href=\"https:\/\/bitcoincounterflow.com\/charts\/m2-global\">M2 Global<\/a><\/span>\r\n        \r\n        <select class=\"chart-period-select\" data-chart-id=\"m2-global-chart\">\r\n            <option value=\"1d-15m\">1d<\/option>\r\n            <option value=\"3d-15m\">3d<\/option>\r\n            <option value=\"7d-15m\">7d<\/option>\r\n            <option value=\"21d-15m\" >21d<\/option>\r\n            <option value=\"30d-1h\">30d<\/option>\r\n            <option value=\"60d-1d\">60d<\/option>\r\n            <option value=\"90d-1d\">90d<\/option>\r\n            <option value=\"180d-1d\">180d<\/option>\r\n            <option value=\"1y-1d\">1y<\/option>\r\n            <option value=\"2y-1d\" selected>2y<\/option>\r\n            <option value=\"4y-1d\">4y<\/option>\r\n            <option value=\"5y-1d\">5y<\/option>\r\n            <option value=\"7y-1d\">7y<\/option>\r\n            <option value=\"all\">All<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"m2-global-chart\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-m2-global\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<div class=\"container-estilo\" id=\"mstr-chart-container\">\r\n    <div class=\"container-title\">\r\n        <a href=\"https:\/\/bitcoincounterflow.com\/strategy-tracker-and-charts\/\" style=\"text-decoration: none; color: inherit;\">\r\n            <span>MSTR<\/span>\r\n        <\/a>\r\n        <select class=\"chart-period-select\" data-chart-id=\"mstr-chart\">\r\n            <option value=\"1d\">1d<\/option>\r\n            <option value=\"3d\">3d<\/option>\r\n            <option value=\"7d\">7d<\/option>\r\n            <option value=\"21d\" selected>21d<\/option>\r\n            <option value=\"30d\">30d<\/option>\r\n            <option value=\"60d\">60d<\/option>\r\n            <option value=\"90d\">90d<\/option>\r\n        <\/select>\r\n    <\/div>\r\n    <div id=\"mstr-chart\" style=\"width: 100%; height: 274px;\">\r\n        <div id=\"loading-mstr\" class=\"loading visible\">Loading...<\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<script>\r\nfunction initializeInfoIcons() {\r\n  const tooltips = {\r\n    'long-short-ratio-chart': 'The Long\/Short Ratio shows the balance between bullish and bearish futures positions. When the price is rising and the long\/short ratio also rises, the risk of a top and a long squeeze increases. When the price is falling and the ratio also falls, the risk of a short squeeze becomes higher. Values above 1 mean more longs; values below 1 mean more shorts.',\r\n    'volatility-chart': 'Bitcoin volatility shows how much the price moves. High volatility often means the trend is getting tired and a lateralization may happen. Low volatility usually happens during accumulation or distribution before big moves.',\r\n    'chartdiv': 'Fear & Greed Index combines market data to gauge investor sentiment. Extreme fear can signal buying opportunities, while extreme greed may indicate potential reversals.',\r\n    'etf-container': 'Spot ETF Net Inflow tracks how much money is entering or leaving Bitcoin ETFs. ETF investors also tend to follow herd behavior, often buying near tops and selling near bottoms. Still, record inflows or outflows are important signals to watch, as they can show strong shifts in market sentiment.',\r\n    'bitcoin-performance-chart': 'Cycles Compare shows Bitcoin performance across different market cycles since 2015. Useful for identifying patterns and understanding where we are in the current cycle.',\r\n    'm2-global-chart': 'M2 Global represents the total money supply in major economies. Bitcoin often correlates with money supply growth, serving as a hedge against monetary inflation.',\r\n    'mstr-chart': 'MSTR tracks the performance of the biggest corporate BTC holder. When its price moves too far from Bitcoin, either above or below, it often signals euphoria or fear. These gaps rarely last and can reveal when sentiment is overheated or fearful.'\r\n  };\r\n\r\n  const selects = document.querySelectorAll('.chart-period-select');\r\n  \r\n  selects.forEach(select => {\r\n    const chartId = select.getAttribute('data-chart-id');\r\n    const tooltip = tooltips[chartId];\r\n    \r\n    if (tooltip && !select.parentElement.querySelector('.info-icon-container')) {\r\n      const iconContainer = document.createElement('div');\r\n      iconContainer.className = 'info-icon-container';\r\n      \r\n      \/\/ SVG Icon - Question mark in circle\r\n      iconContainer.innerHTML = `\r\n       <svg class=\"info-icon\" viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" color=\"#999\">\r\n          <circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle>\r\n          <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\"><\/path>\r\n          <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"><\/line>\r\n        <\/svg>\r\n        <div class=\"tooltip\"><span class=\"tooltip-text\">${tooltip}<\/span><\/div>\r\n      `;\r\n      \r\n      \/\/ Append to the select's direct parent and compute absolute position so icon sits next to the select\r\n      const parentForIcon = select.parentElement || select.closest('.container-title') || document.body;\r\n      \/\/ ensure parent has position: relative so absolute children position correctly\r\n      if (getComputedStyle(parentForIcon).position === 'static') {\r\n        parentForIcon.style.position = 'relative';\r\n      }\r\n      parentForIcon.appendChild(iconContainer);\r\n\r\n      \/\/ Position icon absolutely next to the select\r\n      const positionIcon = () => {\r\n        const iconWidth = 20;\r\n        const right = -5; \/\/ Position from the right edge\r\n        const top = select.offsetTop + Math.round((select.offsetHeight - iconWidth) \/ 2);\r\n        iconContainer.style.right = right + 'px';\r\n        iconContainer.style.top = top + 'px';\r\n        iconContainer.style.left = 'auto'; \/\/ Clear left positioning\r\n      };\r\n      positionIcon();\r\n      \/\/ update position on resize\r\n      window.addEventListener('resize', positionIcon);\r\n    }\r\n  });\r\n}\r\n\r\n\/\/ Initialize when DOM is ready\r\nif (document.readyState === 'loading') {\r\n  document.addEventListener('DOMContentLoaded', initializeInfoIcons);\r\n} else {\r\n  initializeInfoIcons();\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\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5ad6d7e elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"5ad6d7e\" 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-905dbae elementor-widget elementor-widget-html\" data-id=\"905dbae\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n    const chartContainer = document.getElementById('container2');\r\n    const loadingElement = document.getElementById('loading-bitcoin');\r\n    const periodSelect = document.querySelector('.chart-period-select[data-chart-id=\"bitcoin-chart\"]');\r\n    let currentRange = '3d-15m';\r\n    let chartInstance = null;\r\n    let ws = null;\r\n\r\n    const periodSettingsMap = {\r\n        '1d-5m': { days: 1, interval: '5m', limit: 288, aggregate: 5 },\r\n        '3d-15m': { days: 3, interval: '15m', limit: 864, aggregate: 1 },\r\n        '7d-15m': { days: 7, interval: '15m', limit: 672, aggregate: 1 },\r\n        '30d-1h': { days: 30, interval: '1h', limit: 720, aggregate: 1 },\r\n        '90d-4h': { days: 90, interval: '4h', limit: 540, aggregate: 1 },\r\n        'ytd-1d': { days: Math.ceil((Date.now() - new Date(new Date().getFullYear(), 0, 1)) \/ (1000 * 60 * 60 * 24)), interval: '1d', limit: null, aggregate: 1 },\r\n        '1y-1d': { days: 365, interval: '1d', limit: 365, aggregate: 1 },\r\n        '5y-1w': { days: 1825, interval: '1w', limit: 1825, aggregate: 1 },\r\n        'all': { days: Infinity, interval: '1d', limit: null, aggregate: 1 }\r\n    };\r\n\r\n    function connectWebSocket() {\r\n        ws = new WebSocket('wss:\/\/fstream.binance.com\/ws\/btcusdt@ticker');\r\n        ws.onopen = () => console.log('Connected to Binance WebSocket for BTCUSDT perpetual futures');\r\n        ws.onmessage = (event) => {\r\n            const data = JSON.parse(event.data);\r\n            if (data && data.c && currentRange !== 'all' && chartInstance) {\r\n                const price = parseFloat(data.c);\r\n                const timestamp = Date.now();\r\n                const series = chartInstance.series[0];\r\n                series.addPoint([timestamp, price], true, series.data.length > 1000);\r\n                updateTooltipPosition(chartInstance, price);\r\n            }\r\n        };\r\n        ws.onclose = () => {\r\n            console.log('WebSocket closed, reconnecting...');\r\n            setTimeout(connectWebSocket, 5000);\r\n        };\r\n        ws.onerror = (error) => console.error('WebSocket error:', error);\r\n        setInterval(() => {\r\n            if (ws && ws.readyState === WebSocket.OPEN) {\r\n                ws.send(JSON.stringify({ pong: Date.now() }));\r\n            }\r\n        }, 180000);\r\n    }\r\n\r\n    async function fetchBitcoinChartData() {\r\n        const settings = periodSettingsMap[currentRange] || periodSettingsMap['3d-15m'];\r\n        let url;\r\n\r\n        if (currentRange === 'all') {\r\n            url = `https:\/\/api.bitcoincounterflow.com\/api\/dca-calculator`;\r\n            const response = await fetch(url);\r\n            const data = await response.json();\r\n            return data.map(point => ({\r\n                x: new Date(point.timestamp).getTime(),\r\n                y: parseFloat(point.btcPrice) || 0\r\n            }));\r\n        } else {\r\n            let limit = settings.limit;\r\n            let interval = settings.interval;\r\n            let since = settings.days === Infinity ? 0 : Math.floor(Date.now() \/ 1000) - (settings.days * 24 * 60 * 60);\r\n\r\n            if (currentRange === 'ytd-1d') {\r\n                const now = new Date();\r\n                const startOfYear = Math.floor(new Date(now.getFullYear(), 0, 1).getTime() \/ 1000);\r\n                limit = Math.ceil((Date.now() \/ 1000 - startOfYear) \/ (60 * 60 * 24));\r\n                since = startOfYear;\r\n            }\r\n\r\n            const pair = 'XXBTZUSD';\r\n            const krakenInterval = getKrakenInterval(interval);\r\n            url = `https:\/\/api.kraken.com\/0\/public\/OHLC?pair=${pair}&interval=${krakenInterval}&since=${since}`;\r\n            const response = await fetch(url);\r\n            const data = await response.json();\r\n\r\n            if (data.result && data.result[pair]) {\r\n                return data.result[pair].map(point => ({\r\n                    x: point[0] * 1000,\r\n                    y: parseFloat(point[4]) || 0\r\n                }));\r\n            } else {\r\n                throw new Error('Nenhum dado dispon\u00edvel da exchange.');\r\n            }\r\n        }\r\n    }\r\n\r\n    function getKrakenInterval(interval) {\r\n        const intervals = {\r\n            '1m': 1, '5m': 5, '15m': 15, '30m': 30, '1h': 60, '4h': 240, '1d': 1440, '1w': 10080\r\n        };\r\n        return intervals[interval] || 1;\r\n    }\r\n\r\n    function updateTooltipPosition(chart, lastPrice) {\r\n        const series = chart.series[0];\r\n        const lastPoint = series.points[series.points.length - 1];\r\n        const price = lastPrice || lastPoint.y;\r\n        const lastPriceFormatted = price.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 0 });\r\n        const color = price > series.points[0].y ? '#d3d3d3' : '#4a4a4a';\r\n\r\n        if (chart.tooltipGroup) chart.tooltipGroup.destroy();\r\n        chart.tooltipGroup = chart.renderer.g().add().attr({ zIndex: 10000 });\r\n\r\n        const tooltip = chart.renderer.label(\r\n            `$ ${lastPriceFormatted}`,\r\n            null,\r\n            null,\r\n            'rect'\r\n        ).attr({\r\n            fill: color,\r\n            stroke: 'silver',\r\n            'stroke-width': 0,\r\n            padding: 1.5,\r\n            zIndex: 10001\r\n        }).css({\r\n            color: price > 0 ? '#000' : '#FFF',\r\n            textAlign: 'center',\r\n            fontSize: '14px',\r\n            fontWeight: '500',\r\n            opacity: 1\r\n        }).add(chart.tooltipGroup);\r\n\r\n        const plotHeight = chart.plotHeight;\r\n        const plotWidth = chart.plotWidth;\r\n        const yPos = lastPoint.plotY + chart.plotTop;\r\n        const legendWidth = chart.legend.width || 140;\r\n        const xPos = chart.plotLeft + plotWidth + 10;\r\n\r\n        const tooltipWidth = Math.min(legendWidth - 20, chart.plotWidth - 0);\r\n        const tooltipHeight = tooltip.getBBox().height;\r\n        const adjustedYPos = Math.max(\r\n            Math.min(yPos - tooltipHeight \/ 2, chart.plotTop + plotHeight - tooltipHeight),\r\n            chart.plotTop\r\n        );\r\n\r\n        tooltip.attr({ width: tooltipWidth }).translate(xPos, adjustedYPos);\r\n        chart.renderer.path([\r\n            'M', xPos - 10, adjustedYPos + tooltipHeight \/ 2,\r\n            'L', xPos, adjustedYPos + tooltipHeight \/ 2 - 10,\r\n            'L', xPos, adjustedYPos + tooltipHeight \/ 2 + 10,\r\n            'Z'\r\n        ]).attr({\r\n            fill: color,\r\n            'stroke-width': 0,\r\n            zIndex: 10001\r\n        }).add(chart.tooltipGroup);\r\n\r\n        tooltip.text.attr({ dy: -1 });\r\n    }\r\n\r\n    async function renderChart(period = currentRange) {\r\n        try {\r\n            loadingElement.classList.add('visible');\r\n            currentRange = period;\r\n            periodSelect.value = period;\r\n            const bitcoinData = await fetchBitcoinChartData();\r\n            const initialValue = bitcoinData[0].y;\r\n            const currencySymbol = '$';\r\n\r\n            if (chartInstance) chartInstance.destroy();\r\n            chartInstance = Highcharts.chart('container2', {\r\n                chart: {\r\n                    type: 'area',\r\n                    backgroundColor: '#000000',\r\n                    spacingTop: 60,\r\n                    events: {\r\n                        load: function () { updateTooltipPosition(this); loadingElement.classList.remove('visible'); },\r\n                        redraw: function () { updateTooltipPosition(this); loadingElement.classList.remove('visible'); }\r\n                    }\r\n                },\r\n                title: { text: '', style: { color: '#FFFFFF' } },\r\n                xAxis: {\r\n                    type: 'datetime',\r\n                    labels: {\r\n                        style: { color: '#FFFFFF' },\r\n                        formatter: function () {\r\n                            const date = new Date(this.value);\r\n                            const localDate = new Date(date.getTime() - (date.getTimezoneOffset() * 60000));\r\n                            const currentYear = localDate.getFullYear();\r\n                            const currentMonth = localDate.getMonth();\r\n                            const currentDate = localDate.getDate();\r\n                            const isEndOfMonth = (new Date(currentYear, currentMonth + 1, 0).getDate() === currentDate);\r\n                            const isEndOfYear = (localDate.getMonth() === 11 && currentDate === 31);\r\n\r\n                            if (currentRange === '30d-1h') {\r\n                                return Highcharts.dateFormat('%e %b', localDate);\r\n                            } else if (currentRange === '90d-4h') {\r\n                                return isEndOfMonth ? Highcharts.dateFormat('%e %b', localDate) : Highcharts.dateFormat('%e', localDate);\r\n                            } else if (currentRange === 'ytd-1d' || currentRange === '1y-1d') {\r\n                                return Highcharts.dateFormat('%B', localDate);\r\n                            } else if (currentRange === '5y-1w' || currentRange === 'all') {\r\n                                return isEndOfYear ? Highcharts.dateFormat('%Y', localDate) : Highcharts.dateFormat('%Y', localDate);\r\n                            } else {\r\n                                return Highcharts.dateFormat('%H:%M', localDate);\r\n                            }\r\n                        }\r\n                    },\r\n                    title: { text: '', style: { color: '#FFFFFF' } },\r\n                    crosshair: { color: '#555555', width: 1, dashStyle: 'shortdot' }\r\n                },\r\n                yAxis: {\r\n                    title: { text: '', style: { color: '#FFFFFF' } },\r\n                    labels: {\r\n                        style: { color: '#FFFFFF' },\r\n                        formatter: function () { return `${currencySymbol} ${Highcharts.numberFormat(this.value, 0, '.', ',')}`; }\r\n                    },\r\n                    gridLineColor: 'transparent',\r\n                    opposite: true,\r\n                    min: currentRange === 'all' ? 0 : null,\r\n                    plotLines: [{ value: initialValue, color: '#111', dashStyle: 'shortdot', width: 1 }]\r\n                },\r\n                series: [{\r\n                    name: 'BTC\/USDT',\r\n                    data: bitcoinData,\r\n                    marker: { enabled: false, fillColor: 'transparent' },\r\n                    states: { hover: { lineWidth: 2 } },\r\n                    zones: [{\r\n                        value: initialValue,\r\n                        color: '#4a4a4a',\r\n                        fillColor: { linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, stops: [[0, 'rgba(74, 74, 74, 0.0)'], [0.1, 'rgba(74, 74, 74, 0.015)'], [0.2, 'rgba(74, 74, 74, 0.03)'], [0.3, 'rgba(74, 74, 74, 0.045)'], [0.4, 'rgba(74, 74, 74, 0.06)'], [0.5, 'rgba(74, 74, 74, 0.075)'], [0.6, 'rgba(74, 74, 74, 0.09)'], [0.7, 'rgba(74, 74, 74, 0.105)'], [0.8, 'rgba(74, 74, 74, 0.12)'], [0.9, 'rgba(74, 74, 74, 0.135)'], [1, 'rgba(74, 74, 74, 0.15)']] }\r\n                    }, {\r\n                        color: '#d3d3d3',\r\n                        fillColor: { linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, stops: [[0, 'rgba(211, 211, 211, 0.15)'], [0.1, 'rgba(211, 211, 211, 0.135)'], [0.2, 'rgba(211, 211, 211, 0.12)'], [0.3, 'rgba(211, 211, 211, 0.105)'], [0.4, 'rgba(211, 211, 211, 0.09)'], [0.5, 'rgba(211, 211, 211, 0.075)'], [0.6, 'rgba(211, 211, 211, 0.06)'], [0.7, 'rgba(211, 211, 211, 0.045)'], [0.8, 'rgba(211, 211, 211, 0.03)'], [0.9, 'rgba(211, 211, 211, 0.015)'], [1, 'rgba(211, 211, 211, 0.0)']] }\r\n                    }],\r\n                    threshold: initialValue,\r\n                    showInLegend: false\r\n                }],\r\n                tooltip: {\r\n                    useHTML: true,\r\n                    backgroundColor: 'transparent',\r\n                    borderWidth: 0,\r\n                    shadow: false,\r\n                    style: { zIndex: 9999 },\r\n                    formatter: function () {\r\n                        const date = new Date(this.x);\r\n                        const localDate = new Date(date.getTime() - (date.getTimezoneOffset() * 60000));\r\n                        return `\r\n                            <div style=\"background-color: rgba(0, 0, 0, 0.95); border: 1px solid #111; border-radius: 5px; padding: 10px; color: #FFFFFF; font-size: 14px; z-index: 9999;\">\r\n                                <b style=\"font-size: 12px;\">${Highcharts.dateFormat('%b %e, %Y %H:%M:%S', localDate)}<\/b><br>\r\n                                <span>Price: ${currencySymbol} ${Highcharts.numberFormat(this.y, 0, '.', ',')}<\/span>\r\n                            <\/div>`;\r\n                    },\r\n                    followPointer: true\r\n                },\r\n                credits: { enabled: false },\r\n                exporting: { enabled: false }\r\n            });\r\n        } catch (error) {\r\n            console.error('Error rendering Bitcoin chart:', error.message);\r\n            chartContainer.innerHTML = `<div style=\"color: #ff6f61; text-align: center; padding: 20px;\">Unable to load chart data: ${error.message}. Please try again later.<\/div>`;\r\n            loadingElement.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n\r\n    periodSelect.addEventListener('change', async (event) => {\r\n        currentRange = event.target.value;\r\n        localStorage.setItem('bitcoinChartPeriod', currentRange);\r\n        if (ws && currentRange === 'all') {\r\n            ws.close();\r\n            ws = null;\r\n        } else if (!ws && currentRange !== 'all') {\r\n            connectWebSocket();\r\n        }\r\n        await renderChart();\r\n    });\r\n\r\n    const initialPeriod = localStorage.getItem('bitcoinChartPeriod') || '3d-15m';\r\n    periodSelect.value = initialPeriod;\r\n    currentRange = initialPeriod;\r\n    if (currentRange !== 'all') {\r\n        connectWebSocket();\r\n    }\r\n    await renderChart();\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0003e36 elementor-widget elementor-widget-html\" data-id=\"0003e36\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\r\n\r\n<script>\r\nconst periodConfigs={'12h':{interval:'1m',limit:720,rangeStep:63},'24h':{interval:'3m',limit:480,rangeStep:75},'48h':{interval:'5m',limit:576,rangeStep:100},'3day':{interval:'5m',limit:864,rangeStep:125},'1week':{interval:'15m',limit:672,rangeStep:125},'2week':{interval:'30m',limit:672,rangeStep:150},'1month':{interval:'1h',limit:720,rangeStep:253},'2month':{interval:'2h',limit:720,rangeStep:253},'3month':{interval:'4h',limit:540,rangeStep:233},'6month':{interval:'8h',limit:540,rangeStep:250},'1year':{interval:'12h',limit:600,rangeStep:350}};function getAdjustedPeriodConfigs(){const isMobile=window.innerWidth<=768;if(!isMobile)return periodConfigs;return{'12h':{interval:'1m',limit:720,rangeStep:50},'24h':{interval:'3m',limit:480,rangeStep:75},'48h':{interval:'5m',limit:576,rangeStep:100},'3day':{interval:'5m',limit:864,rangeStep:100},'1week':{interval:'15m',limit:672,rangeStep:150},'2week':{interval:'1h',limit:336,rangeStep:200},'1month':{interval:'2h',limit:360,rangeStep:100},'2month':{interval:'4h',limit:360,rangeStep:125},'3month':{interval:'12h',limit:180,rangeStep:200},'6month':{interval:'1d',limit:180,rangeStep:250},'1year':{interval:'1d',limit:365,rangeStep:350}}}\r\nconst BINANCE_URL_BASE='https:\/\/fapi.binance.com\/fapi\/v1\/klines';async function getUserCountry(){const cachedCountry=localStorage.getItem('userCountry');if(cachedCountry)return cachedCountry;try{const response=await fetch('https:\/\/freegeoip.app\/json\/');const data=await response.json();const country=data.country_code||'US';localStorage.setItem('userCountry',country);return country}catch(error){console.error('Erro ao detectar pa\u00eds do usu\u00e1rio:',error);localStorage.setItem('userCountry','US');return'US'}}\r\nasync function getBitcoinData(period){const config=getAdjustedPeriodConfigs()[period];if(!config){console.error(`Per\u00edodo inv\u00e1lido: ${period}`);return[]}\r\nconst query=`symbol=BTCUSDT&interval=${config.interval}&limit=${config.limit}`;let finalURL=`${BINANCE_URL_BASE}?${query}`;const country=await getUserCountry();const isBlockedCountry=['US'];if(isBlockedCountry.includes(country)){finalURL=`https:\/\/proxy.bitcoincounterflow.com\/binance-proxy?${query}`}\r\ntry{console.log('Fetching data from:',finalURL);const response=await fetch(finalURL);console.log('Response status:',response.status,response.statusText);const contentType=response.headers.get('content-type');if(!response.ok||!contentType.includes('application\/json')){const errorText=await response.text();throw new Error(`Erro na resposta da API: ${errorText}`)}\r\nreturn await response.json()}catch(error){console.error('Erro ao buscar dados do Bitcoin:',error,'URL:',finalURL);return[]}}\r\nfunction processData(data,period){const rangeStep=getAdjustedPeriodConfigs()[period].rangeStep;let priceRanges=new Map();let heatmapData=[];let candlestickData=[];let maxPrice=0,minPrice=Infinity;data.forEach(candle=>{const high=parseFloat(candle[2]);const low=parseFloat(candle[3]);if(high>maxPrice)maxPrice=high;if(low<minPrice)minPrice=low});const minRange=Math.floor(minPrice*0.975\/rangeStep)*rangeStep;const maxRange=Math.ceil(maxPrice*1.025\/rangeStep)*rangeStep;for(let i=minRange;i<=maxRange;i+=rangeStep){priceRanges.set(i,0)}\r\nconst 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}];function processBatch(startIndex,endIndex,callback){for(let index=startIndex;index<endIndex&&index<data.length;index++){const candle=data[index];const open=parseFloat(candle[1]);const high=parseFloat(candle[2]);const low=parseFloat(candle[3]);const close=parseFloat(candle[4]);const volume=parseFloat(candle[5]);const time=candle[0];const averagePrice=(open+close)\/2;const volumeInDollars=volume*averagePrice;const leverageProportion=0.003333;const liquidationProportion=0.075;const volumeWeight=3;priceRanges.forEach((currentVolume,range)=>{if(range>=Math.floor(low\/rangeStep)*rangeStep&&range<=Math.floor(high\/rangeStep)*rangeStep){priceRanges.set(range,0)}});leverageLevels.forEach(level=>{const liquidationValue=volumeInDollars*volumeWeight*leverageProportion*level.leverage*liquidationProportion*level.weight;const longLiquidationPrice=close*(1-level.liquidationThreshold);const shortLiquidationPrice=close*(1+level.liquidationThreshold);const longLiquidationRange=Math.round(longLiquidationPrice\/rangeStep)*rangeStep;const shortLiquidationRange=Math.round(shortLiquidationPrice\/rangeStep)*rangeStep;if(priceRanges.has(longLiquidationRange)){priceRanges.set(longLiquidationRange,priceRanges.get(longLiquidationRange)+liquidationValue)}\r\nif(priceRanges.has(shortLiquidationRange)){priceRanges.set(shortLiquidationRange,priceRanges.get(shortLiquidationRange)+liquidationValue)}});priceRanges.forEach((currentVolume,range)=>{heatmapData.push([time,[...priceRanges.keys()].indexOf(range),currentVolume])});candlestickData.push([time,open,high,low,close])}\r\nif(endIndex<data.length){setTimeout(()=>processBatch(endIndex,endIndex+50,callback),0)}else{callback()}}\r\nreturn new Promise(resolve=>{processBatch(0,20,()=>{resolve({heatmapData,candlestickData,priceLabels:[...priceRanges.keys()].map(p=>`$${p}`)})})})}\r\nfunction getResponsiveFontSize(container){const base=container?.clientWidth?Math.round(container.clientWidth\/45):14;return Math.min(16,Math.max(12,base))}\r\nfunction getYAxisLabelSettings(totalTicks,container){const fontSize=getResponsiveFontSize(container);const minLabels=4;const maxLabels=8;const idealLabels=container?.clientHeight?Math.round(container.clientHeight\/(fontSize*2.6)):7;const target=Math.max(minLabels,Math.min(maxLabels,idealLabels));let step=Math.round(totalTicks\/target);if(totalTicks>1){step=Math.min(step,totalTicks-1)}step=Math.max(step,1);return{step,fontSize}}\r\nfunction getYAxisTickPositions(totalTicks,container){const {step}=getYAxisLabelSettings(totalTicks,container);const positions=[];for(let i=0;i<totalTicks;i+=step){positions.push(i)}if(totalTicks>0&&positions[positions.length-1]!==totalTicks-1){positions.push(totalTicks-1)}return positions}\r\ndocument.addEventListener('DOMContentLoaded',async()=>{const loadingElement=document.getElementById('loading');const chartContainer=document.getElementById('container-heatmap');const heatmapPeriodSelect=document.querySelector('.chart-period-select[data-chart-id=\"container-heatmap\"]');let heatmapChartInstance=null;async function renderCharts(selectedPeriod='3month'){try{loadingElement?.classList.add('visible');const data=await getBitcoinData(selectedPeriod);if(!data||data.length===0){throw new Error('No valid data received from API')}\r\nconst processedData=await processData(data,selectedPeriod);const totalTicks=processedData.priceLabels.length;const yAxisSettings=getYAxisLabelSettings(totalTicks,chartContainer);const yAxisTickPositions=getYAxisTickPositions(totalTicks,chartContainer);const maxPrice=Math.max(...processedData.candlestickData.map(d=>d[2]));const minPrice=Math.min(...processedData.candlestickData.map(d=>d[3]));const adjustedMinPrice=minPrice*0.975;const adjustedMaxPrice=maxPrice*1.025;if(heatmapChartInstance){heatmapChartInstance.update({yAxis:[{categories:processedData.priceLabels,title:{text:''},tickPositions:yAxisTickPositions,labels:{step:1,style:{color:'#FFFFFF',fontSize:`${yAxisSettings.fontSize}px`}},showFirstLabel:!0,showLastLabel:!0,gridLineWidth:0,tickWidth:0},{opposite:!0,title:{text:''},min:adjustedMinPrice,max:adjustedMaxPrice,tickInterval:100,labels:{enabled:!1},gridLineWidth:0,tickWidth:0}],colorAxis:{min:0,max:Math.max(...processedData.heatmapData.map(d=>d[2]))},series:[{name:'Liquidation Volume',type:'heatmap',data:processedData.heatmapData},{name:'Bitcoin Price',type:'candlestick',data:processedData.candlestickData}]})}else{heatmapChartInstance=Highcharts.chart('container-heatmap',{chart:{type:'heatmap',marginTop:20,marginBottom:40,marginLeft:10,marginRight:80,backgroundColor:'#000000',plotBackgroundColor:'#000000',borderWidth:0,boost:{enabled:!0}},title:{text:''},xAxis:{type:'datetime',labels:{style:{color:'#FFFFFF'},format:'{value:%d %b}'}},yAxis:[{categories:processedData.priceLabels,title:{text:''},tickPositions:yAxisTickPositions,labels:{step:1,style:{color:'#FFFFFF',fontSize:`${yAxisSettings.fontSize}px`}},showFirstLabel:!0,showLastLabel:!0,gridLineWidth:0,tickWidth:0,opposite:!0,},{title:{text:''},min:adjustedMinPrice,max:adjustedMaxPrice,tickInterval:100,labels:{enabled:!1},gridLineWidth:0,tickWidth:0}],colorAxis:{min:0,max:Math.max(...processedData.heatmapData.map(d=>d[2])),stops:[[0.0,'#000000'],[0.25,'#0000ff'],[0.5,'#00ffff'],[0.75,'#ffff00'],[1.0,'#ff0000']],minColor:'#000000',maxColor:'#ff0000',labels:{style:{color:'#FFFFFF',fontSize:'10px',fontWeight:'bold'}},lineWidth:0.5,lineColor:'#000000',tickLength:10,height:500},tooltip:{backgroundColor:'#000000',style:{color:'#FFFFFF',fontSize:'13px'},useHTML:!0,formatter:function(){if(this.series.options.type==='heatmap'){const date=Highcharts.dateFormat('%d %b %Y, %H:%M',this.x);const priceRange=`<b>${processedData.priceLabels[this.y]}<\/b>`;const liqValue=`<b>$${(this.point.value \/ 1e6).toFixed(0)}M<\/b>`;return `\r\n                  <div style=\"min-width: 180px;\">\r\n                    <div style=\"text-align: right; margin-bottom: 8px;\">\r\n                      <b>${date}<\/b>\r\n                    <\/div>\r\n                    <div style=\"text-align: left;\">\r\n                      Price Range: ${priceRange}<br>\r\n                      Liquidation Volume: ${liqValue}\r\n                    <\/div>\r\n                  <\/div>\r\n                `}else if(this.series.options.type==='candlestick'){const date=Highcharts.dateFormat('%d %b %Y, %H:%M',this.x);return `\r\n                  <div style=\"min-width: 180px;\">\r\n                    <div style=\"text-align: right; margin-bottom: 8px;\">\r\n                      <b>${date}<\/b>\r\n                    <\/div>\r\n                    <div style=\"text-align: left;\">\r\n                      Open: <b>$${this.open.toFixed(2)}<\/b><br>\r\n                      High: <b>$${this.high.toFixed(2)}<\/b><br>\r\n                      Low: <b>$${this.low.toFixed(2)}<\/b><br>\r\n                      Close: <b>$${this.close.toFixed(2)}<\/b>\r\n                    <\/div>\r\n                  <\/div>\r\n                `}}},plotOptions:{candlestick:{color:'#FF0000',lineColor:'#FF0000',upColor:'#FFFFFF',upLineColor:'#FFFFFF',whiskerColor:'#FFFFFF'}},series:[{name:'Liquidation Volume',type:'heatmap',borderWidth:0.5,data:processedData.heatmapData,turboThreshold:5000000,nullColor:'#000000'},{name:'Bitcoin Price',type:'candlestick',data:processedData.candlestickData,yAxis:1,color:'#FF0000',fillColor:'#FF0000',upColor:'#FFFFFF',upLineColor:'#FFFFFF',lineColor:'#FF0000',whiskerColor:'#FFFFFF',tooltip:{backgroundColor:'#000000',style:{color:'#FFFFFF',textAlign:'right'}},states:{hover:{enabled:!0,lineWidthPlus:0},inactive:{enabled:!1}}}],credits:{enabled:!1},boost:{enabled:!0},legend:{enabled:!1}})}}catch(error){console.error('Error rendering Liquidation Heatmap chart:',error);if(chartContainer){chartContainer.innerHTML=`\r\n          <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n            Unable to load chart data. Please try again later.\r\n          <\/div>`}}finally{loadingElement?.classList.remove('visible')}}\r\nheatmapPeriodSelect.addEventListener('change',async(event)=>{const selectedPeriod=event.target.value;localStorage.setItem('heatmapPeriod',selectedPeriod);await renderCharts(selectedPeriod)});const initialPeriod=localStorage.getItem('heatmapPeriod')||heatmapPeriodSelect.value;heatmapPeriodSelect.value=initialPeriod;await renderCharts(initialPeriod)})\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-679d06d elementor-widget elementor-widget-html\" data-id=\"679d06d\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n  const loadingElement = document.getElementById('loading-funding-rate');\r\n  const chartContainer = document.getElementById('funding-rate-chart');\r\n  const globalFundingRateElement = document.getElementById('global-funding-rate');\r\n  const fundingRatePeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"funding-rate-chart\"]');\r\n  let fundingRateChartInstance = null;\r\n\r\n  window.chartRenderers = window.chartRenderers || {};\r\n  window.chartInstances = window.chartInstances || {};\r\n\r\n  const periodSettingsMap = {\r\n    '1d': { days: 1, apiInterval: '1h' },\r\n    '3d': { days: 3, apiInterval: '1h' },\r\n    '7d': { days: 7, apiInterval: '1h' },\r\n    '21d': { days: 21, apiInterval: '1h' },\r\n    '30d': { days: 30, apiInterval: '1h' },\r\n    '60d': { days: 60, apiInterval: '1h' },\r\n    '90d': { days: 90, apiInterval: '1h' }\r\n  };\r\n\r\n  function formatCurrency(value) {\r\n    return '$' + value.toFixed(0);\r\n  }\r\n\r\n  async function renderAggregatedFundingRateChart(selectedOptionValue = '21d', addPrice = false) {\r\n    try {\r\n      console.log(`Rendering Aggregated Funding Rate chart with period: ${selectedOptionValue}, addPrice: ${addPrice}`);\r\n      loadingElement?.classList.add('visible');\r\n\r\n      const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d'];\r\n      const { days, apiInterval } = settings;\r\n\r\n      const response = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/list-global-funding-rate?days=${days}`);\r\n      if (!response.ok) {\r\n        throw new Error(`HTTP error (Funding Rate)! Status: ${response.status}`);\r\n      }\r\n      const data = await response.json();\r\n      console.log('Funding Rate API response:', data);\r\n\r\n      if (!Array.isArray(data) || data.length === 0) {\r\n        throw new Error('Invalid or empty Funding Rate data received from API');\r\n      }\r\n\r\n      const priceResponse = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${days}&interval=${apiInterval}`);\r\n      if (!priceResponse.ok) {\r\n        throw new Error(`HTTP error (Open Interest)! Status: ${priceResponse.status}`);\r\n      }\r\n      const priceData = await priceResponse.json();\r\n      console.log('Open Interest API response:', priceData);\r\n\r\n      if (!Array.isArray(priceData) || priceData.length === 0) {\r\n        throw new Error('Invalid or empty price data received from API');\r\n      }\r\n\r\n      const sortedData = data.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));\r\n\r\n      const hourlyData = {};\r\n      sortedData.forEach(d => {\r\n        const date = new Date(d.timestamp);\r\n        const hourStart = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours());\r\n        const key = hourStart.getTime();\r\n        if (!hourlyData[key]) {\r\n          hourlyData[key] = { sum: 0, count: 0 };\r\n        }\r\n        const rate = parseFloat(d.globalFundingRate);\r\n        if (!isNaN(rate)) {\r\n          hourlyData[key].sum += rate;\r\n          hourlyData[key].count += 1;\r\n        }\r\n      });\r\n\r\n      const seriesData = Object.entries(hourlyData)\r\n        .map(([time, { sum, count }]) => {\r\n          const avgRate = sum \/ count;\r\n          return {\r\n            x: parseInt(time),\r\n            y: Number(avgRate.toFixed(4)),\r\n            color: avgRate >= 0 ? '#FF0079' : '#00BCD4'\r\n          };\r\n        })\r\n        .sort((a, b) => a.x - b.x);\r\n\r\n      if (seriesData.length > 0) {\r\n        const latestRate = seriesData[seriesData.length - 1].y;\r\n        globalFundingRateElement.textContent = `${latestRate >= 0 ? '+' : ''}${latestRate.toFixed(4)}%`;\r\n        globalFundingRateElement.style.color = latestRate >= 0 ? '#FF0079' : '#00BCD4';\r\n      } else {\r\n        globalFundingRateElement.textContent = 'N\/A';\r\n      }\r\n\r\n      if (seriesData.length === 0) {\r\n        throw new Error('No valid Funding Rate data available for charting');\r\n      }\r\n\r\n      const sortedPriceData = priceData.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));\r\n      const btcPriceData = addPrice ? seriesData.map(rateEntry => {\r\n        const closestPriceEntry = sortedPriceData.reduce((prev, curr) => {\r\n          const prevDiff = Math.abs(rateEntry.x - new Date(prev.timestamp).getTime());\r\n          const currDiff = Math.abs(rateEntry.x - new Date(curr.timestamp).getTime());\r\n          return currDiff < prevDiff ? curr : prev;\r\n        });\r\n        const price = parseFloat(closestPriceEntry.price);\r\n        const isValid = !isNaN(price) && price > 0;\r\n        if (!isValid) console.warn(`Invalid price data for timestamp ${rateEntry.x}: ${closestPriceEntry.price}`);\r\n        return isValid ? [rateEntry.x, price] : null;\r\n      }).filter(entry => entry !== null) : [];\r\n\r\n      console.log('Funding Rate data:', seriesData);\r\n      console.log('Bitcoin Price data:', btcPriceData);\r\n\r\n      const btcPrices = btcPriceData.map(point => point[1]);\r\n      const btcMin = btcPrices.length > 0 ? Math.min(...btcPrices) * 0.99 : 0;\r\n      const btcMax = btcPrices.length > 0 ? Math.max(...btcPrices) * 1.01 : 100000;\r\n\r\n      let series = [{\r\n        name: 'Agg. Funding Rate',\r\n        type: 'column',\r\n        data: seriesData,\r\n        fillColor: {\r\n          linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\r\n          stops: [\r\n            [0, 'rgba(255, 0, 121, 0.5)'],\r\n            [1, 'rgba(0, 188, 212, 0.5)']\r\n          ]\r\n        },\r\n        zones: [{\r\n          value: 0,\r\n          color: '#00BCD4'\r\n        }, {\r\n          color: '#FF0079'\r\n        }]\r\n      }];\r\n\r\n      let yAxis = [{\r\n        title: { text: null },\r\n        labels: { enabled: false },\r\n        gridLineWidth: 0,\r\n        plotLines: [\r\n          { value: 0, color: 'rgba(85, 85, 85, 1)', dashStyle: 'Dot', width: 1, zIndex: 3 },\r\n          { value: 0.01, color: 'rgba(255, 165, 0, 0.6)', dashStyle: 'Dot', width: 1, zIndex: 3 },\r\n          { value: -0.01, color: 'rgba(255, 165, 0, 0.6)', dashStyle: 'Dot', width: 1, zIndex: 3 }\r\n        ],\r\n        softMin: -0.025,\r\n        softMax: 0.030,\r\n        tickAmount: 6\r\n      }];\r\n\r\n      if (addPrice && btcPriceData.length > 0) {\r\n        series.push({\r\n          name: 'Bitcoin Price',\r\n          type: 'line',\r\n          data: btcPriceData,\r\n          color: 'white',\r\n          lineWidth: 2,\r\n          states: { hover: { lineWidth: 1.5 } },\r\n          marker: {\r\n            enabled: false,\r\n            states: {\r\n              hover: { enabled: false }\r\n            }\r\n          },\r\n          states: {\r\n            hover: {\r\n              enabled: false\r\n            }\r\n          },\r\n          yAxis: 1\r\n        });\r\n        yAxis.push({\r\n          opposite: true,\r\n          title: { text: null },\r\n          labels: { enabled: false },\r\n          gridLineWidth: 0,\r\n          min: btcMin,\r\n          max: btcMax,\r\n          tickAmount: 6\r\n        });\r\n      } else if (addPrice) {\r\n        console.warn('No valid Bitcoin Price data available for rendering');\r\n      }\r\n\r\n      if (fundingRateChartInstance) {\r\n        console.log('Updating existing chart with series:', series);\r\n        fundingRateChartInstance.update({\r\n          series: series,\r\n          yAxis: yAxis\r\n        }, true);\r\n      } else {\r\n        console.log('Creating new chart with series:', series);\r\n        fundingRateChartInstance = Highcharts.chart('funding-rate-chart', {\r\n          chart: {\r\n            type: 'column',\r\n            backgroundColor: '#000000',\r\n            margin: 20,\r\n            style: { fontFamily: 'Arial, sans-serif' },\r\n            events: {\r\n              load: function() {\r\n                loadingElement?.classList.remove('visible');\r\n                const columnSeries = this.series.find(s => s.type === 'column');\r\n                if (columnSeries && columnSeries.points.length > 0) {\r\n                  const columnWidth = columnSeries.points[0].shapeArgs.width;\r\n                  this.xAxis[0].update({\r\n                    crosshair: {\r\n                      color: 'rgba(50, 50, 50, 0.5)',\r\n                      zIndex: 5,\r\n                      width: columnWidth,\r\n                      snap: true\r\n                    }\r\n                  }, false);\r\n                  this.redraw();\r\n                }\r\n              },\r\n              render: function() {\r\n                const columnSeries = this.series.find(s => s.type === 'column');\r\n                let columnWidth = 5;\r\n                if (columnSeries && columnSeries.points.length > 0) {\r\n                  columnWidth = columnSeries.points[0].shapeArgs.width;\r\n                }\r\n                if (this.xAxis[0].options.crosshair.width !== columnWidth) {\r\n                  this.xAxis[0].update({\r\n                    crosshair: {\r\n                      color: 'rgba(50, 50, 50, 0.5)',\r\n                      zIndex: 5,\r\n                      width: columnWidth,\r\n                      snap: true\r\n                    }\r\n                  }, false);\r\n                  this.redraw();\r\n                }\r\n              }\r\n            }\r\n          },\r\n          title: { text: null },\r\n          xAxis: {\r\n            type: 'datetime',\r\n            labels: { enabled: false },\r\n            lineColor: 'transparent',\r\n            tickLength: 0,\r\n            crosshair: {\r\n              color: 'rgba(50, 50, 50, 0.5)',\r\n              zIndex: 5,\r\n              width: 5,\r\n              snap: true\r\n            },\r\n            gridLineWidth: 0\r\n          },\r\n          yAxis: yAxis,\r\n          series: series,\r\n          legend: { enabled: false },\r\n          tooltip: {\r\n            shared: true,\r\n            useHTML: true,\r\n            followPointer: true,\r\n            backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n            borderColor: '#555555',\r\n            style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n            formatter() {\r\n              const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                day: '2-digit',\r\n                month: 'short',\r\n                year: 'numeric',\r\n                hour: '2-digit',\r\n                minute: '2-digit',\r\n                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n              });\r\n              let tooltip = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n              this.points.forEach(point => {\r\n                const isFundingRate = point.series.name === 'Agg. Funding Rate';\r\n                const value = isFundingRate ? `${point.y >= 0 ? '+' : ''}${point.y.toFixed(4)}%` : formatCurrency(point.y);\r\n                const color = isFundingRate ? point.color : 'white';\r\n                tooltip += `<div>\r\n                  <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${color}; margin-right: 5px;\"><\/span>\r\n                  ${point.series.name}: <b>${value}<\/b>\r\n                <\/div>`;\r\n              });\r\n              return tooltip;\r\n            }\r\n          },\r\n          plotOptions: {\r\n            column: {\r\n              animation: { duration: 500 },\r\n              groupPadding: 0.05,\r\n              pointPadding: 0.1,\r\n              borderWidth: 0\r\n            },\r\n            line: {\r\n              animation: { duration: 500 }\r\n            }\r\n          },\r\n          credits: { enabled: false }\r\n        });\r\n        window.chartInstances['funding-rate-chart'] = fundingRateChartInstance;\r\n      }\r\n    } catch (error) {\r\n      console.error('Error rendering Aggregated Funding Rate chart:', error);\r\n      if (chartContainer) {\r\n        chartContainer.innerHTML = `\r\n          <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n            Unable to load chart data. Please try again later.\r\n          <\/div>`;\r\n      }\r\n      globalFundingRateElement.textContent = 'N\/A';\r\n    } finally {\r\n      loadingElement?.classList.remove('visible');\r\n    }\r\n  }\r\n\r\n  document.addEventListener('priceCompareToggled', async (event) => {\r\n    console.log('Price Compare toggled:', event.detail);\r\n    const showPrice = event.detail;\r\n    const selectedOptionValue = fundingRatePeriodSelect.value;\r\n    await renderAggregatedFundingRateChart(selectedOptionValue, showPrice);\r\n  });\r\n\r\n  fundingRatePeriodSelect.addEventListener('change', async (event) => {\r\n    const selectedOptionValue = event.target.value;\r\n    localStorage.setItem('fundingRatePeriod', selectedOptionValue);\r\n    const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const showPrice = settings['price-compare'] || false;\r\n    await renderAggregatedFundingRateChart(selectedOptionValue, showPrice);\r\n  });\r\n\r\n  const initialFundingRatePeriod = localStorage.getItem('fundingRatePeriod') || '21d';\r\n  fundingRatePeriodSelect.value = initialFundingRatePeriod;\r\n  const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n  const initialShowPrice = initialSettings['price-compare'] || false;\r\n  console.log('Initial render with period:', initialFundingRatePeriod, 'addPrice:', initialShowPrice);\r\n  await renderAggregatedFundingRateChart(initialFundingRatePeriod, initialShowPrice);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cdf51b9 elementor-widget elementor-widget-html\" data-id=\"cdf51b9\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n  const loadingElement = document.getElementById('loading-funding');\r\n  const chartContainer = document.getElementById('funding-chart');\r\n  const fundingPeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"funding-chart\"]');\r\n  let fundingChartInstance = null;\r\n\r\n  window.chartRenderers = window.chartRenderers || {};\r\n  window.chartInstances = window.chartInstances || {};\r\n\r\n  const periodSettingsMap = {\r\n    '1d': { days: 1, apiInterval: '1h' },\r\n    '3d': { days: 3, apiInterval: '1h' },\r\n    '7d': { days: 7, apiInterval: '1h' },\r\n    '21d': { days: 21, apiInterval: '1h' },\r\n    '30d': { days: 30, apiInterval: '1h' },\r\n    '60d': { days: 60, apiInterval: '1h' },\r\n    '90d': { days: 90, apiInterval: '1h' }\r\n  };\r\n\r\n  function formatCurrency(value) {\r\n    return '$' + value.toFixed(0);\r\n  }\r\n\r\n  async function renderExchangesFundingChart(selectedOptionValue = '21d', addPrice = false) {\r\n    try {\r\n      console.log(`Rendering Exchanges Funding chart with period: ${selectedOptionValue}, addPrice: ${addPrice}`);\r\n      loadingElement?.classList.add('visible');\r\n\r\n      const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d'];\r\n      const { days, apiInterval } = settings;\r\n\r\n      const response = await fetch(\r\n        'https:\/\/api.bitcoincounterflow.com\/api\/exchanges-funding-history'\r\n      );\r\n      if (!response.ok) {\r\n        throw new Error(`HTTP error (Funding Rates)! Status: ${response.status}`);\r\n      }\r\n      const data = await response.json();\r\n      console.log('Funding Rates API response:', data);\r\n\r\n      if (!Array.isArray(data) || data.length === 0 || !data[0].rates) {\r\n        throw new Error('Invalid or empty Funding Rates data received from API');\r\n      }\r\n\r\n      const priceResponse = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${days}&interval=${apiInterval}`);\r\n      if (!priceResponse.ok) {\r\n        throw new Error(`HTTP error (Open Interest)! Status: ${priceResponse.status}`);\r\n      }\r\n      const priceData = await priceResponse.json();\r\n      console.log('Open Interest API response:', priceData);\r\n\r\n      if (!Array.isArray(priceData) || priceData.length === 0) {\r\n        throw new Error('Invalid or empty price data received from API');\r\n      }\r\n\r\n      const periodDaysAgo = new Date(Math.max(...data.map(d => new Date(d.timestamp))) - days * 24 * 60 * 60 * 1000);\r\n      const filteredData = data\r\n        .filter(d => new Date(d.timestamp) >= periodDaysAgo)\r\n        .sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));\r\n\r\n      const customExchangeColors = {\r\n        'Binance': '#FFD700',\r\n        'OKX': '#00A1D6',\r\n        'Huobi': '#ffa500'\r\n      };\r\n      const defaultColors = ['#FF6F61', '#28A745', '#6F42C1', 'red'];\r\n      const exchangeColorMap = {};\r\n      let defaultColorIndex = 0;\r\n\r\n      const exchanges = Object.keys(filteredData[0].rates).filter(k => k !== '_id');\r\n      exchanges.sort((a, b) => {\r\n        const baseA = a.replace(\/USDT|USD|EUR|BUSD\/g, '');\r\n        const baseB = b.replace(\/USDT|USD|EUR|BUSD\/g, '');\r\n        return baseA < baseB ? -1 : baseA > baseB ? 1 : a < b ? -1 : 1;\r\n      });\r\n\r\n      const seriesData = exchanges.map(exchange => {\r\n        const baseExchangeName = exchange.replace(\/USDT|USD|EUR|BUSD\/g, '');\r\n        let seriesColor = customExchangeColors[baseExchangeName] ||\r\n          exchangeColorMap[baseExchangeName] ||\r\n          (exchangeColorMap[baseExchangeName] = defaultColors[defaultColorIndex++ % defaultColors.length]);\r\n\r\n        const hourlyData = {};\r\n        filteredData.forEach(d => {\r\n          const date = new Date(d.timestamp);\r\n          const hourStart = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours());\r\n          const key = hourStart.getTime();\r\n          if (!hourlyData[key]) {\r\n            hourlyData[key] = { sum: 0, count: 0 };\r\n          }\r\n          const rate = parseFloat(d.rates[exchange]);\r\n          if (!isNaN(rate)) {\r\n            hourlyData[key].sum += rate;\r\n            hourlyData[key].count += 1;\r\n          }\r\n        });\r\n\r\n        return {\r\n          name: exchange,\r\n          type: 'spline',\r\n          data: Object.entries(hourlyData)\r\n            .map(([time, { sum, count }]) => [parseInt(time), Number((sum \/ count).toFixed(4))])\r\n            .sort((a, b) => a[0] - b[0]),\r\n          lineWidth: 2,\r\n          marker: {\r\n            enabled: false,\r\n            states: {\r\n              hover: { enabled: false }\r\n            }\r\n          },\r\n          states: {\r\n            hover: {\r\n              enabled: false\r\n            }\r\n          },\r\n          color: seriesColor\r\n        };\r\n      });\r\n\r\n      if (seriesData.length === 0 || seriesData.every(series => series.data.length === 0)) {\r\n        throw new Error('No valid funding rate data available for charting');\r\n      }\r\n\r\n      const sortedPriceData = priceData.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\r\n      const btcPriceData = addPrice ? seriesData[0].data.map(rateEntry => {\r\n        const closestPriceEntry = sortedPriceData.reduce((prev, curr) => {\r\n          const prevDiff = Math.abs(rateEntry[0] - new Date(prev.timestamp).getTime());\r\n          const currDiff = Math.abs(rateEntry[0] - new Date(curr.timestamp).getTime());\r\n          return currDiff < prevDiff ? curr : prev;\r\n        });\r\n        const price = parseFloat(closestPriceEntry.price);\r\n        const isValid = !isNaN(price) && price > 0;\r\n        if (!isValid) console.warn(`Invalid price data for timestamp ${rateEntry[0]}: ${closestPriceEntry.price}`);\r\n        return isValid ? [rateEntry[0], price] : null;\r\n      }).filter(entry => entry !== null) : [];\r\n\r\n      console.log('Funding Rates series data:', seriesData);\r\n      console.log('Bitcoin Price data:', btcPriceData);\r\n\r\n      let series = seriesData;\r\n      let yAxis = [{\r\n        title: { text: null },\r\n        labels: {\r\n          formatter() {\r\n            return `${this.value.toFixed(4)}%`;\r\n          },\r\n          style: { color: '#cccccc', fontSize: '12px' }\r\n        },\r\n        gridLineWidth: 0,\r\n        plotLines: [{\r\n          value: 0,\r\n          color: 'orange',\r\n          dashStyle: 'Dash',\r\n          width: 1,\r\n          zIndex: 5\r\n        }]\r\n      }];\r\n\r\n      if (addPrice && btcPriceData.length > 0) {\r\n        series = [...seriesData, {\r\n          name: 'Bitcoin Price',\r\n          type: 'spline',\r\n          data: btcPriceData,\r\n          color: 'white',\r\n          lineWidth: 2,\r\n          states: { hover: { lineWidth: 1.5 } },\r\n          marker: {\r\n            enabled: false,\r\n            states: {\r\n              hover: { enabled: false }\r\n            }\r\n          },\r\n          states: {\r\n            hover: {\r\n              enabled: false\r\n            }\r\n          },\r\n          yAxis: 1\r\n        }];\r\n        yAxis.push({\r\n          opposite: true,\r\n          title: { text: null },\r\n          labels: { enabled: false },\r\n          gridLineWidth: 0,\r\n          type: 'linear'\r\n        });\r\n      } else if (addPrice) {\r\n        console.warn('No valid Bitcoin Price data available for rendering');\r\n      }\r\n\r\n      if (fundingChartInstance) {\r\n        console.log('Updating existing chart with series:', series);\r\n        fundingChartInstance.update({\r\n          series: series,\r\n          yAxis: yAxis\r\n        }, true);\r\n      } else {\r\n        console.log('Creating new chart with series:', series);\r\n        fundingChartInstance = Highcharts.chart('funding-chart', {\r\n          chart: {\r\n            type: 'spline',\r\n            backgroundColor: '#000000',\r\n            margin: 20,\r\n            style: { fontFamily: 'Arial, sans-serif' },\r\n            panning: { enabled: true, type: 'xy' },\r\n            panKey: 'shift',\r\n            events: {\r\n              load: function() {\r\n                loadingElement?.classList.remove('visible');\r\n                if (this.series[0].data.length > 1) {\r\n                  const pointInterval = this.series[0].data[1].x - this.series[0].data[0].x;\r\n                  const crosshairWidth = this.xAxis[0].toPixels(pointInterval, true) - this.xAxis[0].toPixels(0, true);\r\n                  this.xAxis[0].update({\r\n                    crosshair: {\r\n                      color: '#333',\r\n                      dashStyle: 'dash',\r\n                      zIndex: 5,\r\n                      width: crosshairWidth > 0 ? crosshairWidth : 5,\r\n                      snap: true\r\n                    }\r\n                  }, false);\r\n                  this.redraw();\r\n                }\r\n              },\r\n              render: function() {\r\n                let crosshairWidth = 5;\r\n                if (this.series[0].data.length > 1) {\r\n                  const pointInterval = this.series[0].data[1].x - this.series[0].data[0].x;\r\n                  crosshairWidth = this.xAxis[0].toPixels(pointInterval, true) - this.xAxis[0].toPixels(0, true);\r\n                }\r\n                if (this.xAxis[0].options.crosshair.width !== crosshairWidth) {\r\n                  this.xAxis[0].update({\r\n                    crosshair: {\r\n                      color: '#333',\r\n                      dashStyle: 'dash',\r\n                      zIndex: 5,\r\n                      width: crosshairWidth > 0 ? crosshairWidth : 5,\r\n                      snap: true\r\n                    }\r\n                  }, false);\r\n                  this.redraw();\r\n                }\r\n              }\r\n            }\r\n          },\r\n          title: { text: null },\r\n          xAxis: {\r\n            type: 'datetime',\r\n            labels: { enabled: false },\r\n            lineColor: 'transparent',\r\n            tickLength: 0,\r\n            crosshair: {\r\n              color: '#333',\r\n              dashStyle: 'dash',\r\n              zIndex: 5,\r\n              width: 5,\r\n              snap: true\r\n            },\r\n            gridLineWidth: 0\r\n          },\r\n          yAxis: yAxis,\r\n          tooltip: {\r\n            shared: true,\r\n            useHTML: true,\r\n            backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n            borderColor: '#555555',\r\n            style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n            formatter: function() {\r\n              const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                day: '2-digit',\r\n                month: 'short',\r\n                year: 'numeric',\r\n                hour: '2-digit',\r\n                minute: '2-digit',\r\n                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n              });\r\n              let tooltip = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n              this.points.sort((a, b) => {\r\n                const baseA = a.series.name.replace(\/USDT|USD|EUR|BUSD\/g, '');\r\n                const baseB = b.series.name.replace(\/USDT|USD|EUR|BUSD\/g, '');\r\n                return baseA < baseB ? -1 : baseA > baseB ? 1 : a.series.name < b.series.name ? -1 : 1;\r\n              }).forEach(point => {\r\n                const isFundingRate = point.series.name !== 'Bitcoin Price';\r\n                const value = isFundingRate ? `${point.y.toFixed(4)}%` : formatCurrency(point.y);\r\n                const color = point.color;\r\n                tooltip += `<div>\r\n                  <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${color}; margin-right: 5px;\"><\/span>\r\n                  ${point.series.name}: <b>${value}<\/b>\r\n                <\/div>`;\r\n              });\r\n              return tooltip;\r\n            }\r\n          },\r\n          legend: {\r\n            enabled: true,\r\n            useHTML: true,\r\n            itemStyle: { fontSize: '12px' },\r\n            itemHoverStyle: { color: '#cccccc' },\r\n            labelFormatter: function() {\r\n              return `<span style=\"color:${this.color}\">${this.name}<\/span>`;\r\n            },\r\n            backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n            borderRadius: 5,\r\n            symbolWidth: 0,\r\n            layout: 'horizontal',\r\n            align: 'center',\r\n            verticalAlign: 'bottom',\r\n            itemDistance: 10\r\n          },\r\n          series: series,\r\n          plotOptions: {\r\n            spline: { animation: { duration: 500 } }\r\n          },\r\n          credits: { enabled: false }\r\n        });\r\n        window.chartInstances['funding-chart'] = fundingChartInstance;\r\n      }\r\n    } catch (error) {\r\n      console.error('Error rendering Exchanges Funding chart:', error);\r\n      if (chartContainer) {\r\n        chartContainer.innerHTML = `\r\n          <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n            Unable to load chart data. Please try again later.\r\n          <\/div>`;\r\n      }\r\n    } finally {\r\n      loadingElement?.classList.remove('visible');\r\n    }\r\n  }\r\n\r\n  document.addEventListener('priceCompareToggled', async (event) => {\r\n    console.log('Price Compare toggled:', event.detail);\r\n    const showPrice = event.detail;\r\n    const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    settings['price-compare'] = showPrice;\r\n    localStorage.setItem('chartVisibilitySettings', JSON.stringify(settings));\r\n    const selectedOptionValue = fundingPeriodSelect.value;\r\n    await renderExchangesFundingChart(selectedOptionValue, showPrice);\r\n  });\r\n\r\n  fundingPeriodSelect.addEventListener('change', async (event) => {\r\n    const selectedOptionValue = event.target.value;\r\n    localStorage.setItem('fundingPeriod', selectedOptionValue);\r\n    const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const showPrice = settings['price-compare'] || false;\r\n    await renderExchangesFundingChart(selectedOptionValue, showPrice);\r\n  });\r\n\r\n  const initialFundingPeriod = localStorage.getItem('fundingPeriod') || '21d';\r\n  fundingPeriodSelect.value = initialFundingPeriod;\r\n  const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n  const initialShowPrice = initialSettings['price-compare'] || false;\r\n  console.log('Initial render with period:', initialFundingPeriod, 'addPrice:', initialShowPrice);\r\n  await renderExchangesFundingChart(initialFundingPeriod, initialShowPrice);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d4cebc elementor-widget elementor-widget-html\" data-id=\"6d4cebc\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n  const loadingElement = document.getElementById('loading-drawdown');\r\n  const chartContainer = document.getElementById('bitcoin-price-chart');\r\n  const priceDrawdownElement = document.getElementById('price-drawdown');\r\n  const drawdownPeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"bitcoin-price-chart\"]');\r\n  let drawdownChartInstance = null;\r\n\r\n  const periodSettingsMap = {\r\n    '1d-15m': { apiDays: 1, apiInterval: '15m', krakenInterval: 15 },\r\n    '3d-15m': { apiDays: 3, apiInterval: '15m', krakenInterval: 15 },\r\n    '7d-15m': { apiDays: 7, apiInterval: '15m', krakenInterval: 15 },\r\n    '21d-1h': { apiDays: 21, apiInterval: '1h', krakenInterval: 60 },\r\n    '30d-1h': { apiDays: 30, apiInterval: '1h', krakenInterval: 60 },\r\n    '2M-4h': { apiDays: 60, apiInterval: '4h', krakenInterval: 240 },\r\n    '3M-4h': { apiDays: 90, apiInterval: '4h', krakenInterval: 240 },\r\n    '6M-4h': { apiDays: 180, apiInterval: '4h', krakenInterval: 240 },\r\n    '1Y-4h': { apiDays: 365, apiInterval: '4h', krakenInterval: 240 },\r\n    '2Y-1d': { apiDays: 730, apiInterval: '1d', krakenInterval: 1440 }\r\n  };\r\n\r\n  let cachedOHLCData = null;\r\n  let cachedHistoricalOHLC = null;\r\n  let cachedATH = null;\r\n  let lastCacheUpdate = null;\r\n  const CACHE_TTL = 15 * 60 * 1000;\r\n  const MAX_RETRIES = 3;\r\n  const RETRY_DELAY = 1000;\r\n\r\n  function formatCurrency(value) {\r\n    return '$' + value.toFixed(0);\r\n  }\r\n\r\n  async function getKrakenOHLC(interval, days, retryCount = 0) {\r\n    try {\r\n      const since = Math.floor((Date.now() - days * 24 * 60 * 60 * 1000) \/ 1000);\r\n      const response = await fetch(`https:\/\/api.kraken.com\/0\/public\/OHLC?pair=XBTUSD&interval=${interval}&since=${since}`);\r\n      const data = await response.json();\r\n      if (data.error && data.error.length > 0) {\r\n        throw new Error(data.error.includes('EAPI:Rate limit exceeded') \r\n          ? 'Kraken API rate limit exceeded' \r\n          : data.error.join(\", \"));\r\n      }\r\n      const ohlc = data.result.XXBTZUSD;\r\n      if (!Array.isArray(ohlc) || ohlc.length === 0) {\r\n        throw new Error(\"Empty OHLC data from Kraken\");\r\n      }\r\n      console.log(`Fetched OHLC data for ${days} days, interval ${interval}`);\r\n      return ohlc.map(([timestamp, open, high, low, close]) => ({\r\n        timestamp: new Date(parseInt(timestamp) * 1000),\r\n        price: parseFloat(high)\r\n      }));\r\n    } catch (error) {\r\n      console.error(`Error fetching Kraken OHLC (attempt ${retryCount + 1}):`, error.message);\r\n      if (retryCount < MAX_RETRIES - 1) {\r\n        await new Promise(resolve => setTimeout(resolve, RETRY_DELAY * Math.pow(2, retryCount)));\r\n        return getKrakenOHLC(interval, days, retryCount + 1);\r\n      }\r\n      return null;\r\n    }\r\n  }\r\n\r\n  async function getKrakenHistoricalOHLC(retryCount = 0) {\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.includes('EAPI:Rate limit exceeded') \r\n          ? 'Kraken API rate limit exceeded' \r\n          : data.error.join(\", \"));\r\n      }\r\n      const ohlc = data.result.XXBTZUSD;\r\n      if (!Array.isArray(ohlc) || ohlc.length === 0) {\r\n        throw new Error(\"Empty historical OHLC data from Kraken\");\r\n      }\r\n      console.log(`Fetched historical OHLC data, ${ohlc.length} points`);\r\n      return ohlc.map(([timestamp, open, high, low, close]) => ({\r\n        timestamp: new Date(parseInt(timestamp) * 1000),\r\n        price: parseFloat(high)\r\n      }));\r\n    } catch (error) {\r\n      console.error(`Error fetching Kraken historical OHLC (attempt ${retryCount + 1}):`, error.message);\r\n      if (retryCount < MAX_RETRIES - 1) {\r\n        await new Promise(resolve => setTimeout(resolve, RETRY_DELAY * Math.pow(2, retryCount)));\r\n        return getKrakenHistoricalOHLC(retryCount + 1);\r\n      }\r\n      return null;\r\n    }\r\n  }\r\n\r\n  async function getKrakenATH(retryCount = 0) {\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.includes('EAPI:Rate limit exceeded') \r\n          ? 'Kraken API rate limit exceeded' \r\n          : 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      console.log(`Fetched ATH: $${ath} on ${athTimestamp}`);\r\n      return { ath, athDate: athTimestamp };\r\n    } catch (error) {\r\n      console.error(`Error fetching Kraken ATH (attempt ${retryCount + 1}):`, error.message);\r\n      if (retryCount < MAX_RETRIES - 1) {\r\n        await new Promise(resolve => setTimeout(resolve, RETRY_DELAY * Math.pow(2, retryCount)));\r\n        return getKrakenATH(retryCount + 1);\r\n      }\r\n      return null;\r\n    }\r\n  }\r\n\r\n  function setupKrakenWebSocket() {\r\n    try {\r\n      const ws = new WebSocket('wss:\/\/ws.kraken.com');\r\n      ws.onopen = () => {\r\n        ws.send(JSON.stringify({\r\n          event: 'subscribe',\r\n          pair: ['XBT\/USD'],\r\n          subscription: { name: 'ticker' }\r\n        }));\r\n      };\r\n      ws.onmessage = event => {\r\n        const data = JSON.parse(event.data);\r\n        if (data.event || !Array.isArray(data)) return;\r\n        const [, , tickerData] = data;\r\n        if (tickerData && tickerData.c) {\r\n          const price = parseFloat(tickerData.c[0]);\r\n          if (!isNaN(price) && cachedATH) {\r\n            priceDrawdownElement.textContent = ((cachedATH.ath - price) \/ cachedATH.ath * 100).toFixed(1) + '%';\r\n          }\r\n        }\r\n      };\r\n      ws.onerror = err => console.error('Kraken WebSocket error:', err);\r\n      ws.onclose = () => {\r\n        console.log('Kraken WebSocket closed, attempting to reconnect...');\r\n        setTimeout(setupKrakenWebSocket, 5000);\r\n      };\r\n    } catch (err) {\r\n      console.error('Error connecting to Kraken WebSocket:', err);\r\n    }\r\n  }\r\n\r\n  function debounce(func, wait) {\r\n    let timeout;\r\n    return function executedFunction(...args) {\r\n      const later = () => {\r\n        clearTimeout(timeout);\r\n        func(...args);\r\n      };\r\n      clearTimeout(timeout);\r\n      timeout = setTimeout(later, wait);\r\n    };\r\n  }\r\n\r\n  async function renderATHDrawdownChart(selectedOptionValue = '21d-1h') {\r\n    try {\r\n      loadingElement?.classList.add('visible');\r\n      if (chartContainer) {\r\n        chartContainer.innerHTML = `<div id=\"loading-drawdown\" class=\"loading visible\">Loading...<\/div>`;\r\n      }\r\n\r\n      const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d-1h'];\r\n      const { apiDays, krakenInterval } = settings;\r\n\r\n      if (!cachedATH || !lastCacheUpdate || Date.now() - lastCacheUpdate > CACHE_TTL) {\r\n        cachedATH = await getKrakenATH();\r\n        lastCacheUpdate = Date.now();\r\n        console.log(cachedATH ? 'ATH cache updated' : 'ATH cache update failed');\r\n      }\r\n      if (!cachedATH) {\r\n        throw new Error('Failed to fetch ATH from Kraken');\r\n      }\r\n\r\n      if (!cachedHistoricalOHLC || !lastCacheUpdate || Date.now() - lastCacheUpdate > CACHE_TTL) {\r\n        cachedHistoricalOHLC = await getKrakenHistoricalOHLC();\r\n        console.log(cachedHistoricalOHLC ? 'Historical OHLC cache updated' : 'Historical OHLC cache update failed');\r\n      }\r\n      if (!cachedHistoricalOHLC) {\r\n        throw new Error('Failed to fetch historical OHLC data from Kraken');\r\n      }\r\n\r\n      let ohlcData = null;\r\n      const cutoffTimestamp = Date.now() - apiDays * 24 * 60 * 60 * 1000;\r\n      if (cachedOHLCData && cachedOHLCData.days >= apiDays && cachedOHLCData.interval === krakenInterval) {\r\n        ohlcData = cachedOHLCData.data.filter(entry => entry.timestamp.getTime() >= cutoffTimestamp);\r\n        console.log(`Using filtered cached OHLC data for ${apiDays} days, interval ${krakenInterval}`);\r\n      } else {\r\n        ohlcData = await getKrakenOHLC(krakenInterval, apiDays);\r\n        if (!ohlcData) {\r\n          throw new Error('Failed to fetch price data from Kraken after retries');\r\n        }\r\n        cachedOHLCData = { days: apiDays, interval: krakenInterval, data: ohlcData };\r\n        console.log(`OHLC cache updated for ${apiDays} days, interval ${krakenInterval}`);\r\n      }\r\n\r\n      const sortedData = ohlcData.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());\r\n\r\n      const priceData = [];\r\n      const drawdownData = [];\r\n      let maxDrawdown = 0;\r\n\r\n      sortedData.forEach(entry => {\r\n        const price = entry.price;\r\n        const timestamp = entry.timestamp.getTime();\r\n        const historicalATH = cachedHistoricalOHLC\r\n          .filter(h => h.timestamp.getTime() <= timestamp)\r\n          .reduce((max, h) => Math.max(max, h.price), 0);\r\n        const drawdown = historicalATH > 0 ? ((historicalATH - price) \/ historicalATH) * 100 : 0;\r\n        priceData.push([timestamp, Number(price.toFixed(0))]);\r\n        drawdownData.push([timestamp, Number(drawdown.toFixed(1))]);\r\n        maxDrawdown = Math.max(maxDrawdown, drawdown);\r\n      });\r\n\r\n      if (priceData.length === 0 || drawdownData.length === 0) {\r\n        throw new Error('No valid price data available for charting');\r\n      }\r\n\r\n      priceDrawdownElement.textContent = drawdownData[drawdownData.length - 1][1].toFixed(1) + '%';\r\n\r\n      if (drawdownChartInstance && !drawdownChartInstance.chart) {\r\n        console.warn('Invalid Highcharts instance, reinitializing...');\r\n        drawdownChartInstance = null;\r\n      }\r\n\r\n      if (drawdownChartInstance) {\r\n        drawdownChartInstance.update({\r\n          yAxis: [\r\n            { labels: { enabled: false }, gridLineWidth: 0, title: { text: null } },\r\n            {\r\n              labels: { enabled: false },\r\n              gridLineWidth: 0,\r\n              title: { text: null },\r\n              opposite: true,\r\n              min: 0,\r\n              max: Math.max(maxDrawdown * 1.2, 10),\r\n              reversed: true\r\n            }\r\n          ],\r\n          series: [\r\n            { name: 'Bitcoin Price', data: priceData },\r\n            { name: 'ATH Drawdown', data: drawdownData }\r\n          ]\r\n        });\r\n      } else {\r\n        drawdownChartInstance = Highcharts.chart('bitcoin-price-chart', {\r\n          chart: {\r\n            type: 'line',\r\n            backgroundColor: '#000000',\r\n            margin: 20,\r\n            spacing: [0, 0, 0, 0],\r\n            style: { fontFamily: 'Arial, sans-serif' },\r\n            events: {\r\n              load() {\r\n                loadingElement?.classList.remove('visible');\r\n              }\r\n            }\r\n          },\r\n          title: { text: null },\r\n          xAxis: {\r\n            type: 'datetime',\r\n            labels: { enabled: false },\r\n            lineColor: 'transparent',\r\n            tickLength: 0,\r\n            crosshair: {\r\n              color: '#333',\r\n              dashStyle: 'dash'\r\n            },\r\n            gridLineWidth: 0\r\n          },\r\n          yAxis: [\r\n            {\r\n              labels: { enabled: false },\r\n              gridLineWidth: 0,\r\n              title: { text: null }\r\n            },\r\n            {\r\n              labels: { enabled: false },\r\n              gridLineWidth: 0,\r\n              title: { text: null },\r\n              opposite: true,\r\n              min: 0,\r\n              max: Math.max(maxDrawdown * 1.2, 10),\r\n              reversed: true\r\n            }\r\n          ],\r\n          series: [\r\n            {\r\n              name: 'Bitcoin Price',\r\n              type: 'line',\r\n              color: '#FFF',\r\n              lineWidth: 2,\r\n              data: priceData,\r\n              yAxis: 0,\r\n              marker: {\r\n                enabled: false,\r\n                fillColor: 'transparent'\r\n              },\r\n              states: {\r\n                hover: {\r\n                  lineWidth: 2\r\n                }\r\n              }\r\n            },\r\n            {\r\n              name: 'ATH Drawdown',\r\n              type: 'area',\r\n              data: drawdownData,\r\n              color: 'red',\r\n              fillColor: {\r\n                linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\r\n                stops: [\r\n                  [0, 'rgba(255, 0, 0, 0.005)'],\r\n                  [1, 'rgba(255, 0, 0, 0.35)']\r\n                ]\r\n              },\r\n              lineWidth: 2,\r\n              yAxis: 1,\r\n              marker: {\r\n                enabled: false,\r\n                fillColor: 'transparent'\r\n              },\r\n              states: {\r\n                hover: {\r\n                  lineWidth: 2\r\n                }\r\n              }\r\n            }\r\n          ],\r\n          legend: { enabled: false },\r\n          tooltip: {\r\n            shared: true,\r\n            useHTML: true,\r\n            backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n            borderColor: '#555555',\r\n            style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n            formatter() {\r\n              const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                day: '2-digit',\r\n                month: 'short',\r\n                year: 'numeric',\r\n                hour: '2-digit',\r\n                minute: '2-digit',\r\n                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n              });\r\n              let tooltip = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n              this.points.sort((a, b) => a.series.name === 'Bitcoin Price' ? -1 : 1).forEach(point => {\r\n                const value = point.series.name === 'Bitcoin Price'\r\n                  ? formatCurrency(point.y)\r\n                  : `${point.y.toFixed(1)}%`;\r\n                tooltip += `<div>\r\n                  <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${point.color}; margin-right: 5px;\"><\/span>\r\n                  ${point.series.name}: <b>${value}<\/b>\r\n                <\/div>`;\r\n              });\r\n              return tooltip;\r\n            }\r\n          },\r\n          plotOptions: {\r\n            area: { animation: { duration: 500 } },\r\n            line: { animation: { duration: 500 } }\r\n          },\r\n          credits: { enabled: false }\r\n        });\r\n      }\r\n    } catch (error) {\r\n      console.error('Error rendering ATH Drawdown chart:', error);\r\n      if (chartContainer) {\r\n        chartContainer.innerHTML = `\r\n          <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n            Unable to load chart data. Please try again later.\r\n          <\/div>`;\r\n      }\r\n      priceDrawdownElement.textContent = 'N\/A';\r\n    } finally {\r\n      loadingElement?.classList.remove('visible');\r\n    }\r\n  }\r\n\r\n  const debouncedRender = debounce(async (value) => {\r\n    await renderATHDrawdownChart(value);\r\n  }, 100);\r\n\r\n  drawdownPeriodSelect.addEventListener('change', async (event) => {\r\n    const selectedOptionValue = event.target.value;\r\n    localStorage.setItem('drawdownPeriod', selectedOptionValue);\r\n    await debouncedRender(selectedOptionValue);\r\n  });\r\n\r\n  const initialDrawdownPeriod = localStorage.getItem('drawdownPeriod') || drawdownPeriodSelect.value;\r\n  drawdownPeriodSelect.value = initialDrawdownPeriod;\r\n  await renderATHDrawdownChart(initialDrawdownPeriod);\r\n  setupKrakenWebSocket();\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-edc82dc elementor-widget elementor-widget-html\" data-id=\"edc82dc\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingOpenInterestElement = document.getElementById('loading-open-interest');\r\n    const chartContainer = document.getElementById('open-interest-chart');\r\n    const openInterestSpan = document.getElementById('open-interest');\r\n    const openInterestPeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"open-interest-chart\"]');\r\n    let openInterestChartInstance = null;\r\n\r\n    \/\/ Inicializar chartRenderers e chartInstances globalmente, se n\u00e3o existirem\r\n    window.chartRenderers = window.chartRenderers || {};\r\n    window.chartInstances = window.chartInstances || {};\r\n    console.log('Inicializando chartRenderers para open-interest-chart');\r\n\r\n    const periodSettingsMap = {\r\n    '1d-15m': { apiDays: 1, apiInterval: '15m' },\r\n    '3d-15m': { apiDays: 3, apiInterval: '15m' },\r\n    '7d-15m': { apiDays: 7, apiInterval: '15m' },\r\n    '21d-1h': { apiDays: 21, apiInterval: '1h' },\r\n    '30d-1h': { apiDays: 30, apiInterval: '1h' },\r\n    '60d-4h': { apiDays: 60, apiInterval: '4h' },\r\n    '90d-4h': { apiDays: 90, apiInterval: '4h' },\r\n    '180d-4h': { apiDays: 180, apiInterval: '4h' },\r\n    '1y-4h': { apiDays: 365, apiInterval: '4h' },\r\n    '2y-1d': { apiDays: 730, apiInterval: '1d' }\r\n};\r\n\r\n    \/\/ Fun\u00e7\u00e3o auxiliar para formatar valores de moeda (usada no tooltip para pre\u00e7o do Bitcoin)\r\n    function formatCurrency(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    async function fetchAndRenderChart(selectedOptionValue = '21d-1h', addPrice = false) {\r\n        console.log(`Renderizando open-interest-chart com per\u00edodo ${selectedOptionValue}`);\r\n        try {\r\n            loadingOpenInterestElement?.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d-1h'];\r\n            const { apiDays, apiInterval } = settings;\r\n\r\n            const response = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${apiDays}&interval=${apiInterval}`);\r\n            if (!response.ok) {\r\n                throw new Error(`HTTP error! Status: ${response.status}`);\r\n            }\r\n            const data = await response.json();\r\n\r\n            if (!Array.isArray(data) || data.length === 0) {\r\n                throw new Error('Invalid or empty data received from API');\r\n            }\r\n\r\n            const sortedData = data.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\r\n\r\n            const openInterestChartData = [];\r\n            const btcPriceData = [];\r\n            let minOpenInterest = Infinity;\r\n\r\n            sortedData.forEach(entry => {\r\n                const openInterest = parseFloat(entry.openInterest);\r\n                const price = parseFloat(entry.price);\r\n                const timestamp = new Date(entry.timestamp).getTime();\r\n                if (!isNaN(openInterest) && openInterest < 1e10 && openInterest > 0) {\r\n                    openInterestChartData.push({\r\n                        x: timestamp,\r\n                        y: openInterest\r\n                    });\r\n                    if (openInterest < minOpenInterest) {\r\n                        minOpenInterest = openInterest;\r\n                    }\r\n                }\r\n                if (addPrice && !isNaN(price) && price > 0) {\r\n                    btcPriceData.push([timestamp, price]);\r\n                }\r\n            });\r\n\r\n            if (openInterestChartData.length === 0) {\r\n                throw new Error('No valid data available for charting');\r\n            }\r\n\r\n            const yAxisMin = minOpenInterest === Infinity ? 0 : Math.max(0, minOpenInterest * 0.95);\r\n\r\n            let series = [{\r\n                name: 'Open Interest',\r\n                data: openInterestChartData,\r\n                color: '#a259ff',\r\n                fillColor: {\r\n                    linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\r\n                    stops: [\r\n                        [0, 'rgba(162, 89, 255, 0.4)'],\r\n                        [1, 'rgba(162, 89, 255, 0)']\r\n                    ]\r\n                },\r\n                lineWidth: 2,\r\n                marker: {\r\n                    enabled: false,\r\n                    fillColor: 'transparent'\r\n                },\r\n                states: {\r\n                    hover: {\r\n                        enabled: false \r\n                    }\r\n                }\r\n            }];\r\n\r\n            let yAxis = [{\r\n                labels: {\r\n                    style: { color: '#cccccc', fontSize: '12px' },\r\n                    formatter: function() {\r\n                        return this.value.toLocaleString('en-US', { minimumFractionDigits: 0 });\r\n                    }\r\n                },\r\n                gridLineWidth: 0,\r\n                title: { text: '' },\r\n                min: yAxisMin\r\n            }];\r\n\r\n            if (addPrice && btcPriceData.length > 0) {\r\n                series.push({\r\n                    name: 'Bitcoin Price',\r\n                    data: btcPriceData,\r\n                    type: 'line',\r\n                    color: 'white',\r\n                    lineWidth: 1.5,\r\n                    marker: {\r\n                        enabled: false,       \r\n                        states: {\r\n                            hover: { enabled: false } \r\n                        }\r\n                    },\r\n                    states: {\r\n                        hover: {\r\n                            enabled: false\r\n                        }\r\n                    },\r\n                    states: { hover: { lineWidth: 1.5 } },\r\n                    yAxis: 1\r\n                });\r\n                yAxis.push({\r\n                    opposite: true,\r\n                    title: { text: null },\r\n                    labels: { enabled: false },\r\n                    gridLineWidth: 0,\r\n                    type: 'linear' \r\n                });\r\n            }\r\n\r\n            if (openInterestChartInstance) {\r\n                openInterestChartInstance.update({\r\n                    yAxis: yAxis,\r\n                    series: series\r\n                });\r\n            } else {\r\n                openInterestChartInstance = Highcharts.chart('open-interest-chart', {\r\n                    chart: {\r\n                        type: 'area',\r\n                        backgroundColor: 'black',\r\n                        margin: 20,\r\n                        style: { fontFamily: 'Arial' },\r\n                        events: {\r\n                            load: function() {\r\n                                loadingOpenInterestElement?.classList.remove('visible');\r\n                            }\r\n                        }\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        labels: { enabled: false },\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        crosshair: {\r\n                            color: '#333',\r\n                            dashStyle: 'dash'\r\n                        },\r\n                        gridLineWidth: 0\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series,\r\n                    legend: {\r\n                        enabled: false\r\n                    },\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.6)',\r\n                        borderColor: '#555',\r\n                        style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n                        followPointer: true,\r\n                        stickyTracking: false,\r\n                        formatter: function() {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', { \r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            this.points.forEach(point => {\r\n                                let value;\r\n                                if (point.series.name === 'Bitcoin Price') {\r\n                                    value = formatCurrency(point.y);\r\n                                } else {\r\n                                    value = point.y.toLocaleString('en-US', { minimumFractionDigits: 0 });\r\n                                }\r\n                                s += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${point.color}; margin-right: 5px;\"><\/span>\r\n                                    ${point.series.name}: <b>${value}<\/b>\r\n                                <\/div>`;\r\n                            });\r\n                            return s;\r\n                        }\r\n                    },\r\n                    plotOptions: {\r\n                        area: { animation: { duration: 500 } }\r\n                    },\r\n                    credits: { enabled: false }\r\n                });\r\n                window.chartInstances['open-interest-chart'] = openInterestChartInstance;\r\n            }\r\n\r\n            \/\/ Atualizar o t\u00edtulo ap\u00f3s renderizar o gr\u00e1fico\r\n            await updateTitle();\r\n        } catch (error) {\r\n            console.error('Error fetching or rendering data:', error);\r\n            chartContainer.innerHTML =\r\n                '<div style=\"color: #ff6f61; text-align: center; padding: 20px;\">Erro ao carregar os dados. Tente novamente mais tarde.<\/div>';\r\n        } finally {\r\n            loadingOpenInterestElement?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    async function updateTitle() {\r\n        if (!openInterestSpan) {\r\n            console.error('Elemento #open-interest n\u00e3o encontrado.');\r\n            return;\r\n        }\r\n\r\n        try {\r\n            const now = new Date();\r\n            const toDate = new Date(now);\r\n            const fromDate = new Date(now.getTime() - 24 * 60 * 60 * 1000);\r\n            const to = toDate.toISOString();\r\n            const from = fromDate.toISOString();\r\n\r\n            const response = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?interval=1h&from=${from}&to=${to}`);\r\n            if (!response.ok) {\r\n                throw new Error(`HTTP error! Status: ${response.status}`);\r\n            }\r\n            const data = await response.json();\r\n\r\n            if (!Array.isArray(data) || data.length < 2) {\r\n                openInterestSpan.textContent = 'N\/A';\r\n                console.warn('Dados insuficientes ou inv\u00e1lidos:', data);\r\n                return;\r\n            }\r\n\r\n            data.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\r\n\r\n            const latestData = data[data.length - 1];\r\n            const previousData = data.find(item => {\r\n                const itemTime = new Date(item.timestamp).getTime();\r\n                const targetTime = fromDate.getTime();\r\n                return Math.abs(itemTime - targetTime) <= 30 * 60 * 1000;\r\n            }) || data[0];\r\n\r\n            const openInterest = parseFloat(latestData.openInterest);\r\n            const openInterest24hAgo = parseFloat(previousData.openInterest);\r\n\r\n            if (isNaN(openInterest) || isNaN(openInterest24hAgo) || openInterest24hAgo === 0) {\r\n                openInterestSpan.textContent = 'N\/A';\r\n                console.warn('Valores de openInterest inv\u00e1lidos:', { openInterest, openInterest24hAgo });\r\n                return;\r\n            }\r\n\r\n            const percentageChange = ((openInterest - openInterest24hAgo) \/ openInterest24hAgo) * 100;\r\n            const formattedChange = percentageChange.toFixed(2);\r\n            const color = percentageChange >= 0 ? 'rgb(83, 165, 83)' : 'rgb(224, 113, 142)';\r\n            const sign = percentageChange >= 0 ? '+' : '';\r\n            openInterestSpan.innerHTML = `${sign}${Math.abs(formattedChange)}%`;\r\n            openInterestSpan.style.color = color;\r\n        } catch (err) {\r\n            openInterestSpan.textContent = 'Erro';\r\n            console.error('Erro ao buscar dados para o t\u00edtulo:', err);\r\n        }\r\n    }\r\n\r\n    \/\/ Listener para o evento de altern\u00e2ncia de Price Compare\r\n    document.addEventListener('priceCompareToggled', async (event) => {\r\n        const showPrice = event.detail;\r\n        const selectedOptionValue = openInterestPeriodSelect.value;\r\n        await fetchAndRenderChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    openInterestPeriodSelect.addEventListener('change', async (event) => {\r\n        const selectedOptionValue = event.target.value;\r\n        localStorage.setItem('openInterestPeriod', selectedOptionValue);\r\n        const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n        const showPrice = settings['price-compare'] || false;\r\n        await fetchAndRenderChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    window.chartRenderers.openInterest = Object.assign(fetchAndRenderChart, { chartId: 'open-interest-chart' });\r\n\r\n    const initialOpenInterestPeriod = localStorage.getItem('openInterestPeriod') || openInterestPeriodSelect.value;\r\n    openInterestPeriodSelect.value = initialOpenInterestPeriod;\r\n    console.log('Registrando open-interest-chart com per\u00edodo inicial:', initialOpenInterestPeriod);\r\n    const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const initialShowPrice = initialSettings['price-compare'] || false;\r\n    await fetchAndRenderChart(initialOpenInterestPeriod, initialShowPrice);\r\n    await updateTitle();\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c7c4888 elementor-widget elementor-widget-html\" data-id=\"c7c4888\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingNetShortsElement = document.getElementById('loading-net-shorts');\r\n    const chartContainer = document.getElementById('net-shorts-chart');\r\n    const netShortsPeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"net-shorts-chart\"]');\r\n    let netShortsChartInstance = null;\r\n    \/\/ Inicializar chartRenderers e chartInstances globalmente, se n\u00e3o existirem\r\n    window.chartRenderers = window.chartRenderers || {};\r\n    window.chartInstances = window.chartInstances || {};\r\n    const periodSettingsMap = {\r\n        '1d-15m': { apiDays: 1, apiInterval: '15m' },\r\n        '3d-15m': { apiDays: 3, apiInterval: '15m' },\r\n        '7d-15m': { apiDays: 7, apiInterval: '15m' },\r\n        '21d-1h': { apiDays: 21, apiInterval: '1h' },\r\n        '30d-1h': { apiDays: 30, apiInterval: '1h' },\r\n        '60d-4h': { apiDays: 60, apiInterval: '4h' },\r\n        '90d-4h': { apiDays: 90, apiInterval: '4h' },\r\n        '180d-4h': { apiDays: 180, apiInterval: '4h' },\r\n        '1y-4h': { apiDays: 365, apiInterval: '4h' },\r\n        '2y-1d': { apiDays: 730, apiInterval: '1d' }\r\n    };\r\n    \/\/ Fun\u00e7\u00e3o auxiliar para formatar valores de moeda\r\n    function formatCurrency(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n    async function fetchAndRenderChart(selectedOptionValue = '21d-1h', addPrice = false) {\r\n        try {\r\n            loadingNetShortsElement?.classList.add('visible');\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d-1h'];\r\n            const { apiDays, apiInterval } = settings; \/\/ <-- Esta linha j\u00e1 ignora krakenInterval\r\n            const response = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${apiDays}&interval=${apiInterval}`);\r\n            if (!response.ok) {\r\n                throw new Error(`HTTP error! Status: ${response.status}`);\r\n            }\r\n            const data = await response.json();\r\n            if (!Array.isArray(data) || data.length === 0) {\r\n                throw new Error('Invalid or empty data received from API');\r\n            }\r\n            const sortedData = data.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\r\n            \/\/ Apenas a fun\u00e7\u00e3o com a altera\u00e7\u00e3o\r\nfunction calculateNetShorts(data) {\r\n    const netShorts = [];\r\n    let previousPrice = null;\r\n    let previousOI = null;\r\n    let cumulativeNetShorts = 0;\r\n\r\n    for (let index = 0; index < data.length; index++) {\r\n        const currentItem = data[index];\r\n        const currentTime = new Date(currentItem.timestamp).getTime();\r\n\r\n        if (index === 0) {\r\n            previousPrice = parseFloat(currentItem.price);\r\n            previousOI = parseFloat(currentItem.openInterest);\r\n            netShorts.push({ time: currentTime, value: 0 });\r\n            continue;\r\n        }\r\n\r\n        const currentPrice = parseFloat(currentItem.price);\r\n        const currentOI = parseFloat(currentItem.openInterest);\r\n        const priceChange = currentPrice - previousPrice;\r\n        const oiChange = currentOI - previousOI;\r\n        const oiProportionalChange = (previousOI !== 0) ? (oiChange \/ previousOI) * 100 : 0;\r\n\r\n        if (priceChange < 0 && oiProportionalChange > 0) {\r\n            cumulativeNetShorts += oiProportionalChange;\r\n        } else if (priceChange > 0 && oiProportionalChange < 0) {\r\n            cumulativeNetShorts -= Math.abs(oiProportionalChange);\r\n        }\r\n\r\n        previousPrice = currentPrice;\r\n        previousOI = currentOI;\r\n        netShorts.push({ time: currentTime, value: cumulativeNetShorts });\r\n    }\r\n\r\n    \/\/ Retorna os dados brutos, sem suaviza\u00e7\u00e3o\r\n    return netShorts.map(item => [item.time, item.value]);\r\n}\r\n            const netShortsData = calculateNetShorts(sortedData);\r\n            const btcPriceData = addPrice ? sortedData\r\n                .filter(entry => !isNaN(parseFloat(entry.price)) && parseFloat(entry.price) > 0)\r\n                .map(entry => [new Date(entry.timestamp).getTime(), parseFloat(entry.price)]) : [];\r\n            if (netShortsData.length === 0) {\r\n                throw new Error('No valid data available for charting');\r\n            }\r\n            let series = [{\r\n                name: 'Net Shorts',\r\n                data: netShortsData,\r\n                color: '#1E90FF',\r\n                fillColor: {\r\n                    linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\r\n                    stops: [\r\n                        [0, 'rgba(30, 144, 255, 0.4)'],\r\n                        [1, 'rgba(30, 144, 255, 0)']\r\n                    ]\r\n                },\r\n                lineWidth: 2,\r\n                marker: {\r\n                    enabled: false,\r\n                    states: {\r\n                        hover: { enabled: false }\r\n                    }\r\n                },\r\n                states: {\r\n                    hover: {\r\n                        enabled: false\r\n                    }\r\n                }\r\n            }];\r\n            let yAxis = [{\r\n                labels: {\r\n                    style: { color: '#cccccc', fontSize: '12px' },\r\n                    formatter: function() {\r\n                        return this.value.toFixed(2) + '%';\r\n                    }\r\n                },\r\n                gridLineWidth: 0,\r\n                title: { text: '' }\r\n            }];\r\n            if (addPrice && btcPriceData.length > 0) {\r\n                series.push({\r\n                    name: 'Bitcoin Price',\r\n                    data: btcPriceData,\r\n                    type: 'line',\r\n                    color: 'white',\r\n                    lineWidth: 1.5,\r\n                    marker: {\r\n                        enabled: false,\r\n                        states: {\r\n                            hover: { enabled: false }\r\n                        }\r\n                    },\r\n                    states: {\r\n                        hover: {\r\n                            enabled: false\r\n                        }\r\n                    },\r\n                    yAxis: 1\r\n                });\r\n                yAxis.push({\r\n                    opposite: true,\r\n                    title: { text: null },\r\n                    labels: { enabled: false },\r\n                    gridLineWidth: 0,\r\n                    type: 'linear'\r\n                });\r\n            }\r\n            if (netShortsChartInstance) {\r\n                netShortsChartInstance.update({\r\n                    yAxis: yAxis,\r\n                    series: series\r\n                });\r\n            } else {\r\n                netShortsChartInstance = Highcharts.chart('net-shorts-chart', {\r\n                    chart: {\r\n                        type: 'area',\r\n                        backgroundColor: 'black',\r\n                        margin: 20,\r\n                        style: { fontFamily: 'Arial' },\r\n                        events: {\r\n                            load: function() {\r\n                                loadingNetShortsElement?.classList.remove('visible');\r\n                            }\r\n                        }\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        labels: { enabled: false },\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        crosshair: {\r\n                            color: '#333',\r\n                            dashStyle: 'dash'\r\n                        },\r\n                        gridLineWidth: 0\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series,\r\n                    legend: { enabled: false },\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.6)',\r\n                        borderColor: '#555',\r\n                        style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n                        followPointer: true,\r\n                        stickyTracking: false,\r\n                        formatter: function() {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            this.points.forEach(point => {\r\n                                let value = point.series.name === 'Bitcoin Price' ? formatCurrency(point.y) : point.y.toFixed(2) + '%';\r\n                                s += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${point.color}; margin-right: 5px;\"><\/span>\r\n                                    ${point.series.name}: <b>${value}<\/b>\r\n                                <\/div>`;\r\n                            });\r\n                            return s;\r\n                        }\r\n                    },\r\n                    plotOptions: {\r\n                        area: { animation: { duration: 500 } }\r\n                    },\r\n                    credits: { enabled: false }\r\n                });\r\n                window.chartInstances['net-shorts-chart'] = netShortsChartInstance;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error fetching or rendering data:', error);\r\n            chartContainer.innerHTML =\r\n                '<div style=\"color: #ff6f61; text-align: center; padding: 20px;\">Erro ao carregar os dados. Tente novamente mais tarde.<\/div>';\r\n        } finally {\r\n            loadingNetShortsElement?.classList.remove('visible');\r\n        }\r\n    }\r\n    document.addEventListener('priceCompareToggled', async (event) => {\r\n        const showPrice = event.detail;\r\n        const selectedOptionValue = netShortsPeriodSelect.value;\r\n        await fetchAndRenderChart(selectedOptionValue, showPrice);\r\n    });\r\n    netShortsPeriodSelect.addEventListener('change', async (event) => {\r\n        const selectedOptionValue = event.target.value;\r\n        localStorage.setItem('netShortsPeriod', selectedOptionValue);\r\n        const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n        const showPrice = settings['price-compare'] || false;\r\n        await fetchAndRenderChart(selectedOptionValue, showPrice);\r\n    });\r\n    window.chartRenderers.netShorts = Object.assign(fetchAndRenderChart, { chartId: 'net-shorts-chart' });\r\n    const initialNetShortsPeriod = localStorage.getItem('netShortsPeriod') || netShortsPeriodSelect.value;\r\n    netShortsPeriodSelect.value = initialNetShortsPeriod;\r\n    const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const initialShowPrice = initialSettings['price-compare'] || false;\r\n    await fetchAndRenderChart(initialNetShortsPeriod, initialShowPrice);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-391a848 elementor-widget elementor-widget-html\" data-id=\"391a848\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingNetLongsElement = document.getElementById('loading-net-longs');\r\n    const chartContainer = document.getElementById('net-longs-chart');\r\n    const netLongsPeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"net-longs-chart\"]');\r\n    let netLongsChartInstance = null;\r\n\r\n    window.chartRenderers = window.chartRenderers || {};\r\n    window.chartInstances = window.chartInstances || {};\r\n\r\n    const periodSettingsMap = {\r\n        '1d-15m': { apiDays: 1, apiInterval: '15m' },\r\n        '3d-15m': { apiDays: 3, apiInterval: '15m' },\r\n        '7d-15m': { apiDays: 7, apiInterval: '15m' },\r\n        '21d-1h': { apiDays: 21, apiInterval: '1h' },\r\n        '30d-1h': { apiDays: 30, apiInterval: '1h' },\r\n        '60d-4h': { apiDays: 60, apiInterval: '4h' },\r\n        '90d-4h': { apiDays: 90, apiInterval: '4h' },\r\n        '180d-4h': { apiDays: 180, apiInterval: '4h' },\r\n        '1y-4h': { apiDays: 365, apiInterval: '4h' },\r\n        '2y-1d': { apiDays: 730, apiInterval: '1d' }\r\n    };\r\n\r\n    function formatCurrency(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    async function fetchAndRenderChart(selectedOptionValue = '21d-1h', addPrice = false) {\r\n        try {\r\n            loadingNetLongsElement?.classList.add('visible');\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d-1h'];\r\n            const { apiDays, apiInterval } = settings;\r\n\r\n            const response = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${apiDays}&interval=${apiInterval}`);\r\n            if (!response.ok) {\r\n                throw new Error(`HTTP error! Status: ${response.status}`);\r\n            }\r\n            const data = await response.json();\r\n\r\n            if (!Array.isArray(data) || data.length === 0) {\r\n                throw new Error('Invalid or empty data received from API');\r\n            }\r\n\r\n            const sortedData = data.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());\r\n\r\n            \/\/ Apenas a fun\u00e7\u00e3o com a altera\u00e7\u00e3o\r\nfunction calculateNetLongs(data) {\r\n    const netLongs = [];\r\n    let previousPrice = null;\r\n    let previousOI = null;\r\n    let cumulativeNetLongs = 0;\r\n\r\n    for (let index = 0; index < data.length; index++) {\r\n        const currentItem = data[index];\r\n        const currentTime = new Date(currentItem.timestamp).getTime();\r\n\r\n        if (index === 0) {\r\n            previousPrice = parseFloat(currentItem.price);\r\n            previousOI = parseFloat(currentItem.openInterest);\r\n            netLongs.push({ time: currentTime, value: 0 });\r\n            continue;\r\n        }\r\n\r\n        const currentPrice = parseFloat(currentItem.price);\r\n        const currentOI = parseFloat(currentItem.openInterest);\r\n        const priceChange = currentPrice - previousPrice;\r\n        const oiChange = currentOI - previousOI;\r\n        const oiProportionalChange = (previousOI !== 0) ? (oiChange \/ previousOI) * 100 : 0;\r\n\r\n        if (priceChange > 0 && oiProportionalChange > 0) {\r\n            cumulativeNetLongs += oiProportionalChange;\r\n        } else if (priceChange < 0 && oiProportionalChange < 0) {\r\n            cumulativeNetLongs -= Math.abs(oiProportionalChange);\r\n        }\r\n\r\n        previousPrice = currentPrice;\r\n        previousOI = currentOI;\r\n        netLongs.push({ time: currentTime, value: cumulativeNetLongs });\r\n    }\r\n\r\n    \/\/ Retorna os dados brutos, sem suaviza\u00e7\u00e3o\r\n    return netLongs.map(item => [item.time, item.value]);\r\n}\r\n\r\n            const netLongsData = calculateNetLongs(sortedData);\r\n            const btcPriceData = addPrice ? sortedData\r\n                .filter(entry => !isNaN(parseFloat(entry.price)) && parseFloat(entry.price) > 0)\r\n                .map(entry => [new Date(entry.timestamp).getTime(), parseFloat(entry.price)]) : [];\r\n\r\n            if (netLongsData.length === 0) {\r\n                throw new Error('No valid data available for charting');\r\n            }\r\n\r\n            let series = [{\r\n                name: 'Net Longs',\r\n                data: netLongsData,\r\n                color: '#FFD700',\r\n                fillColor: {\r\n                    linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\r\n                    stops: [\r\n                        [0, 'rgba(255, 215, 0, 0.25)'],\r\n                        [1, 'rgba(255, 215, 0, 0)']\r\n                    ]\r\n                },\r\n                lineWidth: 2,\r\n                marker: {\r\n                    enabled: false,\r\n                    states: {\r\n                        hover: { enabled: false }\r\n                    }\r\n                },\r\n                states: {\r\n                    hover: {\r\n                        enabled: false\r\n                    }\r\n                }\r\n            }];\r\n\r\n            let yAxis = [{\r\n                labels: {\r\n                    style: { color: '#cccccc', fontSize: '12px' },\r\n                    formatter: function() {\r\n                        return this.value.toFixed(2) + '%';\r\n                    }\r\n                },\r\n                gridLineWidth: 0,\r\n                title: { text: '' }\r\n            }];\r\n\r\n            if (addPrice && btcPriceData.length > 0) {\r\n                series.push({\r\n                    name: 'Bitcoin Price',\r\n                    data: btcPriceData,\r\n                    type: 'line',\r\n                    color: 'white',\r\n                    lineWidth: 1.5,\r\n                    marker: {\r\n                        enabled: false,\r\n                        states: {\r\n                            hover: { enabled: false }\r\n                        }\r\n                    },\r\n                    states: {\r\n                        hover: {\r\n                            enabled: false\r\n                        }\r\n                    },\r\n                    yAxis: 1\r\n                });\r\n                yAxis.push({\r\n                    opposite: true,\r\n                    title: { text: null },\r\n                    labels: { enabled: false },\r\n                    gridLineWidth: 0,\r\n                    type: 'linear'\r\n                });\r\n            }\r\n\r\n            if (netLongsChartInstance) {\r\n                netLongsChartInstance.update({\r\n                    yAxis: yAxis,\r\n                    series: series\r\n                });\r\n            } else {\r\n                netLongsChartInstance = Highcharts.chart('net-longs-chart', {\r\n                    chart: {\r\n                        type: 'area',\r\n                        backgroundColor: 'black',\r\n                        margin: 20,\r\n                        style: { fontFamily: 'Arial' },\r\n                        events: {\r\n                            load: function() {\r\n                                loadingNetLongsElement?.classList.remove('visible');\r\n                            }\r\n                        }\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        labels: { enabled: false },\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        crosshair: {\r\n                            color: '#333',\r\n                            dashStyle: 'dash'\r\n                        },\r\n                        gridLineWidth: 0\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series,\r\n                    legend: { enabled: false },\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.6)',\r\n                        borderColor: '#555',\r\n                        style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n                        followPointer: true,\r\n                        stickyTracking: false,\r\n                        formatter: function() {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            this.points.forEach(point => {\r\n                                let value = point.series.name === 'Bitcoin Price' ? formatCurrency(point.y) : point.y.toFixed(2) + '%';\r\n                                s += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${point.color}; margin-right: 5px;\"><\/span>\r\n                                    ${point.series.name}: <b>${value}<\/b>\r\n                                <\/div>`;\r\n                            });\r\n                            return s;\r\n                        }\r\n                    },\r\n                    plotOptions: {\r\n                        area: { animation: { duration: 500 } }\r\n                    },\r\n                    credits: { enabled: false }\r\n                });\r\n                window.chartInstances['net-longs-chart'] = netLongsChartInstance;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error fetching or rendering data:', error);\r\n            chartContainer.innerHTML =\r\n                '<div style=\"color: #ff6f61; text-align: center; padding: 20px;\">Erro ao carregar os dados. Tente novamente mais tarde.<\/div>';\r\n        } finally {\r\n            loadingNetLongsElement?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    document.addEventListener('priceCompareToggled', async (event) => {\r\n        const showPrice = event.detail;\r\n        const selectedOptionValue = netLongsPeriodSelect.value;\r\n        await fetchAndRenderChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    netLongsPeriodSelect.addEventListener('change', async (event) => {\r\n        const selectedOptionValue = event.target.value;\r\n        localStorage.setItem('netLongsPeriod', selectedOptionValue);\r\n        const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n        const showPrice = settings['price-compare'] || false;\r\n        await fetchAndRenderChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    window.chartRenderers.netLongs = Object.assign(fetchAndRenderChart, { chartId: 'net-longs-chart' });\r\n\r\n    const initialNetLongsPeriod = localStorage.getItem('netLongsPeriod') || netLongsPeriodSelect.value;\r\n    netLongsPeriodSelect.value = initialNetLongsPeriod;\r\n    const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const initialShowPrice = initialSettings['price-compare'] || false;\r\n    await fetchAndRenderChart(initialNetLongsPeriod, initialShowPrice);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f5d9b35 elementor-widget elementor-widget-html\" data-id=\"f5d9b35\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n  const loadingLiquidationsElement = document.getElementById('loading-liquidations');\r\n  const chartContainer = document.getElementById('liquidations-chart');\r\n  const liquidationsPeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"liquidations-chart\"]');\r\n  let liquidationsChartInstance = null;\r\n\r\n  window.chartRenderers = window.chartRenderers || {};\r\n  window.chartInstances = window.chartInstances || {};\r\n\r\n  \/\/ Mapeamento de per\u00edodos para par\u00e2metros da nova API candles-aggregated\r\n  \/\/ exchange=BinanceUSDM, symbol=BTCUSDT, timeframe baseado no per\u00edodo\r\n  const periodSettingsMap = {\r\n    '1d-15m': { days: 1, timeframe: '15m' },\r\n    '3d-15m': { days: 3, timeframe: '15m' },\r\n    '7d-15m': { days: 7, timeframe: '15m' },\r\n    '21d-1h': { days: 21, timeframe: '1h' },\r\n    '30d-1h': { days: 30, timeframe: '1h' },\r\n    '60d-1d': { days: 60, timeframe: '1d' },\r\n    '90d-1d': { days: 90, timeframe: '1d' }\r\n  };\r\n\r\n  \/**\r\n   * Formata valores em moeda\r\n   * @param {number} value - Valor em USD\r\n   * @returns {string} Valor formatado (ex: $1.5M, $500K)\r\n   *\/\r\n  function formatCurrency(value) {\r\n    const absValue = Math.abs(value);\r\n    if (absValue >= 1e9) {\r\n      return '$' + (value \/ 1e9).toFixed(2) + 'B';\r\n    } else if (absValue >= 1e6) {\r\n      return '$' + (value \/ 1e6).toFixed(2) + 'M';\r\n    } else if (absValue >= 1e3) {\r\n      return '$' + (value \/ 1e3).toFixed(2) + 'K';\r\n    }\r\n    return '$' + absValue.toFixed(0);\r\n  }\r\n\r\n  \/**\r\n   * Busca e renderiza o gr\u00e1fico de liquida\u00e7\u00f5es\r\n   * @param {string} selectedOptionValue - Per\u00edodo selecionado (ex: '21d-1h')\r\n   * @param {boolean} addPrice - Se deve adicionar linha de pre\u00e7o do Bitcoin\r\n   *\/\r\n  async function fetchAndRenderChart(selectedOptionValue = '21d-1h', addPrice = false) {\r\n    try {\r\n      console.log(`[Liquidations] Renderizando gr\u00e1fico com per\u00edodo: ${selectedOptionValue}, mostrar pre\u00e7o: ${addPrice}`);\r\n      loadingLiquidationsElement?.classList.add('visible');\r\n\r\n      const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d-1h'];\r\n      const { days, timeframe } = settings;\r\n\r\n      \/\/ Construir URL da API de liquidations\r\n      const apiUrl = new URL('https:\/\/api.bitcoincounterflow.com\/api\/liquidations');\r\n      apiUrl.searchParams.append('exchange', 'BinanceUSDM');\r\n      apiUrl.searchParams.append('symbol', 'BTCUSDT');\r\n      apiUrl.searchParams.append('timeframe', timeframe);\r\n      apiUrl.searchParams.append('days', days);\r\n      \r\n      \/\/ Otimiza\u00e7\u00e3o: Se addPrice \u00e9 true, j\u00e1 pedimos o pre\u00e7o na mesma requisi\u00e7\u00e3o\r\n      if (addPrice) {\r\n        apiUrl.searchParams.append('with_price', '1');\r\n      }\r\n\r\n      console.log(`[Liquidations] Buscando dados de: ${apiUrl.toString()}`);\r\n      \r\n      const response = await fetch(apiUrl.toString());\r\n      if (!response.ok) {\r\n        throw new Error(`HTTP error (Liquidations)! Status: ${response.status}`);\r\n      }\r\n      \r\n      const candles = await response.json();\r\n      \r\n      if (!Array.isArray(candles) || candles.length === 0) {\r\n        console.error('[Liquidations] Dados inv\u00e1lidos ou vazios:', candles);\r\n        throw new Error('Dados inv\u00e1lidos ou vazios recebidos da API');\r\n      }\r\n\r\n      console.log(`[Liquidations] Recebidos ${candles.length} candles`);\r\n\r\n      \/\/ Prepare chart data from liquidation candles\r\n      const shortData = [];\r\n      const longData = [];\r\n      const btcPriceData = [];\r\n      \r\n      \/\/ Otimiza\u00e7\u00e3o: Ordena\u00e7\u00e3o \u00fanica e loop \u00fanico para preparar todos os dados\r\n      candles.sort((a, b) => a.timestamp - b.timestamp);\r\n      \r\n      let maxAbsLiquidation = 0;\r\n      \r\n      for (let i = 0; i < candles.length; i++) {\r\n        const c = candles[i];\r\n        const sVol = parseFloat(c.buy_volume_usd) || 0;\r\n        const lVol = parseFloat(c.sell_volume_usd) || 0;\r\n        \r\n        shortData.push([c.timestamp, sVol]);\r\n        longData.push([c.timestamp, -lVol]);\r\n        \r\n        if (sVol > maxAbsLiquidation) maxAbsLiquidation = sVol;\r\n        if (lVol > maxAbsLiquidation) maxAbsLiquidation = lVol;\r\n\r\n        \/\/ Se o pre\u00e7o veio na resposta (with_price=1), usamos diretamente\r\n        if (addPrice && c.close_price) {\r\n          btcPriceData.push([c.timestamp, parseFloat(c.close_price)]);\r\n        }\r\n      }\r\n\r\n      \/\/ Calcular step para labels do eixo X\r\n      const chartWidth = chartContainer.offsetWidth;\r\n      const labelWidth = 45;\r\n      const minLabels = 4;\r\n      const maxLabelsPossible = Math.floor(chartWidth \/ labelWidth);\r\n      const numberOfPoints = shortData.length;\r\n      let step = 1;\r\n      if (numberOfPoints > maxLabelsPossible) {\r\n        step = Math.ceil(numberOfPoints \/ maxLabelsPossible);\r\n      }\r\n      if (numberOfPoints \/ step < minLabels) {\r\n        step = Math.floor(numberOfPoints \/ minLabels);\r\n        if (step < 1) step = 1;\r\n      }\r\n\r\n      \/\/ Configurar s\u00e9ries do gr\u00e1fico\r\n      let series = [\r\n        {\r\n          name: 'Short Liquidations',\r\n          data: shortData,\r\n          color: '#00FFCC',\r\n          stack: 'liquidations',\r\n          tooltip: { valueSuffix: ' USD' }\r\n        },\r\n        {\r\n          name: 'Long Liquidations',\r\n          data: longData,\r\n          color: '#FF3366',\r\n          stack: 'liquidations',\r\n          tooltip: { valueSuffix: ' USD' }\r\n        }\r\n      ];\r\n\r\n      let yAxis = [\r\n        {\r\n          title: { text: '' },\r\n          gridLineWidth: 0,\r\n          min: maxAbsLiquidation ? -maxAbsLiquidation * 1.05 : null,\r\n          max: maxAbsLiquidation ? maxAbsLiquidation * 1.05 : null,\r\n          labels: {\r\n            enabled: true,\r\n            formatter: function() {\r\n              return formatCurrency(Math.abs(this.value));\r\n            },\r\n            style: { color: '#ccc', fontSize: '12px' }\r\n          }\r\n        }\r\n      ];\r\n\r\n      \/\/ Adicionar s\u00e9rie de pre\u00e7o se solicitado\r\n      if (addPrice && btcPriceData.length > 0) {\r\n        series.push({\r\n          name: 'Bitcoin Price',\r\n          type: 'line',\r\n          data: btcPriceData,\r\n          color: 'white',\r\n          lineWidth: 1.5,\r\n          states: { hover: { lineWidth: 1.5, lineWidthPlus: 0 } },\r\n          marker: {\r\n            enabled: false,\r\n            states: { hover: { enabled: false } }\r\n          },\r\n          yAxis: 1\r\n        });\r\n        yAxis.push({\r\n          opposite: true,\r\n          title: { text: null },\r\n          labels: { enabled: false },\r\n          gridLineWidth: 0,\r\n          type: 'linear'\r\n        });\r\n      }\r\n\r\n      \/\/ Atualizar ou criar gr\u00e1fico\r\n      const responsiveHeight = Math.max(220, Math.round(chartContainer.offsetWidth * 0.55));\r\n\r\n      if (liquidationsChartInstance) {\r\n        console.log('[Liquidations] Atualizando gr\u00e1fico existente');\r\n        liquidationsChartInstance.update({ series, xAxis: { labels: { step } }, yAxis }, true);\r\n        try { liquidationsChartInstance.setSize(null, responsiveHeight, false); } catch (e) {}\r\n      } else {\r\n        console.log('[Liquidations] Criando novo gr\u00e1fico');\r\n        liquidationsChartInstance = Highcharts.chart('liquidations-chart', {\r\n          chart: {\r\n            type: 'column',\r\n            backgroundColor: 'black',\r\n            marginLeft: 20,\r\n            marginRight: 20,\r\n            marginBottom: 50,\r\n            marginTop: 20,\r\n            height: responsiveHeight,\r\n            animation: { duration: 500 },\r\n            panning: true,\r\n            panKey: 'shift',\r\n            events: {\r\n              load: function() {\r\n                loadingLiquidationsElement?.classList.remove('visible');\r\n                const columnSeries = this.series.find(s => s.type === 'column');\r\n                if (columnSeries?.points.length > 0) {\r\n                  const columnWidth = columnSeries.points[0].shapeArgs.width;\r\n                  this.xAxis[0].update(\r\n                    {\r\n                      crosshair: {\r\n                        color: 'rgba(50,50,50,0.5)',\r\n                        zIndex: 5,\r\n                        width: columnWidth,\r\n                        snap: true\r\n                      }\r\n                    },\r\n                    false\r\n                  );\r\n                  this.redraw();\r\n                }\r\n              },\r\n              render: function() {\r\n                const chartWidth = this.chartWidth;\r\n                const labelWidth = 45;\r\n                const minLabels = 4;\r\n                const maxLabelsPossible = Math.floor(chartWidth \/ labelWidth);\r\n                const numberOfPoints = this.series[0].data.length;\r\n                let newStep = 1;\r\n                if (numberOfPoints > maxLabelsPossible) {\r\n                  newStep = Math.ceil(numberOfPoints \/ maxLabelsPossible);\r\n                }\r\n                if (numberOfPoints \/ newStep < minLabels) {\r\n                  newStep = Math.floor(numberOfPoints \/ minLabels);\r\n                  if (newStep < 1) newStep = 1;\r\n                }\r\n                const columnSeries = this.series.find(s => s.type === 'column');\r\n                let columnWidth = columnSeries?.points[0]?.shapeArgs?.width || 5;\r\n                if (\r\n                  this.xAxis[0].options.labels.step !== newStep ||\r\n                  this.xAxis[0].options.crosshair.width !== columnWidth\r\n                ) {\r\n                  this.xAxis[0].update(\r\n                    {\r\n                      labels: { step: newStep },\r\n                      crosshair: { color: 'rgba(50,50,50,0.5)', zIndex: 5, width: columnWidth, snap: true }\r\n                    },\r\n                    false\r\n                  );\r\n                  this.redraw();\r\n                }\r\n              }\r\n            }\r\n          },\r\n          title: { text: '' }, \/\/ T\u00cdTULO REMOVIDO (como no original)\r\n          xAxis: {\r\n            type: 'datetime',\r\n            labels: {\r\n              formatter: function() {\r\n                return Highcharts.dateFormat('%d\/%m', this.value);\r\n              },\r\n              style: { color: 'transparent', fontSize: '12px' },\r\n              rotation: 0\r\n            },\r\n            lineColor: 'transparent',\r\n            tickLength: 0,\r\n            gridLineWidth: 0,\r\n            tickAmount: 5,\r\n            crosshair: { color: 'rgba(50,50,50,0.5)', zIndex: 5, width: 5, snap: true }\r\n          },\r\n          yAxis,\r\n          tooltip: {\r\n            shared: true,\r\n            useHTML: true,\r\n            backgroundColor: 'rgba(17,17,17,0.6)',\r\n            borderColor: '#555',\r\n            style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n            followPointer: true,\r\n            stickyTracking: false,\r\n            formatter: function() {\r\n              const date = new Date(this.x).toLocaleString('en-US', {\r\n                day: '2-digit',\r\n                month: 'short',\r\n                year: 'numeric',\r\n                hour: '2-digit',\r\n                minute: '2-digit',\r\n                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n              });\r\n              let s = `<div style=\"text-align:right;font-size:12px;padding-bottom:5px;\"><b>${date}<\/b><\/div>`;\r\n              this.points.forEach(point => {\r\n                const isLiquidation = point.series.name !== 'Bitcoin Price';\r\n                const value = formatCurrency(Math.abs(point.y));\r\n                const color = isLiquidation ? point.color : 'white';\r\n                s += `<div><span style=\"display:inline-block;width:6px;height:6px;border-radius:50%;background-color:${color};margin-right:5px;\"><\/span>${point.series.name}: <b>${value}<\/b><\/div>`;\r\n              });\r\n              return s;\r\n            }\r\n          },\r\n          legend: { enabled: false },\r\n          series,\r\n          plotOptions: {\r\n            column: {\r\n              stacking: 'normal',\r\n              borderWidth: 0,\r\n              animation: { duration: 500 },\r\n              pointPadding: 0.12,\r\n              groupPadding: 0.06\r\n            },\r\n            line: {\r\n              animation: { duration: 500 }\r\n            }\r\n          },\r\n          credits: { enabled: false }\r\n        });\r\n        window.chartInstances['liquidations-chart'] = liquidationsChartInstance;\r\n      }\r\n    } catch (error) {\r\n      console.error('[Liquidations] Erro ao buscar ou renderizar dados:', error);\r\n      chartContainer.innerHTML = '<div style=\"color:#ff6f61;text-align:center;padding:20px;\">\u274c Erro ao carregar dados de liquida\u00e7\u00f5es.<\/div>';\r\n    } finally {\r\n      loadingLiquidationsElement?.classList.remove('visible');\r\n    }\r\n  }\r\n\r\n  \/\/ Listener para toggle de pre\u00e7o\r\n  document.addEventListener('priceCompareToggled', async (event) => {\r\n    const showPrice = event.detail;\r\n    const selectedOptionValue = liquidationsPeriodSelect.value;\r\n    await fetchAndRenderChart(selectedOptionValue, showPrice);\r\n  });\r\n\r\n  \/\/ Listener para mudan\u00e7a de per\u00edodo\r\n  liquidationsPeriodSelect.addEventListener('change', async (event) => {\r\n    const selectedOptionValue = event.target.value;\r\n    localStorage.setItem('liquidationsPeriod', selectedOptionValue);\r\n    const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const showPrice = settings['price-compare'] || false;\r\n    await fetchAndRenderChart(selectedOptionValue, showPrice);\r\n  });\r\n\r\n  \/\/ Inicializa\u00e7\u00e3o\r\n  const initialLiquidationsPeriod = localStorage.getItem('liquidationsPeriod') || '21d-1h';\r\n  liquidationsPeriodSelect.value = initialLiquidationsPeriod;\r\n  const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n  const initialShowPrice = initialSettings['price-compare'] || false;\r\n  await fetchAndRenderChart(initialLiquidationsPeriod, initialShowPrice);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-934abc5 elementor-widget elementor-widget-html\" data-id=\"934abc5\" 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    .container-estilo {\r\n        container-type: inline-size;\r\n    }\r\n\r\n    @container (max-width: 328px) {\r\n        .google-img {\r\n            display: none !important;\r\n        }\r\n    }\r\n<\/style>\r\n\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n    const chartContainer = document.getElementById('trends-bitcoin-chart');\r\n    const loadingElement = document.getElementById('loading');\r\n    const periodSelect = document.querySelector('.chart-period-select[data-chart-id=\"trends-bitcoin-chart\"]');\r\n    let chart = null;\r\n\r\n    window.chartRenderers = window.chartRenderers || {};\r\n    window.chartInstances = window.chartInstances || {};\r\n\r\n    const periodSettingsMap = {\r\n        '1d': { days: 1, apiInterval: '2h' },\r\n        '3d': { days: 3, apiInterval: '2h' },\r\n        '7d': { days: 7, apiInterval: '2h' },\r\n        '21d': { days: 21, apiInterval: '2h' },\r\n        '30d': { days: 30, apiInterval: '2h' },\r\n        '60d': { days: 60, apiInterval: '2h' },\r\n        '90d': { days: 90, apiInterval: '2h' },\r\n        '180d': { days: 180, apiInterval: '2h' },\r\n        '1y': { days: 365, apiInterval: '2h' },\r\n        '2y': { days: 730, apiInterval: '2h' },\r\n        'all': { days: Infinity, apiInterval: '2h' }\r\n    };\r\n\r\n    function formatCurrency(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    function getStartOfWeek(timestamp) {\r\n        const date = new Date(timestamp);\r\n        const day = date.getDay();\r\n        date.setDate(date.getDate() - day);\r\n        date.setHours(0, 0, 0, 0);\r\n        return date.getTime();\r\n    }\r\n\r\n    function findTrendsValue(timestamp, trendsData) {\r\n        const targetTimestamp = getStartOfWeek(timestamp);\r\n        const trendsPoint = trendsData.find(item => {\r\n            const itemTimestamp = getStartOfWeek(item.x);\r\n            return itemTimestamp === targetTimestamp;\r\n        });\r\n        return trendsPoint ? { y: trendsPoint.y, color: '#FFA500' } : null;\r\n    }\r\n\r\n    async function updateChart(selectedPeriod = '1y', addPrice = false) {\r\n        try {\r\n            loadingElement.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedPeriod] || periodSettingsMap['1y'];\r\n            const { days, apiInterval } = settings;\r\n\r\n            const [trendsResponse, bitcoinResponse] = await Promise.all([\r\n                fetch('https:\/\/serverless-vercel-nine.vercel.app\/api\/google-trends').then(res => res.json()),\r\n                fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${days}&interval=${apiInterval}`).then(res => res.json())\r\n            ]);\r\n\r\n            if (!Array.isArray(trendsResponse) || trendsResponse.length === 0) {\r\n                throw new Error('Invalid or empty Google Trends data received from API');\r\n            }\r\n            if (!Array.isArray(bitcoinResponse) || bitcoinResponse.length === 0) {\r\n                throw new Error('Invalid or empty Bitcoin price data received from API');\r\n            }\r\n\r\n            const currentDate = new Date().getTime();\r\n            const intervalInMs = days === Infinity ? Infinity : days * 24 * 60 * 60 * 1000;\r\n            const trendsSeriesData = trendsResponse\r\n                .filter(item => days === Infinity || (currentDate - new Date(item.date).getTime()) <= intervalInMs)\r\n                .map(item => ({\r\n                    x: new Date(item.date).getTime(),\r\n                    y: parseInt(item.interest)\r\n                }))\r\n                .sort((a, b) => a.x - b.x);\r\n\r\n            const bitcoinSeriesData = addPrice ? bitcoinResponse\r\n                .filter(entry => {\r\n                    const price = parseFloat(entry.price);\r\n                    const isValid = !isNaN(price) && price > 0;\r\n                    if (!isValid) console.warn(`Invalid price data: ${entry.price}`);\r\n                    return isValid;\r\n                })\r\n                .map(entry => ({\r\n                    x: new Date(entry.timestamp).getTime(),\r\n                    y: parseFloat(entry.price)\r\n                }))\r\n                .sort((a, b) => a.x - b.x)\r\n                : [];\r\n\r\n            const lastTrendsValue = trendsSeriesData.length > 0 ? trendsSeriesData[trendsSeriesData.length - 1].y.toFixed(0) : '-';\r\n            document.getElementById('google-trends-value').textContent = lastTrendsValue;\r\n\r\n            console.log('Google Trends data:', trendsSeriesData);\r\n            console.log('Bitcoin Price data:', bitcoinSeriesData);\r\n\r\n            const numberOfCategories = trendsSeriesData.length;\r\n\r\n            const chartWidth = chartContainer.offsetWidth;\r\n            const estimatedLabelWidth = 45;\r\n            const minLabelsToShow = 4;\r\n            let calculatedStep = 1;\r\n\r\n            if (numberOfCategories > Math.floor(chartWidth \/ estimatedLabelWidth)) {\r\n                calculatedStep = Math.ceil(numberOfCategories \/ Math.floor(chartWidth \/ estimatedLabelWidth));\r\n            }\r\n            if (numberOfCategories \/ calculatedStep < minLabelsToShow) {\r\n                calculatedStep = Math.floor(numberOfCategories \/ minLabelsToShow);\r\n                if (calculatedStep < 1) calculatedStep = 1;\r\n            }\r\n\r\n            let series = [{\r\n                name: 'Google Trends (Bitcoin)',\r\n                data: trendsSeriesData,\r\n                color: '#FFA500',\r\n                lineWidth: 1.5,\r\n                marker: {\r\n                    enabled: false,\r\n                    states: {\r\n                        hover: { enabled: false }\r\n                    }\r\n                },\r\n                states: { hover: { lineWidth: 1.5 } }\r\n            }];\r\n\r\n            let yAxis = [{\r\n                title: { text: '' },\r\n                max: 100,\r\n                min: 0,\r\n                tickAmount: 4,\r\n                labels: { enabled: false },\r\n                gridLineColor: 'rgba(221, 221, 221, 0.1)',\r\n                gridLineWidth: 0\r\n            }];\r\n\r\n            if (addPrice && bitcoinSeriesData.length > 0) {\r\n                series.push({\r\n                    name: 'Bitcoin Price',\r\n                    data: bitcoinSeriesData,\r\n                    yAxis: 1,\r\n                    color: '#FFFFFF',\r\n                    lineWidth: 1.5,\r\n                    marker: {\r\n                        enabled: false,\r\n                        states: {\r\n                            hover: { enabled: false }\r\n                        }\r\n                    },\r\n                    states: { hover: { lineWidth: 1.5 } }\r\n                });\r\n                yAxis.push({\r\n                    title: { text: '' },\r\n                    opposite: true,\r\n                    labels: { enabled: false },\r\n                    gridLineColor: 'rgba(221, 221, 221, 0.1)',\r\n                    gridLineWidth: 0\r\n                });\r\n            } else if (addPrice) {\r\n                console.warn('No valid Bitcoin Price data available for rendering');\r\n            }\r\n\r\n            if (chart) {\r\n                chart.update({\r\n                    series: series,\r\n                    xAxis: {\r\n                        labels: { step: calculatedStep },\r\n                        min: days === Infinity ? undefined : new Date().getTime() - days * 24 * 60 * 60 * 1000,\r\n                        max: new Date().getTime()\r\n                    },\r\n                    yAxis: yAxis\r\n                }, true);\r\n            } else {\r\n                chart = Highcharts.chart('trends-bitcoin-chart', {\r\n                    chart: {\r\n                        type: 'line',\r\n                        backgroundColor: 'transparent',\r\n                        marginRight: 20,\r\n                        marginLeft: 20,\r\n                        marginBottom: 20,\r\n                        marginTop: 20,\r\n                        style: { fontFamily: 'Arial' },\r\n                        events: {\r\n                            load: function() {\r\n                                loadingElement.classList.remove('visible');\r\n                                this.xAxis[0].update({\r\n                                    crosshair: {\r\n                                        color: 'rgba(50, 50, 50, 0.5)',\r\n                                        zIndex: 5,\r\n                                        width: 1,\r\n                                        dashStyle: 'Dash',\r\n                                        snap: true\r\n                                    }\r\n                                }, false);\r\n                                this.redraw();\r\n                            },\r\n                            render: function() {\r\n                                const currentChartWidth = this.chartWidth;\r\n                                const currentNumberOfCategories = numberOfCategories;\r\n                                const estimatedLabelWidth = 45;\r\n                                const minLabelsToShow = 4;\r\n                                let newCalculatedStep = 1;\r\n\r\n                                if (currentNumberOfCategories > Math.floor(currentChartWidth \/ estimatedLabelWidth)) {\r\n                                    newCalculatedStep = Math.ceil(currentNumberOfCategories \/ Math.floor(currentChartWidth \/ estimatedLabelWidth));\r\n                                }\r\n                                if (currentNumberOfCategories \/ newCalculatedStep < minLabelsToShow) {\r\n                                    newCalculatedStep = Math.floor(currentNumberOfCategories \/ minLabelsToShow);\r\n                                    if (newCalculatedStep < 1) newCalculatedStep = 1;\r\n                                }\r\n\r\n                                const crosshairWidth = 1;\r\n\r\n                                if (this.xAxis[0].options.labels.step !== newCalculatedStep || \r\n                                    this.xAxis[0].options.crosshair.width !== crosshairWidth) {\r\n                                    this.xAxis[0].update({\r\n                                        labels: { step: newCalculatedStep },\r\n                                        crosshair: {\r\n                                            color: 'rgba(50, 50, 50, 0.5)',\r\n                                            zIndex: 5,\r\n                                            width: crosshairWidth,\r\n                                            dashStyle: 'Dash',\r\n                                            snap: true\r\n                                        }\r\n                                    }, false);\r\n                                    this.redraw();\r\n                                }\r\n                            }\r\n                        }\r\n                    },\r\n                    title: { text: '' },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        title: { text: null },\r\n                        labels: {\r\n                            formatter: function() {\r\n                                return Highcharts.dateFormat('%d\/%m', this.value);\r\n                            },\r\n                            rotation: 0,\r\n                            style: { color: 'transparent', fontSize: '12px' },\r\n                            step: calculatedStep\r\n                        },\r\n                        tickLength: 0,\r\n                        lineColor: 'transparent',\r\n                        gridLineColor: 'rgba(221, 221, 221, 0.1)',\r\n                        crosshair: {\r\n                            color: 'rgba(50, 50, 50, 0.5)',\r\n                            zIndex: 5,\r\n                            width: 1,\r\n                            dashStyle: 'Dash',\r\n                            snap: true\r\n                        },\r\n                        tickPixelInterval: 25,\r\n                        min: days === Infinity ? undefined : new Date().getTime() - days * 24 * 60 * 60 * 1000,\r\n                        max: new Date().getTime()\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series,\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.6)',\r\n                        borderColor: '#555',\r\n                        style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n                        followPointer: true,\r\n                        stickyTracking: false,\r\n                        positioner: function(labelWidth, labelHeight, point) {\r\n                            const chart = this.chart;\r\n                            const x = point.plotX + chart.plotLeft;\r\n                            const y = point.plotY + chart.plotTop;\r\n                            const boundedX = Math.max(chart.plotLeft, Math.min(x - labelWidth \/ 2, chart.plotLeft + chart.plotWidth - labelWidth));\r\n                            const boundedY = Math.max(chart.plotTop, Math.min(y - labelHeight - 10, chart.plotTop + chart.plotHeight - labelHeight));\r\n                            return {\r\n                                x: boundedX,\r\n                                y: boundedY\r\n                            };\r\n                        },\r\n                        formatter: function() {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            \r\n                            this.points.forEach(point => {\r\n                                if (point.series.name === 'Bitcoin Price') {\r\n                                    s += `<div>\r\n                                        <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: white; margin-right: 5px;\"><\/span>\r\n                                        ${point.series.name}: <b>${formatCurrency(point.y)}<\/b>\r\n                                    <\/div>`;\r\n                                }\r\n                            });\r\n\r\n                            const trendsPoint = findTrendsValue(this.x, trendsSeriesData);\r\n                            if (trendsPoint) {\r\n                                s += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${trendsPoint.color}; margin-right: 5px;\"><\/span>\r\n                                    Google Trends (Bitcoin): <b>${trendsPoint.y.toFixed(0)}<\/b>\r\n                                <\/div>`;\r\n                            }\r\n                            \r\n                            return s;\r\n                        }\r\n                    },\r\n                    plotOptions: {\r\n                        series: {\r\n                            states: {\r\n                                inactive: {\r\n                                    opacity: 1\r\n                                }\r\n                            }\r\n                        }\r\n                    },\r\n                    legend: { enabled: false },\r\n                    credits: { enabled: false },\r\n                    exporting: { enabled: false }\r\n                });\r\n                window.chartInstances['trends-bitcoin-chart'] = chart;\r\n            }\r\n        } catch (error) {\r\n            console.error('Erro ao carregar dados:', error);\r\n            chartContainer.innerHTML = `\r\n                <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n                    N\u00e3o foi poss\u00edvel carregar os dados do gr\u00e1fico: ${error.message}. Tente novamente mais tarde.\r\n                <\/div>`;\r\n        } finally {\r\n            loadingElement.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    document.addEventListener('priceCompareToggled', async (event) => {\r\n        console.log('Price Compare toggled:', event.detail);\r\n        const showPrice = event.detail;\r\n        const selectedPeriod = periodSelect.value;\r\n        await updateChart(selectedPeriod, showPrice);\r\n    });\r\n\r\n    periodSelect.addEventListener('change', async (event) => {\r\n        const selectedPeriod = event.target.value;\r\n        localStorage.setItem('googleTrendsPeriod', selectedPeriod);\r\n        const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n        const showPrice = settings['price-compare'] || false;\r\n        await updateChart(selectedPeriod, showPrice);\r\n    });\r\n\r\n    const initialPeriod = localStorage.getItem('googleTrendsPeriod') || '1y';\r\n    periodSelect.value = initialPeriod;\r\n    const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const initialShowPrice = initialSettings['price-compare'] || false;\r\n    console.log('Initial render with period:', initialPeriod, 'addPrice:', initialShowPrice);\r\n    updateChart(initialPeriod, initialShowPrice);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3806dc8 elementor-widget elementor-widget-html\" data-id=\"3806dc8\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingElement = document.getElementById('loading-dominance');\r\n    const chartContainer = document.getElementById('btc-dominance-chart');\r\n    const periodSelect = document.querySelector('.chart-period-select[data-chart-id=\"btc-dominance-chart\"]');\r\n    let chartInstance = null;\r\n\r\n    const periodSettingsMap = {\r\n        '1d-15m': { days: 1, interval: '15m' },\r\n        '3d-15m': { days: 3, interval: '15m' },\r\n        '7d-15m': { days: 7, interval: '15m' },\r\n        '21d-15m': { days: 21, interval: '15m' },\r\n        '30d-1h': { days: 30, interval: '1h' },\r\n        '60d-1d': { days: 60, interval: '1d' },\r\n        '90d-1d': { days: 90, interval: '1d' },\r\n        '1y-1d': { days: 365, interval: '1d' },\r\n        '3y-1w': { days: 1095, interval: '1w' },\r\n        '5y-1w': { days: 1825, interval: '1w' },\r\n        'all-1m': { days: Math.ceil((new Date() - new Date('2011-01-01')) \/ (1000 * 60 * 60 * 24)), interval: '1m' }\r\n    };\r\n\r\n    function formatPrice(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    async function renderDominanceChart(selectedOptionValue = '1y-1d') {\r\n        try {\r\n            loadingElement?.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['1y-1d'];\r\n            const { days } = settings;\r\n            const cutoffDate = new Date();\r\n            cutoffDate.setDate(cutoffDate.getDate() - days);\r\n\r\n            let data;\r\n            try {\r\n                const response = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/nupl-history?days=${days}&interval=${settings.interval}`);\r\n                if (!response.ok) {\r\n                    throw new Error(`HTTP error! Status: ${response.status}`);\r\n                }\r\n                data = await response.json();\r\n            } catch (apiError) {\r\n                console.warn('API parameters not supported, fetching full dataset:', apiError);\r\n                const response = await fetch('https:\/\/api.bitcoincounterflow.com\/api\/nupl-history');\r\n                if (!response.ok) {\r\n                    throw new Error(`HTTP error on fallback fetch! Status: ${response.status}`);\r\n                }\r\n                data = await response.json();\r\n            }\r\n\r\n            if (!Array.isArray(data) || data.length === 0) {\r\n                throw new Error('Invalid or empty data received from API');\r\n            }\r\n\r\n            const chartData = data\r\n                .filter(entry => {\r\n                    const timestamp = new Date(entry.timestamp);\r\n                    return timestamp >= new Date('2012-08-03') &&\r\n                           timestamp >= cutoffDate &&\r\n                           !isNaN(parseFloat(entry.btcPrice)) &&\r\n                           !isNaN(parseFloat(entry.dominance));\r\n                })\r\n                .map(entry => ({\r\n                    x: new Date(entry.timestamp).getTime(),\r\n                    btcPrice: parseFloat(entry.btcPrice),\r\n                    dominance: parseFloat(entry.dominance)\r\n                }));\r\n\r\n            if (chartData.length === 0) {\r\n                throw new Error('No valid data available after filtering for the selected period');\r\n            }\r\n\r\n            const dominanceValues = chartData.map(entry => entry.dominance);\r\n            const minDominance = Math.min(...dominanceValues);\r\n            const maxDominance = Math.max(...dominanceValues);\r\n            const dominanceRange = maxDominance - minDominance;\r\n            const dominanceMin = Math.max(0, minDominance - dominanceRange * 0.1);\r\n            const dominanceMax = maxDominance + dominanceRange * 0.1;\r\n\r\n            if (chartInstance) {\r\n                chartInstance.update({\r\n                    series: [\r\n                        { name: 'BTC Price', data: chartData.map(entry => [entry.x, entry.btcPrice]) },\r\n                        { name: 'BTC Dominance', data: chartData.map(entry => [entry.x, entry.dominance]) }\r\n                    ],\r\n                    yAxis: [\r\n                        { \/* BTC Price yAxis remains unchanged *\/ },\r\n                        {\r\n                            title: { text: null },\r\n                            labels: {\r\n                                enabled: true,\r\n                                format: '{value}%',\r\n                                style: { color: '#00bcd4', fontSize: '11px' }\r\n                            },\r\n                            gridLineWidth: 0,\r\n                            min: dominanceMin,\r\n                            max: dominanceMax,\r\n                            opposite: true\r\n                        }\r\n                    ]\r\n                });\r\n            } else {\r\n                chartInstance = Highcharts.chart('btc-dominance-chart', {\r\n                    chart: {\r\n                        type: 'line',\r\n                        backgroundColor: '#000000',\r\n                        margin: 20,\r\n                        spacing: [0, 0, 0, 0],\r\n                        style: { fontFamily: 'Arial, sans-serif' },\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        labels: { enabled: false },\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        gridLineWidth: 0,\r\n                        crosshair: {\r\n                            color: '#333',\r\n                            dashStyle: 'dash'\r\n                        }\r\n                    },\r\n                    yAxis: [\r\n                        {\r\n                            title: { text: null },\r\n                            labels: { enabled: false },\r\n                            gridLineWidth: 0,\r\n                            type: 'logarithmic',\r\n                            opposite: false\r\n                        },\r\n                        {\r\n                            title: { text: null },\r\n                            labels: {\r\n                                enabled: true,\r\n                                format: '{value}%',\r\n                                style: { color: 'transparent', fontSize: '11px' }\r\n                            },\r\n                            gridLineWidth: 0,\r\n                            min: dominanceMin,\r\n                            max: dominanceMax,\r\n                            opposite: true\r\n                        }\r\n                    ],\r\n                    series: [\r\n                        {\r\n                            name: 'BTC Price',\r\n                            data: chartData.map(entry => [entry.x, entry.btcPrice]),\r\n                            yAxis: 0,\r\n                            color: '#ffffff',\r\n                            lineWidth: 2,\r\n                            marker: {\r\n                                enabled: false,\r\n                                fillColor: 'transparent'\r\n                            },\r\n                            states: {\r\n                                hover: { lineWidth: 2 },\r\n                                inactive: { enabled: false }\r\n                            }\r\n                        },\r\n                        {\r\n                            name: 'BTC Dominance',\r\n                            data: chartData.map(entry => [entry.x, entry.dominance]),\r\n                            yAxis: 1,\r\n                            color: '#00bcd4',\r\n                            lineWidth: 3,\r\n                            dashStyle: 'ShortDash',\r\n                            marker: {\r\n                                enabled: false,\r\n                                fillColor: 'transparent'\r\n                            },\r\n                            states: {\r\n                                hover: { lineWidth: 3 },\r\n                                inactive: { enabled: false }\r\n                            }\r\n                        }\r\n                    ],\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n                        borderColor: '#555555',\r\n                        style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n                        formatter: function() {\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 5px;\"><b>${Highcharts.dateFormat('%b %e, %Y', this.x)}<\/b><\/div>`;\r\n                            this.points.forEach(point => {\r\n                                let bullet = `<span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${point.color}; margin-right: 5px;\"><\/span>`;\r\n                                if (point.series.name === 'BTC Dominance') {\r\n                                    s += `<div>${bullet} ${point.series.name}: <b>${point.y.toFixed(2)}%<\/b><\/div>`;\r\n                                } else {\r\n                                    s += `<div>${bullet} ${point.series.name}: <b>${formatPrice(point.y)}<\/b><\/div>`;\r\n                                }\r\n                            });\r\n                            return s;\r\n                        }\r\n                    },\r\n                    legend: { enabled: false },\r\n                    plotOptions: {\r\n                        series: { animation: { duration: 500 } }\r\n                    },\r\n                    credits: { enabled: false }\r\n                });\r\n            }\r\n        } catch (error) {\r\n            console.error('Error rendering Dominance chart:', error.message);\r\n            if (chartContainer) {\r\n                chartContainer.innerHTML = `\r\n                    <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n                        Unable to load chart data: ${error.message}. Please try again later.\r\n                    <\/div>`;\r\n            }\r\n        } finally {\r\n            loadingElement?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    periodSelect.addEventListener('change', async (event) => {\r\n        const selectedOptionValue = event.target.value;\r\n        localStorage.setItem('dominancePeriod', selectedOptionValue);\r\n        await renderDominanceChart(selectedOptionValue);\r\n    });\r\n\r\n    const initialPeriod = localStorage.getItem('dominancePeriod') || '1y-1d';\r\n    periodSelect.value = initialPeriod;\r\n    await renderDominanceChart(initialPeriod);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba1b296 elementor-widget elementor-widget-html\" data-id=\"ba1b296\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingLongShortRatio = document.getElementById('loading-long-short-ratio');\r\n    const chartContainerLongShortRatio = document.getElementById('long-short-ratio-chart');\r\n    const globalRatioElement = document.getElementById('global-long-short-ratio');\r\n    const longShortRatioPeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"long-short-ratio-chart\"]');\r\n    let longShortRatioChartInstance = null;\r\n\r\n    \/\/ Inicializar chartRenderers e chartInstances globalmente, se n\u00e3o existirem\r\n    window.chartRenderers = window.chartRenderers || {};\r\n    window.chartInstances = window.chartInstances || {};\r\n\r\n    const periodSettingsMap = {\r\n        '1d-15m': { apiPeriod: '30m', apiLimit: 48, apiDays: 1, apiInterval: '15m' },\r\n        '3d-15m': { apiPeriod: '30m', apiLimit: 144, apiDays: 3, apiInterval: '15m' },\r\n        '7d-15m': { apiPeriod: '30m', apiLimit: 336, apiDays: 7, apiInterval: '15m' },\r\n        '21d-1h': { apiPeriod: '2h', apiLimit: 252, apiDays: 21, apiInterval: '1h' },\r\n        '30d-1h': { apiPeriod: '2h', apiLimit: 360, apiDays: 30, apiInterval: '1h' },\r\n        '60d-4h': { apiPeriod: '6h', apiLimit: 240, apiDays: 60, apiInterval: '4h' },\r\n        '90d-4h': { apiPeriod: '6h', apiLimit: 360, apiDays: 90, apiInterval: '4h' },\r\n        '180d-4h': { apiPeriod: '12h', apiLimit: 360, apiDays: 180, apiInterval: '4h' },\r\n        '1y-4h': { apiPeriod: '12h', apiLimit: 720, apiDays: 365, apiInterval: '4h' },\r\n        '2y-1d': { apiPeriod: '1d', apiLimit: 730, apiDays: 730, apiInterval: '1d' }\r\n    };\r\n\r\n    \/\/ Fun\u00e7\u00e3o auxiliar para formatar valores de moeda\r\n    function formatCurrency(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    async function renderLongShortRatioChart(selectedOptionValue = '21d-1h', addPrice = false) {\r\n        try {\r\n            console.log(`Rendering Long\/Short Ratio chart with period: ${selectedOptionValue}, addPrice: ${addPrice}`);\r\n            loadingLongShortRatio?.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d-1h'];\r\n            const { apiPeriod, apiLimit, apiDays, apiInterval } = settings;\r\n\r\n            \/\/ Buscar dados do Long\/Short Ratio\r\n            const lsResponse = await fetch(`https:\/\/proxy.bitcoincounterflow.com\/binance-long-proxy?symbol=BTCUSDT&period=${apiPeriod}&limit=${apiLimit}`);\r\n            if (!lsResponse.ok) {\r\n                throw new Error(`HTTP error (Long\/Short Ratio)! Status: ${lsResponse.status}`);\r\n            }\r\n            const lsData = await lsResponse.json();\r\n            console.log('Long\/Short Ratio API response:', lsData);\r\n\r\n            if (!Array.isArray(lsData) || lsData.length === 0) {\r\n                throw new Error('Invalid or empty Long\/Short Ratio data received from API');\r\n            }\r\n\r\n            \/\/ Buscar dados de pre\u00e7o do Bitcoin\r\n            const priceResponse = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${apiDays}&interval=${apiInterval}`);\r\n            if (!priceResponse.ok) {\r\n                throw new Error(`HTTP error (Open Interest)! Status: ${priceResponse.status}`);\r\n            }\r\n            const priceData = await priceResponse.json();\r\n            console.log('Open Interest API response:', priceData);\r\n\r\n            if (!Array.isArray(priceData) || priceData.length === 0) {\r\n                throw new Error('Invalid or empty price data received from API');\r\n            }\r\n\r\n            const sortedLsData = lsData.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));\r\n            const sortedPriceData = priceData.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));\r\n\r\n            const longShortRatioData = sortedLsData.map(entry => ({\r\n                x: new Date(entry.timestamp).getTime(),\r\n                y: Number(parseFloat(entry.longShortRatio).toFixed(2))\r\n            }));\r\n\r\n            \/\/ Alinhar pre\u00e7os com os timestamps do Long\/Short Ratio\r\n            const btcPriceData = addPrice ? longShortRatioData.map(lsEntry => {\r\n                const closestPriceEntry = sortedPriceData.reduce((prev, curr) => {\r\n                    const prevDiff = Math.abs(lsEntry.x - new Date(prev.timestamp).getTime());\r\n                    const currDiff = Math.abs(lsEntry.x - new Date(curr.timestamp).getTime());\r\n                    return currDiff < prevDiff ? curr : prev;\r\n                });\r\n                const price = parseFloat(closestPriceEntry.price);\r\n                const isValid = !isNaN(price) && price > 0;\r\n                if (!isValid) console.warn(`Invalid price data for timestamp ${lsEntry.x}: ${closestPriceEntry.price}`);\r\n                return isValid ? [lsEntry.x, price] : null;\r\n            }).filter(entry => entry !== null) : [];\r\n\r\n            console.log('Long\/Short Ratio data:', longShortRatioData);\r\n            console.log('Bitcoin Price data:', btcPriceData);\r\n\r\n            if (longShortRatioData.length > 0) {\r\n                globalRatioElement.textContent = longShortRatioData[longShortRatioData.length - 1].y.toFixed(2);\r\n            } else {\r\n                globalRatioElement.textContent = 'N\/A';\r\n            }\r\n\r\n            let series = [{\r\n                name: 'Long\/Short Ratio',\r\n                data: longShortRatioData,\r\n                color: '#0c3fae',\r\n                lineWidth: 2,\r\n                states: { hover: { lineWidth: 2 } },\r\n                marker: {\r\n                    enabled: false,\r\n                    states: {\r\n                        hover: { enabled: false }\r\n                    }\r\n                },\r\n                states: {\r\n                    hover: {\r\n                        enabled: false\r\n                    }\r\n                }\r\n            }];\r\n\r\n            let yAxis = [{\r\n                title: { text: null },\r\n                min: 0.3,\r\n                tickAmount: 4,\r\n                labels: {\r\n                    formatter() {\r\n                        return this.value === 1 ? '1' : Highcharts.numberFormat(this.value, 2);\r\n                    },\r\n                    style: { color: '#cccccc', fontSize: '12px' }\r\n                },\r\n                gridLineWidth: 0,\r\n                plotLines: [{\r\n                    value: 1,\r\n                    color: '#ffaa0050',\r\n                    dashStyle: 'Dash',\r\n                    width: 1,\r\n                    zIndex: 5\r\n                }]\r\n            }];\r\n\r\n            if (addPrice && btcPriceData.length > 0) {\r\n                series.push({\r\n                    name: 'Bitcoin Price',\r\n                    data: btcPriceData,\r\n                    type: 'line',\r\n                    color: 'white',\r\n                    lineWidth: 2,\r\n                    states: { hover: { lineWidth: 1.5 } },\r\n                    marker: {\r\n                        enabled: false,\r\n                        states: {\r\n                            hover: { enabled: false }\r\n                        }\r\n                    },\r\n                    states: {\r\n                        hover: {\r\n                            enabled: false\r\n                        }\r\n                    },\r\n                    yAxis: 1\r\n                });\r\n                yAxis.push({\r\n                    opposite: true,\r\n                    title: { text: null },\r\n                    labels: { enabled: false },\r\n                    gridLineWidth: 0,\r\n                    type: 'linear'\r\n                });\r\n            } else if (addPrice) {\r\n                console.warn('No valid Bitcoin Price data available for rendering');\r\n            }\r\n\r\n            if (longShortRatioChartInstance) {\r\n                console.log('Updating existing chart with series:', series);\r\n                longShortRatioChartInstance.update({\r\n                    yAxis: yAxis,\r\n                    series: series\r\n                }, true);\r\n            } else {\r\n                console.log('Creating new chart with series:', series);\r\n                longShortRatioChartInstance = Highcharts.chart('long-short-ratio-chart', {\r\n                    chart: {\r\n                        type: 'line',\r\n                        backgroundColor: '#000000',\r\n                        margin: 20,\r\n                        spacing: [0, 0, 0, 0],\r\n                        style: { fontFamily: 'Arial, sans-serif' },\r\n                        events: {\r\n                            load() {\r\n                                loadingLongShortRatio?.classList.remove('visible');\r\n                            }\r\n                        }\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        labels: { enabled: false },\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        crosshair: {\r\n                            color: '#333',\r\n                            dashStyle: 'dash'\r\n                        },\r\n                        gridLineWidth: 0\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series,\r\n                    legend: { enabled: false },\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        followPointer: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n                        borderColor: '#555555',\r\n                        style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n                        formatter() {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let tooltip = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            this.points.forEach(point => {\r\n                                const value = point.series.name === 'Bitcoin Price' ? formatCurrency(point.y) : Highcharts.numberFormat(point.y, 2);\r\n                                const color = point.series.name === 'Bitcoin Price' ? 'white' : '#0c3fae';\r\n                                tooltip += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${color}; margin-right: 5px;\"><\/span>\r\n                                    ${point.series.name}: <b>${value}<\/b>\r\n                                <\/div>`;\r\n                            });\r\n                            return tooltip;\r\n                        }\r\n                    },\r\n                    plotOptions: {\r\n                        line: { animation: { duration: 500 } }\r\n                    },\r\n                    credits: { enabled: false },\r\n                    exporting: { enabled: false }\r\n                });\r\n                window.chartInstances['long-short-ratio-chart'] = longShortRatioChartInstance;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error rendering Long\/Short Ratio chart:', error);\r\n            if (chartContainerLongShortRatio) {\r\n                chartContainerLongShortRatio.innerHTML = `\r\n                    <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n                        Unable to load chart data. Please try again later.\r\n                    <\/div>`;\r\n            }\r\n            globalRatioElement.textContent = 'N\/A';\r\n        } finally {\r\n            loadingLongShortRatio?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    document.addEventListener('priceCompareToggled', async (event) => {\r\n        console.log('Price Compare toggled:', event.detail);\r\n        const showPrice = event.detail;\r\n        const selectedOptionValue = longShortRatioPeriodSelect.value;\r\n        await renderLongShortRatioChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    longShortRatioPeriodSelect.addEventListener('change', async (event) => {\r\n        const selectedOptionValue = event.target.value;\r\n        localStorage.setItem('longShortRatioPeriod', selectedOptionValue);\r\n        const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n        const showPrice = settings['price-compare'] || false;\r\n        await renderLongShortRatioChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    window.chartRenderers.longShortRatio = Object.assign(renderLongShortRatioChart, { chartId: 'long-short-ratio-chart' });\r\n\r\n    const initialLongShortRatioPeriod = localStorage.getItem('longShortRatioPeriod') || '21d-1h';\r\n    longShortRatioPeriodSelect.value = initialLongShortRatioPeriod;\r\n    const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const initialShowPrice = initialSettings['price-compare'] || false;\r\n    console.log('Initial render with period:', initialLongShortRatioPeriod, 'addPrice:', initialShowPrice);\r\n    await renderLongShortRatioChart(initialLongShortRatioPeriod, initialShowPrice);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-10dd202 elementor-widget elementor-widget-html\" data-id=\"10dd202\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingElement = document.getElementById('loading-volatility');\r\n    const chartContainer = document.getElementById('volatility-chart');\r\n    const volatilityPeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"volatility-chart\"]');\r\n    let volatilityChartInstance = null;\r\n\r\n    \/\/ Inicializar chartRenderers e chartInstances globalmente, se n\u00e3o existirem\r\n    window.chartRenderers = window.chartRenderers || {};\r\n    window.chartInstances = window.chartInstances || {};\r\n\r\n    \/\/ Mapeamento de per\u00edodos com windowSize ajustado\r\n    const periodSettingsMap = {\r\n        '1d-15m': { apiDays: 1, apiInterval: '15m', windowSize: 24 }, \/\/ 6 horas\r\n        '3d-15m': { apiDays: 3, apiInterval: '15m', windowSize: 48 }, \/\/ 12 horas\r\n        '7d-15m': { apiDays: 7, apiInterval: '15m', windowSize: 96 }, \/\/ 24 horas\r\n        '21d-15m': { apiDays: 21, apiInterval: '15m', windowSize: 96 }, \/\/ 24 horas\r\n        '30d-1h': { apiDays: 30, apiInterval: '1h', windowSize: 12 }, \/\/ 12 horas\r\n        '60d-2h': { apiDays: 60, apiInterval: '2h', windowSize: 12 }, \/\/ 24 horas\r\n        '90d-1d': { apiDays: 90, apiInterval: '1d', windowSize: 20 }, \/\/ 20 dias\r\n        '1y-1d': { apiDays: 365, apiInterval: '1d', windowSize: 60 }, \/\/ 60 dias\r\n        '2y-1w': { apiDays: 730, apiInterval: '1w', windowSize: 12 }, \/\/ 12 semanas\r\n        'all-1w': { \r\n            apiDays: Math.ceil((new Date() - new Date('2021-08-22T00:00:00.000Z')) \/ (1000 * 60 * 60 * 24)), \r\n            apiInterval: '1w', \r\n            windowSize: 12 \/\/ 12 semanas\r\n        }\r\n    };\r\n\r\n    \/\/ Fun\u00e7\u00e3o auxiliar para formatar valores de moeda\r\n    function formatCurrency(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    async function renderVolatilityChart(selectedOptionValue = '1y-1d', addPrice = false) {\r\n        try {\r\n            console.log(`Rendering Volatility chart with period: ${selectedOptionValue}, addPrice: ${addPrice}`);\r\n            loadingElement?.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['1y-1d'];\r\n            const { apiDays, apiInterval, windowSize } = settings;\r\n\r\n            \/\/ Adicionar buffer para dados iniciais\r\n            const intervals = {\r\n                '15m': 15 * 60 * 1000,\r\n                '1h': 60 * 60 * 1000,\r\n                '2h': 2 * 60 * 60 * 1000,\r\n                '1d': 24 * 60 * 60 * 1000,\r\n                '1w': 7 * 24 * 60 * 60 * 1000\r\n            };\r\n            const bufferDays = Math.ceil((windowSize * intervals[apiInterval]) \/ (1000 * 60 * 60 * 24));\r\n            const response = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${apiDays + bufferDays}&interval=${apiInterval}`);\r\n            if (!response.ok) {\r\n                throw new Error(`HTTP error! Status: ${response.status}`);\r\n            }\r\n            const data = await response.json();\r\n            console.log('API response:', data);\r\n\r\n            if (!Array.isArray(data) || data.length === 0) {\r\n                throw new Error('Invalid or empty data received from API');\r\n            }\r\n\r\n            const sortedData = data.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));\r\n\r\n            const returns = [];\r\n            for (let i = 1; i < sortedData.length; i++) {\r\n                const priceT = parseFloat(sortedData[i].price);\r\n                const priceTMinus1 = parseFloat(sortedData[i - 1].price);\r\n                if (priceTMinus1 > 0 && !isNaN(priceT) && !isNaN(priceTMinus1)) {\r\n                    const logReturn = Math.log(priceT \/ priceTMinus1);\r\n                    returns.push({ x: new Date(sortedData[i].timestamp).getTime(), logReturn });\r\n                }\r\n            }\r\n\r\n            const volatilityData = [];\r\n            let periodsPerYear;\r\n            if (apiInterval === '15m') periodsPerYear = 365 * 24 * 4;\r\n            else if (apiInterval === '1h') periodsPerYear = 365 * 24;\r\n            else if (apiInterval === '2h') periodsPerYear = 365 * 24 \/ 2;\r\n            else if (apiInterval === '1d') periodsPerYear = 365;\r\n            else if (apiInterval === '1w') periodsPerYear = 52;\r\n            else periodsPerYear = 365;\r\n\r\n            for (let i = windowSize - 1; i < returns.length; i++) {\r\n                const windowReturns = returns.slice(i - windowSize + 1, i + 1).map(r => r.logReturn);\r\n                if (windowReturns.length > 0) {\r\n                    const mean = windowReturns.reduce((sum, val) => sum + val, 0) \/ windowReturns.length;\r\n                    const variance = windowReturns.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) \/ windowReturns.length;\r\n                    const volatility = Math.sqrt(variance) * Math.sqrt(periodsPerYear) * 100;\r\n                    volatilityData.push({ x: returns[i].x, y: Number(volatility.toFixed(2)) });\r\n                }\r\n            }\r\n\r\n            const btcPriceData = addPrice ? sortedData\r\n                .filter(entry => {\r\n                    const price = parseFloat(entry.price);\r\n                    const isValid = !isNaN(price) && price > 0;\r\n                    if (!isValid) console.warn(`Invalid price data: ${entry.price}`);\r\n                    return isValid;\r\n                })\r\n                .map(entry => [new Date(entry.timestamp).getTime(), parseFloat(entry.price)]) : [];\r\n\r\n            console.log('Volatility data:', volatilityData);\r\n            console.log('Bitcoin Price data:', btcPriceData);\r\n\r\n            if (volatilityData.length === 0) {\r\n                throw new Error('No valid volatility data available for charting');\r\n            }\r\n\r\n            let series = [{\r\n                name: 'Volatility',\r\n                data: volatilityData,\r\n                color: '#008080',\r\n                lineWidth: 2,\r\n                marker: {\r\n                    enabled: false,\r\n                    states: {\r\n                        hover: { enabled: false }\r\n                    }\r\n                },\r\n                states: {\r\n                    hover: {\r\n                        enabled: false\r\n                    }\r\n                }\r\n            }];\r\n\r\n            let yAxis = [{\r\n                labels: {\r\n                    formatter() {\r\n                        return `${this.value.toFixed(2)}%`;\r\n                    },\r\n                    style: { color: '#cccccc', fontSize: '12px' }\r\n                },\r\n                gridLineWidth: 0,\r\n                title: { text: null }\r\n            }];\r\n\r\n            if (addPrice && btcPriceData.length > 0) {\r\n                series.push({\r\n                    name: 'Bitcoin Price',\r\n                    data: btcPriceData,\r\n                    type: 'line',\r\n                    color: 'white',\r\n                    lineWidth: 2,\r\n                    states: { hover: { lineWidth: 1.5 } },\r\n                    marker: {\r\n                        enabled: false,\r\n                        states: {\r\n                            hover: { enabled: false }\r\n                        }\r\n                    },\r\n                    states: {\r\n                        hover: {\r\n                            enabled: false\r\n                        }\r\n                    },\r\n                    yAxis: 1\r\n                });\r\n                yAxis.push({\r\n                    opposite: true,\r\n                    title: { text: null },\r\n                    labels: { enabled: false },\r\n                    gridLineWidth: 0,\r\n                    type: 'linear'\r\n                });\r\n            } else if (addPrice) {\r\n                console.warn('No valid Bitcoin Price data available for rendering');\r\n            }\r\n\r\n            if (volatilityChartInstance) {\r\n                console.log('Updating existing chart with series:', series);\r\n                volatilityChartInstance.update({\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        labels: { enabled: false },\r\n                        crosshair: { color: '#333', dashStyle: 'dash' },\r\n                        gridLineWidth: 0,\r\n                        min: new Date().getTime() - apiDays * 24 * 60 * 60 * 1000,\r\n                        max: new Date().getTime()\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series\r\n                }, true);\r\n            } else {\r\n                console.log('Creating new chart with series:', series);\r\n                volatilityChartInstance = Highcharts.chart('volatility-chart', {\r\n                    chart: {\r\n                        type: 'line',\r\n                        backgroundColor: '#000000',\r\n                        margin: 20,\r\n                        spacing: [0, 0, 0, 0],\r\n                        style: { fontFamily: 'Arial, sans-serif' },\r\n                        events: {\r\n                            load() {\r\n                                loadingElement?.classList.remove('visible');\r\n                            }\r\n                        }\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        labels: { enabled: false },\r\n                        crosshair: { color: '#333', dashStyle: 'dash' },\r\n                        gridLineWidth: 0,\r\n                        min: new Date().getTime() - apiDays * 24 * 60 * 60 * 1000,\r\n                        max: new Date().getTime()\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series,\r\n                    legend: { enabled: false },\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        followPointer: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n                        borderColor: '#555555',\r\n                        style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n                        formatter() {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let tooltip = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            this.points.forEach(point => {\r\n                                const value = point.series.name === 'Bitcoin Price' ? formatCurrency(point.y) : `${point.y.toFixed(2)}%`;\r\n                                const color = point.series.name === 'Bitcoin Price' ? 'white' : '#008080';\r\n                                tooltip += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${color}; margin-right: 5px;\"><\/span>\r\n                                    ${point.series.name}: <b>${value}<\/b>\r\n                                <\/div>`;\r\n                            });\r\n                            return tooltip;\r\n                        }\r\n                    },\r\n                    plotOptions: {\r\n                        line: { animation: { duration: 500 } }\r\n                    },\r\n                    credits: { enabled: false }\r\n                });\r\n                window.chartInstances['volatility-chart'] = volatilityChartInstance;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error rendering Volatility chart:', error);\r\n            if (chartContainer) {\r\n                chartContainer.innerHTML = `\r\n                    <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n                        Unable to load chart data. Please try again later.\r\n                    <\/div>`;\r\n            }\r\n        } finally {\r\n            loadingElement?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    document.addEventListener('priceCompareToggled', async (event) => {\r\n        console.log('Price Compare toggled:', event.detail);\r\n        const showPrice = event.detail;\r\n        const selectedOptionValue = volatilityPeriodSelect.value;\r\n        await renderVolatilityChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    volatilityPeriodSelect.addEventListener('change', async (event) => {\r\n        const selectedOptionValue = event.target.value;\r\n        localStorage.setItem('volatilityPeriod', selectedOptionValue);\r\n        const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n        const showPrice = settings['price-compare'] || false;\r\n        await renderVolatilityChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    window.chartRenderers.volatility = Object.assign(renderVolatilityChart, { chartId: 'volatility-chart' });\r\n\r\n    const initialVolatilityPeriod = localStorage.getItem('volatilityPeriod') || '1y-1d';\r\n    volatilityPeriodSelect.value = initialVolatilityPeriod;\r\n    const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const initialShowPrice = initialSettings['price-compare'] || false;\r\n    console.log('Initial render with period:', initialVolatilityPeriod, 'addPrice:', initialShowPrice);\r\n    await renderVolatilityChart(initialVolatilityPeriod, initialShowPrice);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-85232fa elementor-widget elementor-widget-html\" data-id=\"85232fa\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingFgiElement = document.getElementById('loading-fgi');\r\n    const chartContainer = document.getElementById('chartdiv');\r\n    const fgiPeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"chartdiv\"]');\r\n    let fgiChartInstance = null;\r\n\r\n    window.chartRenderers = window.chartRenderers || {};\r\n    window.chartInstances = window.chartInstances || {};\r\n\r\n    const periodSettingsMap = {\r\n        '1d': { apiLimit: 1, apiDays: 1, apiInterval: '2h' },\r\n        '3d': { apiLimit: 3, apiDays: 3, apiInterval: '2h' },\r\n        '7d': { apiLimit: 7, apiDays: 7, apiInterval: '2h' },\r\n        '21d': { apiLimit: 21, apiDays: 21, apiInterval: '2h' },\r\n        '30d': { apiLimit: 30, apiDays: 30, apiInterval: '2h' },\r\n        '60d': { apiLimit: 60, apiDays: 60, apiInterval: '2h' },\r\n        '90d': { apiLimit: 90, apiDays: 90, apiInterval: '2h' }\r\n    };\r\n\r\n    function formatCurrency(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    function getColor(value) {\r\n        if (value < 25) {\r\n            return 'rgba(200, 0, 0, 0.80)';\r\n        } else if (value < 40) {\r\n            return 'rgba(255, 140, 0, 0.80)';\r\n        } else if (value <= 60) {\r\n            return 'rgba(255, 255, 0, 0.80)';\r\n        } else if (value < 75) {\r\n            return 'rgba(170, 255, 0, 0.80)';\r\n        } else {\r\n            return 'rgba(0, 200, 0, 0.80)';\r\n        }\r\n    }\r\n\r\n    function findFGIValue(timestamp, fgiData) {\r\n        const targetDate = new Date(timestamp);\r\n        targetDate.setHours(0, 0, 0, 0);\r\n        const targetTimestamp = targetDate.getTime();\r\n        const fgiPoint = fgiData.find(item => {\r\n            const itemDate = new Date(item.x);\r\n            itemDate.setHours(0, 0, 0, 0);\r\n            return itemDate.getTime() === targetTimestamp;\r\n        });\r\n        return fgiPoint ? { y: fgiPoint.y, color: getColor(fgiPoint.y), classification: fgiPoint.value_classification } : null;\r\n    }\r\n\r\n    async function createColumnChart(selectedOptionValue = '21d', addPrice = false) {\r\n        try {\r\n            console.log(`Rendering FGI chart with period: ${selectedOptionValue}, addPrice: ${addPrice}`);\r\n            loadingFgiElement?.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d'];\r\n            const { apiLimit, apiDays, apiInterval } = settings;\r\n\r\n            const fgiResponse = await fetch(`https:\/\/api.alternative.me\/fng\/?limit=${apiLimit}`);\r\n            if (!fgiResponse.ok) {\r\n                throw new Error(`HTTP error (FGI)! Status: ${fgiResponse.status}`);\r\n            }\r\n            const fgiData = await fgiResponse.json();\r\n            console.log('FGI API response:', fgiData);\r\n\r\n            if (fgiData.metadata && fgiData.metadata.error) {\r\n                throw new Error('Erro ao obter dados da API FGI: ' + fgiData.metadata.error);\r\n            }\r\n\r\n            const priceResponse = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${apiDays}&interval=${apiInterval}`);\r\n            if (!priceResponse.ok) {\r\n                throw new Error(`HTTP error (Open Interest)! Status: ${priceResponse.status}`);\r\n            }\r\n            const priceData = await priceResponse.json();\r\n            console.log('Open Interest API response:', priceData);\r\n\r\n            if (!Array.isArray(priceData) || priceData.length === 0) {\r\n                throw new Error('Invalid or empty price data received from API');\r\n            }\r\n\r\n            const chartData = fgiData.data.map(item => ({\r\n                x: parseInt(item.timestamp) * 1000,\r\n                y: parseInt(item.value),\r\n                value_classification: item.value_classification\r\n            })).reverse();\r\n\r\n            const btcPriceData = addPrice ? priceData\r\n                .filter(entry => {\r\n                    const price = parseFloat(entry.price);\r\n                    const isValid = !isNaN(price) && price > 0;\r\n                    if (!isValid) console.warn(`Invalid price data: ${entry.price}`);\r\n                    return isValid;\r\n                })\r\n                .map(entry => [new Date(entry.timestamp).getTime(), parseFloat(entry.price)])\r\n                .sort((a, b) => a[0] - b[0])\r\n                : [];\r\n\r\n            console.log('FGI chart data:', chartData);\r\n            console.log('Bitcoin Price data:', btcPriceData);\r\n\r\n            const chartWidth = chartContainer.offsetWidth;\r\n            const numberOfCategories = apiDays;\r\n            const estimatedLabelWidth = 45;\r\n            const minLabelsToShow = 4;\r\n            let calculatedStep = 1;\r\n\r\n            if (numberOfCategories > Math.floor(chartWidth \/ estimatedLabelWidth)) {\r\n                calculatedStep = Math.ceil(numberOfCategories \/ Math.floor(chartWidth \/ estimatedLabelWidth));\r\n            }\r\n            if (numberOfCategories \/ calculatedStep < minLabelsToShow) {\r\n                calculatedStep = Math.floor(numberOfCategories \/ minLabelsToShow);\r\n                if (calculatedStep < 1) calculatedStep = 1;\r\n            }\r\n\r\n            let series = [{\r\n                name: 'Fear & Greed Index',\r\n                type: 'column',\r\n                data: chartData.map(item => ({\r\n                    x: item.x,\r\n                    y: item.y,\r\n                    color: getColor(item.y),\r\n                    classification: item.value_classification\r\n                }))\r\n            }];\r\n\r\n            let yAxis = [{\r\n                min: 0,\r\n                max: 100,\r\n                title: { text: '' },\r\n                gridLineWidth: 0,\r\n                labels: { style: { color: '#ccc' } }\r\n            }];\r\n\r\n            if (addPrice && btcPriceData.length > 0) {\r\n                series.push({\r\n                    name: 'Bitcoin Price',\r\n                    type: 'line',\r\n                    data: btcPriceData,\r\n                    color: 'white',\r\n                    lineWidth: 2,\r\n                    states: {\r\n                        hover: { enabled: false },\r\n                        inactive: { opacity: 1 }\r\n                    },\r\n                    marker: {\r\n                        enabled: false\r\n                    },\r\n                    yAxis: 1\r\n                });\r\n                yAxis.push({\r\n                    opposite: true,\r\n                    title: { text: null },\r\n                    labels: { enabled: false },\r\n                    gridLineWidth: 0,\r\n                    type: 'linear'\r\n                });\r\n            } else if (addPrice) {\r\n                console.warn('No valid Bitcoin Price data available for rendering');\r\n            }\r\n\r\n            if (fgiChartInstance) {\r\n                console.log('Updating existing chart with series:', series);\r\n                fgiChartInstance.update({\r\n                    series: series,\r\n                    xAxis: {\r\n                        labels: { step: calculatedStep },\r\n                        min: new Date().getTime() - apiDays * 24 * 60 * 60 * 1000,\r\n                        max: new Date().getTime()\r\n                    },\r\n                    yAxis: yAxis,\r\n                    plotOptions: {\r\n                        column: {\r\n                            pointRange: 24 * 60 * 60 * 1000,\r\n                            fillOpacity: 0.85,\r\n                            states: {\r\n                                inactive: { opacity: 1 },\r\n                                hover: { enabled: false }\r\n                            }\r\n                        },\r\n                        line: {\r\n                            states: {\r\n                                inactive: { opacity: 1 },\r\n                                hover: { enabled: false }\r\n                            }\r\n                        }\r\n                    }\r\n                }, true);\r\n            } else {\r\n                console.log('Creating new chart with series:', series);\r\n                fgiChartInstance = Highcharts.chart('chartdiv', {\r\n                    chart: {\r\n                        backgroundColor: 'black',\r\n                        marginRight: 20,\r\n                        marginLeft: 20,\r\n                        marginBottom: 20,\r\n                        marginTop: 20,\r\n                        style: { fontFamily: 'Arial' },\r\n                        events: {\r\n                            render: function() {\r\n                                const currentChartWidth = this.chartWidth;\r\n                                const currentNumberOfCategories = numberOfCategories;\r\n                                const estimatedLabelWidth = 45;\r\n                                const minLabelsToShow = 4;\r\n                                let newCalculatedStep = 1;\r\n\r\n                                if (currentNumberOfCategories > Math.floor(currentChartWidth \/ estimatedLabelWidth)) {\r\n                                    newCalculatedStep = Math.ceil(currentNumberOfCategories \/ Math.floor(currentChartWidth \/ estimatedLabelWidth));\r\n                                }\r\n                                if (currentNumberOfCategories \/ newCalculatedStep < minLabelsToShow) {\r\n                                    newCalculatedStep = Math.floor(currentNumberOfCategories \/ minLabelsToShow);\r\n                                    if (newCalculatedStep < 1) newCalculatedStep = 1;\r\n                                }\r\n\r\n                                const columnSeries = this.series.find(s => s.type === 'column');\r\n                                let columnWidth = 5;\r\n                                if (columnSeries && columnSeries.points.length > 0) {\r\n                                    columnWidth = columnSeries.points[0].shapeArgs.width;\r\n                                }\r\n\r\n                                if (this.xAxis[0].options.labels.step !== newCalculatedStep || \r\n                                    this.xAxis[0].options.crosshair.width !== columnWidth) {\r\n                                    this.xAxis[0].update({\r\n                                        labels: { step: newCalculatedStep },\r\n                                        crosshair: {\r\n                                            color: 'rgba(50, 50, 50, 0.5)',\r\n                                            zIndex: 5,\r\n                                            width: columnWidth,\r\n                                            snap: true\r\n                                        }\r\n                                    }, false);\r\n                                    this.redraw();\r\n                                }\r\n                            },\r\n                            load: function() {\r\n                                loadingFgiElement?.classList.remove('visible');\r\n                                const columnSeries = this.series.find(s => s.type === 'column');\r\n                                if (columnSeries && columnSeries.points.length > 0) {\r\n                                    const columnWidth = columnSeries.points[0].shapeArgs.width;\r\n                                    this.xAxis[0].update({\r\n                                        crosshair: {\r\n                                            color: 'rgba(50, 50, 50, 0.5)',\r\n                                            zIndex: 5,\r\n                                            width: columnWidth,\r\n                                            snap: true\r\n                                        }\r\n                                    }, false);\r\n                                    this.redraw();\r\n                                }\r\n                            }\r\n                        }\r\n                    },\r\n                    title: { text: '' },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        title: { text: '' },\r\n                        labels: {\r\n                            formatter: function() {\r\n                                return Highcharts.dateFormat('%d\/%m', this.value);\r\n                            },\r\n                            rotation: 0,\r\n                            style: { color: 'transparent' },\r\n                            step: calculatedStep\r\n                        },\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        gridLineWidth: 0,\r\n                        crosshair: {\r\n                            color: 'rgba(50, 50, 50, 0.5)',\r\n                            zIndex: 5,\r\n                            width: 5,\r\n                            snap: true\r\n                        },\r\n                        tickPixelInterval: 25,\r\n                        min: new Date().getTime() - apiDays * 24 * 60 * 60 * 1000,\r\n                        max: new Date().getTime()\r\n                    },\r\n                    yAxis: yAxis,\r\n                    plotOptions: {\r\n                        column: {\r\n                            borderWidth: 0,\r\n                            pointPadding: 0.1,\r\n                            groupPadding: 0,\r\n                            borderRadius: 3,\r\n                            animation: { duration: 500 },\r\n                            pointRange: 24 * 60 * 60 * 1000,\r\n                            fillOpacity: 0.85,\r\n                            states: {\r\n                                inactive: { opacity: 1 },\r\n                                hover: { enabled: false }\r\n                            }\r\n                        },\r\n                        line: {\r\n                            animation: { duration: 500 },\r\n                            states: {\r\n                                inactive: { opacity: 1 },\r\n                                hover: { enabled: false }\r\n                            }\r\n                        }\r\n                    },\r\n                    series: series,\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.6)',\r\n                        borderColor: '#555',\r\n                        style: { color: '#ffffff', fontSize: '11px', fontFamily: 'Arial, sans-serif' },\r\n                        followPointer: true,\r\n                        stickyTracking: false,\r\n                        positioner: function(labelWidth, labelHeight, point) {\r\n                            const chart = this.chart;\r\n                            const x = point.plotX + chart.plotLeft;\r\n                            const y = point.plotY + chart.plotTop;\r\n                            const boundedX = Math.max(chart.plotLeft, Math.min(x - labelWidth \/ 2, chart.plotLeft + chart.plotWidth - labelWidth));\r\n                            const boundedY = Math.max(chart.plotTop, Math.min(y - labelHeight - 10, chart.plotTop + chart.plotHeight - labelHeight));\r\n                            return {\r\n                                x: boundedX,\r\n                                y: boundedY\r\n                            };\r\n                        },\r\n                        formatter: function () {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            \r\n                            this.points.forEach(point => {\r\n                                if (point.series.name === 'Bitcoin Price') {\r\n                                    s += `<div>\r\n                                        <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: white; margin-right: 5px;\"><\/span>\r\n                                        ${point.series.name}: <b>${formatCurrency(point.y)}<\/b>\r\n                                    <\/div>`;\r\n                                }\r\n                            });\r\n\r\n                            const fgiPoint = findFGIValue(this.x, chartData);\r\n                            if (fgiPoint) {\r\n                                s += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${fgiPoint.color}; margin-right: 5px;\"><\/span>\r\n                                    Fear & Greed Index: <b>${fgiPoint.y}<\/b>\r\n                                <\/div>\r\n                                <div style=\"text-align: right; font-size: 11px; padding-top: 5px;\">${fgiPoint.classification}<\/div>`;\r\n                            }\r\n                            \r\n                            return s;\r\n                        }\r\n                    },\r\n                    credits: { enabled: false },\r\n                    legend: { enabled: false }\r\n                });\r\n                window.chartInstances['chartdiv'] = fgiChartInstance;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error fetching or rendering data:', error);\r\n            chartContainer.innerHTML = `\r\n                <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n                    Erro ao carregar os dados. Tente novamente mais tarde.\r\n                <\/div>`;\r\n        } finally {\r\n            loadingFgiElement?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    document.addEventListener('priceCompareToggled', async (event) => {\r\n        console.log('Price Compare toggled:', event.detail);\r\n        const showPrice = event.detail;\r\n        const selectedOptionValue = fgiPeriodSelect.value;\r\n        await createColumnChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    fgiPeriodSelect.addEventListener('change', async (event) => {\r\n        const selectedOptionValue = event.target.value;\r\n        localStorage.setItem('fgiPeriod', selectedOptionValue);\r\n        const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n        const showPrice = settings['price-compare'] || false;\r\n        await createColumnChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    window.chartRenderers.fgi = Object.assign(createColumnChart, { chartId: 'chartdiv' });\r\n\r\n    const initialFgiPeriod = localStorage.getItem('fgiPeriod') || '21d';\r\n    fgiPeriodSelect.value = initialFgiPeriod;\r\n    const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const initialShowPrice = initialSettings['price-compare'] || false;\r\n    console.log('Initial render with period:', initialFgiPeriod, 'addPrice:', initialShowPrice);\r\n    await createColumnChart(initialFgiPeriod, initialShowPrice);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3c767fd elementor-widget elementor-widget-html\" data-id=\"3c767fd\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingEtfElement = document.getElementById('loading-etf');\r\n    const chartContainer = document.getElementById('etf-container');\r\n    const etfPeriodSelect = document.querySelector('.chart-period-select[data-chart-id=\"etf-container\"]');\r\n    let etfChartInstance = null;\r\n\r\n    window.chartRenderers = window.chartRenderers || {};\r\n    window.chartInstances = window.chartInstances || {};\r\n\r\n    const periodSettingsMap = {\r\n        '1d': { days: 1, apiInterval: '2h' },\r\n        '3d': { days: 3, apiInterval: '2h' },\r\n        '7d': { days: 7, apiInterval: '2h' },\r\n        '21d': { days: 21, apiInterval: '2h' },\r\n        '30d': { days: 30, apiInterval: '2h' },\r\n        '60d': { days: 60, apiInterval: '2h' },\r\n        '90d': { days: 90, apiInterval: '2h' }\r\n    };\r\n\r\n    function formatCurrency(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    function getColor(value) {\r\n        return value >= 0 ? 'rgba(0, 255, 204, 0.85)' : 'rgba(255, 51, 102, 0.85)';\r\n    }\r\n\r\n    function findETFValue(timestamp, etfData) {\r\n        const targetDate = new Date(timestamp);\r\n        targetDate.setHours(0, 0, 0, 0);\r\n        const targetTimestamp = targetDate.getTime();\r\n        const etfPoint = etfData.find(item => {\r\n            const itemDate = new Date(item.x);\r\n            itemDate.setHours(0, 0, 0, 0);\r\n            return itemDate.getTime() === targetTimestamp;\r\n        });\r\n        return etfPoint ? { y: etfPoint.y, color: getColor(etfPoint.y) } : null;\r\n    }\r\n\r\n    async function fetchAndRenderChart(selectedOptionValue = '21d', addPrice = false) {\r\n        try {\r\n            console.log(`Rendering ETF Inflow chart with period: ${selectedOptionValue}, addPrice: ${addPrice}`);\r\n            loadingEtfElement?.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d'];\r\n            const { days, apiInterval } = settings;\r\n\r\n            const etfResponse = await fetch('https:\/\/serverless-vercel-nine.vercel.app\/api\/etf-data');\r\n            if (!etfResponse.ok) {\r\n                throw new Error(`HTTP error (ETF)! Status: ${etfResponse.status}`);\r\n            }\r\n            const etfData = await etfResponse.json();\r\n            console.log('ETF API response:', etfData);\r\n\r\n            if (!Array.isArray(etfData) || etfData.length === 0) {\r\n                throw new Error('Invalid or empty ETF data received from API');\r\n            }\r\n\r\n            const priceResponse = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${days}&interval=${apiInterval}`);\r\n            if (!priceResponse.ok) {\r\n                throw new Error(`HTTP error (Open Interest)! Status: ${priceResponse.status}`);\r\n            }\r\n            const priceData = await priceResponse.json();\r\n            console.log('Open Interest API response:', priceData);\r\n\r\n            if (!Array.isArray(priceData) || priceData.length === 0) {\r\n                throw new Error('Invalid or empty price data received from API');\r\n            }\r\n\r\n            const periodDaysAgo = new Date(Math.max(...etfData.map(d => new Date(d.date))) - days * 24 * 60 * 60 * 1000);\r\n            const filteredData = etfData.filter(d => new Date(d.date) >= periodDaysAgo);\r\n\r\n            const groupedData = filteredData.reduce((acc, item) => {\r\n                const date = new Date(item.date);\r\n                const dayStart = new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n                const timestamp = dayStart.getTime();\r\n                if (!acc[timestamp]) {\r\n                    acc[timestamp] = { total: 0 };\r\n                }\r\n                acc[timestamp].total = parseFloat(item.total) || 0;\r\n                return acc;\r\n            }, {});\r\n\r\n            const seriesData = Object.keys(groupedData).map(ts => ({\r\n                x: parseInt(ts),\r\n                y: groupedData[ts].total,\r\n                color: getColor(groupedData[ts].total)\r\n            })).sort((a, b) => a.x - b.x);\r\n\r\n            if (seriesData.length === 0) {\r\n                throw new Error('No valid ETF data available for charting');\r\n            }\r\n\r\n            const btcPriceData = addPrice ? priceData\r\n                .filter(entry => {\r\n                    const price = parseFloat(entry.price);\r\n                    const isValid = !isNaN(price) && price > 0;\r\n                    if (!isValid) console.warn(`Invalid price data: ${entry.price}`);\r\n                    return isValid;\r\n                })\r\n                .map(entry => [new Date(entry.timestamp).getTime(), parseFloat(entry.price)])\r\n                .sort((a, b) => a[0] - b[0])\r\n                : [];\r\n\r\n            console.log('Net Inflow data:', seriesData);\r\n            console.log('Bitcoin Price data:', btcPriceData);\r\n\r\n            const chartWidth = chartContainer.offsetWidth;\r\n            const numberOfCategories = days;\r\n            const estimatedLabelWidth = 45;\r\n            const minLabelsToShow = 4;\r\n            let calculatedStep = 1;\r\n\r\n            if (numberOfCategories > Math.floor(chartWidth \/ estimatedLabelWidth)) {\r\n                calculatedStep = Math.ceil(numberOfCategories \/ Math.floor(chartWidth \/ estimatedLabelWidth));\r\n            }\r\n            if (numberOfCategories \/ calculatedStep < minLabelsToShow) {\r\n                calculatedStep = Math.floor(numberOfCategories \/ minLabelsToShow);\r\n                if (calculatedStep < 1) calculatedStep = 1;\r\n            }\r\n\r\n            let series = [{\r\n                name: 'Net Inflow',\r\n                type: 'column',\r\n                data: seriesData\r\n            }];\r\n\r\n            let yAxis = [{\r\n                labels: {\r\n                    style: { color: '#cccccc', fontSize: '12px' },\r\n                    formatter: function() {\r\n                        return (this.value >= 0 ? '+' : '-') + formatCurrency(Math.abs(this.value)) + 'M';\r\n                    }\r\n                },\r\n                gridLineWidth: 0,\r\n                title: { text: '' }\r\n            }];\r\n\r\n            if (addPrice && btcPriceData.length > 0) {\r\n                series.push({\r\n                    name: 'Bitcoin Price',\r\n                    type: 'line',\r\n                    data: btcPriceData,\r\n                    color: 'white',\r\n                    lineWidth: 2,\r\n                    states: {\r\n                        hover: { enabled: false },\r\n                        inactive: { opacity: 1 }\r\n                    },\r\n                    marker: {\r\n                        enabled: false\r\n                    },\r\n                    yAxis: 1\r\n                });\r\n                yAxis.push({\r\n                    opposite: true,\r\n                    title: { text: null },\r\n                    labels: { enabled: false },\r\n                    gridLineWidth: 0,\r\n                    type: 'linear'\r\n                });\r\n            } else if (addPrice) {\r\n                console.warn('No valid Bitcoin Price data available for rendering');\r\n            }\r\n\r\n            if (etfChartInstance) {\r\n                console.log('Updating existing chart with series:', series);\r\n                etfChartInstance.update({\r\n                    series: series,\r\n                    xAxis: {\r\n                        labels: { step: calculatedStep },\r\n                        min: new Date().getTime() - days * 24 * 60 * 60 * 1000,\r\n                        max: new Date().getTime()\r\n                    },\r\n                    yAxis: yAxis,\r\n                    plotOptions: {\r\n                        column: {\r\n                            pointRange: 24 * 60 * 60 * 1000,\r\n                            fillOpacity: 0.85,\r\n                            states: {\r\n                                inactive: { opacity: 1 },\r\n                                hover: { enabled: false }\r\n                            }\r\n                        },\r\n                        line: {\r\n                            states: {\r\n                                inactive: { opacity: 1 },\r\n                                hover: { enabled: false }\r\n                            }\r\n                        }\r\n                    }\r\n                }, true);\r\n            } else {\r\n                console.log('Creating new chart with series:', series);\r\n                etfChartInstance = Highcharts.chart('etf-container', {\r\n                    chart: {\r\n                        backgroundColor: 'black',\r\n                        marginRight: 20,\r\n                        marginLeft: 20,\r\n                        marginBottom: 20,\r\n                        marginTop: 20,\r\n                        style: { fontFamily: 'Arial' },\r\n                        events: {\r\n                            load: function() {\r\n                                loadingEtfElement?.classList.remove('visible');\r\n                                const columnSeries = this.series.find(s => s.type === 'column');\r\n                                if (columnSeries && columnSeries.points.length > 0) {\r\n                                    const columnWidth = columnSeries.points[0].shapeArgs.width;\r\n                                    this.xAxis[0].update({\r\n                                        crosshair: {\r\n                                            color: 'rgba(50, 50, 50, 0.5)',\r\n                                            zIndex: 5,\r\n                                            width: columnWidth,\r\n                                            snap: true\r\n                                        }\r\n                                    }, false);\r\n                                    this.redraw();\r\n                                }\r\n                            },\r\n                            render: function() {\r\n                                const currentChartWidth = this.chartWidth;\r\n                                const currentNumberOfCategories = numberOfCategories;\r\n                                const estimatedLabelWidth = 45;\r\n                                const minLabelsToShow = 4;\r\n                                let newCalculatedStep = 1;\r\n\r\n                                if (currentNumberOfCategories > Math.floor(currentChartWidth \/ estimatedLabelWidth)) {\r\n                                    newCalculatedStep = Math.ceil(currentNumberOfCategories \/ Math.floor(currentChartWidth \/ estimatedLabelWidth));\r\n                                }\r\n                                if (currentNumberOfCategories \/ newCalculatedStep < minLabelsToShow) {\r\n                                    newCalculatedStep = Math.floor(currentNumberOfCategories \/ minLabelsToShow);\r\n                                    if (newCalculatedStep < 1) newCalculatedStep = 1;\r\n                                }\r\n\r\n                                const columnSeries = this.series.find(s => s.type === 'column');\r\n                                let columnWidth = 5;\r\n                                if (columnSeries && columnSeries.points.length > 0) {\r\n                                    columnWidth = columnSeries.points[0].shapeArgs.width;\r\n                                }\r\n\r\n                                if (this.xAxis[0].options.labels.step !== newCalculatedStep || \r\n                                    this.xAxis[0].options.crosshair.width !== columnWidth) {\r\n                                    this.xAxis[0].update({\r\n                                        labels: { step: newCalculatedStep },\r\n                                        crosshair: {\r\n                                            color: 'rgba(50, 50, 50, 0.5)',\r\n                                            zIndex: 5,\r\n                                            width: columnWidth,\r\n                                            snap: true\r\n                                        }\r\n                                    }, false);\r\n                                    this.redraw();\r\n                                }\r\n                            }\r\n                        }\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        labels: {\r\n                            formatter: function() {\r\n                                return Highcharts.dateFormat('%d\/%m', this.value);\r\n                            },\r\n                            rotation: 0,\r\n                            style: { color: 'transparent', fontSize: '12px' },\r\n                            step: calculatedStep\r\n                        },\r\n                        crosshair: {\r\n                            color: 'rgba(50, 50, 50, 0.5)',\r\n                            zIndex: 5,\r\n                            width: 5,\r\n                            snap: true\r\n                        },\r\n                        tickPixelInterval: 25,\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        gridLineWidth: 0,\r\n                        min: new Date().getTime() - days * 24 * 60 * 60 * 1000,\r\n                        max: new Date().getTime()\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series,\r\n                    legend: { enabled: false },\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.6)',\r\n                        borderColor: '#555',\r\n                        style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n                        followPointer: true,\r\n                        stickyTracking: false,\r\n                        positioner: function(labelWidth, labelHeight, point) {\r\n                            const chart = this.chart;\r\n                            const x = point.plotX + chart.plotLeft;\r\n                            const y = point.plotY + chart.plotTop;\r\n                            const boundedX = Math.max(chart.plotLeft, Math.min(x - labelWidth \/ 2, chart.plotLeft + chart.plotWidth - labelWidth));\r\n                            const boundedY = Math.max(chart.plotTop, Math.min(y - labelHeight - 10, chart.plotTop + chart.plotHeight - labelHeight));\r\n                            return {\r\n                                x: boundedX,\r\n                                y: boundedY\r\n                            };\r\n                        },\r\n                        formatter: function() {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            \r\n                            this.points.forEach(point => {\r\n                                if (point.series.name === 'Bitcoin Price') {\r\n                                    s += `<div>\r\n                                        <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: white; margin-right: 5px;\"><\/span>\r\n                                        ${point.series.name}: <b>${formatCurrency(point.y)}<\/b>\r\n                                    <\/div>`;\r\n                                }\r\n                            });\r\n\r\n                            const etfPoint = findETFValue(this.x, seriesData);\r\n                            if (etfPoint) {\r\n                                const value = Math.abs(etfPoint.y);\r\n                                const formattedValue = formatCurrency(value) + 'M';\r\n                                const displayValue = (etfPoint.y >= 0 ? '+' : '-') + formattedValue;\r\n                                s += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${etfPoint.color}; margin-right: 5px;\"><\/span>\r\n                                    Net Inflow: <b>${displayValue}<\/b>\r\n                                <\/div>`;\r\n                            }\r\n                            \r\n                            return s;\r\n                        }\r\n                    },\r\n                    plotOptions: {\r\n                        column: {\r\n                            animation: { duration: 500 },\r\n                            pointPadding: 0.1,\r\n                            groupPadding: 0,\r\n                            borderWidth: 0,\r\n                            borderRadius: 3,\r\n                            pointRange: 24 * 60 * 60 * 1000,\r\n                            fillOpacity: 0.85,\r\n                            states: {\r\n                                inactive: { opacity: 1 },\r\n                                hover: { enabled: false }\r\n                            }\r\n                        },\r\n                        line: {\r\n                            animation: { duration: 500 },\r\n                            states: {\r\n                                inactive: { opacity: 1 },\r\n                                hover: { enabled: false }\r\n                            }\r\n                        }\r\n                    },\r\n                    credits: { enabled: false }\r\n                });\r\n                window.chartInstances['etf-container'] = etfChartInstance;\r\n            }\r\n        } catch (error) {\r\n            console.error('Error fetching or rendering data:', error);\r\n            chartContainer.innerHTML =\r\n                '<div style=\"color: #ff6f61; text-align: center; padding: 20px;\">Erro ao carregar os dados. Tente novamente mais tarde.<\/div>';\r\n        } finally {\r\n            loadingEtfElement?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    document.addEventListener('priceCompareToggled', async (event) => {\r\n        console.log('Price Compare toggled:', event.detail);\r\n        const showPrice = event.detail;\r\n        const selectedOptionValue = etfPeriodSelect.value;\r\n        await fetchAndRenderChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    etfPeriodSelect.addEventListener('change', async (event) => {\r\n        const selectedOptionValue = event.target.value;\r\n        localStorage.setItem('etfPeriod', selectedOptionValue);\r\n        const settings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n        const showPrice = settings['price-compare'] || false;\r\n        await fetchAndRenderChart(selectedOptionValue, showPrice);\r\n    });\r\n\r\n    const initialEtfPeriod = localStorage.getItem('etfPeriod') || '21d';\r\n    etfPeriodSelect.value = initialEtfPeriod;\r\n    const initialSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings')) || {};\r\n    const initialShowPrice = initialSettings['price-compare'] || false;\r\n    console.log('Initial render with period:', initialEtfPeriod, 'addPrice:', initialShowPrice);\r\n    await fetchAndRenderChart(initialEtfPeriod, initialShowPrice);\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96c3102 elementor-widget elementor-widget-html\" data-id=\"96c3102\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n  const loadingElement = document.getElementById('loading-performance');\r\n  const chartContainer = document.getElementById('bitcoin-performance-chart');\r\n\r\n  async function renderPerformanceChart() {\r\n    try {\r\n      loadingElement?.classList.add('visible');\r\n\r\n      const response = await fetch('https:\/\/serverless-vercel-nine.vercel.app\/api\/dca-calculator');\r\n      if (!response.ok) {\r\n        throw new Error(`HTTP error! Status: ${response.status}`);\r\n      }\r\n      const data = await response.json();\r\n\r\n      if (!Array.isArray(data) || data.length === 0) {\r\n        throw new Error('Invalid or empty data received from API');\r\n      }\r\n\r\n      const data2012to2016 = data.filter(entry => entry.timestamp >= '2015-01-14' && entry.timestamp <= '2018-12-15');\r\n      const data2016to2020 = data.filter(entry => entry.timestamp > '2018-12-15' && entry.timestamp <= '2022-11-21');\r\n      const data2020toNow = data.filter(entry => entry.timestamp >= '2022-11-21');\r\n\r\n      function calculateDays(data) {\r\n        const baseDate = new Date(data[0].timestamp);\r\n        return data.map(entry => ({\r\n          timestamp: Math.floor((new Date(entry.timestamp) - baseDate) \/ (24 * 60 * 60 * 1000)),\r\n        }));\r\n      }\r\n\r\n      function calculatePerformance(data) {\r\n        const baseDate = new Date(data[0].timestamp);\r\n        const initialValue = 15770;\r\n        return data.map(entry => {\r\n          const timestamp = Math.floor((new Date(entry.timestamp) - baseDate) \/ (24 * 60 * 60 * 1000));\r\n          const performance = initialValue + ((entry.btcPrice - data[0].btcPrice) \/ data[0].btcPrice) * initialValue;\r\n          return [timestamp, Number(performance.toFixed(0))];\r\n        });\r\n      }\r\n\r\n      function formatCurrency(value) {\r\n        return '$' + value.toFixed(0);\r\n      }\r\n\r\n      Highcharts.chart('bitcoin-performance-chart', {\r\n        chart: {\r\n          type: 'line',\r\n          backgroundColor: '#000000',\r\n          margin: 20,\r\n          spacing: [0, 0, 0, 0],\r\n          style: { fontFamily: 'Arial, sans-serif' },\r\n          events: {\r\n            load() {\r\n              loadingElement?.classList.remove('visible');\r\n            }\r\n          }\r\n        },\r\n        title: { text: null },\r\n        xAxis: {\r\n          title: { text: null },\r\n          labels: { enabled: false },\r\n          lineColor: 'transparent',\r\n          tickLength: 0,\r\n          gridLineWidth: 0,\r\n          crosshair: {\r\n            color: '#333',\r\n            dashStyle: 'dash'\r\n          },\r\n          plotBands: [\r\n            {\r\n              from: 1055,\r\n              to: 1080,\r\n              color: 'rgba(136, 136, 136, 0.2)'\r\n            },\r\n            {\r\n              from: 1420,\r\n              to: 1440,\r\n              color: 'rgba(136, 136, 136, 0.2)'\r\n            }\r\n          ]\r\n        },\r\n        yAxis: [\r\n          {\r\n            type: 'logarithmic',\r\n            min: 15000,\r\n            max: 2000000,\r\n            title: { text: null },\r\n            labels: { enabled: false },\r\n            gridLineWidth: 0,\r\n            opposite: false\r\n          },\r\n          {\r\n            type: 'logarithmic',\r\n            min: 15000,\r\n            max: 2800000,\r\n            title: { text: null },\r\n            labels: { enabled: false },\r\n            gridLineWidth: 0,\r\n            opposite: true\r\n          }\r\n        ],\r\n        series: [\r\n          {\r\n            name: '2015-2018',\r\n            data: calculatePerformance(data2012to2016),\r\n            color: 'rgba(255, 165, 0, 0.6)',\r\n            lineWidth: 1,\r\n            marker: {\r\n              enabled: false,\r\n              fillColor: 'transparent'\r\n            },\r\n            states: {\r\n              hover: { lineWidth: 1 }\r\n            }\r\n          },\r\n          {\r\n            name: '2018-2022',\r\n            data: calculatePerformance(data2016to2020),\r\n            color: 'rgba(106, 90, 205, 0.6)',\r\n            lineWidth: 1,\r\n            marker: {\r\n              enabled: false,\r\n              fillColor: 'transparent'\r\n            },\r\n            states: {\r\n              hover: { lineWidth: 1 }\r\n            }\r\n          },\r\n          {\r\n            name: '2022-2025',\r\n            data: calculatePerformance(data2020toNow),\r\n            color: 'rgba(255, 255, 255, 1)',\r\n            lineWidth: 1,\r\n            marker: {\r\n              enabled: false,\r\n              fillColor: 'transparent'\r\n            },\r\n            states: {\r\n              hover: { lineWidth: 1 },\r\n              inactive: { enabled: false }\r\n            }\r\n          }\r\n        ],\r\n        legend: {\r\n          enabled: true,\r\n          floating: true,\r\n          align: 'left',\r\n          verticalAlign: 'top',\r\n          layout: 'vertical',\r\n          x: 20,\r\n          y: 10,\r\n          itemStyle: { color: '#CCC', fontSize: '11px' },\r\n          margin: 10\r\n        },\r\n        tooltip: {\r\n          shared: true,\r\n          useHTML: true,\r\n          backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n          borderColor: '#555555',\r\n          style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n          formatter: function () {\r\n            const baseDate = new Date(data2020toNow[0].timestamp);\r\n            const tooltipDate = new Date(baseDate.getTime() + this.x * 24 * 60 * 60 * 1000);\r\n            let tooltipHtml = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 5px;\"><b>${Highcharts.dateFormat('%b %e, %Y', tooltipDate)}<\/b><\/div>`;\r\n            this.points.forEach(point => {\r\n              tooltipHtml += `<div>\r\n                <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${point.color}; margin-right: 5px;\"><\/span>\r\n                ${point.series.name}: <b>${formatCurrency(point.y)}<\/b>\r\n              <\/div>`;\r\n            });\r\n            return tooltipHtml;\r\n          }\r\n        },\r\n        plotOptions: {\r\n          line: { animation: { duration: 500 } }\r\n        },\r\n        credits: { enabled: false }\r\n      });\r\n    } catch (error) {\r\n      console.error('Error rendering Performance chart:', error);\r\n      if (chartContainer) {\r\n        chartContainer.innerHTML = `\r\n          <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n            Unable to load chart data. Please try again later.\r\n          <\/div>`;\r\n      }\r\n      loadingElement?.classList.remove('visible');\r\n    }\r\n  }\r\n\r\n  await renderPerformanceChart();\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-738c658 elementor-widget elementor-widget-html\" data-id=\"738c658\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\ndocument.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingElement = document.getElementById('loading-m2-global');\r\n    const chartContainer = document.getElementById('m2-global-chart');\r\n    const periodSelect = document.querySelector('.chart-period-select[data-chart-id=\"m2-global-chart\"]');\r\n    let chartInstance = null;\r\n\r\n    const periodSettingsMap = {\r\n        '1d-15m': { days: 1, interval: '15m' },\r\n        '3d-15m': { days: 3, interval: '15m' },\r\n        '7d-15m': { days: 7, interval: '15m' },\r\n        '21d-15m': { days: 21, interval: '15m' },\r\n        '30d-1h': { days: 30, interval: '1h' },\r\n        '60d-1d': { days: 60, interval: '1d' },\r\n        '90d-1d': { days: 90, interval: '1d' },\r\n        '180d-1d': { days: 180, interval: '1d' },\r\n        '1y-1d': { days: 365, interval: '1d' },\r\n        '2y-1d': { days: 730, interval: '1d' },\r\n        '4y-1d': { days: 1460, interval: '1d' },\r\n        '5y-1d': { days: 1825, interval: '1d' },\r\n        '7y-1d': { days: 2555, interval: '1d' },\r\n        'all': { days: Infinity, interval: '1d' }\r\n    };\r\n\r\n    function formatDate(date) {\r\n        const options = { year: 'numeric', month: 'short', day: 'numeric' };\r\n        return new Date(date).toLocaleDateString('en-US', options);\r\n    }\r\n\r\n    function formatCurrency(value, useAbbreviations = true) {\r\n        if (useAbbreviations) {\r\n            if (value >= 1e12) return '$' + (value \/ 1e12).toFixed(0) + ' T';\r\n            if (value >= 1e9) return '$' + (value \/ 1e9).toFixed(0) + ' B';\r\n            if (value >= 1e6) return '$' + (value \/ 1e6).toFixed(0) + ' M';\r\n            if (value >= 1e3) return '$' + (value \/ 1e3).toFixed(0) + ' K';\r\n        }\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    async function renderM2GlobalChart(selectedOptionValue = '2y-1d') {\r\n        try {\r\n            loadingElement?.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['2y-1d'];\r\n            const { days } = settings;\r\n            const cutoffDate = days === Infinity ? new Date(0) : new Date(new Date().setDate(new Date().getDate() - days));\r\n\r\n            let data;\r\n            try {\r\n                const response = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/m2-global?days=${days}&interval=${settings.interval}`);\r\n                if (!response.ok) {\r\n                    throw new Error(`HTTP error! Status: ${response.status}`);\r\n                }\r\n                data = await response.json();\r\n            } catch (apiError) {\r\n                console.warn('API parameters not supported, fetching full dataset:', apiError);\r\n                const response = await fetch('https:\/\/api.bitcoincounterflow.com\/api\/m2-global');\r\n                if (!response.ok) {\r\n                    throw new Error(`HTTP error on fallback fetch! Status: ${response.status}`);\r\n                }\r\n                data = await response.json();\r\n            }\r\n\r\n            if (!Array.isArray(data) || data.length === 0) {\r\n                throw new Error('Invalid or empty data received from API');\r\n            }\r\n\r\n            const chartData = data\r\n                .filter(item => {\r\n                    const timestamp = new Date(item.date);\r\n                    return timestamp >= cutoffDate &&\r\n                           !isNaN(parseFloat(item.btcPrice)) &&\r\n                           !isNaN(parseFloat(item.m2Supply)) &&\r\n                           !isNaN(parseFloat(item.yoyGrowth));\r\n                })\r\n                .map(item => ({\r\n                    date: new Date(item.date).getTime(),\r\n                    btcPrice: parseFloat(item.btcPrice),\r\n                    m2Supply: parseFloat(item.m2Supply),\r\n                    yoyGrowth: parseFloat(item.yoyGrowth)\r\n                }));\r\n\r\n            if (chartData.length === 0) {\r\n                throw new Error('No valid data available after filtering for the selected period');\r\n            }\r\n\r\n            let btcPrices = chartData.map(item => [item.date, item.btcPrice]);\r\n            let m2Supplies = chartData.map(item => [item.date, item.m2Supply]);\r\n            let yoyGrowth = chartData.map(item => [item.date, item.yoyGrowth]);\r\n\r\n            if (chartInstance) {\r\n                chartInstance.update({\r\n                    series: [\r\n                        { name: 'Bitcoin Price', data: btcPrices },\r\n                        { name: 'M2 Supply', data: m2Supplies },\r\n                        { name: 'YoY Growth Rate', data: yoyGrowth }\r\n                    ]\r\n                });\r\n            } else {\r\n                chartInstance = Highcharts.chart('m2-global-chart', {\r\n                    chart: {\r\n                        type: 'line',\r\n                        backgroundColor: '#000000',\r\n                        margin: 20,\r\n                        spacing: [0, 0, 0, 0],\r\n                        style: { fontFamily: 'Arial, sans-serif' },\r\n                        events: {\r\n                            load() {\r\n                                loadingElement?.classList.remove('visible');\r\n                            }\r\n                        }\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        labels: { enabled: false },\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        crosshair: {\r\n                            color: '#333',\r\n                            dashStyle: 'dash'\r\n                        },\r\n                        gridLineWidth: 0\r\n                    },\r\n                    yAxis: [\r\n                        {\r\n                            type: 'logarithmic',\r\n                            title: { text: null },\r\n                            labels: { enabled: false },\r\n                            gridLineWidth: 0,\r\n                            opposite: false\r\n                        },\r\n                        {\r\n                            type: 'logarithmic',\r\n                            title: { text: null },\r\n                            labels: { enabled: false },\r\n                            gridLineWidth: 0,\r\n                            opposite: true\r\n                        },\r\n                        {\r\n                            title: { text: null },\r\n                            labels: { enabled: false },\r\n                            gridLineWidth: 0,\r\n                            opposite: true\r\n                        }\r\n                    ],\r\n                    series: [\r\n                        {\r\n                            name: 'Bitcoin Price',\r\n                            data: btcPrices,\r\n                            color: 'white',\r\n                            lineWidth: 2,\r\n                            marker: {\r\n                                enabled: false,\r\n                                fillColor: 'transparent'\r\n                            },\r\n                            states: {\r\n                                hover: { lineWidth: 2 },\r\n                                inactive: { enabled: false }\r\n                            }\r\n                        },\r\n                        {\r\n                            name: 'M2 Supply',\r\n                            data: m2Supplies,\r\n                            color: 'rgba(223, 48, 121, 1)',\r\n                            lineWidth: 2,\r\n                            marker: {\r\n                                enabled: false,\r\n                                fillColor: 'transparent'\r\n                            },\r\n                            yAxis: 1,\r\n                            states: {\r\n                                hover: { lineWidth: 2 },\r\n                                inactive: { enabled: false }\r\n                            }\r\n                        },\r\n                        {\r\n                            name: 'YoY Growth Rate',\r\n                            type: 'area',\r\n                            data: yoyGrowth,\r\n                            lineWidth: 1.3,\r\n                            marker: {\r\n                                enabled: false,\r\n                                fillColor: 'transparent'\r\n                            },\r\n                            zones: [\r\n                                { value: 0, color: 'rgba(255, 99, 71, 0.5)' },\r\n                                { color: 'rgba(56, 103, 214, 0.5)' }\r\n                            ],\r\n                            yAxis: 2,\r\n                            states: {\r\n                                hover: { lineWidth: 1.3 },\r\n                                inactive: { enabled: false }\r\n                            }\r\n                        }\r\n                    ],\r\n                    legend: {\r\n                        enabled: true,\r\n                        floating: true,\r\n                        align: 'left',\r\n                        verticalAlign: 'top',\r\n                        layout: 'vertical',\r\n                        x: 20,\r\n                        y: 10,\r\n                        itemStyle: { color: '#CCC', fontSize: '11px' },\r\n                        margin: 10\r\n                    },\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n                        borderColor: '#555555',\r\n                        style: { color: '#ffffff', fontSize: '12px', fontFamily: 'Arial, sans-serif' },\r\n                        formatter: function () {\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 5px;\"><b>${formatDate(this.x)}<\/b><\/div>`;\r\n                            this.points.forEach(point => {\r\n                                let bullet = `<span style=\"display:inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: ${point.color}; margin-right: 5px;\"><\/span>`;\r\n                                if (point.series.name === 'Bitcoin Price') {\r\n                                    s += `<div>${bullet} ${point.series.name}: <b>${formatCurrency(point.y, false)}<\/b><\/div>`;\r\n                                } else if (point.series.name === 'M2 Supply') {\r\n                                    s += `<div>${bullet} ${point.series.name}: <b>${formatCurrency(point.y, true)}<\/b><\/div>`;\r\n                                } else if (point.series.name === 'YoY Growth Rate') {\r\n                                    s += `<div>${bullet} ${point.series.name}: <b>${parseFloat(point.y.toFixed(2))}%<\/b><\/div>`;\r\n                                }\r\n                            });\r\n                            return s;\r\n                        }\r\n                    },\r\n                    plotOptions: {\r\n                        series: { animation: { duration: 500 } }\r\n                    },\r\n                    credits: { enabled: false }\r\n                });\r\n            }\r\n        } catch (error) {\r\n            console.error('Error rendering M2 Global chart:', error.message);\r\n            if (chartContainer) {\r\n                chartContainer.innerHTML = `\r\n                    <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n                        Unable to load chart data: ${error.message}. Please try again later.\r\n                    <\/div>`;\r\n            }\r\n        } finally {\r\n            loadingElement?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    periodSelect.addEventListener('change', async (event) => {\r\n        const selectedOptionValue = event.target.value;\r\n        localStorage.setItem('m2GlobalPeriod', selectedOptionValue);\r\n        await renderM2GlobalChart(selectedOptionValue);\r\n    });\r\n\r\n    const initialPeriod = localStorage.getItem('m2GlobalPeriod') || '2y-1d';\r\n    periodSelect.value = initialPeriod;\r\n    await renderM2GlobalChart(initialPeriod);\r\n});\r\n<\/script> \t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-75cefcf elementor-widget elementor-widget-html\" data-id=\"75cefcf\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\n document.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingElement = document.getElementById('loading-sp500');\r\n    const chartContainer = document.getElementById('sp500-chart');\r\n    const periodSelect = document.querySelector('.chart-period-select[data-chart-id=\"sp500-chart\"]');\r\n    let chartInstance = null;\r\n\r\n    const periodSettingsMap = {\r\n        '1d-15m': { days: 1, interval: '15m' },\r\n        '3d-15m': { days: 3, interval: '15m' },\r\n        '7d-15m': { days: 7, interval: '15m' },\r\n        '21d-15m': { days: 21, interval: '15m' },\r\n        '30d-1h': { days: 30, interval: '1h' },\r\n        '60d-1d': { days: 60, interval: '1d' },\r\n        '90d-1d': { days: 90, interval: '1d' },\r\n        '180d-1d': { days: 180, interval: '1d' },\r\n        '1y-1d': { days: 365, interval: '1d' },\r\n        '3y-1d': { days: 1095, interval: '1d' },\r\n        '5y-1d': { days: 1825, interval: '1d' },\r\n        '10y-1d': { days: 3650, interval: '1d' },\r\n        'all-1d': { days: Math.floor((new Date() - new Date('2011-01-01')) \/ (1000 * 60 * 60 * 24)), interval: '1d' }\r\n    };\r\n\r\n    function formatPrice(value) {\r\n        if (value >= 1e9) return '$' + (value \/ 1e9).toFixed(0) + 'B';\r\n        if (value >= 1e6) return '$' + (value \/ 1e6).toFixed(0) + 'M';\r\n        if (value >= 1e3) return '$' + (value \/ 1e3).toFixed(0) + 'K';\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    async function fetchLatestSP500FromYahoo() {\r\n        try {\r\n            console.log('[Yahoo SP500] Starting fetch via corsproxy.io...');\r\n            const yahooUrl = 'https:\/\/query1.finance.yahoo.com\/v8\/finance\/chart\/%5EGSPC?interval=1d';\r\n            const proxiedUrl = 'https:\/\/corsproxy.io\/?' + encodeURIComponent(yahooUrl);\r\n            \r\n            const response = await fetch(proxiedUrl);\r\n            console.log('[Yahoo SP500] Response status:', response.status, response.statusText);\r\n            \r\n            if (!response.ok) {\r\n                console.error('[Yahoo SP500] Response not OK, status:', response.status);\r\n                return null;\r\n            }\r\n            \r\n            const data = await response.json();\r\n            console.log('[Yahoo SP500] JSON parsed, keys:', Object.keys(data));\r\n            \r\n            if (!data.chart) {\r\n                console.error('[Yahoo SP500] No chart property in response');\r\n                return null;\r\n            }\r\n            if (!data.chart.result) {\r\n                console.error('[Yahoo SP500] No result property in chart');\r\n                return null;\r\n            }\r\n            if (!data.chart.result[0]) {\r\n                console.error('[Yahoo SP500] result[0] is empty');\r\n                return null;\r\n            }\r\n            \r\n            const result = data.chart.result[0];\r\n            console.log('[Yahoo SP500] result[0] keys:', Object.keys(result));\r\n            console.log('[Yahoo SP500] timestamp length:', result.timestamp?.length);\r\n            console.log('[Yahoo SP500] indicators.quote[0] exists:', !!result.indicators?.quote?.[0]);\r\n            \r\n            const timestamp = result.timestamp?.[result.timestamp.length - 1];\r\n            const quote = result.indicators?.quote?.[0];\r\n            const close = quote?.close?.[quote.close.length - 1];\r\n            \r\n            console.log('[Yahoo SP500] Extracted values - timestamp:', timestamp, 'close:', close);\r\n            \r\n            if (timestamp && close) {\r\n                const converted = {\r\n                    timestamp: new Date(timestamp * 1000).getTime(),\r\n                    close: parseFloat(close)\r\n                };\r\n                console.log('[Yahoo SP500] \u2705 Successfully fetched:', converted);\r\n                return converted;\r\n            }\r\n            \r\n            console.warn('[Yahoo SP500] Missing timestamp or close value - timestamp:', timestamp, 'close:', close);\r\n            return null;\r\n        } catch (error) {\r\n            console.error('[Yahoo SP500] \u274c Error:', error.message, error);\r\n            return null;\r\n        }\r\n    }\r\n\r\n    async function renderSP500Chart(selectedOptionValue = '21d-15m', addPrice = false) {\r\n        try {\r\n            loadingElement?.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d-15m'];\r\n            const { days, interval } = settings;\r\n            const cutoffDate = new Date('2011-01-01');\r\n            if (selectedOptionValue !== 'all-1d') {\r\n                const currentDate = new Date();\r\n                currentDate.setDate(currentDate.getDate() - days);\r\n                cutoffDate.setTime(Math.max(cutoffDate.getTime(), currentDate.getTime()));\r\n            }\r\n\r\n            let data;\r\n            try {\r\n                const response = await fetch(`https:\/\/serverless-vercel-nine.vercel.app\/api\/dca-calculator?days=${days}&interval=${interval}&apikey=f44bc0be4a49de8bee82b507835314eed8f72dd71d88d142f78e5125693b3bda`);\r\n                if (!response.ok) {\r\n                    throw new Error(`HTTP error! Status: ${response.status}`);\r\n                }\r\n                data = await response.json();\r\n            } catch (apiError) {\r\n                console.error('Error fetching SP500 data:', apiError);\r\n                throw apiError;\r\n            }\r\n\r\n            if (!Array.isArray(data) || data.length === 0) {\r\n                throw new Error('Invalid or empty data received from API');\r\n            }\r\n\r\n            \/\/ Fetch latest SP500 price from Yahoo\r\n            const latestSP500 = await fetchLatestSP500FromYahoo();\r\n            if (latestSP500) {\r\n                console.log(`[SP500] Latest from Yahoo: $${latestSP500.close} at ${new Date(latestSP500.timestamp).toISOString()}`);\r\n            } else {\r\n                console.warn('[SP500] Yahoo fetch returned null or failed');\r\n            }\r\n\r\n            let chartData = data\r\n                .filter(entry => {\r\n                    const timestamp = new Date(entry.timestamp);\r\n                    return timestamp >= cutoffDate && !isNaN(parseFloat(entry.spxPrice));\r\n                })\r\n                .map(entry => ({\r\n                    x: new Date(entry.timestamp).getTime(),\r\n                    spxPrice: parseFloat(entry.spxPrice)\r\n                }))\r\n                .sort((a, b) => a.x - b.x);\r\n\r\n            \/\/ Add latest SP500 price from Yahoo if available and not already in data\r\n            if (latestSP500 && (!chartData.length || latestSP500.timestamp > chartData[chartData.length - 1].x)) {\r\n                console.log('[SP500] Adding Yahoo data point. Current data length:', chartData.length, 'Latest timestamp:', latestSP500.timestamp, 'Last data point timestamp:', chartData[chartData.length - 1]?.x);\r\n                chartData.push({\r\n                    x: latestSP500.timestamp,\r\n                    spxPrice: latestSP500.close\r\n                });\r\n                console.log('[SP500] \u2705 Added latest Yahoo data point to series. New length:', chartData.length);\r\n            } else {\r\n                console.warn('[SP500] \u26a0\ufe0f  Did not add Yahoo point. latestSP500:', latestSP500, 'chartData.length:', chartData.length, 'Latest > Last?', latestSP500 && chartData.length && latestSP500.timestamp > chartData[chartData.length - 1]?.x);\r\n            }\r\n\r\n            if (chartData.length === 0) {\r\n                throw new Error('No valid data available after filtering for the selected period');\r\n            }\r\n\r\n            \/\/ Buscar pre\u00e7o de Bitcoin se Price Compare estiver ativo\r\n            const btcPriceData = [];\r\n            if (addPrice) {\r\n                try {\r\n                    const btcResponse = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${days}&interval=${interval}&apikey=f44bc0be4a49de8bee82b507835314eed8f72dd71d88d142f78e5125693b3bda`);\r\n                    const btcChartData = await btcResponse.json();\r\n                    if (btcChartData && Array.isArray(btcChartData)) {\r\n                        btcChartData.forEach(item => {\r\n                            const price = parseFloat(item.price);\r\n                            const timestamp = new Date(item.timestamp).getTime();\r\n                            if (!isNaN(price) && price > 0) {\r\n                                btcPriceData.push([timestamp, price]);\r\n                            }\r\n                        });\r\n                    }\r\n                } catch (e) {\r\n                    console.warn('Could not fetch BTC price data for SP500 comparison:', e);\r\n                }\r\n            }\r\n\r\n            \/\/ Fun\u00e7\u00f5es auxiliares para encontrar valores mais pr\u00f3ximos\r\n            function findSpxValue(timestamp, spxData) {\r\n                \/\/ Encontra o valor mais pr\u00f3ximo no tempo\r\n                let closest = null;\r\n                let minDiff = Infinity;\r\n                spxData.forEach(point => {\r\n                    const diff = Math.abs(point.x - timestamp);\r\n                    if (diff < minDiff) {\r\n                        minDiff = diff;\r\n                        closest = point;\r\n                    }\r\n                });\r\n                return closest;\r\n            }\r\n\r\n            function findBtcValue(timestamp, btcData) {\r\n                \/\/ Encontra o valor mais pr\u00f3ximo no tempo\r\n                let closest = null;\r\n                let minDiff = Infinity;\r\n                btcData.forEach(point => {\r\n                    const diff = Math.abs(point[0] - timestamp);\r\n                    if (diff < minDiff) {\r\n                        minDiff = diff;\r\n                        closest = { x: point[0], y: point[1] };\r\n                    }\r\n                });\r\n                return closest;\r\n            }\r\n\r\n            const spxValues = chartData.map(entry => entry.spxPrice);\r\n            const minSpx = Math.min(...spxValues);\r\n            const maxSpx = Math.max(...spxValues);\r\n            const spxRange = maxSpx - minSpx;\r\n            const spxMin = Math.max(0, minSpx - spxRange * 0.1);\r\n            const spxMax = maxSpx + spxRange * 0.1;\r\n\r\n            let series = [{\r\n                name: 'S&P 500',\r\n                data: chartData.map(entry => [entry.x, entry.spxPrice]),\r\n                color: '#278fff',\r\n                lineWidth: 2,\r\n                marker: { enabled: false, fillColor: 'transparent' },\r\n                states: { hover: { lineWidth: 2 }, inactive: { enabled: false } },\r\n                yAxis: 0\r\n            }];\r\n\r\n            let yAxis = [{\r\n                title: { text: null },\r\n                labels: {\r\n                    enabled: true,\r\n                    format: '{value}',\r\n                    style: { color: '#ffffff', fontSize: '11px' }\r\n                },\r\n                gridLineWidth: 0,\r\n                min: spxMin,\r\n                max: spxMax,\r\n                opposite: false\r\n            }];\r\n\r\n            if (addPrice && btcPriceData.length > 0) {\r\n                series.push({\r\n                    name: 'Bitcoin',\r\n                    data: btcPriceData,\r\n                    type: 'line',\r\n                    color: '#FFFFFF',\r\n                    lineWidth: 1.5,\r\n                    opacity: 0.9,\r\n                    marker: { enabled: false },\r\n                    states: { hover: { lineWidth: 1.5 }, inactive: { enabled: false } },\r\n                    yAxis: 1\r\n                });\r\n                yAxis.push({\r\n                    opposite: true,\r\n                    title: { text: null },\r\n                    labels: { enabled: false },\r\n                    gridLineWidth: 0,\r\n                    type: 'linear'\r\n                });\r\n            }\r\n\r\n            if (chartInstance) {\r\n                chartInstance.destroy();\r\n            }\r\n            console.log('Creating SP500 chart with series:', series.length, 'series');\r\n            console.log('Series details:', series.map(s => ({ name: s.name, dataLength: s.data.length })));\r\n            chartInstance = Highcharts.chart('sp500-chart', {\r\n                    chart: {\r\n                        type: 'line',\r\n                        backgroundColor: '#000000',\r\n                        margin: 20,\r\n                        spacing: [0, 0, 0, 0],\r\n                        style: { fontFamily: 'Arial, sans-serif' },\r\n                        height: null\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        labels: { enabled: false },\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        gridLineWidth: 0,\r\n                        crosshair: {\r\n                            color: '#333',\r\n                            dashStyle: 'dash'\r\n                        }\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series,\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n                        borderColor: '#555555',\r\n                        style: { color: '#ffffff', fontSize: '13px', fontFamily: 'Arial, sans-serif' },\r\n                        followPointer: true,\r\n                        stickOnContact: false,\r\n                        hideDelay: 0,\r\n                        animation: false,\r\n                        positioner: function (labelWidth, labelHeight, point) {\r\n                            const chart = this.chart;\r\n                            const plotLeft = chart.plotLeft;\r\n                            const plotTop = chart.plotTop;\r\n                            const plotWidth = chart.plotWidth;\r\n                            const plotHeight = chart.plotHeight;\r\n                            \r\n                            let x = point.plotX + plotLeft + 20;\r\n                            let y = point.plotY + plotTop - 10;\r\n                            \r\n                            \/\/ Se vai sair pela direita, posiciona \u00e0 esquerda\r\n                            if (x + labelWidth > chart.chartWidth) {\r\n                                x = point.plotX + plotLeft - labelWidth - 20;\r\n                            }\r\n                            \r\n                            \/\/ Se vai sair por cima, posiciona embaixo\r\n                            if (y < 0) {\r\n                                y = point.plotY + plotTop + 20;\r\n                            }\r\n                            \r\n                            \/\/ Se vai sair por baixo, posiciona em cima\r\n                            if (y + labelHeight > chart.chartHeight) {\r\n                                y = point.plotY + plotTop - labelHeight - 10;\r\n                            }\r\n                            \r\n                            return { x: x, y: y };\r\n                        },\r\n                        formatter: function() {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            \r\n                            \/\/ Sempre mostrar S&P 500 se houver dados\r\n                            const spxPoint = findSpxValue(this.x, chartData);\r\n                            if (spxPoint) {\r\n                                s += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: #278fff; margin-right: 5px;\"><\/span>\r\n                                    S&P 500: <b>$${spxPoint.spxPrice.toFixed(2)}<\/b>\r\n                                <\/div>`;\r\n                            }\r\n                            \r\n                            \/\/ Sempre mostrar Bitcoin se houver dados e Price Compare estiver ativo\r\n                            if (addPrice && btcPriceData.length > 0) {\r\n                                const btcPoint = findBtcValue(this.x, btcPriceData);\r\n                                if (btcPoint) {\r\n                                    s += `<div>\r\n                                        <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: #FFFFFF; margin-right: 5px;\"><\/span>\r\n                                        Bitcoin: <b>$${btcPoint.y.toFixed(0)}<\/b>\r\n                                    <\/div>`;\r\n                                }\r\n                            }\r\n                            \r\n                            return s;\r\n                        }\r\n                    },\r\n                    legend: { enabled: false },\r\n                    plotOptions: {\r\n                        series: {\r\n                            animation: { duration: 500 },\r\n                            point: {\r\n                                events: {\r\n                                    mouseOver: function() {\r\n                                        console.log('Mouse over point:', this.series.name, this.x, this.y);\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    },\r\n                    credits: { enabled: false }\r\n                });\r\n                console.log('SP500 chart created successfully');\r\n        } catch (error) {\r\n            if (chartContainer) {\r\n                chartContainer.innerHTML = `\r\n                    <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n                        Unable to load chart data. Please try again later.\r\n                    <\/div>`;\r\n            }\r\n        } finally {\r\n            loadingElement?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    if (periodSelect) {\r\n        document.addEventListener('priceCompareToggled', async (event) => {\r\n            const showPrice = event.detail;\r\n            const selectedOptionValue = periodSelect.value;\r\n            await renderSP500Chart(selectedOptionValue, showPrice);\r\n        });\r\n\r\n        periodSelect.addEventListener('change', async (event) => {\r\n            const selectedOptionValue = event.target.value;\r\n            localStorage.setItem('sp500Period', selectedOptionValue);\r\n            \/\/ Usa o estado centralizado\r\n            const showPrice = window.PriceCompareState ? window.PriceCompareState.get() : true;\r\n            await renderSP500Chart(selectedOptionValue, showPrice);\r\n        });\r\n\r\n        const initialPeriod = localStorage.getItem('sp500Period') || '21d-15m';\r\n        periodSelect.value = initialPeriod;\r\n        \r\n        \/\/ Ler o estado de price-compare do localStorage\r\n        const chartSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings') || '{}');\r\n        const initialShowPrice = chartSettings['price-compare'] === true;\r\n        \r\n        console.log('SP500 chart initialization: chartSettings =', chartSettings, 'initialShowPrice =', initialShowPrice);\r\n        renderSP500Chart(initialPeriod, initialShowPrice);\r\n    }\r\n});\r\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5ba9314 elementor-widget elementor-widget-html\" data-id=\"5ba9314\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\r\n\r\n<script>\r\n    document.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingElement = document.getElementById('loading-gold');\r\n    const chartContainer = document.getElementById('gold-chart');\r\n    const periodSelect = document.querySelector('.chart-period-select[data-chart-id=\"gold-chart\"]');\r\n    let chartInstance = null;\r\n\r\n    const periodSettingsMap = {\r\n        '1d-15m': { days: 1, interval: '15m' },\r\n        '3d-15m': { days: 3, interval: '15m' },\r\n        '7d-15m': { days: 7, interval: '15m' },\r\n        '21d-15m': { days: 21, interval: '15m' },\r\n        '30d-1h': { days: 30, interval: '1h' },\r\n        '60d-1d': { days: 60, interval: '1d' },\r\n        '90d-1d': { days: 90, interval: '1d' },\r\n        '180d-1d': { days: 180, interval: '1d' },\r\n        '1y-1d': { days: 365, interval: '1d' },\r\n        '3y-1d': { days: 1095, interval: '1d' },\r\n        '5y-1d': { days: 1825, interval: '1d' },\r\n        '10y-1d': { days: 3650, interval: '1d' },\r\n        'all-1d': { days: Math.floor((new Date() - new Date('2011-01-01')) \/ (1000 * 60 * 60 * 24)), interval: '1d' }\r\n    };\r\n\r\n    function formatPrice(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    function formatDateWithUserTimezone(timestamp) {\r\n        const date = new Date(timestamp);\r\n        return date.toLocaleString('en-US', {\r\n            year: 'numeric',\r\n            month: 'short',\r\n            day: 'numeric',\r\n            hour: '2-digit',\r\n            minute: '2-digit'\r\n        });\r\n    }\r\n\r\n    async function renderGoldChart(selectedOptionValue = '21d-15m', addPrice = false) {\r\n        try {\r\n            loadingElement?.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d-15m'];\r\n            const { days, interval } = settings;\r\n            const cutoffDate = new Date('2011-01-01');\r\n            if (selectedOptionValue !== 'all-1d') {\r\n                const currentDate = new Date();\r\n                currentDate.setDate(currentDate.getDate() - days);\r\n                cutoffDate.setTime(Math.max(cutoffDate.getTime(), currentDate.getTime()));\r\n            }\r\n\r\n            let data;\r\n            try {\r\n                const response = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/paxgold-kline?days=${days}&limit=10000&apikey=f44bc0be4a49de8bee82b507835314eed8f72dd71d88d142f78e5125693b3bda`);\r\n                if (!response.ok) {\r\n                    throw new Error(`HTTP error! Status: ${response.status}`);\r\n                }\r\n                const jsonResponse = await response.json();\r\n                data = jsonResponse.data; \/\/ Extract the data array from the response\r\n                console.log(`[PaxGold] Fetched ${data.length} records for ${days} days with interval: ${interval}`);\r\n            } catch (apiError) {\r\n                console.error('Error fetching Gold data:', apiError);\r\n                throw apiError;\r\n            }\r\n\r\n            if (!Array.isArray(data) || data.length === 0) {\r\n                throw new Error('Invalid or empty data received from API');\r\n            }\r\n\r\n            const chartData = data\r\n                .filter(entry => {\r\n                    const timestamp = new Date(entry.time);\r\n                    return timestamp >= cutoffDate && !isNaN(parseFloat(entry.close));\r\n                })\r\n                .map(entry => ({\r\n                    x: new Date(entry.time).getTime(),\r\n                    goldPrice: parseFloat(entry.close)\r\n                }))\r\n                .sort((a, b) => a.x - b.x); \/\/ Sort by timestamp ascending\r\n\r\n            if (chartData.length === 0) {\r\n                throw new Error('No valid data available after filtering for the selected period');\r\n            }\r\n\r\n            \/\/ Buscar pre\u00e7o de Bitcoin se Price Compare estiver ativo\r\n            const btcPriceData = [];\r\n            if (addPrice) {\r\n                try {\r\n                    \/\/ Always use finer interval for Bitcoin (15m for up to 30 days, 1h for larger periods)\r\n                    let btcInterval = '15m';\r\n                    if (days > 30) {\r\n                        btcInterval = '1h';\r\n                    }\r\n                    const btcResponse = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${days}&interval=${btcInterval}&apikey=f44bc0be4a49de8bee82b507835314eed8f72dd71d88d142f78e5125693b3bda`);\r\n                    const btcChartData = await btcResponse.json();\r\n                    if (btcChartData && Array.isArray(btcChartData)) {\r\n                        btcChartData.forEach(item => {\r\n                            const price = parseFloat(item.price);\r\n                            const timestamp = new Date(item.timestamp).getTime();\r\n                            if (!isNaN(price) && price > 0) {\r\n                                btcPriceData.push([timestamp, price]);\r\n                            }\r\n                        });\r\n                    }\r\n                    console.log(`[Bitcoin] Fetched ${btcPriceData.length} records with interval: ${btcInterval}`);\r\n                } catch (e) {\r\n                    console.warn('Could not fetch BTC price data for Gold comparison:', e);\r\n                }\r\n            }\r\n\r\n            \/\/ Fun\u00e7\u00f5es auxiliares para encontrar valores mais pr\u00f3ximos\r\n            function findGoldValue(timestamp, goldData) {\r\n                \/\/ Encontra o valor mais pr\u00f3ximo no tempo\r\n                let closest = null;\r\n                let minDiff = Infinity;\r\n                goldData.forEach(point => {\r\n                    const diff = Math.abs(point.x - timestamp);\r\n                    if (diff < minDiff) {\r\n                        minDiff = diff;\r\n                        closest = point;\r\n                    }\r\n                });\r\n                return closest;\r\n            }\r\n\r\n            function findBtcValue(timestamp, btcData) {\r\n                \/\/ Encontra o valor mais pr\u00f3ximo no tempo\r\n                let closest = null;\r\n                let minDiff = Infinity;\r\n                btcData.forEach(point => {\r\n                    const diff = Math.abs(point[0] - timestamp);\r\n                    if (diff < minDiff) {\r\n                        minDiff = diff;\r\n                        closest = { x: point[0], y: point[1] };\r\n                    }\r\n                });\r\n                return closest;\r\n            }\r\n\r\n            const goldValues = chartData.map(entry => entry.goldPrice);\r\n            const minGold = Math.min(...goldValues);\r\n            const maxGold = Math.max(...goldValues);\r\n            const goldRange = maxGold - minGold;\r\n            const goldMin = Math.max(0, minGold - goldRange * 0.1);\r\n            const goldMax = maxGold + goldRange * 0.1;\r\n\r\n            let series = [{\r\n                name: 'Gold',\r\n                data: chartData.map(entry => [entry.x, entry.goldPrice]),\r\n                color: '#FFD700',\r\n                lineWidth: 2,\r\n                marker: { enabled: false, fillColor: 'transparent' },\r\n                states: { hover: { lineWidth: 2 }, inactive: { enabled: false } },\r\n                yAxis: 0\r\n            }];\r\n\r\n            let yAxis = [{\r\n                title: { text: null },\r\n                labels: {\r\n                    enabled: true,\r\n                    format: '{value}',\r\n                    style: { color: '#ffffff', fontSize: '11px' }\r\n                },\r\n                gridLineWidth: 0,\r\n                min: goldMin,\r\n                max: goldMax,\r\n                opposite: false\r\n            }];\r\n\r\n            if (addPrice && btcPriceData.length > 0) {\r\n                series.push({\r\n                    name: 'Bitcoin',\r\n                    data: btcPriceData,\r\n                    type: 'line',\r\n                    color: '#FFFFFF',\r\n                    lineWidth: 1.5,\r\n                    opacity: 0.9,\r\n                    marker: { enabled: false },\r\n                    states: { hover: { lineWidth: 1.5 }, inactive: { enabled: false } },\r\n                    yAxis: 1\r\n                });\r\n                yAxis.push({\r\n                    opposite: true,\r\n                    title: { text: null },\r\n                    labels: { enabled: false },\r\n                    gridLineWidth: 0,\r\n                    type: 'linear'\r\n                });\r\n            }\r\n\r\n            if (chartInstance) {\r\n                chartInstance.destroy();\r\n            }\r\n            chartInstance = Highcharts.chart('gold-chart', {\r\n                    chart: {\r\n                        type: 'line',\r\n                        backgroundColor: '#000000',\r\n                        margin: 20,\r\n                        spacing: [0, 0, 0, 0],\r\n                        style: { fontFamily: 'Arial, sans-serif' },\r\n                        height: null\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        labels: { enabled: false },\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        gridLineWidth: 0,\r\n                        crosshair: {\r\n                            color: '#333',\r\n                            dashStyle: 'dash'\r\n                        }\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series,\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n                        borderColor: '#555555',\r\n                        style: { color: '#ffffff', fontSize: '13px', fontFamily: 'Arial, sans-serif' },\r\n                        followPointer: true,\r\n                        stickOnContact: false,\r\n                        hideDelay: 0,\r\n                        animation: false,\r\n                        positioner: function (labelWidth, labelHeight, point) {\r\n                            const chart = this.chart;\r\n                            const plotLeft = chart.plotLeft;\r\n                            const plotTop = chart.plotTop;\r\n                            const plotWidth = chart.plotWidth;\r\n                            const plotHeight = chart.plotHeight;\r\n                            \r\n                            let x = point.plotX + plotLeft + 20;\r\n                            let y = point.plotY + plotTop - 10;\r\n                            \r\n                            \/\/ Se vai sair pela direita, posiciona \u00e0 esquerda\r\n                            if (x + labelWidth > chart.chartWidth) {\r\n                                x = point.plotX + plotLeft - labelWidth - 20;\r\n                            }\r\n                            \r\n                            \/\/ Se vai sair por cima, posiciona embaixo\r\n                            if (y < 0) {\r\n                                y = point.plotY + plotTop + 20;\r\n                            }\r\n                            \r\n                            \/\/ Se vai sair por baixo, posiciona em cima\r\n                            if (y + labelHeight > chart.chartHeight) {\r\n                                y = point.plotY + plotTop - labelHeight - 10;\r\n                            }\r\n                            \r\n                            return { x: x, y: y };\r\n                        },\r\n                        formatter: function() {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            \r\n                            \/\/ Sempre mostrar Gold se houver dados\r\n                            const goldPoint = findGoldValue(this.x, chartData);\r\n                            if (goldPoint) {\r\n                                s += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: #FFD700; margin-right: 5px;\"><\/span>\r\n                                    Gold: <b>$${goldPoint.goldPrice.toFixed(0)}<\/b>\r\n                                <\/div>`;\r\n                            }\r\n                            \r\n                            \/\/ Sempre mostrar Bitcoin se houver dados e Price Compare estiver ativo\r\n                            if (addPrice && btcPriceData.length > 0) {\r\n                                const btcPoint = findBtcValue(this.x, btcPriceData);\r\n                                if (btcPoint) {\r\n                                    s += `<div>\r\n                                        <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: #FFFFFF; margin-right: 5px;\"><\/span>\r\n                                        Bitcoin: <b>$${btcPoint.y.toFixed(0)}<\/b>\r\n                                    <\/div>`;\r\n                                }\r\n                            }\r\n                            \r\n                            return s;\r\n                        }\r\n                    },\r\n                    legend: { enabled: false },\r\n                    plotOptions: { series: { animation: { duration: 500 } } },\r\n                    credits: { enabled: false }\r\n                });\r\n        } catch (error) {\r\n            if (chartContainer) {\r\n                chartContainer.innerHTML = `\r\n                    <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n                        Unable to load chart data. Please try again later.\r\n                    <\/div>`;\r\n            }\r\n        } finally {\r\n            loadingElement?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    if (periodSelect) {\r\n        document.addEventListener('priceCompareToggled', async (event) => {\r\n            const showPrice = event.detail;\r\n            const selectedOptionValue = periodSelect.value;\r\n            await renderGoldChart(selectedOptionValue, showPrice);\r\n        });\r\n\r\n        periodSelect.addEventListener('change', async (event) => {\r\n            const selectedOptionValue = event.target.value;\r\n            localStorage.setItem('goldPeriod', selectedOptionValue);\r\n            \/\/ Usa o estado centralizado\r\n            const showPrice = window.PriceCompareState ? window.PriceCompareState.get() : true;\r\n            await renderGoldChart(selectedOptionValue, showPrice);\r\n        });\r\n\r\n        const initialPeriod = localStorage.getItem('goldPeriod') || '21d-15m';\r\n        periodSelect.value = initialPeriod;\r\n        \r\n        \/\/ Ler o estado de price-compare do localStorage\r\n        const chartSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings') || '{}');\r\n        const initialShowPrice = chartSettings['price-compare'] === true;\r\n        \r\n        console.log('Gold chart initialization: chartSettings =', chartSettings, 'initialShowPrice =', initialShowPrice);\r\n        renderGoldChart(initialPeriod, initialShowPrice);\r\n    }\r\n});\r\n<\/script> \t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-badaa88 elementor-widget elementor-widget-html\" data-id=\"badaa88\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<script>\r\n  document.addEventListener('DOMContentLoaded', async () => {\r\n    const loadingElement = document.getElementById('loading-mstr');\r\n    const chartContainer = document.getElementById('mstr-chart');\r\n    const periodSelect = document.querySelector('.chart-period-select[data-chart-id=\"mstr-chart\"]');\r\n    let chartInstance = null;\r\n\r\n    const periodSettingsMap = {\r\n        '1d-15m': { days: 1, interval: '15m' },\r\n        '3d-15m': { days: 3, interval: '15m' },\r\n        '7d-15m': { days: 7, interval: '15m' },\r\n        '21d-15m': { days: 21, interval: '15m' },\r\n        '30d-1h': { days: 30, interval: '1h' },\r\n        '60d-1d': { days: 60, interval: '1d' },\r\n        '90d-1d': { days: 90, interval: '1d' },\r\n        '180d-1d': { days: 180, interval: '1d' },\r\n        '1y-1d': { days: 365, interval: '1d' },\r\n        '3y-1d': { days: 1095, interval: '1d' },\r\n        '5y-1d': { days: 1825, interval: '1d' },\r\n        '10y-1d': { days: 3650, interval: '1d' },\r\n        'all-1d': { days: Math.floor((new Date() - new Date('2011-01-01')) \/ (1000 * 60 * 60 * 24)), interval: '1d' }\r\n    };\r\n\r\n    function formatPrice(value) {\r\n        return '$' + value.toFixed(0);\r\n    }\r\n\r\n    function formatDateWithUserTimezone(timestamp) {\r\n        const date = new Date(timestamp);\r\n        return date.toLocaleString('en-US', {\r\n            year: 'numeric',\r\n            month: 'short',\r\n            day: 'numeric',\r\n            hour: '2-digit',\r\n            minute: '2-digit'\r\n        });\r\n    }\r\n\r\n    async function fetchLatestMSTRFromYahoo() {\r\n        try {\r\n            console.log('[Yahoo MSTR] Starting fetch via corsproxy.io...');\r\n            const yahooUrl = 'https:\/\/query1.finance.yahoo.com\/v8\/finance\/chart\/MSTR?interval=1d';\r\n            const proxiedUrl = 'https:\/\/corsproxy.io\/?' + encodeURIComponent(yahooUrl);\r\n            \r\n            const response = await fetch(proxiedUrl);\r\n            console.log('[Yahoo MSTR] Response status:', response.status, response.statusText);\r\n            \r\n            if (!response.ok) {\r\n                console.error('[Yahoo MSTR] Response not OK, status:', response.status);\r\n                return null;\r\n            }\r\n            \r\n            const data = await response.json();\r\n            console.log('[Yahoo MSTR] JSON parsed, keys:', Object.keys(data));\r\n            \r\n            if (!data.chart) {\r\n                console.error('[Yahoo MSTR] No chart property in response');\r\n                return null;\r\n            }\r\n            if (!data.chart.result) {\r\n                console.error('[Yahoo MSTR] No result property in chart');\r\n                return null;\r\n            }\r\n            if (!data.chart.result[0]) {\r\n                console.error('[Yahoo MSTR] result[0] is empty');\r\n                return null;\r\n            }\r\n            \r\n            const result = data.chart.result[0];\r\n            console.log('[Yahoo MSTR] result[0] keys:', Object.keys(result));\r\n            console.log('[Yahoo MSTR] timestamp length:', result.timestamp?.length);\r\n            console.log('[Yahoo MSTR] indicators.quote[0] exists:', !!result.indicators?.quote?.[0]);\r\n            \r\n            const timestamp = result.timestamp?.[result.timestamp.length - 1];\r\n            const quote = result.indicators?.quote?.[0];\r\n            const close = quote?.close?.[quote.close.length - 1];\r\n            \r\n            console.log('[Yahoo MSTR] Extracted values - timestamp:', timestamp, 'close:', close);\r\n            \r\n            if (timestamp && close) {\r\n                const converted = {\r\n                    timestamp: new Date(timestamp * 1000).getTime(),\r\n                    close: parseFloat(close)\r\n                };\r\n                console.log('[Yahoo MSTR] \u2705 Successfully fetched:', converted);\r\n                return converted;\r\n            }\r\n            \r\n            console.warn('[Yahoo MSTR] Missing timestamp or close value - timestamp:', timestamp, 'close:', close);\r\n            return null;\r\n        } catch (error) {\r\n            console.error('[Yahoo MSTR] \u274c Error:', error.message, error);\r\n            return null;\r\n        }\r\n    }\r\n\r\n    async function renderComparisonChart(selectedOptionValue = '21d-15m', addPrice = false) {\r\n        try {\r\n            loadingElement?.classList.add('visible');\r\n\r\n            const settings = periodSettingsMap[selectedOptionValue] || periodSettingsMap['21d-15m'];\r\n            const { days, interval } = settings;\r\n            const cutoffDate = new Date('2011-01-01');\r\n            if (selectedOptionValue !== 'all-1d') {\r\n                const currentDate = new Date();\r\n                currentDate.setDate(currentDate.getDate() - days);\r\n                cutoffDate.setTime(Math.max(cutoffDate.getTime(), currentDate.getTime()));\r\n            }\r\n\r\n            let mstrData;\r\n            try {\r\n                const mstrResponse = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/strategy-history?days=${days}&interval=${interval}&apikey=f44bc0be4a49de8bee82b507835314eed8f72dd71d88d142f78e5125693b3bda`);\r\n                if (!mstrResponse.ok) {\r\n                    throw new Error(`HTTP error fetching MSTR data! Status: ${mstrResponse.status}`);\r\n                }\r\n                mstrData = await mstrResponse.json();\r\n                console.log(`[MSTR] Fetched ${mstrData.length} records for ${days} days with interval: ${interval}`);\r\n            } catch (apiError) {\r\n                console.error('Error fetching MSTR data:', apiError);\r\n                const fallbackResponse = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/strategy-history?apikey=f44bc0be4a49de8bee82b507835314eed8f72dd71d88d142f78e5125693b3bda`);\r\n                if (!fallbackResponse.ok) {\r\n                    throw new Error(`HTTP error on fallback MSTR fetch! Status: ${fallbackResponse.status}`);\r\n                }\r\n                mstrData = await fallbackResponse.json();\r\n            }\r\n\r\n            \/\/ Fetch latest MSTR price from Yahoo\r\n            const latestMSTR = await fetchLatestMSTRFromYahoo();\r\n            if (latestMSTR) {\r\n                console.log(`[MSTR] Latest from Yahoo: $${latestMSTR.close} at ${new Date(latestMSTR.timestamp).toISOString()}`);\r\n            } else {\r\n                console.warn('[MSTR] Yahoo fetch returned null or failed');\r\n            }\r\n\r\n            let btcPriceData = [];\r\n            if (addPrice) {\r\n                try {\r\n                    \/\/ Always use finer interval for Bitcoin (15m for up to 30 days, 1h for larger periods)\r\n                    let btcInterval = '15m';\r\n                    if (days > 30) {\r\n                        btcInterval = '1h';\r\n                    }\r\n                    const btcResponse = await fetch(`https:\/\/api.bitcoincounterflow.com\/api\/open-interest?days=${days}&interval=${btcInterval}&apikey=f44bc0be4a49de8bee82b507835314eed8f72dd71d88d142f78e5125693b3bda`);\r\n                    const btcChartData = await btcResponse.json();\r\n                    if (btcChartData && Array.isArray(btcChartData)) {\r\n                        btcChartData.forEach(item => {\r\n                            const price = parseFloat(item.price);\r\n                            const timestamp = new Date(item.timestamp).getTime();\r\n                            if (!isNaN(price) && price > 0) {\r\n                                btcPriceData.push([timestamp, price]);\r\n                            }\r\n                        });\r\n                    }\r\n                    console.log(`[Bitcoin] Fetched ${btcPriceData.length} records with interval: ${btcInterval}`);\r\n                } catch (e) {\r\n                    console.warn('Could not fetch BTC price data for MSTR comparison:', e);\r\n                }\r\n            }\r\n\r\n            if (!Array.isArray(mstrData) || mstrData.length === 0) {\r\n                throw new Error('Invalid or empty MSTR data received from API');\r\n            }\r\n\r\n            let chartData = mstrData\r\n                .filter(entry => {\r\n                    const timestamp = new Date(entry.date);\r\n                    return timestamp >= cutoffDate && !isNaN(parseFloat(entry.close));\r\n                })\r\n                .map(entry => ({\r\n                    x: new Date(entry.date).getTime(),\r\n                    mstrPrice: parseFloat(entry.close)\r\n                }))\r\n                .sort((a, b) => a.x - b.x);\r\n\r\n            \/\/ Add latest MSTR price from Yahoo if available and not already in data\r\n            if (latestMSTR && (!chartData.length || latestMSTR.timestamp > chartData[chartData.length - 1].x)) {\r\n                console.log('[MSTR] Adding Yahoo data point. Current data length:', chartData.length, 'Latest timestamp:', latestMSTR.timestamp, 'Last data point timestamp:', chartData[chartData.length - 1]?.x);\r\n                chartData.push({\r\n                    x: latestMSTR.timestamp,\r\n                    mstrPrice: latestMSTR.close\r\n                });\r\n                console.log('[MSTR] \u2705 Added latest Yahoo data point to series. New length:', chartData.length);\r\n            } else {\r\n                console.warn('[MSTR] \u26a0\ufe0f  Did not add Yahoo point. latestMSTR:', latestMSTR, 'chartData.length:', chartData.length, 'Latest > Last?', latestMSTR && chartData.length && latestMSTR.timestamp > chartData[chartData.length - 1]?.x);\r\n            }\r\n\r\n            if (chartData.length === 0) {\r\n                throw new Error('No valid data available after filtering for the selected period');\r\n            }\r\n\r\n            \/\/ Helper functions to find closest values\r\n            function findMstrValue(timestamp, mstrData) {\r\n                let closest = null;\r\n                let minDiff = Infinity;\r\n                mstrData.forEach(point => {\r\n                    const diff = Math.abs(point.x - timestamp);\r\n                    if (diff < minDiff) {\r\n                        minDiff = diff;\r\n                        closest = point;\r\n                    }\r\n                });\r\n                return closest;\r\n            }\r\n\r\n            function findBtcValue(timestamp, btcData) {\r\n                let closest = null;\r\n                let minDiff = Infinity;\r\n                btcData.forEach(point => {\r\n                    const diff = Math.abs(point[0] - timestamp);\r\n                    if (diff < minDiff) {\r\n                        minDiff = diff;\r\n                        closest = { x: point[0], y: point[1] };\r\n                    }\r\n                });\r\n                return closest;\r\n            }\r\n\r\n            const mstrValues = chartData.map(entry => entry.mstrPrice);\r\n            const minMSTR = Math.min(...mstrValues);\r\n            const maxMSTR = Math.max(...mstrValues);\r\n            const mstrRange = maxMSTR - minMSTR;\r\n            const mstrMin = Math.max(0, minMSTR - mstrRange * 0.1);\r\n            const mstrMax = maxMSTR + mstrRange * 0.1;\r\n\r\n            let series = [{\r\n                name: 'MSTR',\r\n                data: chartData.map(entry => [entry.x, entry.mstrPrice]),\r\n                color: '#5d54ec',\r\n                lineWidth: 2,\r\n                marker: { enabled: false, fillColor: 'transparent' },\r\n                states: { hover: { lineWidth: 2 }, inactive: { enabled: false } },\r\n                yAxis: 0\r\n            }];\r\n\r\n            let yAxis = [{\r\n                title: { text: null },\r\n                labels: {\r\n                    enabled: true,\r\n                    formatter: function() { return formatPrice(this.value); },\r\n                    style: { color: '#5d54ec', fontSize: '11px' }\r\n                },\r\n                gridLineWidth: 0,\r\n                min: mstrMin,\r\n                max: mstrMax,\r\n                type: 'logarithmic',\r\n                opposite: false\r\n            }];\r\n\r\n            if (addPrice && btcPriceData.length > 0) {\r\n                const btcValues = btcPriceData.map(entry => entry[1]);\r\n                const minBTC = Math.min(...btcValues);\r\n                const maxBTC = Math.max(...btcValues);\r\n                const btcRange = maxBTC - minBTC;\r\n                const btcMin = Math.max(0, minBTC - btcRange * 0.1);\r\n                const btcMax = maxBTC + btcRange * 0.1;\r\n\r\n                series.push({\r\n                    name: 'Bitcoin',\r\n                    data: btcPriceData,\r\n                    type: 'line',\r\n                    color: '#FFFFFF',\r\n                    lineWidth: 1.5,\r\n                    opacity: 0.9,\r\n                    marker: { enabled: false },\r\n                    states: { hover: { lineWidth: 1.5 }, inactive: { enabled: false } },\r\n                    yAxis: 1\r\n                });\r\n                yAxis.push({\r\n                    opposite: true,\r\n                    title: { text: null },\r\n                    labels: { enabled: false },\r\n                    gridLineWidth: 0,\r\n                    type: 'linear',\r\n                    min: btcMin,\r\n                    max: btcMax\r\n                });\r\n            }\r\n\r\n            if (chartInstance) {\r\n                chartInstance.destroy();\r\n            }\r\n            chartInstance = Highcharts.chart('mstr-chart', {\r\n                    chart: {\r\n                        type: 'line',\r\n                        backgroundColor: '#000000',\r\n                        margin: 20,\r\n                        spacing: [0, 0, 0, 0],\r\n                        style: { fontFamily: 'Arial, sans-serif' },\r\n                        height: null\r\n                    },\r\n                    title: { text: null },\r\n                    xAxis: {\r\n                        type: 'datetime',\r\n                        labels: { enabled: false },\r\n                        lineColor: 'transparent',\r\n                        tickLength: 0,\r\n                        gridLineWidth: 0,\r\n                        crosshair: {\r\n                            color: '#333',\r\n                            dashStyle: 'dash'\r\n                        },\r\n                        plotLines: [{\r\n                            color: '#fff',\r\n                            width: 1,\r\n                            value: Date.UTC(2020, 7, 11),\r\n                            dashStyle: 'Dash',\r\n                            label: {\r\n                                text: 'Start of MSTR Bitcoin Purchases',\r\n                                style: { color: '#fff' },\r\n                                rotation: 0,\r\n                                align: 'left',\r\n                                verticalAlign: 'top',\r\n                                x: 5,\r\n                                y: 15\r\n                            },\r\n                            zIndex: 10\r\n                        }]\r\n                    },\r\n                    yAxis: yAxis,\r\n                    series: series,\r\n                    tooltip: {\r\n                        shared: true,\r\n                        useHTML: true,\r\n                        backgroundColor: 'rgba(17, 17, 17, 0.8)',\r\n                        borderColor: '#555555',\r\n                        style: { color: '#ffffff', fontSize: '13px', fontFamily: 'Arial, sans-serif' },\r\n                        followPointer: true,\r\n                        stickOnContact: false,\r\n                        hideDelay: 0,\r\n                        animation: false,\r\n                        positioner: function (labelWidth, labelHeight, point) {\r\n                            const chart = this.chart;\r\n                            const plotLeft = chart.plotLeft;\r\n                            const plotTop = chart.plotTop;\r\n                            const plotWidth = chart.plotWidth;\r\n                            const plotHeight = chart.plotHeight;\r\n                            \r\n                            let x = point.plotX + plotLeft + 20;\r\n                            let y = point.plotY + plotTop - 10;\r\n                            \r\n                            \/\/ If will exit on the right, position on the left\r\n                            if (x + labelWidth > chart.chartWidth) {\r\n                                x = point.plotX + plotLeft - labelWidth - 20;\r\n                            }\r\n                            \r\n                            \/\/ If will exit on top, position on bottom\r\n                            if (y < 0) {\r\n                                y = point.plotY + plotTop + 20;\r\n                            }\r\n                            \r\n                            \/\/ If will exit on bottom, position on top\r\n                            if (y + labelHeight > chart.chartHeight) {\r\n                                y = point.plotY + plotTop - labelHeight - 10;\r\n                            }\r\n                            \r\n                            return { x: x, y: y };\r\n                        },\r\n                        formatter: function() {\r\n                            const date = new Date(this.x).toLocaleString('pt-BR', {\r\n                                day: '2-digit',\r\n                                month: 'short',\r\n                                year: 'numeric',\r\n                                hour: '2-digit',\r\n                                minute: '2-digit',\r\n                                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n                            });\r\n                            let s = `<div style=\"text-align: right; font-size: 11px; padding-bottom: 10px;\"><b>${date}<\/b><\/div>`;\r\n                            \r\n                            \/\/ Always show MSTR if there is data\r\n                            const mstrPoint = findMstrValue(this.x, chartData);\r\n                            if (mstrPoint) {\r\n                                s += `<div>\r\n                                    <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: #5d54ec; margin-right: 5px;\"><\/span>\r\n                                    MSTR: <b>$${mstrPoint.mstrPrice.toFixed(0)}<\/b>\r\n                                <\/div>`;\r\n                            }\r\n                            \r\n                            \/\/ Always show Bitcoin if there is data and Price Compare is active\r\n                            if (addPrice && btcPriceData.length > 0) {\r\n                                const btcPoint = findBtcValue(this.x, btcPriceData);\r\n                                if (btcPoint) {\r\n                                    s += `<div>\r\n                                        <span style=\"display: inline-block; width: 6px; height: 6px; border-radius: 50%; background-color: #FFFFFF; margin-right: 5px;\"><\/span>\r\n                                        Bitcoin: <b>$${btcPoint.y.toFixed(0)}<\/b>\r\n                                    <\/div>`;\r\n                                }\r\n                            }\r\n                            \r\n                            return s;\r\n                        }\r\n                    },\r\n                    legend: { enabled: false },\r\n                    plotOptions: { series: { animation: { duration: 500 } } },\r\n                    credits: { enabled: false }\r\n                });\r\n        } catch (error) {\r\n            console.error('Error rendering MSTR chart:', error);\r\n            if (chartContainer) {\r\n                chartContainer.innerHTML = `\r\n                    <div style=\"color: #ff6f61; text-align: center; padding: 20px;\">\r\n                        Unable to load chart data. Please try again later.\r\n                    <\/div>`;\r\n            }\r\n        } finally {\r\n            loadingElement?.classList.remove('visible');\r\n        }\r\n    }\r\n\r\n    if (periodSelect) {\r\n        document.addEventListener('priceCompareToggled', async (event) => {\r\n            const showPrice = event.detail;\r\n            const selectedOptionValue = periodSelect.value;\r\n            await renderComparisonChart(selectedOptionValue, showPrice);\r\n        });\r\n\r\n        periodSelect.addEventListener('change', async (event) => {\r\n            const selectedOptionValue = event.target.value;\r\n            localStorage.setItem('mstrBitcoinPeriod', selectedOptionValue);\r\n            \/\/ Usa o estado centralizado\r\n            const showPrice = window.PriceCompareState ? window.PriceCompareState.get() : true;\r\n            await renderComparisonChart(selectedOptionValue, showPrice);\r\n        });\r\n\r\n        const initialPeriod = localStorage.getItem('mstrBitcoinPeriod') || '21d-15m';\r\n        periodSelect.value = initialPeriod;\r\n        \r\n        \/\/ Ler o estado de price-compare do localStorage\r\n        const chartSettings = JSON.parse(localStorage.getItem('chartVisibilitySettings') || '{}');\r\n        const initialShowPrice = chartSettings['price-compare'] === true;\r\n        \r\n        console.log('MSTR chart initialization: chartSettings =', chartSettings, 'initialShowPrice =', initialShowPrice);\r\n        await renderComparisonChart(initialPeriod, initialShowPrice);\r\n    }\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","protected":false},"excerpt":{"rendered":"<p>Bitcoin BTC\/USD 3 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 OmniFlow Model PRO Macro &#038; Liquidity Global M2 Growth Bitcoin x Gold x S&#038;P500 DXY x Bitcoin Heatmaps &#038; SuperChart Liquidation Heatmap Liquidation Map Price Visit Frequency Heatmap CounterFlow SuperChart PRO Market Cycles &#038; Comparisons From Low-to-Low Comparison After Halving Comparison Halving Cycles Comparison Bear Market Phase Bull Market Drawdowns 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 Funding Rate Each Exchange Open Interest Net Shorts PRO Net Longs PRO Liquidations Long\/Short Ratio Futures vs Spot Volume Treasuries Spot ETFs Overview MicroStrategy (MSTR) Charts Meliuz Charts Bitcoin Companies Edit Template Bitcoin Price BTCUSDT 1d3d7d1M3MYTD1Y5YAll Loading&#8230; Liquidation Heatmap BTCUSDT 12h24h48h3d1W2W1M2M3M6M1Y Loading&#8230; Aggregated Funding Rate: &#8211; 1d3d7d21d30d60d90d Loading&#8230; Exchanges Funding 1d3d7d21d30d60d90d Loading&#8230; ATH Drawdown: &#8211; BTCUSDT 1d3d7d21d30d2M3M6M1Y2Y Loading&#8230; Gold PaxGold P. 1d3d7d21d30d60d90d1y2yAll Loading&#8230; Open Interest: Open I.: &#8211; BTCUSDT 1d3d7d21d30d2M3M6M1Y2Y Loading&#8230; Net Shorts BTCUSDT 1d3d7d21d30d2M3M6M1Y2Y Loading&#8230; Net Longs BTCUSDT 1d3d7d21d30d2M3M6M1Y2Y Loading&#8230; Liquidations BTCUSDT 1d3d7d21d30d60d90d Loading&#8230; Google Trends: &#8211; 1d3d7d21d30d60d90d180d1y2yAll Loading&#8230; Dominance 1d3d7d21d30d60d90d1y2yAll Loading&#8230; S&#038;P500 1d3d7d21d30d60d90d Loading&#8230; Long\/Short: &#8211; BTCUSDT 1d3d7d21d30d2M3M6M1Y2Y Loading&#8230; Volatility BTCUSDT 1d3d7d21d30d60d90d1y2yAll Loading&#8230; Fear &#038; Greed Index 1d3d7d21d30d60d90d Loading&#8230; Spot ETF Net Inflow 1d3d7d21d30d60d90d Loading&#8230; Cycles Compare 2015-Now Loading&#8230; M2 Global 1d3d7d21d30d60d90d180d1y2y4y5y7yAll Loading&#8230; MSTR 1d3d7d21d30d60d90d Loading&#8230;<\/p>\n","protected":false},"author":1,"featured_media":46285,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-27552","page","type-page","status-publish","has-post-thumbnail","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/pages\/27552","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=27552"}],"version-history":[{"count":36,"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/pages\/27552\/revisions"}],"predecessor-version":[{"id":80387,"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/pages\/27552\/revisions\/80387"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/media\/46285"}],"wp:attachment":[{"href":"https:\/\/bitcoincounterflow.com\/wp-json\/wp\/v2\/media?parent=27552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}