ngPlans (cached_at: ' + cachedData.cached_at + ')'); } } else { 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._Restoc kRocketConfig.obfuscateInventoryQuantity = false;window._RestockRocketConfig.product = {"id":8108877742306,"title":"BACKCOUNTRY FOOD POUCH","handle":"backcountry-food-pouch","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eSimplicity and convenience at a moment’s notice, on any track or trail. \u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eIdeal for stashing food, sunglasses, gloves, or a cold drink, the Backcountry Food Pouch is a convenient and easy-access storage pocket for frequently used items.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eAttached firmly with a versatile three-point system, the stem bag easily fits on either side of the cockpit and works with aerobars and Jones bars. The bag’s contents are kept secure by a simple one-handed open and closure system, and a subtly tapered design prevents knee contact while pedaling out of the saddle.\u003c\/p\u003e\n\u003cp data-mce-fragm
ent=\"1\"\u003eThe plus versions of the stem bag include exterior mesh pockets for catching empty wrappers as well as a mesh drainage hole to help keep the interior dry.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cem data-mce-fragment=\"1\"\u003eWhile the body fabric of the stem bag is waterproof, due to the stitching process used to assemble the product, there is the possibility for water to enter through the seams when exposed to sustained rain. We recommend using an internal dry bag for contents that must remain absolutely dry.\u003c\/em\u003e\u003c\/p\u003e","published_at":"2023-06-25T12:00:20+01:00","created_at":"2023-06-25T12:00:20+01:00","vendor":"Apidura","type":"bags","tags":["Apidura","Bags and Transportation","Bike Packing","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":3700,"price_min":3700,"price_max":4500,"available":true,"price_varies":true,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false," variants":[{"id":44140340707554,"title":"0.8L","option1":"0.8L","option2":null,"option3":null,"sku":"ABP","requires_shipping":true,"taxable":true,"featured_image":{"id":39357271834850,"product_id":8108877742306,"position":1,"created_at":"2023-06-25T12:00:44+01:00","updated_at":"2023-06-25T12:00:44+01:00","alt":null,"width":1234,"height":942,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.35.png?v=1687690844","variant_ids":[44140340707554]},"available":true,"name":"BACKCOUNTRY FOOD POUCH - 0.8L","public_title":"0.8L","options":["0.8L"],"price":3700,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":31960273158370,"position":1,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.35.png?v=1687690844"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44140340740
322,"title":"1.2L","option1":"1.2L","option2":null,"option3":null,"sku":"ABX","requires_shipping":true,"taxable":true,"featured_image":{"id":39357271933154,"product_id":8108877742306,"position":2,"created_at":"2023-06-25T12:01:00+01:00","updated_at":"2023-06-25T12:01:00+01:00","alt":null,"width":1234,"height":942,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.54.png?v=1687690860","variant_ids":[44140340740322]},"available":true,"name":"BACKCOUNTRY FOOD POUCH - 1.2L","public_title":"1.2L","options":["1.2L"],"price":4100,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":31960273256674,"position":2,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.54.png?v=1687690860"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44140340773090,"title":"1.2L - Plus","o ption1":"1.2L - Plus","option2":null,"option3":null,"sku":"ABZ","requires_shipping":true,"taxable":true,"featured_image":{"id":39357272064226,"product_id":8108877742306,"position":3,"created_at":"2023-06-25T12:01:12+01:00","updated_at":"2023-06-25T12:01:12+01:00","alt":null,"width":1234,"height":942,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.01.08.png?v=1687690872","variant_ids":[44140340773090]},"available":true,"name":"BACKCOUNTRY FOOD POUCH - 1.2L - Plus","public_title":"1.2L - Plus","options":["1.2L - Plus"],"price":4500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":31960273387746,"position":3,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.01.08.png?v=1687690872"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.35.png?v=1687690844","\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.54.png?v=1687690860","\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.01.08.png?v=1687690872"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.35.png?v=1687690844","options":["Size"],"media":[{"alt":null,"id":31960273158370,"position":1,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.35.png?v=1687690844"},"aspect_ratio":1.31,"height":942,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.35.png?v=1687690844","width":1234},{"alt":null,"id":31960273256674,"position":2,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.54.png?v=1687690860"},"aspect_ratio":1.31,"height":942,"media_typ e":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.54.png?v=1687690860","width":1234},{"alt":null,"id":31960273387746,"position":3,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.01.08.png?v=1687690872"},"aspect_ratio":1.31,"height":942,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.01.08.png?v=1687690872","width":1234}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eSimplicity and convenience at a moment’s notice, on any track or trail. \u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eIdeal for stashing food, sunglasses, gloves, or a cold drink, the Backcountry Food Pouch is a convenient and easy-access storage pocket for frequently used items.\u003c\/p\u003e\n\u003cp data
-mce-fragment=\"1\"\u003eAttached firmly with a versatile three-point system, the stem bag easily fits on either side of the cockpit and works with aerobars and Jones bars. The bag’s contents are kept secure by a simple one-handed open and closure system, and a subtly tapered design prevents knee contact while pedaling out of the saddle.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe plus versions of the stem bag include exterior mesh pockets for catching empty wrappers as well as a mesh drainage hole to help keep the interior dry.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cem data-mce-fragment=\"1\"\u003eWhile the body fabric of the stem bag is waterproof, due to the stitching process used to assemble the product, there is the possibility for water to enter through the seams when exposed to sustained rain. We recommend using an internal dry bag for contents that must remain absolutely dry.\u003c\/em\u003e\u003c\/p\u003e"};window._RestockRocketConfig.variantsInventoryPolicy = {4414 0340707554 : "continue",44140340740322 : "continue",44140340773090 : "continue",}; window._RestockRocketConfig.variantsInventoryQuantity = {44140340707554 : parseInt("0"),44140340740322 : parseInt("0"),44140340773090 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {44140340707554 : parseInt(""),44140340740322 : parseInt(""),44140340773090 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {44140340707554 : null,44140340740322 : null,44140340773090 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {44140340707554 : parseInt(""),44140340740322 : parseInt(""),44140340773090 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {44140340707554 : null,44140340740322 : null,44140340773090 : null,}; window._RestockRocketConfig.variantsShippingText = {44140340707554 : "",44140340740322 : "",44140340773090 : "",}; window._RestockRocketConfig.variantsShippingTextForMarket = {44140340707554 : null,44Header Image140340740322 : null,44140340773090 : null,};window._RestockRocketConfig.selected_variant_id = 44140340707554; window._RestockRocketConfig.selected_variant_available = (window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }) || {}).available; 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) { } try { var _sqc = window._RestockRocketConfig; 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) { } window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/01a03e7c-b04d-7ad7-81d8-ee607c0c947f/restockrocket-1-570/assets/restockrocket-product.js' window._RestockRocketConfig.scriptUrlCollection =
'https://cdn.shopify.com/extensions/01a03e7c-b04d-7ad7-81d8-ee607c0c947f/restockrocket-1-570/assets/restockrocket-collection.js' window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/01a03e7c-b04d-7ad7-81d8-ee607c0c947f/restockrocket-1-570/assets/restockrocket-product-bis.js' window._RestockRocketConfig.scriptUrlCollectionBis = 'https://cdn.shopify.com/extensions/01a03e7c-b04d-7ad7-81d8-ee607c0c947f/restockrocket-1-570/assets/restockrocket-collection-bis.js' window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) window._RestockRocketConfig.host = (window._RestockRocketConfig.cachedSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://app.restockrocket.io' try { const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVer sionMatch[1]) || ''; } catch (e) { window._RestockRocketConfig.appVersion = ''; } const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; const LIQUID_CACHE_MAX_AGE = 15 * 60; const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; 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); const liquidCacheAge = now - liquidRenderedAt; window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge); 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; } if (settings.multi_language_enabled) { if (!settings.translations) { console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh'); return null; } if (window._RestockRocketConfig.normalizedLocale &
& !Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) { console.debug('STOQ - locale not explicitly translated, will use default language from cache'); } } const updatedAt = new Date(settings.updated_at); if (isNaN(updatedAt.getTime())) { console.debug('STOQ - Invalid updated_at date format in settings'); return null; } const age = Date.now() - updatedAt.getTime(); if (age < } catch (err) { } }, true); } } catch (e) { } function applyTranslations(settings) { try { 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) { console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {})); delete settings.translations; return settings; } console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`); const translatedFields = translations[normalizedLocale]; if (translatedFields && typeof translatedFields === 'object') { Object.keys(translatedFields).forEach (function(key) { const value = translatedFields[key]; if (value !== null && value !== undefined && value !== '') { settings[key] = value; } }); } else { console.debug('STOQ - No translated fields found for locale:', normalizedLocale); } delete settings.translations; return settings; } catch (e) { console.debug('STOQ - error applying translations:', e); return settings; } } function setupCartSellingPlanUpdater(settings) { window.addEventListener('stoq:inventory-data-loaded', function(event) { console.debug('STOQ - Inventory data loaded, updating cart selling plans'); if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) { window._RestockRocket.updateCartSellingPlans() .then(hasUpdates => { if (hasUpdates) { console.debug('STOQ - cart selling plans updated successfully'); } else { console.debug('STOQ
- no cart selling plan updates needed'); } }) .catch(error => { console.error('STOQ - error updating cart selling plans:', error); }); } }); } (function loadStorefrontSettings() { const cfg = window._RestockRocketConfig; if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) return; function run() { const query = 'query StoqSettings($namespace: String!) { shop { metafield(namespace: $namespace, key: "settings") { value } } }'; fetch( `https://${cfg.shop}/api/2025-07/graphql.json`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Shopify-Storefront-Access-Token': cfg.storefrontAccessToken, }, body: JSON.stringify({ query: query, variables: { namespace: cfg.metafieldNamespace } }), } ) .then(function(response) { if (!response.ok) { throw new Error('Storefront API HTTP ' + response.s tatus); } return response.json(); }) .then(function(body) { if (body && body.errors && body.errors.length) { throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', ')); } const value = body && body.data && body.data.shop && body.data.shop.metafield && body.data.shop.metafield.value; if (!value) { throw new Error('Storefront API returned no settings metafield value'); } cfg.storefrontSettings = JSON.parse(value); console.debug('STOQ - stored live settings from Storefront API on config.storefrontSettings'); }) .catch(function(e) { console.debug('STOQ - Storefront settings fetch failed (non-fatal):', e && e.message); }); } if (typeof window.requestIdleCallback === 'function') { window.requestIdleCallback(run, { timeout: 5000 }); } else { setTimeout(run, 0); } })(); const cachedSettings = window._RestockRocketConfig.cachedSettings; const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null; if (validCachedSettings) { console.debug('STOQ - using cached settings'); initializeScripts(validCachedSettings); } else { console.debug('STOQ - fetching fresh settings'); const headers = { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' }; if (window.Shopify?.theme?.role === 'main') { headers['X-Shopify-Theme-Schema-Name'] = window.Shopify.theme.schema_name; headers['X-Shopify-Theme-Schema-Version'] = window.Shopify.theme.schema_version; headers['X-Shopify-Theme-Store-Id'] = window.Shopify.theme.theme_store_id; } fetch( `${window._RestockRocketConfig.host}/api/v1/setting.json?translation_locale=${window._RestockRocketConfig.normalizedLocale}`, { headers } ) .then(function(response) { if (!response.ok) { throw new Error('Network response was n ot ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { if (cachedSettings) { console.debug('STOQ - using expired cached settings as fallback'); initializeScripts(cachedSettings); } else { console.error('STOQ - failed to load settings:', error); } }) .catch(function(e) { console.error(e) }) } function fetchEmbedConfig(endpoint, apply) { return fetch( `${window._RestockRocketConfig.host}/api/v1/embed/${endpoint}.json`, { headers: { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' } } ) .then(function(response) { if (!response.ok) throw new Error(`Failed to fetch ${endpoint}`); return response.json(); }) .then(function(data) { try { apply(data); } catch (applyError) {
console.error('STOQ - apply failed for ' + endpoint + ':', applyError); throw applyError; } }) .catch(function(error) { console.debug(`STOQ - using cached ${endpoint}:`, error.message); }); } function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); if (!window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid) { console.debug('STOQ - Liquid cache stale, refreshing selling_plans + integrations'); Promise.race([ Promise.all([ fetchEmbedConfig('selling_plans', function(data) { if (data && Array.isArray(data.plans)) { window._RestockRocketConfig.sellingPlans = data.plans; window._RestockRocketConfig.disabledSellingPlanIds = data.disabled_plan_ids || []; } }), fetchEmbed Config('integrations', function(data) { if (Array.isArray(data)) { window._RestockRocketConfig.integrations = data; } }) ]), new Promise(function(resolve) { setTimeout(resolve, 1000); }) ]).then(function() { loadScripts(settings); }); return; } loadScripts(settings); } function loadScripts(settings) { setupCartSellingPlanUpdater(settings); if(settings.enable_app) { const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); }) const hasEnabledOffer = Array.isArray(window._RestockRocketConfig.sellingPlans) && window._RestockRocketConfig.sellingPlans.some(function(plan) { return plan && plan.enabled; }); const hasDisabledPlanIds = Array.isArray(window._RestockRocketConfig.disabledSellingPlanIds) && w
    indow._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._RestockRocketConfig.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._RestockRocketC onfig.scriptUrlCollection); } else if(usePreorderBuild) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else { console.debug(`STOQ - no scripts enabled for ${pageType}`); } const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType, enabled: settings.enable_app, settings: settings, preorderEnabled: settings.preorder_enabled } }); console.debug('STOQ - dispatching app loaded event'); window.dispatchEvent(appLoadedEvent); } }
  • BUYhtml.stoq-buy-now-pending .shopify-payment-button{pointer-events:none!important}
  • SELL
  • RIDE CONFIDENT

