{"product_id":"pista-de-encastre-armable-para-ninos","title":"Pista de Encastre Armable para Niños","description":"\n\u003cstyle\u003e\n#mg3121 {\n  --green:#08A56E;\n  --dark:#183A2E;\n  --muted:#5D6D64;\n  --soft:#F0F9F4;\n  --line:#DCECE2;\n  max-width:840px;\n  margin:0 auto;\n  padding:12px 0 35px;\n  font-family:inherit;\n  color:var(--dark);\n  line-height:1.6;\n}\n#mg3121 *{box-sizing:border-box}\n#mg3121 h2,\n#mg3121 h3,\n#mg3121 p{margin:0}\n#mg3121 h2{\n  font-size:clamp(27px,4vw,41px);\n  font-weight:800;\n  letter-spacing:-.035em;\n  line-height:1.17;\n}\n#mg3121 p{\n  font-size:16px;\n  color:var(--muted);\n  line-height:1.7;\n}\n#mg3121 .green{color:#087E55}\n#mg3121 .eyebrow{\n  display:block;\n  font-size:11px;\n  font-weight:800;\n  letter-spacing:.1em;\n  color:#087E55;\n  text-transform:uppercase;\n  margin-bottom:13px;\n}\n\n\/* HERO *\/\n#mg3121 .hero{\n  padding:clamp(25px,5vw,43px);\n  border-radius:19px;\n  background:var(--soft);\n  text-align:center;\n}\n#mg3121 .hero h2{\n  max-width:650px;\n  margin:0 auto 14px;\n}\n#mg3121 .hero p{\n  max-width:570px;\n  margin:auto;\n}\n\n\/* VIDEO *\/\n#mg3121 .video-section{\n  margin:35px auto 0;\n  text-align:center;\n}\n#mg3121 .video-frame{\n  width:min(100%,400px);\n  aspect-ratio:4\/5;\n  margin:0 auto;\n  border-radius:15px;\n  overflow:hidden;\n  background:#E2EEE7;\n}\n#mg3121 .video-frame video{\n  width:100%;\n  height:100%;\n  display:block;\n  object-fit:contain;\n}\n#mg3121 .video-note{\n  margin:15px auto 0;\n  max-width:530px;\n  font-size:14px;\n}\n\n\/* BENEFICIOS *\/\n#mg3121 .benefits{\n  margin-top:42px;\n}\n#mg3121 .benefits h2{\n  font-size:clamp(23px,3vw,31px);\n  text-align:center;\n  margin-bottom:21px;\n}\n#mg3121 .benefit{\n  display:flex;\n  align-items:flex-start;\n  gap:16px;\n  padding:18px 3px;\n  border-bottom:1px solid var(--line);\n}\n#mg3121 .benefit-icon{\n  width:37px;\n  height:37px;\n  flex:0 0 37px;\n  border-radius:11px;\n  background:var(--soft);\n  color:#087E55;\n  display:grid;\n  place-items:center;\n  font-weight:800;\n  font-size:17px;\n}\n#mg3121 .benefit h3{\n  font-size:18px;\n  font-weight:750;\n  line-height:1.3;\n  margin-bottom:4px;\n}\n#mg3121 .benefit p{\n  font-size:14px;\n}\n\n\/* CTA *\/\n#mg3121 .closing{\n  margin-top:43px;\n  text-align:center;\n  padding:28px 18px;\n  background:var(--soft);\n  border-radius:17px;\n}\n#mg3121 .closing h2{\n  font-size:clamp(24px,3vw,32px);\n  margin:0 auto 12px;\n  max-width:630px;\n}\n#mg3121 .closing p{\n  max-width:550px;\n  margin:auto;\n  font-size:15px;\n}\n#mg3121 .cta-wrap{\n  max-width:470px;\n  margin:23px auto 0;\n}\n#mg3121 .cart-btn{\n  width:100%;\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:13px;\n  border:0;\n  border-radius:11px;\n  background:#18A558;\n  color:#fff;\n  padding:17px 20px;\n  font-family:inherit;\n  font-size:16px;\n  font-weight:800;\n  cursor:pointer;\n  transition:background .2s;\n}\n#mg3121 .cart-btn:hover{\n  background:#117C40;\n}\n#mg3121 .cart-btn:disabled{\n  opacity:.7;\n  cursor:wait;\n}\n#mg3121 .cart-btn svg{\n  width:20px;\n  height:20px;\n  flex-shrink:0;\n}\n#mg3121 .cart-status{\n  min-height:20px;\n  margin-top:9px;\n  font-size:13px;\n  color:#087E55;\n}\n@media(max-width:767px){\n  #mg3121 .hero{\n    padding:30px 21px;\n    border-radius:15px;\n  }\n  #mg3121 .video-section{\n    margin-top:27px;\n  }\n  #mg3121 .video-frame{\n    width:min(100%,380px);\n    border-radius:12px;\n  }\n  #mg3121 .benefits{\n    margin-top:33px;\n  }\n  #mg3121 .benefit{\n    gap:12px;\n    padding:17px 0;\n  }\n  #mg3121 .closing{\n    margin-top:34px;\n    padding:27px 18px;\n  }\n  #mg3121 .cart-btn{\n    font-size:15px;\n  }\n}\n\u003c\/style\u003e\n\n\u003csection id=\"mg3121\"\u003e\n\n  \u003c!-- PRESENTACIÓN --\u003e\n  \u003cdiv class=\"hero\"\u003e\n    \u003cspan class=\"eyebrow\"\u003e\n      Laberinto de Carreteras\n    \u003c\/span\u003e\n\n    \u003ch2\u003e\n      Un desafío para jugar,\n      \u003cspan class=\"green\"\u003e\n        pensar y divertirse.\n      \u003c\/span\u003e\n    \u003c\/h2\u003e\n\n    \u003cp\u003e\n      Combiná las piezas, encontrá el camino\n      y superá el desafío.\n      Una forma diferente de entretenerse\n      sin pantallas.\n    \u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- VIDEO --\u003e\n  \u003cdiv class=\"video-section\"\u003e\n    \u003cdiv class=\"video-frame\"\u003e\n\n      \u003cvideo autoplay muted loop playsinline preload=\"metadata\" aria-label=\"Laberinto de Carreteras en uso\"\u003e\n        \u003csource src=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/7cb3c3c8c5744e3eb52509e8db74c931.mp4\" type=\"video\/mp4\"\u003e\u003c\/video\u003e\n\n    \u003c\/div\u003e\n\n    \u003cp class=\"video-note\"\u003e\n      Mirá cómo las piezas se combinan\n      para formar diferentes recorridos.\n    \u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- BENEFICIOS --\u003e\n  \u003cdiv class=\"benefits\"\u003e\n\n    \u003ch2\u003e\n      Diversión que los invita a participar.\n    \u003c\/h2\u003e\n\n    \u003cdiv class=\"benefit\"\u003e\n      \u003cdiv class=\"benefit-icon\"\u003e01\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003ch3\u003eEntretenimiento sin pantallas\u003c\/h3\u003e\n        \u003cp\u003e\n          Una alternativa al celular\n          para disfrutar jugando.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"benefit\"\u003e\n      \u003cdiv class=\"benefit-icon\"\u003e02\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003ch3\u003eDistintos caminos para descubrir\u003c\/h3\u003e\n        \u003cp\u003e\n          Combiná las piezas y probá\n          diferentes recorridos.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"benefit\"\u003e\n      \u003cdiv class=\"benefit-icon\"\u003e03\u003c\/div\u003e\n      \u003cdiv\u003e\n        \u003ch3\u003ePara disfrutar en familia\u003c\/h3\u003e\n        \u003cp\u003e\n          Un desafío para compartir\n          y resolver juntos.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n  \u003c!-- CTA --\u003e\n  \u003cdiv class=\"closing\"\u003e\n\n    \u003ch2\u003e\n      ¿Podrán encontrar\n      \u003cspan class=\"green\"\u003e\n        el camino correcto?\n      \u003c\/span\u003e\n    \u003c\/h2\u003e\n\n    \u003cp\u003e\n      Un juego para descubrir, probar\n      y disfrutar cada desafío.\n    \u003c\/p\u003e\n\n    \u003cdiv class=\"cta-wrap\"\u003e\n\n      \u003cbutton type=\"button\" class=\"cart-btn\" id=\"mg3121-add\"\u003e\n        \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.7 13.4a2 2 0 0 0 2 1.6h9.7a2 2 0 0 0 2-1.6L23 6H6\"\u003e\u003c\/path\u003e\n        \u003c\/svg\u003e\n\n        \u003cspan id=\"mg3121-btn-text\"\u003e\n          Agregar al carrito\n        \u003c\/span\u003e\n\n        \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=\"m12 5 7 7-7 7\"\u003e\u003c\/path\u003e\n        \u003c\/svg\u003e\n      \u003c\/button\u003e\n\n      \u003cdiv class=\"cart-status\" id=\"mg3121-status\" role=\"status\" aria-live=\"polite\"\u003e\u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n\u003c\/section\u003e\n\n\u003cscript\u003e\n(function(){\n  \"use strict\";\n\n  function initMG3121(){\n    const root=document.getElementById(\"mg3121\");\n    if(!root||root.dataset.ready===\"1\")return;\n    root.dataset.ready=\"1\";\n\n    const btn=root.querySelector(\"#mg3121-add\");\n    const label=root.querySelector(\"#mg3121-btn-text\");\n    const status=root.querySelector(\"#mg3121-status\");\n    const video=root.querySelector(\"video\");\n    let busy=false;\n\n    \/* VIDEO *\/\n    if(video){\n      video.muted=true;\n      video.defaultMuted=true;\n\n      if(\"IntersectionObserver\" in window){\n        const observer=new IntersectionObserver(\n          function(entries){\n            entries.forEach(function(entry){\n              if(entry.isIntersecting){\n                video.play().catch(function(){});\n              }else{\n                video.pause();\n              }\n            });\n          },\n          {threshold:0.1}\n        );\n        observer.observe(video);\n      }else{\n        video.play().catch(function(){});\n      }\n    }\n\n    function message(txt,error){\n      status.textContent=txt;\n      status.style.color=error?\"#B43B3B\":\"#087E55\";\n    }\n\n    function getForm(){\n      return Array.from(\n        document.querySelectorAll('form[action*=\"\/cart\/add\"]')\n      ).find(function(form){\n        return form.querySelector('[name=\"id\"]');\n      })||null;\n    }\n\n    function shopRoot(){\n      return window.Shopify?.routes?.root||\"\/\";\n    }\n\n    async function refreshCart(){\n      const response=await fetch(shopRoot()+\"cart.js\",{\n        credentials:\"same-origin\"\n      });\n      if(!response.ok)return;\n\n      const cart=await response.json();\n\n      document.querySelectorAll(\n        \".cart-count-bubble span[aria-hidden],\"+\n        \"[data-cart-count],.cart-count\"\n      ).forEach(function(el){\n        el.textContent=cart.item_count;\n      });\n\n      document.dispatchEvent(\n        new CustomEvent(\"cart:updated\",{\n          detail:{cart:cart}\n        })\n      );\n\n      document.dispatchEvent(\n        new CustomEvent(\"cart:refresh\",{\n          detail:{cart:cart}\n        })\n      );\n    }\n\n    function openDrawer(){\n      const drawer=document.querySelector(\"cart-drawer\");\n\n      if(drawer\u0026\u0026typeof drawer.open===\"function\"){\n        drawer.open();\n        return;\n      }\n\n      const trigger=document.querySelector(\n        '[aria-controls=\"CartDrawer\"]'\n      );\n\n      if(trigger)trigger.click();\n    }\n\n    btn.addEventListener(\"click\",async function(){\n      if(busy)return;\n\n      const form=getForm();\n\n      if(!form){\n        message(\"No se encontró el formulario de compra.\",true);\n        return;\n      }\n\n      const id=String(\n        form.querySelector('[name=\"id\"]')?.value||\"\"\n      ).trim();\n\n      if(!\/^\\d+$\/.test(id)){\n        message(\"Seleccioná una variante válida.\",true);\n        return;\n      }\n\n      busy=true;\n      btn.disabled=true;\n      label.textContent=\"Agregando...\";\n      message(\"\",false);\n\n      try{\n        const data=new FormData(form);\n        data.set(\"id\",id);\n\n        const qty=Number(data.get(\"quantity\")||1);\n        if(!Number.isInteger(qty)||qty\u003c1){\n          data.set(\"quantity\",\"1\");\n        }\n\n        data.delete(\"sections\");\n        data.delete(\"sections_url\");\n\n        const drawer=document.querySelector(\"cart-drawer\");\n\n        if(\n          drawer\u0026\u0026\n          typeof drawer.getSectionsToRender===\"function\"\n        ){\n          const sections=drawer.getSectionsToRender()\n            .map(function(section){\n              return section.id;\n            });\n\n          if(sections.length){\n            data.set(\"sections\",sections.join(\",\"));\n            data.set(\"sections_url\",location.pathname);\n          }\n        }\n\n        const response=await fetch(\n          shopRoot()+\"cart\/add.js\",\n          {\n            method:\"POST\",\n            body:data,\n            credentials:\"same-origin\",\n            headers:{\"Accept\":\"application\/json\"}\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        label.textContent=\"Agregado correctamente\";\n        message(\"Producto agregado al carrito.\",false);\n\n        let rendered=false;\n\n        if(\n          drawer\u0026\u0026\n          typeof drawer.renderContents===\"function\"\u0026\u0026\n          result.sections\n        ){\n          drawer.renderContents(result);\n          rendered=true;\n        }\n\n        try{\n          await refreshCart();\n        }catch(e){}\n\n        if(!rendered){\n          openDrawer();\n        }\n\n      }catch(error){\n        label.textContent=\"No se pudo agregar\";\n        message(error.message||\"Ocurrió un error.\",true);\n      }finally{\n        setTimeout(function(){\n          busy=false;\n          btn.disabled=false;\n          label.textContent=\"Agregar al carrito\";\n        },1700);\n      }\n    });\n  }\n\n  if(document.readyState===\"loading\"){\n    document.addEventListener(\n      \"DOMContentLoaded\",\n      initMG3121,\n      {once:true}\n    );\n  }else{\n    initMG3121();\n  }\n})();\n\u003c\/script\u003e\n","brand":"Clara (Yiwu Mayhome Import\u0026export Co.,ltd) (0.0 Unidades - 243,90 $)","offers":[{"title":"Default Title","offer_id":67951843180858,"sku":"3121-0","price":1490.0,"currency_code":"UYU","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0758\/3698\/1562\/files\/Portada_d30a83e8-8095-48f5-ac55-b5ed1f76c5b6.png?v=1794496180","url":"https:\/\/milgenialuruguay.com\/products\/pista-de-encastre-armable-para-ninos","provider":"MilGenial Uruguay","version":"1.0","type":"link"}