{"title":"Huntsman","description":"\u003cp\u003eNo Huntsman boards currently in stock. \u003ca href=\"\/pages\/custom\"\u003eOrder a custom →\u003c\/a\u003e\u003c\/p\u003e","products":[{"product_id":"huntsman","title":"Huntsman","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=6a47116b3d8edf8849cd981d\u0026v=1785013831259\u0026app_id=6a026ac871b32618c4472776\";\n  var DRAFT_ORDER_URL = \"https:\/\/sales.shapersportal.app\/functions\/createDraftOrder\";\n  var SHAPE_ID = \"6a47116b3d8edf8849cd981d\";\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":"Christenson Surfboards","offers":[{"title":"Default Title","offer_id":45567696207919,"sku":null,"price":0.0,"currency_code":"USD","in_stock":true}]},{"product_id":"used-72-huntsman","title":"USED 7'2 Huntsman","description":"\u003cp class=\"\" data-rte-preserve-empty=\"true\"\u003e7'2 x 21 x 2 7\/8\u003cbr\u003eOil Tint \u003c\/p\u003e\n\u003cp class=\"\" data-rte-preserve-empty=\"true\"\u003e\u003cstrong\u003eAll sales are final.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp class=\"\" data-rte-preserve-empty=\"true\"\u003eIf you require us to ship the board to you we will need to calculate the freight after purchase of the board. This will need to be paid for before the board leaves us here. Thanks!\u003c\/p\u003e","brand":"Christenson Surfboards","offers":[{"title":"Default Title","offer_id":45661869637679,"sku":null,"price":600.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0770\/9596\/0623\/files\/IMG_0732.jpg?v=1784843866"}],"url":"https:\/\/christensonsurfboards.com\/collections\/huntsman.oembed","provider":"Christenson Surfboards","version":"1.0","type":"link"}