Tunisia (GBP£) Guinea (GNFFr)
#Text--template--26482386141567__section_text_yQCcHi { --PT: 60px; --PB: 60px; }
Djibouti (DJFFdj)
#Text--subheading_7zUzJi.text__subheading { --adjust-body: calc(var(--FONT-ADJUST-SUBHEADING) * 1.0); --text-gap: 16px; } @media screen and (min-width: 1024px) { #Text--subheading_7zUzJi.text__subheading { --adjust-body: calc(var(--FONT-ADJUST-SUBHEADING) * 1.0); } }Guinea-Bissau (XOFFr) Header Image
Egypt (EGPج.م) Hire Genesis Tour de Fer 10 (Flat Handlebars)
Hungary (HUFFt)
Uganda (UGXUSh) #Text--heading_mLrXFE.text__heading { --adjust-heading: calc(var(--FONT-ADJUST-HEADING) * 1.0);--highlight-color: var(--text);--highlight-color: #000000;} @media screen and (min-width: 1024px) { #Text--heading_mLrXFE.text__heading { --adjust-heading: calc(var(--FONT-ADJUST-HEADING) * 1.0); } } Ukraine (UAH₴) #Text--text_GwkVtY.text__content { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.0); } @media screen and (min-width: 1024px) { #Text--text_GwkVtY.text__content { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.0); } }
Eritrea (GBP£) The Tour de Fer is the perfect choice for riders looking for a dependable, high-quality bike for city riding, long-distance touring, or exploring Scotland’s scenic backroads. With its comfortable steel frame, wide gear range, and stable geometry, it’s built to handle everything from daily commutes to multi-day adventures.
Sizes Available: Small, Medium, LargeIreland (EUR€) Italy (EUR€)
Vatican City (EUR€)
Ethiopia (ETBBr) #productTemplate--template--26482386141567__main { --PT: 60px; --PB: 60px; }
Jersey (GBP£)
Faroe Islands (DKKkr.)
Kenya (KESKSh) Zambia (GBP£)

"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.status); } 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.stop' }; 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 not ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { // If request failed and we have cached settings (even if expired), use them as fallback if (cachedSettings) { console.debug('STOQ - using expired cached settings as fallback'); initializeScripts(cachedSettings); } else { console.error('S 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}`); // Stale-Liquid resilience (default-on, per-shop opt-out via the // `disable_refresh_on_stale_liquid` Toggle, surfaced as the negative // `disable_refresh_on_stale_liquid` flag in settings.json so that // `undefined` -- in CDN-cached metafield payloads that predate this // key -- reads as `!undefined === true` and gets default-on behavior // immediately, no metafield rewrite required). // When the Liquid CDN cache is older than LIQUID_CACHE_MAX_AGE the in-page // selling_plans / integrations metafields can be wrong; refresh both from // the API before launching scr } }), fetchEmbedConfig('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) { // Setup cart selling plan updater BEFORE loading any scripts to avoid race conditions 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); }) // STOQ-1520: serve the lean back-in-stock-only build (no preorder/hijack code) // only to shops with NO preorder plans. Use the full build if preorder is o





ProjektRide

.

