Our 3AL-2.5v double-butted titanium frame and full carbon fork create a faster, lighter CdF that retains the cross-terrain capacity for which the legend is famous!
945520386431,54945520419199,54945520451967,54945523532159,54945546764671,54945546797439,54945546830207,54945546928511,54945546961279,54945548042623,54945548075391,54945548108159,54945548140927,54945548173695,54945548206463,54945548239231,54945548271999,54945550336383,54945550369151,54945550401919,54945550434687,54945550467455,54945550500223,55038016422271,55196401860991,55196401893759,55196401926527,55196402647423,55196403433855,55196403466623,55196403532159,55196403564927,55196403630463,55196403663231,55196403695999,55196403728767,55196403794303,55196403827071,55196403859839,55196403892607,55196404285823,55196404318591,55196404351359,55196404384127,55196404416895,55196404449663,55196404482431,55196404515199,55196404547967,55196404580735,55196404613503,55196404646271,55196405662079,55196405694847,55196405727615,55196405760383,55196405825919,55196405858687,55196405891455,55196405924223,55196408185215,55196408217983,55196408250751,55196408283519,55196408316287,55196408349055,55196408381823,55196408414591,551964
08447359,55196409364863,55196409397631,55196409430399,55196409463167,55196409495935,55196409528703,55196409561471,55196409594239,55196409627007,55196410413439,55196410446207,55196410478975,55196410511743,55196410544511,55196410577279,55196410610047,55196410642815,55196410675583,55196411330943,55196411363711,55196411396479,55196411429247,55196411462015,55196411494783,55196411527551,55196411560319,55196411593087,55196411625855,55196411658623,55196411691391,55196412084607,55196412117375,55196412150143,55196412182911,55211128848767,55211128881535,55211128914303,55211128947071,55211128979839,55211129012607,55211129045375,55211129078143,55211129110911,55211129143679,55239586152831,55239586185599,55239586447743,55239659094399,55239659127167,55239659192703,55239659258239,55239659323775,55239683735935,55239683834239,55239703953791,55239703986559,55239704019327,55239704052095,55239704084863,55239704117631,55239704150399,55239704183167,55239704215935,55239704281471,55239704314239,55239704347007,55239714374015,5523971450551,56385205928319,56386096628095,56386096726399,56386096824703,56386097021311,56386097119615,56386097217919,56386097250687,56386097283455,56386097316223,56386097348991,56386097381759,56386097414527,56386097447295,56386097480063,56386097512831,56386097545599,56386097578367,56386097611135,56386097643903,56386097807743,56386097840511,56386097873279,56386097938815,56386098004351,56386098168191,56386098266495,56386098495871,56386098626943,56386098659711,56386098758015,56386098790783,56386098823551,56386098856319,56386098889087,56386098921855,56386098954623,56386099020159,56386099675519,56386100101503,56386100396415,56386100527487,56386100593023,56386100658559,56386101084543,56386101117311,56386101150079,56393228648831,56393228812671,56393231630719,56393231761791,56393231991167,56393232155007,56393232220543,56393232384383,56393232449919,56393232580991,56393232777599,56393232875903,56393232974207,56393233236351,56393233367423,56393233629567,56393233760639,56393234088319,56393234252159,56393234350463,56393234481535,
56393234678143,56393235759487,56393238774143,56393238872447,56393239003519,56393239789951,56393240019327,56393240150399,56430641021311,56430641054079,56430641086847,56430641119615,56430641152383,56430641185151,56479895421311,56479895454079,56479895486847,56479895519615,56479895552383,56479895585151,56479930974591,56479931007359,56479931040127,56479931072895,56479931105663,56479931138431,56490205643135,56494084981119,56494085013887,56494085046655,56494085079423,56494085112191,56494085144959,56494085177727,56494085210495,56494085243263,56494085276031,56494085308799,56494085341567,56494085374335,56494085407103,56494085439871,56494085472639,56494085505407,56494085702015,56494085767551,56494085800319,56494085833087,56494085865855,56494085898623,56494085931391,56494085964159,56494085996927,56494086160767,56494086226303,56494086291839,56494086324607,56494086357375,56494086422911,56494086455679,56494086488447,56494086553983,56494086619519,56494086652287,56494086685055,56494086783359,56494086881663,56494086914431,56494086947199,56494086979967,56494087045503,56494087078271,56494087111039,56494087143807,56494087176575,56494087209343,56494087274879,56494087340415,56494087373183,56494087405951,56494087799167,56494088356223,56494088454527,56494090289535,56504701485439,56504701518207,56504701550975,56504701583743,56504701616511,56504701649279,56504839209343,56504839242111,56504839274879,56504839307647,56504839340415,56504839373183,56504921981311,56504922014079,56504922046847,56504922079615,56504922112383,56504922145151,56504922177919,56504922210687,56504922243455,56504950489471,56504950522239,56504950555007,56504950587775,56504950620543,56504950653311,56504950686079,56504950718847,56504950751615,56504961139071,56504961171839,56504961204607,56504961237375,56504961270143,56504961302911,56504961335679,56504961368447,56504961401215,56505064489343,56505064522111,56505064554879,56505064587647,56505064620415,56505064653183,56505064685951,56505064718719,56505064751487,56505064784255,56505064817023,56505064849791,56505064882559,56505064
915327,56505064948095,56505064980863,56505065013631,56505065046399,56518714524031,56518714556799,56518714589567,56518714622335,56518716162431,56518716195199,56518716227967,56518716260735,56518716293503,56518716326271,56518716359039,56518716391807,56518716424575,56518716457343,56518716490111,56518716522879,56518716785023,56518716817791,56518716850559,56518716883327,56518716916095,56518716948863,56518716981631,56518717014399,56518717047167,56518717079935,56518717112703,56518717145471,56518717374847,56518717440383,56518717505919,56518717538687,56518717571455,56518717604223,56518717636991,56518717669759,56518717931903,56518717964671,56518717997439,56518718062975,56518718095743,56518718128511,56518718161279,56518718194047,56518790545791,56518790578559,56518790611327,56518790644095,56518790676863,56518805651839,56518805684607,56518805717375,56518805750143,56518805782911,56561153933695,56766086054271,56766086283647,56766086349183,56766086381951,56766086447487,56766086480255,56766086545791,56766086644095,567660866768
63,56766086840703,56766183342463,56766183375231,56766183473535,56766183506303,56766183539071,56766183571839,56766183637375,56766183670143,56766183768447,56766183801215,56766183833983,56766183932287,56766183997823,56766184096127,56766184128895,57284689789311,57284689822079,57284689854847,57284689887615,57284689920383,57284689953151,57284689985919,57284690018687,57284690051455,57284690084223,57284690116991,57284690149759,57284690182527,57284690215295,57284690248063,57284690280831,57284690313599,57284690346367,57284690379135,57284690411903,57311934513535,57311934546303,57311934579071,57311934611839,57318991724927,57318991790463,57318991823231,57319008797055,57319008829823,57319008862591,57319008895359,57392715465087,57392715497855,57392715530623,57392715563391,57392715596159,57578627137919,57578627170687,57579681808767,57579681841535,57579681874303,57579681907071,57579681939839,57579773362559,57579773395327,57579773428095,57579773460863,57579773493631,57579861377407,57579861410175,57579861442943,57579861475711,5
7579861508479,57581101154687,57581101187455,57581101220223,57581101252991,57581101285759,57582419149183,57582419181951,57582419214719,57582419247487,57582419280255,57596170535295,57596170568063,57596170600831,57596170633599,57596170666367,57596170699135,57596170731903,57596170764671,57596170797439,57596170830207,57596170862975,57596170895743,57596171092351,57596171125119,57596171157887,57596171190655,57596171223423,57596171256191,57596171288959,57596171321727,57596171354495,57596171387263,57596171420031,57596171452799,57596175384959,57596175417727,57596175450495,57596175483263,57596176138623,57596176171391,57596176204159,57596176236927,57596176269695,57596176302463,57596176335231,57596176367999,57596176662911,57596176695679,57596176728447,57596176761215,57596176793983,57596176859519,57596176925055,57596177056127,57596177088895,57596177121663,57596177252735,57596177285503,57596177351039,57596177383807,57596177416575,57596177449343,57596177514879,57596177547647,57596177613183,57596177645951,57596177809791,57596
177842559,57596177875327,57596177908095,57602995126655,57602995159423,57602995192191,57602995224959,57602995257727,57602995290495,57602995323263,57602995356031,57602995388799,57602995421567,57602995454335,57602995487103,57602995519871,57602995552639,57602995585407,57602995618175,57602995650943,57602995683711,57602995716479,57602995749247,57602995782015,57602995814783,57602995847551,57602995880319,57602995913087,57602995945855,57602995978623,57602996011391,57602996044159,57602996076927,57602996109695,57602996142463,57602996175231,57602996207999,57602996240767,57602996273535,57602996306303,57602996339071,57602996371839,57602996404607,57602996437375,57602996470143,57602996502911,57602996535679,57602996568447,57602996601215,57602996633983,57602996666751,57602996699519,57602996732287,57602996765055,57602996797823,57602996830591,57602996863359,57602996928895,57602996961663,57602996994431,57602997027199,57602997059967,57602997092735,57602997223807,57602997256575,57602997289343,57602997322111,57602997354879,576029973ched = !maxUpdatedAt || (cachedDate && !isNaN(cachedDate) && (!maxDate || cachedDate > maxDate));
if (useCached) {
if (Array.isArray(cachedData.plans)) {
window._RestockRocketConfig.sellingPlans = cachedData.plans;
// Only use disabled_plan_ids when using cached plans
window._RestockRocketConfig.disabledSellingPlanIds = cachedData.disabled_plan_ids || [];
console.debug('[RR] Using selling plans from cachedSellingPlans (cached_at: ' + cachedData.cached_at + ')');
}
} else {
// When using old format (stale cache), don't trust disabled_plan_ids
window._RestockRocketConfig.disabledSellingPlanIds = [];
console.debug('[RR] Using selling plans from old format (max updated_at: ' + maxUpdatedAt + ')');
}
}
})();window._RestockRocketConfig.enabledNotifyMeVariantIds = [];window._RestockRocketConfig.disabledNotifyMeVariantIds = [];window._RestockRocketConfig.backInStockTemplates = [];window
._RestockRocketConfig.restockNotes = {};window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article","blog"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hijack","css_config":null,"js_config":null,"created_at":"2025-07-26T09:16:04.076Z","updated_at":"2025-07-26T09:16:04.076Z"}];window._RestockRocketConfig.obfuscateInventoryQuantity = false;window._RestockRocketConfig.product = {"id":7468034785506,"title":"Muc-Off Bike Protect","handle":"muc-off-bike-protect","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003eBike Protect is the ultimate liquid bicycle protection. Preserve and freshen your bike with Bike Protect’s incredible water dispersing action! It’s a perfect ‘all over’, after-wash corrosion inhibie treads and braking surfaces!\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eHigh performance formula leaves dry, non-sticky protective film\u003c\/li\u003e\n\u003cli\u003eSafe on frame, metal parts, plastics, rubber, paint and carbon fibre\u003c\/li\u003e\n\u003cli\u003eDrives out excess moisture\u003c\/li\u003e\n\u003cli\u003ePrevents dirt adhesion\u003c\/li\u003e\n\u003cli\u003eLight lubricant coats moving parts\u003c\/li\u003e\n\u003cli\u003eQuick and easy to use\u003c\/li\u003e\n\u003cli\u003e500ml Aerosol Spray\u003c\/li\u003e\n\u003c\/ul\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {42134186557666 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {42134186557666 : parseInt("15"),};
window._RestockRocketConfig.variantsPreorderCount = {42134186557666 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {42134186557666 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {42134186557666 : parseInt(""),};
wind
ow._RestockRocketConfig.variantsPreorderMaxCountForMarket = {42134186557666 : null,};
window._RestockRocketConfig.variantsShippingText = {42134186557666 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {42134186557666 : null,};
window._RestockRocketConfig.selected_variant_id = 42134186557666;
window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available;// STOQ-1595/1612 shared signal, derived once here so both the accelerated-checkout block
// gate (STOQ-1612) and the click tracker (STOQ-1595) read one clearly-owned flag rather
// than a side effect buried in either consumer's try/catch: whether this shop has preorders
// configured at all — an enabled selling plan plus at least one preorder variant id,
// independent of the block toggle. Fail-open: on error the flag stays unset and both
// consumers no-op.
try {
var _sqCfg = window._RestockRocketConfig;
var _sqPlanEnabled = Array.isArray(_sqCfg.sellingPlans) &&
_sqCfg.sellingPlans.some(function (p) { return p && p.enabled; });
var _sqPreCount = ((_sqCfg.cachedPreorderVariantIds &&
_sqCfg.cachedPreorderVariantIds.preorder_variant_ids) || []).length;
_sqCfg.preordersConfigured = !!(_sqPlanEnabled && _sqPreCount);
} catch (e) { /* fail open */ }
// STOQ-1612: block (not hide) Buy Now / Shop Pay until our JS runs, so a tap in the
// load window can't bypass preorder. pointer-events via .stoq-buy-now-pending (no
// reflow); timeout releases; renderPreorderButton / featured_product.js lift it.
// Gated by the `block_accelerated_checkout` toggle (default OFF) for gradual rollout.
// Armed ONLY when we're sure preorder is in play — product page: THIS product has a
// preorder variant (never block a plain product's Shop Pay); featured: integration
// enabled for this page type. Rationale: PR #2784.
try {
var _sqc = window._Re
stockRocketConfig;
var _sqOn = !!(_sqc.cachedSettings && _sqc.cachedSettings.block_accelerated_checkout);
var _sqPre = (_sqc.cachedPreorderVariantIds &&
_sqc.cachedPreorderVariantIds.preorder_variant_ids) || [];
var _sqArm = false;
if (_sqOn && _sqc.preordersConfigured) {
if (_sqc.pageType === 'product' && _sqc.product && _sqc.product.variants) {
_sqArm = _sqc.product.variants.some(function (v) { return _sqPre.indexOf(Number(v.id)) !== -1; });
} else {
_sqArm = (_sqc.integrations || []).some(function (i) {
return i && i.type === 'featured_product' && i.enabled &&
Array.isArray(i.page_types) && i.page_types.indexOf(_sqc.pageType) !== -1;
});
}
}
if (_sqArm && document.documentElement) {
_sqc.acceleratedGateArmed = true;
document.documentElement.classList.add('stoq-buy-now-pending');
setTimeout(function () {
document.documentElement.classList.remove('stoq-buy-now-pending');
}, 6000);
}
} catch (e) { /* fail open */ }
window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019faf5b-94c9-7a24-9306-bf1118ca3099/restockrocket-1-554/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019faf5b-94c9-7a24-9306-bf1118ca3099/restockrocket-1-554/assets/restockrocket-collection.js'
window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/019faf5b-94c9-7a24-9306-bf1118ca3099/restockrocket-1-554/assets/restockrocket-product-bis.js'
window._RestockRocketConfig.scriptUrlCollectionBis = 'https://cdn.shopify.com/extensions/019faf5b-94c9-7a24-9306-bf1118ca3099/restockrocket-1-554/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-cac
hed 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 environments where THEME_EXTENSION_API_HOST is unset), so the
// setting.json + fetchEmbedConfig calls below route to the same host as the
// rest of the extension's API traffic instead of staying on the baked host.
window._RestockRocketConfig.host = (window._RestockRocketConfig.cachedSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://app.restockrocket.io'
// Deployed extension build number, read from the CDN asset host Shopify generates:
// https://cdn.shopify.com/extensions/age = Date.now() - updatedAt.getTime();
if (age
<rm so it's correct on collection/index/search too. block_accelerated_checkout
// context (STOQ-1612) rides in `properties` (forwarded verbatim by the pixel, no schema
// change): a buy_now click on a preorder variant while the gate was armed is a visible
// bypass signal for order debug. Also sends page_url (top-level, like the pixel's native
// events) and two preorder signals in properties (see below).
try {
var _sqTrack = window._RestockRocketConfig;
if (_sqTrack.preordersConfigured) {
document.addEventListener('click', function (e) {
try {
var t = e.target;
if (!t || !t.closest) return;
var host = t.closest('.shopify-payment-button, shopify-payment-terms');
if (!host) return;
var channel = host.matches && host.matches('shopify-payment-terms')
? 'shop_pay_installments' : 'buy_now';
var form = host.closest('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: (_sqTrack.product && _sqTrack.product.id) || '',
channel: channel,
market_id: _sqTrac
k.marketId || '',
country_code: _sqTrack.countryIsoCode || '',
page_type: _sqTrack.pageType || '',
cart_token: _sqTrack.cartToken || '',
page_url: (window.location && window.location.href) || '',
properties: {
// Mirror the bundle's own preorder check (preorder.js checkInventoryProvider-
// WithCachedFallback): the live set config.preorderVariantIds (refreshed after
// page load by loadVariantInventoryData) OR the Liquid-injected
// cachedPreorderVariantIds — always present, so it covers clicks before the
// bundle loads (why this tracker is inline). ORing both (not preferring one)
// matches the bundle and is correct even if the live set is an empty array. Both
// hold integer ids; the click-time id comes off a DOM input (.value → string) or
// selected_variant_id, so coerce with Number for a like-typed compare.
is_preord
er_variant: (function () {
var vid = Number(variantId);
var has = function (a) { return Array.isArray(a) && a.indexOf(vid) !== -1; };
return has(_sqTrack.preorderVariantIds) ||
has(_sqTrack.cachedPreorderVariantIds &&
_sqTrack.cachedPreorderVariantIds.preorder_variant_ids);
})(),
// Narrow, authoritative preorder signal: enrolled in an ENABLED STOQ selling plan
// (is_preorder_variant above is the broad OOS+continue heuristic — non-STOQ too).
in_enabled_plan: !!_sqPlan,
// In-stock preorder signal: enrolled but currently IN STOCK (in the inStockVariantIds
// set, not the OOS preorderVariantIds set). Same live-OR-cached pattern as
// is_preorder_variant. is_preorder_variant OR is_instock_variant = "should sell via
// the plan" regardless of stock, so an in-stock preorder bypass is detectable too.
is_
instock_variant: (function () {
var has = function (a) { return Array.isArray(a) && a.indexOf(_sqVidNum) !== -1; };
return has(_sqTrack.inStockVariantIds) ||
has(_sqTrack.cachedInStockVariantIds &&
_sqTrack.cachedInStockVariantIds.in_stock_variant_ids);
})(),
// The enrolled plan's Shopify selling-plan id + inventory_provider (stoq = STOQ tracks
// the OOS count; shopify = in-stock preorder). Tells order-debug what kind of preorder
// the Buy Now bypassed, without a downstream lookup.
enrolled_plan_id: (_sqPlan && (_sqPlan.shopify_selling_plan_id || _sqPlan.shopify_selling_plan_group_id)) || '',
enrolled_plan_provider: (_sqPlan && _sqPlan.inventory_provider) || '',
block_enabled: !!(_sqTrack.cachedSettings && _sqTrack.cachedSettings.block_accelerated_checkout),
gate_armed: !!_sqTrack.acceleratedGateArmed,
gate_active
_at_click: !!(document.documentElement &&
document.documentElement.classList.contains('stoq-buy-now-pending')),
},
});
} catch (err) { /* never break checkout */ }
}, true);
}
} catch (e) { /* fail open */ }
function applyTranslations(settings) {
try {
// Skip translation logic entirely if multi-language is not enabled
if (!settings || !settings.multi_language_enabled) {
return settings;
}
if (!settings.translations) {
console.debug('STOQ - No translations found, skipping translation');
return settings;
}
const normalizedLocale = window._RestockRocketConfig.normalizedLocale;
const translations = settings.translations;
if (!normalizedLocale) {
// No matching locale has translations; drop payload to save memory
console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {}));
delete settings.translations;
rder plans. Use the full build if preorder is on,
// an enabled offer exists, or a disabled-but-kept plan id remains (cart sweep
// must still strip those). Rationale in the PR.
const hasEnabledOffer = Array.isArray(window._RestockRocketConfig.sellingPlans)
&& window._RestockRocketConfig.sellingPlans.some(function(plan) { return plan && plan.enabled; });
const hasDisabledPlanIds = Array.isArray(window._RestockRocketConfig.disabledSellingPlanIds)
&& window._RestockRocketConfig.disabledSellingPlanIds.length > 0;
const usePreorderBuild = settings.preorder_enabled || hasEnabledOffer || hasDisabledPlanIds;
const collectionScriptUrl = usePreorderBuild
? window._RestockRocketConfig.scriptUrlCollection
: window._RestockRocketConfig.scriptUrlCollectionBis;
const productScriptUrl = usePreorderBuild
? window._RestockRocketConfig.scriptUrlProduct
: window._RestockRocketConfig.scriptUrlProductBis;
const pageType = window._Res
tockRocketConfig.pageType;
const collectionPageTypes = ['collection', 'index', 'search', 'page'];
if(collectionPageTypes.indexOf(pageType) !== -1 && (settings[`show_button_on_${pageType}`] || settings[`preorder_${pageType}_enabled`])) {
createRestockRocketScript(collectionScriptUrl);
} else if(pageType === 'product') {
createRestockRocketScript(productScriptUrl);
} else if(hijackIntegration) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(usePreorderBuild) {
// cart/article/blog/list-collections: full build so the cart sweep runs.
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else {
console.debug(`STOQ - no scripts enabled for ${pageType}`);
}
// Dispatch custom event when app is loaded
// Cart selling plan updates will be triggered by stoq:inventory-data-loaded event
const appLoadedEvent = new CustomEvent('stoq:loaded', {