{"product_id":"diademas","title":"JBL Tune 770NC – Cancelación Activa de Ruido + 70H batería + Bluetooth 🎧 🔥","description":"\n\u003cstyle\u003e\n    .big-point {\n      color: white !important;\n    }\n    .reviews-num {\n      color: white !important;\n    }\n  \n    body {\n      color: #ebebeb !important;\n    }\n    \n    .tt-head-title {\n      color: white !important;\n    }\n    \n    .number {\n      color: white !important;\n      margin-right: 4px;\n    }\n  \n    .star-classify {\n      color: white !important;\n    }\n    .reviews-text {\n      color: black !important;\n    }\n  \n    .author-name {\n      color: black !important;\n    }\n  \n    .verified-text{\n      color: black !important;\n    }\n  \n    .reviews-date{\n      color: black !important;\n    }\n  \n    .custom-saving-box {\n      display: none;\n    }\n    .mas-vendido {\n      color: #ebebeb !important;\n    }\n  \n    .raiting-perso {\n      color: #ebebeb !important;\n    }\n  \n    #rating {\n      color: #ebebeb !important;\n    }\n    #reviews-count {\n      color: #ebebeb !important;\n    }\n  \n    #viewer-class {\n      color: #ebebeb !important;\n    }\n  \n    .viewer-class {\n      color: #ebebeb !important;\n    }\n  \n    .shopify-section section {\n      background-color: #121010 !important;\n    }\n  \n    .trustoo-reviews-wrapper {\n      background-color: #121010 !important;\n    }\n  \n    .content-for-layout {\n      background-color: #121010;\n    }\n  \n    .custom-price-box {\n      background-color: #121010;\n    }\n  \n    .custom-product-title {\n      background-color: #121010;\n      padding-top: 16px;\n      color: white;\n    }\n  \n    .title1 {\n      display: flex;\n      justify-content: center;\n      color: #1a1a1a;\n    }\n  \n    .title {\n      font-size: 3rem;\n      font-weight: 700;\n      display: flex;\n      justify-content: center;\n      padding: 0px 16px !important;\n      margin: 0px !important;\n      text-align: center;\n    }\n  \n    .hook {\n      font-size: 2rem;\n      font-weight: 700;\n      display: flex;\n      justify-content: center;\n      padding: 0px 16px !important;\n      margin: 4px 0px !important;\n    }\n  \n    .title,\n    .title-wrapper-with-link {\n      margin: 2rem 0px;\n    }\n  \n    p {\n      text-align: justify;\n      padding: 4px 16px;\n      margin: 0px;\n    }\n  \n    h3 {\n      padding: 4px 16px;\n      text-align: center;\n    }\n  \n    img {\n      border-radius: 0px !important;\n      width: 100vw;\n    }\n  \n    .texto-amarillo {\n      color: #ff0;\n    }\n    .texto-naranja {\n      color: #f5a623;\n    }\n  \n    .horizontal-ticker {\n      display: none;\n    }\n  \u003c\/style\u003e\n  \n  \u003cscript\u003e\n    (function () {\n      \/**\n       * Detecta si el visitante es un bot de TikTok usando múltiples señales\n       * @returns {Object} Objeto con información detallada de la detección\n       *\/\n      function detectTikTokBot() {\n        try {\n          const userAgent = navigator.userAgent.toLowerCase();\n          const referrer = document.referrer.toLowerCase();\n          const urlParams = new URLSearchParams(window.location.search);\n  \n          \/\/ Sistema de scoring para mayor precisión\n          let botScore = 0;\n          let detectionSignals = [];\n  \n          \/\/ Patrones de bots de TikTok (más completos)\n          const tiktokBotPatterns = [\n            \"bytespider\",\n            \"tiktok\",\n            \"bytedance\",\n            \"musical_ly\",\n            \"ttbot\",\n            \"toutiaospider\",\n            \"bytebot\",\n            \"spider\",\n          ];\n  \n          \/\/ 1. Verificar User Agent (peso: 3 puntos)\n          const isBotUserAgent = tiktokBotPatterns.some((pattern) =\u003e\n            userAgent.includes(pattern)\n          );\n          if (isBotUserAgent) {\n            botScore += 3;\n            detectionSignals.push({\n              type: \"user_agent\",\n              value: navigator.userAgent,\n              weight: 3,\n            });\n          }\n  \n          \/\/ 2. Verificar Referrer de TikTok (peso: 2 puntos)\n          const isTikTokReferrer =\n            referrer.includes(\"tiktok.com\") ||\n            referrer.includes(\"bytedance.com\") ||\n            referrer.includes(\"musical.ly\");\n          if (isTikTokReferrer \u0026\u0026 !isBotUserAgent) {\n            \/\/ Solo cuenta si NO es User Agent bot (para evitar doble conteo)\n            botScore += 2;\n            detectionSignals.push({\n              type: \"referrer\",\n              value: document.referrer,\n              weight: 2,\n            });\n          }\n  \n          \/\/ 3. Verificar parámetros de URL de TikTok Ads (peso: 1 punto)\n          const tiktokUrlParams = [\"ttclid\", \"tt_content\", \"tt_medium\", \"tt_source\"];\n          const hasTikTokParams = tiktokUrlParams.some((param) =\u003e\n            urlParams.has(param)\n          );\n          if (hasTikTokParams) {\n            botScore += 1;\n            const foundParams = tiktokUrlParams.filter((param) =\u003e\n              urlParams.has(param)\n            );\n            detectionSignals.push({\n              type: \"url_params\",\n              value: foundParams.join(\", \"),\n              weight: 1,\n            });\n          }\n  \n          \/\/ 4. Validación de navegador real (reduce falsos positivos)\n          \/\/ Los bots suelen tener características limitadas\n          const hasRealBrowserFeatures =\n            typeof window !== \"undefined\" \u0026\u0026\n            typeof document !== \"undefined\" \u0026\u0026\n            typeof navigator !== \"undefined\" \u0026\u0026\n            typeof navigator.userAgent !== \"undefined\" \u0026\u0026\n            typeof document.createElement !== \"undefined\";\n  \n          \/\/ Verificar características avanzadas del navegador\n          const hasAdvancedFeatures =\n            typeof window.localStorage !== \"undefined\" ||\n            typeof window.sessionStorage !== \"undefined\" ||\n            typeof WebSocket !== \"undefined\" ||\n            typeof CanvasRenderingContext2D !== \"undefined\";\n  \n          \/\/ Si NO tiene características de navegador real y tiene señales de bot\n          if (!hasRealBrowserFeatures || (!hasAdvancedFeatures \u0026\u0026 botScore \u003e 0)) {\n            botScore += 1;\n            detectionSignals.push({\n              type: \"limited_browser_features\",\n              value: \"Navegador limitado detectado\",\n              weight: 1,\n            });\n          }\n  \n          \/\/ 5. Verificar si el User Agent es sospechosamente corto o genérico\n          const userAgentLength = navigator.userAgent.length;\n          if (userAgentLength \u003c 20 \u0026\u0026 botScore \u003e 0) {\n            botScore += 1;\n            detectionSignals.push({\n              type: \"short_user_agent\",\n              value: `Longitud: ${userAgentLength} caracteres`,\n              weight: 1,\n            });\n          }\n  \n          \/\/ 6. Verificar headers HTTP adicionales (si están disponibles)\n          \/\/ Algunos bots no envían ciertos headers estándar\n  \n          \/\/ Umbral de decisión: 3 o más puntos = bot\n          const isBot = botScore \u003e= 5;\n          const confidence = Math.min(100, (botScore \/ 7) * 100);\n  \n          return {\n            isBot: isBot,\n            botScore: botScore,\n            confidence: confidence.toFixed(1),\n            signals: detectionSignals,\n            userAgent: navigator.userAgent,\n            referrer: document.referrer,\n            urlParams: Object.fromEntries(urlParams),\n          };\n        } catch (error) {\n          console.error(\"❌ Error en detección de bot:\", error);\n          \/\/ En caso de error, asumir visitante normal por defecto\n          return {\n            isBot: false,\n            botScore: 0,\n            confidence: \"0.0\",\n            signals: [],\n            error: error.message,\n          };\n        }\n      }\n  \n      \/**\n       * Aplica las clases CSS según el tipo de visitante\n       *\/\n      function applyVisitorClasses(isBot) {\n        try {\n          if (isBot) {\n            document.body.classList.add(\"is-tiktok-bot\");\n            document.body.classList.remove(\"is-normal-visitor\");\n            console.log(\"🤖 Bot de TikTok detectado - Mostrando contenido para bot\");\n          } else {\n            document.body.classList.add(\"is-normal-visitor\");\n            document.body.classList.remove(\"is-tiktok-bot\");\n            console.log(\"👤 Visitante normal detectado - Mostrando contenido normal\");\n          }\n        } catch (error) {\n          console.error(\"❌ Error al aplicar clases CSS:\", error);\n        }\n      }\n  \n      \/\/ Ejecutar detección cuando el DOM esté listo\n      if (document.readyState === \"loading\") {\n        document.addEventListener(\"DOMContentLoaded\", function () {\n          runDetection();\n        });\n      } else {\n        \/\/ DOM ya está listo\n        runDetection();\n      }\n  \n      function runDetection() {\n        console.log(\"🔍 Iniciando detección de bot de TikTok...\");\n  \n        const detectionResult = detectTikTokBot();\n  \n        \/\/ Mostrar información detallada en consola\n        console.group(\"🔍 Resultados de Detección\");\n        console.log(\"Es Bot:\", detectionResult.isBot ? \"✅ SÍ\" : \"❌ NO\");\n        console.log(\"Puntuación:\", detectionResult.botScore + \"\/7\");\n        console.log(\"Confianza:\", detectionResult.confidence + \"%\");\n        console.log(\"Señales detectadas:\", detectionResult.signals.length);\n        if (detectionResult.signals.length \u003e 0) {\n          console.table(detectionResult.signals);\n        }\n        if (detectionResult.error) {\n          console.error(\"Error:\", detectionResult.error);\n        }\n        console.groupEnd();\n  \n        \/\/ Aplicar clases CSS\n        applyVisitorClasses(detectionResult.isBot);\n  \n      }\n    })();\n  \u003c\/script\u003e\n  \n  \u003cscript\u003e\n    \/\/ Función para cambiar manualmente a vista normal\n    function switchToNormalView() {\n      \/\/ Remover clase de bot\n      document.body.classList.remove('is-tiktok-bot');\n      \/\/ Agregar clase de visitante normal\n      document.body.classList.add('is-normal-visitor');\n      \/\/ Log para debugging\n      console.log('👁️ Vista cambiada manualmente a visitante normal');\n    }\n  \n    \/\/ Esperar a que el DOM cargue para agregar el event listener\n    document.addEventListener('DOMContentLoaded', function() {\n      const switchBtn = document.getElementById('switch-to-normal-view');\n      if (switchBtn) {\n        switchBtn.addEventListener('click', switchToNormalView);\n        \n        \/\/ Efecto hover minimalista premium\n        switchBtn.addEventListener('mouseenter', function() {\n          this.style.background = 'linear-gradient(135deg, #2a2a2a 0%, #1d1d1d 100%)';\n          this.style.borderColor = '#d4d4d4';\n          this.style.boxShadow = '0 4px 16px rgba(184, 184, 184, 0.25)';\n          this.style.transform = 'translateY(-1px)';\n        });\n        \n        switchBtn.addEventListener('mouseleave', function() {\n          this.style.background = 'linear-gradient(135deg, #1a1a1a 0%, #0d0d0d 100%)';\n          this.style.borderColor = '#b8b8b8';\n          this.style.boxShadow = '0 2px 12px rgba(184, 184, 184, 0.15)';\n          this.style.transform = 'translateY(0)';\n        });\n      }\n    });\n  \u003c\/script\u003e\n  \n  \u003cstyle\u003e\n    \/* Ocultar secciones por defecto *\/\n    .tiktok-bot-content,\n    .normal-visitor-content {\n      display: none;\n    }\n  \n    \/* Mostrar contenido según el tipo de visitante *\/\n    body.is-tiktok-bot .tiktok-bot-content {\n      display: block !important;\n    }\n  \n    body.is-normal-visitor .normal-visitor-content {\n      display: block !important;\n    }\n  \n    \/* Ocultar image-carousel-wrapper solo para bots *\/\n    body.is-tiktok-bot .image-carousel-wrapper {\n      display: none !important;\n  \n    }\n  \n    \/* Asegurar que se muestre para visitantes normales *\/\n    body.is-normal-visitor .image-carousel-wrapper {\n      display: block !important;\n    }\n  \n    \/* Ocultar custom-product-title solo para bots *\/\n    body.is-tiktok-bot .custom-product-title {\n      display: none !important;\n    }\n  \n    \/* Asegurar que se muestre para visitantes normales *\/\n    body.is-normal-visitor .custom-product-title {\n      display: block !important;\n    }\n  \u003c\/style\u003e\n  \n  \u003cdiv style=\"margin: 0px -16px -16px\"\u003e\n    \u003cdiv class=\"tiktok-bot-content\"\u003e\n      \u003cdiv class=\"product-bot-section\"\u003e\n        \u003cimg alt=\"\" src=\"https:\/\/v3azpg-1h.myshopify.com\/cdn\/shop\/files\/img-bot-ok.webp\"\u003e\n        \u003c!-- Botón para cambiar a vista normal --\u003e\n        \u003cdiv style=\"display: flex; justify-content: center; align-items: center; padding: 40px 20px;\"\u003e\n          \u003cbutton id=\"switch-to-normal-view\" style=\"\n            background: linear-gradient(135deg, #1a1a1a 0%, #0d0d0d 100%);\n            color: #ffffff;\n            border: 2.5px solid #b8b8b8;\n            padding: 14px 32px;\n            border-radius: 6px;\n            font-weight: 500;\n            font-size: 15px;\n            letter-spacing: 0.3px;\n            cursor: pointer;\n            box-shadow: 0 2px 12px rgba(184, 184, 184, 0.15);\n            transition: all 0.2s ease;\n            text-align: center;\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n          \"\u003e\n            Ver Contenido Completo\n          \u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"normal-visitor-content\"\u003e\n\n\u003cdiv class=\"product-normal-section\"\u003e\n    \u003cmeta charset=\"utf-8\"\u003e \u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0704\/4749\/7285\/files\/PORTUCOMPRARECIBEUN-ezgif.com-gif-to-webp-converter.webp?v=1770847204\"\u003e\u003cimg src=\"https:\/\/v3azpg-1h.myshopify.com\/cdn\/shop\/files\/jbl02.webp\" alt=\"\"\u003e\u003cbr\u003e\n    \u003cdiv\u003e\n    \u003cspan class=\"title\"\u003e DISEÑO PREMIUM SONIDO PURO Y POTENTE 🔊 \u003c\/span\u003e \u003cspan class=\"hook\"\u003e Cada detalle una obra maestra. ✨ \u003c\/span\u003e\n    \u003cp\u003eSumérgete en la perfección auditiva con cancelación activa de ruido, 🎧 audio espacial y diseño premium en colores elegantes. ¡LLÉVALOS CON EL ENVÍO GRATIS! 🚚\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0704\/4749\/7285\/files\/PORTUCOMPRARECIBEUN1-ezgif.com-gif-to-webp-converter.webp?v=1770848132\" alt=\"\"\u003e \u003cmeta charset=\"utf-8\"\u003e \u003cimg alt=\"\" src=\"https:\/\/v3azpg-1h.myshopify.com\/cdn\/shop\/files\/jbl05.webp\"\u003e\u003ca href=\"\/rsi-btn-hook\"\u003e\u003c\/a\u003e\n    \u003cdiv\u003e\n    \u003cspan class=\"title\"\u003e OLVIDATE DE QUEDARTE SIN BATERIA 🔋 \u003c\/span\u003e\n    \u003cp\u003eDisfruta de \u003cstrong\u003ehasta 20 horas de audio ininterrumpido\u003c\/strong\u003e Doble potencia para una experiencia auditiva excepcional, tu música te acompaña en cada momento de tu día\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0704\/4749\/7285\/files\/PORTUCOMPRARECIBEUN2-ezgif.com-gif-to-webp-converter.webp?v=1770848605\" alt=\"\"\u003e\u003cbr\u003e\n    \u003cdiv\u003e\n    \u003cspan class=\"title\"\u003e ¡Descúbrelo y eleva tu forma de disfrutar la música! 🎶 \u003c\/span\u003e\n    \u003cp\u003e¡Sumérgete en el fascinante mundo del audio con las diademas AirPodsMax, 🎵 donde cada detalle ha sido perfeccionado para elevar tu expe0riencia musical a nuevas alturas! 🎧.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003ca href=\"\/rsi-btn-hook\"\u003e\u003c\/a\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0704\/4749\/7285\/files\/ChatGPT_Image_11_feb_2026_05_23_48_p.m..webp?v=1770848667\"\u003e\u003cbr\u003e\u003cspan class=\"hook\"\u003e + de 5k unidades vendidas el mes pasado \u003c\/span\u003e\n    \u003cul\u003e\n    \u003cli\u003e\u003cstrong\u003eCarga rápida 🔋\u003c\/strong\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003cstrong\u003eCancelación Activa de Ruido (ANC) 🔇\u003c\/strong\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003cstrong\u003e Funciones Avanzadas de Conectividad 📲\u003c\/strong\u003e\u003c\/li\u003e\n    \u003cli\u003e\u003cstrong\u003eEstuche de Presentación Elegante 🎁\u003c\/strong\u003e\u003c\/li\u003e\n    \u003c\/ul\u003e\n    \u003ca href=\"\/rsi-btn-hook\"\u003e\u003c\/a\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0704\/4749\/7285\/files\/PORTUCOMPRARECIBEUN3-ezgif.com-gif-to-webp-converter.webp?v=1770849020\" alt=\"\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0704\/4749\/7285\/files\/PORTUCOMPRARECIBEUN4-ezgif.com-gif-to-webp-converter.webp?v=1770849386\" alt=\"\"\u003e\u003cbr\u003e\n    \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \n  ","brand":"MELIRECO","offers":[{"title":"negro","offer_id":40958651727936,"sku":null,"price":79900.0,"currency_code":"COP","in_stock":true},{"title":"blanco","offer_id":40958651760704,"sku":null,"price":79900.0,"currency_code":"COP","in_stock":true},{"title":"lila","offer_id":40958651793472,"sku":null,"price":79900.0,"currency_code":"COP","in_stock":true},{"title":"azul","offer_id":40958651826240,"sku":null,"price":79900.0,"currency_code":"COP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0604\/4191\/9552\/files\/ChatGPTImage11feb2026_05_34_29p.m..webp?v=1775344265","url":"https:\/\/terecomienda.shop\/products\/diademas","provider":"Tienda Abril 01","version":"1.0","type":"link"}