{"product_id":"sellador-de-bolsas-plastico-portatil-recargable","title":"Sellador de Bolsas Plástico Portátil Recargable","description":"\u003cstyle\u003e\n\/* MILGENIAL — SELLADOR DIGITAL SKU 3123-0 *\/\n\n.mg3123 {\n  --green: #08A56E;\n  --dark: #18271e;\n  --muted: #627168;\n  --soft: #f3faf6;\n  --border: #e0ebe4;\n  width: 100%;\n  overflow: hidden;\n  background: #fff;\n  color: var(--dark);\n  font-family: \"Poppins\", \"Inter\", Arial, sans-serif;\n  line-height: 1.6;\n}\n\n.mg3123 *,\n.mg3123 *::before,\n.mg3123 *::after {\n  box-sizing: border-box;\n}\n\n.mg3123 .wrap {\n  max-width: 760px;\n  width: 100%;\n  padding: 0 22px;\n  margin: 0 auto;\n}\n\n.mg3123 h2,\n.mg3123 h3,\n.mg3123 p {\n  margin: 0;\n  padding: 0;\n}\n\n.mg3123 h2 {\n  font-size: clamp(29px, 5vw, 42px);\n  line-height: 1.17;\n  font-weight: 800;\n  letter-spacing: -1.2px;\n}\n\n.mg3123 h3 {\n  font-size: 17px;\n  font-weight: 750;\n  line-height: 1.35;\n}\n\n.mg3123 p {\n  font-size: 15px;\n  color: var(--muted);\n  line-height: 1.75;\n}\n\n.mg3123 .green {\n  color: var(--green);\n}\n\n.mg3123 .center {\n  text-align: center;\n}\n\n.mg3123 .eyebrow {\n  display: inline-block;\n  margin-bottom: 15px;\n  color: var(--green);\n  font-size: 11px;\n  font-weight: 800;\n  letter-spacing: 1.3px;\n  text-transform: uppercase;\n}\n\n\/* HERO *\/\n\n.mg3123 .hero {\n  padding: 48px 0 36px;\n  text-align: center;\n  background: linear-gradient(\n    180deg,\n    #effaf4,\n    #fff\n  );\n}\n\n.mg3123 .hero h2 {\n  max-width: 650px;\n  margin: auto;\n}\n\n.mg3123 .hero p {\n  max-width: 580px;\n  margin: 18px auto 0;\n}\n\n.mg3123 .tags {\n  display: flex;\n  justify-content: center;\n  flex-wrap: wrap;\n  gap: 9px;\n  margin-top: 23px;\n}\n\n.mg3123 .tags span {\n  padding: 8px 13px;\n  border: 1px solid #dcece2;\n  border-radius: 30px;\n  background: #fff;\n  color: #307852;\n  font-size: 12px;\n  font-weight: 700;\n}\n\n\/* VIDEO *\/\n\n.mg3123 .video-section {\n  padding: 10px 0 49px;\n}\n\n.mg3123 .video-heading {\n  text-align: center;\n  max-width: 610px;\n  margin: 0 auto 23px;\n}\n\n.mg3123 .video-heading h2 {\n  font-size: clamp(25px, 4.4vw, 34px);\n}\n\n.mg3123 .video-frame {\n  width: 100%;\n  max-width: 570px;\n  margin: 0 auto;\n  overflow: hidden;\n  border-radius: 18px;\n  border: 1px solid var(--border);\n  background: #fff;\n  box-shadow: 0 10px 30px rgba(13, 70, 41, .07);\n}\n\n.mg3123 .video-product {\n  display: block !important;\n  width: 100% !important;\n  height: auto !important;\n  aspect-ratio: 1 \/ 1;\n  max-width: 100% !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  border: 0 !important;\n  background: #fff;\n  object-fit: contain;\n}\n\n.mg3123 .video-note {\n  max-width: 530px;\n  margin: 16px auto 0 !important;\n  text-align: center;\n  font-size: 13px !important;\n}\n\n\/* BENEFICIOS *\/\n\n.mg3123 .benefits {\n  padding: 47px 0 54px;\n  background: var(--soft);\n}\n\n.mg3123 .benefits h2 {\n  max-width: 620px;\n  margin: auto;\n}\n\n.mg3123 .benefits-intro {\n  max-width: 550px;\n  margin: 17px auto 0;\n}\n\n.mg3123 .benefits-grid {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: 13px;\n  margin-top: 28px;\n}\n\n.mg3123 .benefit {\n  padding: 23px 18px;\n  border-radius: 16px;\n  border: 1px solid var(--border);\n  background: #fff;\n}\n\n.mg3123 .benefit-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 46px;\n  height: 46px;\n  margin-bottom: 16px;\n  background: #e9f8ef;\n  color: var(--green);\n  border-radius: 12px;\n}\n\n.mg3123 .benefit-icon svg {\n  width: 25px;\n  height: 25px;\n}\n\n.mg3123 .benefit h3 {\n  margin-bottom: 8px;\n}\n\n.mg3123 .benefit p {\n  font-size: 12px;\n  line-height: 1.7;\n}\n\n\/* PASOS *\/\n\n.mg3123 .how {\n  padding: 48px 0 54px;\n  text-align: center;\n}\n\n.mg3123 .how h2 {\n  max-width: 620px;\n  margin: auto;\n}\n\n.mg3123 .steps {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: 13px;\n  margin-top: 27px;\n}\n\n.mg3123 .step {\n  padding: 21px 15px;\n  background: #fff;\n  border: 1px solid var(--border);\n  border-radius: 15px;\n}\n\n.mg3123 .step-number {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 39px;\n  height: 39px;\n  margin: 0 auto 14px;\n  border-radius: 50%;\n  background: var(--green);\n  color: #fff;\n  font-size: 15px;\n  font-weight: 800;\n}\n\n.mg3123 .step h3 {\n  margin-bottom: 8px;\n  font-size: 16px;\n}\n\n.mg3123 .step p {\n  font-size: 12px;\n  line-height: 1.65;\n}\n\n\/* CTA *\/\n\n.mg3123 .final {\n  padding: 49px 0 58px;\n  background: var(--soft);\n  text-align: center;\n}\n\n.mg3123 .final h2 {\n  max-width: 620px;\n  margin: auto;\n}\n\n.mg3123 .final p {\n  max-width: 520px;\n  margin: 17px auto 0;\n}\n\n.mg3123 .cart-button {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n  width: 100%;\n  max-width: 450px;\n  min-height: 61px;\n  margin: 27px auto 0;\n  padding: 16px 19px;\n  border: 0;\n  border-radius: 12px;\n  background: #18a558;\n  color: #fff;\n  font: 750 16px \"Poppins\", Arial, sans-serif;\n  cursor: pointer;\n  transition: background .2s, transform .2s;\n}\n\n.mg3123 .cart-button:hover:not(:disabled) {\n  background: #117c40;\n  transform: translateY(-2px);\n}\n\n.mg3123 .cart-button:disabled {\n  opacity: .65;\n  cursor: not-allowed;\n  transform: none;\n}\n\n.mg3123 .cart-button svg {\n  flex: 0 0 21px;\n  width: 21px;\n  height: 21px;\n}\n\n.mg3123 .cart-button span {\n  flex: 1;\n  text-align: center;\n}\n\n.mg3123 .cart-message {\n  min-height: 20px;\n  margin: 12px auto 0 !important;\n  font-size: 13px !important;\n  font-weight: 650;\n}\n\n.mg3123 .cart-message[data-type=\"success\"] {\n  color: #087d53;\n}\n\n.mg3123 .cart-message[data-type=\"error\"] {\n  color: #b63030;\n}\n\n\/* MOBILE *\/\n\n@media (max-width: 600px) {\n  .mg3123 .wrap {\n    padding: 0 17px;\n  }\n\n  .mg3123 h2 {\n    font-size: 28px;\n    letter-spacing: -1px;\n  }\n\n  .mg3123 p {\n    font-size: 14px;\n  }\n\n  .mg3123 .hero {\n    padding: 37px 0 30px;\n  }\n\n  .mg3123 .hero h2 {\n    font-size: 33px;\n  }\n\n  .mg3123 .tags {\n    gap: 7px;\n    margin-top: 20px;\n  }\n\n  .mg3123 .tags span {\n    font-size: 11px;\n    padding: 8px 11px;\n  }\n\n  .mg3123 .video-section {\n    padding: 5px 0 38px;\n  }\n\n  .mg3123 .video-heading h2 {\n    font-size: 27px;\n  }\n\n  .mg3123 .video-frame {\n    border-radius: 14px;\n  }\n\n  .mg3123 .benefits,\n  .mg3123 .how {\n    padding: 39px 0 44px;\n  }\n\n  .mg3123 .benefits-grid {\n    grid-template-columns: 1fr;\n    gap: 10px;\n    margin-top: 24px;\n  }\n\n  .mg3123 .benefit {\n    display: grid;\n    grid-template-columns: 46px 1fr;\n    gap: 0 14px;\n    padding: 19px;\n  }\n\n  .mg3123 .benefit-icon {\n    grid-row: span 2;\n    margin: 0;\n  }\n\n  .mg3123 .benefit h3 {\n    margin-bottom: 5px;\n  }\n\n  .mg3123 .steps {\n    gap: 8px;\n    margin-top: 23px;\n  }\n\n  .mg3123 .step {\n    padding: 15px 8px;\n  }\n\n  .mg3123 .step-number {\n    width: 33px;\n    height: 33px;\n    font-size: 13px;\n  }\n\n  .mg3123 .step h3 {\n    font-size: 13px;\n  }\n\n  .mg3123 .step p {\n    font-size: 11px;\n  }\n\n  .mg3123 .final {\n    padding: 42px 0 50px;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .mg3123 .cart-button {\n    transition: none;\n  }\n}\n\u003c\/style\u003e\n\u003cdiv class=\"mg3123\" id=\"mg3123\"\u003e\n\u003c!-- HERO --\u003e\n\u003csection class=\"hero\"\u003e\n\u003cdiv class=\"wrap center\"\u003e\n\u003cspan class=\"eyebrow\"\u003e Sellador digital de bolsas \u003c\/span\u003e\n\u003ch2\u003eAbriste la bolsa. \u003cspan class=\"green\"\u003e Cerrala de nuevo. \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003cp\u003e¿Abrís unas papitas, comés un poco y después dejás la bolsa doblada esperando que no se abra? Con el Sellador de Bolsas Digital podés volver a cerrar bolsas plásticas compatibles mediante calor, sin depender de nudos ni broches.\u003c\/p\u003e\n\u003cdiv class=\"tags\"\u003e\n\u003cspan\u003eSellado térmico\u003c\/span\u003e \u003cspan\u003e6 niveles de temperatura\u003c\/span\u003e \u003cspan\u003ePantalla digital\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- VIDEO EN LOOP: REEMPLAZA LA IMAGEN --\u003e\n\u003csection class=\"video-section\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n\u003cdiv class=\"video-heading\"\u003e\n\u003cspan class=\"eyebrow\"\u003e Mirá cómo funciona \u003c\/span\u003e\n\u003ch2\u003eUsá lo que necesitás. \u003cspan class=\"green\"\u003e Guardá el resto. \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"video-frame\"\u003e\u003cvideo class=\"video-product\" autoplay=\"autoplay\" muted=\"\" loop=\"loop\" playsinline=\"\" preload=\"metadata\" aria-label=\"Demostración del sellador digital de bolsas blanco\"\u003e\n          \u003csource src=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/892177be0807457cb75a014ab55d1067.mp4\" type=\"video\/mp4\"\u003e\n          Tu navegador no permite reproducir este video.\n        \u003c\/source\u003e\u003c\/video\u003e\u003c\/div\u003e\n\u003cp class=\"video-note\"\u003eAjustá el sellador y cerrá bolsas plásticas compatibles de forma práctica.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- BENEFICIOS --\u003e\n\u003csection class=\"benefits\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n\u003cdiv class=\"center\"\u003e\n\u003cspan class=\"eyebrow\"\u003e Más control al sellar \u003c\/span\u003e\n\u003ch2\u003eNo todas las bolsas \u003cspan class=\"green\"\u003e necesitan el mismo calor. \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003cp class=\"benefits-intro\"\u003eEste modelo blanco incorpora una pantalla digital y distintos niveles de temperatura para ajustar el sellado a bolsas compatibles.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"benefits-grid\"\u003e\n\u003c!-- TEMPERATURA --\u003e\n\u003carticle class=\"benefit\"\u003e\n\u003cdiv class=\"benefit-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n              \u003cpath d=\"M14 14.8V5a3 3 0 0 0-6 0v9.8a5 5 0 1 0 6 0z\"\u003e\u003c\/path\u003e\n              \u003cpath d=\"M11 10v8\"\u003e\u003c\/path\u003e\n            \u003c\/svg\u003e\u003c\/div\u003e\n\u003ch3\u003e6 niveles de temperatura\u003c\/h3\u003e\n\u003cp\u003eAjustá el calor según el tipo de bolsa y su compatibilidad con el sellado.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003c!-- PANTALLA --\u003e\n\u003carticle class=\"benefit\"\u003e\n\u003cdiv class=\"benefit-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n              \u003crect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"\u003e\u003c\/rect\u003e\n              \u003cpath d=\"M7 10h10\"\u003e\u003c\/path\u003e\n              \u003cpath d=\"M7 14h6\"\u003e\u003c\/path\u003e\n            \u003c\/svg\u003e\u003c\/div\u003e\n\u003ch3\u003ePantalla digital\u003c\/h3\u003e\n\u003cp\u003eConsultá el nivel seleccionado directamente en el dispositivo.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003c!-- MAGNETICO --\u003e\n\u003carticle class=\"benefit\"\u003e\n\u003cdiv class=\"benefit-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n              \u003cpath d=\"M6 3v10a6 6 0 0 0 12 0V3\"\u003e\u003c\/path\u003e\n              \u003cpath d=\"M6 3h4v5H6z\"\u003e\u003c\/path\u003e\n              \u003cpath d=\"M14 3h4v5h-4z\"\u003e\u003c\/path\u003e\n            \u003c\/svg\u003e\u003c\/div\u003e\n\u003ch3\u003eFijación magnética\u003c\/h3\u003e\n\u003cp\u003ePodés colocarlo sobre superficies metálicas compatibles y tenerlo a mano en tu cocina.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- PASOS --\u003e\n\u003csection class=\"how\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n\u003cspan class=\"eyebrow\"\u003e Para el uso cotidiano \u003c\/span\u003e\n\u003ch2\u003eTres pasos \u003cspan class=\"green\"\u003e para volver a cerrar. \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003cdiv class=\"steps\"\u003e\n\u003cdiv class=\"step\"\u003e\n\u003cdiv class=\"step-number\"\u003e1\u003c\/div\u003e\n\u003ch3\u003eAjustá\u003c\/h3\u003e\n\u003cp\u003eSeleccioná el nivel adecuado para la bolsa.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"step\"\u003e\n\u003cdiv class=\"step-number\"\u003e2\u003c\/div\u003e\n\u003ch3\u003eSellá\u003c\/h3\u003e\n\u003cp\u003eIntroducí el borde de la bolsa en la zona de sellado.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"step\"\u003e\n\u003cdiv class=\"step-number\"\u003e3\u003c\/div\u003e\n\u003ch3\u003eGuardá\u003c\/h3\u003e\n\u003cp\u003eRevisá el cierre y guardá el contenido.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- CTA FINAL --\u003e\n\u003csection class=\"final\"\u003e\n\u003cdiv class=\"wrap\"\u003e\n\u003cspan class=\"eyebrow\"\u003e Sellador digital portátil \u003c\/span\u003e\n\u003ch2\u003eUna solución práctica \u003cspan class=\"green\"\u003e para las bolsas abiertas. \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003cp\u003eVolvé a cerrar paquetes de snacks, galletitas, cereales y otros alimentos en bolsas plásticas compatibles.\u003c\/p\u003e\n\u003cbutton type=\"button\" class=\"cart-button\" id=\"mg3123-add\" disabled\u003e \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n          \u003ccircle cx=\"9\" cy=\"21\" r=\"1\"\u003e\u003c\/circle\u003e\n          \u003ccircle cx=\"20\" cy=\"21\" r=\"1\"\u003e\u003c\/circle\u003e\n          \u003cpath d=\"M1 1h4l2.6 13.4a2 2 0 0 0 2 1.6h9.8a2 2 0 0 0 2-1.6L23 6H6\"\u003e\u003c\/path\u003e\n        \u003c\/svg\u003e \u003cspan id=\"mg3123-add-text\"\u003e Cargando producto... \u003c\/span\u003e \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n          \u003cpath d=\"M5 12h14\"\u003e\u003c\/path\u003e\n          \u003cpath d=\"m13 6 6 6-6 6\"\u003e\u003c\/path\u003e\n        \u003c\/svg\u003e \u003c\/button\u003e\n\u003cdiv class=\"cart-message\" id=\"mg3123-message\" role=\"status\" aria-live=\"polite\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n(function () {\n  \"use strict\";\n\n  function initMG3123() {\n    const root = document.getElementById(\"mg3123\");\n\n    if (!root || root.dataset.initialized === \"true\") {\n      return;\n    }\n\n    root.dataset.initialized = \"true\";\n\n    const button = root.querySelector(\"#mg3123-add\");\n    const buttonText = root.querySelector(\"#mg3123-add-text\");\n    const message = root.querySelector(\"#mg3123-message\");\n    const video = root.querySelector(\".video-product\");\n\n    const base = window.Shopify?.routes?.root || \"\/\";\n    const TARGET_SKU = \"3123-0\";\n\n    let variant = null;\n    let busy = false;\n    let resetTimer = null;\n\n    \/* VIDEO: AUTOPLAY, SILENCIO Y LOOP *\/\n\n    if (video) {\n      video.autoplay = true;\n      video.muted = true;\n      video.defaultMuted = true;\n      video.loop = true;\n      video.playsInline = true;\n      video.setAttribute(\"muted\", \"\");\n      video.setAttribute(\"loop\", \"\");\n      video.setAttribute(\"playsinline\", \"\");\n\n      function playVideo() {\n        const result = video.play();\n\n        if (result \u0026\u0026 typeof result.catch === \"function\") {\n          result.catch(function () {\n            \/* Autoplay puede estar limitado por navegador *\/\n          });\n        }\n      }\n\n      video.addEventListener(\"ended\", function () {\n        video.currentTime = 0;\n        playVideo();\n      });\n\n      document.addEventListener(\n        \"visibilitychange\",\n        function () {\n          if (!document.hidden \u0026\u0026 video.paused) {\n            playVideo();\n          }\n        }\n      );\n\n      playVideo();\n    }\n\n    \/* MENSAJES *\/\n\n    function showMessage(text, type) {\n      message.textContent = text || \"\";\n      message.dataset.type = type || \"\";\n    }\n\n    \/* BUSCAR VARIANTE *\/\n\n    async function loadVariant() {\n      const match = location.pathname.match(\n        \/\\\/products\\\/([^\/]+)\/\n      );\n\n      if (!match) {\n        throw new Error(\n          \"El botón debe usarse en la página del producto.\"\n        );\n      }\n\n      const url =\n        base.replace(\/\\\/$\/, \"\") +\n        \"\/products\/\" +\n        encodeURIComponent(match[1]) +\n        \".js\";\n\n      const response = await fetch(url, {\n        headers: {\n          Accept: \"application\/json\"\n        }\n      });\n\n      if (!response.ok) {\n        throw new Error(\"No se pudo cargar el producto.\");\n      }\n\n      const product = await response.json();\n\n      variant = product.variants.find(function (v) {\n        return String(v.sku || \"\").trim() === TARGET_SKU;\n      });\n\n      if (!variant) {\n        button.disabled = true;\n        buttonText.textContent = \"No disponible\";\n        showMessage(\"No se encontró la variante.\", \"error\");\n        return;\n      }\n\n      if (!variant.available) {\n        button.disabled = true;\n        buttonText.textContent = \"Sin stock\";\n        showMessage(\n          \"Producto no disponible por el momento.\",\n          \"error\"\n        );\n        return;\n      }\n\n      button.disabled = false;\n      buttonText.textContent = \"Agregar al carrito\";\n      showMessage(\"\", \"\");\n    }\n\n    \/* CARRITO *\/\n\n    async function getCart() {\n      const response = await fetch(base + \"cart.js\", {\n        headers: {\n          Accept: \"application\/json\"\n        }\n      });\n\n      if (!response.ok) {\n        return null;\n      }\n\n      return response.json();\n    }\n\n    function updateCount(cart) {\n      if (!cart) return;\n\n      document.querySelectorAll(\"[data-cart-count]\")\n        .forEach(function (el) {\n          el.textContent = cart.item_count;\n        });\n\n      document.querySelectorAll(\".cart-count-bubble\")\n        .forEach(function (el) {\n          const count = el.querySelector(\n            'span[aria-hidden=\"true\"]'\n          );\n\n          const accessible = el.querySelector(\n            \".visually-hidden\"\n          );\n\n          if (count) {\n            count.textContent = cart.item_count;\n          }\n\n          if (accessible) {\n            accessible.textContent =\n              cart.item_count + \" artículos\";\n          }\n\n          if (!count \u0026\u0026 !accessible) {\n            el.textContent = cart.item_count;\n          }\n\n          el.style.display =\n            cart.item_count \u003e 0 ? \"\" : \"none\";\n        });\n    }\n\n    function notifyCart(cart) {\n      [\"cart:refresh\", \"cart:updated\", \"cart:change\"]\n        .forEach(function (name) {\n          document.dispatchEvent(\n            new CustomEvent(name, {\n              detail: {\n                source: \"mg3123\",\n                cart: cart || null\n              }\n            })\n          );\n        });\n    }\n\n    \/* ABRIR MINI CARRITO *\/\n\n    function openMiniCart() {\n      const drawer = document.querySelector(\"cart-drawer\");\n\n      if (drawer \u0026\u0026 typeof drawer.open === \"function\") {\n        drawer.open();\n        return true;\n      }\n\n      const notification = document.querySelector(\n        \"cart-notification\"\n      );\n\n      if (\n        notification \u0026\u0026\n        typeof notification.open === \"function\"\n      ) {\n        notification.open();\n        return true;\n      }\n\n      const triggers = [\n        \"[data-cart-drawer-toggle]\",\n        \"[data-cart-toggle]\",\n        '[aria-controls=\"CartDrawer\"]',\n        '[href=\"#cart-drawer\"]'\n      ];\n\n      for (const selector of triggers) {\n        const el = document.querySelector(selector);\n\n        if (el) {\n          el.click();\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    \/* AGREGAR PRODUCTO *\/\n\n    async function addToCart() {\n      if (busy || !variant || !variant.available) {\n        return;\n      }\n\n      busy = true;\n      button.disabled = true;\n      buttonText.textContent = \"Agregando...\";\n      showMessage(\"\", \"\");\n\n      if (resetTimer) {\n        clearTimeout(resetTimer);\n        resetTimer = null;\n      }\n\n      try {\n        const component =\n          document.querySelector(\"cart-drawer\") ||\n          document.querySelector(\"cart-notification\");\n\n        let sections = [];\n\n        if (\n          component \u0026\u0026\n          typeof component.getSectionsToRender === \"function\"\n        ) {\n          sections = component.getSectionsToRender()\n            .map(function (item) {\n              return item.id;\n            })\n            .filter(Boolean);\n        }\n\n        const payload = {\n          items: [\n            {\n              id: Number(variant.id),\n              quantity: 1\n            }\n          ]\n        };\n\n        if (sections.length) {\n          payload.sections = sections;\n          payload.sections_url = location.pathname;\n        }\n\n        const response = await fetch(\n          base + \"cart\/add.js\",\n          {\n            method: \"POST\",\n            headers: {\n              \"Content-Type\": \"application\/json\",\n              Accept: \"application\/json\"\n            },\n            body: JSON.stringify(payload)\n          }\n        );\n\n        const result = await response.json();\n\n        if (!response.ok || result.status) {\n          throw new Error(\n            result.description ||\n            result.message ||\n            \"No se pudo agregar el producto.\"\n          );\n        }\n\n        const cart = await getCart().catch(function () {\n          return null;\n        });\n\n        updateCount(cart);\n\n        let rendered = false;\n\n        if (\n          component \u0026\u0026\n          typeof component.renderContents === \"function\" \u0026\u0026\n          result.sections\n        ) {\n          try {\n            component.renderContents({\n              ...result,\n              id: result.items?.[0]?.key,\n              sections: result.sections\n            });\n\n            rendered = true;\n          } catch (error) {\n            console.warn(\n              \"MG3123: no se pudo actualizar el drawer.\",\n              error\n            );\n          }\n        }\n\n        if (!rendered) {\n          openMiniCart();\n        }\n\n        notifyCart(cart);\n\n        buttonText.textContent = \"Agregado al carrito\";\n\n        showMessage(\n          \"Producto agregado correctamente.\",\n          \"success\"\n        );\n\n        resetTimer = setTimeout(function () {\n          if (!busy \u0026\u0026 variant?.available) {\n            buttonText.textContent = \"Agregar al carrito\";\n          }\n        }, 2200);\n\n      } catch (error) {\n        console.error(\"MG3123:\", error);\n\n        buttonText.textContent = \"Agregar al carrito\";\n\n        showMessage(\n          error.message || \"Intentá nuevamente.\",\n          \"error\"\n        );\n      } finally {\n        busy = false;\n        button.disabled = !variant || !variant.available;\n      }\n    }\n\n    button.addEventListener(\"click\", addToCart);\n\n    loadVariant().catch(function (error) {\n      console.error(\"MG3123:\", error);\n\n      button.disabled = true;\n      buttonText.textContent = \"No disponible\";\n\n      showMessage(\n        error.message || \"No se pudo cargar el producto.\",\n        \"error\"\n      );\n    });\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\n      \"DOMContentLoaded\",\n      initMG3123\n    );\n  } else {\n    initMG3123();\n  }\n})();\n\u003c\/script\u003e","brand":"Clara (Yiwu Mayhome Import\u0026export Co.,ltd) (0.0 Unidades - 169,81 $)","offers":[{"title":"Default Title","offer_id":67951843443002,"sku":"3123-0","price":990.0,"currency_code":"UYU","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0758\/3698\/1562\/files\/Portada_6410779b-42fb-479b-826d-c46a73f59747.png?v=1794409512","url":"https:\/\/milgenialuruguay.com\/products\/sellador-de-bolsas-plastico-portatil-recargable","provider":"MilGenial Uruguay","version":"1.0","type":"link"}