MY25__Checkpoint_SL_Lifestyle_RD-NA-DR-57760_1.jpg
United Kingdom (GBP£)

United States (GBP£)
Vatican City (EUR€)
  • Open image lightbox
  • Close
  • Ridgeback
  • Kona
Surly
  • tockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-collection.js' window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-product-bis.js' window._RestockRocketConfig.scriptUrlCollectionBis = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-collection-bis.js' window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) // Canary override (STOQ-1287): prefer the Render host emitted into the // metafield-cached settings (api_host) when present, mirroring the same // override in assets/js/api.js. cachedSettings is populated above. Falls // back to the build-baked host for shops without the use_render_api_host // toggle (or e
    <<<
    che age if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); window._RestockRocketConfig.isLiquidCacheFresh = true; window._RestockRocketConfig.liquidCacheAge = null; } else { const now = Math.floor(Date.now() / 1000); // Current time in seconds const liquidCacheAge = now - liquidRenderedAt; // Age in seconds // Surfaced into funnel events: a stale cache means the app rendered with // outdated inventory/selling-plan data — a real "had the opportunity but // failed" cause. Negative (client clock ahead) clamps to 0. window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge); // Handle client clock ahead of server if (liquidCacheAge
    0) { console.debug(`STOQ - Client clock appears ahead of server by ${Math.abs(Math.round(liquidCacheAge / 60))} minutes, assuming cache fresh`); window._RestockRocketConfig.isLiquidCacheFresh = true; } else if (liquidCacheAge = LIQUID_CACHE_MAX_AGE) { console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`); window._RestockRocketConfig.isLiquidCacheFresh = true; } else { console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`); window._RestockRocketConfig.isLiquidCacheFresh = false; } } function checkSettingsExpiry(settings) { try { if (!settings || !settings.updated_at) { console.debug('STOQ - Invalid settings data structure'); return null; } if (!settings.cache) { console.debug('STOQ - settings caching disabled'); return null; } // Check if translations are enabled but missing from cache // This handles the backfill period where DB has translations but metafield doesn't if (settings.multi_language_enabled) { if (!settings.translations) { // Translations enabled but no age = Date.now() - updatedAt.getTime(); if (age
    SETTINGS_CACHE_DURATION) { console.debug('STOQ - settings changed recently, skipping cache'); return null; } return settings; } catch (error) { console.debug('STOQ - Error checking settings cache:', error); return null; } } function createRestockRocketContainer() { const restockRocketContainer = document.createElement('div'); restockRocketContainer.id = 'restock-rocket'; document.body.appendChild(restockRocketContainer); } function createRestockRocketScript(scriptUrl) { const restockRocketScriptElement = document.createElement('script'); restockRocketScriptElement.setAttribute('defer', 'defer'); restockRocketScriptElement.src = scriptUrl; document.body.appendChild(restockRocketScriptElement); } createRestockRocketContainer() console.debug('STOQ - extension activated') // Fire stoq_initialized once per page load so the funnel pipeline has a definitive // "our code ran on this page" signal independent of any cus
    ctedVariantId || '', liquid_rendered_at: _stoqInitConfig.liquidRenderedAt || 0, app_version: _stoqInitConfig.appVersion || '', liquid_cache_age: _stoqInitConfig.liquidCacheAge, // Selected variant's stock posture as our app saw it at render — explains // whether we *should* have treated it as a preorder candidate. inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '', inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId], }); } catch (e) { console.debug('STOQ - stoq_initialized publish failed:', e); } // STOQ-1595: publish stoq_accelerated_checkout_clicked for every accelerated-checkout // click (Buy Now / dynamic checkout / Shop Pay installments) on ALL surfaces, before our // bundle loads, via one delegated capture-phase listener (catches late-rendered buttons). // Only on shops with preorders configured (shared `preordersConfigured` signal from the // derivatist('form'); var vidEl = form && form.querySelector('[name="id"]'); var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || ''; // The enabled STOQ selling plan the clicked variant belongs to (if any), found once and // reused for in_enabled_plan / enrolled_plan_id / enrolled_plan_provider below. var _sqVidNum = Number(variantId); var _sqPlan = null; // Array.isArray guard (not `|| []`) so a truthy non-array sellingPlans can't throw and // silently drop the whole publish. var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : []; _sqPlans.forEach(function (pl) { if (!_sqPlan && pl && pl.enabled && Array.isArray(pl.variant_ids) && pl.variant_ids.indexOf(_sqVidNum) !== -1) { _sqPlan = pl; } }); Shopify?.analytics?.publish?.('stoq_accelerated_checkout_clicked', { variant_id: variantId, product_id: (_sqTr
    1