Powered by Shopify
.
We like to keep things simple here at ProjektRide, we don't take any form of security deposit. Can I hire a custom-build bike?
Diners Club
If you are looking for a custom bike for your tour, Discover
please get in touch Klarna Can I ProjektRide keep my belongings safe whilst I travel with the bike?
Maestro
We are happy to keep your belongings safe, including suitcases etc. whilst you are out in one of our rental bikes.Mastercard
PayPal From what time can I pick up my hire bike? Shop Pay
You can pick up your bike as soon as the shop opens on your collection date. Please review our working hours Close
hereUnion Pay
.
Visa At what time do I need to return the bike?
You must return your bike before the shop closes on your return date. Please review our working hours
here
. Failure to do so in time may result in additional charges. Please see our
Bike Hire Terms & Conditions please add a note to your order with your number and your ETA return date so we can arrange your drop off out-of-hours.
Can I cancel my bike hire?
contact us to cancel your booking. If a cancellation is received within 5 days of your collection date, you will not receive a refund.
Is drop off and collection available?
Yes, depending on where and when you’d like the bikes dropped off, we may charge a small delivery fee. The best option is to get in touch with us, and we’ll do our best to make it work.
#SiteFooter { --PT: 100px; --PB: 10px; --bg-lighten-darken-shimmer-bg: #0d0d0d; --bg-lighten-darken-shimmer-effect: #121212; --text: #ffffff; --text-alpha-15: rgba(255, 255, 255, 0.15); --text-alpha-50: rgba(255, 255, 255, 0.6); --text-alpha-85: rgba(255, 255, 255, 0.85);--border: #ffffff;} #SiteFooter .footer-bottom { --grid-columns: 3; }
#SiteFooter .footer-block--logo { min-width: calc(160px + calc(var(--gutter) / 2)); } #SiteFooter .footer-block__logo-image { width: 160px; }
CloseQuick Links
About Ustrue,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations
S","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}],"disabled_plan_ids":[713813721471,713176482175,714631872895],"cached_at":"2026-04-09T09:16:46Z"}; if (cachedData && typeof cachedData === 'object' && cachedData.cached_at)
edAt || (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._RestockRocketC "h5 product-detail-specifications-title\"\u003e\u003cspan\u003eDrive and brakes\u003c\/span\u003e\u003c\/div\u003e\n\u003ctable class=\"table product-detail-properties-table\"\u003e\n\u003ctbody\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eFront brake\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eTektro HD-M275 \/ TKD-150, Hydr. Disc Brake (160\/160)\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eRear brake\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eTektro HD-M275 \/ TKD-150, Hydr. Disc Brake (160\/160)\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003 003eCrankset\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eShimano FC-M315, 36x22T, 170mm\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eCassette\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eShimano CS-HG31, 11-34T\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eChain\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eKMC Z8.3\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eGear group\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd clas Blog3c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eStem\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eCube Performance Stem, 31.8mm\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eHandlebar tape\/Grips\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eAcid React\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cdiv class=\"h5 product-detail-specifications-title\"\u003e\u003cspan\u003eWheels\u003c\/span\u003e\u003c\/div\u003e\n\u003ctable class=\"table product-detail-properties-table\"\u003e\n\u003ctbody\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\ c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eCube IMPAC Smartpac, 2.25\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eRear tire\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eCube IMPAC Smartpac, 2.25\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cdiv class=\"h5 product-detail-specifications-title\"\u003e\u003cspan\u003eOther parts\u003c\/span\u003e\u003c\/div\u003e\n\u003ctable class=\"table product-detail-properties-table\"\u003e\n\u003ctbody\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eSaddle\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eNatural Fit Venec Lite WS
\u003c\/tbody\u003e\n\u003c\/table\u003e","published_at":"2025-07-02T15:57:12+01:00","created_at":"2025-07-02T15:57:11+01:00","vendor":"Cube","type":"Bicycles","tags":["ACCESS"],"price":59900,"price_min":59900,"price_max":59900,"available":false,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":55656602403199,"title":"Extra Small","option1":"Extra Small","option2":null,"option3":null,"sku":"62521014","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"CUBE ACCESS WS EAZ BLUSH\/SILVER - Extra Small","public_title":"Extra Small","options":["Extra Small"],"price":59900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":55656602435967,"title":"Small","option1":"Small","option2":null,"option3":null,"sku":"62521016","requires_shipping":tru
Track Service Progressfalse,"name":"CUBE ACCESS WS EAZ BLUSH\/SILVER - Large","public_title":"Large","options":["Large"],"price":59900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/a3858d5302608bbc53fe9e0a406c1e629655cdc7_625210_1920x1920_5b55a2d7-1509-44a7-a66f-69abe14b181b.jpg?v=1751467954","\/\/projektride.co.uk\/cdn\/shop\/files\/7f1a7b98543926c99265def6388fcb6af49047cd_625210_D_04_2200x2200_fda79e32-d406-43e8-b5e9-6d6e4fe10fd4.jpg?v=1751467954","\/\/projektride.co.uk\/cdn\/shop\/files\/b53fc06e0e2661b446be9d2687cb9d8d8f128eb0_625210_D_02_2200x2200_3e6c9deb-1312-4eea-ab93-764e99c8ec3b.jpg?v=1751467953","\/\/projektride.co.uk\/cdn\/shop\/files\/207013e8eb8e79876b113d8abd21748f2b7bad40_625210_D_01_2200x2200_52aeb896-f2a7-4c0b-9d43-a07e5a658160.jpg?v=1751467953","\/\/projektride.co.uk\/cdn\/shop\/files\/1ca67a521d5a425614edaf281d0a
d406-43e8-b5e9-6d6e4fe10fd4.jpg?v=1751467954"},"aspect_ratio":1.778,"height":1125,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/7f1a7b98543926c99265def6388fcb6af49047cd_625210_D_04_2200x2200_fda79e32-d406-43e8-b5e9-6d6e4fe10fd4.jpg?v=1751467954","width":2000},{"alt":null,"id":66684654649727,"position":3,"preview_image":{"aspect_ratio":1.778,"height":1125,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/b53fc06e0e2661b446be9d2687cb9d8d8f128eb0_625210_D_02_2200x2200_3e6c9deb-1312-4eea-ab93-764e99c8ec3b.jpg?v=1751467953"},"aspect_ratio":1.778,"height":1125,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/b53fc06e0e2661b446be9d2687cb9d8d8f128eb0_625210_D_02_2200x2200_3e6c9deb-1312-4eea-ab93-764e99c8ec3b.jpg?v=1751467953","width":2000},{"alt":null,"id":66684654682495,"position":4,"preview_image":{"aspect_ratio":1.778,"height":1125,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/207013e8eb8e79876b113d8abd21748f2b7bad40_625210_D_01_2200x2200_52aeb89
t's why we've equipped the Access WS EAZ with safe and practical disc brakes. They'll bring you to a quick stop anytime, anywhere. Combined with the comfortable Suntour fork and the wide range of the Shimano transmission, this means you can rely on your bike when you're out and about. Where will your next adventure take you?\u003cbr\u003e\u003cbr\u003e\u003cstrong\u003eFrame description\u003c\/strong\u003e\u003cbr\u003eThe beauty of the Access WS lies in the details. Such as the smooth welds, the neat integration of standard and disc brake mounts and the also integrated mounting points for ACID rear mudguards and pannier racks. The geometry not only offers a dynamic appearance, but also plenty of freedom of movement and space for wide tires. We've also further refined our famous SizeSplit system. So whether you're short or tall, you'll always find a perfectly fitting Access WS. Of course, the cables are neatly routed internally, for a neat appearance and less maintenance.\u003c\/span\u003e\u003c\/div\u003e\n\ class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eCrankset\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eShimano FC-M315, 36x22T, 170mm\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eCassette\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eShimano CS-HG31, 11-34T\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eChain\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eKMC Z8.3\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm md-8 properties-value\"\u003e\u003cspan\u003eCube Rise Trail Bar, 680mm\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eStem\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eCube Performance Stem, 31.8mm\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eHandlebar tape\/Grips\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eAcid React\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cdiv class=\"h5 product-detail-specifications-title\"\u003e\u003cspan\u003eWheels\u003c\/span\u003e\u003c\/div\u003e\n\u003ctable class=\"table product-detail-properties-table\"\u003e\n\u003ctbody\u003e Insure Your Bikeu003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eFront tire\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eCube IMPAC Smartpac, 2.25\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eRear tire\u003c\/span\u003e\u003c\/th\u003e\n\u003ctd class=\"col col-sm-6 col-md-8 properties-value\"\u003e\u003cspan\u003eCube IMPAC Smartpac, 2.25\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cdiv class=\"h5 product-detail-specifications-title\"\u003e\u003cspan\u003eOther parts\u003c\/span\u003e\u003c\/div\u003e\n\u003ctable class=\"table product-detail-properties-table\"\u003e\n\u003ctbody\u003e\n\u003ctr class=\"row properties-row\"\u003e\n\u003cth class=\"col col-sm-6 col-md-4 properties-label\"\u003e\u003cspan\u003eSaddle\u003c\/span\u003e\u003c\/th\ -md-8 properties-value\"\u003e\u003cspan\u003eCube PP MTB\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {55656602403199 : "deny",55656602435967 : "deny",55656602468735 : "deny",55656602501503 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {55656602403199 : parseInt("0"),55656602435967 : parseInt("0"),55656602468735 : parseInt("0"),55656602501503 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {55656602403199 : parseInt(""),55656602435967 : parseInt(""),55656602468735 : parseInt(""),55656602501503 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {55656602403199 : null,55656602435967 : null,55656602468735 : null,55656602501503 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {55656602403199 : parseInt(""),55656602435967 : parseInt(""),55656602468735 : parseInt(""),55656602501503 : parseInt(""),};
ed 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 p
Privacy Policy; 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/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-product.js' window._RestockRocketConfig.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._RestockRocke
<
< 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 Terms of Service= 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
Refund policyctedVariantId || '', 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 // derivati
st('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
a like-typed compare. is_preorder_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 preord Servicetion setupCartSellingPlanUpdater(settings) { // Setup listener regardless - updateCartSellingPlans has its own guards // This ensures cleanup happens even when preorders are disabled globally // Listen for stoq:inventory-data-loaded event dispatched by api.js 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); }); } }); } // ---- Live settings via the Storefront API (ad < "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.status); } 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.sto p' }; 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 not ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { // If request failed and we have cached settings (even if expired), use them as fallback if (cachedSettings) { console.debug('STOQ - using expired cached settings as fallback'); initializeScripts(cachedSettings); } else { console.error('S
Servicing 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}`); // Stale-Liquid resilience (default-on, per-shop opt-out via the // `disable_refresh_on_stale_liquid` Toggle, surfaced as the negative // `disable_refresh_on_stale_liquid` flag in settings.json so that // `undefined` -- in CDN-cached metafield payloads that predate this // key -- reads as `!undefined === true` and gets default-on behavior // immediately, no metafield rewrite required). // When the Liquid CDN cache is older than LIQUID_CACHE_MAX_AGE the in-page // selling_plans / integrations metafields can be wrong; refresh both from // the API before launching scr
} }), fetchEmbedConfig('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) { // Setup cart selling plan updater BEFORE loading any scripts to avoid race conditions 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); }) // STOQ-1520: serve the lean back-in-stock-only build (no preorder/hijack code) // only to shops with NO preorder plans. Use the full build if preorder is o
onPageTypes = ['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', { detail: { pageType: window._RestockR
family:inherit}@font-face{font-family:OpenSans;font-weight:200;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Light.woff)}@font-face{font-family:OpenSans;font-weight:300;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Regular.woff)}@font-face{font-family:OpenSans;font-weight:600;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-SemiBold.woff)}.restock-rocket-button-container{position:relative;z-index:1;width:100%}.restock-rocket-button-container-float-right{position:fixed;z-index:123123;top:calc(50% - 200px);right:0;transform:rotate(270deg);transform-origin:bottom right}.restock-rocket-button-container-float-left{position:fixed;z-index:123123;top:calc(50% - 200px);left:40px;transform:rotate(90deg);transform-origin:top left}.restock-rocket-button-container-float-left:hover,.restock-rocket-button-container-float-right:hover,.restock-rocket-button-container:hover,.restock-rocket-button-float:hover,.restock-rocket-button:hover{opacity:.8}.restock-rocket-button{min-height:5Workshop Prices:1px solid #ebebeb;}.restock-rocket-payment-input-container{flex:1 1 auto;min-width:0}.restock-rocket-preorder-discount-badge{background:#ebebeb;height:25px;line-height:25px;padding:0 15px;border-radius:25px;font-size:0.8rem;flex:0 0 auto}.restock-rocket-payment-input{margin-right:10px;margin-top:-3px;vertical-align:middle;margin-left:0;accent-color:#202223}.restock-rocket-payment-description{margin-top:4px;flex:1 1 100%}.restock-rocket-preorder-badge{font-size:13px;line-height:1;padding:5px 13px 6px;border-radius:40px;height:auto;border:none;width:auto;z-index:2;margin:0;background:0 0}.preorder-badge-collection{position:absolute;top:10px;right:10px}.preorder-badge-product{margin-left:10px}.restock-rocket-price-strike{text-decoration:line-through;color: #666666;}.restock-rocket-discounted-price{margin-left:10px;}.restock-rocket-acknowledgement-checkbox{margin-bottom:12px;display:flex;align-items:flex-start;gap:8px;font-size:14px;line-height: 1.5;}.restock-rocket-acknowledge-checkbox-input{width:18px;height:1 .countdown-box{min-width:55px;padding:14px 10px;font-size:26px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:11px}}@media (max-width:480px){.restock-rocket-preorder-countdown-timer{padding:12px}.restock-rocket-preorder-countdown-timer .countdown-units{width:100%;gap:10px}.restock-rocket-preorder-countdown-timer .countdown-box{width:100%;min-width:50px;padding:12px 8px;font-size:24px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:10px}}.restock-rocket-toast{position:fixed;cursor:pointer;background:#fff;border:0;min-width:40px;min-height:40px;box-shadow:0 0 15px rgba(0,0,0,.1)!important;z-index:622004;padding:20px 30px;font-family:inherit;font-size:inherit;color:#000;display:flex;justify-content:center;align-items:center}.restock-rocket-toast a{text-decoration:none;font-weight:700;color:#000}.restock-rocket-toast .dismiss{margin-left:15px;z-index:1;font-size:20px;}.restock-rocket-toast-top{top:60px}.restock-rocket-toast-bottom{bottom:75px}.restock-rocket-toast-left,.r
ebkit-transform:translateX(0)}100%{-webkit-transform:translateX(100%)}}.restock-rocket-preorder-progress-bar{padding:12px 15px;margin-bottom:20px;font-family:inherit;}.restock-rocket-preorder-progress-bar .preorder-progress-text{margin-bottom:8px;}.restock-rocket-preorder-progress-bar .preorder-progress-bar-row{display:flex;align-items:center;gap:10px;}.restock-rocket-preorder-progress-bar .preorder-progress-track{flex:1;height:12px;overflow:hidden;}.restock-rocket-preorder-progress-bar .preorder-progress-fill{display:block;height:100%;min-width:2px;transition:width 0.3s ease;}.restock-rocket-preorder-progress-bar .preorder-progress-percentage{font-weight:500;min-width:35px;text-align:right;} Cycle to Work
Delivery & Returns Information,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,55239714505087,55239726596479,55245591871871,55245591970175,55245592002943,55245656818047,55245656949119,55245730152831,55245730218367,55245730316671,55245730349439,55245730382207,55245730447743,55245730578815,55245730742655,55245730775423,55245737492863,55245737623935,55245737656703,55245737689471,55245737722239,55294444142975,55294475927935,55294475960703,55294527504767,55294527537535,55294528946559,552Mon - Fri: 09:00 - 18:301960319,55464801993087,55464802025855,55464813035903,55464813068671,55464813101439,55464813134207,55464813166975,55464813199743,55482461389183,55482461421951,55482461454719,55482461487487,55482461520255,55482461553023,55482489176447,55482489209215,55482489241983,55482489274751,55482489307519,55482489340287,55482515620223,55482515652991,55482515685759,55482515718527,55482526794111,55482526826879,55482526859647,55482526892415,55482526925183,55482526957951,55482539016575,55482539049343,55482539082111,55482539114879,55482539147647,55482539180415,55482573554047,55482573586815,55482573619583,55482573652351,55482573685119,55482573717887,55482589643135,55482589675903,55482589708671,55482589741439,55482589774207,55482589806975,55482603536767,55482603569535,55482603602303,55482603635071,55482603667839,55482603700607,55482623361407,55482623394175,55482623426943,55482623459711,55482623492479,55482639122815,55482639155583,55482639188351,55482639221119,55482666844543,55482671497599,55482671530367,55482671563135,55482671595Sat: 9:00 - 16:00
56189673570687,56189673734527,56266456596863,56266456629631,56266456662399,56266456695167,56266468819327,56266468852095,56266468884863,56266468917631,56266488480127,56277227274623,56277238088063,56277238120831,56277238153599,56277436301695,56279203742079,56279203807615,56279228547455,56279228612991,56300214583679,56300214616447,56300214649215,56300214681983,56300214714751,56385022361983,56385022460287,56385023476095,56385023574399,56385024229759,56385024295295,56385024360831,56385024393599,56385024459135,56385024491903,56385027768703,56385027867007,56385027932543,56385027965311,56385028030847,56385028129151,56385204388223,56385204420991,56385204453759,56385204486527,56385205797247,56385205862783,56385205928319,56386096628095,56386096726399,56386096824703,56386096923007,56386096955775,56386097021311,56386097119615,56386097217919,56386097250687,56386097283455,56386097316223,56386097348991,56386097381759,56386097414527,56386097447295,56386097480063,56386097512831,56386097545599,56386097578367,56386097611135,5638Sun: Closed
072895,56479931105663,56479931138431,56490205643135,56494084981119,56494085013887,56494085046655,56494085079423,56494085112191,56494085144959,56494085177727,56494085210495,56494085243263,56494085276031,56494085308799,56494085341567,56494085374335,56494085407103,56494085439871,56494085472639,56494085505407,56494085636479,56494085702015,56494085767551,56494085800319,56494085833087,56494085865855,56494085898623,56494085931391,56494085964159,56494085996927,56494086160767,56494086193535,56494086226303,56494086259071,56494086291839,56494086324607,56494086357375,56494086390143,56494086422911,56494086455679,56494086488447,56494086521215,56494086553983,56494086586751,56494086619519,56494086652287,56494086685055,56494086717823,56494086783359,56494086914431,56494086947199,56494086979967,56494087045503,56494087078271,56494087111039,56494087143807,56494087176575,56494087209343,56494087242111,56494087274879,56494087307647,56494087340415,56494087373183,56494087405951,56494087504255,56494087537023,56494087799167,5649408835620131 374 5324
6518716195199,56518716227967,56518716260735,56518716293503,56518716326271,56518716359039,56518716391807,56518716424575,56518716457343,56518716490111,56518716522879,56518716785023,56518716850559,56518716883327,56518716916095,56518716948863,56518716981631,56518717014399,56518717047167,56518717079935,56518717112703,56518717145471,56518717374847,56518717440383,56518717473151,56518717538687,56518717571455,56518717604223,56518717636991,56518717669759,56518717833599,56518717866367,56518717931903,56518717964671,56518717997439,56518718030207,56518718062975,56518718095743,56518718128511,56518718161279,56518718194047,56518790545791,56518790578559,56518790611327,56518790644095,56518790676863,56518805651839,56518805684607,56518805717375,56518805750143,56518805782911,56561153933695,56766086054271,56766086185343,56766086250879,56766086381951,56766086447487,56766086513023,56766086840703,56766183342463,56766183375231,56766183407999,56766183440767,56766183473535,56766183506303,56766183539071,56766183571839,56766183637375,56766Newington Road
81951,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,57596177842559,57596177875327,57596177908095,57602995126655,57602995159423,57602995192191,57602995224959,5760299525772EdinburghocketConfig.cachedOutOfStockVariantIds = { out_of_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2026-07-09T23:00:55Z","shopify_market_id":382140642,"market_locations_enabled":false}; window._RestockRocketConfig.cachedVariantPreorderLimitsMarketKey = "variant_preorder_limits_for_market_382140642";window._RestockRocketConfig.cachedVariantShippingTexts = {"variant_shipping_texts":{},"updated_at":"2026-07-09T23:00:55Z","shopify_market_id":382140642,"market_locations_enabled":false}; window._RestockRocketConfig.cachedVariantShippingTextsMarketKey = "variant_shipping_texts_for_market_382140642";window._RestockRocketConfig.sellingPlans = [{"shopify_selling_plan_group_id":98590196095,"shopify_selling_plan_id":713071886719,"enabled":true,"variant_ids":[55569712382335,55569712415103,55569712480639,55570017616255,55570017550719,55569712447871,55570017583487],"product_variants_source":"custom","name":"Preorder","preorder_button_text":[email protected]illing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations":{},"payment_options":[{"billing_type":"no_remaining_balance","billing_checkout_charge_type":"percentage","billing_checkout_ "countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}];(function() { const cachedData = {"plans":[{"shopify_selling_plan_group_id":98590196095,"shopify_selling_plan_id":713071886719,"enabled":true,"variant_ids":[55569712382335,55569712415103,55569712480639,55570017616255,55570017550719,55569712447871,55570017583487],"product_variants_source":"custom", ing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations":{},"payment_options":[{"billing_type":"no_remaining_balance","billing_checkout_cha
l,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}],"disabled_plan_ids":[713813721471,713176482175,714631872895],"cached_at":"2026-04-09T09:16:46Z"}; if (cachedData && typeof cachedData === 'object' && cachedData.cached_at) { // Find the maximum updated_at from all items in old array const o
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-
guration and is available in Crystal Black\/Copper, Gloss.\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003eCarbon all-road platform\u003c\/li\u003e\n\u003cli\u003eIntegrated cable routing\u003c\/li\u003e\n\u003cli\u003eStorage Optimization System\u003c\/li\u003e\n\u003cli\u003eTyre clearance up to 40c \/ 43mm where specified\u003c\/li\u003e\n\u003cli\u003eHydraulic disc brake setup on complete bike models\u003c\/li\u003e\n\u003cli\u003eAvailable sizes: XXS 44-46, XS 47-50, S 51-53, M 54-56, L 57-59 and XL 60-62\u003c\/li\u003e\n\u003c\/ul\u003e\u003ch3\u003eKey specification\u003c\/h3\u003e\u003ctable\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eFrame\u003c\/th\u003e\n\u003ctd\u003eKrypton Pro\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFork\u003c\/th\u003e\n\u003ctd\u003eKrypton Pro\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGroupset\u003c\/th\u003e\n\u003ctd\u003eFrameset only\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eWheelset\u003c\/th\
ck\/Copper, Gloss \/ XXS 44-46","option1":"Crystal Black\/Copper, Gloss","option2":"XXS 44-46","option3":null,"sku":"A18-KRYPTONPRO-FRAMESET-CBC-2XS","requires_shipping":true,"taxable":true,"featured_image":{"id":86349324353919,"product_id":8368130556130,"position":1,"created_at":"2026-07-08T16:38:16+01:00","updated_at":"2026-07-08T16:38:20+01:00","alt":"Argon 18 Krypton Pro Frameset - Crystal Black\/Copper, Gloss","width":320,"height":212,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/KryptonPro_364A_SRAM-Force-eTap-AXS_profil_b14769df-a647-4b58-8f63-a5c4b5f08280.png?v=1783525100","variant_ids":[57933595541887,57933595574655,57933595607423,57933595640191,57933595672959,57933595705727]},"available":false,"name":"Argon 18 Krypton Pro Frameset - Crystal Black\/Copper, Gloss \/ XXS 44-46","public_title":"Crystal Black\/Copper, Gloss \/ XXS 44-46","options":["Crystal Black\/Copper, Gloss","XXS 44-46"],"price":300000,"weight":2500,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_m await import("//projektride.co.uk/cdn/shopifycloud/shop-js/modules/v2/loader.shop-follow-button.en.esm.js"); "position":1,"preview_image":{"aspect_ratio":1.509,"height":212,"width":320,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/KryptonPro_364A_SRAM-Force-eTap-AXS_profil_b14769df-a647-4b58-8f63-a5c4b5f08280.png?v=1783525100"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":57933595640191,"title":"Crystal Black\/Copper, Gloss \/ M 54-56","option1":"Crystal Black\/Copper, Gloss","option2":"M 54-56","option3":null,"sku":"A18-KRYPTONPRO-FRAMESET-CBC-M","requires_shipping":true,"taxable":true,"featured_image":{"id":86349324353919,"product_id":8368130556130,"position":1,"created_at":"2026-07-08T16:38:16+01:00","updated_at":"2026-07-08T16:38:20+01:00","alt":"Argon 18 Krypton Pro Frameset - Crystal Black\/Copper, Gloss","width":320,"height":212,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/KryptonPro_364A_SRAM-Force-eTap-AXS_profil_b14769df-a647-4b58-8f63-a5c4b5f08280.png?v=1783525100","variant_ids":[57933595541887,57933595574655,57933595607423,579 eatured_image":{"id":86349324353919,"product_id":8368130556130,"position":1,"created_at":"2026-07-08T16:38:16+01:00","updated_at":"2026-07-08T16:38:20+01:00","alt":"Argon 18 Krypton Pro Frameset - Crystal Black\/Copper, Gloss","width":320,"height":212,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/KryptonPro_364A_SRAM-Force-eTap-AXS_profil_b14769df-a647-4b58-8f63-a5c4b5f08280.png?v=1783525100","variant_ids":[57933595541887,57933595574655,57933595607423,57933595640191,57933595672959,57933595705727]},"available":false,"name":"Argon 18 Krypton Pro Frameset - Crystal Black\/Copper, Gloss \/ L 57-59","public_title":"Crystal Black\/Copper, Gloss \/ L 57-59","options":["Crystal Black\/Copper, Gloss","L 57-59"],"price":300000,"weight":2500,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Argon 18 Krypton Pro Frameset - Crystal Black\/Copper, Gloss","id":71714647835007,"position":1,"preview_image":{"aspect_ratio":1.509,"height":212,"width":320,"src":"\/\/projektride.co. - Crystal Black\/Copper, Gloss \/ XL 60-62","public_title":"Crystal Black\/Copper, Gloss \/ XL 60-62","options":["Crystal Black\/Copper, Gloss","XL 60-62"],"price":300000,"weight":2500,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Argon 18 Krypton Pro Frameset - Crystal Black\/Copper, Gloss","id":71714647835007,"position":1,"preview_image":{"aspect_ratio":1.509,"height":212,"width":320,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/KryptonPro_364A_SRAM-Force-eTap-AXS_profil_b14769df-a647-4b58-8f63-a5c4b5f08280.png?v=1783525100"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/KryptonPro_364A_SRAM-Force-eTap-AXS_profil_b14769df-a647-4b58-8f63-a5c4b5f08280.png?v=1783525100","\/\/projektride.co.uk\/cdn\/shop\/files\/Krypton-Pro-364A-Closeup-8.jpg?v=1783525101","\/\/projektride.co.uk\/cdn\/shop\/files\/Krypton-Pro-364A-Closeup-2.jpg?v=1783525101 f63-a5c4b5f08280.png?v=1783525100","width":320},{"alt":null,"id":71714647867775,"position":2,"preview_image":{"aspect_ratio":1.499,"height":1366,"width":2048,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Krypton-Pro-364A-Closeup-8.jpg?v=1783525101"},"aspect_ratio":1.499,"height":1366,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Krypton-Pro-364A-Closeup-8.jpg?v=1783525101","width":2048},{"alt":null,"id":71714647900543,"position":3,"preview_image":{"aspect_ratio":1.499,"height":1366,"width":2048,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Krypton-Pro-364A-Closeup-2.jpg?v=1783525101"},"aspect_ratio":1.499,"height":1366,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Krypton-Pro-364A-Closeup-2.jpg?v=1783525101","width":2048},{"alt":null,"id":71714647933311,"position":4,"preview_image":{"aspect_ratio":1.499,"height":1366,"width":2048,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Krypton-Pro-364A-Closeup-1.jpg?v=1783525101"},"aspect_ratio":1.499,"height":1366,"meCountry
-Pro-364A-Closeup-7.jpg?v=1783525100"},"aspect_ratio":1.499,"height":1366,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Krypton-Pro-364A-Closeup-7.jpg?v=1783525100","width":2048}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003ch2\u003eArgon 18 Krypton Pro Frameset\u003c\/h2\u003e\u003cp\u003eThe Krypton Pro is Argon 18's pro-level all-road platform, designed for riders who want race-bike efficiency with extra comfort and tyre clearance for rougher tarmac, fast endurance riding and mixed-surface routes.\u003c\/p\u003e\u003cp\u003eThis version is supplied in the Frameset configuration and is available in Crystal Black\/Copper, Gloss.\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003eCarbon all-road platform\u003c\/li\u003e\n\u003cli\u003eIntegrated cable routing\u003c\/li\u003e\n\u003cli\u003eStorage Optimization System\u003c\/li\u003e\n\u003cli\u003eTyre clearance up to 40c \/ 43mm where specified\u003c\/li\u003e\n\u003cli\u003eHydraulic disc brake setup on complete bi
e\u003e\u003cp\u003e\u003cem\u003eImages are supplied by Argon 18 and may be illustrative. Final specification can vary by region and assembly option.\u003c\/em\u003e\u003c\/p\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {57933595541887 : "deny",57933595574655 : "deny",57933595607423 : "deny",57933595640191 : "deny",57933595672959 : "deny",57933595705727 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {57933595541887 : parseInt("0"),57933595574655 : parseInt("0"),57933595607423 : parseInt("0"),57933595640191 : parseInt("0"),57933595672959 : parseInt("0"),57933595705727 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {57933595541887 : parseInt(""),57933595574655 : parseInt(""),57933595607423 : parseInt(""),57933595640191 : parseInt(""),57933595672959 : parseInt(""),57933595705727 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {57933595541887 : null,57933595574655 : null,57933595607423 : null,57933595640
estockRocketConfig.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)GBP£
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/
uuid>/
handle>-Åland Islands (EUR€) <
body: JSON.stringify({ query: query, variables: { namespace: cfg.metafieldNamespace } }), } ) .then(function(response) { if (!response.ok) { throw new Error('Storefront API HTTP ' + response.status); } 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
ore_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 not ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { // If request failed and we have cached settings (even if expired), use them as fallback 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-Shopif
settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); // Stale-Liquid resilience (default-on, per-shop opt-out via the // `disable_refresh_on_stale_liquid` Toggle, surfaced as the negative // `disable_refresh_on_stale_liquid` flag in settings.json so that // `undefined` -- in CDN-cached metafield payloads that predate this // key -- reads as `!undefined === true` and gets default-on behavior // immediately, no metafield rewrite required). // When the Liquid CDN cache is older than LIQUID_CACHE_MAX_AGE the in-page // selling_plans / integrations metafields can be wrong; refresh both from // the API before launching scripts. Race against a 1000ms timeout so a slow // API can't block init indefinitely. If the timeout wins, the in-flight // fetches still complete and update window._RestockRocketConfig — the // bundle re-reads sellingPlans/integrations on every interaction, so the // late-arriving val
).then(function() { loadScripts(settings); }); return; } loadScripts(settings); } function loadScripts(settings) { // Setup cart selling plan updater BEFORE loading any scripts to avoid race conditions 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); }) // STOQ-1520: serve the lean back-in-stock-only build (no preorder/hijack code) // only to shops with NO preorder 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) {Angola (GBP£)

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', { 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); } }

html.stoq-buy-now-pending .shopify-payment-button{pointer-events:none!important}.stoq-hide-buy-now .shopify-payment-button{display:none!important}.restock-rocket-button,.restock-rocket-button-float{opacity:1!important;border:none!important;cursor:pointer!important;background-image:none!important;box-shadow:none!important;padding:15px 20px;font-size:16px;width:100%;font-family:inherit}@font-face{font-family:OpenSans;font-weight:200;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Light.woff)}@font-face{font-family:OpenSans;font-weight:300;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Regular.woff)}@font-face{font-family:OpenSans;font-weight:600;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-SemiBold.woff)}.restock-rocket-button-container{position:relative;z-index:1;width:100%}.restock-rocket-button-container-float-right{position:fixed;z-index:123123;top:calc(50% - 200px);right:0;transform:rotate(270deg);transform-origin:bottom right}.restock-rocket-button-container-float-left{position:fixed;z-index:123123;top:calc(50% - 200px);left:40px;transform:rotate(90deg);transform-origin:top left}.restock-rocket-button-container-float-left:hover,.restock-rocket-button-container-float-right:hover,.restock-rocket-button-container:hover,.restock-rocket-button-float:hover,.restock-rocket-button:hover{opacity:.8}.restock-rocket-button{min-height:50px;margin-top:10px;margin-bottom:10px}.restock-rocket-button-collection{position:relative;font-size:13px;line-height:1;padding:7px;height:auto;z-index:3}.restock-rocket-wrapper{background-color:rgba(0,0,0,.5);z-index:123123123;width:100%;height:100%;overflow:auto;position:fixed;right:0;top:0;transition-property:all;transition-duration:.3s;display:flex;flex-direction:column;justify-content:center;}.restock-rocket-wrapper-inline{width:100%;height:100%;margin-top:20px}.restock-rocket-preorder-description{padding:10px 15px;margin-top:20px;display:flex;flex-direction:column;gap:10px;}.preorder-description-details{margin-bottom:0;display:flex;flex-direction:column;gap:10px;}.preorder-detail-item{display:flex;flex-direction:row;justify-content:start;gap:8px;align-items:center;}.restock-rocket-payment-widget{border:1px solid #ebebeb;margin-bottom:20px;}.restock-rocket-payment-option{display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:15px 20px;}.restock-rocket-payment-option:not(:last-child){border-bottom:1px solid #ebebeb;}.restock-rocket-payment-input-container{flex:1 1 auto;min-width:0}.restock-rocket-preorder-discount-badge{background:#ebebeb;height:25px;line-height:25px;padding:0 15px;border-radius:25px;font-size:0.8rem;flex:0 0 auto}.restock-rocket-payment-input{margin-right:10px;margin-top:-3px;vertical-align:middle;margin-left:0;accent-color:#202223}.restock-rocket-payment-description{margin-top:4px;flex:1 1 100%}.restock-rocket-preorder-badge{font-size:13px;line-height:1;padding:5px 13px 6px;border-radius:40px;height:auto;border:none;width:auto;z-index:2;margin:0;background:0 0}.preorder-badge-collection{position:absolute;top:10px;right:10px}.preorder-badge-product{margin-left:10px}.restock-rocket-price-strike{text-decoration:line-through;color: #666666;}.restock-rocket-discounted-price{margin-left:10px;}.restock-rocket-acknowledgement-checkbox{margin-bottom:12px;display:flex;align-items:flex-start;gap:8px;font-size:14px;line-height: 1.5;}.restock-rocket-acknowledge-checkbox-input{width:18px;height:18px;margin-top:2px;cursor:pointer;flex-shrink:0;accent-color: #0d0d0d;}.restock-rocket-acknowledge-checkbox-label{flex:1;cursor:pointer;}.restock-rocket-preorder-countdown-timer{display:flex;flex-direction:column;align-items:center;padding:16px;margin:8px 0;font-family:inherit;}.restock-rocket-preorder-countdown-timer .countdown-header{font-size:16px;margin-bottom:6px;text-align:center}.restock-rocket-preorder-countdown-timer .countdown-units{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}.restock-rocket-preorder-countdown-timer .countdown-unit{display:flex;flex-direction:column;align-items:center;gap:6px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:40px;padding:10px 6px;text-align:center;font-size:20px;line-height:1}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:14px;font-weight:500;text-align:center;text-transform:capitalize;opacity:.7}@media (max-width:768px){.restock-rocket-preorder-countdown-timer{padding:14px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:55px;padding:14px 10px;font-size:26px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:11px}}@media (max-width:480px){.restock-rocket-preorder-countdown-timer{padding:12px}.restock-rocket-preorder-countdown-timer .countdown-units{width:100%;gap:10px}.restock-rocket-preorder-countdown-timer .countdown-box{width:100%;min-width:50px;padding:12px 8px;font-size:24px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:10px}}.restock-rocket-toast{position:fixed;cursor:pointer;background:#fff;border:0;min-width:40px;min-height:40px;box-shadow:0 0 15px rgba(0,0,0,.1)!important;z-index:622004;padding:20px 30px;font-family:inherit;font-size:inherit;color:#000;display:flex;justify-content:center;align-items:center}.restock-rocket-toast a{text-decoration:none;font-weight:700;color:#000}.restock-rocket-toast .dismiss{margin-left:15px;z-index:1;font-size:20px;}.restock-rocket-toast-top{top:60px}.restock-rocket-toast-bottom{bottom:75px}.restock-rocket-toast-left,.restock-rocket-toast-right{-webkit-animation:.5s forwards slide;animation:.5s forwards slide}.restock-rocket-toast-left{left:0;transform:translateX(-100%);-webkit-transform:translateX(-100%);border-radius:0 10px 10px 0}.restock-rocket-toast-left.slide-out{-webkit-animation:.5s forwards slide-out-left;animation:.5s forwards slide-out-left}.restock-rocket-toast-right{right:0;transform:translateX(100%);-webkit-transform:translateX(100%);border-radius:10px 0 0 10px}.restock-rocket-toast-right.slide-out{-webkit-animation:.5s forwards slide-out-right;animation:.5s forwards slide-out-right}@keyframes slide{100%{transform:translateX(0)}}@-webkit-keyframes slide{100%{-webkit-transform:translateX(0)}}@keyframes slide-out-left{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}@-webkit-keyframes slide-out-left{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(-100%)}}@keyframes slide-out-right{0%{transform:translateX(0)}100%{transform:translateX(100%)}}@-webkit-keyframes slide-out-right{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(100%)}}.restock-rocket-preorder-progress-bar{padding:12px 15px;margin-bottom:20px;font-family:inherit;}.restock-rocket-preorder-progress-bar .preorder-progress-text{margin-bottom:8px;}.restock-rocket-preorder-progress-bar .preorder-progress-bar-row{display:flex;align-items:center;gap:10px;}.restock-rocket-preorder-progress-bar .preorder-progress-track{flex:1;height:12px;overflow:hidden;}.restock-rocket-preorder-progress-bar .preorder-progress-fill{display:block;height:100%;min-width:2px;transition:width 0.3s ease;}.restock-rocket-preorder-progress-bar .preorder-progress-percentage{font-weight:500;min-width:35px;text-align:right;} Armenia (AMDդր.)
  • Ascension Island (SHP£)
    Belarus (GBP£)
  • Belgium (EUR€)

    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 - Cockpit

    ProjektRide Bike Shop EdinburghBenin (XOFFr)

    82 Newington Road, EH91QN, Edinburgh.

Bosnia & Herzegovina (BAMКМ) Ball head
Cube FPH863, Semi-Integrated