{"product_id":"papel-prueba","title":"papel prueba","description":"\u003cstyle\u003e\n.gd-calc{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;width:100%;padding:20px;border:1px solid #e8e8e8;border-radius:6px;background:#fafafa;color:#333;margin-bottom:24px;box-sizing:border-box}\n.gd-calc h3{margin:0 0 15px;font-size:14px;text-transform:uppercase;letter-spacing:1px}\n.gd-calc .gd-f{margin-bottom:15px}\n.gd-calc .gd-f label{display:block;font-size:12px;margin-bottom:5px;font-weight:bold}\n.gd-calc select,.gd-calc input[type=text]{width:100%;padding:10px;border:1px solid #ccc;border-radius:4px;font-size:14px;background:#fff;box-sizing:border-box}\n.gd-calc .gd-hint{font-size:11px;color:#666;margin:0 0 10px}\n.gd-calc .gd-row{display:flex;gap:15px}\n.gd-calc .gd-row\u003ediv{flex:1}\n.gd-calc .gd-area{font-size:13px;color:#555;background:#fff;padding:12px;border-radius:4px;border:1px dashed #ccc;margin-top:15px}\n.gd-calc .gd-line{display:flex;justify-content:space-between;margin-bottom:6px}\n.gd-calc .gd-line:last-child{margin-bottom:0}\n.gd-calc .gd-nota{font-size:11px;color:#157347;margin:8px 0 0;padding-top:8px;border-top:1px solid #f0f0f0;line-height:1.4}\n.gd-calc .gd-total{margin-top:15px;padding-top:15px;border-top:2px solid #e8e8e8;font-size:18px;font-weight:bold;display:flex;justify-content:space-between}\n.gd-calc .gd-ship{font-size:12px;text-align:center;margin-top:10px;padding:8px;border-radius:4px;font-weight:500;background:#fff3cd;color:#856404}\n.gd-calc .gd-ship.ok{background:#d4edda;color:#155724}\n.gd-calc .gd-err{color:#dc3545;font-size:12px;font-weight:bold;margin-top:5px;display:none}\n.gd-calc .gd-muestra{display:block;width:100%;box-sizing:border-box;margin-top:12px;padding:12px;text-align:center;text-decoration:none;border:1px solid #333;border-radius:4px;background:#fff;color:#333;font-size:13px;font-weight:bold;letter-spacing:.5px}\n.gd-calc .gd-muestra:hover{background:#333;color:#fff}\n.gd-calc .gd-wsp{display:block;text-align:center;margin-top:12px;padding:10px;border-radius:4px;background:#eaf7ee;color:#157347;font-size:12px;text-decoration:none;font-weight:500}\n.gd-calc .gd-wsp:hover{background:#d9f0e0}\n.gd-calc ul.gd-sen{list-style:none;margin:15px 0 0;padding:15px 0 0;border-top:1px solid #e8e8e8;font-size:12px;color:#555}\n.gd-calc ul.gd-sen li{margin:0 0 7px;padding:0}\n.gd-calc ul.gd-sen li:last-child{margin-bottom:0}\nproduct-info quantity-input,.product-form__quantity,.quantity-selector,.quantity__input,variant-selects,variant-radios,.product-form__input--dropdown,.product__tax,.price,.product__price,.price--large,.shopify-payment-button{display:none !important}\n\u003c\/style\u003e\n\n\u003cdiv class=\"gd-calc\" id=\"gd-calc\"\u003e\n  \u003ch3\u003eCalcula tu pedido\u003c\/h3\u003e\n\n  \u003cdiv class=\"gd-f\"\u003e\n    \u003clabel for=\"gd-material\"\u003eElige el tipo de papel\u003c\/label\u003e\n    \u003cselect id=\"gd-material\"\u003e\u003coption\u003eCargando materiales...\u003c\/option\u003e\u003c\/select\u003e\n  \u003c\/div\u003e\n\n  \u003cp class=\"gd-hint\"\u003eIngresa tus medidas (acepta comas o puntos, ej: 2,5)\u003c\/p\u003e\n\n  \u003cdiv class=\"gd-row\"\u003e\n    \u003cdiv class=\"gd-f\"\u003e\n      \u003clabel for=\"gd-ancho\"\u003eAncho (metros)\u003c\/label\u003e\n      \u003cinput type=\"text\" id=\"gd-ancho\" inputmode=\"decimal\" placeholder=\"0,00\"\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"gd-f\"\u003e\n      \u003clabel for=\"gd-alto\"\u003eAlto (metros)\u003c\/label\u003e\n      \u003cinput type=\"text\" id=\"gd-alto\" inputmode=\"decimal\" placeholder=\"0,00\"\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"gd-err\" id=\"gd-err\"\u003eLa medida debe ser mayor a 0 y menor a 20 metros.\u003c\/div\u003e\n\n  \u003cdiv class=\"gd-area\"\u003e\n    \u003cdiv class=\"gd-line\"\u003e\n\u003cspan\u003eMide tu pared\u003c\/span\u003e\u003cspan\u003e\u003cstrong id=\"gd-exacta\"\u003e0,00\u003c\/strong\u003e m²\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"gd-line\"\u003e\n\u003cspan\u003eSe cobran\u003c\/span\u003e\u003cspan\u003e\u003cstrong id=\"gd-cobrada\"\u003e0\u003c\/strong\u003e m²\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cp class=\"gd-nota\" id=\"gd-nota\"\u003eIncluimos el margen extra para el calce del diseño, sin costo adicional.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"gd-total\"\u003e\n\u003cspan\u003eTotal\u003c\/span\u003e\u003cspan id=\"gd-total\"\u003e$0\u003c\/span\u003e\n\u003c\/div\u003e\n\n  \u003cdiv class=\"gd-ship\" id=\"gd-ship\"\u003eIngresa tus medidas para cotizar\u003c\/div\u003e\n\n  \u003ca class=\"gd-muestra\" id=\"gd-muestra\" href=\"#\" target=\"_blank\" rel=\"noopener\"\u003ePedir una muestra\u003c\/a\u003e\n\n  \u003ca class=\"gd-wsp\" id=\"gd-wsp\" href=\"#\" target=\"_blank\" rel=\"noopener\"\u003e¿Dudas con las medidas? Te ayudamos por WhatsApp\u003c\/a\u003e\n\n  \u003cul class=\"gd-sen\"\u003e\n    \u003cli\u003e🚚 Despacho gratis en compras sobre $50.000\u003c\/li\u003e\n    \u003cli\u003e🕐 Te confirmamos plazo de producción y despacho antes de imprimir\u003c\/li\u003e\n    \u003cli\u003e🇨🇱 Impreso en Chile por GrafDeco\u003c\/li\u003e\n  \u003c\/ul\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n  if (window.__gdCalcListo) return;\n  window.__gdCalcListo = true;\n\n  var WSP = '56964932390';\n  var ENVIO_GRATIS = 50000;\n\n  function init(){\n    var root = document.getElementById('gd-calc');\n    if (!root) return;\n\n    var sel    = document.getElementById('gd-material');\n    var ancho  = document.getElementById('gd-ancho');\n    var alto   = document.getElementById('gd-alto');\n    var exacta = document.getElementById('gd-exacta');\n    var cobrada= document.getElementById('gd-cobrada');\n    var total  = document.getElementById('gd-total');\n    var nota   = document.getElementById('gd-nota');\n    var err    = document.getElementById('gd-err');\n    var ship   = document.getElementById('gd-ship');\n    var muestra= document.getElementById('gd-muestra');\n    var wsp    = document.getElementById('gd-wsp');\n\n    var form = null, btn = null;\n    var formularios = document.querySelectorAll('form[action*=\"\/cart\/add\"]');\n    for (var f = 0; f \u003c formularios.length; f++){\n      var posible = formularios[f].querySelector('button[name=\"add\"], button[type=\"submit\"].product-form__submit, button.add-to-cart');\n      if (posible){ form = formularios[f]; btn = posible; break; }\n    }\n\n    var fmt = new Intl.NumberFormat('es-CL',{style:'currency',currency:'CLP',minimumFractionDigits:0});\n    var producto = 'este papel mural';\n\n    \/\/ Sube la calculadora justo encima del boton de compra,\n    \/\/ sin arrastrar con ella el texto de venta de la descripcion.\n    function reubicar(){\n      if (!form) return;\n      try {\n        var cont = form.closest('.product__info-container') || form.closest('.product__info-wrapper');\n        if (!cont || cont.contains(root) === false \u0026\u0026 !cont) return;\n        var bloque = form;\n        while (bloque.parentElement \u0026\u0026 bloque.parentElement !== cont) bloque = bloque.parentElement;\n        if (bloque.parentElement === cont \u0026\u0026 bloque !== root) cont.insertBefore(root, bloque);\n      } catch(e){ \/* si el tema cambia, la calculadora se queda donde esta *\/ }\n    }\n    reubicar();\n\n    function link(msg){ return 'https:\/\/wa.me\/' + WSP + '?text=' + encodeURIComponent(msg); }\n\n    var estado = { id:null, cantidad:0, ancho:0, alto:0, material:'', exacta:'0', listo:false };\n\n    function calcular(){\n      var op = sel.options[sel.selectedIndex];\n      if (!op || !op.value){ return; }\n\n      var idVar   = op.value;\n      var precio  = parseFloat(op.getAttribute('data-precio')) || 0;\n      var material= op.getAttribute('data-nombre') || '';\n\n      muestra.href = link('Hola! Quiero pedir una muestra de ' + producto + ' en ' + material + '.');\n\n      var w = parseFloat(String(ancho.value).replace(',', '.')) || 0;\n      var h = parseFloat(String(alto.value).replace(',', '.')) || 0;\n      var ok = (w \u003e 0 \u0026\u0026 h \u003e 0 \u0026\u0026 w \u003c= 20 \u0026\u0026 h \u003c= 20);\n\n      if (!ok){\n        if (btn) btn.disabled = true;\n        err.style.display = (w \u003e 20 || h \u003e 20) ? 'block' : 'none';\n        exacta.textContent = '0,00';\n        cobrada.textContent = '0';\n        total.textContent = '$0';\n        nota.textContent = 'Incluimos el margen extra para el calce del diseño, sin costo adicional.';\n        ship.className = 'gd-ship';\n        ship.textContent = 'Ingresa tus medidas para cotizar';\n        wsp.href = link('Hola! Tengo dudas con las medidas de ' + producto + '.');\n        return;\n      }\n\n      if (btn) btn.disabled = false;\n      err.style.display = 'none';\n\n      var areaExacta = w * h;\n      var areaCobrada = Math.ceil(areaExacta);\n      var regalo = areaCobrada - areaExacta;\n      var suma = areaCobrada * precio;\n\n      exacta.textContent = areaExacta.toFixed(2).replace('.', ',');\n      cobrada.textContent = areaCobrada;\n\n      nota.textContent = regalo \u003e 0.01\n        ? 'Te sumamos ' + regalo.toFixed(2).replace('.', ',') + ' m² extra sin costo, para asegurar el calce del diseño al instalar.'\n        : 'Tus medidas calzan justo con el metraje que se cobra.';\n\n      total.textContent = fmt.format(suma);\n\n      if (suma \u003e= ENVIO_GRATIS){\n        ship.className = 'gd-ship ok';\n        ship.textContent = 'Tu pedido lleva despacho gratis';\n      } else {\n        ship.className = 'gd-ship';\n        ship.textContent = 'Suma ' + fmt.format(ENVIO_GRATIS - suma) + ' más y el despacho es gratis';\n      }\n\n      wsp.href = link('Hola! Tengo dudas con las medidas de ' + producto + '. Estoy calculando ' + w + ' m de ancho x ' + h + ' m de alto en ' + material + '.');\n\n      estado.id = idVar;\n      estado.cantidad = areaCobrada;\n      estado.ancho = w;\n      estado.alto = h;\n      estado.material = material;\n      estado.exacta = areaExacta.toFixed(2);\n      estado.listo = true;\n    }\n\n    function agregar(){\n      if (!estado.listo || !estado.id || estado.cantidad \u003c 1) return;\n      var etiqueta = btn ? btn.innerHTML : '';\n      if (btn){ btn.disabled = true; btn.innerHTML = 'Agregando...'; }\n\n      fetch('\/cart\/add.js', {\n        method: 'POST',\n        headers: {'Content-Type':'application\/json','Accept':'application\/json'},\n        body: JSON.stringify({ items: [{\n          id: parseInt(estado.id, 10),\n          quantity: estado.cantidad,\n          properties: {\n            'Ancho (m)': estado.ancho,\n            'Alto (m)': estado.alto,\n            'Área original (m2)': estado.exacta,\n            'Material': estado.material\n          }\n        }]})\n      })\n      .then(function(r){\n        return r.json().then(function(j){\n          if (!r.ok) throw new Error(j.description || 'No se pudo agregar');\n          return j;\n        });\n      })\n      .then(function(){ window.location.href = '\/cart'; })\n      .catch(function(){\n        if (btn){ btn.disabled = false; btn.innerHTML = etiqueta; }\n        ship.className = 'gd-ship';\n        ship.textContent = 'No pudimos agregar el pedido. Escríbenos por WhatsApp y lo tomamos.';\n      });\n    }\n\n    document.addEventListener('click', function(e){\n      var b = (e.target \u0026\u0026 e.target.closest) ? e.target.closest('button[name=\"add\"], button.product-form__submit, button.add-to-cart') : null;\n      if (!b) return;\n      if (!b.closest('form[action*=\"\/cart\/add\"]')) return;\n      e.preventDefault();\n      e.stopPropagation();\n      btn = b;\n      agregar();\n    }, true);\n\n    document.addEventListener('submit', function(e){\n      var f = e.target;\n      if (!f || !f.matches || !f.matches('form[action*=\"\/cart\/add\"]')) return;\n      e.preventDefault();\n      e.stopPropagation();\n      agregar();\n    }, true);\n\n    function fallar(){\n      sel.innerHTML = '\u003coption value=\"\"\u003eNo pudimos cargar los materiales\u003c\/option\u003e';\n      ship.className = 'gd-ship';\n      ship.textContent = 'Escríbenos por WhatsApp y te cotizamos';\n      muestra.href = link('Hola! Quiero pedir una muestra de un papel mural.');\n      wsp.href = link('Hola! Quiero cotizar un papel mural.');\n    }\n\n    var url = window.location.pathname.split('?')[0].replace(\/\\\/$\/, '') + '.js';\n\n    fetch(url, {headers:{'Accept':'application\/json'}})\n      .then(function(r){ if(!r.ok) throw new Error('sin datos'); return r.json(); })\n      .then(function(p){\n        if (!p || !p.variants || !p.variants.length) throw new Error('sin variantes');\n        producto = p.title || producto;\n        var html = '';\n        for (var i=0;i\u003cp.variants.length;i++){\n          var v = p.variants[i];\n          var pesos = Math.round(v.price \/ 100);\n          html += '\u003coption value=\"' + v.id + '\"'\n                + ' data-precio=\"' + pesos + '\"'\n                + ' data-nombre=\"' + String(v.title).replace(\/\"\/g,'\u0026quot;') + '\"\u003e'\n                + v.title + ' — ' + fmt.format(pesos) + ' m²'\n                + '\u003c\/option\u003e';\n        }\n        sel.innerHTML = html;\n        sel.addEventListener('change', calcular);\n        ancho.addEventListener('input', calcular);\n        alto.addEventListener('input', calcular);\n        calcular();\n      })\n      .catch(fallar);\n  }\n\n  if (document.readyState === 'loading'){\n    document.addEventListener('DOMContentLoaded', function(){ setTimeout(init, 400); });\n  } else {\n    setTimeout(init, 400);\n  }\n})();\n\u003c\/script\u003e","brand":"GrafDeco","offers":[{"title":"Papel Mural Rustic","offer_id":45748494532787,"sku":"PM69-RUS","price":17000.0,"currency_code":"CLP","in_stock":true},{"title":"Papel Mural Lino","offer_id":45748494565555,"sku":"PM69-LIN","price":17000.0,"currency_code":"CLP","in_stock":true},{"title":"Papel Mural Canva","offer_id":45748494598323,"sku":"PM69-CAN","price":17000.0,"currency_code":"CLP","in_stock":true},{"title":"Adhesivo Para Muro","offer_id":45748494631091,"sku":"PM69-ADH","price":19000.0,"currency_code":"CLP","in_stock":true}],"url":"https:\/\/grafdeco.cl\/products\/papel-prueba","provider":"GrafDeco","version":"1.0","type":"link"}