CUBE STEREO HYBRID ONE22 RACE 800 FE SLABGREY/CHROME

Frame Style
Colour
Size
Quantity
Any bicycle is a versatile tool, but the Stereo Hybrid ONE22 Race 800 FE is more versatile than most. Complete with mudguards, lights, kickstand and a luggage carrier, it's ready for anything from a mountainous tour to the weekday commute. Ground-hugging suspension comfort is standard courtesy of a RockShox Psylo Silver RC fork and Deluxe Select R shock, combined with grippy Schwalbe Smart Sam 2.6in tyres. The powerful Bosch CX motor provides boost via Shimano's peerless XT 12-speed gears and an 800Wh battery with Purion 200 controller. And strong Shimano hydraulic disc brakes are the anchors you need to keep everything in check, whatever the weather.

Frame description
Our mountain bike Swiss army knife comes complete with a semi-integrated luggage carrier, full length mudguards, a lighting set and sturdy kickstand. But that's just the start. The heart of the Stereo Hybrid ONE22 FE is the Bosch CX drive and a high capacity 800Wh battery. Comfort Geometry and our proven four-bar suspension system work together to keep your wheels tracking true on even the longest rides. Integrated cable routing flatters the frame's elegant looks. A Direct Mount chain guard and UDH dropout may not sound exciting, but they're the little details that help make the difference. And, with Size Split, there's a perfectly proportioned option for pretty much every rider.

