<
img src="//projektride.co.uk/cdn/shop/files/cz253011_a8f7e074-4161-4d01-af84-a5e6d85d3061_98x.jpg?v=1744888806" alt="" class="product-single__thumbnail-img">
Shop All New Bikes
window._RestockRocketConfig = window._RestockRocketConfig || {}
// Helper function to normalize locale format from hyphen to underscore (e.g., 'en-US' -> 'en_us')
// This matches the backend's Mobility.normalize_locale behavior
// Returns empty string if locale is empty or invalid (matches original behavior)
function normalizeLocale(locale) {
if (!locale || locale.trim() === '') {
return '';
}
return locale.toString().toLowerCase().replace(/-/g, '_');
}
window._RestockRocketConfig.locale = 'en';
window._RestockRocketConfig.normalizedLocale = normalizeLocale('en');
window._RestockRocketConfig.shop = 'projektride.myshopify.com';
window._RestockRocketConfig.pageType = 'product';window._RestockRocketConfig.marketId = 382140642;window._RestockRocketConfig.countryName = 'United Kingdom';
window._RestockRocketConfig.countryIsoCode = 'GB';window._RestockRocketConfig.cartInventoryQuantity = {};window._RestockRocketConfig.cachedSettings = {"id":38500,"shop_id":38436,"currency":"GBP","created_at":"2025-07-26T09:13:57.337Z","updated_at":"2025-11-11T14:
rm_phone_label":"Phone number","storefront_form_email_label":"Email","storefront_form_phone_error":"Please enter a valid phone number","storefront_form_customer_name_placeholder":"Name","storefront_form_customer_name_error":"Please enter your name","storefront_form_did_you_mean_error":"Did you mean %{suggested_email}? Or use %{current_email}","form_customer_name_enabled":false,"form_customer_name_required":false,"css_config":"","js_config":null,"collect_promotion_consent":false,"storefront_form_promotion_consent_label":"Notify me about other news, sales, discounts & offers too","show_button_on_collection":false,"sms_default_country":"us","sms_restrict_country":false,"sms_default_channel":true,"optin_required":false,"optin_success_text":"Registration confirmed! You'll receive an alert when the product is restocked.","storefront_button_border_radius":0,"storefront_button_disable_tag_hides_button":true,"storefront_button_disable_tag_enabled":false,"quantity_required":false,"storefront_form_quantity_label":"QuantRider Care
h_error":"Permission rejected! Please review notification settings and try again","storefront_font_family":"OpenSans","insert_button_after_selector_collection_type":"afterend","show_channel_selector":false,"storefront_form_empty_error":"Please fill in one or more of the options above","storefront_form_push_input":"Send notification to your browser","insert_button_after_selector_page":null,"show_button_on_page":false,"insert_button_after_selector_search":null,"show_button_on_search":false,"app_proxy_path_prefix":"/apps/restockrocket-production","collection_link_selector":"","index_link_selector":"","page_link_selector":"","search_link_selector":"","collection_check_link_visibility":true,"collection_buttons_container":null,"index_buttons_container":null,"page_buttons_container":null,"search_buttons_container":null,"extension_enable_url_variant_detection":true,"extension_enable_value_variant_detection":true,"extension_value_variant_selector":"[name='id']","resubscribe_text":"This product is out of stock. Get not
n\/shop\/files\/cz2530190a.jpg?v=1744888495","width":1800},{"alt":null,"id":65309169287551,"position":41,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/cz2530190b.jpg?v=1744888495"},"aspect_ratio":1.0,"height":1800,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/cz2530190b.jpg?v=1744888495","width":1800},{"alt":null,"id":65309169353087,"position":42,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/cz2530190c.jpg?v=1744888496"},"aspect_ratio":1.0,"height":1800,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/cz2530190c.jpg?v=1744888496","width":1800},{"alt":null,"id":65309169385855,"position":43,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/cz2530190d.jpg?v=1744888496"},"aspect_ratio":1.0,"height":1800,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/cz2530190d.jSee More
Loading moreLazer Turnsys system provides a tailored fit that's easy to adjust on the move with a simple turn of the dial\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eGuaranteed fit:\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eOne size fits all. The helmet shell and fit system is designed to accommodate a wide variety of head sizes and shapes\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLED light compatibility:\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eIncrease safety and visibility by attaching the Universal Lazer LED at the rear of the helmet via the Direct Mount\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLightweight:\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e22% lighter than Lazer Compact M CE\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eReduced plastics:\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e80g less plastics used than in Lazer Compact M CE\u003c\/li\u003e\n\u003cli\u003eSize: Uni-size 54-61 cm\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u
.parseInt("1"),55333738283391 : parseInt("1"),55333738316159 : parseInt("1"),55333738348927 : parseInt("1"),55333752865151 : parseInt("1"),55333738381695 : parseInt("1"),};
window._RestockRocketConfig.variantsPreorderCount = {55333738185087 : parseInt(""),55333738217855 : parseInt(""),55333738250623 : parseInt(""),55333738283391 : parseInt(""),55333738316159 : parseInt(""),55333738348927 : parseInt(""),55333752865151 : parseInt(""),55333738381695 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {55333738185087 : null,55333738217855 : null,55333738250623 : null,55333738283391 : null,55333738316159 : null,55333738348927 : null,55333752865151 : null,55333738381695 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {55333738185087 : parseInt(""),55333738217855 : parseInt(""),55333738250623 : parseInt(""),55333738283391 : parseInt(""),55333738316159 : parseInt(""),55333738348927 : parseInt(""),55333752865151 : parseInt(""),55333738381695 : parseInt(""),};
.UrlProduct = 'https://cdn.shopify.com/extensions/019af0d1-c518-7a22-bdbf-9ceff49063ad/restockrocket-1-402/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019af0d1-c518-7a22-bdbf-9ceff49063ad/restockrocket-1-402/assets/restockrocket-collection.js'
window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https://app.restockrocket.io'
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
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
/ProjektRide Merchandise.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
ketConfig.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;
}
}
// First try to get settings from metafields with expiry check
const cachedSettings = window._RestockRocketConfig.cachedSettings;
const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null;
if (validCachedSettings) {
console.debug('STOQ - using cached settings');
initializeScripts(validCachedSeHelmets
ven 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 initializeScripts(settings) {
settings = applyTranslations(settings);
window._RestockRocketConfig.settings = settings;
console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`);
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);
})
if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) {
createRestockRo
nsole.debug(`STOQ - no scripts enabled for ${window._RestockRocketConfig.pageType}`);
}
// Check and update cart selling plans after scripts are loaded
if (settings.preorder_enabled) {
updateCartSellingPlans();
}
// Dispatch custom event when app is loaded
const appLoadedEvent = new CustomEvent('stoq:loaded', {
detail: {
pageType: window._RestockRocketConfig.pageType,
enabled: settings.enable_app,
settings: settings
}
});
console.debug('STOQ - dispatching app loaded event');
window.dispatchEvent(appLoadedEvent);
}
}
function updateCartSellingPlans() {
// Wait for the API to be available with retries
const maxRetries = 10;
const retryDelay = 500;
function attemptCartCheck(attempt = 1) {
if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) {
window._RestockRocket.updateCartSellingPlans()
.then(hasUpdates => {
if (hasUpda
t and are 100% fixed in position. This makes them great for sprinters, professional athletes, or people who value the most efficient power transfer possible and are not prone to knee pain. Note that red SPD-SL cleats require that you know your optimal cleat position precisely, and you are comfortable adjusting your cleats into that perfect position.
Blue SPD-SL Cleats – 2 Degrees of Float
Blue SPD-SL cleats are Shimano’s newest cleat option and they exist as a middle-ground between yellow and red. Blue cleats have two degrees of float (one degree in each direction), allowing for a small range of movement while still delivering a high amount of pedaling efficiency. The float pivot point is at the front of the cleat, which eliminates lateral sliding movement while allowing a small amount of angle change from the pivot point back towards the heel.
Brands