{"product_id":"elastico-de-futbol-para-practicar-toque-y-control","title":"Elástico de Fútbol para Practicar Toque y Control","description":"\n\u003cstyle\u003e\n\/* ==========================================\n   MILGENIAL | ELASTICO DE FUTBOL | 3107-0\n========================================== *\/\n\n.mg3107 {\n  --green: #08A56E;\n  --dark: #17241e;\n  --muted: #65726b;\n  --light: #f3faf6;\n  --border: #dfece4;\n  font-family: 'Poppins', 'Inter', Arial, sans-serif;\n  color: var(--dark);\n  background: #ffffff;\n  width: 100%;\n  line-height: 1.6;\n  overflow: hidden;\n}\n\n.mg3107 *,\n.mg3107 *::before,\n.mg3107 *::after {\n  box-sizing: border-box;\n}\n\n.mg3107 .mg-wrap {\n  max-width: 780px;\n  padding: 0 20px;\n  margin: 0 auto;\n}\n\n.mg3107 h2,\n.mg3107 h3,\n.mg3107 p {\n  margin: 0;\n  padding: 0;\n}\n\n.mg3107 h2 {\n  font-size: clamp(27px, 5vw, 40px);\n  line-height: 1.2;\n  font-weight: 800;\n  letter-spacing: -1.2px;\n}\n\n.mg3107 h3 {\n  font-size: 18px;\n  font-weight: 750;\n  line-height: 1.3;\n}\n\n.mg3107 p {\n  font-size: 15px;\n  color: var(--muted);\n  line-height: 1.75;\n}\n\n.mg3107 .mg-green {\n  color: var(--green);\n}\n\n.mg3107 .mg-center {\n  text-align: center;\n}\n\n.mg3107 .mg-label {\n  display: inline-block;\n  color: var(--green);\n  font-size: 11px;\n  font-weight: 800;\n  text-transform: uppercase;\n  letter-spacing: 1.4px;\n  margin-bottom: 13px;\n}\n\n\/* HERO *\/\n\n.mg3107 .mg-hero {\n  padding: 53px 0 49px;\n  text-align: center;\n  background: linear-gradient(\n    180deg,\n    #f0faf4 0%,\n    #ffffff 100%\n  );\n}\n\n.mg3107 .mg-hero h2 {\n  max-width: 690px;\n  margin: auto;\n  font-size: clamp(33px, 6vw, 49px);\n  letter-spacing: -1.7px;\n}\n\n.mg3107 .mg-hero p {\n  max-width: 590px;\n  margin: 19px auto 0;\n}\n\n.mg3107 .mg-pills {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: 9px;\n  margin-top: 24px;\n}\n\n.mg3107 .mg-pills span {\n  padding: 8px 14px;\n  border: 1px solid #d8ecdf;\n  background: #ffffff;\n  border-radius: 30px;\n  color: #23734d;\n  font-size: 12px;\n  font-weight: 700;\n}\n\n\/* BENEFICIO PRINCIPAL *\/\n\n.mg3107 .mg-benefit {\n  padding: 49px 0 53px;\n}\n\n.mg3107 .mg-benefit h2 {\n  max-width: 640px;\n  margin: auto;\n}\n\n.mg3107 .mg-benefit p {\n  max-width: 610px;\n  margin: 17px auto 0;\n}\n\n\/* IMAGEN INTEGRADA *\/\n\n.mg3107 .mg-media {\n  width: 100%;\n  max-width: 640px;\n  margin: 29px auto 0;\n}\n\n.mg3107 .mg-image-frame {\n  display: block;\n  width: 100%;\n  overflow: hidden;\n  border-radius: 18px;\n  background: #f4f7f5;\n}\n\n.mg3107 .mg-product-image {\n  display: block !important;\n  width: 100% !important;\n  max-width: none !important;\n  height: auto !important;\n  border: none !important;\n  border-radius: 0 !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  object-fit: contain;\n}\n\n.mg3107 .mg-image-caption {\n  margin: 13px auto 0;\n  max-width: 550px;\n  text-align: center;\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--muted);\n}\n\n\/* FUNCIONAMIENTO *\/\n\n.mg3107 .mg-how {\n  padding: 46px 0;\n  background: var(--light);\n}\n\n.mg3107 .mg-steps {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: 15px;\n  margin-top: 31px;\n}\n\n.mg3107 .mg-step {\n  padding: 20px 15px;\n  background: #fff;\n  border: 1px solid var(--border);\n  border-radius: 15px;\n  text-align: center;\n}\n\n.mg3107 .mg-step-number {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 39px;\n  height: 39px;\n  margin: 0 auto 13px;\n  border-radius: 50%;\n  background: var(--green);\n  color: #fff;\n  font-size: 16px;\n  font-weight: 800;\n}\n\n.mg3107 .mg-step h3 {\n  font-size: 16px;\n  margin-bottom: 7px;\n}\n\n.mg3107 .mg-step p {\n  font-size: 12px;\n  line-height: 1.6;\n}\n\n\/* ENTRENAMIENTO *\/\n\n.mg3107 .mg-training {\n  padding: 48px 0 52px;\n}\n\n.mg3107 .mg-training-intro {\n  max-width: 590px;\n  margin: 15px auto 0;\n}\n\n.mg3107 .mg-training-grid {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: 13px;\n  margin-top: 29px;\n}\n\n.mg3107 .mg-training-item {\n  padding: 23px 20px;\n  border: 1px solid var(--border);\n  border-radius: 15px;\n  background: #fff;\n}\n\n.mg3107 .mg-training-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 42px;\n  height: 42px;\n  border-radius: 12px;\n  background: var(--light);\n  color: var(--green);\n  margin-bottom: 16px;\n}\n\n.mg3107 .mg-training-icon svg {\n  width: 23px;\n  height: 23px;\n}\n\n.mg3107 .mg-training-item h3 {\n  font-size: 16px;\n  margin-bottom: 8px;\n}\n\n.mg3107 .mg-training-item p {\n  font-size: 12px;\n  line-height: 1.65;\n}\n\n\/* MENSAJE *\/\n\n.mg3107 .mg-message-section {\n  padding: 39px 0;\n  background: var(--light);\n}\n\n.mg3107 .mg-message-section p {\n  max-width: 590px;\n  margin: 16px auto 0;\n}\n\n\/* CTA *\/\n\n.mg3107 .mg-final {\n  padding: 52px 0 61px;\n  text-align: center;\n  background: #fff;\n}\n\n.mg3107 .mg-final h2 {\n  max-width: 630px;\n  margin: auto;\n  font-size: clamp(27px, 5vw, 37px);\n}\n\n.mg3107 .mg-final p {\n  max-width: 540px;\n  margin: 16px auto 0;\n}\n\n.mg3107 .mg-cart {\n  position: relative;\n  display: block;\n  width: 100%;\n  max-width: 450px;\n  min-height: 60px;\n  margin: 27px auto 0;\n  padding: 16px 55px;\n  border: 0;\n  border-radius: 12px;\n  background: #18a558;\n  color: #fff;\n  font-family: inherit;\n  font-size: 16px;\n  font-weight: 750;\n  cursor: pointer;\n  transition: background .2s, transform .2s;\n}\n\n.mg3107 .mg-cart:hover:not(:disabled) {\n  background: #117c40;\n  transform: translateY(-2px);\n}\n\n.mg3107 .mg-cart:disabled {\n  opacity: .6;\n  cursor: not-allowed;\n  transform: none;\n}\n\n.mg3107 .mg-cart:focus-visible {\n  outline: 3px solid #80cfa4;\n  outline-offset: 3px;\n}\n\n.mg3107 .mg-cart svg {\n  width: 21px;\n  height: 21px;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n\n.mg3107 .mg-cart-icon {\n  left: 20px;\n}\n\n.mg3107 .mg-cart-arrow {\n  right: 20px;\n}\n\n.mg3107 .mg-cart-message {\n  margin-top: 12px;\n  min-height: 22px;\n  font-size: 13px;\n  font-weight: 650;\n}\n\n.mg3107 .mg-cart-message[data-type=\"error\"] {\n  color: #b63030;\n}\n\n.mg3107 .mg-cart-message[data-type=\"success\"] {\n  color: #087d53;\n}\n\n\/* MOBILE *\/\n\n@media (max-width: 600px) {\n  .mg3107 .mg-wrap {\n    padding: 0 17px;\n  }\n\n  .mg3107 .mg-hero {\n    padding: 39px 0 41px;\n  }\n\n  .mg3107 .mg-hero h2 {\n    font-size: 34px;\n    letter-spacing: -1.2px;\n  }\n\n  .mg3107 .mg-hero p {\n    font-size: 14px;\n    margin-top: 15px;\n  }\n\n  .mg3107 h2 {\n    font-size: 28px;\n  }\n\n  .mg3107 p {\n    font-size: 14px;\n  }\n\n  .mg3107 .mg-benefit,\n  .mg3107 .mg-training {\n    padding: 37px 0;\n  }\n\n  .mg3107 .mg-media {\n    margin-top: 24px;\n    max-width: 100%;\n  }\n\n  .mg3107 .mg-image-frame {\n    border-radius: 13px;\n  }\n\n  .mg3107 .mg-product-image {\n    width: 100% !important;\n    height: auto !important;\n  }\n\n  .mg3107 .mg-image-caption {\n    margin-top: 10px;\n    font-size: 11px;\n  }\n\n  .mg3107 .mg-how {\n    padding: 37px 0;\n  }\n\n  .mg3107 .mg-steps {\n    gap: 9px;\n    margin-top: 25px;\n  }\n\n  .mg3107 .mg-step {\n    padding: 14px 8px;\n  }\n\n  .mg3107 .mg-step-number {\n    width: 32px;\n    height: 32px;\n    font-size: 13px;\n  }\n\n  .mg3107 .mg-step h3 {\n    font-size: 13px;\n  }\n\n  .mg3107 .mg-step p {\n    font-size: 11px;\n  }\n\n  .mg3107 .mg-training-grid {\n    grid-template-columns: 1fr;\n    gap: 10px;\n  }\n\n  .mg3107 .mg-training-item {\n    display: grid;\n    grid-template-columns: 45px 1fr;\n    column-gap: 13px;\n    padding: 19px;\n  }\n\n  .mg3107 .mg-training-icon {\n    grid-row: span 2;\n    margin: 0;\n  }\n\n  .mg3107 .mg-training-item h3 {\n    margin-bottom: 5px;\n  }\n\n  .mg3107 .mg-training-item p {\n    font-size: 12px;\n  }\n\n  .mg3107 .mg-message-section {\n    padding: 35px 0;\n  }\n\n  .mg3107 .mg-final {\n    padding: 42px 0 53px;\n  }\n\n  .mg3107 .mg-final h2 {\n    font-size: 29px;\n  }\n\n  .mg3107 .mg-cart {\n    max-width: none;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .mg3107 * {\n    transition: none !important;\n  }\n}\n\u003c\/style\u003e\n\n\u003cdiv class=\"mg3107\" id=\"mg3107\"\u003e\n\n  \u003c!-- HERO --\u003e\n  \u003csection class=\"mg-hero\"\u003e\n    \u003cdiv class=\"mg-wrap mg-center\"\u003e\n\n      \u003cspan class=\"mg-label\"\u003e\n        Elástico de entrenamiento de fútbol\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Entrená tus toques\n        \u003cspan class=\"mg-green\"\u003e\n          sin depender de nadie.\n        \u003c\/span\u003e\n      \u003c\/h2\u003e\n\n      \u003cp\u003e\n        ¿Querés practicar fútbol, pero no siempre\n        tenés con quién pasarte la pelota?\n        Con este elástico de entrenamiento podés\n        trabajar tus pases, recepciones y control\n        de balón por tu cuenta.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"mg-pills\"\u003e\n        \u003cspan\u003eEntrenamiento individual\u003c\/span\u003e\n        \u003cspan\u003eControl de pelota\u003c\/span\u003e\n        \u003cspan\u003ePráctica de pases\u003c\/span\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- BENEFICIO E IMAGEN --\u003e\n  \u003csection class=\"mg-benefit\"\u003e\n    \u003cdiv class=\"mg-wrap mg-center\"\u003e\n\n      \u003cspan class=\"mg-label\"\u003e\n        Practicá sin interrupciones\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Menos tiempo buscando la pelota.\n        \u003cspan class=\"mg-green\"\u003e\n          Más tiempo entrenando.\n        \u003c\/span\u003e\n      \u003c\/h2\u003e\n\n      \u003cp\u003e\n        Cuando practicás solo, cada pelota que se va\n        lejos te obliga a interrumpir el ejercicio.\n        El sistema elástico permite que la pelota\n        regrese después de patearla, para que\n        puedas repetir los movimientos sin\n        ir a buscarla constantemente.\n      \u003c\/p\u003e\n\n      \u003c!-- IMAGEN REAL EN SHOPIFY --\u003e\n      \u003cdiv class=\"mg-media\"\u003e\n\n        \u003cdiv class=\"mg-image-frame\"\u003e\n\n          \u003cimg class=\"mg-product-image\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0758\/3698\/1562\/files\/modelo4_fcb518ca-966e-424b-8102-d88e4f343320.png?v=1794317649\" alt=\"Jugador de fútbol practicando control de balón con el entrenador de cuerda elástica y cinturón\" loading=\"lazy\" decoding=\"async\"\u003e\n\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- FUNCIONAMIENTO --\u003e\n  \u003csection class=\"mg-how\"\u003e\n    \u003cdiv class=\"mg-wrap mg-center\"\u003e\n\n      \u003cspan class=\"mg-label\"\u003e\n        Fácil de utilizar\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Pateás, vuelve\n        \u003cspan class=\"mg-green\"\u003e\n          y seguís practicando.\n        \u003c\/span\u003e\n      \u003c\/h2\u003e\n\n      \u003cdiv class=\"mg-steps\"\u003e\n\n        \u003cdiv class=\"mg-step\"\u003e\n          \u003cdiv class=\"mg-step-number\"\u003e1\u003c\/div\u003e\n          \u003ch3\u003ePrepará\u003c\/h3\u003e\n          \u003cp\u003e\n            Ajustá el sistema de entrenamiento\n            y sujetá la pelota.\n          \u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"mg-step\"\u003e\n          \u003cdiv class=\"mg-step-number\"\u003e2\u003c\/div\u003e\n          \u003ch3\u003ePateá\u003c\/h3\u003e\n          \u003cp\u003e\n            Practicá pases y toques\n            con la pelota.\n          \u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"mg-step\"\u003e\n          \u003cdiv class=\"mg-step-number\"\u003e3\u003c\/div\u003e\n          \u003ch3\u003eRepetí\u003c\/h3\u003e\n          \u003cp\u003e\n            Aprovechá el retorno para\n            continuar el ejercicio.\n          \u003c\/p\u003e\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- EJERCICIOS --\u003e\n  \u003csection class=\"mg-training\"\u003e\n    \u003cdiv class=\"mg-wrap\"\u003e\n\n      \u003cdiv class=\"mg-center\"\u003e\n\n        \u003cspan class=\"mg-label\"\u003e\n          Más posibilidades para practicar\n        \u003c\/span\u003e\n\n        \u003ch2\u003e\n          Trabajá tu técnica\n          \u003cspan class=\"mg-green\"\u003e\n            toque a toque.\n          \u003c\/span\u003e\n        \u003c\/h2\u003e\n\n        \u003cp class=\"mg-training-intro\"\u003e\n          Aprovechá cada sesión para practicar\n          diferentes movimientos con la pelota.\n        \u003c\/p\u003e\n\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"mg-training-grid\"\u003e\n\n        \u003carticle class=\"mg-training-item\"\u003e\n\n          \u003cdiv class=\"mg-training-icon\"\u003e\n            \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n              \u003ccircle cx=\"12\" cy=\"12\" r=\"9\"\u003e\u003c\/circle\u003e\n              \u003cpath d=\"m12 7 4 3-1.5 5h-5L8 10z\"\u003e\u003c\/path\u003e\n              \u003cpath d=\"M12 7V3M16 10l4-2M14.5 15l3 4M9.5 15l-3 4M8 10 4 8\"\u003e\u003c\/path\u003e\n            \u003c\/svg\u003e\n          \u003c\/div\u003e\n\n          \u003ch3\u003eControl de pelota\u003c\/h3\u003e\n          \u003cp\u003e\n            Repetí recepciones para\n            trabajar tu primer toque.\n          \u003c\/p\u003e\n\n        \u003c\/article\u003e\n\n        \u003carticle class=\"mg-training-item\"\u003e\n\n          \u003cdiv class=\"mg-training-icon\"\u003e\n            \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n              \u003cpath d=\"M4 12h15\"\u003e\u003c\/path\u003e\n              \u003cpath d=\"m14 7 5 5-5 5\"\u003e\u003c\/path\u003e\n              \u003cpath d=\"M4 6v12\"\u003e\u003c\/path\u003e\n            \u003c\/svg\u003e\n          \u003c\/div\u003e\n\n          \u003ch3\u003ePráctica de pases\u003c\/h3\u003e\n          \u003cp\u003e\n            Trabajá la dirección y la fuerza\n            con la que golpeás la pelota.\n          \u003c\/p\u003e\n\n        \u003c\/article\u003e\n\n        \u003carticle class=\"mg-training-item\"\u003e\n\n          \u003cdiv class=\"mg-training-icon\"\u003e\n            \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n              \u003cpath d=\"M3 7h12\"\u003e\u003c\/path\u003e\n              \u003cpath d=\"m11 3 4 4-4 4\"\u003e\u003c\/path\u003e\n              \u003cpath d=\"M21 17H9\"\u003e\u003c\/path\u003e\n              \u003cpath d=\"m13 13-4 4 4 4\"\u003e\u003c\/path\u003e\n            \u003c\/svg\u003e\n          \u003c\/div\u003e\n\n          \u003ch3\u003eCoordinación\u003c\/h3\u003e\n          \u003cp\u003e\n            Alterná los pies y practicá\n            diferentes movimientos.\n          \u003c\/p\u003e\n\n        \u003c\/article\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- MENSAJE --\u003e\n  \u003csection class=\"mg-message-section\"\u003e\n    \u003cdiv class=\"mg-wrap mg-center\"\u003e\n\n      \u003cspan class=\"mg-label\"\u003e\n        Cada toque cuenta\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        No esperes al próximo partido\n        \u003cspan class=\"mg-green\"\u003e\n          para seguir practicando.\n        \u003c\/span\u003e\n      \u003c\/h2\u003e\n\n      \u003cp\u003e\n        Aprovechá tus ratos libres para trabajar\n        la técnica y ganar confianza con la pelota.\n        Entrená a tu ritmo, incluso cuando estás solo.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- CTA --\u003e\n  \u003csection class=\"mg-final\"\u003e\n    \u003cdiv class=\"mg-wrap mg-center\"\u003e\n\n      \u003cspan class=\"mg-label\"\u003e\n        Entrenamiento individual de fútbol\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Tu próximo entrenamiento\n        \u003cspan class=\"mg-green\"\u003e\n          empieza con un toque.\n        \u003c\/span\u003e\n      \u003c\/h2\u003e\n\n      \u003cp\u003e\n        Practicá pases, control y coordinación\n        sin depender de otra persona.\n      \u003c\/p\u003e\n\n      \u003cbutton class=\"mg-cart\" id=\"mg3107-add\" type=\"button\" disabled\u003e\n\n        \u003csvg class=\"mg-cart-icon\" 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 002 1.6h9.8a2 2 0 002-1.6L23 6H6\"\u003e\u003c\/path\u003e\n        \u003c\/svg\u003e\n\n        \u003cspan id=\"mg3107-add-text\"\u003e\n          Cargando producto...\n        \u003c\/span\u003e\n\n        \u003csvg class=\"mg-cart-arrow\" 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\n\n      \u003c\/button\u003e\n\n      \u003cdiv class=\"mg-cart-message\" id=\"mg3107-message\" role=\"status\" aria-live=\"polite\"\u003e\u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function () {\n  \"use strict\";\n\n  function initMG3107() {\n    const root = document.getElementById(\"mg3107\");\n\n    if (!root || root.dataset.ready === \"true\") {\n      return;\n    }\n\n    root.dataset.ready = \"true\";\n\n    const button = root.querySelector(\"#mg3107-add\");\n    const buttonText = root.querySelector(\"#mg3107-add-text\");\n    const message = root.querySelector(\"#mg3107-message\");\n\n    const base = window.Shopify?.routes?.root || \"\/\";\n    const TARGET_SKU = \"3107-0\";\n\n    let variant = null;\n    let loading = false;\n\n    function showMessage(text, type) {\n      message.textContent = text || \"\";\n      message.dataset.type = type || \"\";\n    }\n\n    function getProductURL() {\n      const match = location.pathname.match(\n        \/\\\/products\\\/([^\/]+)\/\n      );\n\n      if (!match) {\n        throw new Error(\n          \"La landing debe estar dentro de la página del producto.\"\n        );\n      }\n\n      return base.replace(\/\\\/$\/, \"\") +\n        \"\/products\/\" +\n        encodeURIComponent(match[1]) +\n        \".js\";\n    }\n\n    async function loadProduct() {\n      const response = await fetch(getProductURL(), {\n        headers: {\n          \"Accept\": \"application\/json\"\n        }\n      });\n\n      if (!response.ok) {\n        throw new Error(\n          \"No se pudo cargar la información del producto.\"\n        );\n      }\n\n      const product = await response.json();\n\n      variant = product.variants.find(\n        item =\u003e String(item.sku || \"\").trim() === TARGET_SKU\n      );\n\n      if (!variant) {\n        button.disabled = true;\n        buttonText.textContent = \"No disponible\";\n        showMessage(\n          \"No se encontró el SKU 3107-0 en este producto.\",\n          \"error\"\n        );\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    function notifyCart() {\n      [\"cart:refresh\", \"cart:updated\", \"cart:change\"].forEach(\n        eventName =\u003e {\n          document.dispatchEvent(\n            new CustomEvent(eventName, {\n              detail: { source: \"mg3107\" }\n            })\n          );\n        }\n      );\n    }\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 selectors = [\n        \"[data-cart-drawer-toggle]\",\n        \"[data-cart-toggle]\",\n        '[aria-controls=\"CartDrawer\"]',\n        '[href=\"#cart-drawer\"]'\n      ];\n\n      for (const selector of selectors) {\n        const trigger = document.querySelector(selector);\n\n        if (trigger) {\n          trigger.click();\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    async function updateCartCount() {\n      const response = await fetch(base + \"cart.js\");\n\n      if (!response.ok) return;\n\n      const cart = await response.json();\n\n      document.querySelectorAll(\n        \".cart-count-bubble, [data-cart-count]\"\n      ).forEach(element =\u003e {\n        const count = element.querySelector(\n          \"span[aria-hidden]\"\n        ) || element;\n\n        count.textContent = cart.item_count;\n\n        if (element.hasAttribute(\"data-cart-count\")) {\n          element.setAttribute(\n            \"data-cart-count\",\n            String(cart.item_count)\n          );\n        }\n      });\n    }\n\n    button.addEventListener(\"click\", async function () {\n      if (!variant || !variant.available || loading) {\n        return;\n      }\n\n      loading = true;\n      button.disabled = true;\n      buttonText.textContent = \"Agregando...\";\n      showMessage(\"\", \"\");\n\n      try {\n        const cartComponent =\n          document.querySelector(\"cart-drawer\") ||\n          document.querySelector(\"cart-notification\");\n\n        const sections =\n          cartComponent?.getSectionsToRender?.() || [];\n\n        const sectionIDs = sections\n          .map(section =\u003e section.id)\n          .filter(Boolean);\n\n        const payload = {\n          items: [{\n            id: Number(variant.id),\n            quantity: 1\n          }]\n        };\n\n        if (sectionIDs.length) {\n          payload.sections = sectionIDs;\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 al carrito.\"\n          );\n        }\n\n        if (\n          cartComponent \u0026\u0026\n          typeof cartComponent.renderContents === \"function\" \u0026\u0026\n          result.sections\n        ) {\n          cartComponent.renderContents({\n            ...result,\n            id: result.items?.[0]?.key,\n            sections: result.sections\n          });\n        } else {\n          try {\n            await updateCartCount();\n          } catch (error) {\n            console.warn(\"Cart update:\", error);\n          }\n\n          openMiniCart();\n        }\n\n        notifyCart();\n\n        buttonText.textContent = \"Agregado al carrito\";\n\n        showMessage(\n          \"Producto agregado correctamente.\",\n          \"success\"\n        );\n\n        setTimeout(() =\u003e {\n          if (!loading \u0026\u0026 variant?.available) {\n            buttonText.textContent = \"Agregar al carrito\";\n          }\n        }, 2200);\n\n      } catch (error) {\n        console.error(\"MG3107:\", error);\n\n        buttonText.textContent = \"Agregar al carrito\";\n\n        showMessage(\n          error.message || \"Intentá nuevamente.\",\n          \"error\"\n        );\n\n      } finally {\n        loading = false;\n        button.disabled = !variant || !variant.available;\n      }\n    });\n\n    loadProduct().catch(error =\u003e {\n      console.error(\"MG3107:\", error);\n\n      button.disabled = true;\n      buttonText.textContent = \"No disponible\";\n      showMessage(error.message, \"error\");\n    });\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\n      \"DOMContentLoaded\",\n      initMG3107\n    );\n  } else {\n    initMG3107();\n  }\n})();\n\u003c\/script\u003e\n","brand":"Clara (Yiwu Mayhome Import\u0026export Co.,ltd) (0.0 Unidades - 72,04 $)","offers":[{"title":"Default Title","offer_id":67951838495034,"sku":"3107-0","price":490.0,"currency_code":"UYU","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0758\/3698\/1562\/files\/portada_4a074767-ba8b-40e1-b378-f8ee4a2ffafd.png?v=1794316789","url":"https:\/\/milgenialuruguay.com\/products\/elastico-de-futbol-para-practicar-toque-y-control","provider":"MilGenial Uruguay","version":"1.0","type":"link"}