Specification

Frame Aluminum Superlite, Gravity Casting Technology, Efficient Comfort Control, FSP 4-Link, Agile Comfort Geometry, Boost 148, UDH™, Full Integrated Battery, Advanced Internal Cable Routing, Kickstand/Fender/Carrier Mounting Points, Integrated Seatclamp
Fork RockShox Psylo Silver RC Air, Tapered, 15x110mm, Lockout, 120mm
Shock RockShox Deluxe Select R, 185x52.5mm, Rebound Adjust, Trunnion Mount
Headset ACROS AZF-1034, ICR (Integrated Cable Routing), Top Zero-Stack 1 1/2" (ZS 56mm), Bottom Zero-Stack 1 1/2" (ZS 56mm), X-Connect Interface
Stem CUBE Performance Stem E-MTB 35, FPI-Link
Handlebar CUBE Rise Trail Bar 35
Grips ACID Hybrid Perform
Rear derailleur Shimano XT RD-M8100-SGS, ShadowPlus, 12-Speed
Shifters Shimano Deore SL-M6100-R, Rapidfire Plus
Brakes Shimano BR-MT520, Hydr. Disc Brake (203/203)
Crankset ACID MTB Hybrid Pro, 38T
Crankset chainring sizes 38T
Cassette Shimano Deore CS-M6100, 10-51T
Number of gears 12
Chain KMC e12
Wheelset ACID SLX 30, 32/32 Spokes, 15x110mm/12x148mm, Tubeless Ready
Tires (Front & Rear) Schwalbe Smart Sam, Active, 2.6
Pedals ACID PP MTB
Saddle ACID Venec EMTB Plus 145
Seatpost CUBE Dropper Post, Handlebar Lever, Internal Cable Routing, 31.6mm
Seat post = dropper Yes/No YES
Front light ACID Front Light PRO-E 150 X-Connect, 12V, DC
Rear light ACID Mudguard Rear Light PRO-E, 12V, DC
Kickstand ACID FM Pure Kickstand
Mudguard ACID 65
Bell Knog Oi
Carrier ACID Carrier SIC 2.0 Rail Boost
Engine Bosch Drive Unit Performance Line CX max. 120Nm (BDU38)
Engine ready for the Bosch 120 Nm update? YES
Battery Bosch PowerTube 800
Charger Bosch 2A
Remote Bosch Purion 200 with Integrated Display
Net weight (kg) 28.6
Gross weight (kg) 32.46
Max. system weight (kg) 150
Max. rider weight (kg) 120
Body size 1.77m - 1.87m
Accessories 93250,93490

Frequently Asked Questions

  • Please get in touch with a member of the team either by phone (01313745324) or email ([email protected]) where on of the team will be more than happy to help.

    ProjektRide Bike Shop Edinburgh

  • If the item is showing in stock, we aim to post the product within 24 hours. Please allow 5 working days to receive the item.

    Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.

    We also have a physical store, if you are local please pop in -

    ProjektRide Bike Shop Edinburgh

    82 Newington Road, EH91QN, Edinburgh.