{"product_id":"bolso-hombro-vintage","title":"Bolso Hombro Vintage","description":"\u003cdiv class=\"c-sw\"\u003e\n  \u003cspan class=\"sw-lbl\"\u003eColor - \u003cspan id=\"selected-color-name\"\u003eBeige Khaki\u003c\/span\u003e\u003c\/span\u003e\n  \u003cdiv class=\"sg-sw\"\u003e\n    \u003cbutton type=\"button\" class=\"sw-btn active\" data-color=\"Beige Khaki\" data-slide-index=\"1\" style=\"--swatch-bg:#caab84\" title=\"Beige Khaki\"\u003e\u003c\/button\u003e\n    \n    \u003cbutton type=\"button\" class=\"sw-btn\" data-color=\"Blanco hueso\" data-slide-index=\"4\" style=\"--swatch-bg:#f3ebd9\" title=\"Blanco hueso\"\u003e\u003c\/button\u003e\n    \n    \u003cbutton type=\"button\" class=\"sw-btn\" data-color=\"Naranja\" data-slide-index=\"5\" style=\"--swatch-bg:#e8ab88\" title=\"Naranja\"\u003e\u003c\/button\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n  .c-sw {\n    margin: 20px 0;\n  }\n  .sw-lbl {\n    display: block;\n    font-size: 14px; \n    color: #2b2b2b;\n    margin-bottom: 12px;\n    font-family: \"New York\", -apple-system-serif, \"Playfair Display\", \"Georgia\", \"Times New Roman\", serif;\n    font-weight: 400;\n    letter-spacing: 0.1px;\n    -webkit-font-smoothing: antialiased;\n  }\n  #selected-color-name {\n    font-weight: 400;\n  }\n  .sg-sw {\n    display: flex;\n    gap: 12px;\n  }\n  .sw-btn {\n    width: 44px; \n    height: 44px;\n    border-radius: 9px;\n    border: 1px solid transparent;\n    background: var(--swatch-bg);\n    cursor: pointer;\n    position: relative;\n    box-sizing: border-box;\n    padding: 0;\n  }\n  .sw-btn.active {\n    border: 1.5px solid #8c867a !important; \n    box-shadow: inset 0 0 0 3px #ffffff;\n  }\n  .sw-btn:focus {\n    outline: none;\n  }\n\u003c\/style\u003e\n\n\u003cscript\u003e\n  (function() {\n    \/\/ Función que busca las miniaturas o diapositivas reales y activa la correcta\n    function moverCarruselPorPosicion(numeroFoto) {\n      const miniaturas = document.querySelectorAll('.product__thumbnail-item button, .thumbnail-list__item button, .product__thumb, .thumbnail-item');\n      \n      if (miniaturas \u0026\u0026 miniaturas.length \u003e= numeroFoto) {\n        miniaturas[numeroFoto - 1].click();\n      } else {\n        const diapositivas = document.querySelectorAll('.product__media-item, .swiper-slide, .slick-slide');\n        if (diapositivas \u0026\u0026 diapositivas.length \u003e= numeroFoto) {\n          diapositivas[numeroFoto - 1].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n        }\n      }\n    }\n\n    \/\/ Al hacer clic en tus botones personalizados\n    document.addEventListener('click', function(e) {\n      const boton = e.target.closest('.sw-btn');\n      if (!boton) return;\n      \n      e.preventDefault();\n      \n      document.querySelectorAll('.sw-btn').forEach(x =\u003e x.classList.remove('active'));\n      boton.classList.add('active');\n      document.getElementById('selected-color-name').textContent = boton.dataset.color;\n      \n      \/\/ Mueve el carrusel a la posición asignada (1, 4 o 5)\n      moverCarruselPorPosicion(parseInt(boton.getAttribute('data-slide-index')));\n\n      \/\/ Sincroniza la variante con Shopify de forma nativa\n      const colorOriginal = boton.dataset.color.toLowerCase();\n      const opcionesNativas = document.querySelectorAll('.product-form__input input, .product-form__input label, .swatch-element, [class*=\"variant\"] option, [class*=\"swatch\"], [class*=\"color-swatch\"]');\n      \n      opcionesNativas.forEach(el =\u003e {\n        const textoEl = (el.innerText || el.value || el.getAttribute('aria-label') || \"\").toLowerCase().trim();\n        if (\/\\d\/.test(textoEl)) return; \/\/ Ignora las tallas\n\n        let coincide = textoEl.includes(colorOriginal);\n        \n        \/\/ Mapeo flexible de términos de color\n        if (colorOriginal.includes(\"beige\") || colorOriginal.includes(\"khaki\")) {\n          if (textoEl.includes(\"beige\") || textoEl.includes(\"khaki\") || textoEl.includes(\"caqui\")) {\n            coincide = true;\n          }\n        }\n        if (colorOriginal.includes(\"blanco\") || colorOriginal.includes(\"hueso\")) {\n          if (textoEl.includes(\"blanco\") || textoEl.includes(\"hueso\") || textoEl.includes(\"roto\")) {\n            coincide = true;\n          }\n        }\n        if (colorOriginal.includes(\"naranja\")) {\n          if (textoEl.includes(\"naranja\") || textoEl.includes(\"orange\")) {\n            coincide = true;\n          }\n        }\n\n        if (coincide) {\n          if (el.tagName === 'INPUT') {\n            el.checked = true;\n            el.dispatchEvent(new Event('change', { bubbles: true }));\n          } else if (el.tagName === 'OPTION') {\n            let select = el.closest('select');\n            if(select) {\n              select.value = el.value;\n              select.dispatchEvent(new Event('change', { bubbles: true }));\n            }\n          } else {\n            el.click();\n          }\n        }\n      });\n    });\n  })();\n\u003c\/script\u003e","brand":"Mi tienda","offers":[{"title":"Beige Khaki","offer_id":57671678460286,"sku":null,"price":24.99,"currency_code":"EUR","in_stock":true},{"title":"Blanco roto","offer_id":57671639138686,"sku":null,"price":24.99,"currency_code":"EUR","in_stock":true},{"title":"Naranja","offer_id":57671639171454,"sku":null,"price":24.99,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1008\/4804\/2366\/files\/ChatGPTImage10jul2026_17_16_05.png?v=1783785891","url":"https:\/\/luzdemoda.com\/products\/bolso-hombro-vintage","provider":"LuzDeModa","version":"1.0","type":"link"}