{"product_id":"volaris-mid-1","title":"Volaris Mid","description":"\u003cdiv id=\"ff-configurator-wrapper\" style=\"width:100vw;position:relative;left:50%;right:50%;margin-left:-50vw;margin-right:-50vw;max-width:100vw;overflow:visible;\"\u003e\n  \u003ciframe id=\"ff-configurator\" style=\"width:100%;height:900px;min-height:600px;border:none;border-radius:0;display:block;overflow:hidden;\" frameborder=\"0\" scrolling=\"no\" title=\"Board Configurator\"\u003e\u003c\/iframe\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n(function(){\n  var CONFIGURATOR_URL = \"https:\/\/sales.shapersportal.app\/configurator?shape_id=6a50d3923e199c89cb0fccdd\u0026v=1784620667579\u0026app_id=6a026ac871b32618c4472776\";\n  var DRAFT_ORDER_URL = \"https:\/\/sales.shapersportal.app\/functions\/createDraftOrder\";\n  var SHAPE_ID = \"6a50d3923e199c89cb0fccdd\";\n  var submitting = false;\n\n  \/\/ Un-clip only ancestors that actually CLIP the iframe (overflow hidden\/clip\n  \/\/ or a max-height). NEVER touch scrollable containers (overflow auto\/scroll)\n  \/\/ — some themes (e.g. Horizon) scroll the page through an inner wrapper, and\n  \/\/ forcing it to overflow:visible kills page scrolling entirely.\n  function clearClipping(f){\n    var p = f.parentElement;\n    while (p \u0026\u0026 p !== document.body){\n      var cs = window.getComputedStyle(p);\n      var oy = cs.overflowY;\n      if (oy === 'hidden' || oy === 'clip'){\n        p.style.overflow = 'visible';\n        p.style.maxHeight = 'none';\n        p.style.height = 'auto';\n      } else if (cs.maxHeight !== 'none'){\n        p.style.maxHeight = 'none';\n      }\n      p = p.parentElement;\n    }\n  }\n\n  \/\/ Resolve the buyer's SELECTED country from Shopify's storefront (the\n  \/\/ currency\/country dropdown), so the configurator prices for the country the\n  \/\/ buyer picked rather than their geo-IP. Shopify exposes the active country\n  \/\/ on window.Shopify.country (ISO-2). Fall back to nothing → the configurator\n  \/\/ uses geo-IP. Append it as a ?country= param on the iframe src.\n  function buyerCountry(){\n    try { if (window.Shopify \u0026\u0026 window.Shopify.country) return String(window.Shopify.country).toUpperCase(); } catch(e){}\n    return '';\n  }\n  (function(){\n    var f = document.getElementById('ff-configurator');\n    if (f){\n      var c = buyerCountry();\n      f.src = CONFIGURATOR_URL + (c ? '\u0026country=' + encodeURIComponent(c) : '');\n    }\n  })();\n\n  window.addEventListener('message', function(event){\n    var data = event.data || {};\n    if (data.type === 'ff_add_to_cart'){\n      if (submitting) return;\n      submitting = true;\n      fetch(DRAFT_ORDER_URL, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/json', 'Accept': 'application\/json' },\n        body: JSON.stringify({\n          shape_id: SHAPE_ID,\n          config: data.config || {},\n          deposit_price: data.price,\n          total_price: data.totalPrice,\n          currency: data.currency,\n          country_code: data.country_code,\n          fin_variant_id: data.fin_variant_id,\n          fin_variant_price: data.fin_variant_price\n        })\n      }).then(function(r){\n        return r.json().then(function(body){ return { ok: r.ok, body: body }; });\n      }).then(function(res){\n        submitting = false;\n        if (!res.ok || !res.body || !res.body.invoice_url){\n          throw new Error((res.body \u0026\u0026 res.body.error) || 'Could not start checkout');\n        }\n        window.top.location.href = res.body.invoice_url;\n      }).catch(function(err){\n        submitting = false;\n        alert(err.message || 'Could not start checkout. Please try again.');\n      });\n    }\n    if (data.type === 'ff_resize'){\n      var f = document.getElementById('ff-configurator');\n      if (f \u0026\u0026 data.height){\n        f.style.height = data.height + 'px';\n        f.style.minHeight = data.height + 'px';\n        clearClipping(f);\n      }\n    }\n  });\n\n  \/\/ Clear any inherited clipping on the wrapper chain immediately on load, so a\n  \/\/ theme that ships its description area as overflow-hidden doesn't trap the\n  \/\/ iframe before the first resize message lands.\n  (function(){\n    var f = document.getElementById('ff-configurator');\n    if (f) clearClipping(f);\n  })();\n})();\n\u003c\/script\u003e","brand":"Verdure Surf","offers":[{"title":"Default Title","offer_id":46219420303496,"sku":null,"price":0.0,"currency_code":"NZD","in_stock":true}],"url":"https:\/\/www.flexframe.tech\/products\/volaris-mid-1","provider":"Verdure Surf","version":"1.0","type":"link"}