781538,44957136945378,45068753961186,45068753993954,45069622640866,45069622903010,45069622968546,45069750730978,45069750763746,45353010921698,45353010954466,45353010987234,45353018261730,45353018294498,45353018327266,55569712382335,55569712447871,55569712480639,55569933074815,55570550194559,55570550227327,55604008976767,55638316908927,55638316941695,55638316974463,56220814999935,56220815032703,56270279606655,56270279639423,56270279672191,56314171064703,56314171097471,56398983725439,56398983758207,56398983790975,56399322251647],"updated_at":"2025-12-13T13:45:19Z","market_locations_enabled":false,"market_id":382140642,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null};window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedOutOfStockVariantIds = { out_of_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2025-12-13T14:08:56Z","shopi
ription_background_color":"#ebebeb","preorder_button_description_text_color":"#000000","preorder_button_description_border_radius":10,"preorder_button_description_show_quantity_limit":false,"preorder_button_description_quantity_limit_suffix":" units available for preorder","preorder_button_description_shipping_text_prefix":"Shipping: ","delivery_exact_time":null,"delivery_after_n_intervals":null,"delivery_at":"2025-07-26T09:20:18.169Z","delivery_type":"asap","quantity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"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 {{ discno_discount","pricing_amount":null,"pricing_percentage":null,"billing_title":"Full payment","billing_description":null,"discount_text":"Save {{ discount }}","shopify_selling_plan_id":713071886719,"is_default":true,"type":"full","translations":{}}],"require_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","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,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true}];window003e\n\u003cp\u003e\u003cspan\u003eEDGE stands proudly as a cornerstone of our high-performance gravel bike lineup, handcrafted from Gr9 3AL 2.5 DB titanium to offer unrivalled strength and durability for the ultimate.\u003c\/span\u003e\u003cspan\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003e\u003cmeta charset=\"utf-8\"\u003e \u003cbutton class=\"accordion active\"\u003eFRAME SPECIFICATION\u003csvg class=\"icon icon-minus\" aria-hidden=\"true\"\u003e\u003cuse xlink:href=\"#icon-minus\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\u003c\/button\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cdiv class=\"panel\"\u003e\n\u003cdiv class=\"bike__tech-spec\"\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003eFRAME MATERIAL\u003c\/span\u003e\u003cspan\u003eCustom butted, size specific, grade 9 3Al 2.5V CWSR Ti tube set\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eFRAME FINISH\u003c\/span\u003e\u003cspan\u003eIncluded - hand brushed with satin bead logos\u003c\/span\u003e\n- I'm looking to find out more information about a product, where can I find this?max":0,"compare_at_price_varies":false,"variants":[{"id":45610939089122,"title":"50cm","option1":"50cm","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Enigma Titanium Gravel Edge Frameset - 50cm","public_title":"50cm","options":["50cm"],"price":270000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45610939121890,"title":"52cm","option1":"52cm","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Enigma Titanium Gravel Edge Frameset - 52cm","public_title":"52cm","options":["52cm"],"price":270000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45610939154658,"title":"54cm","option1":"54cm","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":tr
:null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45610939252962,"title":"60cm","option1":"60cm","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Enigma Titanium Gravel Edge Frameset - 60cm","public_title":"60cm","options":["60cm"],"price":270000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.20.49.png?v=1718997711","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.02.png?v=1718997712","\/\/projektride.co.uk\/cdn\/shop\/files\/EdgeHTdetail.jpg?v=1718997862","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.17.png?v=1718997714","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.06.png?v=1718997714","\/\/projektride.co.uk\/cdn\/-
\/Screenshot_2024-06-21_at_20.21.02.png?v=1718997712"},"aspect_ratio":1.227,"height":1242,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.02.png?v=1718997712","width":1524},{"alt":null,"id":34094311604450,"position":3,"preview_image":{"aspect_ratio":1.498,"height":4004,"width":5999,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/EdgeHTdetail.jpg?v=1718997862"},"aspect_ratio":1.498,"height":4004,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/EdgeHTdetail.jpg?v=1718997862","width":5999},{"alt":null,"id":34094324351202,"position":4,"preview_image":{"aspect_ratio":1.227,"height":1242,"width":1524,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.17.png?v=1718997714"},"aspect_ratio":1.227,"height":1242,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.17.png?v=1718997714","width":1524},{"alt":null,"id":34094324711650,"position":5,"preview_image":{"aspect_ratio":1.
Please get in touch with a member of the team either by phone (0.21.13.png?v=1718997714","width":1524},{"alt":null,"id":34094324547810,"position":8,"preview_image":{"aspect_ratio":1.227,"height":1242,"width":1524,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.15.png?v=1718997714"},"aspect_ratio":1.227,"height":1242,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.15.png?v=1718997714","width":1524},{"alt":null,"id":34094324875490,"position":9,"preview_image":{"aspect_ratio":1.227,"height":1242,"width":1524,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.18.png?v=1718997715"},"aspect_ratio":1.227,"height":1242,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.18.png?v=1718997715","width":1524}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan\u003ePlease note, this price is for the Frame, fork and headset. Available for custom builds, ple- 01313745324e\n\u003cli\u003e\n\u003cspan\u003eFRAME FINISH\u003c\/span\u003e\u003cspan\u003eIncluded - hand brushed with satin bead logos\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eHANGER\u003c\/span\u003e\u003cspan\u003eEnigma type 10\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eBOTTOM BRACKET\u003c\/span\u003e\u003cspan\u003eInvestment cast T47 68mm\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eAXLE DIMS.\u003c\/span\u003e\u003cspan\u003eThru axle | 12mm x 100mm front, 12 x 142mm rear\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eHEADTUBE\u003c\/span\u003e\u003cspan\u003eCNC machined 44mm\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eCABLE ROUTING\u003c\/span\u003e\u003cspan\u003eInternal via custom entry ports\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eBRAKE MOUNT\u003c\/span\u003e\u003cspan\u003e160 front \/ 140 rear flat mount\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\
InventoryQuantity = {45610939089122 : parseInt("11"),45610939121890 : parseInt("111"),45610939154658 : parseInt("11"),45610939187426 : parseInt("11"),45610939220194 : parseInt("11"),45610939252962 : parseInt("11"),};
window._RestockRocketConfig.variantsPreorderCount = {45610939089122 : parseInt(""),45610939121890 : parseInt(""),45610939154658 : parseInt(""),45610939187426 : parseInt(""),45610939220194 : parseInt(""),45610939252962 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {45610939089122 : null,45610939121890 : null,45610939154658 : null,45610939187426 : null,45610939220194 : null,45610939252962 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {45610939089122 : parseInt(""),45610939121890 : parseInt(""),45610939154658 : parseInt(""),45610939187426 : parseInt(""),45610939220194 : parseInt(""),45610939252962 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {45610939089122 : null,45610939121890 : null,4561093915) or email (- -7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/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
// 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 translation data in metafi[email protected]
At.getTime();
if (age ) where on of the team will be more than happy to help.- 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')
function applyTranslations(settings) {
try {
// Skip translation logic entirely if multi-language is not enProjektRide Bike Shop Edinburgh
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(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'
};
- ed 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)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'index' && (settings.show_button_on_index || settings.preorder_index_enabled)) {
createRestockRocketScript(
s();
}
// 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 (hasUpdates) {
console.debug('STOQ - cart selling plans updated successfully');
} else {
console.debug('STOQ - no cart selling plan updates needed');
}
})
.catch(error =
Open navigation menu
Open search bar
lse};
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":[55569933140351,55569712382335,55569712415103,55569712480639,55569933173119,55570017616255,55569933074815,55570017550719,55569712447871,55569933107583,55570017583487],"product_variants_source":"custom","name":"Preorder","preorder_button_text":"Preorder","preorder_button_description":"Note: This is a preorder. Items will ship based on the estimated delivery date.","preorder_button_description_background_color":"#ebebeb","preorder_button_description_text_color":"#000000","preorder_button_description_border_radius":10,"preorder_button_description_show_quantity_limit":false,"preorder_button_description_quantity_limit_suffix":" units available for preorder","preorder_button_description_shipping_text_prefix":"Shipping: ","delivery_exact_time
ProjektRide Individual Part Fitting Price List (parts not included)
":null,"delivery_after_n_intervals":null,"delivery_at":"2025-07-26T09:20:18.169Z","delivery_type":"asap","quantity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"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,"sh
ipping_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_charge_amount":null,"billing_checkout_charge_percentage":"100.0","billing_at":"2025-07-26T09:20:38.472Z","billing_after_n_intervals":7,"billing_after_interval_type":"day","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"billing_title":"Full payment","billing_description":null,"discount_text":"Save {{ discount }}","shopify_selling_plan_id":713071886719,"is_default":true,"type":"full","translations":{}}],"require_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preor
Increase quantity
der terms and conditions for this product.","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","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,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true}];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,"quantityLimitDisable
d":false},"type":"hijack","css_config":null,"js_config":null,"created_at":"2025-07-26T09:16:04.076Z","updated_at":"2025-07-26T09:16:04.076Z"}];window._RestockRocketConfig.obfuscateInventoryQuantity = false;window._RestockRocketConfig.product = {"id":7647665127650,"title":"SKS RACEBLADE PRO MUDGUARD SET","handle":"sks-raceblade-pro-mudguard-set","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan\u003ePerfect for someone looking for mudguards to fit a road bike that doesn't have any fixing points. The great thing with these is that they only take a couple of minutes to fit so you can remove on sunny days!\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe ultimate clip-on mudguard set for road bikes. Raceblade set for max. tyre width up to 25mm, Raceblade XL (Please see separately) up to 32mm. The smart, double-hinged quick release fitting system also fits aero forks and is compatible with disc brakes. Mudg
New Bikes
uards can be perfectly adapted to the radius of the wheel by adjusting the length of the stays. Superlight extra long mud flaps give additional spray protection. Includes adhesive protection kit to avoid damaging the paintwork.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMudguard length, including mud flaps:\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eFront 519mm\u003cbr data-mce-fragment=\"1\"\u003eRear 680mm\u003c\/p\u003e","published_at":"2022-03-16T16:49:10+00:00","created_at":"2022-03-16T16:49:08+00:00","vendor":"ProjektRide","type":"","tags":["Mudguards"],"price":5099,"price_min":5099,"price_max":5099,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":42603337056482,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"SKMRBP","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"SKS RACEBLADE PRO MUDGUARD SET","public_title":null,"options":["Default Title"],"price":5099,"weight":500,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-03-16at16.45.04.png?v=1647449351"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-03-16at16.45.04.png?v=1647449351","options":["Title"],"media":[{"alt":null,"id":29467548385506,"position":1,"preview_image":{"aspect_ratio":1.009,"height":957,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-03-16at16.45.04.png?v=1647449351"},"aspect_ratio":1.009,"height":957,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-03-16at16.45.04.png?v=1647449351","width":966}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003csp
an\u003ePerfect for someone looking for mudguards to fit a road bike that doesn't have any fixing points. The great thing with these is that they only take a couple of minutes to fit so you can remove on sunny days!\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe ultimate clip-on mudguard set for road bikes. Raceblade set for max. tyre width up to 25mm, Raceblade XL (Please see separately) up to 32mm. The smart, double-hinged quick release fitting system also fits aero forks and is compatible with disc brakes. Mudguards can be perfectly adapted to the radius of the wheel by adjusting the length of the stays. Superlight extra long mud flaps give additional spray protection. Includes adhesive protection kit to avoid damaging the paintwork.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMudguard length, including mud flaps:\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eFront 519mm\u003cbr data-mce-fragment=\"1\"\u003eRear 680mm\u003c\/p\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {42603337056482 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {42603337056482 : parseInt("1"),};
window._RestockRocketConfig.variantsPreorderCount = {42603337056482 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {42603337056482 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {42603337056482 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {42603337056482 : null,};
window._RestockRocketConfig.variantsShippingText = {42603337056482 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {42603337056482 : null,};
window._RestockRocketConfig.selected_variant_id = 42603337056482;
window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available;window._RestockRocketConfig.scriptUr
Shop All New Bikes
lProduct = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/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 c| Quantity }
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 |
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')
function applyTranslations(settings) {
try {
// Skip translation logic entirely if multi-language is not enabled
if (!settings || | 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 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)) {
cre{
console.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 => {
| < |
|
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| ck-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: | 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{(0)}100%{-webkit-transform:translateX(100%)}}
|
| |
|
window.appBlockPlacements ||= [];
if (window.klarnaAppBlocksManager) {
window.klarnaAppBlocksManager.push({
productVariants: [{"id":46007588552930,"title":"Black","option1":"Black","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Restrap Frame Strap - Black","public_title":"Black","options":["Black"],"price":1999,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":46007588585698,"title":"Orange","option1":"Orange","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Restrap Frame Strap - Orange","public_title":"Orange","options":["Orange"],"price":1999,"weight":0,"compare_at_price":null,"inven
tory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],
templateName: 'product',
dataKey: 'top-strip-promotion-badge',
storefrontCurrency: 'GBP',
storefrontCountry: 'GB',
storefrontLanguage: 'en',
shopLocale: 'en',
shopDomain: 'projektride.co.uk',
variantPrice: '1999',
cartPrice: '0',
selector: 'shopify-osm-ASUorQUNvQS9uckFQO__klarna_on_site_messaging_app_block_8gNReH',
topPadding: '0',
bottomPadding: '0',
});
} else {
window.appBlockPlacements.push({
productVariants: [{"id":46007588552930,"title":"Black","option1":"Black","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Restrap Frame Strap - Black","public_title":"Black","options":["Black"],"price":1999,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selli | | | |
|
| | BikesSee More |
|
Shop All New Bikes|
Genesis|
|
Singular |
| |
|
| | | |
|
| | | |
|
| | < | < |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | |
Frames | Parts & Components
See More
Shop by Brand|
|
| BrandsSee More |
|
alpha-15: rgba(255, 255, 255, 0.15);
--text-alpha-60: rgba(255, 255, 255, 0.6);
--text-alpha-85: rgba(255, 255, 255, 0.85);
}
.footer-content__logo__image { width: 170px; }Hope
|
Enve |
|
Cockpit | See More
|
Handlebars