Sell Your Bike
  • Finance
  • Open search bar
Search for products on our site
  • Suggested search terms
  • About Us
  • Blog
  • Track Service Progress
    • Building Your Bike From the Box
    • Privacy Policy
    • Terms of Service
    • My Account
    • Search for products on our site
    • Contact Us
    • Track Service Progress
Privacy Policy
  • Cameroon (XAFCFA) See More
  • Amflow
  • Congo - Brazzaville (XAFCFA)
  • Singular
    • Croatia (EUR€)
    • Surly
    • Egypt (EGPج.م) See More
    • See More
    • Ethiopia (ETBBr)
    • (function(){window._cf_chl_opt = {cFPWv: 'b',cH: 'tR4ak.ewWj6f8mi73YL8v9.qspbbhT0OYEcS4l5G6PQ-1783568509-1.2.1.1-bhfHDSiasQsjiTC7n1fJK4TF6UEc7qea4huDWb2dGQvLMubgrlPfxOX41FDh1rLX',cITimeS: '1783568509',cRay: 'a18450adb98d725b',cTplB: '0',cTplC:1,cTplO:0,cTplV:5,cType: 'managed',cUPMDTk:"/collections/ridgeback/products/ridgeback-harmony?__cf_chl_tk=Mn4LjbUdfr7p0yJgu3vxpmApGAdNGIEM9kSsfyycu24-1783568509-1.0.1.1-Nwiz5QcO3h8IQJVtzLHti69_UlgRXjXkDtKU3YKlNq8",cvId: '3',cZone: 'projektride.co.uk',fa:"/collections/ridgeback/products/ridgeback-harmony?__cf_chl_f_tk=Mn4LjbUdfr7p0yJgu3vxpmApGAdNGIEM9kSsfyycu24-1783568509-1.0.1.1-Nwiz5QcO3h8IQJVtzLHti69_UlgRXjXkDtKU3YKlNq8",md: 'gb5RcwZ5QarFKpac6gcgZFyqWaE71yuDsk_jmUmaa.g-1783568509-1.2.1.1-oZ4igvLV0AHDFQwwm4mjS79RsBBw9F0dzqOUFJZaeJfBkvWxRsopA5d0ZsXZ.71hh9z8Re4yRWS2WIa.nH12uaj6VgwHl3Zb7b1N_QgNikfljWn3OHZDwRKkbmkX7jT0PP3qUZSyLZOgcg9n6vd0J9PMNvpVDoxBJtnyk6ke2.ojYYjqWmStx_RGPJGz97CoYvxlbCkFBuO4M5G89.rzb4CPcRlW3th8_Y7d7eZmRFq73QFLSTyMPQ5JiI04.N39CRJIWgXOyo2g5_ksblrrKhHlML8dzPzL8hMtGdBjWf_J2B_WSf.pcRj3H.lCB.ObpBuOHiGe8fNxg96Vfd3ZuVpCHtlaw1wbw7E4zJI7wQOlbmRFLfCQH2N9qCsypxADxb.NwwZGhgCA_Yw93nRahVvSXd0rkZYhP.4QyFOR.k9_g0dx2QZQKgeOHIempBB1i9LmHruo.rTO.nZ1tzEVnTdR8.JIVP6oYte5viQrpiTII6xyripU6A0ca_yTucg7pzclITPAhV7zwO7YVdu1dd0s6_p7ViA._6nibM5dbKIVdKaIbFzaSB7nlGsnXo4E9M7D70LP_AZdFqtp4K3.uqnOI55o1nFzhAsdVbKFkZHgJYDOxqBwmhf73rTOdc9Gl9iKxc1IcqQplrN4btWnLpPxDTm8828nPejXXQMa979ycY9cD.Ux7FzBSjiLTbCY6HwXkJptBSbnhqyKfXmxHtdVDpBW0SpqeRwo2TZv9C_fEHCWFNYXhNdNpXKW0rwS.pX8qYmR5b0jwDb4PLIFz65cm2jasYBEtVmXzCiRYMVd4vykj6Uw8ooZhBnOiYQSpcz2RBAB8mJozkOagysRyNjKuCDciYeN1DKUXT5DQzEPdZiPblRcRqc87_VCf9lmNcVd5upeu5ctMMKk_oFL.GqUp4OWGN1LRPVWhHRCByVv8p3vumw3PI9CMZorDvdXoZqenDWmpDjKuGGclTOMUEB4P7vE7UppWitd2hZ_5t4xScSwQIGR83CBjofR5fBVbfgMdqj.7yaK7oTAipPSiQba_5Ey0NuB2wr5mrSu1J1bUJ1JJwgpulCUryukftYIHiDPdDn1arNNelncos4dZatWP2SLiqtTvF9EM83JRb3ngizJFewRDwfbzB8RY_AckJyLJBSXvm185govZVQ4kWUsj23q6dn.9jS05cX30vMWVCnQRkxH0NHw92J66kGUt0EDLvA9UF5BZwb2Q1g1V_HXebi5vyJPMzekm7s_fCSgP5vwdgvPhIyFcVYA_0HC',mdrd: '2QuQfyo7ZpCqzRGFzFkrUDSAYre_EZSMZonQv5UwTzM-1783568509-1.2.1.1-eHJF_am.FDsKhxxm6joRj8PqGIsNFH3zaifk3xnetIaNXTz3alv25QnrKf2RDBJXb9DFPcyg0nVVvOr2OO_g05JIFEckuD_LZHJCwq3iaY1KEbKp9UMwbfRkoXgSy64TCq73M4sEdkBV6tWVcqLTl6Em7PdazZhTecc4jsZ289eJE8L2647749Gm37fuNPY4em55abNvfl462yJVj_KBOYXzO2fMuNj.EURRgQaiAOPFBN16zakcyIg_oewCO_9zlKUl1IqxftX_Y2Ap5IxK_3tD.McEax9eJPxpnnlcYYqRWtNaQOlkQUPwrVXqJjAWMGmdIrHfoUzFgjPqH6tK4lQXmcxrH3vrNFNFnqfppjdY9_gZAh7ByrrUTDufakq1MSjYss9t7yOd8EDeaTAPae8QbuJG4i_EqokbOEoDW48aEDZN.DywMUndlgkU6gGRpoKDVBaHUDcAsMntVoJtBoboL_qZ.8j14lBNPGUGo4fgvDBNFIKbl9k5t_leVLCoyXa2PlDtVxpn6kSXY6TBRDRfmcROfAJ6jNG.agloScjMI6m6sC.bOAS7WeQThszxoWnsVoSTju_JJTvMEvzRuaTFonPGrtHRJT9Lo16oMnM',};var a = document.createElement('script');a.src = '/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=a18450adb98d725b';window._cf_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash;window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.slice(0, location.href.length - window._cf_chl_opt.cOgUHash.length).indexOf('?') !== -1 ? '?' : location.search;if (window.history && window.history.replaceState) {var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash;history.replaceState(null, null,"/collections/ridgeback/products/ridgeback-harmony?__cf_chl_rt_tk=Mn4LjbUdfr7p0yJgu3vxpmApGAdNGIEM9kSsfyycu24-1783568509-1.0.1.1-Nwiz5QcO3h8IQJVtzLHti69_UlgRXjXkDtKU3YKlNq8"+ window._cf_chl_opt.cOgUHash);a.onload = function() {history.replaceState(null, null, ogU);}}document.getElementsByTagName('head')[0].appendChild(a);}());
    • Gabon (XOFFr)
    • Gibraltar (GBP£)
    • Guinea (GNFFr) Hope
    • Cockpit
    • Isle of Man (GBP£)
    • Headsets
    • Latvia (EUR€)
    • Lithuania (EUR€) Rear Suspension
    • Malta (EUR€)
    • Seat Posts & Clamps
    • Gears & Drivetrain
    • Monaco (EUR€)
    • Netherlands (EUR€)
Union Pay
San Marino (EUR€) S-M
Era White/Buff Beige