{"product_id":"iuhu-cp-frame-kit","title":"Iuhu CP Pedal Bike Frame Kit","description":"\u003cstyle\u003e\n.rte table td:first-child{color:#fff !important;font-weight:600 !important;width:40%}\n.rte table td:last-child{color:#ddd !important}\n.rte table strong{color:#fff !important}\n.rte table th{color:#fff !important}\n.rte h2{color:#fff !important}\n\u003c\/style\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3 style=\"margin: 24px 0 12px; color: #fff;\"\u003eThe Dirtlab Iuhu CP\u003c\/h3\u003e\n\u003cp style=\"color: #ddd; line-height: 1.7;\"\u003eThe Iuhu CP is our carbon enduro pedal bike platform — the same geometry, kinematics, and sizing system as the Paratu CP e-bike, but without the motor. \"Iuhu\" translates from Bunun language into \"pure joy,\" spoken as \"Yoehoe.\" That is exactly what this bike delivers on every trail.\u003c\/p\u003e\n\u003ch3 style=\"margin: 24px 0 12px; color: #fff;\"\u003eKey Specs\u003c\/h3\u003e\n\u003ctable style=\"width: 100%; border-collapse: collapse;\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #fff; font-weight: 600;\"\u003eFrame\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd;\"\u003eFull carbon monocoque — enduro-rated\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #fff; font-weight: 600;\"\u003eHead Angle\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd;\"\u003e63.0°\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #fff; font-weight: 600;\"\u003eSeat Tube Angle\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd;\"\u003e77.8°\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #fff; font-weight: 600;\"\u003eRear Travel\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd;\"\u003e145 \/ 150 \/ 160 \/ 165mm (configurable via shock stroke)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #fff; font-weight: 600;\"\u003eFork Compatibility\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd;\"\u003e150 – 180mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #fff; font-weight: 600;\"\u003eWheel Setup\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd;\"\u003e29\" F\u0026amp;R or 29\/27.5 mullet (flip chip)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #fff; font-weight: 600;\"\u003eBottom Bracket\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd;\"\u003eT47 89.5mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #fff; font-weight: 600;\"\u003eSizing\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd;\"\u003eS \/ M \/ L + RA headset (0, -5, +5mm reach adjust)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #fff; font-weight: 600;\"\u003eRear Axle\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd;\"\u003e148x12 Boost, UDH \/ T-Type compatible\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #fff; font-weight: 600;\"\u003eWarranty\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd;\"\u003e5-year frame warranty (original owner)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; color: #fff; font-weight: 600;\"\u003eShipping\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; color: #ddd;\"\u003eFree worldwide DDP — no duties on arrival\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003ch3 style=\"margin: 24px 0 12px; color: #fff;\"\u003eDIRTLAB Formula\u003c\/h3\u003e\n\u003cdiv style=\"display: grid; grid-template-columns: repeat(auto-fill,minmax(280px,1fr)); gap: 16px; margin: 0 0 24px;\"\u003e\n\u003cdiv style=\"background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; padding: 20px 24px;\"\u003e\n\u003ch4 style=\"margin: 0 0 8px; font-size: 1em;\"\u003e\u003ca href=\"\/pages\/g-volve-geometry-cp\" style=\"color: #fff; text-decoration: none;\"\u003eG-Volve Geometry\u003c\/a\u003e\u003c\/h4\u003e\n\u003cp style=\"margin: 0 0 10px; font-size: 0.88em; color: #aaa;\"\u003eLong, not too low, and slack. 63.0° head angle paired with a 77.8° seat tube angle for stability at speed without sacrificing climbing.\u003c\/p\u003e\n\u003cp style=\"margin: 0;\"\u003e\u003ca href=\"\/pages\/g-volve-geometry-cp\" style=\"color: #8cb4ff; font-size: 0.85em;\"\u003eLearn More →\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; padding: 20px 24px;\"\u003e\n\u003ch4 style=\"margin: 0 0 8px; font-size: 1em;\"\u003e\u003ca href=\"\/pages\/k-volve-kinematics\" style=\"color: #fff; text-decoration: none;\"\u003eK-Volve Kinematics\u003c\/a\u003e\u003c\/h4\u003e\n\u003cp style=\"margin: 0 0 10px; font-size: 0.88em; color: #aaa;\"\u003eConcentric pivot design eliminates brake chatter and delivers the bottomless feel Dirtlab is known for. Flip chip for 29\/29 or 29\/27.5 mullet.\u003c\/p\u003e\n\u003cp style=\"margin: 0;\"\u003e\u003ca href=\"\/pages\/k-volve-kinematics\" style=\"color: #8cb4ff; font-size: 0.85em;\"\u003eLearn More →\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; padding: 20px 24px;\"\u003e\n\u003ch4 style=\"margin: 0 0 8px; font-size: 1em;\"\u003e\u003ca href=\"\/pages\/s-volve-sizing-cp\" style=\"color: #fff; text-decoration: none;\"\u003eS-Volve Sizing\u003c\/a\u003e\u003c\/h4\u003e\n\u003cp style=\"margin: 0 0 10px; font-size: 0.88em; color: #aaa;\"\u003eRA headset gives +\/-5mm reach adjustment. Between sizes? Start long on the smaller or short on the larger. Every rider finds their sweet spot.\u003c\/p\u003e\n\u003cp style=\"margin: 0;\"\u003e\u003ca href=\"\/pages\/s-volve-sizing-cp\" style=\"color: #8cb4ff; font-size: 0.85em;\"\u003eLearn More →\u003c\/a\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch3 style=\"margin: 24px 0 12px; color: #fff;\"\u003eFrame Includes\u003c\/h3\u003e\n\u003cul style=\"list-style: none; padding: 0; margin: 0 0 24px;\"\u003e\n\u003cli style=\"padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd; font-size: 0.95em;\"\u003eFull carbon frame with concentric pivot rear linkage\u003c\/li\u003e\n\u003cli style=\"padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd; font-size: 0.95em;\"\u003eRA (Reach Adjust) headset\u003c\/li\u003e\n\u003cli style=\"padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd; font-size: 0.95em;\"\u003eSeatpost clamp\u003c\/li\u003e\n\u003cli style=\"padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd; font-size: 0.95em;\"\u003eDerailleur hanger (UDH compatible)\u003c\/li\u003e\n\u003cli style=\"padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd; font-size: 0.95em;\"\u003eAll pivot hardware and bearings\u003c\/li\u003e\n\u003cli style=\"padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.08); color: #ddd; font-size: 0.95em;\"\u003eFlip chip (low \/ high position)\u003c\/li\u003e\n\u003cli style=\"padding: 8px 0; color: #ddd; font-size: 0.95em;\"\u003eIntegrated DT storage space with removable cover\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3 style=\"margin: 24px 0 12px; color: #fff;\"\u003eGeometry\u003c\/h3\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0280\/8646\/8687\/files\/Iuhu_CP_165R_170F_29_F_R_250402_-_1.png?v=1760492518\" alt=\"Iuhu CP Geometry Chart\"\u003e\u003c\/p\u003e\n\u003ch3 style=\"margin: 24px 0 12px; color: #fff;\"\u003eColor Customization\u003c\/h3\u003e\n\u003cp style=\"color: #ddd; font-size: 0.95em;\"\u003eChoose any Pantone color for a fully personalized bike. Lead time: 5 weeks for stocked frames. Custom paint is an upcharge on the standard frame price.\u003c\/p\u003e\n\u003cdiv style=\"margin: 24px 0; padding: 24px; background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; text-align: center;\"\u003e\n\u003cp style=\"margin: 0 0 12px; font-weight: 600; color: #fff;\"\u003eNeed More Info?\u003c\/p\u003e\n\u003cp style=\"margin: 0; color: #aaa; font-size: 0.92em;\"\u003eWe offer free one-on-one video consultations. Email \u003ca href=\"mailto:sales@bikelab-inc.com\" style=\"color: #8cb4ff; text-decoration: none;\"\u003esales@bikelab-inc.com\u003c\/a\u003e and we will help you spec the right build.\u003c\/p\u003e\n\u003c\/div\u003e\n\n\u003csection class=\"dl-bundle-widget\" style=\"background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.1);border-radius:10px;padding:28px;margin:36px 0;color:#e8e8e8;\"\u003e\n  \u003cdiv style=\"font-size:12px;letter-spacing:2px;text-transform:uppercase;color:#a8ff3e;margin-bottom:6px;\"\u003eOptional add-ons\u003c\/div\u003e\n  \u003ch3 style=\"color:#fff;margin:0 0 6px 0;font-size:22px;\"\u003eComplete your frameset\u003c\/h3\u003e\n  \u003cp style=\"color:#aaa;margin:0 0 24px 0;font-size:13px;line-height:1.6;\"\u003eAdd a matched fork and shock from our suspension partners. Frame stays at listed price; suspension at bundle pricing.\u003c\/p\u003e\n\n  \u003cdiv style=\"display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-bottom:24px;\"\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:block;font-size:11px;letter-spacing:1px;text-transform:uppercase;color:#aaa;margin-bottom:8px;\"\u003eFork\u003c\/label\u003e\n      \n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003clabel style=\"display:block;font-size:11px;letter-spacing:1px;text-transform:uppercase;color:#aaa;margin-bottom:8px;\"\u003eShock\u003c\/label\u003e\n      \n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv id=\"dl-bundle-summary\" style=\"padding:20px;background:rgba(168,255,62,0.05);border:1px solid rgba(168,255,62,0.15);border-radius:8px;margin-bottom:20px;\"\u003e\n    \u003cdiv id=\"dl-bundle-summary-lines\" style=\"color:#ddd;font-size:13px;line-height:2;\"\u003e\u003c\/div\u003e\n    \u003cdiv style=\"margin-top:16px;padding-top:16px;border-top:1px solid rgba(255,255,255,0.1);display:flex;justify-content:space-between;align-items:baseline;\"\u003e\n      \u003cspan style=\"color:#fff;font-size:13px;letter-spacing:1px;text-transform:uppercase;\"\u003eBundle total\u003c\/span\u003e\n      \u003cspan id=\"dl-bundle-total\" style=\"color:#a8ff3e;font-size:26px;font-weight:700;\"\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cbutton id=\"dl-bundle-addcart\" onclick=\"dlBundleAddToCart()\" style=\"width:100%;background:#a8ff3e;color:#000;padding:16px;border-radius:6px;font-weight:700;font-size:15px;border:0;cursor:pointer;letter-spacing:.5px;\"\u003eAdd bundle to cart →\u003c\/button\u003e\n  \u003cdiv id=\"dl-bundle-msg\" style=\"margin-top:12px;font-size:12px;color:#aaa;text-align:center;min-height:20px;\"\u003e\u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003cscript\u003e\n(function(){\n  var MULT = 0.85;  \/\/ single global bundle multiplier (15% off on suspension)\n  var FRAME_USD = 2890;\n  var FRAME_EUR = 2627;\n\n  function detectCurrency(){\n    try {\n      return (window.Shopify \u0026\u0026 window.Shopify.currency \u0026\u0026 window.Shopify.currency.active) || 'USD';\n    } catch(e) { return 'USD'; }\n  }\n\n  var CURRENCY = detectCurrency();\n\n  function fmt(n){\n    if (CURRENCY === 'EUR') return '\\u20ac' + Math.round(n).toLocaleString();\n    if (CURRENCY === 'GBP') return '\\u00a3' + Math.round(n).toLocaleString();\n    return '$' + Math.round(n).toLocaleString();\n  }\n\n  function getVal(sel, k){\n    if (!sel || !sel.value) return 0;\n    var opt = sel.options[sel.selectedIndex];\n    return parseFloat(opt.dataset[k]) || 0;\n  }\n\n  function getFrameVariantId(){\n    var v = document.querySelector('input[name=\"id\"]');\n    if (v \u0026\u0026 v.value) return parseInt(v.value, 10);\n    v = document.querySelector('select[name=\"id\"]');\n    if (v \u0026\u0026 v.value) return parseInt(v.value, 10);\n    var m = (window.location.search || '').match(\/[?\u0026]variant=(\\d+)\/);\n    if (m) return parseInt(m[1], 10);\n    return null;\n  }\n\n  window.dlBundleRecalc = function(){\n    var forkSel = document.getElementById('dl-bundle-fork');\n    var shockSel = document.getElementById('dl-bundle-shock');\n\n    var forkPrice = CURRENCY === 'EUR' ? getVal(forkSel, 'eur') : getVal(forkSel, 'usd');\n    var shockPrice = CURRENCY === 'EUR' ? getVal(shockSel, 'eur') : getVal(shockSel, 'usd');\n    var framePrice = CURRENCY === 'EUR' ? FRAME_EUR : FRAME_USD;\n\n    var bundle = framePrice;\n    var lines = ['\u003cspan\u003eFrame (full price):\u003c\/span\u003e\u003cspan style=\"float:right;color:#fff;\"\u003e' + fmt(framePrice) + '\u003c\/span\u003e\u003cbr\u003e'];\n\n    if (forkPrice \u003e 0){\n      var fBundle = Math.round(forkPrice * MULT);\n      bundle += fBundle;\n      lines.push('\u003cspan\u003eFork (bundle price):\u003c\/span\u003e\u003cspan style=\"float:right;color:#fff;\"\u003e' + fmt(fBundle) + '\u003c\/span\u003e\u003cbr\u003e');\n    }\n    if (shockPrice \u003e 0){\n      var sBundle = Math.round(shockPrice * MULT);\n      bundle += sBundle;\n      lines.push('\u003cspan\u003eShock (bundle price):\u003c\/span\u003e\u003cspan style=\"float:right;color:#fff;\"\u003e' + fmt(sBundle) + '\u003c\/span\u003e\u003cbr\u003e');\n    }\n\n    document.getElementById('dl-bundle-summary-lines').innerHTML = lines.join('');\n    document.getElementById('dl-bundle-total').textContent = fmt(bundle);\n  };\n\n  window.dlBundleAddToCart = async function(){\n    var btn = document.getElementById('dl-bundle-addcart');\n    var msg = document.getElementById('dl-bundle-msg');\n    btn.disabled = true;\n    btn.textContent = 'Adding to cart\\u2026';\n    msg.style.color = '#aaa';\n    msg.textContent = '';\n\n    try {\n      var frameId = getFrameVariantId();\n      if (!frameId){\n        msg.style.color = '#ff6b6b';\n        msg.textContent = 'Could not detect frame variant. Please pick a size first.';\n        btn.disabled = false;\n        btn.textContent = 'Add bundle to cart \\u2192';\n        return;\n      }\n      var forkSel = document.getElementById('dl-bundle-fork');\n      var shockSel = document.getElementById('dl-bundle-shock');\n      var itemIds = [frameId];\n      if (forkSel \u0026\u0026 forkSel.value) itemIds.push(parseInt(forkSel.value, 10));\n      if (shockSel \u0026\u0026 shockSel.value) itemIds.push(parseInt(shockSel.value, 10));\n\n      for (var i = 0; i \u003c itemIds.length; i++){\n        var r = await fetch('\/cart\/add.js', {\n          method: 'POST',\n          headers: {'Content-Type': 'application\/json', 'Accept': 'application\/json'},\n          body: JSON.stringify({id: itemIds[i], quantity: 1})\n        });\n        if (!r.ok){\n          var err = await r.json().catch(function(){ return {description: 'Unknown error'}; });\n          throw new Error(err.description || ('HTTP ' + r.status));\n        }\n      }\n      window.location = '\/cart';\n    } catch (e){\n      msg.style.color = '#ff6b6b';\n      msg.textContent = 'Could not add bundle: ' + e.message;\n      btn.disabled = false;\n      btn.textContent = 'Add bundle to cart \\u2192';\n    }\n  };\n\n  if (document.readyState === 'loading'){\n    document.addEventListener('DOMContentLoaded', window.dlBundleRecalc);\n  } else {\n    window.dlBundleRecalc();\n  }\n})();\n\u003c\/script\u003e\n\u003c!-- \/dl-bundle-widget 260422v4 --\u003e\n","brand":"Dirtlab","offers":[{"title":"S","offer_id":45642148446287,"sku":"DL-IUHUCP-S","price":3179.0,"currency_code":"USD","in_stock":true},{"title":"M","offer_id":45642148479055,"sku":"DL-IUHUCP-M","price":3179.0,"currency_code":"USD","in_stock":true},{"title":"L","offer_id":45642148511823,"sku":"DL-IUHUCP-L","price":3179.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0280\/8646\/8687\/files\/iuhu-cp-gloss-black-frame-only-08.jpg?v=1779379520","url":"https:\/\/bikelab-inc.com\/products\/iuhu-cp-frame-kit","provider":"bikelab-inc","version":"1.0","type":"link"}