This site has limited support for your browser. We recommend switching to Edge, Chrome, Safari, or Firefox.

Cart

Header Image

All Products

Custom Builds
See More
  • FAQ
  • I'm looking to find out more information about a product, where can I find this? [email protected]
  • ) where on of the team will be more than happy to help. ProjektRide Bike Shop Edinburgh
  • If the item is showing in stock, we aim to post the product within 24 hours. Please allow 5 working days to receive the item.
  • Mon - Fri: 09:00 - 18:30
    Edinburgh
    EH9 1QN
    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:27:02.312Z","enable_app":true,"enable_signup_widget":false,"storefront_button_text":"Notify me when available","storefront_button_text_color":"#FFFFFF","storefront_button_background_color":"#202223","storefront_form_header":"Notify me","storefront_form_description":"Get a notification as soon as this product is back in stock by signing up below!","storefront_form_button_text":"Notify me when available","storefront_form_button_text_color":"#FFFFFF","storefront_form_button_background_color":"#202223","storefront_form_terms":"Promise we won't spam. You'll only receive notifications for this product.","storefront_form_error":"Please enter a valid email address","storefront_form_success":"Thank you! We will notify you when the product is available.","enable_powered_by":true,"show_button_on_preorder":true,"sms_enabled":false,"email_enabled":true,"storefront_button_disable_tag":"rocket-hide","theme_config":{},"storefront_form_email_placeholder":"Email address","storefront_form_phone_placeholder":"SMS","storefront_form_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":"Quantity","enable_alerts":tENVE M5 Pro MTB Wheelsetrue,"sms_allowed":false,"email_allowed":true,"collect_promotion_consent_default":true,"insert_button_after_selector":null,"insert_button_after_selector_type":"afterend","storefront_button_position_type":"float-right","storefront_form_duplicate_error":"You've already subscribed for alerts to this product.","storefront_mixed_cart_error":"This item needs to be purchased separately. Please check out or clear your cart before adding this item.","storefront_error_heading":"Error","default_locale":"en","collection_page_button_text_color":"#FFFFFF","collection_page_button_background_color":"#202223","show_button_if_any_out_of_stock":false,"show_button_if_any_variant_out_of_stock_collection":false,"show_button_on_index":false,"insert_button_after_selector_collection":null,"insert_button_after_selector_index":null,"push_enabled":false,"push_allowed":false,"storefront_form_push_label":"Push","storefront_form_push_description":"Click 'Allow' to be notified via push notification","storefront_form_push_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 notified when it's restoc ked again by entering your details below!","preorder_enabled":true,"preorder_buy_button_selector":null,"preorder_add_to_cart_button_selector":"","preorder_badge_selector":"","preorder_button_out_of_stock_text":"Out of stock","preorder_button_add_to_cart_text":"Add to cart","preorder_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_enabled":false,"preorder_collection_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_index_enabled":false,"preorder_index_form_selector":"form[action*=\"/cart/add\"]","preorder_index_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_page_enabled":false,"preorder_page_form_selector":"form[action*=\"/cart/add\"]","preorder_page_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_search_enabled":false,"preorder_search_form_selector":"form[action*=\"/cart/add\"]","preorder_search_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_collection_badge_selector":null,"preorder_index_badge_selector":null,"preorder_page_badge_selector":null,"preorder_search_badge_selector":null,"preorder_badge_selector_type":"afterend","preorder_collection_badge_selector_type":"afterend","preorder_button_child_selector":"span","preorder_button_disclaimer_insert_selector":"","preorder_button_disclaimer_insert_selector_type":"afterend","preorder_payment_insert_selector":"","preorder_payment_insert_selector_type":"afterend","preorder_price_container_selector":"","preorder_price_container_selector_insert_type":"afterend","preorder_terms_insert_selector":"","preorder_terms_insert_selector_type":"afterend","preorder_original_price_selector":"","preorder_price_format":"{{amount}} {{currency}}","show_badge_if_any_variant_is_preorder":false,"enable_console_debug":false,"inline_form_enabled":false,"inline_form_selector":null,"inline_form_selector_type":"afterend","storefront_form_prefill_customer":true,"market_setup_type":"single_market","shop trong\u003eCare\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eHand wash, using a mild diluted soap if necessary. Afterwards, let the Frame bag air dry.\u003cbr\u003eDo not machine wash, machine dry, or iron.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e","published_at":"2023-06-25T09:58:32+01:00","created_at":"2023-06-25T09:58:32+01:00","vendor":"ProjektRide","type":"bag","tags":["Apidura","Bags and Transportation","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":9300,"price_min":9300,"price_max":10200,"available":true,"price_varies":true,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":44140279791842,"title":"3L","option1":"3L","option2":null,"option3":null,"sku":"MWS","requires_shipping":true,"taxable":true,"featured_image":{"id":39357223141602,"product_id":8108866765026,"position":5,"created_at":"2023-06-25T09:59:14+01:00","updated_at":"2023-06-25T09:59:14+01:00","alt":null,"width":1258,"height":9 58,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at09.59.08.png?v=1687683554","variant_ids":[44140279791842]},"available":true,"name":"EXPEDITION FRAME PACK - 3L","public_title":"3L","options":["3L"],"price":9300,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","featured_media":{"alt":null,"id":31960223121634,"position":5,"preview_image":{"aspect_ratio":1.313,"height":958,"width":1258,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at09.59.08.png?v=1687683554"}},"requires_selling_plan":false,"selling_plan_allocations":[]},{"id":44140279824610,"title":"4.5L","option1":"4.5L","option2":null,"option3":null,"sku":"MWM","requires_shipping":true,"taxable":true,"featured_image":{"id":39357223174370,"product_id":8108866765026,"position":6,"created_at":"2023-06-25T09:59:29+01:00","updated_at":"2023-06-25T09:59:29+01:00","alt":null,"width":1258,"height":958,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at09.59.23.pn
    g?v=1687683569","variant_ids":[44140279824610]},"available":true,"name":"EXPEDITION FRAME PACK - 4.5L","public_title":"4.5L","options":["4.5L"],"price":9500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","featured_media":{"alt":null,"id":31960223154402,"position":6,"preview_image":{"aspect_ratio":1.313,"height":958,"width":1258,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at09.59.23.png?v=1687683569"}},"requires_selling_plan":false,"selling_plan_allocations":[]},{"id":44140279857378,"title":"5.3L","option1":"5.3L","option2":null,"option3":null,"sku":"MWL","requires_shipping":true,"taxable":true,"featured_image":{"id":39357223207138,"product_id":8108866765026,"position":7,"created_at":"2023-06-25T09:59:43+01:00","updated_at":"2023-06-25T09:59:43+01:00","alt":null,"width":1258,"height":958,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at09.59.37.png?v=1687683583","variant_ids":[44140279857378]},"available":true,"name":"EXPEDITI ON FRAME PACK - 5.3L","public_title":"5.3L","options":["5.3L"],"price":9700,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","featured_media":{"alt":null,"id":31960223187170,"position":7,"preview_image":{"aspect_ratio":1.313,"height":958,"width":1258,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at09.59.37.png?v=1687683583"}},"requires_selling_plan":false,"selling_plan_allocations":[]},{"id":44140279890146,"title":"5L","option1":"5L","option2":null,"option3":null,"sku":"RWM","requires_shipping":true,"taxable":true,"featured_image":{"id":39357223239906,"product_id":8108866765026,"position":8,"created_at":"2023-06-25T10:00:16+01:00","updated_at":"2023-06-25T10:00:16+01:00","alt":null,"width":1258,"height":958,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at10.00.10.png?v=1687683616","variant_ids":[44140279890146]},"available":true,"name":"EXPEDITION FRAME PACK - 5L","public_title":"5L","options":["5L"],"price":9700,"weight":0,"com
    pare_at_price":null,"inventory_management":"shopify","barcode":"","featured_media":{"alt":null,"id":31960223219938,"position":8,"preview_image":{"aspect_ratio":1.313,"height":958,"width":1258,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at10.00.10.png?v=1687683616"}},"requires_selling_plan":false,"selling_plan_allocations":[]},{"id":44140279922914,"title":"6.5L","option1":"6.5L","option2":null,"option3":null,"sku":"RWL","requires_shipping":true,"taxable":true,"featured_image":{"id":39357223272674,"product_id":8108866765026,"position":9,"created_at":"2023-06-25T10:00:28+01:00","updated_at":"2023-06-25T10:00:28+01:00","alt":null,"width":1258,"height":958,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at10.00.23.png?v=1687683628","variant_ids":[44140279922914]},"available":true,"name":"EXPEDITION FRAME PACK - 6.5L","public_title":"6.5L","options":["6.5L"],"price":10200,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","featured_medi a":{"alt":null,"id":31960223252706,"position":9,"preview_image":{"aspect_ratio":1.313,"height":958,"width":1258,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at10.00.23.png?v=1687683628"}},"requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at09.51.18.png?v=1687683515","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at09.51.27.png?v=1687683515","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at09.51.44.png?v=1687683514","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at09.52.01.png?v=1687683514","\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at09.59.08.png?v=1687683554","\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at09.59.23.png?v=1687683569","\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at09.59.37.png?v=1687683583","\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at10.00.10.png?v=1687683616
    bike.\u003c\/b\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003c\/h3\u003e\n\u003ch3\u003eTECHNICAL\u003c\/h3\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMaterials\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eThe frame bag is cut from a three-layer laminate fabric that was developed specifically for Apidura. The material is lightweight, and is highly resistant to tears and abrasion. Notably, it’s welded together at the seams, creating a watertight seal that ensures complete waterproofing.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eCare\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eHand wash, using a mild diluted soap if necessary. Afterwards, let the Frame bag air dry.\u003cbr\u003eDo not machine wash, machine dry, or iron.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {44140279791842 : "continue",44140279824610 : "continue",44140279857378 : "continue",44140279890146 : "continue",44140279922914 : "continue",}; window._RestockRocketConfig.variantsInventoryQuantity = {44140279791842 : parseInt("1"),44140279824610 : parseInt("1"),44140279857378 : parseInt("1"),44140279890146 : parseInt("1"),44140279922914 : parseInt("1"),}; window._RestockRocketConfig.variantsPreorderCount = {44140279791842 : parseInt(""),44140279824610 : parseInt(""),44140279857378 : parseInt(""),44140279890146 : parseInt(""),44140279922914 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {44140279791842 : null,44140279824610 : null,44140279857378 : null,44140279890146 : null,44140279922914 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {44140279791842 : parseInt(""),44140279824610 : parseInt(""),44140279857378 : parseInt(""),44140279890146 : parseInt(""),44140279922914 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {44140279791842 : null,44140279824610 : null,44140279857378 : null,44140279890146 : null,44140279922914 : null,}; window._RestockRocketCo nfig.variantsShippingText = {44140279791842 : "",44140279824610 : "",44140279857378 : "",44140279890146 : "",44140279922914 : "",}; window._RestockRocketConfig.variantsShippingTextForMarket = {44140279791842 : null,44140279824610 : null,44140279857378 : null,44140279890146 : null,44140279922914 : null,}; window._RestockRocketConfig.selected_variant_id = 44140279791842; window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available;window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019afd95-59d1-7fb0-bcc3-df824a322e94/restock-rocket-shopify-403/assets/restockrocket-product.js' window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019afd95-59d1-7fb0-bcc3-df824a322e94/restock-rocket-shopify-403/assets/restockrocket-collection.js' window._RestockRocketConfig.scriptHost = window._RestockRocke
    tConfig.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 metafield // Metafield hasn't been backfilled yet - force refresh console.debug('STOQ - multi-language enabled but no translation data i n cache, fetching fresh'); return null; } // Translations object exists in metafield - cache is valid // If current locale isn't translated, applyTranslations will gracefully use default locale from base fields if (window._RestockRocketConfig.normalizedLocale && !Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) { console.debug('STOQ - locale not explicitly translated, will use default language from cache'); } // Don't return null - continue using cache even for untranslated locales } 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 || ENVE M5 Pro MTB Wheelset!settings.multi_language_enabled) { return settings; } if (!settings.translations) { console.debug('STOQ - No translations found, skipping translation'); return settings; } const normalizedLocale = window._RestockRocketConfig.normalizedLocale; const translations = settings.translations; if (!normalizedLocale) { // No matching locale has translations; drop payload to save memory console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {})); delete settings.translations; return settings; } console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`); const translatedFields = translations[normalizedLocale]; if (translatedFields && typeof translatedFields === 'object') { Object.keys(translatedFields).forEach(function(key) { const value = translatedFields[key]; if (value !== null && value !== undefined && value !== '') { settings[key] = value; } }); } else { console.debug('STOQ - No translated fields found for locale:', normalizedLocale); } delete settings.translations; return settings; } catch (e) { console.debug('STOQ - error applying translations:', e); return settings; } } // 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' }; 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('STOQ - failed to load settings:', error); } }) .catch(function(e) { console.error(e) }) } function initializeScripts(settings) { £2,500.00 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(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'search' && (settings.show_button_on_search
    || settings.preorder_search_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'page' && (settings.show_button_on_page || settings.preorder_page_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'product') { createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else { 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 => { 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); }); } else if (attempt
    < maxRetries) { console.debug(`STOQ - API not ready, retry ${attempt}/${maxRetries}`); setTimeout(() => attemptCartCheck(attempt + 1), retryDelay); } else { console.debug('STOQ - API not loaded after max retries, skipping cart selling plan check'); } } attemptCartCheck(); }
    ENVE M6 Mountain Handlebar - 31.8mm .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-countdo wn-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-roc