Lights

< Cockpit

Handlebars
  • Tools & Maintenance Complete Brakes
  • Customer Reviews ★★★★★
  • 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 -
      • See More
      • Bottles and Cages
      • Have no doubt, The fourth generation of Ass Savers clip-on mudguards is your new best friend. Easy to hook up with, never being a burden and always there to cover your back, no matter what. < Bags and Transportation Early Rider/Locks
      • All - New - Bikes / Front Suspensionled","spo-notify-me-disabled"],"price":799,"price_min":799,"price_max":799,"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":43727599304930,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"PREA16122022.2695","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Ass savers saddle mounted mudguard","public_title":null,"options":["Default Title"],"price":799,"weight":200,"compare_at_price":null,"inventory_management":"shopify","barcode":"7350072560715","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/ass-saver-regular-black-rear-saddle-mudguard_900x_7d21d071-bef3-42de-b382-756b087352f1.webp?v=1672760062","\/\/projektride.co.uk\/cdn\/shop\/products\/ass-saver-big-gravel-mounted-saddle-mudguard_1300x-e1522680093573.jpg?v=1672760063","\/\/projektride.co.uk\/cdn\/shop\/Second-Hand Bikes
      • ,"height":864,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/ass-saver-big-gravel-mounted-saddle-mudguard_1300x-e1522680093573.jpg?v=1672760063","width":864},{"alt":null,"id":31383462150370,"position":3,"preview_image":{"aspect_ratio":0.664,"height":1087,"width":722,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/AAE6D157-CD1F-4D34-B2E5-248AAC4E4029_1_105_c.jpg?v=1672760063"},"aspect_ratio":0.664,"height":1087,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/AAE6D157-CD1F-4D34-B2E5-248AAC4E4029_1_105_c.jpg?v=1672760063","width":722}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003eWhether you commute to work or race in the UCI World tour, the Ass Saver Regular saddle mudguard will keep your butt dry and dramatically increase the comfort on cold and wet rides. \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cem data-mce-fragment=\"1\"\u003e\u003c\/em\u003eTheSee More £700.00Bike Packing
      •     < Bags and Transportation
      SKU: FMSUBC252K Phone Holders
  • < window.appBlockPlacements ||= []; if (window.klarnaAppBlocksManager) { window.klarnaAppBlocksManager.push({ productVariants: [{"id":43725371572450,"title":"Extra Small","option1":"Extra Small","option2":null,"option3":null,"sku":"FMSUBC250K","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Surly Bridge Club Frameset - Black - Extra Small","public_title":"Extra Small","options":["Extra Small"],"price":70000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":43725371605218,"title":"Small","option1":"Small","option2":null,"option3":null,"sku":"FMSUBC251K","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Surly Bridge Club Frameset - Black - Small","public_title":"Small","options":["Small"],"price":70000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":43725371637986,"title":"Medium","option1":"Medium","option2":null,"option3":null,"sku":"FMSUBC252K","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Surly Bridge Club Frameset - Black - Medium","public_title":"Medium","options":["Medium"],"price":70000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":43725371670754,"title":"Large","option1":"Large","option2":null,"option3":null,"sku":"FMSUBC253K","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Surly Bridge Club Frameset - Black - Large","public_title":"Large","options":["Large"],"price":70000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":43725371703522,"title":"Extra Large","option1":"Extra Large","option2":null,"option3":null,"sku":"FMSUBC254K","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Surly Bridge Club Frameset - Black - Extra Large","public_title":"Extra Large","options":["Extra Large"],"price":70000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}], templateName: 'product', dataKey: 'credit-promotion-badge', storefrontCurrency: 'GBP', storefrontCountry: 'GB', storefrontLanguage: 'en', shopLocale: 'en', shopDomain: 'projektride.co.uk', variantPrice: '70000', cartPrice: '0', selector: 'shopify-osm-AeUFqblRCQ3NVY25nT__eba47704-3c39-4d06-b261-8d0444fc671f', topPadding: '0', bottomPadding: '0', }); } else { window.appBlockPlacements.push({ productVariants: [{"id":43725371572450,"title":"Extra Small","option1":"Extra Small","option2":null,"option3":null,"sku":"FMSUBC250K","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Surly Bridge Club Frameset - Black - Extra Small","public_title":"Extra Small","options":["Extra Small"],"price":70000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":43725371605218,"title":"Small","option1":"Small","option2":null,"option3":null,"sku":"FMSUBC251K","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Surly Bridge Club Frameset - Black - Small","public_title":"Small","options":["Small"],"price":70000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}
    Lights
    • < SizeRider Care
    • < a class="product__media product__media--featured" href="/products/hire-smith-convoy-helmet" title="Hire Lazer Compact Helmet" aria-label="Hire Lazer Compact Helmet" style="background-image: url(//projektride.co.uk/cdn/shop/files/my2023_tempo-kineticore-black_right_1400x1011800x600-removebg-preview_1_600x.png?v=1747484784)">
    • Seat Posts & ClampsHire Lazer Compact HelmetSee More> >
    See MorePedals
  • Hire Lazer Compact HelmetCleaners, Degreasers and Lubrication
  • a href="https://projektride.co.uk/collections/bikes?filter.p.vendor=Kona,KONA,Kona+Bikes,kona" class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/KonaLogoOrbitVertBlack_360x.png?v=1672678563); width: 120px; padding-top: 112.5%;">
    >
  • Logo image
  • a href="https://projektride.co.uk/products/vecnum-freequence-suspension-stem-1?_pos=1&_sid=18e478687&_ss=r" class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/IMG_0247_360x.png?v=1693300758); width: 120px; padding-top: 100.0%;">> Logo image
  • >
    Logo image

    { "@context": "http://schema.org", "@type": "Organization", "name": "ProjektRide","sameAs": [ null, null, null, null, null, null, null ], "url": "https:\/\/projektride.co.uk" } <
    <

    Header Image
    Pedals
    Components
    E-bike Batteries and chargers

    <ssfully'); } 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(); }
    Clear filters ( 0 SKU: CNHG95116 ) .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/asse ight: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-di Clear filters ({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 .countdo -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%)}}
    10 SpeedHope Tech 4 X2 (dose not include rotors)
    []
    £115.00<
    div class="featured-image__bg bg-pos-center-center" style="background-image: url('//projektride.co.uk/cdn/shop/files/2571D9FF-E9AE-4004-9A55-C7FD4DD999D6_2048x.jpg?v=1640941114');">
    Hope TR Stem ocketConfig.cachedOutOfStockVariantIds = { out_of_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2025-12-14T17:34:31Z","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":"2025-12-14T17:36:30Z","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":[55569933140351,55569712382335,55569712415103,55569712480639,55569933173119,55570017616255,55569933074815,55570017550719,55569712447871,55569933107583,55570017583487],"product_variant s_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":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,"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_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 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}];window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article","blog"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hijack","css_config":null,"js_config":null,"created_at":"2025-07-26T09:16:04.076Z","updated_at":"2025-07-26T09:16:04.076Z"}];window._RestockRocketConfig.obfuscateInventoryQuantity = false;window._RestockRocketConfig.product = {"id":7477730738402,"title":"Shimano MTB Deore XT - 10 Speed Chain CN-HG95","handle":"shimano-deore-xt-10-speed-chain-cn-hg95","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cul class=\"description-overview\"
    data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eHyperglide (HG-X) series 10-speed directional Dyna-Sys compatible chain for use with 10-speed MTB drivetrains\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eHG-X Chain uses a directional design with specifically shaped inner and outer plates to optimise shifting over the chainset and cassette\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eOuter plate design has been developed to reduce the chance of chain suck\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eThe inner plate has been developed for better contact with gears providing smoother shifting under high load, giving efficient pedalling, increased rigidity and near silent running\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eDurability is assured through a chromising treatment on link pins, and the heat treatment of rollers, pins, and plates\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eOpen design of inner links increase mud shedding ability\u00 3c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eMushrooming of the pins gives unsurpassed side-plate retention, enabling the chain to far exceed the BS\/ISO standard for breaking force\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eChain is optimised for Shimano 10-speed HG-X MTB drivetrains only\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eSil-Tec surface treatment technology (PTFE plating) that is smooth running and increases durability\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eCorrosion-resistant Zinc-alloy plating and grey finish on inner and outer plates\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e114 links, 273 grams\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cul class=\"attributesSpecification\" data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cdiv class=\"label\" data-mce-fragment=\"1\"\u003eSpeed\u003c\/div\u003e\n\u003cdiv class=\"value\" data-mce-fragment=\"1\"\u003e10 Speed\u003c\/div\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e","
    published_at":"2021-12-17T13:27:09+00:00","created_at":"2021-12-17T13:27:08+00:00","vendor":"Shimano","type":"","tags":["components","Gears \u0026 Drivetrain","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":3499,"price_min":3499,"price_max":3499,"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":42170955464930,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"CNHG95116","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Shimano MTB Deore XT - 10 Speed Chain CN-HG95","public_title":null,"options":["Default Title"],"price":3499,"weight":100,"compare_at_price":null,"inventory_management":"shopify","barcode":"4524667984665","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2021-12-17at13.26.01.png?v=1639747630"],"featured_im age":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2021-12-17at13.26.01.png?v=1639747630","options":["Title"],"media":[{"alt":null,"id":28866007498978,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1178,"width":1178,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2021-12-17at13.26.01.png?v=1639747630"},"aspect_ratio":1.0,"height":1178,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2021-12-17at13.26.01.png?v=1639747630","width":1178}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cul class=\"description-overview\" data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003eHyperglide (HG-X) series 10-speed directional Dyna-Sys compatible chain for use with 10-speed MTB drivetrains\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eHG-X Chain uses a directional design with specifically shaped inner and outer plates to optimise shifting over the chainset and cassette\u003c 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.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 !== '') { se ttings[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.them
    e.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) { 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:loHope TR Stemaded', { 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 <
    .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-desc ription{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:centerPurple}.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:12p
    x 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:tra nslateX(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%)}} Red