{"product_id":"power-bank-solar-25-000mah","title":"Power Bank Solar 20.000mah","description":"\u003cbody\u003e\n\n \n  \u003cmeta charset=\"UTF-8\"\u003e\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=cover\"\u003e\n  \u003cmeta name=\"theme-color\" content=\"#000000\"\u003e\n  \u003ctitle\u003eCombo 360° - Oferta Limitada\u003c\/title\u003e\n  \u003cscript src=\"https:\/\/cdn.tailwindcss.com\/3.4.17\"\u003e\u003c\/script\u003e\n  \u003cscript src=\"\/_sdk\/element_sdk.js\"\u003e\u003c\/script\u003e\n  \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Bebas+Neue\u0026amp;family=DM+Sans:wght@400;500;700\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n  \u003cstyle\u003e\n    * { -webkit-tap-highlight-color: transparent; }\n    html, body { \n      margin: 0; \n      padding: 0; \n      width: 100%; \n      height: 100%;\n      -webkit-user-select: none;\n      user-select: none;\n    }\n    \n    @keyframes slideInRight {\n      from { transform: translateX(120%); opacity: 0; }\n      to { transform: translateX(0); opacity: 1; }\n    }\n    @keyframes slideOutRight {\n      from { transform: translateX(0); opacity: 1; }\n      to { transform: translateX(120%); opacity: 0; }\n    }\n    @keyframes pulse {\n      0%, 100% { opacity: 1; }\n      50% { opacity: 0.7; }\n    }\n    @keyframes fadeIn {\n      from { opacity: 0; transform: translateY(10px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n    \n    .trigger-enter {\n      animation: slideInRight 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n    }\n    .trigger-exit {\n      animation: slideOutRight 0.5s ease-in forwards;\n    }\n    .timer-pulse {\n      animation: pulse 1s infinite;\n    }\n    .fade-in {\n      animation: fadeIn 0.6s ease-out forwards;\n    }\n    \n    img { \n      display: block; \n      max-width: 100%;\n      height: auto;\n      -webkit-touch-callout: none;\n    }\n  \u003c\/style\u003e\n  \u003cstyle\u003ebody { box-sizing: border-box; }\u003c\/style\u003e\n  \u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/lucide@0.263.0\/dist\/umd\/lucide.min.js\" type=\"text\/javascript\"\u003e\u003c\/script\u003e\n  \u003cscript src=\"\/_sdk\/data_sdk.js\" type=\"text\/javascript\"\u003e\u003c\/script\u003e\n \n \n  \u003c!-- Floating notification tab --\u003e\n  \u003cdiv id=\"purchase-trigger\" class=\"fixed right-0 top-1\/2 transform -translate-y-1\/2 z-50\" style=\"pointer-events: none;\"\u003e\n   \u003cdiv id=\"buyer-info\" class=\"bg-gradient-to-r from-red-600 to-red-500 text-white rounded-l-lg shadow-2xl hidden\" style=\"padding: 16px 20px; pointer-events: auto;\"\u003e\n    \u003cp class=\"text-xs font-semibold opacity-75 m-0\" style=\"margin: 0 0 4px 0;\"\u003e✓ NUEVA COMPRA\u003c\/p\u003e\n    \u003cp id=\"buyer-display-name\" class=\"text-lg font-bold m-0\" style=\"margin: 0 0 4px 0;\"\u003eNombre\u003c\/p\u003e\n    \u003cp id=\"buyer-display-city\" class=\"text-sm opacity-90 m-0\" style=\"margin: 0;\"\u003eCiudad\u003c\/p\u003e\n   \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c!-- Main content wrapper --\u003e\n  \u003cdiv id=\"app-wrapper\" class=\"w-full h-full flex flex-col overflow-y-auto overflow-x-hidden\" style=\"background-color: #ffffff;\"\u003e\n   \u003c!-- Urgency Timer Bar --\u003e\n   \u003cdiv class=\"w-full text-white py-4 px-4 sticky top-0 z-40\" style=\"background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%);\"\u003e\n    \u003cdiv class=\"flex items-center justify-center gap-3 mb-2\"\u003e\n     \u003cspan class=\"text-3xl font-bold timer-pulse leading-none\" id=\"timer-display\" style=\"font-family: 'Bebas Neue', sans-serif; letter-spacing: 2px;\"\u003e30:00\u003c\/span\u003e \u003cspan class=\"text-sm font-bold\" style=\"letter-spacing: 1px;\"\u003e⏰ OFERTA VÁLIDA POR\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"w-full bg-red-900 rounded-full h-2 overflow-hidden\"\u003e\n     \u003cdiv id=\"timer-progress\" class=\"bg-yellow-300 h-full rounded-full\" style=\"width: 100%; transition: width 0.1s linear; box-shadow: 0 0 8px rgba(253, 224, 71, 0.6);\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n   \u003c\/div\u003e\n\u003c!-- Images container --\u003e\n   \u003cdiv class=\"w-full flex-1\"\u003e\n    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0781\/2228\/7362\/files\/f89edb4c-b5db-4bae-b17f-bf205c3aba29.png?v=1776730928\" alt=\"Combo 360\" loading=\"lazy\" class=\"w-full h-auto block fade-in\" onerror=\"console.error('Image 1 failed:', this.src); this.style.background='#1a1a1a';\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0781\/2228\/7362\/files\/2fda633e-3c94-4600-9592-d2889b6c9eb7.png?v=1776730929\" alt=\"Combo 360 segundo\" loading=\"lazy\" class=\"w-full h-auto block fade-in\" onerror=\"console.error('Image 2 failed:', this.src); this.style.background='#1a1a1a';\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0781\/2228\/7362\/files\/cae4dd74-1769-426e-9e4a-63d042952c98.png?v=1776730929\" alt=\"Combo 360 tercero\" loading=\"lazy\" class=\"w-full h-auto block fade-in\" onerror=\"console.error('Image 3 failed:', this.src); this.style.background='#1a1a1a';\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0781\/2228\/7362\/files\/ffe974df-f561-4b2f-a286-3950a3c0210c.png?v=1776730929\" alt=\"Combo 360 cuarto\" loading=\"lazy\" class=\"w-full h-auto block fade-in\" onerror=\"console.error('Image 4 failed:', this.src); this.style.background='#1a1a1a';\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0781\/2228\/7362\/files\/9c2f83b3-c702-4d3c-bae3-8b70e27ecc2c_437b47cc-fa36-4725-9737-6f955d4ea100.png?v=1776730929\" alt=\"Combo 360 quinto\" loading=\"lazy\" class=\"w-full h-auto block fade-in\" onerror=\"console.error('Image 5 failed:', this.src); this.style.background='#1a1a1a';\"\u003e \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0781\/2228\/7362\/files\/dd7379f2-3d4b-4b89-a9e1-5c050b514aff.png?v=1776730928\" alt=\"Combo 360 sexto\" loading=\"lazy\" class=\"w-full h-auto block fade-in\" onerror=\"console.error('Image 6 failed:', this.src); this.style.background='#1a1a1a';\"\u003e\n   \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cscript\u003e\n    const defaultConfig = {\n      main_title: 'COMBO 360°',\n      background_color: '#ffffff',\n      accent_color: '#dc2626',\n      text_color: '#ffffff',\n      font_family: 'Bebas Neue',\n      font_size: 16\n    };\n\n    \/\/ Ensure DOM is ready\n    if (document.readyState !== 'loading') {\n      initializeApp();\n    } else {\n      document.addEventListener('DOMContentLoaded', initializeApp);\n    }\n\n    function initializeApp() {\n      startTimer();\n      setupBuyerNotifications();\n      setupSDK();\n    }\n\n    \/\/ ===== TIMER FUNCTIONALITY =====\n    let timeRemaining = 30 * 60; \/\/ 30 minutes in seconds\n    const totalTime = 30 * 60;\n\n    function formatTime(seconds) {\n      const mins = Math.floor(seconds \/ 60);\n      const secs = seconds % 60;\n      return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n    }\n\n    function startTimer() {\n      function updateTimer() {\n        const timerDisplay = document.getElementById('timer-display');\n        const timerProgress = document.getElementById('timer-progress');\n        \n        if (timerDisplay) {\n          timerDisplay.textContent = formatTime(timeRemaining);\n        }\n        \n        if (timerProgress) {\n          const progressPercent = (timeRemaining \/ totalTime) * 100;\n          timerProgress.style.width = progressPercent + '%';\n        }\n        \n        if (timeRemaining \u003e 0) {\n          timeRemaining--;\n        }\n      }\n\n      updateTimer(); \/\/ Initial call\n      setInterval(updateTimer, 1000);\n    }\n\n    \/\/ ===== BUYER NOTIFICATIONS =====\n    function setupBuyerNotifications() {\n      const buyerInfo = document.getElementById('buyer-info');\n      const buyerDisplayName = document.getElementById('buyer-display-name');\n      const buyerDisplayCity = document.getElementById('buyer-display-city');\n      let autoHideTimeout;\n\n      const testNames = ['Juan García', 'María López', 'Carlos Rodríguez', 'Ana Martínez', 'Pedro Sánchez', 'Laura Díaz', 'Roberto Ortiz', 'Sofía Ruiz'];\n      const testCities = ['Bogotá', 'Medellín', 'Cali', 'Barranquilla', 'Cartagena', 'Santa Marta', 'Bucaramanga', 'Cúcuta'];\n\n      function showBuyerNotification(name, city) {\n        if (!buyerInfo) return;\n        \n        buyerDisplayName.textContent = name;\n        buyerDisplayCity.textContent = city;\n        buyerInfo.classList.remove('hidden', 'trigger-exit');\n        buyerInfo.classList.add('trigger-enter');\n        \n        clearTimeout(autoHideTimeout);\n        autoHideTimeout = setTimeout(() =\u003e {\n          hideBuyerNotification();\n        }, 5000);\n      }\n\n      function hideBuyerNotification() {\n        if (!buyerInfo) return;\n        buyerInfo.classList.remove('trigger-enter');\n        buyerInfo.classList.add('trigger-exit');\n        \n        setTimeout(() =\u003e {\n          buyerInfo.classList.add('hidden');\n        }, 500);\n      }\n\n      \/\/ Show first notification after 2 seconds\n      setTimeout(() =\u003e {\n        showBuyerNotification('Andrés Pérez', 'Bogotá');\n      }, 2000);\n\n      \/\/ Show new notifications every 15 seconds\n      setInterval(() =\u003e {\n        const randomName = testNames[Math.floor(Math.random() * testNames.length)];\n        const randomCity = testCities[Math.floor(Math.random() * testCities.length)];\n        showBuyerNotification(randomName, randomCity);\n      }, 15000);\n    }\n\n    \/\/ ===== ELEMENT SDK =====\n    function setupSDK() {\n      if (!window.elementSdk) return;\n\n      window.elementSdk.init({\n        defaultConfig,\n        onConfigChange: async (config) =\u003e {\n          const wrapper = document.getElementById('app-wrapper');\n          if (wrapper) {\n            wrapper.style.backgroundColor = config.background_color || defaultConfig.background_color;\n          }\n        },\n        mapToCapabilities: (config) =\u003e ({\n          recolorables: [\n            {\n              get: () =\u003e config.background_color || defaultConfig.background_color,\n              set: (v) =\u003e {\n                config.background_color = v;\n                window.elementSdk.setConfig({ background_color: v });\n              }\n            },\n            {\n              get: () =\u003e config.accent_color || defaultConfig.accent_color,\n              set: (v) =\u003e {\n                config.accent_color = v;\n                window.elementSdk.setConfig({ accent_color: v });\n              }\n            }\n          ],\n          borderables: [],\n          fontEditable: {\n            get: () =\u003e config.font_family || defaultConfig.font_family,\n            set: (v) =\u003e {\n              config.font_family = v;\n              window.elementSdk.setConfig({ font_family: v });\n            }\n          },\n          fontSizeable: {\n            get: () =\u003e config.font_size || defaultConfig.font_size,\n            set: (v) =\u003e {\n              config.font_size = v;\n              window.elementSdk.setConfig({ font_size: v });\n            }\n          }\n        }),\n        mapToEditPanelValues: (config) =\u003e new Map([\n          ['main_title', config.main_title || defaultConfig.main_title]\n        ])\n      });\n    }\n  \u003c\/script\u003e\n \u003cscript\u003e(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML=\"window.__CF$cv$params={r:'9ef894f536d8f7b8',t:'MTc3NjczNDU5MC4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='\/cdn-cgi\/challenge-platform\/scripts\/jsd\/main.js';document.getElementsByTagName('head')[0].appendChild(a);\";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState\u0026\u0026(document.onreadystatechange=e,c())}}}})();\u003c\/script\u003e\n\u003c\/body\u003e","brand":"Ama store","offers":[{"title":"Default Title","offer_id":47481969377538,"sku":"PWBSOL09","price":139900.0,"currency_code":"COP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0781\/2228\/7362\/files\/b061327f-a720-4f9d-8211-ffbfced165c5.png?v=1776734819","url":"https:\/\/amacompra.com\/products\/power-bank-solar-25-000mah","provider":"Ama store","version":"1.0","type":"link"}